@authticon/client 0.0.0-beta16 → 0.0.0-beta18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Auth.d.ts +1 -1
- package/dist/Auth.d.ts.map +1 -1
- package/dist/Auth.js +7 -10
- package/dist/Auth.js.map +1 -1
- package/dist/Authticon.d.ts +12 -10
- package/dist/Authticon.d.ts.map +1 -1
- package/dist/Authticon.js +31 -7
- package/dist/Authticon.js.map +1 -1
- package/dist/TokenManager.d.ts +9 -4
- package/dist/TokenManager.d.ts.map +1 -1
- package/dist/TokenManager.js +18 -12
- package/dist/TokenManager.js.map +1 -1
- package/dist/TokenManager.test.js +12 -26
- package/dist/TokenManager.test.js.map +1 -1
- package/dist/TokenStorage.d.ts +11 -4
- package/dist/TokenStorage.d.ts.map +1 -1
- package/dist/TokenStorage.js +45 -13
- package/dist/TokenStorage.js.map +1 -1
- package/dist/TokenVerifier.d.ts +3 -1
- package/dist/TokenVerifier.d.ts.map +1 -1
- package/dist/TokenVerifier.js +27 -9
- package/dist/TokenVerifier.js.map +1 -1
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/Auth.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare class Auth {
|
|
|
10
10
|
challanges: Array<"verifyTwoFa" | "setTwoFa">;
|
|
11
11
|
sessionId: string;
|
|
12
12
|
}>;
|
|
13
|
-
register(params: PostApiV1AuthRegisterData[
|
|
13
|
+
register(params: PostApiV1AuthRegisterData["body"]): Promise<{
|
|
14
14
|
userId: string;
|
|
15
15
|
}>;
|
|
16
16
|
logout(refreshToken: string): Promise<{
|
package/dist/Auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAO1D,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,qBAAa,IAAI;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC;;;;;;;IAQ5C,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC;;;IAQlD,MAAM,CAAC,YAAY,EAAE,MAAM;;;IAU3B,OAAO,CAAC,YAAY,EAAE,MAAM;;;CASnC"}
|
package/dist/Auth.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { postApiV1AuthLogin, postApiV1AuthLogout, postApiV1AuthRegister, postApiV1AuthTokenRefresh } from "./generated/sdk.gen.js";
|
|
1
|
+
import { postApiV1AuthLogin, postApiV1AuthLogout, postApiV1AuthRegister, postApiV1AuthTokenRefresh, } from "./generated/sdk.gen.js";
|
|
2
2
|
export class Auth {
|
|
3
3
|
client;
|
|
4
4
|
constructor(client) {
|
|
@@ -7,35 +7,32 @@ export class Auth {
|
|
|
7
7
|
async login(params) {
|
|
8
8
|
const { data } = await postApiV1AuthLogin({
|
|
9
9
|
client: this.client,
|
|
10
|
-
body: params
|
|
10
|
+
body: params,
|
|
11
11
|
});
|
|
12
12
|
return data;
|
|
13
13
|
}
|
|
14
|
-
;
|
|
15
14
|
async register(params) {
|
|
16
15
|
const { data } = await postApiV1AuthRegister({
|
|
17
16
|
client: this.client,
|
|
18
|
-
body: params
|
|
17
|
+
body: params,
|
|
19
18
|
});
|
|
20
19
|
return data;
|
|
21
20
|
}
|
|
22
|
-
;
|
|
23
21
|
async logout(refreshToken) {
|
|
24
22
|
const { data } = await postApiV1AuthLogout({
|
|
25
23
|
client: this.client,
|
|
26
24
|
body: {
|
|
27
|
-
refreshToken
|
|
28
|
-
}
|
|
25
|
+
refreshToken,
|
|
26
|
+
},
|
|
29
27
|
});
|
|
30
28
|
return data;
|
|
31
29
|
}
|
|
32
|
-
;
|
|
33
30
|
async refresh(refreshToken) {
|
|
34
31
|
const { data } = await postApiV1AuthTokenRefresh({
|
|
35
32
|
client: this.client,
|
|
36
33
|
body: {
|
|
37
|
-
refreshToken
|
|
38
|
-
}
|
|
34
|
+
refreshToken,
|
|
35
|
+
},
|
|
39
36
|
});
|
|
40
37
|
return data;
|
|
41
38
|
}
|
package/dist/Auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,OAAO,IAAI;IACc;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,KAAK,CAAC,MAAsC;QAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAyC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,YAAoB;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE;gBACJ,YAAY;aACb;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,YAAoB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,yBAAyB,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE;gBACJ,YAAY;aACb;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/dist/Authticon.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
2
|
import { Account } from "./Acccount.js";
|
|
3
3
|
import { Auth } from "./Auth.js";
|
|
4
4
|
import { Challange } from "./Challange.js";
|
|
@@ -9,12 +9,13 @@ import { TwoFa } from "./TwoFa.js";
|
|
|
9
9
|
import type { CookieAdapter, TokenStorageOptions } from "./types.js";
|
|
10
10
|
import { Users } from "./Users.js";
|
|
11
11
|
type ClientOptions<C extends CookieAdapter> = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
apiKey: string;
|
|
13
|
+
baseURL?: string;
|
|
14
|
+
jwksUrl?: string;
|
|
15
|
+
jwksCacheTtlMs?: number;
|
|
16
|
+
cookies?: C;
|
|
17
|
+
tokenStorage?: TokenStorageOptions;
|
|
18
|
+
logger?: Logger;
|
|
18
19
|
};
|
|
19
20
|
export declare class Authticon<Payload extends Record<string, any>, C extends CookieAdapter> {
|
|
20
21
|
private readonly client;
|
|
@@ -25,11 +26,12 @@ export declare class Authticon<Payload extends Record<string, any>, C extends Co
|
|
|
25
26
|
readonly account: Account;
|
|
26
27
|
readonly challange: Challange;
|
|
27
28
|
readonly session: Session;
|
|
29
|
+
readonly logger?: Logger;
|
|
28
30
|
private readonly cookiesAdapter?;
|
|
29
31
|
constructor(options: ClientOptions<C>);
|
|
30
|
-
hasSession():
|
|
32
|
+
hasSession(): string | false | null;
|
|
31
33
|
verifyToken(): Promise<import("./types.js").AccessTokenPayload<Payload>>;
|
|
32
|
-
getUser(): Promise<
|
|
34
|
+
getUser(): Promise<import("./types.js").JWTPayload & Payload & {
|
|
33
35
|
auth: {
|
|
34
36
|
logout: () => Promise<{
|
|
35
37
|
success: boolean;
|
|
@@ -80,7 +82,7 @@ export declare class Authticon<Payload extends Record<string, any>, C extends Co
|
|
|
80
82
|
};
|
|
81
83
|
}>;
|
|
82
84
|
cookies(): C;
|
|
83
|
-
login(params: Omit<PostApiV1AuthLoginData["body"], "deviceId">): Promise<
|
|
85
|
+
login(params: Omit<PostApiV1AuthLoginData["body"], "deviceId">): Promise<import("./types.js").JWTPayload & Payload & {
|
|
84
86
|
auth: {
|
|
85
87
|
logout: () => Promise<{
|
|
86
88
|
success: boolean;
|
package/dist/Authticon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authticon.d.ts","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Authticon.d.ts","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,KAAK,aAAa,CAAC,CAAC,SAAS,aAAa,IAAI;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS,CACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,CAAC,SAAS,aAAa;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAI;gBAExB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAwE9B,UAAU;IAIJ,WAAW;IAgBX,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKb,OAAO;IAOD,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS5E;AAED,wBAAgB,eAAe,CAC7B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,aAAa,GAAG,aAAa,EACvC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,yBAE1B"}
|
package/dist/Authticon.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import axios from "axios";
|
|
2
2
|
import { Account } from "./Acccount.js";
|
|
3
3
|
import { Auth } from "./Auth.js";
|
|
4
4
|
import { Challange } from "./Challange.js";
|
|
5
|
+
import { AuthticonApiError, AuthticonError, isAuthticonTokenError, } from "./errors.js";
|
|
5
6
|
import { createClient } from "./generated/client/index.js";
|
|
6
7
|
import { Session } from "./Session.js";
|
|
7
8
|
import { TokenManager } from "./TokenManager.js";
|
|
@@ -17,14 +18,37 @@ export class Authticon {
|
|
|
17
18
|
account;
|
|
18
19
|
challange;
|
|
19
20
|
session;
|
|
21
|
+
logger;
|
|
20
22
|
cookiesAdapter;
|
|
21
23
|
constructor(options) {
|
|
22
24
|
const baseURL = options.baseURL ?? "https://authticon.com";
|
|
23
|
-
this.
|
|
25
|
+
this.logger = options.logger?.child({ authticon: "client" });
|
|
26
|
+
const axiosClient = axios.create({
|
|
24
27
|
baseURL,
|
|
25
28
|
headers: {
|
|
26
29
|
"x-api-key": options.apiKey,
|
|
27
30
|
},
|
|
31
|
+
});
|
|
32
|
+
axiosClient.interceptors.response.use((response) => {
|
|
33
|
+
const request = response.config;
|
|
34
|
+
this.logger?.debug({
|
|
35
|
+
request: { url: request.url, method: request.method },
|
|
36
|
+
response: { status: response.status },
|
|
37
|
+
}, "Response received");
|
|
38
|
+
return response;
|
|
39
|
+
}, (error) => {
|
|
40
|
+
const request = error.config;
|
|
41
|
+
this.logger?.error({
|
|
42
|
+
request: { url: request.url, method: request.method },
|
|
43
|
+
response: error.response
|
|
44
|
+
? { status: error.response.status, data: error.response.data }
|
|
45
|
+
: undefined,
|
|
46
|
+
error: error.message,
|
|
47
|
+
}, "Error received");
|
|
48
|
+
return Promise.reject(new AuthticonApiError(error.message, error.status, error));
|
|
49
|
+
});
|
|
50
|
+
this.client = createClient({
|
|
51
|
+
axios: axiosClient,
|
|
28
52
|
throwOnError: true,
|
|
29
53
|
});
|
|
30
54
|
this.cookiesAdapter = options.cookies;
|
|
@@ -40,18 +64,18 @@ export class Authticon {
|
|
|
40
64
|
jwksCacheTtlMs: options.jwksCacheTtlMs,
|
|
41
65
|
cookies: options.cookies,
|
|
42
66
|
storage: options.tokenStorage,
|
|
43
|
-
});
|
|
67
|
+
}, this.logger?.child({ authticon: "token-manager" }));
|
|
44
68
|
}
|
|
45
69
|
hasSession() {
|
|
46
|
-
return this.tokens.hasStorage() && this.tokens.getAccessToken()
|
|
70
|
+
return this.tokens.hasStorage() && this.tokens.getAccessToken();
|
|
47
71
|
}
|
|
48
72
|
async verifyToken() {
|
|
49
73
|
try {
|
|
50
74
|
this.tokens.verifyToken();
|
|
51
75
|
}
|
|
52
76
|
catch (error) {
|
|
53
|
-
if (error
|
|
54
|
-
|
|
77
|
+
if (isAuthticonTokenError(error) && error.code === "ERR_JWT_EXPIRED") {
|
|
78
|
+
this.logger?.debug("Token expired, refreshing");
|
|
55
79
|
const result = await this.auth.refresh(this.tokens.getRefreshToken());
|
|
56
80
|
this.tokens.setAccessToken(result.accessToken);
|
|
57
81
|
}
|
|
@@ -67,7 +91,7 @@ export class Authticon {
|
|
|
67
91
|
}
|
|
68
92
|
cookies() {
|
|
69
93
|
if (!this.cookiesAdapter) {
|
|
70
|
-
throw new
|
|
94
|
+
throw new AuthticonError("Cookies not set");
|
|
71
95
|
}
|
|
72
96
|
return this.cookiesAdapter;
|
|
73
97
|
}
|
package/dist/Authticon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authticon.js","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Authticon.js","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"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"}
|
package/dist/TokenManager.d.ts
CHANGED
|
@@ -1,24 +1,29 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
1
2
|
import type { Client } from "./generated/client/index.js";
|
|
2
|
-
import type { AccessTokenPayload,
|
|
3
|
+
import type { AccessTokenPayload, TokenManagerOptions, TokenPair } from "./types.js";
|
|
3
4
|
export declare class TokenManager<Payload extends Record<string, any> = Record<string, any>> {
|
|
4
5
|
private readonly client;
|
|
5
6
|
private readonly verifier;
|
|
6
7
|
private readonly storage;
|
|
7
|
-
constructor(client: Client, options: TokenManagerOptions);
|
|
8
|
+
constructor(client: Client, options: TokenManagerOptions, logger?: Logger);
|
|
8
9
|
private requireStorage;
|
|
9
10
|
readonly verifyToken: (token?: string) => Promise<AccessTokenPayload<Payload>>;
|
|
10
11
|
readonly clearKeyCache: () => void;
|
|
11
12
|
readonly save: (tokens: TokenPair) => void;
|
|
12
13
|
readonly setAccessToken: (accessToken: string) => void;
|
|
14
|
+
readonly setRefreshToken: (refreshToken: string) => void;
|
|
15
|
+
readonly setRememberToken: (rememberToken: string) => void;
|
|
13
16
|
readonly getAccessToken: () => string | null;
|
|
14
17
|
readonly getRefreshToken: () => string | null;
|
|
15
|
-
readonly setRememberToken: (rememberToken: string) => void;
|
|
16
18
|
readonly getRememberToken: () => string | null;
|
|
17
19
|
readonly getDeviceId: () => string | null;
|
|
18
20
|
readonly setDeviceId: (deviceId: string) => void;
|
|
19
21
|
readonly getAll: () => TokenPair | null;
|
|
20
22
|
readonly clear: () => void;
|
|
23
|
+
readonly clearAccessToken: () => void;
|
|
24
|
+
readonly clearRefreshToken: () => void;
|
|
25
|
+
readonly clearDeviceId: () => void;
|
|
26
|
+
readonly clearRememberToken: () => void;
|
|
21
27
|
readonly hasStorage: () => boolean;
|
|
22
|
-
readonly verifyStoredAccessToken: () => Promise<JWTPayload | null>;
|
|
23
28
|
}
|
|
24
29
|
//# sourceMappingURL=TokenManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EACV,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,YAAY,CACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAG3B,MAAM,EAAE,MAAM,EAC/B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,MAAM;IAgBjB,OAAO,CAAC,cAAc;IAStB,QAAQ,CAAC,WAAW,GAClB,QAAQ,MAAM,KACb,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAMrC;IAEF,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAkC;IAEnE,QAAQ,CAAC,IAAI,GAAI,QAAQ,SAAS,KAAG,IAAI,CACJ;IAErC,QAAQ,CAAC,cAAc,GAAI,aAAa,MAAM,KAAG,IAAI,CACD;IAEpD,QAAQ,CAAC,eAAe,GAAI,cAAc,MAAM,KAAG,IAAI,CACD;IAEtD,QAAQ,CAAC,gBAAgB,GAAI,eAAe,MAAM,KAAG,IAAI,CACD;IAExD,QAAQ,CAAC,cAAc,sBAAgD;IAEvE,QAAQ,CAAC,eAAe,sBAAiD;IAEzE,QAAQ,CAAC,gBAAgB,sBAAkD;IAE3E,QAAQ,CAAC,WAAW,sBAA6C;IAEjE,QAAQ,CAAC,WAAW,GAAI,UAAU,MAAM,KAAG,IAAI,CACD;IAE9C,QAAQ,CAAC,MAAM,QAAO,SAAS,GAAG,IAAI,CAAmC;IAEzE,QAAQ,CAAC,KAAK,QAAO,IAAI,CAAkC;IAE3D,QAAQ,CAAC,gBAAgB,QAAO,IAAI,CACO;IAE3C,QAAQ,CAAC,iBAAiB,QAAO,IAAI,CACO;IAE5C,QAAQ,CAAC,aAAa,QAAO,IAAI,CAA0C;IAE3E,QAAQ,CAAC,kBAAkB,QAAO,IAAI,CACO;IAE7C,QAAQ,CAAC,UAAU,QAAO,OAAO,CAA0B;CAC5D"}
|
package/dist/TokenManager.js
CHANGED
|
@@ -1,40 +1,46 @@
|
|
|
1
|
+
import { AuthticonError } from "./errors.js";
|
|
1
2
|
import { TokenStorage } from "./TokenStorage.js";
|
|
2
3
|
import { TokenVerifier } from "./TokenVerifier.js";
|
|
3
4
|
export class TokenManager {
|
|
4
5
|
client;
|
|
5
6
|
verifier;
|
|
6
7
|
storage;
|
|
7
|
-
constructor(client, options) {
|
|
8
|
+
constructor(client, options, logger) {
|
|
8
9
|
this.client = client;
|
|
9
|
-
this.verifier = new TokenVerifier(options.jwksUrl, options.jwksCacheTtlMs);
|
|
10
|
+
this.verifier = new TokenVerifier(options.jwksUrl, options.jwksCacheTtlMs, logger?.child({ authticon: "token-verifier", verifier: "verifier" }));
|
|
10
11
|
this.storage = options.cookies
|
|
11
|
-
? new TokenStorage(options.cookies, options.storage)
|
|
12
|
+
? new TokenStorage(options.cookies, options.storage, logger?.child({ authticon: "token-storage", storage: "storage" }))
|
|
12
13
|
: null;
|
|
13
14
|
}
|
|
14
15
|
requireStorage() {
|
|
15
16
|
if (!this.storage) {
|
|
16
|
-
throw new
|
|
17
|
+
throw new AuthticonError("TokenStorage is not configured. Provide a CookieAdapter to enable token storage.");
|
|
17
18
|
}
|
|
18
19
|
return this.storage;
|
|
19
20
|
}
|
|
20
|
-
verifyToken = async (token) =>
|
|
21
|
+
verifyToken = async (token) => {
|
|
22
|
+
const accessToken = token ?? this.getAccessToken();
|
|
23
|
+
if (!accessToken) {
|
|
24
|
+
throw new AuthticonError("No access token found");
|
|
25
|
+
}
|
|
26
|
+
return this.verifier.verifyToken(accessToken);
|
|
27
|
+
};
|
|
21
28
|
clearKeyCache = () => this.verifier.clearKeyCache();
|
|
22
29
|
save = (tokens) => this.requireStorage().save(tokens);
|
|
23
30
|
setAccessToken = (accessToken) => this.requireStorage().setAccessToken(accessToken);
|
|
31
|
+
setRefreshToken = (refreshToken) => this.requireStorage().setRefreshToken(refreshToken);
|
|
32
|
+
setRememberToken = (rememberToken) => this.requireStorage().setRememberToken(rememberToken);
|
|
24
33
|
getAccessToken = () => this.requireStorage().getAccessToken();
|
|
25
34
|
getRefreshToken = () => this.requireStorage().getRefreshToken();
|
|
26
|
-
setRememberToken = (rememberToken) => this.requireStorage().setRememberToken(rememberToken);
|
|
27
35
|
getRememberToken = () => this.requireStorage().getRememberToken();
|
|
28
36
|
getDeviceId = () => this.requireStorage().getDeviceId();
|
|
29
37
|
setDeviceId = (deviceId) => this.requireStorage().setDeviceId(deviceId);
|
|
30
38
|
getAll = () => this.requireStorage().getAll();
|
|
31
39
|
clear = () => this.requireStorage().clear();
|
|
40
|
+
clearAccessToken = () => this.requireStorage().clearAccessToken();
|
|
41
|
+
clearRefreshToken = () => this.requireStorage().clearRefreshToken();
|
|
42
|
+
clearDeviceId = () => this.requireStorage().clearDeviceId();
|
|
43
|
+
clearRememberToken = () => this.requireStorage().clearRememberToken();
|
|
32
44
|
hasStorage = () => this.storage !== null;
|
|
33
|
-
verifyStoredAccessToken = async () => {
|
|
34
|
-
const token = this.requireStorage().getAccessToken();
|
|
35
|
-
if (!token)
|
|
36
|
-
return null;
|
|
37
|
-
return this.verifier.verifyToken(token);
|
|
38
|
-
};
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=TokenManager.js.map
|
package/dist/TokenManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { TokenManager } from "./TokenManager.js";
|
|
3
3
|
vi.mock("./TokenVerifier.js", () => ({
|
|
4
4
|
TokenVerifier: class {
|
|
@@ -34,28 +34,19 @@ describe("TokenManager", () => {
|
|
|
34
34
|
expect(manager.hasStorage()).toBe(false);
|
|
35
35
|
});
|
|
36
36
|
it("should throw on save without adapter", () => {
|
|
37
|
-
expect(() => manager.save({ accessToken: "a", refreshToken: "r", deviceId: "d" }))
|
|
38
|
-
.toThrow("TokenStorage is not configured");
|
|
37
|
+
expect(() => manager.save({ accessToken: "a", refreshToken: "r", deviceId: "d" })).toThrow("TokenStorage is not configured");
|
|
39
38
|
});
|
|
40
39
|
it("should throw on getAccessToken without adapter", () => {
|
|
41
|
-
expect(() => manager.getAccessToken())
|
|
42
|
-
.toThrow("TokenStorage is not configured");
|
|
40
|
+
expect(() => manager.getAccessToken()).toThrow("TokenStorage is not configured");
|
|
43
41
|
});
|
|
44
42
|
it("should throw on getRefreshToken without adapter", () => {
|
|
45
|
-
expect(() => manager.getRefreshToken())
|
|
46
|
-
.toThrow("TokenStorage is not configured");
|
|
43
|
+
expect(() => manager.getRefreshToken()).toThrow("TokenStorage is not configured");
|
|
47
44
|
});
|
|
48
45
|
it("should throw on getAll without adapter", () => {
|
|
49
|
-
expect(() => manager.getAll())
|
|
50
|
-
.toThrow("TokenStorage is not configured");
|
|
46
|
+
expect(() => manager.getAll()).toThrow("TokenStorage is not configured");
|
|
51
47
|
});
|
|
52
48
|
it("should throw on clear without adapter", () => {
|
|
53
|
-
expect(() => manager.clear())
|
|
54
|
-
.toThrow("TokenStorage is not configured");
|
|
55
|
-
});
|
|
56
|
-
it("should throw on verifyStoredAccessToken without adapter", async () => {
|
|
57
|
-
await expect(manager.verifyStoredAccessToken())
|
|
58
|
-
.rejects.toThrow("TokenStorage is not configured");
|
|
49
|
+
expect(() => manager.clear()).toThrow("TokenStorage is not configured");
|
|
59
50
|
});
|
|
60
51
|
});
|
|
61
52
|
describe("with storage (CookieAdapter provided)", () => {
|
|
@@ -72,7 +63,11 @@ describe("TokenManager", () => {
|
|
|
72
63
|
expect(manager.hasStorage()).toBe(true);
|
|
73
64
|
});
|
|
74
65
|
it("should save tokens via adapter", () => {
|
|
75
|
-
manager.save({
|
|
66
|
+
manager.save({
|
|
67
|
+
accessToken: "abc",
|
|
68
|
+
refreshToken: "xyz",
|
|
69
|
+
deviceId: "dev-1",
|
|
70
|
+
});
|
|
76
71
|
expect(adapter.set).toHaveBeenCalledTimes(3);
|
|
77
72
|
expect(adapter.set).toHaveBeenCalledWith("access_token", "abc", expect.any(Object));
|
|
78
73
|
expect(adapter.set).toHaveBeenCalledWith("refresh_token", "xyz", expect.any(Object));
|
|
@@ -104,16 +99,7 @@ describe("TokenManager", () => {
|
|
|
104
99
|
});
|
|
105
100
|
it("should clear tokens via adapter", () => {
|
|
106
101
|
manager.clear();
|
|
107
|
-
expect(adapter.remove).toHaveBeenCalledTimes(
|
|
108
|
-
});
|
|
109
|
-
it("should verify stored access token", async () => {
|
|
110
|
-
vi.mocked(adapter.get).mockReturnValue("stored-jwt");
|
|
111
|
-
const payload = await manager.verifyStoredAccessToken();
|
|
112
|
-
expect(payload).toEqual({ sub: "user-1", exp: 9999999999 });
|
|
113
|
-
});
|
|
114
|
-
it("should return null from verifyStoredAccessToken when no token stored", async () => {
|
|
115
|
-
const payload = await manager.verifyStoredAccessToken();
|
|
116
|
-
expect(payload).toBeNull();
|
|
102
|
+
expect(adapter.remove).toHaveBeenCalledTimes(4);
|
|
117
103
|
});
|
|
118
104
|
});
|
|
119
105
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenManager.test.js","sourceRoot":"","sources":["../src/TokenManager.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TokenManager.test.js","sourceRoot":"","sources":["../src/TokenManager.test.ts"],"names":[],"mappings":"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"}
|
package/dist/TokenStorage.d.ts
CHANGED
|
@@ -1,22 +1,29 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
1
2
|
import type { CookieAdapter, TokenPair, TokenStorageOptions } from "./types.js";
|
|
2
3
|
export declare class TokenStorage {
|
|
3
4
|
private readonly cookies;
|
|
5
|
+
private readonly logger?;
|
|
4
6
|
private readonly accessName;
|
|
5
7
|
private readonly refreshName;
|
|
6
8
|
private readonly deviceIdName;
|
|
7
9
|
private readonly rememberName;
|
|
8
10
|
private readonly setOptions;
|
|
9
11
|
private readonly removeOptions;
|
|
10
|
-
constructor(cookies: CookieAdapter, options?: TokenStorageOptions);
|
|
12
|
+
constructor(cookies: CookieAdapter, options?: TokenStorageOptions, logger?: Logger | undefined);
|
|
11
13
|
readonly save: (tokens: TokenPair) => void;
|
|
12
|
-
readonly
|
|
14
|
+
readonly clear: () => void;
|
|
13
15
|
readonly getAccessToken: () => string | null;
|
|
14
16
|
readonly getRefreshToken: () => string | null;
|
|
15
17
|
readonly getDeviceId: () => string | null;
|
|
16
|
-
readonly setRememberToken: (rememberToken: string) => void;
|
|
17
18
|
readonly getRememberToken: () => string | null;
|
|
19
|
+
readonly setAccessToken: (accessToken: string) => void;
|
|
20
|
+
readonly setRememberToken: (rememberToken: string) => void;
|
|
21
|
+
readonly setRefreshToken: (refreshToken: string) => void;
|
|
18
22
|
readonly setDeviceId: (deviceId: string) => void;
|
|
23
|
+
readonly clearDeviceId: () => void;
|
|
24
|
+
readonly clearRememberToken: () => void;
|
|
25
|
+
readonly clearRefreshToken: () => void;
|
|
26
|
+
readonly clearAccessToken: () => void;
|
|
19
27
|
readonly getAll: () => TokenPair | null;
|
|
20
|
-
readonly clear: () => void;
|
|
21
28
|
}
|
|
22
29
|
//# sourceMappingURL=TokenStorage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenStorage.d.ts","sourceRoot":"","sources":["../src/TokenStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAGb,SAAS,EACT,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAUpB,qBAAa,YAAY;IAcrB,OAAO,CAAC,QAAQ,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"TokenStorage.d.ts","sourceRoot":"","sources":["../src/TokenStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EACV,aAAa,EAGb,SAAS,EACT,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAUpB,qBAAa,YAAY;IAcrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAf1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAKzB;IACF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAGjC,OAAO,EAAE,aAAa,EACvC,OAAO,GAAE,mBAAwB,EAChB,MAAM,CAAC,EAAE,MAAM,YAAA;IA+ClC,QAAQ,CAAC,IAAI,GAAI,QAAQ,SAAS,KAAG,IAAI,CASvC;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAKvB;IAEF,QAAQ,CAAC,cAAc,sBAA2C;IAElE,QAAQ,CAAC,eAAe,sBAA4C;IAEpE,QAAQ,CAAC,WAAW,sBAA6C;IAEjE,QAAQ,CAAC,gBAAgB,sBAA6C;IAEtE,QAAQ,CAAC,cAAc,GAAI,aAAa,MAAM,KAAG,IAAI,CAMnD;IAEF,QAAQ,CAAC,gBAAgB,GAAI,eAAe,MAAM,KAAG,IAAI,CAUvD;IAEF,QAAQ,CAAC,eAAe,GAAI,cAAc,MAAM,KAAG,IAAI,CAMrD;IAEF,QAAQ,CAAC,WAAW,GAAI,UAAU,MAAM,KAAG,IAAI,CAG7C;IAEF,QAAQ,CAAC,aAAa,QAAO,IAAI,CAG/B;IAEF,QAAQ,CAAC,kBAAkB,QAAO,IAAI,CAGpC;IAEF,QAAQ,CAAC,iBAAiB,QAAO,IAAI,CAGnC;IAEF,QAAQ,CAAC,gBAAgB,QAAO,IAAI,CAGlC;IAEF,QAAQ,CAAC,MAAM,QAAO,SAAS,GAAG,IAAI,CAUpC;CACH"}
|
package/dist/TokenStorage.js
CHANGED
|
@@ -7,14 +7,16 @@ const DEFAULT_REFRESH_TOKEN_MAX_AGE = 2_592_000;
|
|
|
7
7
|
const DEFAULT_REMEMBER_TOKEN_MAX_AGE = 7_776_000;
|
|
8
8
|
export class TokenStorage {
|
|
9
9
|
cookies;
|
|
10
|
+
logger;
|
|
10
11
|
accessName;
|
|
11
12
|
refreshName;
|
|
12
13
|
deviceIdName;
|
|
13
14
|
rememberName;
|
|
14
15
|
setOptions;
|
|
15
16
|
removeOptions;
|
|
16
|
-
constructor(cookies, options = {}) {
|
|
17
|
+
constructor(cookies, options = {}, logger) {
|
|
17
18
|
this.cookies = cookies;
|
|
19
|
+
this.logger = logger;
|
|
18
20
|
this.accessName = options.accessTokenName ?? DEFAULT_ACCESS_TOKEN_NAME;
|
|
19
21
|
this.refreshName = options.refreshTokenName ?? DEFAULT_REFRESH_TOKEN_NAME;
|
|
20
22
|
this.deviceIdName = options.deviceIdName ?? DEFAULT_DEVICE_ID_NAME;
|
|
@@ -57,22 +59,57 @@ export class TokenStorage {
|
|
|
57
59
|
this.removeOptions = { path, domain };
|
|
58
60
|
}
|
|
59
61
|
save = (tokens) => {
|
|
60
|
-
this.
|
|
61
|
-
this.
|
|
62
|
+
this.setAccessToken(tokens.accessToken);
|
|
63
|
+
this.setRefreshToken(tokens.refreshToken);
|
|
62
64
|
if (tokens.deviceId) {
|
|
63
|
-
this.
|
|
65
|
+
this.setDeviceId(tokens.deviceId);
|
|
64
66
|
}
|
|
65
67
|
if (tokens.rememberToken) {
|
|
66
|
-
this.
|
|
68
|
+
this.setRememberToken(tokens.rememberToken);
|
|
67
69
|
}
|
|
68
70
|
};
|
|
69
|
-
|
|
71
|
+
clear = () => {
|
|
72
|
+
this.clearAccessToken();
|
|
73
|
+
this.clearRefreshToken();
|
|
74
|
+
this.clearDeviceId();
|
|
75
|
+
this.clearRememberToken();
|
|
76
|
+
};
|
|
70
77
|
getAccessToken = () => this.cookies.get(this.accessName);
|
|
71
78
|
getRefreshToken = () => this.cookies.get(this.refreshName);
|
|
72
79
|
getDeviceId = () => this.cookies.get(this.deviceIdName);
|
|
73
|
-
setRememberToken = (rememberToken) => this.cookies.set(this.rememberName, rememberToken, this.setOptions.remember);
|
|
74
80
|
getRememberToken = () => this.cookies.get(this.rememberName);
|
|
75
|
-
|
|
81
|
+
setAccessToken = (accessToken) => {
|
|
82
|
+
this.logger?.debug({ accessToken: accessToken.slice(0, 10) + "..." }, "Setting access token");
|
|
83
|
+
this.cookies.set(this.accessName, accessToken, this.setOptions.access);
|
|
84
|
+
};
|
|
85
|
+
setRememberToken = (rememberToken) => {
|
|
86
|
+
this.logger?.debug({ rememberToken: rememberToken.slice(0, 10) + "..." }, "Setting remember token");
|
|
87
|
+
this.cookies.set(this.rememberName, rememberToken, this.setOptions.remember);
|
|
88
|
+
};
|
|
89
|
+
setRefreshToken = (refreshToken) => {
|
|
90
|
+
this.logger?.debug({ refreshToken: refreshToken.slice(0, 10) + "..." }, "Setting refresh token");
|
|
91
|
+
this.cookies.set(this.refreshName, refreshToken, this.setOptions.refresh);
|
|
92
|
+
};
|
|
93
|
+
setDeviceId = (deviceId) => {
|
|
94
|
+
this.logger?.debug({ deviceId }, "Setting device id");
|
|
95
|
+
this.cookies.set(this.deviceIdName, deviceId, this.setOptions.deviceId);
|
|
96
|
+
};
|
|
97
|
+
clearDeviceId = () => {
|
|
98
|
+
this.logger?.debug("Clearing device id");
|
|
99
|
+
this.cookies.remove(this.deviceIdName, this.removeOptions);
|
|
100
|
+
};
|
|
101
|
+
clearRememberToken = () => {
|
|
102
|
+
this.logger?.debug("Clearing remember token");
|
|
103
|
+
this.cookies.remove(this.rememberName, this.removeOptions);
|
|
104
|
+
};
|
|
105
|
+
clearRefreshToken = () => {
|
|
106
|
+
this.logger?.debug("Clearing refresh token");
|
|
107
|
+
this.cookies.remove(this.refreshName, this.removeOptions);
|
|
108
|
+
};
|
|
109
|
+
clearAccessToken = () => {
|
|
110
|
+
this.logger?.debug("Clearing access token");
|
|
111
|
+
this.cookies.remove(this.accessName, this.removeOptions);
|
|
112
|
+
};
|
|
76
113
|
getAll = () => {
|
|
77
114
|
const accessToken = this.getAccessToken();
|
|
78
115
|
const refreshToken = this.getRefreshToken();
|
|
@@ -85,10 +122,5 @@ export class TokenStorage {
|
|
|
85
122
|
rememberToken: this.getRememberToken() ?? undefined,
|
|
86
123
|
};
|
|
87
124
|
};
|
|
88
|
-
clear = () => {
|
|
89
|
-
this.cookies.remove(this.accessName, this.removeOptions);
|
|
90
|
-
this.cookies.remove(this.refreshName, this.removeOptions);
|
|
91
|
-
this.cookies.remove(this.rememberName, this.removeOptions);
|
|
92
|
-
};
|
|
93
125
|
}
|
|
94
126
|
//# sourceMappingURL=TokenStorage.js.map
|
package/dist/TokenStorage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenStorage.js","sourceRoot":"","sources":["../src/TokenStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TokenStorage.js","sourceRoot":"","sources":["../src/TokenStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/TokenVerifier.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
1
2
|
import type { AccessTokenPayload } from "./types.js";
|
|
2
3
|
export declare class TokenVerifier<Payload extends Record<string, any>> {
|
|
3
4
|
private readonly jwksUrl;
|
|
4
5
|
private readonly cacheTtlMs;
|
|
6
|
+
private readonly logger?;
|
|
5
7
|
private cached;
|
|
6
|
-
constructor(jwksUrl: string, cacheTtlMs?: number);
|
|
8
|
+
constructor(jwksUrl: string, cacheTtlMs?: number, logger?: Logger | undefined);
|
|
7
9
|
private readonly fetchJwks;
|
|
8
10
|
private readonly getCachedOrFetch;
|
|
9
11
|
private readonly resolveKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenVerifier.d.ts","sourceRoot":"","sources":["../src/TokenVerifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TokenVerifier.d.ts","sourceRoot":"","sources":["../src/TokenVerifier.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiCrD,qBAAa,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAI1D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAL1B,OAAO,CAAC,MAAM,CAA2B;gBAGtB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAA6B,EACzC,MAAM,CAAC,EAAE,MAAM,YAAA;IAGlC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAQxB;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAO/B;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAYzB;IAEF,QAAQ,CAAC,WAAW,GAClB,OAAO,MAAM,KACZ,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CA0BrC;IAEF,QAAQ,CAAC,aAAa,QAAO,IAAI,CAG/B;CACH"}
|
package/dist/TokenVerifier.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
|
-
import
|
|
2
|
+
import * as jose from "jose";
|
|
3
|
+
import { decodeProtectedHeader, importJWK, jwtVerify, } from "jose";
|
|
4
|
+
import { AuthticonError, AuthticonTokenError } from "./errors.js";
|
|
3
5
|
const DEFAULT_CACHE_TTL_MS = 3_600_000;
|
|
4
6
|
const importKeysFromJwks = async (jwks) => {
|
|
5
7
|
const keysWithKid = jwks.filter((jwk) => typeof jwk.kid === "string");
|
|
@@ -15,15 +17,18 @@ const importKeysFromJwks = async (jwks) => {
|
|
|
15
17
|
export class TokenVerifier {
|
|
16
18
|
jwksUrl;
|
|
17
19
|
cacheTtlMs;
|
|
20
|
+
logger;
|
|
18
21
|
cached = null;
|
|
19
|
-
constructor(jwksUrl, cacheTtlMs = DEFAULT_CACHE_TTL_MS) {
|
|
22
|
+
constructor(jwksUrl, cacheTtlMs = DEFAULT_CACHE_TTL_MS, logger) {
|
|
20
23
|
this.jwksUrl = jwksUrl;
|
|
21
24
|
this.cacheTtlMs = cacheTtlMs;
|
|
25
|
+
this.logger = logger;
|
|
22
26
|
}
|
|
23
27
|
fetchJwks = async () => {
|
|
24
28
|
const { data } = await axios.get(this.jwksUrl);
|
|
25
29
|
const keys = await importKeysFromJwks(data.keys);
|
|
26
30
|
this.cached = { keys, fetchedAt: Date.now() };
|
|
31
|
+
this.logger?.debug({ jwksUrl: this.jwksUrl }, "JWKS fetched");
|
|
27
32
|
return keys;
|
|
28
33
|
};
|
|
29
34
|
getCachedOrFetch = async () => {
|
|
@@ -41,21 +46,34 @@ export class TokenVerifier {
|
|
|
41
46
|
const freshKeys = await this.fetchJwks();
|
|
42
47
|
const freshKey = freshKeys.get(kid);
|
|
43
48
|
if (!freshKey) {
|
|
44
|
-
throw new
|
|
49
|
+
throw new AuthticonError(`Key with kid "${kid}" not found in JWKS`);
|
|
45
50
|
}
|
|
46
51
|
return freshKey;
|
|
47
52
|
};
|
|
48
53
|
verifyToken = async (token) => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
try {
|
|
55
|
+
const header = decodeProtectedHeader(token);
|
|
56
|
+
if (!header.kid) {
|
|
57
|
+
throw new AuthticonError("Token header is missing 'kid' claim");
|
|
58
|
+
}
|
|
59
|
+
const key = await this.resolveKey(header.kid);
|
|
60
|
+
const { payload } = await jwtVerify(token, key);
|
|
61
|
+
this.logger?.debug({
|
|
62
|
+
sessionId: payload.authticon.sessionId,
|
|
63
|
+
userId: payload.authticon.userId,
|
|
64
|
+
}, "Token verified");
|
|
65
|
+
return payload;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof jose.errors.JOSEError) {
|
|
69
|
+
throw new AuthticonTokenError(error.message, error.code, error);
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
52
72
|
}
|
|
53
|
-
const key = await this.resolveKey(header.kid);
|
|
54
|
-
const { payload } = await jwtVerify(token, key);
|
|
55
|
-
return payload;
|
|
56
73
|
};
|
|
57
74
|
clearKeyCache = () => {
|
|
58
75
|
this.cached = null;
|
|
76
|
+
this.logger?.debug("Key cache cleared");
|
|
59
77
|
};
|
|
60
78
|
}
|
|
61
79
|
//# sourceMappingURL=TokenVerifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenVerifier.js","sourceRoot":"","sources":["../src/TokenVerifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,SAAS,
|
|
1
|
+
{"version":3,"file":"TokenVerifier.js","sourceRoot":"","sources":["../src/TokenVerifier.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AxiosError } from "axios";
|
|
2
|
+
import type * as jose from "jose";
|
|
3
|
+
export declare class AuthticonError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class AuthticonApiError extends AuthticonError {
|
|
7
|
+
readonly statusCode: number;
|
|
8
|
+
readonly axiosError: AxiosError;
|
|
9
|
+
constructor(message: string, statusCode: number, axiosError: AxiosError);
|
|
10
|
+
toJSON(): {
|
|
11
|
+
statusCode: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare class AuthticonTokenError extends AuthticonError {
|
|
15
|
+
readonly code: string;
|
|
16
|
+
readonly joseError: jose.errors.JOSEError;
|
|
17
|
+
constructor(message: string, code: string, joseError: jose.errors.JOSEError);
|
|
18
|
+
}
|
|
19
|
+
export declare function isAuthticonError(error: unknown): error is AuthticonError;
|
|
20
|
+
export declare function isAuthticonApiError(error: unknown): error is AuthticonApiError;
|
|
21
|
+
export declare function isAuthticonTokenError(error: unknown): error is AuthticonTokenError;
|
|
22
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAElC,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,iBAAkB,SAAQ,cAAc;aAGjC,UAAU,EAAE,MAAM;aAClB,UAAU,EAAE,UAAU;gBAFtC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU;IAKxC,MAAM;;;CAMP;AAED,qBAAa,mBAAoB,SAAQ,cAAc;aAGnC,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAFhD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;CAInD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAE5B;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,mBAAmB,CAE9B"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class AuthticonError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
export class AuthticonApiError extends AuthticonError {
|
|
7
|
+
statusCode;
|
|
8
|
+
axiosError;
|
|
9
|
+
constructor(message, statusCode, axiosError) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.statusCode = statusCode;
|
|
12
|
+
this.axiosError = axiosError;
|
|
13
|
+
}
|
|
14
|
+
toJSON() {
|
|
15
|
+
return {
|
|
16
|
+
...this.axiosError.toJSON(),
|
|
17
|
+
statusCode: this.statusCode,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class AuthticonTokenError extends AuthticonError {
|
|
22
|
+
code;
|
|
23
|
+
joseError;
|
|
24
|
+
constructor(message, code, joseError) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.joseError = joseError;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function isAuthticonError(error) {
|
|
31
|
+
return error instanceof AuthticonError;
|
|
32
|
+
}
|
|
33
|
+
export function isAuthticonApiError(error) {
|
|
34
|
+
return error instanceof AuthticonApiError;
|
|
35
|
+
}
|
|
36
|
+
export function isAuthticonTokenError(error) {
|
|
37
|
+
return error instanceof AuthticonTokenError;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IAGjC;IACA;IAHlB,YACE,OAAe,EACC,UAAkB,EAClB,UAAsB;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAQ;QAClB,eAAU,GAAV,UAAU,CAAY;IAGxC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IAGnC;IACA;IAHlB,YACE,OAAe,EACC,IAAY,EACZ,SAAgC;QAEhD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAuB;IAGlD,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,cAAc,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAc;IAEd,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,OAAO,KAAK,YAAY,mBAAmB,CAAC;AAC9C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Auth } from "./Auth.js";
|
|
2
2
|
export { Authticon, createAuthticon } from "./Authticon.js";
|
|
3
3
|
export { createCookieStorageAdapter } from "./CookieStorageAdapter.js";
|
|
4
|
+
export * from "./errors.js";
|
|
4
5
|
export { TokenManager } from "./TokenManager.js";
|
|
5
6
|
export { TokenStorage } from "./TokenStorage.js";
|
|
6
7
|
export { TokenVerifier } from "./TokenVerifier.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Auth } from "./Auth.js";
|
|
2
2
|
export { Authticon, createAuthticon } from "./Authticon.js";
|
|
3
3
|
export { createCookieStorageAdapter } from "./CookieStorageAdapter.js";
|
|
4
|
+
export * from "./errors.js";
|
|
4
5
|
export { TokenManager } from "./TokenManager.js";
|
|
5
6
|
export { TokenStorage } from "./TokenStorage.js";
|
|
6
7
|
export { TokenVerifier } from "./TokenVerifier.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authticon/client",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-beta18",
|
|
4
4
|
"description": "Official Authticon API client for Node.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"prepublishOnly": "npm run build"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
+
"@types/pino": "^7.0.5",
|
|
45
46
|
"axios": "^1.13.6",
|
|
46
47
|
"cookie": "^1.1.1",
|
|
47
48
|
"jose": "^6.2.0"
|