mirror of
https://github.com/orionprotocol/sdk.git
synced 2026-03-14 06:02:36 +03:00
Referral: Add invite code
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@orionprotocol/sdk",
|
||||
"version": "0.19.70",
|
||||
"version": "0.19.70-rc1",
|
||||
"description": "Orion Protocol SDK",
|
||||
"main": "./lib/index.cjs",
|
||||
"module": "./lib/index.js",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {fetchWithValidation} from 'simple-typed-fetch';
|
||||
import { fetchWithValidation } from 'simple-typed-fetch';
|
||||
import {
|
||||
errorSchema,
|
||||
miniStatsSchema,
|
||||
@@ -10,9 +10,10 @@ import {
|
||||
ratingSchema,
|
||||
claimInfoSchema,
|
||||
aggregatedHistorySchema,
|
||||
inviteCodeLinkSchema,
|
||||
contractsAddressesSchema,
|
||||
} from './schemas/index.js';
|
||||
import {SupportedChainId} from "../../types.js";
|
||||
import contractsAddressesSchema from './schemas/contractsAddressesSchema.js';
|
||||
import type { SupportedChainId } from '../../types.js';
|
||||
|
||||
type CreateLinkPayloadType = {
|
||||
referer: string
|
||||
@@ -24,6 +25,12 @@ type ClaimRewardsPayload = {
|
||||
chain_id: number
|
||||
};
|
||||
|
||||
type SubmitInviteCodekWithLinkPayload = {
|
||||
inviteCode: string
|
||||
referer: string
|
||||
linkOption: number
|
||||
};
|
||||
|
||||
type SubscribePayloadType = {
|
||||
ref_target: string
|
||||
referral: string
|
||||
@@ -34,7 +41,7 @@ type SignatureType = {
|
||||
};
|
||||
|
||||
class ReferralSystem {
|
||||
private readonly apiUrl: string;
|
||||
private readonly apiUrl: string
|
||||
|
||||
get api() {
|
||||
return this.apiUrl;
|
||||
@@ -48,6 +55,8 @@ class ReferralSystem {
|
||||
this.createReferralLink = this.createReferralLink.bind(this);
|
||||
this.subscribeToReferral = this.subscribeToReferral.bind(this);
|
||||
this.getMyReferral = this.getMyReferral.bind(this);
|
||||
this.getMyInviteCodeAndLink = this.getMyInviteCodeAndLink.bind(this);
|
||||
this.submitInviteCodeWithLink = this.submitInviteCodeWithLink.bind(this);
|
||||
this.getGlobalAnalytics = this.getGlobalAnalytics.bind(this);
|
||||
this.getMiniStats = this.getMiniStats.bind(this);
|
||||
this.getRewardsMapping = this.getRewardsMapping.bind(this);
|
||||
@@ -73,6 +82,35 @@ class ReferralSystem {
|
||||
},
|
||||
});
|
||||
|
||||
getMyInviteCodeAndLink = (refererAddress: string) =>
|
||||
fetchWithValidation(
|
||||
`${this.apiUrl}/referer/invite/status2`,
|
||||
inviteCodeLinkSchema,
|
||||
{
|
||||
headers: {
|
||||
'referer-address': refererAddress,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
submitInviteCodeWithLink = ({
|
||||
inviteCode,
|
||||
referer,
|
||||
linkOption,
|
||||
}: SubmitInviteCodekWithLinkPayload) =>
|
||||
fetchWithValidation(
|
||||
`${this.apiUrl}/referer/invite/submit-code2`,
|
||||
inviteCodeLinkSchema,
|
||||
{
|
||||
headers: {
|
||||
'Content-type': 'application/json',
|
||||
'invite-code': inviteCode,
|
||||
},
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ referer, link_option: linkOption }),
|
||||
}
|
||||
);
|
||||
|
||||
getDistinctAnalytics = (refererAddress: string) =>
|
||||
fetchWithValidation(
|
||||
`${this.apiUrl}/referer/view/distinct-analytics`,
|
||||
@@ -130,13 +168,11 @@ class ReferralSystem {
|
||||
'Content-type': 'application/json',
|
||||
},
|
||||
method: 'POST',
|
||||
body: JSON.stringify({payload, signature}),
|
||||
body: JSON.stringify({ payload, signature }),
|
||||
}
|
||||
);
|
||||
|
||||
createReferralLink = (
|
||||
payload: CreateLinkPayloadType
|
||||
) =>
|
||||
createReferralLink = (payload: CreateLinkPayloadType) =>
|
||||
fetchWithValidation(`${this.apiUrl}/referer/create2`, linkSchema, {
|
||||
headers: {
|
||||
'Content-type': 'application/json',
|
||||
@@ -145,9 +181,7 @@ class ReferralSystem {
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
|
||||
subscribeToReferral = (
|
||||
payload: SubscribePayloadType
|
||||
) =>
|
||||
subscribeToReferral = (payload: SubscribePayloadType) =>
|
||||
fetchWithValidation(
|
||||
`${this.apiUrl}/referer/subscribe2`,
|
||||
linkSchema,
|
||||
@@ -166,7 +200,10 @@ class ReferralSystem {
|
||||
`${this.apiUrl}/referer/ve/rating-table-leaderboard?chain_id=${chainId}`,
|
||||
ratingSchema,
|
||||
{
|
||||
headers: refererAddress !== undefined ? {'referer-address': refererAddress} : {},
|
||||
headers:
|
||||
refererAddress !== undefined
|
||||
? { 'referer-address': refererAddress }
|
||||
: {},
|
||||
},
|
||||
errorSchema
|
||||
);
|
||||
@@ -201,7 +238,7 @@ class ReferralSystem {
|
||||
const queryParams: Record<string, string | number> = {
|
||||
n_per_page: itemPerPage,
|
||||
page,
|
||||
suppress_error: 1
|
||||
suppress_error: 1,
|
||||
};
|
||||
|
||||
if (chainId !== undefined) {
|
||||
@@ -212,7 +249,9 @@ class ReferralSystem {
|
||||
queryParams['history_filter'] = encodeURIComponent(types.join(','));
|
||||
}
|
||||
|
||||
const queryString = Object.entries(queryParams).map(([k, v]) => `${k}=${v}`).join('&')
|
||||
const queryString = Object.entries(queryParams)
|
||||
.map(([k, v]) => `${k}=${v}`)
|
||||
.join('&');
|
||||
|
||||
return fetchWithValidation(
|
||||
`${this.apiUrl}/referer/view/aggregated-history?${queryString}`,
|
||||
@@ -224,8 +263,8 @@ class ReferralSystem {
|
||||
},
|
||||
errorSchema
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export * as schemas from './schemas/index.js';
|
||||
export {ReferralSystem};
|
||||
export { ReferralSystem };
|
||||
|
||||
@@ -9,3 +9,4 @@ export { default as ratingSchema } from './ratingSchema.js';
|
||||
export { default as claimInfoSchema } from './claimInfoSchema.js';
|
||||
export { default as aggregatedHistorySchema } from './aggregatedHistorySchema.js';
|
||||
export { default as contractsAddressesSchema } from './contractsAddressesSchema.js';
|
||||
export { default as inviteCodeLinkSchema } from './inviteCodeLinkSchema.js';
|
||||
|
||||
24
src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts
Normal file
24
src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
const inviteCodeLinkSchema = z.object({
|
||||
link: z
|
||||
.object({
|
||||
referer: z.string(),
|
||||
ref_link: z.string(),
|
||||
option: z.number(),
|
||||
})
|
||||
.nullable(),
|
||||
invite: z
|
||||
.object({
|
||||
code: z.string(),
|
||||
data: z.null(),
|
||||
limits: z.object({
|
||||
tag: z.string(),
|
||||
max_invites: z.number(),
|
||||
max_ref_depth: z.number(),
|
||||
}),
|
||||
})
|
||||
.nullable(),
|
||||
});
|
||||
|
||||
export default inviteCodeLinkSchema;
|
||||
Reference in New Issue
Block a user