@opexa/portal-sdk 0.59.74 → 0.59.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1634 -1634
- package/dist/{chunk-5WRVWQBT.js → chunk-7APXFZ5G.js} +3 -3
- package/dist/chunk-7APXFZ5G.js.map +1 -0
- package/dist/{chunk-MU66ORJN.js → chunk-BDZPLMTL.js} +41 -12
- package/dist/chunk-BDZPLMTL.js.map +1 -0
- package/dist/{chunk-ROBGEUSE.js → chunk-WVFSGB7Y.js} +2 -2
- package/dist/chunk-WVFSGB7Y.js.map +1 -0
- package/dist/index.cjs +258 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -10
- package/dist/index.d.ts +11 -10
- package/dist/index.js +223 -133
- package/dist/index.js.map +1 -1
- package/dist/services/index.cjs +38 -9
- package/dist/services/index.cjs.map +1 -1
- package/dist/services/index.d.cts +6 -5
- package/dist/services/index.d.ts +6 -5
- package/dist/services/index.js +2 -2
- package/dist/{types-CN0_FZew.d.cts → types-kTe_j8tm.d.cts} +19 -4
- package/dist/{types-DEyr_e0e.d.ts → types-lZQpMvHU.d.ts} +19 -4
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-5WRVWQBT.js.map +0 -1
- package/dist/chunk-MU66ORJN.js.map +0 -1
- package/dist/chunk-ROBGEUSE.js.map +0 -1
|
@@ -39,5 +39,5 @@ function callIfFn(value, ...args) {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
export { callIfFn, gql, statusCodeToOperationError };
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
42
|
+
//# sourceMappingURL=chunk-WVFSGB7Y.js.map
|
|
43
|
+
//# sourceMappingURL=chunk-WVFSGB7Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/gql.ts","../src/utils/status-code-to-operation-error.ts","../src/utils/call-if-fn.ts"],"names":[],"mappings":";AAAO,SAAS,GAAA,CAAI,YAAkC,MAAA,EAAmB;AACxE,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,MAAM,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,EAAA,CAAG,KAAK,CAAA,IAAK,EAAA;AAElC,IAAA,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,GAAG,KAAK,CAAA,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,OAAO,IAAA,EAAK;AACpB;;;ACRO,SAAS,0BAAA,CACf,OACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,CAAA,GAAI,UAAU,KAAK,CAAA,GAAI,UAAU,KAAK,CAAA,GAAI,UAAU,GAAG,CAAA;AAE7D,EAAA,OAAO;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAA,EAAS,WAAW,CAAA,CAAE;AAAA,GACvB;AACD;AAEA,IAAM,SAAA,GAAuD;AAAA,EAC5D,GAAA,EAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,SAAS,aAAA,EAAc;AAAA,EACtD,GAAA,EAAK,EAAE,IAAA,EAAM,kBAAA,EAAoB,SAAS,cAAA,EAAe;AAAA,EACzD,GAAA,EAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAS,WAAA,EAAY;AAAA,EACnD,GAAA,EAAK,EAAE,IAAA,EAAM,cAAA,EAAgB,SAAS,WAAA,EAAY;AAAA,EAClD,GAAA,EAAK,EAAE,IAAA,EAAM,oBAAA,EAAsB,SAAS,iBAAA,EAAkB;AAAA,EAC9D,GAAA,EAAK,EAAE,IAAA,EAAM,qBAAA,EAAuB,SAAS,mBAAA,EAAoB;AAAA,EACjE,GAAA,EAAK,EAAE,IAAA,EAAM,yBAAA,EAA2B,SAAS,uBAAA;AAClD,CAAA;;;ACtBA,SAAS,WACR,KAAA,EACuC;AACvC,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AACzB;AAEO,SAAS,QAAA,CACf,UACG,IAAA,EACF;AACD,EAAA,IAAI,UAAA,CAAyB,KAAK,CAAA,EAAG;AACpC,IAAA,OAAO,KAAA,CAAM,GAAG,IAAI,CAAA;AAAA,EACrB,CAAA,MAAO;AACN,IAAA,OAAO,KAAA;AAAA,EACR;AACD","file":"chunk-WVFSGB7Y.js","sourcesContent":["export function gql(strings: TemplateStringsArray, ...values: unknown[]) {\r\n\tlet result = '';\r\n\r\n\tfor (const [index, string] of strings.entries()) {\r\n\t\tconst value = values.at(index) ?? '';\r\n\r\n\t\tresult = `${result}${string}${value}`;\r\n\t}\r\n\r\n\treturn result.trim();\r\n}\r\n","import type { HttpError, OperationError } from '../types/index.js';\r\n\r\nexport function statusCodeToOperationError(\r\n\tvalue: number,\r\n\tmessage?: string,\r\n): OperationError<HttpError> {\r\n\tconst e = ERROR_MAP[value] ? ERROR_MAP[value] : ERROR_MAP[500];\r\n\r\n\treturn {\r\n\t\tname: e.name,\r\n\t\tmessage: message ?? e.message,\r\n\t};\r\n}\r\n\r\nconst ERROR_MAP: Record<number, OperationError<HttpError>> = {\r\n\t400: { name: 'HttpBadRequest', message: 'Bad Request' },\r\n\t401: { name: 'HttpUnauthorized', message: 'Unauthorized' },\r\n\t403: { name: 'HttpForbidden', message: 'Forbidden' },\r\n\t404: { name: 'HttpNotFound', message: 'Not Found' },\r\n\t408: { name: 'HttpRequestTimeout', message: 'Request Timeout' },\r\n\t429: { name: 'HttpTooManyRequests', message: 'Too Many Requests' },\r\n\t500: { name: 'HttpInternalServerError', message: 'Internal Server Error' },\r\n};\r\n","function isFunction<Return, Args = never>(\r\n\tvalue: unknown | ((...args: Args[]) => Return),\r\n): value is (...args: Args[]) => Return {\r\n\treturn typeof value === 'function';\r\n}\r\n\r\nexport function callIfFn<Return, Args = never>(\r\n\tvalue: Return | ((...args: Args[]) => Return),\r\n\t...args: Args[]\r\n) {\r\n\tif (isFunction<Return, Args>(value)) {\r\n\t\treturn value(...args);\r\n\t} else {\r\n\t\treturn value;\r\n\t}\r\n}\r\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -2795,6 +2795,22 @@ var REFERRALS_QUERY = gql`
|
|
|
2795
2795
|
|
|
2796
2796
|
${REFERRAL_FRAGMENT}
|
|
2797
2797
|
`;
|
|
2798
|
+
var QUALIFIED_REFERRALS_QUERY = gql`
|
|
2799
|
+
query QualifiedReferrals($first: Int, $after: Cursor, $filter: ReferralFilterInput) {
|
|
2800
|
+
member {
|
|
2801
|
+
referrals(first: $first, after: $after, filter: $filter) {
|
|
2802
|
+
edges {
|
|
2803
|
+
node {
|
|
2804
|
+
... on Referral {
|
|
2805
|
+
id
|
|
2806
|
+
}
|
|
2807
|
+
}
|
|
2808
|
+
}
|
|
2809
|
+
totalCount
|
|
2810
|
+
}
|
|
2811
|
+
}
|
|
2812
|
+
}
|
|
2813
|
+
`;
|
|
2798
2814
|
var UPLINES_BY_NAME_QUERY = gql`
|
|
2799
2815
|
query UplinesByName($search: String!, $first: Int) {
|
|
2800
2816
|
uplinesByName(search: $search, first: $first) {
|
|
@@ -4522,10 +4538,11 @@ var AuthService = class {
|
|
|
4522
4538
|
headers.set("test-pass", input.testPass);
|
|
4523
4539
|
}
|
|
4524
4540
|
try {
|
|
4525
|
-
const res = await fetch(`${this.url}${version
|
|
4541
|
+
const res = await fetch(`${this.url}${version !== 1 ? `/v${version}/sessions` : "/sessions"}`, {
|
|
4526
4542
|
method: "POST",
|
|
4527
4543
|
headers,
|
|
4528
|
-
body: JSON.stringify(input)
|
|
4544
|
+
body: JSON.stringify(input),
|
|
4545
|
+
...version === 4 && { credentials: "include" }
|
|
4529
4546
|
});
|
|
4530
4547
|
const data = await res.json();
|
|
4531
4548
|
if (res.ok) {
|
|
@@ -4607,14 +4624,20 @@ var AuthService = class {
|
|
|
4607
4624
|
}
|
|
4608
4625
|
throw new Error("Invalid input 'type'");
|
|
4609
4626
|
}
|
|
4610
|
-
async refreshSession(refreshToken) {
|
|
4627
|
+
async refreshSession(refreshToken, version = 1) {
|
|
4611
4628
|
const headers = new Headers(this.headers);
|
|
4612
|
-
|
|
4629
|
+
if (version !== 4) {
|
|
4630
|
+
headers.append("Authorization", `Bearer ${refreshToken}`);
|
|
4631
|
+
}
|
|
4613
4632
|
try {
|
|
4614
|
-
const res = await fetch(
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
|
|
4633
|
+
const res = await fetch(
|
|
4634
|
+
`${this.url}${version === 4 ? "/v4/session/refresh" : "/session:refresh"}`,
|
|
4635
|
+
{
|
|
4636
|
+
method: "POST",
|
|
4637
|
+
headers,
|
|
4638
|
+
...version === 4 && { credentials: "include" }
|
|
4639
|
+
}
|
|
4640
|
+
);
|
|
4618
4641
|
const data = await res.json();
|
|
4619
4642
|
if (res.ok) {
|
|
4620
4643
|
return {
|
|
@@ -5295,6 +5318,10 @@ var ReportService = class {
|
|
|
5295
5318
|
const res = await this.client.request(REFERRALS_QUERY, variables);
|
|
5296
5319
|
return res.ok ? { ok: res.ok, data: res.data.member.referrals } : res;
|
|
5297
5320
|
}
|
|
5321
|
+
async qualifiedReferrals(variables) {
|
|
5322
|
+
const res = await this.client.request(QUALIFIED_REFERRALS_QUERY, variables);
|
|
5323
|
+
return res.ok ? { ok: res.ok, data: res.data.member.referrals } : res;
|
|
5324
|
+
}
|
|
5298
5325
|
async referralCommission() {
|
|
5299
5326
|
const res = await this.client.request(
|
|
5300
5327
|
REFERRAL_COMMISSION_QUERY
|
|
@@ -6528,7 +6555,9 @@ var ExtensionService = class {
|
|
|
6528
6555
|
};
|
|
6529
6556
|
}
|
|
6530
6557
|
async memberCabinetSiteMachine() {
|
|
6531
|
-
const res = await this.client.request(
|
|
6558
|
+
const res = await this.client.request(
|
|
6559
|
+
MEMBER_CABINET_SITE_MACHINE_QUERY
|
|
6560
|
+
);
|
|
6532
6561
|
return res.ok ? { ok: res.ok, data: res.data.memberCabinetSiteMachine } : res;
|
|
6533
6562
|
}
|
|
6534
6563
|
};
|
|
@@ -7078,6 +7107,13 @@ var SessionManagerCookie = class {
|
|
|
7078
7107
|
authService;
|
|
7079
7108
|
walletService;
|
|
7080
7109
|
_refreshing = false;
|
|
7110
|
+
/*
|
|
7111
|
+
* v4 access tokens are never persisted (localStorage/cookie) so that an
|
|
7112
|
+
* XSS-readable storage layer never holds a live access token. They only
|
|
7113
|
+
* live in memory and get re-minted from the HttpOnly refresh cookie.
|
|
7114
|
+
*/
|
|
7115
|
+
v4AccessToken = null;
|
|
7116
|
+
v4AccessTokenExpiresAt = null;
|
|
7081
7117
|
constructor(config) {
|
|
7082
7118
|
this.authService = config.authService;
|
|
7083
7119
|
this.walletService = config.walletService;
|
|
@@ -7089,6 +7125,29 @@ var SessionManagerCookie = class {
|
|
|
7089
7125
|
set refreshing(value) {
|
|
7090
7126
|
this._refreshing = value;
|
|
7091
7127
|
}
|
|
7128
|
+
persist(data, version) {
|
|
7129
|
+
const now = /* @__PURE__ */ new Date();
|
|
7130
|
+
if (version === 4) {
|
|
7131
|
+
this.v4AccessToken = data.accessToken ?? null;
|
|
7132
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7133
|
+
cookies__default.default.set(
|
|
7134
|
+
this.storageKey,
|
|
7135
|
+
JSON.stringify({ version, session: data.session }),
|
|
7136
|
+
{ expires: subMinutes(addDays(now, 15), 2).getTime() }
|
|
7137
|
+
);
|
|
7138
|
+
return;
|
|
7139
|
+
}
|
|
7140
|
+
cookies__default.default.set(
|
|
7141
|
+
this.storageKey,
|
|
7142
|
+
JSON.stringify({
|
|
7143
|
+
version,
|
|
7144
|
+
...data,
|
|
7145
|
+
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7146
|
+
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7147
|
+
}),
|
|
7148
|
+
{ expires: subMinutes(addDays(now, 30), 2).getTime() }
|
|
7149
|
+
);
|
|
7150
|
+
}
|
|
7092
7151
|
async create(input, version = 1) {
|
|
7093
7152
|
if (input.type === "MAYA") {
|
|
7094
7153
|
localStorage.setItem(this.platformStorageKey, "MAYA");
|
|
@@ -7115,16 +7174,7 @@ var SessionManagerCookie = class {
|
|
|
7115
7174
|
maxAttempt: 5
|
|
7116
7175
|
})();
|
|
7117
7176
|
if (!r1.ok) return r1;
|
|
7118
|
-
|
|
7119
|
-
cookies__default.default.set(
|
|
7120
|
-
this.storageKey,
|
|
7121
|
-
JSON.stringify({
|
|
7122
|
-
...r1.data,
|
|
7123
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7124
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7125
|
-
}),
|
|
7126
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7127
|
-
);
|
|
7177
|
+
this.persist(r1.data, version);
|
|
7128
7178
|
return {
|
|
7129
7179
|
ok: true,
|
|
7130
7180
|
data: null
|
|
@@ -7133,18 +7183,7 @@ var SessionManagerCookie = class {
|
|
|
7133
7183
|
if (input.type === "MOBILE_NUMBER") {
|
|
7134
7184
|
const res2 = await this.authService.createSession(input, version);
|
|
7135
7185
|
if (res2.ok) {
|
|
7136
|
-
|
|
7137
|
-
cookies__default.default.set(
|
|
7138
|
-
this.storageKey,
|
|
7139
|
-
JSON.stringify({
|
|
7140
|
-
...res2.data,
|
|
7141
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7142
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7143
|
-
}),
|
|
7144
|
-
{
|
|
7145
|
-
expires: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7146
|
-
}
|
|
7147
|
-
);
|
|
7186
|
+
this.persist(res2.data, version);
|
|
7148
7187
|
return {
|
|
7149
7188
|
ok: true,
|
|
7150
7189
|
data: null
|
|
@@ -7161,16 +7200,7 @@ var SessionManagerCookie = class {
|
|
|
7161
7200
|
version
|
|
7162
7201
|
);
|
|
7163
7202
|
if (res2.ok) {
|
|
7164
|
-
|
|
7165
|
-
cookies__default.default.set(
|
|
7166
|
-
this.storageKey,
|
|
7167
|
-
JSON.stringify({
|
|
7168
|
-
...res2.data,
|
|
7169
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7170
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7171
|
-
}),
|
|
7172
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7173
|
-
);
|
|
7203
|
+
this.persist(res2.data, version);
|
|
7174
7204
|
return {
|
|
7175
7205
|
ok: true,
|
|
7176
7206
|
data: null
|
|
@@ -7182,16 +7212,7 @@ var SessionManagerCookie = class {
|
|
|
7182
7212
|
localStorage.setItem(this.platformStorageKey, "CABINET");
|
|
7183
7213
|
const res2 = await this.authService.createSession(input, version);
|
|
7184
7214
|
if (res2.ok) {
|
|
7185
|
-
|
|
7186
|
-
cookies__default.default.set(
|
|
7187
|
-
this.storageKey,
|
|
7188
|
-
JSON.stringify({
|
|
7189
|
-
...res2.data,
|
|
7190
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7191
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7192
|
-
}),
|
|
7193
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7194
|
-
);
|
|
7215
|
+
this.persist(res2.data, version);
|
|
7195
7216
|
return {
|
|
7196
7217
|
ok: true,
|
|
7197
7218
|
data: null
|
|
@@ -7209,16 +7230,7 @@ var SessionManagerCookie = class {
|
|
|
7209
7230
|
}
|
|
7210
7231
|
};
|
|
7211
7232
|
}
|
|
7212
|
-
|
|
7213
|
-
cookies__default.default.set(
|
|
7214
|
-
this.storageKey,
|
|
7215
|
-
JSON.stringify({
|
|
7216
|
-
...res.data,
|
|
7217
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7218
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7219
|
-
}),
|
|
7220
|
-
{}
|
|
7221
|
-
);
|
|
7233
|
+
this.persist(res.data, version);
|
|
7222
7234
|
return {
|
|
7223
7235
|
ok: true,
|
|
7224
7236
|
data: null
|
|
@@ -7227,21 +7239,10 @@ var SessionManagerCookie = class {
|
|
|
7227
7239
|
async createFromAuthenticator(input) {
|
|
7228
7240
|
const res = await this.authService.authenticate(input);
|
|
7229
7241
|
if (res.ok) {
|
|
7230
|
-
const now = /* @__PURE__ */ new Date();
|
|
7231
7242
|
if (this.isServer) {
|
|
7232
7243
|
this.logger.warn("'client cookies' is not available on the server.");
|
|
7233
7244
|
} else {
|
|
7234
|
-
|
|
7235
|
-
this.storageKey,
|
|
7236
|
-
JSON.stringify({
|
|
7237
|
-
...res.data,
|
|
7238
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7239
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7240
|
-
}),
|
|
7241
|
-
{
|
|
7242
|
-
expires: subMinutes(addDays(now, 30), 2).getTime()
|
|
7243
|
-
}
|
|
7244
|
-
);
|
|
7245
|
+
this.persist(res.data, 1);
|
|
7245
7246
|
}
|
|
7246
7247
|
return { ok: true };
|
|
7247
7248
|
} else {
|
|
@@ -7268,7 +7269,11 @@ var SessionManagerCookie = class {
|
|
|
7268
7269
|
};
|
|
7269
7270
|
}
|
|
7270
7271
|
try {
|
|
7271
|
-
|
|
7272
|
+
const stored = JSON.parse(val);
|
|
7273
|
+
if (stored.version === 4) {
|
|
7274
|
+
return await this.getV4(stored.session);
|
|
7275
|
+
}
|
|
7276
|
+
let obj = stored;
|
|
7272
7277
|
let now = /* @__PURE__ */ new Date();
|
|
7273
7278
|
const accessTokenExpiresAt = new Date(obj.accessTokenExpiresAt);
|
|
7274
7279
|
const refreshTokenExpiresAt = new Date(obj.refreshTokenExpiresAt);
|
|
@@ -7286,7 +7291,10 @@ var SessionManagerCookie = class {
|
|
|
7286
7291
|
if (isAfter(now, accessTokenExpiresAt)) {
|
|
7287
7292
|
this.logger.info("Refreshing session...");
|
|
7288
7293
|
this.refreshing = true;
|
|
7289
|
-
const res = await this.authService.refreshSession(
|
|
7294
|
+
const res = await this.authService.refreshSession(
|
|
7295
|
+
obj.refreshToken,
|
|
7296
|
+
obj.version ?? 1
|
|
7297
|
+
);
|
|
7290
7298
|
this.refreshing = false;
|
|
7291
7299
|
if (!res.ok) {
|
|
7292
7300
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7308,7 +7316,8 @@ var SessionManagerCookie = class {
|
|
|
7308
7316
|
now = /* @__PURE__ */ new Date();
|
|
7309
7317
|
obj = {
|
|
7310
7318
|
...obj,
|
|
7311
|
-
|
|
7319
|
+
accessToken: res.data.accessToken,
|
|
7320
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7312
7321
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7313
7322
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7314
7323
|
};
|
|
@@ -7346,11 +7355,18 @@ var SessionManagerCookie = class {
|
|
|
7346
7355
|
};
|
|
7347
7356
|
}
|
|
7348
7357
|
try {
|
|
7349
|
-
|
|
7358
|
+
const stored = JSON.parse(val);
|
|
7359
|
+
if (stored.version === 4) {
|
|
7360
|
+
return await this.refreshV4(stored.session);
|
|
7361
|
+
}
|
|
7362
|
+
let obj = stored;
|
|
7350
7363
|
let now = /* @__PURE__ */ new Date();
|
|
7351
7364
|
this.logger.info("Refreshing session...");
|
|
7352
7365
|
this.refreshing = true;
|
|
7353
|
-
const res = await this.authService.refreshSession(
|
|
7366
|
+
const res = await this.authService.refreshSession(
|
|
7367
|
+
obj.refreshToken,
|
|
7368
|
+
obj.version ?? 1
|
|
7369
|
+
);
|
|
7354
7370
|
this.refreshing = false;
|
|
7355
7371
|
if (!res.ok) {
|
|
7356
7372
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7372,7 +7388,8 @@ var SessionManagerCookie = class {
|
|
|
7372
7388
|
now = /* @__PURE__ */ new Date();
|
|
7373
7389
|
obj = {
|
|
7374
7390
|
...obj,
|
|
7375
|
-
|
|
7391
|
+
accessToken: res.data.accessToken,
|
|
7392
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7376
7393
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7377
7394
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7378
7395
|
};
|
|
@@ -7393,6 +7410,50 @@ var SessionManagerCookie = class {
|
|
|
7393
7410
|
};
|
|
7394
7411
|
}
|
|
7395
7412
|
}
|
|
7413
|
+
async getV4(session) {
|
|
7414
|
+
const now = /* @__PURE__ */ new Date();
|
|
7415
|
+
if (this.v4AccessToken && this.v4AccessTokenExpiresAt && !isAfter(now, new Date(this.v4AccessTokenExpiresAt))) {
|
|
7416
|
+
return {
|
|
7417
|
+
ok: true,
|
|
7418
|
+
data: {
|
|
7419
|
+
session,
|
|
7420
|
+
accessToken: this.v4AccessToken,
|
|
7421
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7422
|
+
}
|
|
7423
|
+
};
|
|
7424
|
+
}
|
|
7425
|
+
return await this.refreshV4(session);
|
|
7426
|
+
}
|
|
7427
|
+
async refreshV4(session) {
|
|
7428
|
+
this.logger.info("Refreshing session...");
|
|
7429
|
+
this.refreshing = true;
|
|
7430
|
+
const res = await this.authService.refreshSession(void 0, 4);
|
|
7431
|
+
this.refreshing = false;
|
|
7432
|
+
if (!res.ok) {
|
|
7433
|
+
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
7434
|
+
if (res.error.name === "InvalidTokenError" || res.error.name === "AccountBlacklistedError" || res.error.name === "VerificationLockedError") {
|
|
7435
|
+
cookies__default.default.remove(this.storageKey);
|
|
7436
|
+
this.v4AccessToken = null;
|
|
7437
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7438
|
+
}
|
|
7439
|
+
return {
|
|
7440
|
+
ok: false,
|
|
7441
|
+
error: res.error
|
|
7442
|
+
};
|
|
7443
|
+
}
|
|
7444
|
+
this.logger.success("Session refreshed!");
|
|
7445
|
+
const now = /* @__PURE__ */ new Date();
|
|
7446
|
+
this.v4AccessToken = res.data.accessToken;
|
|
7447
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7448
|
+
return {
|
|
7449
|
+
ok: true,
|
|
7450
|
+
data: {
|
|
7451
|
+
session,
|
|
7452
|
+
accessToken: this.v4AccessToken,
|
|
7453
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7454
|
+
}
|
|
7455
|
+
};
|
|
7456
|
+
}
|
|
7396
7457
|
async destroy() {
|
|
7397
7458
|
if (this.isServer) {
|
|
7398
7459
|
this.logger.warn("'client cookies' is not available on the server.");
|
|
@@ -7402,6 +7463,8 @@ var SessionManagerCookie = class {
|
|
|
7402
7463
|
if (res.data?.accessToken) {
|
|
7403
7464
|
await this.authService.destroySession(res.data.accessToken);
|
|
7404
7465
|
}
|
|
7466
|
+
this.v4AccessToken = null;
|
|
7467
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7405
7468
|
cookies__default.default.remove(this.storageKey);
|
|
7406
7469
|
}
|
|
7407
7470
|
async verify() {
|
|
@@ -7447,6 +7510,13 @@ var SessionManager = class {
|
|
|
7447
7510
|
authService;
|
|
7448
7511
|
walletService;
|
|
7449
7512
|
_refreshing = false;
|
|
7513
|
+
/*
|
|
7514
|
+
* v4 access tokens are never persisted (localStorage/cookie) so that an
|
|
7515
|
+
* XSS-readable storage layer never holds a live access token. They only
|
|
7516
|
+
* live in memory and get re-minted from the HttpOnly refresh cookie.
|
|
7517
|
+
*/
|
|
7518
|
+
v4AccessToken = null;
|
|
7519
|
+
v4AccessTokenExpiresAt = null;
|
|
7450
7520
|
constructor(config) {
|
|
7451
7521
|
this.authService = config.authService;
|
|
7452
7522
|
this.walletService = config.walletService;
|
|
@@ -7462,6 +7532,27 @@ var SessionManager = class {
|
|
|
7462
7532
|
set refreshing(value) {
|
|
7463
7533
|
this._refreshing = value;
|
|
7464
7534
|
}
|
|
7535
|
+
persist(data, version) {
|
|
7536
|
+
const now = /* @__PURE__ */ new Date();
|
|
7537
|
+
if (version === 4) {
|
|
7538
|
+
this.v4AccessToken = data.accessToken ?? null;
|
|
7539
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7540
|
+
localStorage.setItem(
|
|
7541
|
+
this.storageKey,
|
|
7542
|
+
JSON.stringify({ version, session: data.session })
|
|
7543
|
+
);
|
|
7544
|
+
return;
|
|
7545
|
+
}
|
|
7546
|
+
localStorage.setItem(
|
|
7547
|
+
this.storageKey,
|
|
7548
|
+
JSON.stringify({
|
|
7549
|
+
version,
|
|
7550
|
+
...data,
|
|
7551
|
+
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7552
|
+
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7553
|
+
})
|
|
7554
|
+
);
|
|
7555
|
+
}
|
|
7465
7556
|
async create(input, version = 1) {
|
|
7466
7557
|
if (this.isServer) {
|
|
7467
7558
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
@@ -7498,15 +7589,7 @@ var SessionManager = class {
|
|
|
7498
7589
|
maxAttempt: 5
|
|
7499
7590
|
})();
|
|
7500
7591
|
if (!r1.ok) return r1;
|
|
7501
|
-
|
|
7502
|
-
localStorage.setItem(
|
|
7503
|
-
this.storageKey,
|
|
7504
|
-
JSON.stringify({
|
|
7505
|
-
...r1.data,
|
|
7506
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7507
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7508
|
-
})
|
|
7509
|
-
);
|
|
7592
|
+
this.persist(r1.data, version);
|
|
7510
7593
|
return {
|
|
7511
7594
|
ok: true,
|
|
7512
7595
|
data: null
|
|
@@ -7515,15 +7598,7 @@ var SessionManager = class {
|
|
|
7515
7598
|
if (input.type === "MOBILE_NUMBER") {
|
|
7516
7599
|
const res2 = await this.authService.createSession(input, version);
|
|
7517
7600
|
if (res2.ok) {
|
|
7518
|
-
|
|
7519
|
-
localStorage.setItem(
|
|
7520
|
-
this.storageKey,
|
|
7521
|
-
JSON.stringify({
|
|
7522
|
-
...res2.data,
|
|
7523
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7524
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7525
|
-
})
|
|
7526
|
-
);
|
|
7601
|
+
this.persist(res2.data, version);
|
|
7527
7602
|
return {
|
|
7528
7603
|
ok: true,
|
|
7529
7604
|
data: null
|
|
@@ -7541,15 +7616,7 @@ var SessionManager = class {
|
|
|
7541
7616
|
version
|
|
7542
7617
|
);
|
|
7543
7618
|
if (res2.ok) {
|
|
7544
|
-
|
|
7545
|
-
localStorage.setItem(
|
|
7546
|
-
this.storageKey,
|
|
7547
|
-
JSON.stringify({
|
|
7548
|
-
...res2.data,
|
|
7549
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7550
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7551
|
-
})
|
|
7552
|
-
);
|
|
7619
|
+
this.persist(res2.data, version);
|
|
7553
7620
|
return {
|
|
7554
7621
|
ok: true,
|
|
7555
7622
|
data: null
|
|
@@ -7561,15 +7628,7 @@ var SessionManager = class {
|
|
|
7561
7628
|
localStorage.setItem(this.platformStorageKey, "CABINET");
|
|
7562
7629
|
const res2 = await this.authService.createSession(input, version);
|
|
7563
7630
|
if (res2.ok) {
|
|
7564
|
-
|
|
7565
|
-
localStorage.setItem(
|
|
7566
|
-
this.storageKey,
|
|
7567
|
-
JSON.stringify({
|
|
7568
|
-
...res2.data,
|
|
7569
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7570
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7571
|
-
})
|
|
7572
|
-
);
|
|
7631
|
+
this.persist(res2.data, version);
|
|
7573
7632
|
return {
|
|
7574
7633
|
ok: true,
|
|
7575
7634
|
data: null
|
|
@@ -7587,15 +7646,7 @@ var SessionManager = class {
|
|
|
7587
7646
|
}
|
|
7588
7647
|
};
|
|
7589
7648
|
}
|
|
7590
|
-
|
|
7591
|
-
localStorage.setItem(
|
|
7592
|
-
this.storageKey,
|
|
7593
|
-
JSON.stringify({
|
|
7594
|
-
...res.data,
|
|
7595
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7596
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7597
|
-
})
|
|
7598
|
-
);
|
|
7649
|
+
this.persist(res.data, version);
|
|
7599
7650
|
return {
|
|
7600
7651
|
ok: true,
|
|
7601
7652
|
data: null
|
|
@@ -7604,18 +7655,10 @@ var SessionManager = class {
|
|
|
7604
7655
|
async createFromAuthenticator(input) {
|
|
7605
7656
|
const res = await this.authService.authenticate(input);
|
|
7606
7657
|
if (res.ok) {
|
|
7607
|
-
const now = /* @__PURE__ */ new Date();
|
|
7608
7658
|
if (this.isServer) {
|
|
7609
7659
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
7610
7660
|
} else {
|
|
7611
|
-
|
|
7612
|
-
this.storageKey,
|
|
7613
|
-
JSON.stringify({
|
|
7614
|
-
...res.data,
|
|
7615
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7616
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7617
|
-
})
|
|
7618
|
-
);
|
|
7661
|
+
this.persist(res.data, 1);
|
|
7619
7662
|
}
|
|
7620
7663
|
return { ok: true };
|
|
7621
7664
|
} else {
|
|
@@ -7642,7 +7685,11 @@ var SessionManager = class {
|
|
|
7642
7685
|
};
|
|
7643
7686
|
}
|
|
7644
7687
|
try {
|
|
7645
|
-
|
|
7688
|
+
const stored = JSON.parse(val);
|
|
7689
|
+
if (stored.version === 4) {
|
|
7690
|
+
return await this.getV4(stored.session);
|
|
7691
|
+
}
|
|
7692
|
+
let obj = stored;
|
|
7646
7693
|
let now = /* @__PURE__ */ new Date();
|
|
7647
7694
|
const accessTokenExpiresAt = new Date(obj.accessTokenExpiresAt);
|
|
7648
7695
|
const refreshTokenExpiresAt = new Date(obj.refreshTokenExpiresAt);
|
|
@@ -7660,7 +7707,10 @@ var SessionManager = class {
|
|
|
7660
7707
|
if (isAfter(now, accessTokenExpiresAt)) {
|
|
7661
7708
|
this.logger.info("Refreshing session...");
|
|
7662
7709
|
this.refreshing = true;
|
|
7663
|
-
const res = await this.authService.refreshSession(
|
|
7710
|
+
const res = await this.authService.refreshSession(
|
|
7711
|
+
obj.refreshToken,
|
|
7712
|
+
obj.version ?? 1
|
|
7713
|
+
);
|
|
7664
7714
|
this.refreshing = false;
|
|
7665
7715
|
if (!res.ok) {
|
|
7666
7716
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7682,7 +7732,8 @@ var SessionManager = class {
|
|
|
7682
7732
|
now = /* @__PURE__ */ new Date();
|
|
7683
7733
|
obj = {
|
|
7684
7734
|
...obj,
|
|
7685
|
-
|
|
7735
|
+
accessToken: res.data.accessToken,
|
|
7736
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7686
7737
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7687
7738
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7688
7739
|
};
|
|
@@ -7718,11 +7769,18 @@ var SessionManager = class {
|
|
|
7718
7769
|
};
|
|
7719
7770
|
}
|
|
7720
7771
|
try {
|
|
7721
|
-
|
|
7772
|
+
const stored = JSON.parse(val);
|
|
7773
|
+
if (stored.version === 4) {
|
|
7774
|
+
return await this.refreshV4(stored.session);
|
|
7775
|
+
}
|
|
7776
|
+
let obj = stored;
|
|
7722
7777
|
let now = /* @__PURE__ */ new Date();
|
|
7723
7778
|
this.logger.info("Refreshing session...");
|
|
7724
7779
|
this.refreshing = true;
|
|
7725
|
-
const res = await this.authService.refreshSession(
|
|
7780
|
+
const res = await this.authService.refreshSession(
|
|
7781
|
+
obj.refreshToken,
|
|
7782
|
+
obj.version ?? 1
|
|
7783
|
+
);
|
|
7726
7784
|
this.refreshing = false;
|
|
7727
7785
|
if (!res.ok) {
|
|
7728
7786
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7744,7 +7802,8 @@ var SessionManager = class {
|
|
|
7744
7802
|
now = /* @__PURE__ */ new Date();
|
|
7745
7803
|
obj = {
|
|
7746
7804
|
...obj,
|
|
7747
|
-
|
|
7805
|
+
accessToken: res.data.accessToken,
|
|
7806
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7748
7807
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7749
7808
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7750
7809
|
};
|
|
@@ -7763,6 +7822,50 @@ var SessionManager = class {
|
|
|
7763
7822
|
};
|
|
7764
7823
|
}
|
|
7765
7824
|
}
|
|
7825
|
+
async getV4(session) {
|
|
7826
|
+
const now = /* @__PURE__ */ new Date();
|
|
7827
|
+
if (this.v4AccessToken && this.v4AccessTokenExpiresAt && !isAfter(now, new Date(this.v4AccessTokenExpiresAt))) {
|
|
7828
|
+
return {
|
|
7829
|
+
ok: true,
|
|
7830
|
+
data: {
|
|
7831
|
+
session,
|
|
7832
|
+
accessToken: this.v4AccessToken,
|
|
7833
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7834
|
+
}
|
|
7835
|
+
};
|
|
7836
|
+
}
|
|
7837
|
+
return await this.refreshV4(session);
|
|
7838
|
+
}
|
|
7839
|
+
async refreshV4(session) {
|
|
7840
|
+
this.logger.info("Refreshing session...");
|
|
7841
|
+
this.refreshing = true;
|
|
7842
|
+
const res = await this.authService.refreshSession(void 0, 4);
|
|
7843
|
+
this.refreshing = false;
|
|
7844
|
+
if (!res.ok) {
|
|
7845
|
+
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
7846
|
+
if (res.error.name === "InvalidTokenError" || res.error.name === "AccountBlacklistedError" || res.error.name === "VerificationLockedError") {
|
|
7847
|
+
localStorage.removeItem(this.storageKey);
|
|
7848
|
+
this.v4AccessToken = null;
|
|
7849
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7850
|
+
}
|
|
7851
|
+
return {
|
|
7852
|
+
ok: false,
|
|
7853
|
+
error: res.error
|
|
7854
|
+
};
|
|
7855
|
+
}
|
|
7856
|
+
this.logger.success("Session refreshed!");
|
|
7857
|
+
const now = /* @__PURE__ */ new Date();
|
|
7858
|
+
this.v4AccessToken = res.data.accessToken;
|
|
7859
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7860
|
+
return {
|
|
7861
|
+
ok: true,
|
|
7862
|
+
data: {
|
|
7863
|
+
session,
|
|
7864
|
+
accessToken: this.v4AccessToken,
|
|
7865
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7866
|
+
}
|
|
7867
|
+
};
|
|
7868
|
+
}
|
|
7766
7869
|
async destroy() {
|
|
7767
7870
|
if (this.isServer) {
|
|
7768
7871
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
@@ -7772,6 +7875,8 @@ var SessionManager = class {
|
|
|
7772
7875
|
if (res.data?.accessToken) {
|
|
7773
7876
|
await this.authService.destroySession(res.data.accessToken);
|
|
7774
7877
|
}
|
|
7878
|
+
this.v4AccessToken = null;
|
|
7879
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7775
7880
|
localStorage.removeItem(this.storageKey);
|
|
7776
7881
|
}
|
|
7777
7882
|
async verify() {
|
|
@@ -11859,6 +11964,20 @@ var Sdk = class {
|
|
|
11859
11964
|
}
|
|
11860
11965
|
};
|
|
11861
11966
|
}
|
|
11967
|
+
async qualifiedReferrals(input) {
|
|
11968
|
+
const res = await this.reportService.qualifiedReferrals({
|
|
11969
|
+
...input,
|
|
11970
|
+
filter: {
|
|
11971
|
+
...input?.filter,
|
|
11972
|
+
qualified: { equal: true }
|
|
11973
|
+
}
|
|
11974
|
+
});
|
|
11975
|
+
if (!res.ok) return res;
|
|
11976
|
+
return {
|
|
11977
|
+
ok: true,
|
|
11978
|
+
data: res.data.totalCount
|
|
11979
|
+
};
|
|
11980
|
+
}
|
|
11862
11981
|
async referralCommission() {
|
|
11863
11982
|
const res = await this.reportService.referralCommission();
|
|
11864
11983
|
if (!res.ok) return res;
|