@payez/next-mvp 4.0.44 → 4.0.45
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/dist/lib/api-handler.js +20 -9
- package/package.json +1 -1
- package/src/lib/api-handler.ts +21 -10
package/dist/lib/api-handler.js
CHANGED
|
@@ -173,7 +173,9 @@ class ApiHandler {
|
|
|
173
173
|
return { success: false, reason: 'SESSION_EXPIRED' };
|
|
174
174
|
}
|
|
175
175
|
const { session: sessionData } = sessionWithVersion;
|
|
176
|
-
|
|
176
|
+
// Sessions may store the access token under either field name
|
|
177
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
178
|
+
let accessToken = sessionData.idpAccessToken || sessionData.accessToken || null;
|
|
177
179
|
let userRoles = Array.isArray(sessionData.roles) ? sessionData.roles : [];
|
|
178
180
|
// Merge roles from JWT token
|
|
179
181
|
try {
|
|
@@ -188,7 +190,8 @@ class ApiHandler {
|
|
|
188
190
|
// some session shapes store the refresh token under different field names,
|
|
189
191
|
// and we still want a refresh attempt to populate the access token.
|
|
190
192
|
const thresholdMs = 5 * 60 * 1000;
|
|
191
|
-
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
|
+
const expires = sessionData.idpAccessTokenExpires || sessionData.accessTokenExpires || 0;
|
|
192
195
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
193
196
|
const hasRefreshToken = !!(sessionData.idpRefreshToken || sessionData.refreshToken);
|
|
194
197
|
const accessTokenStale = !accessToken || (expires - Date.now()) <= thresholdMs;
|
|
@@ -303,11 +306,17 @@ class ApiHandler {
|
|
|
303
306
|
// Double-check if still needs refresh
|
|
304
307
|
const latest = await (0, session_store_1.getSession)(sessionToken);
|
|
305
308
|
const thresholdMs = 5 * 60 * 1000;
|
|
306
|
-
|
|
307
|
-
|
|
309
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
310
|
+
const latestAny = latest;
|
|
311
|
+
// Sessions may store the access token under either `accessToken` or `idpAccessToken`,
|
|
312
|
+
// and expiry under `accessTokenExpires` or `idpAccessTokenExpires`.
|
|
313
|
+
const latestAccessToken = latestAny?.accessToken || latestAny?.idpAccessToken;
|
|
314
|
+
const latestExpires = latestAny?.accessTokenExpires || latestAny?.idpAccessTokenExpires || 0;
|
|
315
|
+
const stillNeeds = !latestAccessToken || (latestExpires - Date.now()) <= thresholdMs;
|
|
316
|
+
if (!stillNeeds && latestAccessToken) {
|
|
308
317
|
return {
|
|
309
|
-
accessToken:
|
|
310
|
-
roles: Array.isArray(latest
|
|
318
|
+
accessToken: latestAccessToken,
|
|
319
|
+
roles: Array.isArray(latest?.roles) ? latest.roles : [],
|
|
311
320
|
};
|
|
312
321
|
}
|
|
313
322
|
// Use centralized internal API helper for server-to-server refresh calls
|
|
@@ -316,10 +325,12 @@ class ApiHandler {
|
|
|
316
325
|
return {};
|
|
317
326
|
}
|
|
318
327
|
const refreshed = await (0, session_store_1.getSession)(sessionToken);
|
|
319
|
-
|
|
328
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
329
|
+
const refreshedAccessToken = refreshed?.accessToken || refreshed?.idpAccessToken;
|
|
330
|
+
if (refreshedAccessToken) {
|
|
320
331
|
return {
|
|
321
|
-
accessToken:
|
|
322
|
-
roles: Array.isArray(refreshed
|
|
332
|
+
accessToken: refreshedAccessToken,
|
|
333
|
+
roles: Array.isArray(refreshed?.roles) ? refreshed.roles : [],
|
|
323
334
|
};
|
|
324
335
|
}
|
|
325
336
|
return {};
|
package/package.json
CHANGED
package/src/lib/api-handler.ts
CHANGED
|
@@ -267,7 +267,9 @@ export class ApiHandler {
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
const { session: sessionData } = sessionWithVersion;
|
|
270
|
-
|
|
270
|
+
// Sessions may store the access token under either field name
|
|
271
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
272
|
+
let accessToken = sessionData.idpAccessToken || (sessionData as any).accessToken || null;
|
|
271
273
|
let userRoles: string[] = Array.isArray(sessionData.roles) ? sessionData.roles : [];
|
|
272
274
|
|
|
273
275
|
// Merge roles from JWT token
|
|
@@ -283,7 +285,8 @@ export class ApiHandler {
|
|
|
283
285
|
// some session shapes store the refresh token under different field names,
|
|
284
286
|
// and we still want a refresh attempt to populate the access token.
|
|
285
287
|
const thresholdMs = 5 * 60 * 1000;
|
|
286
|
-
|
|
288
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
289
|
+
const expires = sessionData.idpAccessTokenExpires || (sessionData as any).accessTokenExpires || 0;
|
|
287
290
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
288
291
|
const hasRefreshToken = !!(sessionData.idpRefreshToken || (sessionData as any).refreshToken);
|
|
289
292
|
const accessTokenStale = !accessToken || (expires - Date.now()) <= thresholdMs;
|
|
@@ -424,12 +427,18 @@ export class ApiHandler {
|
|
|
424
427
|
// Double-check if still needs refresh
|
|
425
428
|
const latest = await getSession(sessionToken);
|
|
426
429
|
const thresholdMs = 5 * 60 * 1000;
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
431
|
+
const latestAny = latest as any;
|
|
432
|
+
// Sessions may store the access token under either `accessToken` or `idpAccessToken`,
|
|
433
|
+
// and expiry under `accessTokenExpires` or `idpAccessTokenExpires`.
|
|
434
|
+
const latestAccessToken = latestAny?.accessToken || latestAny?.idpAccessToken;
|
|
435
|
+
const latestExpires = latestAny?.accessTokenExpires || latestAny?.idpAccessTokenExpires || 0;
|
|
436
|
+
const stillNeeds = !latestAccessToken || (latestExpires - Date.now()) <= thresholdMs;
|
|
437
|
+
|
|
438
|
+
if (!stillNeeds && latestAccessToken) {
|
|
430
439
|
return {
|
|
431
|
-
accessToken:
|
|
432
|
-
roles: Array.isArray(latest
|
|
440
|
+
accessToken: latestAccessToken,
|
|
441
|
+
roles: Array.isArray(latest?.roles) ? latest.roles : [],
|
|
433
442
|
};
|
|
434
443
|
}
|
|
435
444
|
|
|
@@ -446,10 +455,12 @@ export class ApiHandler {
|
|
|
446
455
|
}
|
|
447
456
|
|
|
448
457
|
const refreshed = await getSession(sessionToken);
|
|
449
|
-
|
|
458
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
459
|
+
const refreshedAccessToken = (refreshed as any)?.accessToken || (refreshed as any)?.idpAccessToken;
|
|
460
|
+
if (refreshedAccessToken) {
|
|
450
461
|
return {
|
|
451
|
-
accessToken:
|
|
452
|
-
roles: Array.isArray(refreshed
|
|
462
|
+
accessToken: refreshedAccessToken,
|
|
463
|
+
roles: Array.isArray(refreshed?.roles) ? refreshed.roles : [],
|
|
453
464
|
};
|
|
454
465
|
}
|
|
455
466
|
|