diff --git a/package.json b/package.json index ec6f57c..baca832 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/services/ReferralSystem/index.ts b/src/services/ReferralSystem/index.ts index 0a8aff0..7ce4cc4 100644 --- a/src/services/ReferralSystem/index.ts +++ b/src/services/ReferralSystem/index.ts @@ -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 = { 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 }; diff --git a/src/services/ReferralSystem/schemas/index.ts b/src/services/ReferralSystem/schemas/index.ts index c181860..f1a1391 100644 --- a/src/services/ReferralSystem/schemas/index.ts +++ b/src/services/ReferralSystem/schemas/index.ts @@ -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'; diff --git a/src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts b/src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts new file mode 100644 index 0000000..78ca8ac --- /dev/null +++ b/src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts @@ -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;