@zudojs/auth 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +22 -8
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/authPassword/authPassword.core.d.ts +6 -2
  4. package/dist/authPassword/authPassword.core.d.ts.map +1 -1
  5. package/dist/authPassword/authPassword.core.js +69 -18
  6. package/dist/authPassword/authPassword.core.js.map +1 -1
  7. package/dist/authProvider/authProvider.core.d.ts +6 -1
  8. package/dist/authProvider/authProvider.core.d.ts.map +1 -1
  9. package/dist/authProvider/authProvider.core.js +29 -15
  10. package/dist/authProvider/authProvider.core.js.map +1 -1
  11. package/dist/authSession/authSession.core.d.ts.map +1 -1
  12. package/dist/authSession/authSession.core.js +21 -2
  13. package/dist/authSession/authSession.core.js.map +1 -1
  14. package/dist/authToken/authToken.core.d.ts.map +1 -1
  15. package/dist/authToken/authToken.core.js +4 -3
  16. package/dist/authToken/authToken.core.js.map +1 -1
  17. package/dist/authToken/authToken.revocation.d.ts +17 -0
  18. package/dist/authToken/authToken.revocation.d.ts.map +1 -0
  19. package/dist/authToken/authToken.revocation.js +36 -0
  20. package/dist/authToken/authToken.revocation.js.map +1 -0
  21. package/dist/authToken/authToken.signing.d.ts +2 -1
  22. package/dist/authToken/authToken.signing.d.ts.map +1 -1
  23. package/dist/authToken/authToken.signing.js +23 -19
  24. package/dist/authToken/authToken.signing.js.map +1 -1
  25. package/dist/authToken/index.d.ts +1 -0
  26. package/dist/authToken/index.d.ts.map +1 -1
  27. package/dist/authToken/index.js +1 -0
  28. package/dist/authToken/index.js.map +1 -1
  29. package/dist/authTypes/authToken.type.d.ts +19 -0
  30. package/dist/authTypes/authToken.type.d.ts.map +1 -1
  31. package/dist/authTypes/index.d.ts +1 -1
  32. package/dist/authTypes/index.d.ts.map +1 -1
  33. package/dist/authTypes/index.js.map +1 -1
  34. package/dist/authUtils/authUtils.helper.js +1 -1
  35. package/dist/authUtils/authUtils.helper.js.map +1 -1
  36. package/package.json +1 -1
@@ -11,19 +11,23 @@
11
11
  *
12
12
  * @param password - Plain-text password
13
13
  * @param saltLength - Salt length in bytes (default: 32)
14
- * @returns Hashed password string in format "scrypt$salt$hash"
14
+ * @returns Hashed password string in format "scrypt$N$r$p$salt$hash"
15
15
  */
16
16
  export declare function hashPassword(password: string, saltLength?: number): Promise<string>;
17
17
  /**
18
18
  * Verify a plain-text password against a hash.
19
19
  *
20
+ * Accepts the current "scrypt$N$r$p$salt$hash" format as well as the
21
+ * legacy "scrypt<salt>$<hash>" format produced by versions ≤ 0.1.1.
22
+ *
20
23
  * @param password - Plain-text password to verify
21
24
  * @param hashedPassword - Previously hashed password
22
25
  * @returns Whether the password matches
23
26
  */
24
27
  export declare function verifyPassword(password: string, hashedPassword: string): Promise<boolean>;
25
28
  /**
26
- * Check if a password hash needs rehashing (e.g. after salt length change).
29
+ * Check if a password hash needs rehashing (legacy format, changed
30
+ * scrypt parameters, or changed salt length).
27
31
  *
28
32
  * @param hashedPassword - The stored hash
29
33
  * @returns Whether the hash should be regenerated
@@ -1 +1 @@
1
- {"version":3,"file":"authPassword.core.d.ts","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAQ3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAE/D"}
1
+ {"version":3,"file":"authPassword.core.d.ts","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAE/D"}
@@ -20,29 +20,40 @@ const SCRYPT_P = 1;
20
20
  *
21
21
  * @param password - Plain-text password
22
22
  * @param saltLength - Salt length in bytes (default: 32)
23
- * @returns Hashed password string in format "scrypt$salt$hash"
23
+ * @returns Hashed password string in format "scrypt$N$r$p$salt$hash"
24
24
  */
