@krainovsd/js-helpers 0.15.2 → 0.15.3
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/lib/cjs/index.cjs +36 -27
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/lib/api/core.js +8 -4
- package/lib/esm/lib/api/core.js.map +1 -1
- package/lib/esm/lib/api/middlewares/console-post-middleware.js +1 -1
- package/lib/esm/lib/api/middlewares/console-post-middleware.js.map +1 -1
- package/lib/esm/lib/api/middlewares/index.js +6 -5
- package/lib/esm/lib/api/middlewares/index.js.map +1 -1
- package/lib/esm/lib/api/middlewares/oauth-middleware.js +20 -1
- package/lib/esm/lib/api/middlewares/oauth-middleware.js.map +1 -1
- package/lib/esm/lib/api/oauth/token.js +3 -17
- package/lib/esm/lib/api/oauth/token.js.map +1 -1
- package/lib/index.d.ts +6 -5
- package/package.json +1 -1
package/lib/cjs/index.cjs
CHANGED
|
@@ -1330,7 +1330,7 @@ function generateConsoleMiddleware(options = {}) {
|
|
|
1330
1330
|
}
|
|
1331
1331
|
|
|
1332
1332
|
function generateConsolePostMiddleware(options = {}) {
|
|
1333
|
-
return (response) => {
|
|
1333
|
+
return (request, response) => {
|
|
1334
1334
|
return new Promise((resolve) => {
|
|
1335
1335
|
void (async function logger() {
|
|
1336
1336
|
try {
|
|
@@ -1380,13 +1380,8 @@ function generateConsolePostMiddleware(options = {}) {
|
|
|
1380
1380
|
};
|
|
1381
1381
|
}
|
|
1382
1382
|
|
|
1383
|
-
let waiting = false;
|
|
1384
1383
|
async function getOauthTokenFromOtherWindow(options) {
|
|
1385
|
-
|
|
1386
|
-
const expires = localStorage.getItem(options.expiresTokenStorageName);
|
|
1387
|
-
if (expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires)
|
|
1388
|
-
return;
|
|
1389
|
-
waiting = true;
|
|
1384
|
+
let waiting = true;
|
|
1390
1385
|
const url = new URL(typeof options.refreshTokenWindowUrl === "function"
|
|
1391
1386
|
? options.refreshTokenWindowUrl()
|
|
1392
1387
|
: (options.refreshTokenWindowUrl ?? window.origin));
|
|
@@ -1431,9 +1426,6 @@ async function getOauthTokenFromOtherWindow(options) {
|
|
|
1431
1426
|
await waitUntil(() => waiting);
|
|
1432
1427
|
}
|
|
1433
1428
|
function getOauthToken(options) {
|
|
1434
|
-
let expires = localStorage.getItem(options.expiresTokenStorageName);
|
|
1435
|
-
if (!expires || Number.isNaN(+expires) || Date.now() > +expires)
|
|
1436
|
-
expires = null;
|
|
1437
1429
|
const queries = getQueryValues([
|
|
1438
1430
|
options.expiresTokenQueryName,
|
|
1439
1431
|
options.onlyRefreshTokenWindowQueryName,
|
|
@@ -1447,17 +1439,11 @@ function getOauthToken(options) {
|
|
|
1447
1439
|
? refreshQuery[refreshQuery.length - 1] === "true"
|
|
1448
1440
|
: false;
|
|
1449
1441
|
/** Expires token */
|
|
1450
|
-
const
|
|
1442
|
+
const expires = isString(expiresQuery)
|
|
1451
1443
|
? expiresQuery
|
|
1452
1444
|
: isArray(expiresQuery)
|
|
1453
1445
|
? expiresQuery[expiresQuery.length - 1]
|
|
1454
1446
|
: false;
|
|
1455
|
-
/** Extract expires from query */
|
|
1456
|
-
if (!expires && expiresFromQuery) {
|
|
1457
|
-
expires = expiresFromQuery;
|
|
1458
|
-
if (!expires || Number.isNaN(+expires) || Date.now() > +expires)
|
|
1459
|
-
expires = null;
|
|
1460
|
-
}
|
|
1461
1447
|
/** OAuth flow if not expires */
|
|
1462
1448
|
if (!expires) {
|
|
1463
1449
|
window.location.replace(typeof options.oauthUrl === "function" ? options.oauthUrl() : options.oauthUrl);
|
|
@@ -1472,7 +1458,7 @@ function getOauthToken(options) {
|
|
|
1472
1458
|
window.close();
|
|
1473
1459
|
}
|
|
1474
1460
|
/** Delete expires query */
|
|
1475
|
-
if (
|
|
1461
|
+
if (expires) {
|
|
1476
1462
|
const url = new URL(window.location.href);
|
|
1477
1463
|
url.searchParams.delete(options.expiresTokenQueryName);
|
|
1478
1464
|
window.location.replace(url.toString());
|
|
@@ -1553,14 +1539,34 @@ const generateOauthMiddleware = (options) => async (request) => {
|
|
|
1553
1539
|
Authorization: `Bearer ${token}`,
|
|
1554
1540
|
};
|
|
1555
1541
|
};
|
|
1542
|
+
async function refetchAfterOauth(options, refetch) {
|
|
1543
|
+
isFetchingAccessToken = true;
|
|
1544
|
+
await getOauthTokenFromOtherWindow({
|
|
1545
|
+
onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,
|
|
1546
|
+
onWindowOpenError: options.onWindowOpenError,
|
|
1547
|
+
refreshTokenWindowUrl: options.refreshTokenWindowUrl,
|
|
1548
|
+
wait: options.wait,
|
|
1549
|
+
expiresTokenStorageName: options.expiresTokenStorageName,
|
|
1550
|
+
closeObserveInterval: options.closeObserveInterval,
|
|
1551
|
+
});
|
|
1552
|
+
if (options.tokenRequest) {
|
|
1553
|
+
const token = await options.tokenRequest();
|
|
1554
|
+
if (token != undefined && options.tokenStorageName) {
|
|
1555
|
+
localStorage.setItem(options.tokenStorageName, token);
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
isFetchingAccessToken = false;
|
|
1559
|
+
return await refetch();
|
|
1560
|
+
}
|
|
1556
1561
|
|
|
1557
|
-
|
|
1562
|
+
// eslint-disable-next-line max-params
|
|
1563
|
+
function generateMiddlewares(activeMiddlewares, middlewareOptions, oauthOptions, customMiddlewares) {
|
|
1558
1564
|
const selectedMiddlewares = customMiddlewares;
|
|
1559
1565
|
for (const key of activeMiddlewares) {
|
|
1560
1566
|
switch (key) {
|
|
1561
1567
|
case API_MIDDLEWARES.Oauth: {
|
|
1562
|
-
if (
|
|
1563
|
-
selectedMiddlewares.push(generateOauthMiddleware(
|
|
1568
|
+
if (oauthOptions && (IS_BROWSER || IS_JEST))
|
|
1569
|
+
selectedMiddlewares.push(generateOauthMiddleware(oauthOptions));
|
|
1564
1570
|
continue;
|
|
1565
1571
|
}
|
|
1566
1572
|
case API_MIDDLEWARES.Logger: {
|
|
@@ -1597,12 +1603,12 @@ function generatePostMiddlewares(activePostMiddlewares, postMiddlewaresOptions,
|
|
|
1597
1603
|
}
|
|
1598
1604
|
}
|
|
1599
1605
|
}
|
|
1600
|
-
return function executeMiddlewares(response) {
|
|
1606
|
+
return function executeMiddlewares(request, response) {
|
|
1601
1607
|
return new Promise((resolve) => {
|
|
1602
1608
|
void (async () => {
|
|
1603
1609
|
for (const middleware of selectedMiddlewares) {
|
|
1604
1610
|
// eslint-disable-next-line no-await-in-loop
|
|
1605
|
-
await middleware(response);
|
|
1611
|
+
await middleware(request, response);
|
|
1606
1612
|
}
|
|
1607
1613
|
resolve(1);
|
|
1608
1614
|
})();
|
|
@@ -1626,8 +1632,8 @@ class ResponseError extends Error {
|
|
|
1626
1632
|
function createRequestClientInstance(options) {
|
|
1627
1633
|
let executeMiddlewares;
|
|
1628
1634
|
let executePostMiddlewares;
|
|
1629
|
-
function setMiddlewares({ activeMiddlewares = [], middlewareOptions = {}, customMiddlewares = [], activePostMiddlewares = [], postMiddlewaresOptions = {}, customPostMiddlewares = [], } = {}) {
|
|
1630
|
-
executeMiddlewares = generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlewares);
|
|
1635
|
+
function setMiddlewares({ activeMiddlewares = [], middlewareOptions = {}, customMiddlewares = [], activePostMiddlewares = [], postMiddlewaresOptions = {}, customPostMiddlewares = [], oauthOptions = undefined, } = {}) {
|
|
1636
|
+
executeMiddlewares = generateMiddlewares(activeMiddlewares, middlewareOptions, oauthOptions, customMiddlewares);
|
|
1631
1637
|
executePostMiddlewares = generatePostMiddlewares(activePostMiddlewares, postMiddlewaresOptions, customPostMiddlewares);
|
|
1632
1638
|
}
|
|
1633
1639
|
setMiddlewares(options);
|
|
@@ -1645,7 +1651,7 @@ function createRequestClientInstance(options) {
|
|
|
1645
1651
|
: transformedResult;
|
|
1646
1652
|
}
|
|
1647
1653
|
await executeMiddlewares(request);
|
|
1648
|
-
const { method, body, path, params, headers = {} } = request;
|
|
1654
|
+
const { method, body, path, params, headers = {}, refetchNoAuth = true } = request;
|
|
1649
1655
|
const url = createURLWithParams({ baseURL: path, params });
|
|
1650
1656
|
const [, requestContentType] = Object.entries(headers).find(([header]) => header.toLowerCase() === "content-type") ?? [];
|
|
1651
1657
|
let preparedBody = body;
|
|
@@ -1670,7 +1676,7 @@ function createRequestClientInstance(options) {
|
|
|
1670
1676
|
headers: headers,
|
|
1671
1677
|
signal: request.signal,
|
|
1672
1678
|
});
|
|
1673
|
-
await executePostMiddlewares(response);
|
|
1679
|
+
await executePostMiddlewares(request, response);
|
|
1674
1680
|
if (!response) {
|
|
1675
1681
|
throw new Error("hasn't response");
|
|
1676
1682
|
}
|
|
@@ -1684,6 +1690,9 @@ function createRequestClientInstance(options) {
|
|
|
1684
1690
|
}
|
|
1685
1691
|
: undefined;
|
|
1686
1692
|
}
|
|
1693
|
+
if (response.status === 401 && refetchNoAuth && options.oauthOptions) {
|
|
1694
|
+
return refetchAfterOauth(options.oauthOptions, () => handleRequest({ ...request, refetchNoAuth: false }, responseWithStatus));
|
|
1695
|
+
}
|
|
1687
1696
|
if (request.defaultResponse) {
|
|
1688
1697
|
const defaultResponse = typeof request.defaultResponse === "function"
|
|
1689
1698
|
? request.defaultResponse()
|