@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.
- package/README.md +93 -0
- package/dist/client/auth-client.d.ts +60 -0
- package/dist/client/auth-client.d.ts.map +1 -0
- package/dist/client/auth-client.js +383 -0
- package/dist/client/auth-client.js.map +1 -0
- package/dist/client/event-emitter.d.ts +27 -0
- package/dist/client/event-emitter.d.ts.map +1 -0
- package/dist/client/event-emitter.js +46 -0
- package/dist/client/event-emitter.js.map +1 -0
- package/dist/client/refresh-queue.d.ts +16 -0
- package/dist/client/refresh-queue.d.ts.map +1 -0
- package/dist/client/refresh-queue.js +63 -0
- package/dist/client/refresh-queue.js.map +1 -0
- package/dist/http/axios.adapter.d.ts +3 -0
- package/dist/http/axios.adapter.d.ts.map +1 -0
- package/dist/http/axios.adapter.js +55 -0
- package/dist/http/axios.adapter.js.map +1 -0
- package/dist/http/fetch.adapter.d.ts +5 -0
- package/dist/http/fetch.adapter.d.ts.map +1 -0
- package/dist/http/fetch.adapter.js +50 -0
- package/dist/http/fetch.adapter.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/storage/cookie.storage.d.ts +22 -0
- package/dist/storage/cookie.storage.d.ts.map +1 -0
- package/dist/storage/cookie.storage.js +79 -0
- package/dist/storage/cookie.storage.js.map +1 -0
- package/dist/storage/local.storage.d.ts +11 -0
- package/dist/storage/local.storage.d.ts.map +1 -0
- package/dist/storage/local.storage.js +56 -0
- package/dist/storage/local.storage.js.map +1 -0
- package/dist/storage/memory.storage.d.ts +9 -0
- package/dist/storage/memory.storage.d.ts.map +1 -0
- package/dist/storage/memory.storage.js +18 -0
- package/dist/storage/memory.storage.js.map +1 -0
- package/dist/storage/session.storage.d.ts +11 -0
- package/dist/storage/session.storage.d.ts.map +1 -0
- package/dist/storage/session.storage.js +56 -0
- package/dist/storage/session.storage.js.map +1 -0
- package/dist/token/jwt-utils.d.ts +7 -0
- package/dist/token/jwt-utils.d.ts.map +1 -0
- package/dist/token/jwt-utils.js +49 -0
- package/dist/token/jwt-utils.js.map +1 -0
- package/dist/token/token-manager.d.ts +29 -0
- package/dist/token/token-manager.d.ts.map +1 -0
- package/dist/token/token-manager.js +102 -0
- package/dist/token/token-manager.js.map +1 -0
- package/dist/types/auth.types.d.ts +33 -0
- package/dist/types/auth.types.d.ts.map +1 -0
- package/dist/types/auth.types.js +2 -0
- package/dist/types/auth.types.js.map +1 -0
- package/dist/types/config.types.d.ts +73 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +17 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/utils/role-utils.d.ts +12 -0
- package/dist/utils/role-utils.d.ts.map +1 -0
- package/dist/utils/role-utils.js +43 -0
- package/dist/utils/role-utils.js.map +1 -0
- 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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|