@opexa/portal-sdk 0.59.75 → 0.59.77
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-UT6VBXJ4.js → chunk-3WS4U4B7.js} +40 -24
- package/dist/chunk-3WS4U4B7.js.map +1 -0
- package/dist/{chunk-5WRVWQBT.js → chunk-7APXFZ5G.js} +3 -3
- package/dist/chunk-7APXFZ5G.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 +263 -153
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +229 -135
- package/dist/index.js.map +1 -1
- package/dist/services/index.cjs +37 -21
- package/dist/services/index.cjs.map +1 -1
- package/dist/services/index.d.cts +5 -5
- package/dist/services/index.d.ts +5 -5
- package/dist/services/index.js +2 -2
- package/dist/{types-Dz4J_rhs.d.cts → types-kTe_j8tm.d.cts} +3 -3
- package/dist/{types-Cmawo0zW.d.ts → types-lZQpMvHU.d.ts} +3 -3
- 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-ROBGEUSE.js.map +0 -1
- package/dist/chunk-UT6VBXJ4.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -4500,7 +4500,7 @@ var AuthService = class {
|
|
|
4500
4500
|
}
|
|
4501
4501
|
async createSession(input, version = 1) {
|
|
4502
4502
|
const headers = new Headers(this.headers);
|
|
4503
|
-
if (version === 3) {
|
|
4503
|
+
if (version === 3 || version === 4) {
|
|
4504
4504
|
const fingerprint = await getFingerPrint();
|
|
4505
4505
|
if (fingerprint) {
|
|
4506
4506
|
headers.append("Fingerprint", fingerprint);
|
|
@@ -4538,14 +4538,12 @@ var AuthService = class {
|
|
|
4538
4538
|
headers.set("test-pass", input.testPass);
|
|
4539
4539
|
}
|
|
4540
4540
|
try {
|
|
4541
|
-
const res = await fetch(
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
}
|
|
4548
|
-
);
|
|
4541
|
+
const res = await fetch(`${this.url}${version !== 1 ? `/v${version}/sessions` : "/sessions"}`, {
|
|
4542
|
+
method: "POST",
|
|
4543
|
+
headers,
|
|
4544
|
+
body: JSON.stringify(input),
|
|
4545
|
+
...version === 4 && { credentials: "include" }
|
|
4546
|
+
});
|
|
4549
4547
|
const data = await res.json();
|
|
4550
4548
|
if (res.ok) {
|
|
4551
4549
|
return {
|
|
@@ -4626,14 +4624,26 @@ var AuthService = class {
|
|
|
4626
4624
|
}
|
|
4627
4625
|
throw new Error("Invalid input 'type'");
|
|
4628
4626
|
}
|
|
4629
|
-
async refreshSession(refreshToken) {
|
|
4627
|
+
async refreshSession(refreshToken, version = 1) {
|
|
4630
4628
|
const headers = new Headers(this.headers);
|
|
4631
|
-
|
|
4629
|
+
if (version !== 4) {
|
|
4630
|
+
headers.append("Authorization", `Bearer ${refreshToken}`);
|
|
4631
|
+
}
|
|
4632
|
+
if (version === 3 || version === 4) {
|
|
4633
|
+
const fingerprint = await getFingerPrint();
|
|
4634
|
+
if (fingerprint) {
|
|
4635
|
+
headers.append("Fingerprint", fingerprint);
|
|
4636
|
+
}
|
|
4637
|
+
}
|
|
4632
4638
|
try {
|
|
4633
|
-
const res = await fetch(
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4639
|
+
const res = await fetch(
|
|
4640
|
+
`${this.url}${version !== 1 ? `/v${version}/session/refresh` : "/session:refresh"}`,
|
|
4641
|
+
{
|
|
4642
|
+
method: "POST",
|
|
4643
|
+
headers,
|
|
4644
|
+
...version === 4 && { credentials: "include" }
|
|
4645
|
+
}
|
|
4646
|
+
);
|
|
4637
4647
|
const data = await res.json();
|
|
4638
4648
|
if (res.ok) {
|
|
4639
4649
|
return {
|
|
@@ -4670,14 +4680,20 @@ var AuthService = class {
|
|
|
4670
4680
|
};
|
|
4671
4681
|
}
|
|
4672
4682
|
}
|
|
4673
|
-
async destroySession(accessToken) {
|
|
4683
|
+
async destroySession(accessToken, version = 1) {
|
|
4674
4684
|
const headers = new Headers(this.headers);
|
|
4675
|
-
|
|
4685
|
+
if (version !== 4) {
|
|
4686
|
+
headers.append("Authorization", `Bearer ${accessToken}`);
|
|
4687
|
+
}
|
|
4676
4688
|
try {
|
|
4677
|
-
const res = await fetch(
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4689
|
+
const res = await fetch(
|
|
4690
|
+
`${this.url}${version !== 1 ? `/v${version}/session` : "/session"}`,
|
|
4691
|
+
{
|
|
4692
|
+
method: "DELETE",
|
|
4693
|
+
headers,
|
|
4694
|
+
...version === 4 && { credentials: "include" }
|
|
4695
|
+
}
|
|
4696
|
+
);
|
|
4681
4697
|
return res.ok ? { ok: true } : { ok: false, error: statusCodeToOperationError(res.status) };
|
|
4682
4698
|
} catch {
|
|
4683
4699
|
return { ok: false, error: statusCodeToOperationError(500) };
|
|
@@ -7103,6 +7119,13 @@ var SessionManagerCookie = class {
|
|
|
7103
7119
|
authService;
|
|
7104
7120
|
walletService;
|
|
7105
7121
|
_refreshing = false;
|
|
7122
|
+
/*
|
|
7123
|
+
* v4 access tokens are never persisted (localStorage/cookie) so that an
|
|
7124
|
+
* XSS-readable storage layer never holds a live access token. They only
|
|
7125
|
+
* live in memory and get re-minted from the HttpOnly refresh cookie.
|
|
7126
|
+
*/
|
|
7127
|
+
v4AccessToken = null;
|
|
7128
|
+
v4AccessTokenExpiresAt = null;
|
|
7106
7129
|
constructor(config) {
|
|
7107
7130
|
this.authService = config.authService;
|
|
7108
7131
|
this.walletService = config.walletService;
|
|
@@ -7114,6 +7137,29 @@ var SessionManagerCookie = class {
|
|
|
7114
7137
|
set refreshing(value) {
|
|
7115
7138
|
this._refreshing = value;
|
|
7116
7139
|
}
|
|
7140
|
+
persist(data, version) {
|
|
7141
|
+
const now = /* @__PURE__ */ new Date();
|
|
7142
|
+
if (version === 4) {
|
|
7143
|
+
this.v4AccessToken = data.accessToken ?? null;
|
|
7144
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7145
|
+
cookies__default.default.set(
|
|
7146
|
+
this.storageKey,
|
|
7147
|
+
JSON.stringify({ version, session: data.session }),
|
|
7148
|
+
{ expires: subMinutes(addDays(now, 15), 2).getTime() }
|
|
7149
|
+
);
|
|
7150
|
+
return;
|
|
7151
|
+
}
|
|
7152
|
+
cookies__default.default.set(
|
|
7153
|
+
this.storageKey,
|
|
7154
|
+
JSON.stringify({
|
|
7155
|
+
version,
|
|
7156
|
+
...data,
|
|
7157
|
+
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7158
|
+
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7159
|
+
}),
|
|
7160
|
+
{ expires: subMinutes(addDays(now, 30), 2).getTime() }
|
|
7161
|
+
);
|
|
7162
|
+
}
|
|
7117
7163
|
async create(input, version = 1) {
|
|
7118
7164
|
if (input.type === "MAYA") {
|
|
7119
7165
|
localStorage.setItem(this.platformStorageKey, "MAYA");
|
|
@@ -7140,16 +7186,7 @@ var SessionManagerCookie = class {
|
|
|
7140
7186
|
maxAttempt: 5
|
|
7141
7187
|
})();
|
|
7142
7188
|
if (!r1.ok) return r1;
|
|
7143
|
-
|
|
7144
|
-
cookies__default.default.set(
|
|
7145
|
-
this.storageKey,
|
|
7146
|
-
JSON.stringify({
|
|
7147
|
-
...r1.data,
|
|
7148
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7149
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7150
|
-
}),
|
|
7151
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7152
|
-
);
|
|
7189
|
+
this.persist(r1.data, version);
|
|
7153
7190
|
return {
|
|
7154
7191
|
ok: true,
|
|
7155
7192
|
data: null
|
|
@@ -7158,18 +7195,7 @@ var SessionManagerCookie = class {
|
|
|
7158
7195
|
if (input.type === "MOBILE_NUMBER") {
|
|
7159
7196
|
const res2 = await this.authService.createSession(input, version);
|
|
7160
7197
|
if (res2.ok) {
|
|
7161
|
-
|
|
7162
|
-
cookies__default.default.set(
|
|
7163
|
-
this.storageKey,
|
|
7164
|
-
JSON.stringify({
|
|
7165
|
-
...res2.data,
|
|
7166
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7167
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7168
|
-
}),
|
|
7169
|
-
{
|
|
7170
|
-
expires: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7171
|
-
}
|
|
7172
|
-
);
|
|
7198
|
+
this.persist(res2.data, version);
|
|
7173
7199
|
return {
|
|
7174
7200
|
ok: true,
|
|
7175
7201
|
data: null
|
|
@@ -7186,16 +7212,7 @@ var SessionManagerCookie = class {
|
|
|
7186
7212
|
version
|
|
7187
7213
|
);
|
|
7188
7214
|
if (res2.ok) {
|
|
7189
|
-
|
|
7190
|
-
cookies__default.default.set(
|
|
7191
|
-
this.storageKey,
|
|
7192
|
-
JSON.stringify({
|
|
7193
|
-
...res2.data,
|
|
7194
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7195
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7196
|
-
}),
|
|
7197
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7198
|
-
);
|
|
7215
|
+
this.persist(res2.data, version);
|
|
7199
7216
|
return {
|
|
7200
7217
|
ok: true,
|
|
7201
7218
|
data: null
|
|
@@ -7207,16 +7224,7 @@ var SessionManagerCookie = class {
|
|
|
7207
7224
|
localStorage.setItem(this.platformStorageKey, "CABINET");
|
|
7208
7225
|
const res2 = await this.authService.createSession(input, version);
|
|
7209
7226
|
if (res2.ok) {
|
|
7210
|
-
|
|
7211
|
-
cookies__default.default.set(
|
|
7212
|
-
this.storageKey,
|
|
7213
|
-
JSON.stringify({
|
|
7214
|
-
...res2.data,
|
|
7215
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7216
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7217
|
-
}),
|
|
7218
|
-
{ expires: subMinutes(addDays(now2, 30), 2).getTime() }
|
|
7219
|
-
);
|
|
7227
|
+
this.persist(res2.data, version);
|
|
7220
7228
|
return {
|
|
7221
7229
|
ok: true,
|
|
7222
7230
|
data: null
|
|
@@ -7234,16 +7242,7 @@ var SessionManagerCookie = class {
|
|
|
7234
7242
|
}
|
|
7235
7243
|
};
|
|
7236
7244
|
}
|
|
7237
|
-
|
|
7238
|
-
cookies__default.default.set(
|
|
7239
|
-
this.storageKey,
|
|
7240
|
-
JSON.stringify({
|
|
7241
|
-
...res.data,
|
|
7242
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7243
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7244
|
-
}),
|
|
7245
|
-
{}
|
|
7246
|
-
);
|
|
7245
|
+
this.persist(res.data, version);
|
|
7247
7246
|
return {
|
|
7248
7247
|
ok: true,
|
|
7249
7248
|
data: null
|
|
@@ -7252,21 +7251,10 @@ var SessionManagerCookie = class {
|
|
|
7252
7251
|
async createFromAuthenticator(input) {
|
|
7253
7252
|
const res = await this.authService.authenticate(input);
|
|
7254
7253
|
if (res.ok) {
|
|
7255
|
-
const now = /* @__PURE__ */ new Date();
|
|
7256
7254
|
if (this.isServer) {
|
|
7257
7255
|
this.logger.warn("'client cookies' is not available on the server.");
|
|
7258
7256
|
} else {
|
|
7259
|
-
|
|
7260
|
-
this.storageKey,
|
|
7261
|
-
JSON.stringify({
|
|
7262
|
-
...res.data,
|
|
7263
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7264
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7265
|
-
}),
|
|
7266
|
-
{
|
|
7267
|
-
expires: subMinutes(addDays(now, 30), 2).getTime()
|
|
7268
|
-
}
|
|
7269
|
-
);
|
|
7257
|
+
this.persist(res.data, 1);
|
|
7270
7258
|
}
|
|
7271
7259
|
return { ok: true };
|
|
7272
7260
|
} else {
|
|
@@ -7293,7 +7281,11 @@ var SessionManagerCookie = class {
|
|
|
7293
7281
|
};
|
|
7294
7282
|
}
|
|
7295
7283
|
try {
|
|
7296
|
-
|
|
7284
|
+
const stored = JSON.parse(val);
|
|
7285
|
+
if (stored.version === 4) {
|
|
7286
|
+
return await this.getV4(stored.session);
|
|
7287
|
+
}
|
|
7288
|
+
let obj = stored;
|
|
7297
7289
|
let now = /* @__PURE__ */ new Date();
|
|
7298
7290
|
const accessTokenExpiresAt = new Date(obj.accessTokenExpiresAt);
|
|
7299
7291
|
const refreshTokenExpiresAt = new Date(obj.refreshTokenExpiresAt);
|
|
@@ -7311,7 +7303,10 @@ var SessionManagerCookie = class {
|
|
|
7311
7303
|
if (isAfter(now, accessTokenExpiresAt)) {
|
|
7312
7304
|
this.logger.info("Refreshing session...");
|
|
7313
7305
|
this.refreshing = true;
|
|
7314
|
-
const res = await this.authService.refreshSession(
|
|
7306
|
+
const res = await this.authService.refreshSession(
|
|
7307
|
+
obj.refreshToken,
|
|
7308
|
+
obj.version ?? 1
|
|
7309
|
+
);
|
|
7315
7310
|
this.refreshing = false;
|
|
7316
7311
|
if (!res.ok) {
|
|
7317
7312
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7333,7 +7328,8 @@ var SessionManagerCookie = class {
|
|
|
7333
7328
|
now = /* @__PURE__ */ new Date();
|
|
7334
7329
|
obj = {
|
|
7335
7330
|
...obj,
|
|
7336
|
-
|
|
7331
|
+
accessToken: res.data.accessToken,
|
|
7332
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7337
7333
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7338
7334
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7339
7335
|
};
|
|
@@ -7371,11 +7367,18 @@ var SessionManagerCookie = class {
|
|
|
7371
7367
|
};
|
|
7372
7368
|
}
|
|
7373
7369
|
try {
|
|
7374
|
-
|
|
7370
|
+
const stored = JSON.parse(val);
|
|
7371
|
+
if (stored.version === 4) {
|
|
7372
|
+
return await this.refreshV4(stored.session);
|
|
7373
|
+
}
|
|
7374
|
+
let obj = stored;
|
|
7375
7375
|
let now = /* @__PURE__ */ new Date();
|
|
7376
7376
|
this.logger.info("Refreshing session...");
|
|
7377
7377
|
this.refreshing = true;
|
|
7378
|
-
const res = await this.authService.refreshSession(
|
|
7378
|
+
const res = await this.authService.refreshSession(
|
|
7379
|
+
obj.refreshToken,
|
|
7380
|
+
obj.version ?? 1
|
|
7381
|
+
);
|
|
7379
7382
|
this.refreshing = false;
|
|
7380
7383
|
if (!res.ok) {
|
|
7381
7384
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7397,7 +7400,8 @@ var SessionManagerCookie = class {
|
|
|
7397
7400
|
now = /* @__PURE__ */ new Date();
|
|
7398
7401
|
obj = {
|
|
7399
7402
|
...obj,
|
|
7400
|
-
|
|
7403
|
+
accessToken: res.data.accessToken,
|
|
7404
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7401
7405
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7402
7406
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7403
7407
|
};
|
|
@@ -7418,15 +7422,70 @@ var SessionManagerCookie = class {
|
|
|
7418
7422
|
};
|
|
7419
7423
|
}
|
|
7420
7424
|
}
|
|
7425
|
+
async getV4(session) {
|
|
7426
|
+
const now = /* @__PURE__ */ new Date();
|
|
7427
|
+
if (this.v4AccessToken && this.v4AccessTokenExpiresAt && !isAfter(now, new Date(this.v4AccessTokenExpiresAt))) {
|
|
7428
|
+
return {
|
|
7429
|
+
ok: true,
|
|
7430
|
+
data: {
|
|
7431
|
+
session,
|
|
7432
|
+
accessToken: this.v4AccessToken,
|
|
7433
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7434
|
+
}
|
|
7435
|
+
};
|
|
7436
|
+
}
|
|
7437
|
+
return await this.refreshV4(session);
|
|
7438
|
+
}
|
|
7439
|
+
async refreshV4(session) {
|
|
7440
|
+
this.logger.info("Refreshing session...");
|
|
7441
|
+
this.refreshing = true;
|
|
7442
|
+
const res = await this.authService.refreshSession(void 0, 4);
|
|
7443
|
+
this.refreshing = false;
|
|
7444
|
+
if (!res.ok) {
|
|
7445
|
+
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
7446
|
+
if (res.error.name === "InvalidTokenError" || res.error.name === "AccountBlacklistedError" || res.error.name === "VerificationLockedError") {
|
|
7447
|
+
cookies__default.default.remove(this.storageKey);
|
|
7448
|
+
this.v4AccessToken = null;
|
|
7449
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7450
|
+
}
|
|
7451
|
+
return {
|
|
7452
|
+
ok: false,
|
|
7453
|
+
error: res.error
|
|
7454
|
+
};
|
|
7455
|
+
}
|
|
7456
|
+
this.logger.success("Session refreshed!");
|
|
7457
|
+
const now = /* @__PURE__ */ new Date();
|
|
7458
|
+
this.v4AccessToken = res.data.accessToken;
|
|
7459
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7460
|
+
return {
|
|
7461
|
+
ok: true,
|
|
7462
|
+
data: {
|
|
7463
|
+
session,
|
|
7464
|
+
accessToken: this.v4AccessToken,
|
|
7465
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7466
|
+
}
|
|
7467
|
+
};
|
|
7468
|
+
}
|
|
7421
7469
|
async destroy() {
|
|
7422
7470
|
if (this.isServer) {
|
|
7423
7471
|
this.logger.warn("'client cookies' is not available on the server.");
|
|
7424
7472
|
return;
|
|
7425
7473
|
}
|
|
7474
|
+
let version = 1;
|
|
7475
|
+
const val = cookies__default.default.get(this.storageKey);
|
|
7476
|
+
if (val) {
|
|
7477
|
+
try {
|
|
7478
|
+
const stored = JSON.parse(val);
|
|
7479
|
+
version = stored.version ?? 1;
|
|
7480
|
+
} catch {
|
|
7481
|
+
}
|
|
7482
|
+
}
|
|
7426
7483
|
const res = await this.get();
|
|
7427
7484
|
if (res.data?.accessToken) {
|
|
7428
|
-
await this.authService.destroySession(res.data.accessToken);
|
|
7485
|
+
await this.authService.destroySession(res.data.accessToken, version);
|
|
7429
7486
|
}
|
|
7487
|
+
this.v4AccessToken = null;
|
|
7488
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7430
7489
|
cookies__default.default.remove(this.storageKey);
|
|
7431
7490
|
}
|
|
7432
7491
|
async verify() {
|
|
@@ -7472,6 +7531,13 @@ var SessionManager = class {
|
|
|
7472
7531
|
authService;
|
|
7473
7532
|
walletService;
|
|
7474
7533
|
_refreshing = false;
|
|
7534
|
+
/*
|
|
7535
|
+
* v4 access tokens are never persisted (localStorage/cookie) so that an
|
|
7536
|
+
* XSS-readable storage layer never holds a live access token. They only
|
|
7537
|
+
* live in memory and get re-minted from the HttpOnly refresh cookie.
|
|
7538
|
+
*/
|
|
7539
|
+
v4AccessToken = null;
|
|
7540
|
+
v4AccessTokenExpiresAt = null;
|
|
7475
7541
|
constructor(config) {
|
|
7476
7542
|
this.authService = config.authService;
|
|
7477
7543
|
this.walletService = config.walletService;
|
|
@@ -7487,6 +7553,27 @@ var SessionManager = class {
|
|
|
7487
7553
|
set refreshing(value) {
|
|
7488
7554
|
this._refreshing = value;
|
|
7489
7555
|
}
|
|
7556
|
+
persist(data, version) {
|
|
7557
|
+
const now = /* @__PURE__ */ new Date();
|
|
7558
|
+
if (version === 4) {
|
|
7559
|
+
this.v4AccessToken = data.accessToken ?? null;
|
|
7560
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7561
|
+
localStorage.setItem(
|
|
7562
|
+
this.storageKey,
|
|
7563
|
+
JSON.stringify({ version, session: data.session })
|
|
7564
|
+
);
|
|
7565
|
+
return;
|
|
7566
|
+
}
|
|
7567
|
+
localStorage.setItem(
|
|
7568
|
+
this.storageKey,
|
|
7569
|
+
JSON.stringify({
|
|
7570
|
+
version,
|
|
7571
|
+
...data,
|
|
7572
|
+
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7573
|
+
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7574
|
+
})
|
|
7575
|
+
);
|
|
7576
|
+
}
|
|
7490
7577
|
async create(input, version = 1) {
|
|
7491
7578
|
if (this.isServer) {
|
|
7492
7579
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
@@ -7523,15 +7610,7 @@ var SessionManager = class {
|
|
|
7523
7610
|
maxAttempt: 5
|
|
7524
7611
|
})();
|
|
7525
7612
|
if (!r1.ok) return r1;
|
|
7526
|
-
|
|
7527
|
-
localStorage.setItem(
|
|
7528
|
-
this.storageKey,
|
|
7529
|
-
JSON.stringify({
|
|
7530
|
-
...r1.data,
|
|
7531
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7532
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7533
|
-
})
|
|
7534
|
-
);
|
|
7613
|
+
this.persist(r1.data, version);
|
|
7535
7614
|
return {
|
|
7536
7615
|
ok: true,
|
|
7537
7616
|
data: null
|
|
@@ -7540,15 +7619,7 @@ var SessionManager = class {
|
|
|
7540
7619
|
if (input.type === "MOBILE_NUMBER") {
|
|
7541
7620
|
const res2 = await this.authService.createSession(input, version);
|
|
7542
7621
|
if (res2.ok) {
|
|
7543
|
-
|
|
7544
|
-
localStorage.setItem(
|
|
7545
|
-
this.storageKey,
|
|
7546
|
-
JSON.stringify({
|
|
7547
|
-
...res2.data,
|
|
7548
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7549
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7550
|
-
})
|
|
7551
|
-
);
|
|
7622
|
+
this.persist(res2.data, version);
|
|
7552
7623
|
return {
|
|
7553
7624
|
ok: true,
|
|
7554
7625
|
data: null
|
|
@@ -7566,15 +7637,7 @@ var SessionManager = class {
|
|
|
7566
7637
|
version
|
|
7567
7638
|
);
|
|
7568
7639
|
if (res2.ok) {
|
|
7569
|
-
|
|
7570
|
-
localStorage.setItem(
|
|
7571
|
-
this.storageKey,
|
|
7572
|
-
JSON.stringify({
|
|
7573
|
-
...res2.data,
|
|
7574
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7575
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7576
|
-
})
|
|
7577
|
-
);
|
|
7640
|
+
this.persist(res2.data, version);
|
|
7578
7641
|
return {
|
|
7579
7642
|
ok: true,
|
|
7580
7643
|
data: null
|
|
@@ -7586,15 +7649,7 @@ var SessionManager = class {
|
|
|
7586
7649
|
localStorage.setItem(this.platformStorageKey, "CABINET");
|
|
7587
7650
|
const res2 = await this.authService.createSession(input, version);
|
|
7588
7651
|
if (res2.ok) {
|
|
7589
|
-
|
|
7590
|
-
localStorage.setItem(
|
|
7591
|
-
this.storageKey,
|
|
7592
|
-
JSON.stringify({
|
|
7593
|
-
...res2.data,
|
|
7594
|
-
accessTokenExpiresAt: addMinutes(now2, 8).getTime(),
|
|
7595
|
-
refreshTokenExpiresAt: subMinutes(addDays(now2, 30), 2).getTime()
|
|
7596
|
-
})
|
|
7597
|
-
);
|
|
7652
|
+
this.persist(res2.data, version);
|
|
7598
7653
|
return {
|
|
7599
7654
|
ok: true,
|
|
7600
7655
|
data: null
|
|
@@ -7612,15 +7667,7 @@ var SessionManager = class {
|
|
|
7612
7667
|
}
|
|
7613
7668
|
};
|
|
7614
7669
|
}
|
|
7615
|
-
|
|
7616
|
-
localStorage.setItem(
|
|
7617
|
-
this.storageKey,
|
|
7618
|
-
JSON.stringify({
|
|
7619
|
-
...res.data,
|
|
7620
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7621
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7622
|
-
})
|
|
7623
|
-
);
|
|
7670
|
+
this.persist(res.data, version);
|
|
7624
7671
|
return {
|
|
7625
7672
|
ok: true,
|
|
7626
7673
|
data: null
|
|
@@ -7629,18 +7676,10 @@ var SessionManager = class {
|
|
|
7629
7676
|
async createFromAuthenticator(input) {
|
|
7630
7677
|
const res = await this.authService.authenticate(input);
|
|
7631
7678
|
if (res.ok) {
|
|
7632
|
-
const now = /* @__PURE__ */ new Date();
|
|
7633
7679
|
if (this.isServer) {
|
|
7634
7680
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
7635
7681
|
} else {
|
|
7636
|
-
|
|
7637
|
-
this.storageKey,
|
|
7638
|
-
JSON.stringify({
|
|
7639
|
-
...res.data,
|
|
7640
|
-
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7641
|
-
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7642
|
-
})
|
|
7643
|
-
);
|
|
7682
|
+
this.persist(res.data, 1);
|
|
7644
7683
|
}
|
|
7645
7684
|
return { ok: true };
|
|
7646
7685
|
} else {
|
|
@@ -7667,7 +7706,11 @@ var SessionManager = class {
|
|
|
7667
7706
|
};
|
|
7668
7707
|
}
|
|
7669
7708
|
try {
|
|
7670
|
-
|
|
7709
|
+
const stored = JSON.parse(val);
|
|
7710
|
+
if (stored.version === 4) {
|
|
7711
|
+
return await this.getV4(stored.session);
|
|
7712
|
+
}
|
|
7713
|
+
let obj = stored;
|
|
7671
7714
|
let now = /* @__PURE__ */ new Date();
|
|
7672
7715
|
const accessTokenExpiresAt = new Date(obj.accessTokenExpiresAt);
|
|
7673
7716
|
const refreshTokenExpiresAt = new Date(obj.refreshTokenExpiresAt);
|
|
@@ -7685,7 +7728,10 @@ var SessionManager = class {
|
|
|
7685
7728
|
if (isAfter(now, accessTokenExpiresAt)) {
|
|
7686
7729
|
this.logger.info("Refreshing session...");
|
|
7687
7730
|
this.refreshing = true;
|
|
7688
|
-
const res = await this.authService.refreshSession(
|
|
7731
|
+
const res = await this.authService.refreshSession(
|
|
7732
|
+
obj.refreshToken,
|
|
7733
|
+
obj.version ?? 1
|
|
7734
|
+
);
|
|
7689
7735
|
this.refreshing = false;
|
|
7690
7736
|
if (!res.ok) {
|
|
7691
7737
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7707,7 +7753,8 @@ var SessionManager = class {
|
|
|
7707
7753
|
now = /* @__PURE__ */ new Date();
|
|
7708
7754
|
obj = {
|
|
7709
7755
|
...obj,
|
|
7710
|
-
|
|
7756
|
+
accessToken: res.data.accessToken,
|
|
7757
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7711
7758
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7712
7759
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7713
7760
|
};
|
|
@@ -7743,11 +7790,18 @@ var SessionManager = class {
|
|
|
7743
7790
|
};
|
|
7744
7791
|
}
|
|
7745
7792
|
try {
|
|
7746
|
-
|
|
7793
|
+
const stored = JSON.parse(val);
|
|
7794
|
+
if (stored.version === 4) {
|
|
7795
|
+
return await this.refreshV4(stored.session);
|
|
7796
|
+
}
|
|
7797
|
+
let obj = stored;
|
|
7747
7798
|
let now = /* @__PURE__ */ new Date();
|
|
7748
7799
|
this.logger.info("Refreshing session...");
|
|
7749
7800
|
this.refreshing = true;
|
|
7750
|
-
const res = await this.authService.refreshSession(
|
|
7801
|
+
const res = await this.authService.refreshSession(
|
|
7802
|
+
obj.refreshToken,
|
|
7803
|
+
obj.version ?? 1
|
|
7804
|
+
);
|
|
7751
7805
|
this.refreshing = false;
|
|
7752
7806
|
if (!res.ok) {
|
|
7753
7807
|
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
@@ -7769,7 +7823,8 @@ var SessionManager = class {
|
|
|
7769
7823
|
now = /* @__PURE__ */ new Date();
|
|
7770
7824
|
obj = {
|
|
7771
7825
|
...obj,
|
|
7772
|
-
|
|
7826
|
+
accessToken: res.data.accessToken,
|
|
7827
|
+
refreshToken: res.data.refreshToken ?? obj.refreshToken,
|
|
7773
7828
|
accessTokenExpiresAt: addMinutes(now, 8).getTime(),
|
|
7774
7829
|
refreshTokenExpiresAt: subMinutes(addDays(now, 30), 2).getTime()
|
|
7775
7830
|
};
|
|
@@ -7788,15 +7843,70 @@ var SessionManager = class {
|
|
|
7788
7843
|
};
|
|
7789
7844
|
}
|
|
7790
7845
|
}
|
|
7846
|
+
async getV4(session) {
|
|
7847
|
+
const now = /* @__PURE__ */ new Date();
|
|
7848
|
+
if (this.v4AccessToken && this.v4AccessTokenExpiresAt && !isAfter(now, new Date(this.v4AccessTokenExpiresAt))) {
|
|
7849
|
+
return {
|
|
7850
|
+
ok: true,
|
|
7851
|
+
data: {
|
|
7852
|
+
session,
|
|
7853
|
+
accessToken: this.v4AccessToken,
|
|
7854
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7855
|
+
}
|
|
7856
|
+
};
|
|
7857
|
+
}
|
|
7858
|
+
return await this.refreshV4(session);
|
|
7859
|
+
}
|
|
7860
|
+
async refreshV4(session) {
|
|
7861
|
+
this.logger.info("Refreshing session...");
|
|
7862
|
+
this.refreshing = true;
|
|
7863
|
+
const res = await this.authService.refreshSession(void 0, 4);
|
|
7864
|
+
this.refreshing = false;
|
|
7865
|
+
if (!res.ok) {
|
|
7866
|
+
this.logger.error(`Failed to refresh session: ${res.error.message}`);
|
|
7867
|
+
if (res.error.name === "InvalidTokenError" || res.error.name === "AccountBlacklistedError" || res.error.name === "VerificationLockedError") {
|
|
7868
|
+
localStorage.removeItem(this.storageKey);
|
|
7869
|
+
this.v4AccessToken = null;
|
|
7870
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7871
|
+
}
|
|
7872
|
+
return {
|
|
7873
|
+
ok: false,
|
|
7874
|
+
error: res.error
|
|
7875
|
+
};
|
|
7876
|
+
}
|
|
7877
|
+
this.logger.success("Session refreshed!");
|
|
7878
|
+
const now = /* @__PURE__ */ new Date();
|
|
7879
|
+
this.v4AccessToken = res.data.accessToken;
|
|
7880
|
+
this.v4AccessTokenExpiresAt = addMinutes(now, 5).getTime();
|
|
7881
|
+
return {
|
|
7882
|
+
ok: true,
|
|
7883
|
+
data: {
|
|
7884
|
+
session,
|
|
7885
|
+
accessToken: this.v4AccessToken,
|
|
7886
|
+
accessTokenExpiresAt: this.v4AccessTokenExpiresAt
|
|
7887
|
+
}
|
|
7888
|
+
};
|
|
7889
|
+
}
|
|
7791
7890
|
async destroy() {
|
|
7792
7891
|
if (this.isServer) {
|
|
7793
7892
|
this.logger.warn("'localStorage' is not available on the server.");
|
|
7794
7893
|
return;
|
|
7795
7894
|
}
|
|
7895
|
+
let version = 1;
|
|
7896
|
+
const val = localStorage.getItem(this.storageKey);
|
|
7897
|
+
if (val) {
|
|
7898
|
+
try {
|
|
7899
|
+
const stored = JSON.parse(val);
|
|
7900
|
+
version = stored.version ?? 1;
|
|
7901
|
+
} catch {
|
|
7902
|
+
}
|
|
7903
|
+
}
|
|
7796
7904
|
const res = await this.get();
|
|
7797
7905
|
if (res.data?.accessToken) {
|
|
7798
|
-
await this.authService.destroySession(res.data.accessToken);
|
|
7906
|
+
await this.authService.destroySession(res.data.accessToken, version);
|
|
7799
7907
|
}
|
|
7908
|
+
this.v4AccessToken = null;
|
|
7909
|
+
this.v4AccessTokenExpiresAt = null;
|
|
7800
7910
|
localStorage.removeItem(this.storageKey);
|
|
7801
7911
|
}
|
|
7802
7912
|
async verify() {
|