@ackplus/nest-auth-client 1.1.29

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.
Files changed (62) hide show
  1. package/README.md +93 -0
  2. package/dist/client/auth-client.d.ts +60 -0
  3. package/dist/client/auth-client.d.ts.map +1 -0
  4. package/dist/client/auth-client.js +383 -0
  5. package/dist/client/auth-client.js.map +1 -0
  6. package/dist/client/event-emitter.d.ts +27 -0
  7. package/dist/client/event-emitter.d.ts.map +1 -0
  8. package/dist/client/event-emitter.js +46 -0
  9. package/dist/client/event-emitter.js.map +1 -0
  10. package/dist/client/refresh-queue.d.ts +16 -0
  11. package/dist/client/refresh-queue.d.ts.map +1 -0
  12. package/dist/client/refresh-queue.js +63 -0
  13. package/dist/client/refresh-queue.js.map +1 -0
  14. package/dist/http/axios.adapter.d.ts +3 -0
  15. package/dist/http/axios.adapter.d.ts.map +1 -0
  16. package/dist/http/axios.adapter.js +55 -0
  17. package/dist/http/axios.adapter.js.map +1 -0
  18. package/dist/http/fetch.adapter.d.ts +5 -0
  19. package/dist/http/fetch.adapter.d.ts.map +1 -0
  20. package/dist/http/fetch.adapter.js +50 -0
  21. package/dist/http/fetch.adapter.js.map +1 -0
  22. package/dist/index.d.ts +18 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +15 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/storage/cookie.storage.d.ts +22 -0
  27. package/dist/storage/cookie.storage.d.ts.map +1 -0
  28. package/dist/storage/cookie.storage.js +79 -0
  29. package/dist/storage/cookie.storage.js.map +1 -0
  30. package/dist/storage/local.storage.d.ts +11 -0
  31. package/dist/storage/local.storage.d.ts.map +1 -0
  32. package/dist/storage/local.storage.js +56 -0
  33. package/dist/storage/local.storage.js.map +1 -0
  34. package/dist/storage/memory.storage.d.ts +9 -0
  35. package/dist/storage/memory.storage.d.ts.map +1 -0
  36. package/dist/storage/memory.storage.js +18 -0
  37. package/dist/storage/memory.storage.js.map +1 -0
  38. package/dist/storage/session.storage.d.ts +11 -0
  39. package/dist/storage/session.storage.d.ts.map +1 -0
  40. package/dist/storage/session.storage.js +56 -0
  41. package/dist/storage/session.storage.js.map +1 -0
  42. package/dist/token/jwt-utils.d.ts +7 -0
  43. package/dist/token/jwt-utils.d.ts.map +1 -0
  44. package/dist/token/jwt-utils.js +49 -0
  45. package/dist/token/jwt-utils.js.map +1 -0
  46. package/dist/token/token-manager.d.ts +29 -0
  47. package/dist/token/token-manager.d.ts.map +1 -0
  48. package/dist/token/token-manager.js +102 -0
  49. package/dist/token/token-manager.js.map +1 -0
  50. package/dist/types/auth.types.d.ts +33 -0
  51. package/dist/types/auth.types.d.ts.map +1 -0
  52. package/dist/types/auth.types.js +2 -0
  53. package/dist/types/auth.types.js.map +1 -0
  54. package/dist/types/config.types.d.ts +73 -0
  55. package/dist/types/config.types.d.ts.map +1 -0
  56. package/dist/types/config.types.js +17 -0
  57. package/dist/types/config.types.js.map +1 -0
  58. package/dist/utils/role-utils.d.ts +12 -0
  59. package/dist/utils/role-utils.d.ts.map +1 -0
  60. package/dist/utils/role-utils.js +43 -0
  61. package/dist/utils/role-utils.js.map +1 -0
  62. package/package.json +56 -0
