@krainovsd/js-helpers 0.3.4 → 0.4.1

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.
@@ -1,3 +1,5 @@
1
+ import { isNull } from '../../typings/is-null.js';
2
+ import { isUndefined } from '../../typings/is-undefined.js';
1
3
  import { waitUntil } from '../../utils/wait-until.js';
2
4
  import 'lodash/get';
3
5
  import '../../../constants/environment.js';
@@ -6,36 +8,42 @@ import '../../date/is-today.js';
6
8
  import '../../date/is-tomorrow.js';
7
9
  import '../../date/is-yesterday.js';
8
10
  import 'lodash/set';
9
- import { tokenRequest } from '../token-request.js';
11
+ import { getAuthToken } from '../auth/token.js';
10
12
 
11
13
  let isFetchingAccessToken = false;
12
14
  const generateAuthMiddleWare = (options) => async (request) => {
13
- if (!options.authRedirectUrl ||
14
- !options.authRedirectUrl ||
15
- !options.storageExpiresTokenName ||
15
+ if (!options.authTokenUrl ||
16
+ !options.authUrl ||
17
+ !options.storageTokenExpiresName ||
16
18
  !options.storageTokenName ||
17
- !options.pathToExpires ||
18
- !options.pathToToken) {
19
- // eslint-disable-next-line no-console
20
- console.error("Auth middleware hasn't required options");
21
- return;
19
+ !options.pathToTokenExpires ||
20
+ !options.pathToToken ||
21
+ !options.errorUrl) {
22
+ throw new Error("Auth middleware hasn't required options");
22
23
  }
23
24
  const isSameOrigin = !request.path.includes("http") && !request.path.includes("https");
24
- if (request.token && !isSameOrigin) {
25
- request.headers = {
26
- ...request.headers,
27
- Authorization: `Bearer ${request.token}`,
28
- };
25
+ if (request.token) {
26
+ if (!isSameOrigin)
27
+ request.headers = {
28
+ ...request.headers,
29
+ Authorization: `Bearer ${request.token}`,
30
+ };
29
31
  return;
30
32
  }
31
33
  if (isFetchingAccessToken)
32
34
  await waitUntil(() => isFetchingAccessToken);
33
- const expires = localStorage.getItem(options.storageExpiresTokenName);
35
+ const expires = localStorage.getItem(options.storageTokenExpiresName);
34
36
  let token = localStorage.getItem(options.storageTokenName);
35
37
  if (!expires || Date.now() > +expires || !token) {
36
38
  isFetchingAccessToken = true;
37
- token = await tokenRequest(options);
39
+ token = await (options.tokenRequest ? options.tokenRequest() : getAuthToken(options));
38
40
  isFetchingAccessToken = false;
41
+ if (isNull(token)) {
42
+ return void window.location.replace(options.authUrl);
43
+ }
44
+ if (isUndefined(token)) {
45
+ return void window.location.replace(options.errorUrl);
46
+ }
39
47
  }
40
48
  if (!isSameOrigin)
41
49
  request.headers = {
@@ -1 +1 @@
1
- {"version":3,"file":"auth-middleware.js","sources":["../../../../../src/lib/api/middlewares/auth-middleware.ts"],"sourcesContent":["import type { AuthMiddleWareOptions, Middleware } from \"../../../types\";\nimport { waitUntil } from \"../../utils\";\nimport { tokenRequest } from \"../token-request\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateAuthMiddleWare =\n (options: AuthMiddleWareOptions): Middleware =>\n async (request) => {\n if (\n !options.authRedirectUrl ||\n !options.authRedirectUrl ||\n !options.storageExpiresTokenName ||\n !options.storageTokenName ||\n !options.pathToExpires ||\n !options.pathToToken\n ) {\n // eslint-disable-next-line no-console\n console.error(\"Auth middleware hasn't required options\");\n\n return;\n }\n\n const isSameOrigin = !request.path.includes(\"http\") && !request.path.includes(\"https\");\n\n if (request.token && !isSameOrigin) {\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.storageExpiresTokenName);\n let token = localStorage.getItem(options.storageTokenName);\n\n if (!expires || Date.now() > +expires || !token) {\n isFetchingAccessToken = true;\n token = await tokenRequest(options as Required<AuthMiddleWareOptions>);\n isFetchingAccessToken = false;\n }\n\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;;AAIA,IAAI,qBAAqB,GAAG,KAAK;AAE1B,MAAM,sBAAsB,GACjC,CAAC,OAA8B,KAC/B,OAAO,OAAO,KAAI;IAChB,IACE,CAAC,OAAO,CAAC,eAAe;QACxB,CAAC,OAAO,CAAC,eAAe;QACxB,CAAC,OAAO,CAAC,uBAAuB;QAChC,CAAC,OAAO,CAAC,gBAAgB;QACzB,CAAC,OAAO,CAAC,aAAa;AACtB,QAAA,CAAC,OAAO,CAAC,WAAW,EACpB;;AAEA,QAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC;QAExD;;IAGF,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAEtF,IAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE;QAClC,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;AAClB,YAAA,aAAa,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,KAAK,CAAE,CAAA;SACzC;QAED;;AAGF,IAAA,IAAI,qBAAqB;AAAE,QAAA,MAAM,SAAS,CAAC,MAAM,qBAAqB,CAAC;IAEvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;IACrE,IAAI,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAE1D,IAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;QAC/C,qBAAqB,GAAG,IAAI;AAC5B,QAAA,KAAK,GAAG,MAAM,YAAY,CAAC,OAA0C,CAAC;QACtE,qBAAqB,GAAG,KAAK;;AAG/B,IAAA,IAAI,CAAC,YAAY;QACf,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
1
+ {"version":3,"file":"auth-middleware.js","sources":["../../../../../src/lib/api/middlewares/auth-middleware.ts"],"sourcesContent":["import type { AuthMiddleWareOptions, Middleware } from \"../../../types\";\nimport { isNull, isUndefined } from \"../../typings\";\nimport { waitUntil } from \"../../utils\";\nimport { getAuthToken } from \"../auth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateAuthMiddleWare =\n (options: AuthMiddleWareOptions): Middleware =>\n async (request) => {\n if (\n !options.authTokenUrl ||\n !options.authUrl ||\n !options.storageTokenExpiresName ||\n !options.storageTokenName ||\n !options.pathToTokenExpires ||\n !options.pathToToken ||\n !options.errorUrl\n ) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !request.path.includes(\"http\") && !request.path.includes(\"https\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.storageTokenExpiresName);\n let token: string | null | undefined = localStorage.getItem(options.storageTokenName);\n\n if (!expires || Date.now() > +expires || !token) {\n isFetchingAccessToken = true;\n token = await (options.tokenRequest ? options.tokenRequest() : getAuthToken(options));\n isFetchingAccessToken = false;\n\n if (isNull(token)) {\n return void window.location.replace(options.authUrl);\n }\n if (isUndefined(token)) {\n return void window.location.replace(options.errorUrl);\n }\n }\n\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;;;;AAKA,IAAI,qBAAqB,GAAG,KAAK;AAE1B,MAAM,sBAAsB,GACjC,CAAC,OAA8B,KAC/B,OAAO,OAAO,KAAI;IAChB,IACE,CAAC,OAAO,CAAC,YAAY;QACrB,CAAC,OAAO,CAAC,OAAO;QAChB,CAAC,OAAO,CAAC,uBAAuB;QAChC,CAAC,OAAO,CAAC,gBAAgB;QACzB,CAAC,OAAO,CAAC,kBAAkB;QAC3B,CAAC,OAAO,CAAC,WAAW;AACpB,QAAA,CAAC,OAAO,CAAC,QAAQ,EACjB;AACA,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;IAG5D,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAEtF,IAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,OAAO,GAAG;gBAChB,GAAG,OAAO,CAAC,OAAO;AAClB,gBAAA,aAAa,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,KAAK,CAAE,CAAA;aACzC;QAEH;;AAGF,IAAA,IAAI,qBAAqB;AAAE,QAAA,MAAM,SAAS,CAAC,MAAM,qBAAqB,CAAC;IAEvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;IACrE,IAAI,KAAK,GAA8B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAErF,IAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;QAC/C,qBAAqB,GAAG,IAAI;QAC5B,KAAK,GAAG,OAAO,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACrF,qBAAqB,GAAG,KAAK;AAE7B,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;;AAEtD,QAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;;;AAIzD,IAAA,IAAI,CAAC,YAAY;QACf,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
@@ -3,8 +3,8 @@ import { IS_BROWSER, IS_JEST } from '../../../constants/environment.js';
3
3
  import { generateAuthMiddleWare } from './auth-middleware.js';
4
4
  import { consoleMiddleware } from './console-middleware.js';
5
5
 
6
- function generateMiddlewares(activeMiddlewares, middlewareOptions) {
7
- const selectedMiddlewares = [];
6
+ function generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlewares) {
7
+ const selectedMiddlewares = customMiddlewares;
8
8
  for (const key of activeMiddlewares) {
9
9
  switch (key) {
10
10
  case API_MIDDLEWARES.Auth: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/lib/api/middlewares/index.ts"],"sourcesContent":["import { API_MIDDLEWARES, IS_BROWSER, IS_JEST } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n Middleware,\n MiddlewaresOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateAuthMiddleWare } from \"./auth-middleware\";\nimport { consoleMiddleware } from \"./console-middleware\";\n\nexport function generateMiddlewares(\n activeMiddlewares: ActiveMiddleware,\n middlewareOptions: MiddlewaresOptions,\n) {\n const selectedMiddlewares: Middleware[] = [];\n\n for (const key of activeMiddlewares) {\n switch (key) {\n case API_MIDDLEWARES.Auth: {\n if (middlewareOptions.auth && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(generateAuthMiddleWare(middlewareOptions.auth));\n continue;\n }\n case API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(consoleMiddleware);\n continue;\n }\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares<T, Incoming, Body, Outcoming>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(request);\n }\n\n resolve(1);\n })();\n });\n };\n}\n"],"names":[],"mappings":";;;;;AAUgB,SAAA,mBAAmB,CACjC,iBAAmC,EACnC,iBAAqC,EAAA;IAErC,MAAM,mBAAmB,GAAiB,EAAE;AAE5C,IAAA,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;QACnC,QAAQ,GAAG;AACT,YAAA,KAAK,eAAe,CAAC,IAAI,EAAE;gBACzB,IAAI,iBAAiB,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC;oBACnD,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1E;;AAEF,YAAA,KAAK,eAAe,CAAC,MAAM,EAAE;AAC3B,gBAAA,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC3C;;YAEF,SAAS;gBACP;;;;IAKN,OAAO,SAAS,kBAAkB,CAChC,OAAuD,EAAA;AAEvD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,YAAW;AACf,gBAAA,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE;;AAE5C,oBAAA,MAAM,UAAU,CAAC,OAAO,CAAC;;gBAG3B,OAAO,CAAC,CAAC,CAAC;aACX,GAAG;AACN,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/lib/api/middlewares/index.ts"],"sourcesContent":["import { API_MIDDLEWARES, IS_BROWSER, IS_JEST } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n Middleware,\n MiddlewaresOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateAuthMiddleWare } from \"./auth-middleware\";\nimport { consoleMiddleware } from \"./console-middleware\";\n\nexport function generateMiddlewares(\n activeMiddlewares: ActiveMiddleware,\n middlewareOptions: MiddlewaresOptions,\n customMiddlewares: Middleware[],\n) {\n const selectedMiddlewares: Middleware[] = customMiddlewares;\n\n for (const key of activeMiddlewares) {\n switch (key) {\n case API_MIDDLEWARES.Auth: {\n if (middlewareOptions.auth && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(generateAuthMiddleWare(middlewareOptions.auth));\n continue;\n }\n case API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(consoleMiddleware);\n continue;\n }\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares<T, Incoming, Body, Outcoming>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(request);\n }\n\n resolve(1);\n })();\n });\n };\n}\n"],"names":[],"mappings":";;;;;SAUgB,mBAAmB,CACjC,iBAAmC,EACnC,iBAAqC,EACrC,iBAA+B,EAAA;IAE/B,MAAM,mBAAmB,GAAiB,iBAAiB;AAE3D,IAAA,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;QACnC,QAAQ,GAAG;AACT,YAAA,KAAK,eAAe,CAAC,IAAI,EAAE;gBACzB,IAAI,iBAAiB,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC;oBACnD,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1E;;AAEF,YAAA,KAAK,eAAe,CAAC,MAAM,EAAE;AAC3B,gBAAA,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC3C;;YAEF,SAAS;gBACP;;;;IAKN,OAAO,SAAS,kBAAkB,CAChC,OAAuD,EAAA;AAEvD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,YAAW;AACf,gBAAA,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE;;AAE5C,oBAAA,MAAM,UAAU,CAAC,OAAO,CAAC;;gBAG3B,OAAO,CAAC,CAAC,CAAC;aACX,GAAG;AACN,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}