25
25
  export async function hashPassword(password, saltLength = SALT_LENGTH) {
26
26
  const salt = randomBytes(saltLength).toString("hex");
27
- const derivedKey = await deriveKey(password, salt);
28
- return `scrypt${salt}$${derivedKey}`;
27
+ const derivedKey = await deriveKey(password, salt, {
28
+ N: SCRYPT_N,
29
+ r: SCRYPT_R,
30
+ p: SCRYPT_P,
31
+ });
32
+ return `scrypt$${SCRYPT_N}$${SCRYPT_R}$${SCRYPT_P}$${salt}$${derivedKey}`;
29
33
  }
30
34
  /**
31
35
  * Verify a plain-text password against a hash.
32
36
  *
37
+ * Accepts the current "scrypt$N$r$p$salt$hash" format as well as the
38
+ * legacy "scrypt<salt>$<hash>" format produced by versions ≤ 0.1.1.
39
+ *
33
40
  * @param password - Plain-text password to verify
34
41
  * @param hashedPassword - Previously hashed password
35
42
  * @returns Whether the password matches
36
43
  */
37
44
  export async function verifyPassword(password, hashedPassword) {
38
- const parts = hashedPassword.split("$");
39
- if (parts.length !== 2 || !parts[0].startsWith("scrypt")) {
45
+ const parsed = parseHash(hashedPassword);
46
+ if (!parsed)
40
47
  return false;
48
+ let derivedKey;
49
+ try {
50
+ derivedKey = await deriveKey(password, parsed.salt, parsed.params);
41
51
  }
42
- const salt = parts[0].slice(6);
43
- const storedHash = parts[1];
44
- const derivedKey = await deriveKey(password, salt);
45
- const storedBuffer = Buffer.from(storedHash, "hex");
52
+ catch {
53
+ // scrypt rejects params it cannot satisfy (e.g. over maxmem)
54
+ return false;
55
+ }
56
+ const storedBuffer = Buffer.from(parsed.hash, "hex");
46
57
  const derivedBuffer = Buffer.from(derivedKey, "hex");
47
58
  if (storedBuffer.length !== derivedBuffer.length) {
48
59
  return false;
@@ -50,19 +61,21 @@ export async function verifyPassword(password, hashedPassword) {
50
61
  return timingSafeEqual(storedBuffer, derivedBuffer);
51
62
  }
52
63
  /**
53
- * Check if a password hash needs rehashing (e.g. after salt length change).
64
+ * Check if a password hash needs rehashing (legacy format, changed
65
+ * scrypt parameters, or changed salt length).
54
66
  *
55
67
  * @param hashedPassword - The stored hash
56
68
  * @returns Whether the hash should be regenerated
57
69
  */
58
70
  export function needsRehash(hashedPassword) {
59
- const parts = hashedPassword.split("$");
60
- if (parts.length !== 2 || !parts[0].startsWith("scrypt")) {
71
+ const parsed = parseHash(hashedPassword);
72
+ if (!parsed || parsed.legacy)
61
73
  return true;
62
- }
63
- const salt = parts[0].slice(6);
64
- const saltBytes = salt.length / 2;
65
- return saltBytes !== SALT_LENGTH;
74
+ const saltBytes = parsed.salt.length / 2;
75
+ return (saltBytes !== SALT_LENGTH ||
76
+ parsed.params.N !== SCRYPT_N ||
77
+ parsed.params.r !== SCRYPT_R ||
78
+ parsed.params.p !== SCRYPT_P);
66
79
  }
67
80
  /**
68
81
  * Generate a random token string (for password reset, etc.).
@@ -73,9 +86,47 @@ export function needsRehash(hashedPassword) {
73
86
  export function generateRandomToken(length = 32) {
74
87
  return randomBytes(length).toString("hex");
75
88
  }
76
- function deriveKey(password, salt) {
89
+ function parseHash(hashedPassword) {
90
+ const parts = hashedPassword.split("$");
91
+ if (parts.length === 6 && parts[0] === "scrypt") {
92
+ const N = Number(parts[1]);
93
+ const r = Number(parts[2]);
94
+ const p = Number(parts[3]);
95
+ // Bounds also cap the memory/CPU a corrupted hash string can request.
96
+ if (!Number.isInteger(N) ||
97
+ !Number.isInteger(r) ||
98
+ !Number.isInteger(p) ||
99
+ N < 2 ||
100
+ (N & (N - 1)) !== 0 ||
101
+ N > 1 << 20 ||
102
+ r < 1 ||
103
+ r > 64 ||
104
+ p < 1 ||
105
+ p > 16) {
106
+ return null;
107
+ }
108
+ return {
109
+ params: { N, r, p },
110
+ salt: parts[4],
111
+ hash: parts[5],
112
+ legacy: false,
113
+ };
114
+ }
115
+ // Legacy format from ≤ 0.1.1: "scrypt<salt>$<hash>" (no separator
116
+ // between the prefix and the salt, params not stored).
117
+ if (parts.length === 2 && parts[0].startsWith("scrypt")) {
118
+ return {
119
+ params: { N: SCRYPT_N, r: SCRYPT_R, p: SCRYPT_P },
120
+ salt: parts[0].slice(6),
121
+ hash: parts[1],
122
+ legacy: true,
123
+ };
124
+ }
125
+ return null;
126
+ }
127
+ function deriveKey(password, salt, params) {
77
128
  return new Promise((resolve, reject) => {
78
- scrypt(password, salt, KEY_LENGTH, { N: SCRYPT_N, r: SCRYPT_R, p: SCRYPT_P }, (err, derivedKey) => {
129
+ scrypt(password, salt, KEY_LENGTH, { N: params.N, r: params.r, p: params.p }, (err, derivedKey) => {
79
130
  if (err)
80
131
  reject(err);
81
132
  else
@@ -1 +1 @@
1
- {"version":3,"file":"authPassword.core.js","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authPassword.core.js","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * @module authProvider/authProvider
5
5
  */
6
6
  import type { AuthUser, UserCredentials, UserId } from "../authTypes/authUser.type.js";
7
- import type { TokenPair, TokenConfig } from "../authTypes/authToken.type.js";
7
+ import type { TokenPair, TokenConfig, TokenRevocationStore } from "../authTypes/authToken.type.js";
8
8
  import type { SessionStore, SessionId } from "../authTypes/authSession.type.js";
9
9
  import type { GuardResult } from "../authTypes/authRbac.type.js";
10
10
  import type { PermissionEngine } from "@zudojs/permissions";
@@ -28,6 +28,11 @@ export interface AuthServiceConfig {
28
28
  readonly sessionTtlSeconds: number;
29
29
  /** Optional permission engine */
30
30
  readonly permissions?: PermissionEngine;
31
+ /**
32
+ * Optional revocation store. When provided, `refresh()` rotates refresh
33
+ * tokens: the used token's `jti` is revoked so it cannot be replayed.
34
+ */
35
+ readonly revocationStore?: TokenRevocationStore;
31
36
  }
32
37
  /**
33
38
  * Auth service interface.
@@ -1 +1 @@
1
- {"version":3,"file":"authProvider.core.d.ts","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EACV,YAAY,EAEZ,SAAS,EACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAgB5D,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC1E,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAC1C,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CACH,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAqHxE"}
1
+ {"version":3,"file":"authProvider.core.d.ts","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EAEZ,SAAS,EACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC1E,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAC1C,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CACH,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA4IxE"}
@@ -4,13 +4,13 @@
4
4
  * @module authProvider/authProvider
5
5
  */
6
6
  import { hashPassword, verifyPassword, } from "../authPassword/authPassword.core.js";
7
- import { createTokenPair, verifyAccessToken, refreshAccessToken, } from "../authToken/authToken.core.js";
8
- import { InvalidCredentialsError, TokenExpiredError, AccountDeactivatedError, } from "../authErrors/authError.base.js";
7
+ import { createTokenPair, verifyAccessToken, verifyRefreshToken, } from "../authToken/authToken.core.js";
8
+ import { InvalidCredentialsError, TokenExpiredError, TokenInvalidError, TokenRevokedError, AccountDeactivatedError, } from "../authErrors/authError.base.js";
9
9
  /**
10
10
  * Create an auth service.
11
11
  */
12
12
  export function createAuthService(config) {
13
- const { token: tokenConfig, sessionStore, findUser, verifyPassword: verifyPwd, sessionTtlSeconds, permissions, } = config;
13
+ const { token: tokenConfig, sessionStore, findUser, verifyPassword: verifyPwd, sessionTtlSeconds, permissions, revocationStore, } = config;
14
14
  return {
15
15
  /**
16
16
  * Authenticate a user with credentials and return tokens + session.
@@ -44,19 +44,36 @@ export function createAuthService(config) {
44
44
  verifyToken(token) {
45
45
  const result = verifyAccessToken(token, tokenConfig);
46
46
  if (!result.valid) {
47
- throw new TokenExpiredError(result.error ?? "Token verification failed");
47
+ if (result.error === "Token expired") {
48
+ throw new TokenExpiredError(result.error);
49
+ }
50
+ throw new TokenInvalidError(result.error ?? "Token verification failed");
48
51
  }
49
52
  return result.payload;
50
53
  },
51
54
  /**
52
55
  * Refresh an access token using a refresh token.
56
+ *
57
+ * When a revocation store is configured, the used refresh token is
58
+ * revoked (rotation) so it cannot be replayed.
53
59
  */
54
60
  async refresh(refreshToken) {
55
- const result = refreshAccessToken(refreshToken, tokenConfig);
56
- if (!result) {
57
- throw new TokenExpiredError("Refresh token is invalid or expired");
61
+ const result = verifyRefreshToken(refreshToken, tokenConfig);
62
+ if (!result.valid || !result.payload) {
63
+ if (result.error === "Token expired") {
64
+ throw new TokenExpiredError("Refresh token has expired");
65
+ }
66
+ throw new TokenInvalidError("Refresh token is invalid");
58
67
  }
59
- return result;
68
+ const { sub, jti, exp, roles } = result.payload;
69
+ if (revocationStore && (await revocationStore.isRevoked(jti))) {
70
+ throw new TokenRevokedError("Refresh token has been revoked");
71
+ }
72
+ const tokens = createTokenPair(sub, tokenConfig, { roles });
73
+ if (revocationStore) {
74
+ await revocationStore.revoke(jti, exp);
75
+ }
76
+ return tokens;
60
77
  },
61
78
  /**
62
79
  * Logout — destroy the session.
@@ -101,19 +118,16 @@ export function createAuthService(config) {
101
118
  }
102
119
  /**
103
120
  * Simple fallback guard when no permissions engine is configured.
104
- * Performs basic wildcard matching without full ABAC support.
121
+ * Grants access to resource owners and to the "admin" role only —
122
+ * configure @zudojs/permissions for real role/permission matching.
105
123
  */
106
124
  function simpleGuard(userRoles, permission, userId, resourceOwnerId) {
107
125
  // Ownership check
108
126
  if (resourceOwnerId && resourceOwnerId === userId) {
109
127
  return { allowed: true, userRoles: [...userRoles] };
110
128
  }
111
- const [requiredResource, requiredAction] = permission.split(":");
112
- for (const role of userRoles) {
113
- // Role-based — simplified check
114
- if (role === "admin") {
115
- return { allowed: true, userRoles: [...userRoles] };
116
- }
129
+ if (userRoles.includes("admin")) {
130
+ return { allowed: true, userRoles: [...userRoles] };
117
131
  }
118
132
  return {
119
133
  allowed: false,
@@ -1 +1 @@
1
- {"version":3,"file":"authProvider.core.js","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authProvider.core.js","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"authSession.core.d.ts","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,kCAAkC,CAAC;AAM1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CA0DvD"}
1
+ {"version":3,"file":"authSession.core.d.ts","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,kCAAkC,CAAC;AAM1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CA8EvD"}
@@ -15,8 +15,19 @@ const DEFAULT_TTL_SECONDS = 86400; // 24 hours
15
15
  */
16
16
  export function createMemorySessionStore() {
17
17
  const sessions = new Map();
18
+ const ttls = new Map();
19
+ function purgeExpired() {
20
+ const now = new Date();
21
+ for (const [id, session] of sessions) {
22
+ if (now > session.expiresAt) {
23
+ sessions.delete(id);
24
+ ttls.delete(id);
25
+ }
26
+ }
27
+ }
18
28
  return {
19
29
  async create(options) {
30
+ purgeExpired();
20
31
  const id = generateSessionId();
21
32
  const now = new Date();
22
33
  const ttlMs = (options.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;
@@ -32,6 +43,7 @@ export function createMemorySessionStore() {
32
43
  metadata: options.metadata,
33
44
  };
34
45
  sessions.set(id, session);
46
+ ttls.set(id, ttlMs);
35
47
  return session;
36
48
  },
37
49
  async get(sessionId) {
@@ -42,26 +54,33 @@ export function createMemorySessionStore() {
42
54
  return null;
43
55
  if (new Date() > session.expiresAt) {
44
56
  sessions.delete(sessionId);
57
+ ttls.delete(sessionId);
45
58
  return null;
46
59
  }
47
60
  return session;
48
61
  },
49
62
  async touch(sessionId) {
50
63
  const session = sessions.get(sessionId);
51
- if (session && session.active) {
64
+ if (session && session.active && new Date() <= session.expiresAt) {
65
+ const now = new Date();
66
+ const ttlMs = ttls.get(sessionId) ?? DEFAULT_TTL_SECONDS * 1000;
52
67
  sessions.set(sessionId, {
53
68
  ...session,
54
- lastActivityAt: new Date(),
69
+ lastActivityAt: now,
70
+ // Sliding expiration: activity extends the session by its TTL
71
+ expiresAt: new Date(now.getTime() + ttlMs),
55
72
  });
56
73
  }
57
74
  },
58
75
  async destroy(sessionId) {
59
76
  sessions.delete(sessionId);
77
+ ttls.delete(sessionId);
60
78
  },
61
79
  async destroyAllForUser(userId) {
62
80
  for (const [id, session] of sessions) {
63
81
  if (session.userId === userId) {
64
82
  sessions.delete(id);
83
+ ttls.delete(id);
65
84
  }
66
85
  }
67
86
  },
@@ -1 +1 @@
1
- {"version":3,"file":"authSession.core.js","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,WAAW;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEnD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAA6B;YACxC,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC,GAAG,IAAI,CAAC;YAEjE,MAAM,OAAO,GAAgB;gBAC3B,EAAE;gBACF,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,SAAS,EAAE,GAAG;gBACd,cAAc,EAAE,GAAG;gBACnB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;gBAC1C,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,SAAoB;YAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACjC,IAAI,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACnC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,SAAoB;YAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;oBACtB,GAAG,OAAO;oBACV,cAAc,EAAE,IAAI,IAAI,EAAE;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,SAAoB;YAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;YACpC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAc,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"authSession.core.js","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"authToken.core.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAUxC;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,CAsCX;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,GAAG,IAAI,CAOlB"}
1
+ {"version":3,"file":"authToken.core.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAWxC;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,CAuCX;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,GAAG,IAAI,CAOlB"}
@@ -6,10 +6,10 @@
6
6
  * Pure Node.js implementation (no jsonwebtoken dependency).
7
7
  * Uses HMAC SHA-256 for signing.
8
8
  */
9
- import { TimeMs } from "@zudojs/constants";
10
9
  import { signToken, verifyToken, generateTokenId, } from "./authToken.signing.js";
11
- const DEFAULT_ACCESS_TTL = TimeMs.SECOND * 15; // 15 minutes
12
- const DEFAULT_REFRESH_TTL = TimeMs.SECOND * 60 * 60 * 24 * 7; // 7 days
10
+ // TTLs are in seconds — they are added to Unix-second `iat`/`exp` claims.
11
+ const DEFAULT_ACCESS_TTL = 900; // 15 minutes
12
+ const DEFAULT_REFRESH_TTL = 604_800; // 7 days
13
13
  /**
14
14
  * Create a new token pair (access + refresh).
15
15
  */
@@ -33,6 +33,7 @@ export function createTokenPair(userId, config, options) {
33
33
  exp: now + refreshTtl,
34
34
  typ: "refresh",
35
35
  jti: generateTokenId(),
36
+ roles: options?.roles,
36
37
  ...(config.issuer ? { iss: config.issuer } : {}),
37
38
  ...(config.audience ? { aud: config.audience } : {}),
38
39
  }, config.refreshSecret);
@@ -1 +1 @@
1
- {"version":3,"file":"authToken.core.js","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authToken.core.js","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * In-memory token revocation store.
3
+ *
4
+ * @module authToken/authToken.revocation
5
+ *
6
+ * Good for development and single-process deployments. For production,
7
+ * implement TokenRevocationStore with Redis or a database so revocations
8
+ * are shared across instances.
9
+ */
10
+ import type { TokenRevocationStore } from "../authTypes/authToken.type.js";
11
+ /**
12
+ * Create an in-memory token revocation store.
13
+ *
14
+ * Entries are purged lazily once their token would have expired anyway.
15
+ */
16
+ export declare function createMemoryTokenRevocationStore(): TokenRevocationStore;
17
+ //# sourceMappingURL=authToken.revocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authToken.revocation.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.revocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,gCAAgC,IAAI,oBAAoB,CAuBvE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * In-memory token revocation store.
3
+ *
4
+ * @module authToken/authToken.revocation
5
+ *
6
+ * Good for development and single-process deployments. For production,
7
+ * implement TokenRevocationStore with Redis or a database so revocations
8
+ * are shared across instances.
9
+ */
10
+ /**
11
+ * Create an in-memory token revocation store.
12
+ *
13
+ * Entries are purged lazily once their token would have expired anyway.
14
+ */
15
+ export function createMemoryTokenRevocationStore() {
16
+ const revoked = new Map();
17
+ function purgeExpired() {
18
+ const now = Math.floor(Date.now() / 1000);
19
+ for (const [id, expiresAt] of revoked) {
20
+ if (expiresAt < now) {
21
+ revoked.delete(id);
22
+ }
23
+ }
24
+ }
25
+ return {
26
+ async revoke(tokenId, expiresAt) {
27
+ purgeExpired();
28
+ revoked.set(tokenId, expiresAt);
29
+ },
30
+ async isRevoked(tokenId) {
31
+ purgeExpired();
32
+ return revoked.has(tokenId);
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=authToken.revocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authToken.revocation.js","sourceRoot":"","sources":["../../src/authToken/authToken.revocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;GAIG;AACH,MAAM,UAAU,gCAAgC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE3C,SAAS,YAAY;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,SAAiB;YAC9C,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,OAAgB;YAC9B,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -11,7 +11,8 @@ import type { JwtToken, TokenId, TokenPayload, TokenConfig, TokenVerificationRes
11
11
  */
12
12
  export declare function signToken(payload: TokenPayload, secret: string): JwtToken;
13
13
  /**
14
- * Verify a JWT token's signature, expiration, and type.
14
+ * Verify a JWT token's signature, algorithm, expiration, type,
15
+ * and (when configured) issuer and audience.
15
16
  */
16
17
  export declare function verifyToken(token: JwtToken, secret: string, expectedType: "access" | "refresh", config: TokenConfig): TokenVerificationResult;
17
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"authToken.signing.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAQzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,QAAQ,GAAG,SAAS,EAClC,MAAM,EAAE,WAAW,GAClB,uBAAuB,CA0CzB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
1
+ {"version":3,"file":"authToken.signing.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAQzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,QAAQ,GAAG,SAAS,EAClC,MAAM,EAAE,WAAW,GAClB,uBAAuB,CA6DzB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -20,7 +20,8 @@ export function signToken(payload, secret) {
20
20
  return `${signatureInput}.${signature}`;
21
21
  }
22
22
  /**
23
- * Verify a JWT token's signature, expiration, and type.
23
+ * Verify a JWT token's signature, algorithm, expiration, type,
24
+ * and (when configured) issuer and audience.
24
25
  */
25
26
  export function verifyToken(token, secret, expectedType, config) {
26
27
  const parts = token.split(".");
@@ -28,10 +29,20 @@ export function verifyToken(token, secret, expectedType, config) {
28
29
  return { valid: false, error: "Invalid token format" };
29
30
  }
30
31
  const [headerB64, bodyB64, signature] = parts;
32
+ let header;
33
+ try {
34
+ header = JSON.parse(base64UrlDecode(headerB64));
35
+ }
36
+ catch {
37
+ return { valid: false, error: "Invalid header" };
38
+ }
39
+ if (header.alg !== ALGORITHM) {
40
+ return { valid: false, error: "Unsupported algorithm" };
41
+ }
31
42
  const signatureInput = `${headerB64}.${bodyB64}`;
32
43
  const expectedSignature = hmacSha256(signatureInput, secret);
33
- const sigBuffer = Buffer.from(signature ?? "", "hex");
34
- const expectedBuffer = Buffer.from(expectedSignature, "hex");
44
+ const sigBuffer = Buffer.from(signature ?? "", "base64url");
45
+ const expectedBuffer = Buffer.from(expectedSignature, "base64url");
35
46
  if (sigBuffer.length !== expectedBuffer.length ||
36
47
  !timingSafeEqual(sigBuffer, expectedBuffer)) {
37
48
  return { valid: false, error: "Invalid signature" };
@@ -44,6 +55,9 @@ export function verifyToken(token, secret, expectedType, config) {
44
55
  return { valid: false, error: "Invalid payload" };
45
56
  }
46
57
  const now = Math.floor(Date.now() / 1000);
58
+ if (typeof payload.exp !== "number") {
59
+ return { valid: false, error: "Missing expiration" };
60
+ }
47
61
  if (payload.exp < now) {
48
62
  return { valid: false, error: "Token expired" };
49
63
  }
@@ -53,6 +67,9 @@ export function verifyToken(token, secret, expectedType, config) {
53
67
  if (config.issuer && payload.iss !== config.issuer) {
54
68
  return { valid: false, error: "Invalid issuer" };
55
69
  }
70
+ if (config.audience && payload.aud !== config.audience) {
71
+ return { valid: false, error: "Invalid audience" };
72
+ }
56
73
  return { valid: true, payload };
57
74
  }
58
75
  /**
@@ -63,25 +80,12 @@ export function generateTokenId() {
63
80
  }
64
81
  // ─── Internal helpers ─────────────────────────────────────────────────────
65
82
  function hmacSha256(data, secret) {
66
- return createHmac("sha256", secret).update(data).digest("hex");
83
+ return createHmac("sha256", secret).update(data).digest("base64url");
67
84
  }
68
85
  function base64UrlEncode(data) {
69
- const encoded = Buffer.from(data).toString("base64");
70
- let result = "";
71
- for (let i = 0; i < encoded.length; i++) {
72
- const char = encoded[i];
73
- if (char === "+")
74
- result += "-";
75
- else if (char === "/")
76
- result += "_";
77
- else if (char !== "=")
78
- result += char;
79
- }
80
- return result;
86
+ return Buffer.from(data, "utf-8").toString("base64url");
81
87
  }
82
88
  function base64UrlDecode(data) {
83
- const padded = data.replace(/-/g, "+").replace(/_/g, "/");
84
- const padLength = (4 - (padded.length % 4)) % 4;
85
- return Buffer.from(padded + "=".repeat(padLength), "base64").toString("utf-8");
89
+ return Buffer.from(data, "base64url").toString("utf-8");
86
90
  }
87
91
  //# sourceMappingURL=authToken.signing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authToken.signing.js","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authToken.signing.js","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"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"}