@@ -0,0 +1,16 @@
1
+ export declare class RefreshQueue {
2
+ private refreshPromise;
3
+ private pendingRequests;
4
+ isRefreshing(): boolean;
5
+ refresh<T>(refreshFn: () => Promise<T>): Promise<T>;
6
+ cancel(): void;
7
+ }
8
+ export declare class RetryTracker {
9
+ private retriedRequests;
10
+ private getKey;
11
+ createRequestId(method: string, url: string): string;
12
+ hasRetried(requestId: string): boolean;
13
+ markRetried(requestId: string): void;
14
+ clear(): void;
15
+ }
16
+ //# sourceMappingURL=refresh-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-queue.d.ts","sourceRoot":"","sources":["../../src/client/refresh-queue.ts"],"names":[],"mappings":"AAWA,qBAAa,YAAY;IACrB,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,eAAe,CAGf;IAKR,YAAY,IAAI,OAAO;IAUjB,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiCzD,MAAM,IAAI,IAAI;CAQjB;AAMD,qBAAa,YAAY;IACrB,OAAO,CAAC,eAAe,CAAqB;IAK5C,OAAO,CAAC,MAAM;IAOd,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAOpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOtC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYpC,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,63 @@
1
+ export class RefreshQueue {
2
+ constructor() {
3
+ this.refreshPromise = null;
4
+ this.pendingRequests = [];
5
+ }
6
+ isRefreshing() {
7
+ return this.refreshPromise !== null;
8
+ }
9
+ async refresh(refreshFn) {
10
+ if (this.refreshPromise) {
11
+ return new Promise((resolve, reject) => {
12
+ this.pendingRequests.push({ resolve, reject });
13
+ });
14
+ }
15
+ this.refreshPromise = refreshFn();
16
+ try {
17
+ const result = await this.refreshPromise;
18
+ this.pendingRequests.forEach(({ resolve }) => resolve(result));
19
+ this.pendingRequests = [];
20
+ return result;
21
+ }
22
+ catch (error) {
23
+ this.pendingRequests.forEach(({ reject }) => reject(error));
24
+ this.pendingRequests = [];
25
+ throw error;
26
+ }
27
+ finally {
28
+ this.refreshPromise = null;
29
+ }
30
+ }
31
+ cancel() {
32
+ if (this.refreshPromise) {
33
+ const error = new Error('Refresh cancelled');
34
+ this.pendingRequests.forEach(({ reject }) => reject(error));
35
+ this.pendingRequests = [];
36
+ this.refreshPromise = null;
37
+ }
38
+ }
39
+ }
40
+ export class RetryTracker {
41
+ constructor() {
42
+ this.retriedRequests = new Set();
43
+ }
44
+ getKey(method, url) {
45
+ return `${method}:${url}:${Date.now()}`;
46
+ }
47
+ createRequestId(method, url) {
48
+ return this.getKey(method, url);
49
+ }
50
+ hasRetried(requestId) {
51
+ return this.retriedRequests.has(requestId);
52
+ }
53
+ markRetried(requestId) {
54
+ this.retriedRequests.add(requestId);
55
+ setTimeout(() => {
56
+ this.retriedRequests.delete(requestId);
57
+ }, 60000);
58
+ }
59
+ clear() {
60
+ this.retriedRequests.clear();
61
+ }
62
+ }
63
+ //# sourceMappingURL=refresh-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-queue.js","sourceRoot":"","sources":["../../src/client/refresh-queue.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,YAAY;IAAzB;QACY,mBAAc,GAAwB,IAAI,CAAC;QAC3C,oBAAe,GAGlB,EAAE,CAAC;IAwDZ,CAAC;IAnDG,YAAY;QACR,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACxC,CAAC;IAQD,KAAK,CAAC,OAAO,CAAI,SAA2B;QAExC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACP,CAAC;QAGD,IAAI,CAAC,cAAc,GAAG,SAAS,EAAE,CAAC;QAElC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YAGzC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAE1B,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAE1B,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;IACL,CAAC;IAKD,MAAM;QACF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;IACL,CAAC;CACJ;AAMD,MAAM,OAAO,YAAY;IAAzB;QACY,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAyChD,CAAC;IApCW,MAAM,CAAC,MAAc,EAAE,GAAW;QACtC,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC5C,CAAC;IAKD,eAAe,CAAC,MAAc,EAAE,GAAW;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAKD,UAAU,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAKD,WAAW,CAAC,SAAiB;QACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAGpC,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC;IAKD,KAAK;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ import { HttpAdapter } from '../types/config.types';
2
+ export declare function createAxiosAdapter(axiosInstance: any): HttpAdapter;
3
+ //# sourceMappingURL=axios.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.adapter.d.ts","sourceRoot":"","sources":["../../src/http/axios.adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAoC,MAAM,uBAAuB,CAAC;AAsBtF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,GAAG,GAAG,WAAW,CA2DlE"}
@@ -0,0 +1,55 @@
1
+ export function createAxiosAdapter(axiosInstance) {
2
+ return {
3
+ async request(options) {
4
+ const { url, method, headers = {}, body, credentials, timeout, signal } = options;
5
+ try {
6
+ const response = await axiosInstance.request({
7
+ url,
8
+ method: method.toLowerCase(),
9
+ headers,
10
+ data: body,
11
+ withCredentials: credentials === 'include',
12
+ timeout,
13
+ signal,
14
+ });
15
+ const responseHeaders = {};
16
+ if (response.headers) {
17
+ if (typeof response.headers.forEach === 'function') {
18
+ response.headers.forEach((value, key) => {
19
+ responseHeaders[key.toLowerCase()] = value;
20
+ });
21
+ }
22
+ else {
23
+ Object.entries(response.headers).forEach(([key, value]) => {
24
+ responseHeaders[key.toLowerCase()] = String(value);
25
+ });
26
+ }
27
+ }
28
+ return {
29
+ status: response.status,
30
+ data: response.data,
31
+ headers: responseHeaders,
32
+ ok: response.status >= 200 && response.status < 300,
33
+ };
34
+ }
35
+ catch (error) {
36
+ if (error.response) {
37
+ const responseHeaders = {};
38
+ if (error.response.headers) {
39
+ Object.entries(error.response.headers).forEach(([key, value]) => {
40
+ responseHeaders[key.toLowerCase()] = String(value);
41
+ });
42
+ }
43
+ return {
44
+ status: error.response.status,
45
+ data: error.response.data,
46
+ headers: responseHeaders,
47
+ ok: false,
48
+ };
49
+ }
50
+ throw error;
51
+ }
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=axios.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.adapter.js","sourceRoot":"","sources":["../../src/http/axios.adapter.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,kBAAkB,CAAC,aAAkB;IACjD,OAAO;QACH,KAAK,CAAC,OAAO,CAAU,OAA2B;YAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAElF,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC;oBACzC,GAAG;oBACH,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;oBAC5B,OAAO;oBACP,IAAI,EAAE,IAAI;oBACV,eAAe,EAAE,WAAW,KAAK,SAAS;oBAC1C,OAAO;oBACP,MAAM;iBACT,CAAC,CAAC;gBAGH,MAAM,eAAe,GAA2B,EAAE,CAAC;gBACnD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;wBACjD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;4BACpD,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;wBAC/C,CAAC,CAAC,CAAC;oBACP,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;4BACtD,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBACvD,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,OAAO;oBACH,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,eAAe;oBACxB,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;iBACtD,CAAC;YACN,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAElB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjB,MAAM,eAAe,GAA2B,EAAE,CAAC;oBACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;4BAC5D,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBACvD,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,OAAO;wBACH,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;wBAC7B,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;wBACzB,OAAO,EAAE,eAAe;wBACxB,EAAE,EAAE,KAAK;qBACZ,CAAC;gBACN,CAAC;gBAGD,MAAM,KAAK,CAAC;YAChB,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { HttpAdapter, HttpRequestOptions, HttpResponse } from '../types/config.types';
2
+ export declare class FetchAdapter implements HttpAdapter {
3
+ request<T = any>(options: HttpRequestOptions): Promise<HttpResponse<T>>;
4
+ }
5
+ //# sourceMappingURL=fetch.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.adapter.d.ts","sourceRoot":"","sources":["../../src/http/fetch.adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAWtF,qBAAa,YAAa,YAAW,WAAW;IAItC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAyDhF"}
@@ -0,0 +1,50 @@
1
+ export class FetchAdapter {
2
+ async request(options) {
3
+ const { url, method, headers = {}, body, credentials = 'same-origin', timeout, signal } = options;
4
+ let timeoutId;
5
+ let abortController;
6
+ if (timeout && !signal) {
7
+ abortController = new AbortController();
8
+ timeoutId = setTimeout(() => abortController?.abort(), timeout);
9
+ }
10
+ try {
11
+ const fetchOptions = {
12
+ method,
13
+ headers: {
14
+ 'Content-Type': 'application/json',
15
+ ...headers,
16
+ },
17
+ credentials,
18
+ signal: signal || abortController?.signal,
19
+ };
20
+ if (body && method !== 'GET') {
21
+ fetchOptions.body = JSON.stringify(body);
22
+ }
23
+ const response = await fetch(url, fetchOptions);
24
+ const responseHeaders = {};
25
+ response.headers.forEach((value, key) => {
26
+ responseHeaders[key.toLowerCase()] = value;
27
+ });
28
+ let data;
29
+ const contentType = responseHeaders['content-type'] || '';
30
+ if (contentType.includes('application/json')) {
31
+ data = await response.json();
32
+ }
33
+ else {
34
+ data = await response.text();
35
+ }
36
+ return {
37
+ status: response.status,
38
+ data,
39
+ headers: responseHeaders,
40
+ ok: response.ok,
41
+ };
42
+ }
43
+ finally {
44
+ if (timeoutId) {
45
+ clearTimeout(timeoutId);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=fetch.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.adapter.js","sourceRoot":"","sources":["../../src/http/fetch.adapter.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,YAAY;IAIrB,KAAK,CAAC,OAAO,CAAU,OAA2B;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAGlG,IAAI,SAAoD,CAAC;QACzD,IAAI,eAA4C,CAAC;QAEjD,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YACxC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC;YACD,MAAM,YAAY,GAAgB;gBAC9B,MAAM;gBACN,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO;iBACb;gBACD,WAAW;gBACX,MAAM,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM;aAC5C,CAAC;YAEF,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAGhD,MAAM,eAAe,GAA2B,EAAE,CAAC;YACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACpC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;YAC/C,CAAC,CAAC,CAAC;YAGH,IAAI,IAAO,CAAC;YACZ,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAE1D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC3C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;YACxC,CAAC;YAED,OAAO;gBACH,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI;gBACJ,OAAO,EAAE,eAAe;gBACxB,EAAE,EAAE,QAAQ,CAAC,EAAE;aAClB,CAAC;QACN,CAAC;gBAAS,CAAC;YACP,IAAI,SAAS,EAAE,CAAC;gBACZ,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,18 @@
1
+ export * from '@ackplus/nest-auth-contracts';
2
+ export { AuthStatus, AuthState, AuthError, DecodedJwt, ClientSession, } from './types/auth.types';
3
+ export { StorageAdapter, HttpAdapter, HttpRequestOptions, HttpResponse, Logger, EndpointConfig, AccessTokenType, AuthClientConfig, RequestOptions, } from './types/config.types';
4
+ export { DEFAULT_ENDPOINTS } from './types/config.types';
5
+ export { MemoryStorage } from './storage/memory.storage';
6
+ export { LocalStorageAdapter } from './storage/local.storage';
7
+ export { SessionStorageAdapter } from './storage/session.storage';
8
+ export { CookieStorageAdapter, CookieOptions } from './storage/cookie.storage';
9
+ export { FetchAdapter } from './http/fetch.adapter';
10
+ export { createAxiosAdapter } from './http/axios.adapter';
11
+ export { decodeJwt, isTokenExpired, getTokenExpirationDate, getTokenTimeToExpiry, getUserIdFromToken } from './token/jwt-utils';
12
+ export { TokenManager, TokenManagerConfig } from './token/token-manager';
13
+ export { AuthClient } from './client/auth-client';
14
+ export { EventEmitter, createAuthEventEmitter } from './client/event-emitter';
15
+ export type { AuthEvents } from './client/event-emitter';
16
+ export { RefreshQueue, RetryTracker } from './client/refresh-queue';
17
+ export { hasRole, hasPermission, hasAnyAccess, hasAllAccess } from './utils/role-utils';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,8BAA8B,CAAC;AAG7C,OAAO,EACH,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,GACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGpE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ export * from '@ackplus/nest-auth-contracts';
2
+ export { DEFAULT_ENDPOINTS } from './types/config.types';
3
+ export { MemoryStorage } from './storage/memory.storage';
4
+ export { LocalStorageAdapter } from './storage/local.storage';
5
+ export { SessionStorageAdapter } from './storage/session.storage';
6
+ export { CookieStorageAdapter } from './storage/cookie.storage';
7
+ export { FetchAdapter } from './http/fetch.adapter';
8
+ export { createAxiosAdapter } from './http/axios.adapter';
9
+ export { decodeJwt, isTokenExpired, getTokenExpirationDate, getTokenTimeToExpiry, getUserIdFromToken } from './token/jwt-utils';
10
+ export { TokenManager } from './token/token-manager';
11
+ export { AuthClient } from './client/auth-client';
12
+ export { EventEmitter, createAuthEventEmitter } from './client/event-emitter';
13
+ export { RefreshQueue, RetryTracker } from './client/refresh-queue';
14
+ export { hasRole, hasPermission, hasAnyAccess, hasAllAccess } from './utils/role-utils';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,8BAA8B,CAAC;AAwB7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAiB,MAAM,0BAA0B,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGpE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { StorageAdapter } from '../types/config.types';
2
+ export interface CookieOptions {
3
+ path?: string;
4
+ domain?: string;
5
+ secure?: boolean;
6
+ sameSite?: 'strict' | 'lax' | 'none';
7
+ maxAge?: number;
8
+ }
9
+ export declare class CookieStorageAdapter implements StorageAdapter {
10
+ private prefix;
11
+ private options;
12
+ constructor(prefix?: string, options?: CookieOptions);
13
+ private getKey;
14
+ private getCookie;
15
+ private setCookie;
16
+ private deleteCookie;
17
+ get(key: string): string | null;
18
+ set(key: string, value: string): void;
19
+ remove(key: string): void;
20
+ clear(): void;
21
+ }
22
+ //# sourceMappingURL=cookie.storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.storage.d.ts","sourceRoot":"","sources":["../../src/storage/cookie.storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAYvD,MAAM,WAAW,aAAa;IAE1B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAErC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,qBAAa,oBAAqB,YAAW,cAAc;IACvD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;gBAOnB,MAAM,GAAE,MAAqB,EAAE,OAAO,GAAE,aAAkB;IAUtE,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,YAAY;IASpB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAWhB"}
@@ -0,0 +1,79 @@
1
+ const isBrowser = () => {
2
+ return typeof document !== 'undefined';
3
+ };
4
+ export class CookieStorageAdapter {
5
+ constructor(prefix = 'nest_auth_', options = {}) {
6
+ this.prefix = prefix;
7
+ this.options = {
8
+ path: '/',
9
+ secure: typeof location !== 'undefined' && location.protocol === 'https:',
10
+ sameSite: 'lax',
11
+ ...options,
12
+ };
13
+ }
14
+ getKey(key) {
15
+ return `${this.prefix}${key}`;
16
+ }
17
+ getCookie(name) {
18
+ if (!isBrowser())
19
+ return null;
20
+ const nameEQ = name + '=';
21
+ const ca = document.cookie.split(';');
22
+ for (let i = 0; i < ca.length; i++) {
23
+ let c = ca[i].trim();
24
+ if (c.indexOf(nameEQ) === 0) {
25
+ return decodeURIComponent(c.substring(nameEQ.length));
26
+ }
27
+ }
28
+ return null;
29
+ }
30
+ setCookie(name, value) {
31
+ if (!isBrowser())
32
+ return;
33
+ const { path, domain, secure, sameSite, maxAge } = this.options;
34
+ let cookie = `${name}=${encodeURIComponent(value)}`;
35
+ if (path)
36
+ cookie += `; path=${path}`;
37
+ if (domain)
38
+ cookie += `; domain=${domain}`;
39
+ if (secure)
40
+ cookie += '; secure';
41
+ if (sameSite)
42
+ cookie += `; samesite=${sameSite}`;
43
+ if (maxAge !== undefined)
44
+ cookie += `; max-age=${maxAge}`;
45
+ document.cookie = cookie;
46
+ }
47
+ deleteCookie(name) {
48
+ if (!isBrowser())
49
+ return;
50
+ const { path, domain } = this.options;
51
+ let cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
52
+ if (path)
53
+ cookie += `; path=${path}`;
54
+ if (domain)
55
+ cookie += `; domain=${domain}`;
56
+ document.cookie = cookie;
57
+ }
58
+ get(key) {
59
+ return this.getCookie(this.getKey(key));
60
+ }
61
+ set(key, value) {
62
+ this.setCookie(this.getKey(key), value);
63
+ }
64
+ remove(key) {
65
+ this.deleteCookie(this.getKey(key));
66
+ }
67
+ clear() {
68
+ if (!isBrowser())
69
+ return;
70
+ const cookies = document.cookie.split(';');
71
+ for (const cookie of cookies) {
72
+ const [name] = cookie.trim().split('=');
73
+ if (name.startsWith(this.prefix)) {
74
+ this.deleteCookie(name);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=cookie.storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.storage.js","sourceRoot":"","sources":["../../src/storage/cookie.storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { StorageAdapter } from '../types/config.types';
2
+ export declare class LocalStorageAdapter implements StorageAdapter {
3
+ private prefix;
4
+ constructor(prefix?: string);
5
+ private getKey;
6
+ get(key: string): string | null;
7
+ set(key: string, value: string): void;
8
+ remove(key: string): void;
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=local.storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.storage.d.ts","sourceRoot":"","sources":["../../src/storage/local.storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqBvD,qBAAa,mBAAoB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAS;gBAMX,MAAM,GAAE,MAAqB;IAIzC,OAAO,CAAC,MAAM;IAId,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IASzB,KAAK,IAAI,IAAI;CAgBhB"}
@@ -0,0 +1,56 @@
1
+ const isBrowser = () => {
2
+ return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';
3
+ };
4
+ export class LocalStorageAdapter {
5
+ constructor(prefix = 'nest_auth_') {
6
+ this.prefix = prefix;
7
+ }
8
+ getKey(key) {
9
+ return `${this.prefix}${key}`;
10
+ }
11
+ get(key) {
12
+ if (!isBrowser())
13
+ return null;
14
+ try {
15
+ return localStorage.getItem(this.getKey(key));
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ set(key, value) {
22
+ if (!isBrowser())
23
+ return;
24
+ try {
25
+ localStorage.setItem(this.getKey(key), value);
26
+ }
27
+ catch {
28
+ }
29
+ }
30
+ remove(key) {
31
+ if (!isBrowser())
32
+ return;
33
+ try {
34
+ localStorage.removeItem(this.getKey(key));
35
+ }
36
+ catch {
37
+ }
38
+ }
39
+ clear() {
40
+ if (!isBrowser())
41
+ return;
42
+ try {
43
+ const keysToRemove = [];
44
+ for (let i = 0; i < localStorage.length; i++) {
45
+ const key = localStorage.key(i);
46
+ if (key?.startsWith(this.prefix)) {
47
+ keysToRemove.push(key);
48
+ }
49
+ }
50
+ keysToRemove.forEach(key => localStorage.removeItem(key));
51
+ }
52
+ catch {
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=local.storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.storage.js","sourceRoot":"","sources":["../../src/storage/local.storage.ts"],"names":[],"mappings":"AAUA,MAAM,SAAS,GAAG,GAAY,EAAE;IAC5B,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW,CAAC;AACvF,CAAC,CAAC;AAcF,MAAM,OAAO,mBAAmB;IAO5B,YAAY,SAAiB,YAAY;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,GAAW;QACtB,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAW;QACX,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC1B,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAW;QACd,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YACD,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YAED,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,9 @@
1
+ import { StorageAdapter } from '../types/config.types';
2
+ export declare class MemoryStorage implements StorageAdapter {
3
+ private store;
4
+ get(key: string): string | null;
5
+ set(key: string, value: string): void;
6
+ remove(key: string): void;
7
+ clear(): void;
8
+ }
9
+ //# sourceMappingURL=memory.storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.storage.d.ts","sourceRoot":"","sources":["../../src/storage/memory.storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAYvD,qBAAa,aAAc,YAAW,cAAc;IAChD,OAAO,CAAC,KAAK,CAA6B;IAE1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,18 @@
1
+ export class MemoryStorage {
2
+ constructor() {
3
+ this.store = new Map();
4
+ }
5
+ get(key) {
6
+ return this.store.get(key) ?? null;
7
+ }
8
+ set(key, value) {
9
+ this.store.set(key, value);
10
+ }
11
+ remove(key) {
12
+ this.store.delete(key);
13
+ }
14
+ clear() {
15
+ this.store.clear();
16
+ }
17
+ }
18
+ //# sourceMappingURL=memory.storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.storage.js","sourceRoot":"","sources":["../../src/storage/memory.storage.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,aAAa;IAA1B;QACY,UAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAiB9C,CAAC;IAfG,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,GAAW;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { StorageAdapter } from '../types/config.types';
2
+ export declare class SessionStorageAdapter implements StorageAdapter {
3
+ private prefix;
4
+ constructor(prefix?: string);
5
+ private getKey;
6
+ get(key: string): string | null;
7
+ set(key: string, value: string): void;
8
+ remove(key: string): void;
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=session.storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.storage.d.ts","sourceRoot":"","sources":["../../src/storage/session.storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqBvD,qBAAa,qBAAsB,YAAW,cAAc;IACxD,OAAO,CAAC,MAAM,CAAS;gBAMX,MAAM,GAAE,MAAqB;IAIzC,OAAO,CAAC,MAAM;IAId,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IASzB,KAAK,IAAI,IAAI;CAgBhB"}
@@ -0,0 +1,56 @@
1
+ const isBrowser = () => {
2
+ return typeof window !== 'undefined' && typeof window.sessionStorage !== 'undefined';
3
+ };
4
+ export class SessionStorageAdapter {
5
+ constructor(prefix = 'nest_auth_') {
6
+ this.prefix = prefix;
7
+ }
8
+ getKey(key) {
9
+ return `${this.prefix}${key}`;
10
+ }
11
+ get(key) {
12
+ if (!isBrowser())
13
+ return null;
14
+ try {
15
+ return sessionStorage.getItem(this.getKey(key));
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ set(key, value) {
22
+ if (!isBrowser())
23
+ return;
24
+ try {
25
+ sessionStorage.setItem(this.getKey(key), value);
26
+ }
27
+ catch {
28
+ }
29
+ }
30
+ remove(key) {
31
+ if (!isBrowser())
32
+ return;
33
+ try {
34
+ sessionStorage.removeItem(this.getKey(key));
35
+ }
36
+ catch {
37
+ }
38
+ }
39
+ clear() {
40
+ if (!isBrowser())
41
+ return;
42
+ try {
43
+ const keysToRemove = [];
44
+ for (let i = 0; i < sessionStorage.length; i++) {
45
+ const key = sessionStorage.key(i);
46
+ if (key?.startsWith(this.prefix)) {
47
+ keysToRemove.push(key);
48
+ }
49
+ }
50
+ keysToRemove.forEach(key => sessionStorage.removeItem(key));
51
+ }
52
+ catch {
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=session.storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.storage.js","sourceRoot":"","sources":["../../src/storage/session.storage.ts"],"names":[],"mappings":"AAUA,MAAM,SAAS,GAAG,GAAY,EAAE;IAC5B,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,WAAW,CAAC;AACzF,CAAC,CAAC;AAcF,MAAM,OAAO,qBAAqB;IAO9B,YAAY,SAAiB,YAAY;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,GAAW;QACtB,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAW;QACX,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC;YACD,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC1B,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YACD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAW;QACd,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YACD,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC;YAED,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { DecodedJwt } from '../types/auth.types';
2
+ export declare function decodeJwt(token: string | null | undefined): DecodedJwt | null;
3
+ export declare function isTokenExpired(token: string | DecodedJwt | null, thresholdSeconds?: number): boolean | null;
4
+ export declare function getTokenExpirationDate(token: string | DecodedJwt | null): Date | null;
5
+ export declare function getTokenTimeToExpiry(token: string | DecodedJwt | null): number | null;
6
+ export declare function getUserIdFromToken(token: string | DecodedJwt | null | undefined): string | null;
7
+ //# sourceMappingURL=jwt-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-utils.d.ts","sourceRoot":"","sources":["../../src/token/jwt-utils.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAWjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAQ7E;AASD,wBAAgB,cAAc,CAC1B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,EACjC,gBAAgB,GAAE,MAAU,GAC7B,OAAO,GAAG,IAAI,CAWhB;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAUrF;AAQD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAWrF;AAQD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS/F"}
@@ -0,0 +1,49 @@
1
+ import { jwtDecode } from 'jwt-decode';
2
+ export function decodeJwt(token) {
3
+ if (!token)
4
+ return null;
5
+ try {
6
+ return jwtDecode(token);
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ }
12
+ export function isTokenExpired(token, thresholdSeconds = 0) {
13
+ if (!token)
14
+ return null;
15
+ const decoded = typeof token === 'string' ? decodeJwt(token) : token;
16
+ if (!decoded || !decoded.exp) {
17
+ return null;
18
+ }
19
+ const now = Math.floor(Date.now() / 1000);
20
+ return decoded.exp <= now + thresholdSeconds;
21
+ }
22
+ export function getTokenExpirationDate(token) {
23
+ if (!token)
24
+ return null;
25
+ const decoded = typeof token === 'string' ? decodeJwt(token) : token;
26
+ if (!decoded || !decoded.exp) {
27
+ return null;
28
+ }
29
+ return new Date(decoded.exp * 1000);
30
+ }
31
+ export function getTokenTimeToExpiry(token) {
32
+ if (!token)
33
+ return null;
34
+ const decoded = typeof token === 'string' ? decodeJwt(token) : token;
35
+ if (!decoded || !decoded.exp) {
36
+ return null;
37
+ }
38
+ const now = Math.floor(Date.now() / 1000);
39
+ return decoded.exp - now;
40
+ }
41
+ export function getUserIdFromToken(token) {
42
+ if (!token)
43
+ return null;
44
+ const decoded = typeof token === 'string' ? decodeJwt(token) : token;
45
+ if (!decoded)
46
+ return null;
47
+ return decoded.userId || decoded.sub || decoded.user_id || null;
48
+ }
49
+ //# sourceMappingURL=jwt-utils.js.map