Added new ReferralSystem service (#30)

* Added new ReferralSystem service

* Version conflict resolved after rebase

* Fixed http header because of backend updates

* Updated package version

Co-authored-by: kuduzow <admin@intocode.ru>
This commit is contained in:
Kuduzow Akhmad
2022-12-15 12:03:45 +03:00
committed by GitHub
parent 363dafc45c
commit 745bec7da5
6 changed files with 106 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@orionprotocol/sdk",
"version": "0.15.22",
"version": "0.15.24-rc.0",
"description": "Orion Protocol SDK",
"main": "./lib/esm/index.js",
"module": "./lib/esm/index.js",

View File

@@ -8,6 +8,7 @@ import Exchange from './Exchange';
import FarmingManager from './FarmingManager';
import { chains, envs } from '../config';
import { isValidChainId } from '../utils';
import { ReferralSystem } from '../services/ReferralSystem';
const orionAnalyticsUrl = 'https://trade.orionprotocol.io';
@@ -49,6 +50,8 @@ export default class OrionUnit {
public readonly apiUrl: string;
public readonly referralSystem: ReferralSystem;
constructor(
chain: string,
env: string,
@@ -142,6 +145,7 @@ export default class OrionUnit {
this.orionAnalytics = new OrionAnalytics(orionAnalyticsUrl);
this.exchange = new Exchange(this);
this.farmingManager = new FarmingManager(this);
this.referralSystem = new ReferralSystem(`${options?.api ?? customApi}/referral-api/referer`);
}
get siblings() {

View File

@@ -0,0 +1,73 @@
import fetchWithValidation from '../../fetchWithValidation';
import distinctAnalyticsSchema from './schemas/distinctAnalyticsSchema';
import linkSchema from './schemas/linkSchema';
type CreateLinkPayloadType = {
referer: string;
link_option: number;
};
type SubscribePayloadType = {
ref_target: string;
referral: string;
}
type SignatureType = {
signature: string;
};
class ReferralSystem {
private apiUrl: string;
constructor(apiUrl: string) {
this.apiUrl = apiUrl;
this.getLink = this.getLink.bind(this);
this.getSubscribersList = this.getSubscribersList.bind(this);
this.createReferralLink = this.createReferralLink.bind(this);
this.subscribeToReferral = this.subscribeToReferral.bind(this);
}
getLink = (refererAddress: string) => fetchWithValidation(`${this.apiUrl}/view/link`, linkSchema, {
headers: {
'referer-address': refererAddress,
},
});
getSubscribersList = (refererAddress: string) => fetchWithValidation(
`${this.apiUrl}/view/distinct-analytics`,
distinctAnalyticsSchema,
{
headers: {
'referer-address': refererAddress,
},
},
);
createReferralLink = (payload: CreateLinkPayloadType, signature: SignatureType) => fetchWithValidation(
`${this.apiUrl}/create`,
linkSchema,
{
headers: {
'Content-type': 'application/json',
},
method: 'POST',
body: JSON.stringify({ payload, signature }),
},
);
subscribeToReferral = (payload: SubscribePayloadType, signature: SignatureType) => fetchWithValidation(
`${this.apiUrl}/subscribe`,
linkSchema,
{
headers: {
'Content-type': 'application/json',
},
method: 'POST',
body: JSON.stringify({ payload, signature }),
},
);
}
export * as schemas from './schemas';
export { ReferralSystem };

View File

@@ -0,0 +1,17 @@
import { z } from 'zod';
const distinctAnalyticsSchema = z.object({
referer: z.string(),
refs_info: z.array(
z.object({
referral_address: z.string(),
referral_earned_fees: z.number(),
referer_earned_fees: z.number(),
relative_ref_level: z.number(),
timestamp: z.number(),
}),
),
});
export default distinctAnalyticsSchema;

View File

@@ -0,0 +1,2 @@
export { default as linkSchema } from './linkSchema';
export { default as distinctAnalyticsSchema } from './distinctAnalyticsSchema';

View File

@@ -0,0 +1,9 @@
import { z } from 'zod';
const linkSchema = z.object({
referer: z.string(),
ref_link: z.string(),
option: z.number(),
});
export default linkSchema;