@geekmidas/auth 0.0.5 → 0.2.0

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 (117) hide show
  1. package/README.md +343 -214
  2. package/dist/{cacheTokenStorage-Ca05vf3T.mjs → cacheTokenStorage-16NE8Cd9.mjs} +3 -3
  3. package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
  4. package/dist/{cacheTokenStorage-BzBRJfd-.d.mts → cacheTokenStorage-B7sOoysu.d.cts} +8 -6
  5. package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
  6. package/dist/{cacheTokenStorage-CvptztkW.cjs → cacheTokenStorage-CEpMniTi.cjs} +3 -3
  7. package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
  8. package/dist/{cacheTokenStorage-yNUpDD8W.d.cts → cacheTokenStorage-_tq4Kmhc.d.mts} +8 -6
  9. package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
  10. package/dist/cacheTokenStorage.cjs +1 -1
  11. package/dist/cacheTokenStorage.d.cts +1 -1
  12. package/dist/cacheTokenStorage.d.mts +1 -1
  13. package/dist/cacheTokenStorage.mjs +1 -1
  14. package/dist/{client-DaiUm0UZ.cjs → client-BPl_mMvb.cjs} +14 -8
  15. package/dist/client-BPl_mMvb.cjs.map +1 -0
  16. package/dist/{client-DjNZS6vZ.mjs → client-eidYNJSH.mjs} +14 -8
  17. package/dist/client-eidYNJSH.mjs.map +1 -0
  18. package/dist/client.cjs +2 -2
  19. package/dist/client.d.cts +1 -1
  20. package/dist/client.d.mts +1 -1
  21. package/dist/client.mjs +2 -2
  22. package/dist/hono/jwt.cjs +1 -1
  23. package/dist/hono/jwt.cjs.map +1 -1
  24. package/dist/hono/jwt.d.cts +2 -1
  25. package/dist/hono/jwt.d.cts.map +1 -0
  26. package/dist/hono/jwt.d.mts +2 -1
  27. package/dist/hono/jwt.d.mts.map +1 -0
  28. package/dist/hono/jwt.mjs +1 -1
  29. package/dist/hono/jwt.mjs.map +1 -1
  30. package/dist/hono/oidc.cjs +1 -1
  31. package/dist/hono/oidc.cjs.map +1 -1
  32. package/dist/hono/oidc.d.cts +3 -2
  33. package/dist/hono/oidc.d.cts.map +1 -0
  34. package/dist/hono/oidc.d.mts +3 -2
  35. package/dist/hono/oidc.d.mts.map +1 -0
  36. package/dist/hono/oidc.mjs +1 -1
  37. package/dist/hono/oidc.mjs.map +1 -1
  38. package/dist/index.cjs +3 -3
  39. package/dist/index.d.cts +2 -2
  40. package/dist/index.d.mts +2 -2
  41. package/dist/index.mjs +3 -3
  42. package/dist/{jwt-DF9kFbmh.d.cts → jwt-3eIuY2dg.d.cts} +2 -1
  43. package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
  44. package/dist/jwt-Bo_eACEi.cjs.map +1 -1
  45. package/dist/{jwt-DH8CJ2xC.d.mts → jwt-BqLlRkw-.d.mts} +2 -1
  46. package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
  47. package/dist/jwt-D88cPJyT.mjs.map +1 -1
  48. package/dist/jwt.d.cts +1 -1
  49. package/dist/jwt.d.mts +1 -1
  50. package/dist/lambda/jwt.cjs +2 -2
  51. package/dist/lambda/jwt.cjs.map +1 -1
  52. package/dist/lambda/jwt.d.cts +2 -1
  53. package/dist/lambda/jwt.d.cts.map +1 -0
  54. package/dist/lambda/jwt.d.mts +2 -1
  55. package/dist/lambda/jwt.d.mts.map +1 -0
  56. package/dist/lambda/jwt.mjs +2 -2
  57. package/dist/lambda/jwt.mjs.map +1 -1
  58. package/dist/lambda/oidc.cjs +2 -2
  59. package/dist/lambda/oidc.cjs.map +1 -1
  60. package/dist/lambda/oidc.d.cts +3 -2
  61. package/dist/lambda/oidc.d.cts.map +1 -0
  62. package/dist/lambda/oidc.d.mts +3 -2
  63. package/dist/lambda/oidc.d.mts.map +1 -0
  64. package/dist/lambda/oidc.mjs +2 -2
  65. package/dist/lambda/oidc.mjs.map +1 -1
  66. package/dist/oidc-C0KyYaAK.cjs.map +1 -1
  67. package/dist/{oidc-CKOGLxjV.d.mts → oidc-ChA17wLB.d.cts} +3 -2
  68. package/dist/oidc-ChA17wLB.d.cts.map +1 -0
  69. package/dist/{oidc-DDLIB5gb.d.cts → oidc-DTRgBBl6.d.mts} +3 -2
  70. package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
  71. package/dist/oidc-KA30gMlx.mjs.map +1 -1
  72. package/dist/oidc.d.cts +2 -2
  73. package/dist/oidc.d.mts +2 -2
  74. package/dist/server.cjs +2 -2
  75. package/dist/server.d.cts +2 -2
  76. package/dist/server.d.mts +2 -2
  77. package/dist/server.mjs +2 -2
  78. package/dist/{tokenManager--Q93eNYr.d.mts → tokenManager-CL3yE06D.d.cts} +2 -1
  79. package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
  80. package/dist/{tokenManager-BVXxfHRa.mjs → tokenManager-Ci2Tgxp8.mjs} +5 -3
  81. package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
  82. package/dist/{tokenManager-EPmwgai2.cjs → tokenManager-CvEMgxOp.cjs} +5 -3
  83. package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
  84. package/dist/{tokenManager-H6-lWEah.d.cts → tokenManager-RrwjL0y-.d.mts} +2 -1
  85. package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
  86. package/dist/tokenManager.cjs +1 -1
  87. package/dist/tokenManager.d.cts +1 -1
  88. package/dist/tokenManager.d.mts +1 -1
  89. package/dist/tokenManager.mjs +1 -1
  90. package/package.json +10 -5
  91. package/src/__tests__/cacheTokenStorage.spec.ts +148 -148
  92. package/src/__tests__/client.spec.ts +339 -339
  93. package/src/__tests__/hono-jwt.spec.ts +219 -219
  94. package/src/__tests__/hono-oidc.spec.ts +560 -560
  95. package/src/__tests__/jwt.spec.ts +150 -127
  96. package/src/__tests__/lambda-jwt.spec.ts +205 -205
  97. package/src/__tests__/lambda-oidc.spec.ts +580 -579
  98. package/src/__tests__/oidc.spec.ts +365 -365
  99. package/src/__tests__/tokenManager.spec.ts +254 -254
  100. package/src/cacheTokenStorage.ts +32 -32
  101. package/src/client.ts +199 -190
  102. package/src/hono/jwt.ts +111 -111
  103. package/src/hono/oidc.ts +131 -131
  104. package/src/index.ts +2 -2
  105. package/src/jwt.ts +57 -57
  106. package/src/lambda/jwt.ts +170 -170
  107. package/src/lambda/oidc.ts +165 -165
  108. package/src/oidc.ts +121 -121
  109. package/src/server.ts +6 -7
  110. package/src/tokenManager.ts +89 -87
  111. package/tsconfig.json +10 -0
  112. package/dist/cacheTokenStorage-Ca05vf3T.mjs.map +0 -1
  113. package/dist/cacheTokenStorage-CvptztkW.cjs.map +0 -1
  114. package/dist/client-DaiUm0UZ.cjs.map +0 -1
  115. package/dist/client-DjNZS6vZ.mjs.map +0 -1
  116. package/dist/tokenManager-BVXxfHRa.mjs.map +0 -1
  117. package/dist/tokenManager-EPmwgai2.cjs.map +0 -1
@@ -13,18 +13,18 @@ declare class LocalStorageTokenStorage implements TokenStorage {
13
13
  private refreshTokenKey;
14
14
  constructor(accessTokenKey?: string, refreshTokenKey?: string);
15
15
  getAccessToken(): string | null;
16
- setAccessToken(token: string, ttl?: number): void;
16
+ setAccessToken(token: string, _ttl?: number): void;
17
17
  getRefreshToken(): string | null;
18
- setRefreshToken(token: string, ttl?: number): void;
18
+ setRefreshToken(token: string, _ttl?: number): void;
19
19
  clearTokens(): void;
20
20
  }
21
21
  declare class MemoryTokenStorage implements TokenStorage {
22
22
  private accessToken;
23
23
  private refreshToken;
24
24
  getAccessToken(): string | null;
25
- setAccessToken(token: string, ttl?: number): void;
25
+ setAccessToken(token: string, _ttl?: number): void;
26
26
  getRefreshToken(): string | null;
27
- setRefreshToken(token: string, ttl?: number): void;
27
+ setRefreshToken(token: string, _ttl?: number): void;
28
28
  clearTokens(): void;
29
29
  }
30
30
  interface TokenClientOptions {
@@ -59,13 +59,15 @@ declare class CacheTokenStorage implements TokenStorage {
59
59
  private cache;
60
60
  private accessTokenKey;
61
61
  private refreshTokenKey;
62
- constructor(cache: Cache<string>, accessTokenKey?: string, refreshTokenKey?: string);
62
+ constructor(cache: Cache, accessTokenKey?: string, refreshTokenKey?: string);
63
63
  getAccessToken(): Promise<string | null>;
64
64
  setAccessToken(token: string, ttl?: number): Promise<void>;
65
65
  getRefreshToken(): Promise<string | null>;
66
66
  setRefreshToken(token: string, ttl?: number): Promise<void>;
67
67
  clearTokens(): Promise<void>;
68
68
  }
69
+ //# sourceMappingURL=cacheTokenStorage.d.ts.map
70
+
69
71
  //#endregion
70
72
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
71
- //# sourceMappingURL=cacheTokenStorage-BzBRJfd-.d.mts.map
73
+ //# sourceMappingURL=cacheTokenStorage-B7sOoysu.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheTokenStorage-B7sOoysu.d.cts","names":[],"sources":["../src/client.ts","../src/cacheTokenStorage.ts"],"sourcesContent":[],"mappings":";;;UAAiB,YAAA;oBACE;+CAC2B;EAF7B,eAAY,EAAA,EAGT,OAHS,CAAA,MAAA,GAAA,IAAA,CAAA,GAAA,MAAA,GAAA,IAAA;EAAA,eAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,EAIkB,OAJlB,CAAA,IAAA,CAAA,GAAA,IAAA;EAAA,WACV,EAAA,EAIH,OAJG,CAAA,IAAA,CAAA,GAAA,IAAA;;AAEC,cAKP,wBAAA,YAAoC,YAL7B,CAAA;EAAO,QACoB,cAAA;EAAO,QACtC,eAAA;EAAO,WAAA,CAAA,cAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EAAA,MAAA;EAGV,cAAA,CAAA,CAAA,EAAA,MAAA,GAAyB,IAAA;EAuCzB,cAAA,CAAA,KAAA,EAAmB,MAAA,EAAA,IAAW,CAAA,EAAA,MAAA,CAAY,EAAA,IAAA;EA0BtC,eAAA,CAAA,CAAA,EAAA,MAAkB,GAAA,IACxB;EASE,eAAW,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAA,WAAA,CAAA,CAAA,EAAA,IAAA;;AAgBC,cApDZ,kBAAA,YAA8B,YAoDlB,CAAA;EAAO,QAIN,WAAA;EAAO,QAS7B,YAAA;EAAO,cAOW,CAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAO,cAiBO,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAI,eAYhB,CAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAO,eA0CD,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAO,WAkBD,CAAA,CAAA,EAAA,IAAA;;AAKK,UA5IxB,kBAAA,CA4IwB;EAAM,OAAd,CAAA,EA3ItB,YA2IsB;EAAO,eAAA,CAAA,EAAA,MAAA;;;;EClN3B,CAAA,EAAA,GAAA,IAAA;EAAkB,cAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;AAeN,cDiEZ,WAAA,CCjEY;EAAO,QAKoB,OAAA;EAAO,QAIjC,eAAA;EAAO,QAKoB,cAAA;EAAO,QAItC,cAAA;EAAO,WAjCa,CAAA,OAAA,CAAA,EDyFpB,kBCzFoB;EAAY,cAAA,CAAA,CAAA,EDgG7B,OChG6B,CAAA,MAAA,GAAA,IAAA,CAAA;qBDoG5B;kGAStB;iBAOkB;;qCAiBc;mBAYZ;yBA0CM;uBAkBF,QAAQ;4BAKH,QAAQ;;;;cClN5B,iBAAA,YAA6B;EDHzB,QAAA,KAAA;EAAY,QAAA,cAAA;EAAA,QACV,eAAA;EAAO,WACoB,CAAA,KAAA,ECOrC,KDPqC,EAAA,cAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EAAA,MAAA;EAAO,cACjC,CAAA,CAAA,ECeK,ODfL,CAAA,MAAA,GAAA,IAAA,CAAA;EAAO,cACoB,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,ECmBK,ODnBL,CAAA,IAAA,CAAA;EAAO,eACtC,CAAA,CAAA,ECsBU,ODtBV,CAAA,MAAA,GAAA,IAAA,CAAA;EAAO,eAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,EC2B8B,OD3B9B,CAAA,IAAA,CAAA;EAGV,WAAA,CAAA,CAAA,EC4BS,OD5BT,CAAA,IAAyB,CAAA;AAuCtC;AA0BA"}
@@ -11,14 +11,14 @@ var CacheTokenStorage = class {
11
11
  }
12
12
  async getAccessToken() {
13
13
  const token = await this.cache.get(this.accessTokenKey);
14
- return token || null;
14
+ return token ?? null;
15
15
  }
16
16
  async setAccessToken(token, ttl) {
17
17
  await this.cache.set(this.accessTokenKey, token, ttl);
18
18
  }
19
19
  async getRefreshToken() {
20
20
  const token = await this.cache.get(this.refreshTokenKey);
21
- return token || null;
21
+ return token ?? null;
22
22
  }
23
23
  async setRefreshToken(token, ttl) {
24
24
  await this.cache.set(this.refreshTokenKey, token, ttl);
@@ -35,4 +35,4 @@ Object.defineProperty(exports, 'CacheTokenStorage', {
35
35
  return CacheTokenStorage;
36
36
  }
37
37
  });
38
- //# sourceMappingURL=cacheTokenStorage-CvptztkW.cjs.map
38
+ //# sourceMappingURL=cacheTokenStorage-CEpMniTi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheTokenStorage-CEpMniTi.cjs","names":["cache: Cache","accessTokenKey: string","refreshTokenKey: string","token: string","ttl?: number"],"sources":["../src/cacheTokenStorage.ts"],"sourcesContent":["import type { Cache } from '@geekmidas/cache';\nimport type { TokenStorage } from './client.js';\n\nexport class CacheTokenStorage implements TokenStorage {\n\tprivate cache: Cache;\n\tprivate accessTokenKey: string;\n\tprivate refreshTokenKey: string;\n\n\tconstructor(\n\t\tcache: Cache,\n\t\taccessTokenKey: string = 'access_token',\n\t\trefreshTokenKey: string = 'refresh_token',\n\t) {\n\t\tthis.cache = cache;\n\t\tthis.accessTokenKey = accessTokenKey;\n\t\tthis.refreshTokenKey = refreshTokenKey;\n\t}\n\n\tasync getAccessToken(): Promise<string | null> {\n\t\tconst token = await this.cache.get<string>(this.accessTokenKey);\n\t\treturn token ?? null;\n\t}\n\n\tasync setAccessToken(token: string, ttl?: number): Promise<void> {\n\t\tawait this.cache.set(this.accessTokenKey, token, ttl);\n\t}\n\n\tasync getRefreshToken(): Promise<string | null> {\n\t\tconst token = await this.cache.get<string>(this.refreshTokenKey);\n\t\treturn token ?? null;\n\t}\n\n\tasync setRefreshToken(token: string, ttl?: number): Promise<void> {\n\t\tawait this.cache.set(this.refreshTokenKey, token, ttl);\n\t}\n\n\tasync clearTokens(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\tthis.cache.delete(this.accessTokenKey),\n\t\t\tthis.cache.delete(this.refreshTokenKey),\n\t\t]);\n\t}\n}\n"],"mappings":";;AAGA,IAAa,oBAAb,MAAuD;CACtD,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YACCA,OACAC,iBAAyB,gBACzBC,kBAA0B,iBACzB;AACD,OAAK,QAAQ;AACb,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;CACvB;CAED,MAAM,iBAAyC;EAC9C,MAAM,QAAQ,MAAM,KAAK,MAAM,IAAY,KAAK,eAAe;AAC/D,SAAO,SAAS;CAChB;CAED,MAAM,eAAeC,OAAeC,KAA6B;AAChE,QAAM,KAAK,MAAM,IAAI,KAAK,gBAAgB,OAAO,IAAI;CACrD;CAED,MAAM,kBAA0C;EAC/C,MAAM,QAAQ,MAAM,KAAK,MAAM,IAAY,KAAK,gBAAgB;AAChE,SAAO,SAAS;CAChB;CAED,MAAM,gBAAgBD,OAAeC,KAA6B;AACjE,QAAM,KAAK,MAAM,IAAI,KAAK,iBAAiB,OAAO,IAAI;CACtD;CAED,MAAM,cAA6B;AAClC,QAAM,QAAQ,IAAI,CACjB,KAAK,MAAM,OAAO,KAAK,eAAe,EACtC,KAAK,MAAM,OAAO,KAAK,gBAAgB,AACvC,EAAC;CACF;AACD"}
@@ -13,18 +13,18 @@ declare class LocalStorageTokenStorage implements TokenStorage {
13
13
  private refreshTokenKey;
14
14
  constructor(accessTokenKey?: string, refreshTokenKey?: string);
15
15
  getAccessToken(): string | null;
16
- setAccessToken(token: string, ttl?: number): void;
16
+ setAccessToken(token: string, _ttl?: number): void;
17
17
  getRefreshToken(): string | null;
18
- setRefreshToken(token: string, ttl?: number): void;
18
+ setRefreshToken(token: string, _ttl?: number): void;
19
19
  clearTokens(): void;
20
20
  }
21
21
  declare class MemoryTokenStorage implements TokenStorage {
22
22
  private accessToken;
23
23
  private refreshToken;
24
24
  getAccessToken(): string | null;
25
- setAccessToken(token: string, ttl?: number): void;
25
+ setAccessToken(token: string, _ttl?: number): void;
26
26
  getRefreshToken(): string | null;
27
- setRefreshToken(token: string, ttl?: number): void;
27
+ setRefreshToken(token: string, _ttl?: number): void;
28
28
  clearTokens(): void;
29
29
  }
30
30
  interface TokenClientOptions {
@@ -59,13 +59,15 @@ declare class CacheTokenStorage implements TokenStorage {
59
59
  private cache;
60
60
  private accessTokenKey;
61
61
  private refreshTokenKey;
62
- constructor(cache: Cache<string>, accessTokenKey?: string, refreshTokenKey?: string);
62
+ constructor(cache: Cache, accessTokenKey?: string, refreshTokenKey?: string);
63
63
  getAccessToken(): Promise<string | null>;
64
64
  setAccessToken(token: string, ttl?: number): Promise<void>;
65
65
  getRefreshToken(): Promise<string | null>;
66
66
  setRefreshToken(token: string, ttl?: number): Promise<void>;
67
67
  clearTokens(): Promise<void>;
68
68
  }
69
+ //# sourceMappingURL=cacheTokenStorage.d.ts.map
70
+
69
71
  //#endregion
70
72
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
71
- //# sourceMappingURL=cacheTokenStorage-yNUpDD8W.d.cts.map
73
+ //# sourceMappingURL=cacheTokenStorage-_tq4Kmhc.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheTokenStorage-_tq4Kmhc.d.mts","names":[],"sources":["../src/client.ts","../src/cacheTokenStorage.ts"],"sourcesContent":[],"mappings":";;;UAAiB,YAAA;oBACE;+CAC2B;EAF7B,eAAY,EAAA,EAGT,OAHS,CAAA,MAAA,GAAA,IAAA,CAAA,GAAA,MAAA,GAAA,IAAA;EAAA,eAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,EAIkB,OAJlB,CAAA,IAAA,CAAA,GAAA,IAAA;EAAA,WACV,EAAA,EAIH,OAJG,CAAA,IAAA,CAAA,GAAA,IAAA;;AAEC,cAKP,wBAAA,YAAoC,YAL7B,CAAA;EAAO,QACoB,cAAA;EAAO,QACtC,eAAA;EAAO,WAAA,CAAA,cAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EAAA,MAAA;EAGV,cAAA,CAAA,CAAA,EAAA,MAAA,GAAyB,IAAA;EAuCzB,cAAA,CAAA,KAAA,EAAmB,MAAA,EAAA,IAAW,CAAA,EAAA,MAAA,CAAY,EAAA,IAAA;EA0BtC,eAAA,CAAA,CAAA,EAAA,MAAkB,GAAA,IACxB;EASE,eAAW,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAA,WAAA,CAAA,CAAA,EAAA,IAAA;;AAgBC,cApDZ,kBAAA,YAA8B,YAoDlB,CAAA;EAAO,QAIN,WAAA;EAAO,QAS7B,YAAA;EAAO,cAOW,CAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAO,cAiBO,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAI,eAYhB,CAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAO,eA0CD,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAO,WAkBD,CAAA,CAAA,EAAA,IAAA;;AAKK,UA5IxB,kBAAA,CA4IwB;EAAM,OAAd,CAAA,EA3ItB,YA2IsB;EAAO,eAAA,CAAA,EAAA,MAAA;;;;EClN3B,CAAA,EAAA,GAAA,IAAA;EAAkB,cAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;AAeN,cDiEZ,WAAA,CCjEY;EAAO,QAKoB,OAAA;EAAO,QAIjC,eAAA;EAAO,QAKoB,cAAA;EAAO,QAItC,cAAA;EAAO,WAjCa,CAAA,OAAA,CAAA,EDyFpB,kBCzFoB;EAAY,cAAA,CAAA,CAAA,EDgG7B,OChG6B,CAAA,MAAA,GAAA,IAAA,CAAA;qBDoG5B;kGAStB;iBAOkB;;qCAiBc;mBAYZ;yBA0CM;uBAkBF,QAAQ;4BAKH,QAAQ;;;;cClN5B,iBAAA,YAA6B;EDHzB,QAAA,KAAA;EAAY,QAAA,cAAA;EAAA,QACV,eAAA;EAAO,WACoB,CAAA,KAAA,ECOrC,KDPqC,EAAA,cAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EAAA,MAAA;EAAO,cACjC,CAAA,CAAA,ECeK,ODfL,CAAA,MAAA,GAAA,IAAA,CAAA;EAAO,cACoB,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,ECmBK,ODnBL,CAAA,IAAA,CAAA;EAAO,eACtC,CAAA,CAAA,ECsBU,ODtBV,CAAA,MAAA,GAAA,IAAA,CAAA;EAAO,eAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,CAAA,EAAA,MAAA,CAAA,EC2B8B,OD3B9B,CAAA,IAAA,CAAA;EAGV,WAAA,CAAA,CAAA,EC4BS,OD5BT,CAAA,IAAyB,CAAA;AAuCtC;AA0BA"}
@@ -1,3 +1,3 @@
1
- const require_cacheTokenStorage = require('./cacheTokenStorage-CvptztkW.cjs');
1
+ const require_cacheTokenStorage = require('./cacheTokenStorage-CEpMniTi.cjs');
2
2
 
3
3
  exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
@@ -1,2 +1,2 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-yNUpDD8W.cjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-B7sOoysu.cjs";
2
2
  export { CacheTokenStorage };
@@ -1,2 +1,2 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-BzBRJfd-.mjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-_tq4Kmhc.mjs";
2
2
  export { CacheTokenStorage };
@@ -1,3 +1,3 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-Ca05vf3T.mjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-16NE8Cd9.mjs";
2
2
 
3
3
  export { CacheTokenStorage };
@@ -11,7 +11,7 @@ var LocalStorageTokenStorage = class {
11
11
  if (typeof window === "undefined") return null;
12
12
  return localStorage.getItem(this.accessTokenKey);
13
13
  }
14
- setAccessToken(token, ttl) {
14
+ setAccessToken(token, _ttl) {
15
15
  if (typeof window === "undefined") return;
16
16
  localStorage.setItem(this.accessTokenKey, token);
17
17
  }
@@ -19,7 +19,7 @@ var LocalStorageTokenStorage = class {
19
19
  if (typeof window === "undefined") return null;
20
20
  return localStorage.getItem(this.refreshTokenKey);
21
21
  }
22
- setRefreshToken(token, ttl) {
22
+ setRefreshToken(token, _ttl) {
23
23
  if (typeof window === "undefined") return;
24
24
  localStorage.setItem(this.refreshTokenKey, token);
25
25
  }
@@ -35,13 +35,13 @@ var MemoryTokenStorage = class {
35
35
  getAccessToken() {
36
36
  return this.accessToken;
37
37
  }
38
- setAccessToken(token, ttl) {
38
+ setAccessToken(token, _ttl) {
39
39
  this.accessToken = token;
40
40
  }
41
41
  getRefreshToken() {
42
42
  return this.refreshToken;
43
43
  }
44
- setRefreshToken(token, ttl) {
44
+ setRefreshToken(token, _ttl) {
45
45
  this.refreshToken = token;
46
46
  }
47
47
  clearTokens() {
@@ -75,7 +75,10 @@ var TokenClient = class {
75
75
  }
76
76
  isTokenExpired(token) {
77
77
  try {
78
- const payload = JSON.parse(atob(token.split(".")[1]));
78
+ const parts = token.split(".");
79
+ const payloadPart = parts[1];
80
+ if (!payloadPart) return true;
81
+ const payload = JSON.parse(atob(payloadPart));
79
82
  const now = Math.floor(Date.now() / 1e3);
80
83
  return payload.exp < now;
81
84
  } catch {
@@ -84,7 +87,10 @@ var TokenClient = class {
84
87
  }
85
88
  getTokenExpiration(token) {
86
89
  try {
87
- const payload = JSON.parse(atob(token.split(".")[1]));
90
+ const parts = token.split(".");
91
+ const payloadPart = parts[1];
92
+ if (!payloadPart) return null;
93
+ const payload = JSON.parse(atob(payloadPart));
88
94
  return new Date(payload.exp * 1e3);
89
95
  } catch {
90
96
  return null;
@@ -108,7 +114,7 @@ var TokenClient = class {
108
114
  refreshToken: newRefreshToken
109
115
  });
110
116
  return true;
111
- } catch (error) {
117
+ } catch (_error) {
112
118
  await this.clearTokens();
113
119
  if (this.onTokenExpired) this.onTokenExpired();
114
120
  return false;
@@ -153,4 +159,4 @@ Object.defineProperty(exports, 'TokenClient', {
153
159
  return TokenClient;
154
160
  }
155
161
  });
156
- //# sourceMappingURL=client-DaiUm0UZ.cjs.map
162
+ //# sourceMappingURL=client-BPl_mMvb.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-BPl_mMvb.cjs","names":["accessTokenKey: string","refreshTokenKey: string","token: string","_ttl?: number","options: TokenClientOptions","accessToken: string","refreshToken?: string","accessTtl?: number","refreshTtl?: number"],"sources":["../src/client.ts"],"sourcesContent":["export interface TokenStorage {\n\tgetAccessToken(): Promise<string | null> | string | null;\n\tsetAccessToken(token: string, ttl?: number): Promise<void> | void;\n\tgetRefreshToken(): Promise<string | null> | string | null;\n\tsetRefreshToken(token: string, ttl?: number): Promise<void> | void;\n\tclearTokens(): Promise<void> | void;\n}\n\nexport class LocalStorageTokenStorage implements TokenStorage {\n\tprivate accessTokenKey: string;\n\tprivate refreshTokenKey: string;\n\n\tconstructor(\n\t\taccessTokenKey: string = 'access_token',\n\t\trefreshTokenKey: string = 'refresh_token',\n\t) {\n\t\tthis.accessTokenKey = accessTokenKey;\n\t\tthis.refreshTokenKey = refreshTokenKey;\n\t}\n\n\tgetAccessToken(): string | null {\n\t\tif (typeof window === 'undefined') return null;\n\t\treturn localStorage.getItem(this.accessTokenKey);\n\t}\n\n\tsetAccessToken(token: string, _ttl?: number): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.setItem(this.accessTokenKey, token);\n\t}\n\n\tgetRefreshToken(): string | null {\n\t\tif (typeof window === 'undefined') return null;\n\t\treturn localStorage.getItem(this.refreshTokenKey);\n\t}\n\n\tsetRefreshToken(token: string, _ttl?: number): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.setItem(this.refreshTokenKey, token);\n\t}\n\n\tclearTokens(): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.removeItem(this.accessTokenKey);\n\t\tlocalStorage.removeItem(this.refreshTokenKey);\n\t}\n}\n\nexport class MemoryTokenStorage implements TokenStorage {\n\tprivate accessToken: string | null = null;\n\tprivate refreshToken: string | null = null;\n\n\tgetAccessToken(): string | null {\n\t\treturn this.accessToken;\n\t}\n\n\tsetAccessToken(token: string, _ttl?: number): void {\n\t\tthis.accessToken = token;\n\t}\n\n\tgetRefreshToken(): string | null {\n\t\treturn this.refreshToken;\n\t}\n\n\tsetRefreshToken(token: string, _ttl?: number): void {\n\t\tthis.refreshToken = token;\n\t}\n\n\tclearTokens(): void {\n\t\tthis.accessToken = null;\n\t\tthis.refreshToken = null;\n\t}\n}\n\nexport interface TokenClientOptions {\n\tstorage?: TokenStorage;\n\trefreshEndpoint?: string;\n\tonTokenRefresh?: (tokens: {\n\t\taccessToken: string;\n\t\trefreshToken?: string;\n\t}) => void;\n\tonTokenExpired?: () => void;\n}\n\nexport class TokenClient {\n\tprivate storage: TokenStorage;\n\tprivate refreshEndpoint?: string;\n\tprivate onTokenRefresh?: (tokens: {\n\t\taccessToken: string;\n\t\trefreshToken?: string;\n\t}) => void;\n\tprivate onTokenExpired?: () => void;\n\n\tconstructor(options: TokenClientOptions = {}) {\n\t\tthis.storage = options.storage || new LocalStorageTokenStorage();\n\t\tthis.refreshEndpoint = options.refreshEndpoint;\n\t\tthis.onTokenRefresh = options.onTokenRefresh;\n\t\tthis.onTokenExpired = options.onTokenExpired;\n\t}\n\n\tasync getAccessToken(): Promise<string | null> {\n\t\treturn await this.storage.getAccessToken();\n\t}\n\n\tasync getRefreshToken(): Promise<string | null> {\n\t\treturn await this.storage.getRefreshToken();\n\t}\n\n\tasync setTokens(\n\t\taccessToken: string,\n\t\trefreshToken?: string,\n\t\taccessTtl?: number,\n\t\trefreshTtl?: number,\n\t): Promise<void> {\n\t\tawait this.storage.setAccessToken(accessToken, accessTtl);\n\t\tif (refreshToken) {\n\t\t\tawait this.storage.setRefreshToken(refreshToken, refreshTtl);\n\t\t}\n\t}\n\n\tasync clearTokens(): Promise<void> {\n\t\tawait this.storage.clearTokens();\n\t}\n\n\tisTokenExpired(token: string): boolean {\n\t\ttry {\n\t\t\tconst parts = token.split('.');\n\t\t\tconst payloadPart = parts[1];\n\t\t\tif (!payloadPart) return true;\n\t\t\tconst payload = JSON.parse(atob(payloadPart));\n\t\t\tconst now = Math.floor(Date.now() / 1000);\n\t\t\treturn payload.exp < now;\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tgetTokenExpiration(token: string): Date | null {\n\t\ttry {\n\t\t\tconst parts = token.split('.');\n\t\t\tconst payloadPart = parts[1];\n\t\t\tif (!payloadPart) return null;\n\t\t\tconst payload = JSON.parse(atob(payloadPart));\n\t\t\treturn new Date(payload.exp * 1000);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync refreshTokens(): Promise<boolean> {\n\t\tconst refreshToken = await this.getRefreshToken();\n\n\t\tif (!refreshToken || !this.refreshEndpoint) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(this.refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({ refreshToken }),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error('Failed to refresh token');\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as {\n\t\t\t\taccessToken: string;\n\t\t\t\trefreshToken: string;\n\t\t\t};\n\t\t\tconst { accessToken, refreshToken: newRefreshToken } = data;\n\n\t\t\tawait this.setTokens(accessToken, newRefreshToken);\n\n\t\t\tif (this.onTokenRefresh) {\n\t\t\t\tthis.onTokenRefresh({ accessToken, refreshToken: newRefreshToken });\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (_error) {\n\t\t\tawait this.clearTokens();\n\t\t\tif (this.onTokenExpired) {\n\t\t\t\tthis.onTokenExpired();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getValidAccessToken(): Promise<string | null> {\n\t\tconst accessToken = await this.getAccessToken();\n\n\t\tif (!accessToken) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.isTokenExpired(accessToken)) {\n\t\t\tconst refreshed = await this.refreshTokens();\n\t\t\tif (!refreshed) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn await this.getAccessToken();\n\t\t}\n\n\t\treturn accessToken;\n\t}\n\n\tasync createAuthHeaders(): Promise<Record<string, string>> {\n\t\tconst token = await this.getAccessToken();\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t}\n\n\tasync createValidAuthHeaders(): Promise<Record<string, string>> {\n\t\tconst token = await this.getValidAccessToken();\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t}\n}\n\nexport { CacheTokenStorage } from './cacheTokenStorage.js';\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ var LocalStorageTokenStorage = class {
10
10
  if (typeof window === "undefined") return null;
11
11
  return localStorage.getItem(this.accessTokenKey);
12
12
  }
13
- setAccessToken(token, ttl) {
13
+ setAccessToken(token, _ttl) {
14
14
  if (typeof window === "undefined") return;
15
15
  localStorage.setItem(this.accessTokenKey, token);
16
16
  }
@@ -18,7 +18,7 @@ var LocalStorageTokenStorage = class {
18
18
  if (typeof window === "undefined") return null;
19
19
  return localStorage.getItem(this.refreshTokenKey);
20
20
  }
21
- setRefreshToken(token, ttl) {
21
+ setRefreshToken(token, _ttl) {
22
22
  if (typeof window === "undefined") return;
23
23
  localStorage.setItem(this.refreshTokenKey, token);
24
24
  }
@@ -34,13 +34,13 @@ var MemoryTokenStorage = class {
34
34
  getAccessToken() {
35
35
  return this.accessToken;
36
36
  }
37
- setAccessToken(token, ttl) {
37
+ setAccessToken(token, _ttl) {
38
38
  this.accessToken = token;
39
39
  }
40
40
  getRefreshToken() {
41
41
  return this.refreshToken;
42
42
  }
43
- setRefreshToken(token, ttl) {
43
+ setRefreshToken(token, _ttl) {
44
44
  this.refreshToken = token;
45
45
  }
46
46
  clearTokens() {
@@ -74,7 +74,10 @@ var TokenClient = class {
74
74
  }
75
75
  isTokenExpired(token) {
76
76
  try {
77
- const payload = JSON.parse(atob(token.split(".")[1]));
77
+ const parts = token.split(".");
78
+ const payloadPart = parts[1];
79
+ if (!payloadPart) return true;
80
+ const payload = JSON.parse(atob(payloadPart));
78
81
  const now = Math.floor(Date.now() / 1e3);
79
82
  return payload.exp < now;
80
83
  } catch {
@@ -83,7 +86,10 @@ var TokenClient = class {
83
86
  }
84
87
  getTokenExpiration(token) {
85
88
  try {
86
- const payload = JSON.parse(atob(token.split(".")[1]));
89
+ const parts = token.split(".");
90
+ const payloadPart = parts[1];
91
+ if (!payloadPart) return null;
92
+ const payload = JSON.parse(atob(payloadPart));
87
93
  return new Date(payload.exp * 1e3);
88
94
  } catch {
89
95
  return null;
@@ -107,7 +113,7 @@ var TokenClient = class {
107
113
  refreshToken: newRefreshToken
108
114
  });
109
115
  return true;
110
- } catch (error) {
116
+ } catch (_error) {
111
117
  await this.clearTokens();
112
118
  if (this.onTokenExpired) this.onTokenExpired();
113
119
  return false;
@@ -135,4 +141,4 @@ var TokenClient = class {
135
141
 
136
142
  //#endregion
137
143
  export { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient };
138
- //# sourceMappingURL=client-DjNZS6vZ.mjs.map
144
+ //# sourceMappingURL=client-eidYNJSH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-eidYNJSH.mjs","names":["accessTokenKey: string","refreshTokenKey: string","token: string","_ttl?: number","options: TokenClientOptions","accessToken: string","refreshToken?: string","accessTtl?: number","refreshTtl?: number"],"sources":["../src/client.ts"],"sourcesContent":["export interface TokenStorage {\n\tgetAccessToken(): Promise<string | null> | string | null;\n\tsetAccessToken(token: string, ttl?: number): Promise<void> | void;\n\tgetRefreshToken(): Promise<string | null> | string | null;\n\tsetRefreshToken(token: string, ttl?: number): Promise<void> | void;\n\tclearTokens(): Promise<void> | void;\n}\n\nexport class LocalStorageTokenStorage implements TokenStorage {\n\tprivate accessTokenKey: string;\n\tprivate refreshTokenKey: string;\n\n\tconstructor(\n\t\taccessTokenKey: string = 'access_token',\n\t\trefreshTokenKey: string = 'refresh_token',\n\t) {\n\t\tthis.accessTokenKey = accessTokenKey;\n\t\tthis.refreshTokenKey = refreshTokenKey;\n\t}\n\n\tgetAccessToken(): string | null {\n\t\tif (typeof window === 'undefined') return null;\n\t\treturn localStorage.getItem(this.accessTokenKey);\n\t}\n\n\tsetAccessToken(token: string, _ttl?: number): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.setItem(this.accessTokenKey, token);\n\t}\n\n\tgetRefreshToken(): string | null {\n\t\tif (typeof window === 'undefined') return null;\n\t\treturn localStorage.getItem(this.refreshTokenKey);\n\t}\n\n\tsetRefreshToken(token: string, _ttl?: number): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.setItem(this.refreshTokenKey, token);\n\t}\n\n\tclearTokens(): void {\n\t\tif (typeof window === 'undefined') return;\n\t\tlocalStorage.removeItem(this.accessTokenKey);\n\t\tlocalStorage.removeItem(this.refreshTokenKey);\n\t}\n}\n\nexport class MemoryTokenStorage implements TokenStorage {\n\tprivate accessToken: string | null = null;\n\tprivate refreshToken: string | null = null;\n\n\tgetAccessToken(): string | null {\n\t\treturn this.accessToken;\n\t}\n\n\tsetAccessToken(token: string, _ttl?: number): void {\n\t\tthis.accessToken = token;\n\t}\n\n\tgetRefreshToken(): string | null {\n\t\treturn this.refreshToken;\n\t}\n\n\tsetRefreshToken(token: string, _ttl?: number): void {\n\t\tthis.refreshToken = token;\n\t}\n\n\tclearTokens(): void {\n\t\tthis.accessToken = null;\n\t\tthis.refreshToken = null;\n\t}\n}\n\nexport interface TokenClientOptions {\n\tstorage?: TokenStorage;\n\trefreshEndpoint?: string;\n\tonTokenRefresh?: (tokens: {\n\t\taccessToken: string;\n\t\trefreshToken?: string;\n\t}) => void;\n\tonTokenExpired?: () => void;\n}\n\nexport class TokenClient {\n\tprivate storage: TokenStorage;\n\tprivate refreshEndpoint?: string;\n\tprivate onTokenRefresh?: (tokens: {\n\t\taccessToken: string;\n\t\trefreshToken?: string;\n\t}) => void;\n\tprivate onTokenExpired?: () => void;\n\n\tconstructor(options: TokenClientOptions = {}) {\n\t\tthis.storage = options.storage || new LocalStorageTokenStorage();\n\t\tthis.refreshEndpoint = options.refreshEndpoint;\n\t\tthis.onTokenRefresh = options.onTokenRefresh;\n\t\tthis.onTokenExpired = options.onTokenExpired;\n\t}\n\n\tasync getAccessToken(): Promise<string | null> {\n\t\treturn await this.storage.getAccessToken();\n\t}\n\n\tasync getRefreshToken(): Promise<string | null> {\n\t\treturn await this.storage.getRefreshToken();\n\t}\n\n\tasync setTokens(\n\t\taccessToken: string,\n\t\trefreshToken?: string,\n\t\taccessTtl?: number,\n\t\trefreshTtl?: number,\n\t): Promise<void> {\n\t\tawait this.storage.setAccessToken(accessToken, accessTtl);\n\t\tif (refreshToken) {\n\t\t\tawait this.storage.setRefreshToken(refreshToken, refreshTtl);\n\t\t}\n\t}\n\n\tasync clearTokens(): Promise<void> {\n\t\tawait this.storage.clearTokens();\n\t}\n\n\tisTokenExpired(token: string): boolean {\n\t\ttry {\n\t\t\tconst parts = token.split('.');\n\t\t\tconst payloadPart = parts[1];\n\t\t\tif (!payloadPart) return true;\n\t\t\tconst payload = JSON.parse(atob(payloadPart));\n\t\t\tconst now = Math.floor(Date.now() / 1000);\n\t\t\treturn payload.exp < now;\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tgetTokenExpiration(token: string): Date | null {\n\t\ttry {\n\t\t\tconst parts = token.split('.');\n\t\t\tconst payloadPart = parts[1];\n\t\t\tif (!payloadPart) return null;\n\t\t\tconst payload = JSON.parse(atob(payloadPart));\n\t\t\treturn new Date(payload.exp * 1000);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync refreshTokens(): Promise<boolean> {\n\t\tconst refreshToken = await this.getRefreshToken();\n\n\t\tif (!refreshToken || !this.refreshEndpoint) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(this.refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({ refreshToken }),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error('Failed to refresh token');\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as {\n\t\t\t\taccessToken: string;\n\t\t\t\trefreshToken: string;\n\t\t\t};\n\t\t\tconst { accessToken, refreshToken: newRefreshToken } = data;\n\n\t\t\tawait this.setTokens(accessToken, newRefreshToken);\n\n\t\t\tif (this.onTokenRefresh) {\n\t\t\t\tthis.onTokenRefresh({ accessToken, refreshToken: newRefreshToken });\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (_error) {\n\t\t\tawait this.clearTokens();\n\t\t\tif (this.onTokenExpired) {\n\t\t\t\tthis.onTokenExpired();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getValidAccessToken(): Promise<string | null> {\n\t\tconst accessToken = await this.getAccessToken();\n\n\t\tif (!accessToken) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.isTokenExpired(accessToken)) {\n\t\t\tconst refreshed = await this.refreshTokens();\n\t\t\tif (!refreshed) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn await this.getAccessToken();\n\t\t}\n\n\t\treturn accessToken;\n\t}\n\n\tasync createAuthHeaders(): Promise<Record<string, string>> {\n\t\tconst token = await this.getAccessToken();\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t}\n\n\tasync createValidAuthHeaders(): Promise<Record<string, string>> {\n\t\tconst token = await this.getValidAccessToken();\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t}\n}\n\nexport { CacheTokenStorage } from './cacheTokenStorage.js';\n"],"mappings":"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"}
package/dist/client.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_cacheTokenStorage = require('./cacheTokenStorage-CvptztkW.cjs');
2
- const require_client = require('./client-DaiUm0UZ.cjs');
1
+ const require_cacheTokenStorage = require('./cacheTokenStorage-CEpMniTi.cjs');
2
+ const require_client = require('./client-BPl_mMvb.cjs');
3
3
 
4
4
  exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
5
5
  exports.LocalStorageTokenStorage = require_client.LocalStorageTokenStorage;
package/dist/client.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-yNUpDD8W.cjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-B7sOoysu.cjs";
2
2
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
package/dist/client.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-BzBRJfd-.mjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-_tq4Kmhc.mjs";
2
2
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
package/dist/client.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-Ca05vf3T.mjs";
2
- import { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient } from "./client-DjNZS6vZ.mjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-16NE8Cd9.mjs";
2
+ import { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient } from "./client-eidYNJSH.mjs";
3
3
 
4
4
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient };
package/dist/hono/jwt.cjs CHANGED
@@ -12,7 +12,7 @@ function extractToken(c, options = {}) {
12
12
  const cookieHeader = c.req.header("cookie");
13
13
  if (cookieHeader) {
14
14
  const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
- if (match) return match[1];
15
+ if (match?.[1]) return match[1];
16
16
  }
17
17
  }
18
18
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.cjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","JwtVerifier","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n type JwtClaims,\n type JwtConfig,\n JwtVerifier,\n type TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n JwtVerifier,\n type JwtClaims,\n type JwtConfig,\n type TokenExtractionOptions,\n};\n\nfunction extractToken(\n c: Context,\n options: TokenExtractionOptions = {},\n): string | null {\n const {\n headerName = 'authorization',\n cookieName,\n tokenPrefix = 'Bearer ',\n } = options;\n\n const headerValue = c.req.header(headerName);\n if (headerValue) {\n if (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n return headerValue.slice(tokenPrefix.length);\n }\n return headerValue;\n }\n\n if (cookieName) {\n const cookieHeader = c.req.header('cookie');\n if (cookieHeader) {\n const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n return match[1];\n }\n }\n }\n\n return null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n config: JwtConfig;\n extraction?: TokenExtractionOptions;\n contextKey?: string;\n onError?: (c: Context, error: Error) => Response | Promise<Response>;\n transformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n private readonly verifier: JwtVerifier<TClaims>;\n private readonly extraction: TokenExtractionOptions;\n private readonly contextKey: string;\n private readonly onError?: (\n c: Context,\n error: Error,\n ) => Response | Promise<Response>;\n private readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n constructor(options: JwtMiddlewareOptions<TClaims>) {\n this.verifier = new JwtVerifier(options.config);\n this.extraction = options.extraction ?? {};\n this.contextKey = options.contextKey ?? 'jwtClaims';\n this.onError = options.onError;\n this.transformClaims = options.transformClaims;\n }\n\n /**\n * Returns middleware that requires valid JWT\n */\n handler(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (!token) {\n if (this.onError) {\n return this.onError(c, new Error('No token provided'));\n }\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const payload = await this.verifier.verify(token);\n const claims = this.transformClaims\n ? this.transformClaims(payload)\n : payload;\n\n c.set(this.contextKey, claims);\n c.set('jwtToken', token);\n\n await next();\n } catch (error) {\n if (this.onError) {\n return this.onError(c, error as Error);\n }\n return c.json({ error: 'Invalid token' }, 401);\n }\n };\n }\n\n /**\n * Returns middleware that allows unauthenticated requests\n */\n optional(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (token) {\n const claims = await this.verifier.verifyOrNull(token);\n if (claims) {\n const transformed = this.transformClaims\n ? this.transformClaims(claims)\n : claims;\n c.set(this.contextKey, transformed);\n c.set('jwtToken', token);\n }\n }\n\n await next();\n };\n }\n}\n"],"mappings":";;;AAeA,SAAS,aACPA,GACAC,UAAkC,CAAE,GACrB;CACf,MAAM,EACJ,aAAa,iBACb,YACA,cAAc,WACf,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AACf,MAAI,eAAe,YAAY,WAAW,YAAY,CACpD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE9C,SAAO;CACR;AAED,KAAI,YAAY;EACd,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GAChB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,MACF,QAAO,MAAM;EAEhB;CACF;AAED,QAAO;AACR;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CAChE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AAClD,OAAK,WAAW,IAAIC,wBAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAChC;;;;CAKD,UAA6B;AAC3B,SAAO,OAAOH,GAAYI,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACV,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAExD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC9C;AAED,OAAI;IACF,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBAChB,KAAK,gBAAgB,QAAQ,GAC7B;AAEJ,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACb,SAAQ,OAAO;AACd,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,MAAe;AAExC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC/C;EACF;CACF;;;;CAKD,WAA8B;AAC5B,SAAO,OAAOJ,GAAYI,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACT,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACV,MAAM,cAAc,KAAK,kBACrB,KAAK,gBAAgB,OAAO,GAC5B;AACJ,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACzB;GACF;AAED,SAAM,MAAM;EACb;CACF;AACF"}
1
+ {"version":3,"file":"jwt.cjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","JwtVerifier","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n\tJwtVerifier,\n\ttype JwtClaims,\n\ttype JwtConfig,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CACjE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AACnD,OAAK,WAAW,IAAIC,wBAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;;;;CAKD,UAA6B;AAC5B,SAAO,OAAOH,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,QAAQ,GAC7B;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;;;;CAKD,WAA8B;AAC7B,SAAO,OAAOJ,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,OAAO,GAC5B;AACH,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACxB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -1,4 +1,4 @@
1
- import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-DF9kFbmh.cjs";
1
+ import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-3eIuY2dg.cjs";
2
2
  import { Context, MiddlewareHandler } from "hono";
3
3
 
4
4
  //#region src/hono/jwt.d.ts
@@ -40,6 +40,7 @@ declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
40
40
  */
41
41
  optional(): MiddlewareHandler;
42
42
  }
43
+ //# sourceMappingURL=jwt.d.ts.map
43
44
  //#endregion
44
45
  export { JwtClaims, JwtConfig, JwtMiddleware, JwtMiddlewareOptions, JwtVerifier, TokenExtractionOptions };
45
46
  //# sourceMappingURL=jwt.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.cts","names":[],"sources":["../../src/hono/jwt.ts"],"sourcesContent":[],"mappings":";;;;UA8CiB,qCAAqC,YAAY;EAAjD,MAAA,EACR,SADQ;EAAoB,UAAA,CAAA,EAEvB,sBAFuB;EAAA,UAAiB,CAAA,EAAA,MAAA;EAAS,OAAG,CAAA,EAAA,CAAA,CAAA,EAInD,OAJmD,EAAA,KAAA,EAInC,KAJmC,EAAA,GAIzB,QAJyB,GAId,OAJc,CAIN,QAJM,CAAA;EAAS,eAClE,CAAA,EAAA,CAAA,MAAA,EAImB,SAJnB,EAAA,GAIiC,OAJjC;;;;;;;;;AAIwC;AAkBjD;;;;;;;AAsDa,cAtDA,aAsDA,CAAA,gBAtD8B,SAsD9B,GAtD0C,SAsD1C,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;uBA5CR,qBAAqB;;;;aAW/B;;;;cAiCC"}
@@ -1,4 +1,4 @@
1
- import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-DH8CJ2xC.mjs";
1
+ import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-BqLlRkw-.mjs";
2
2
  import { Context, MiddlewareHandler } from "hono";
3
3
 
4
4
  //#region src/hono/jwt.d.ts
@@ -40,6 +40,7 @@ declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
40
40
  */
41
41
  optional(): MiddlewareHandler;
42
42
  }
43
+ //# sourceMappingURL=jwt.d.ts.map
43
44
  //#endregion
44
45
  export { JwtClaims, JwtConfig, JwtMiddleware, JwtMiddlewareOptions, JwtVerifier, TokenExtractionOptions };
45
46
  //# sourceMappingURL=jwt.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.mts","names":[],"sources":["../../src/hono/jwt.ts"],"sourcesContent":[],"mappings":";;;;UA8CiB,qCAAqC,YAAY;EAAjD,MAAA,EACR,SADQ;EAAoB,UAAA,CAAA,EAEvB,sBAFuB;EAAA,UAAiB,CAAA,EAAA,MAAA;EAAS,OAAG,CAAA,EAAA,CAAA,CAAA,EAInD,OAJmD,EAAA,KAAA,EAInC,KAJmC,EAAA,GAIzB,QAJyB,GAId,OAJc,CAIN,QAJM,CAAA;EAAS,eAClE,CAAA,EAAA,CAAA,MAAA,EAImB,SAJnB,EAAA,GAIiC,OAJjC;;;;;;;;;AAIwC;AAkBjD;;;;;;;AAsDa,cAtDA,aAsDA,CAAA,gBAtD8B,SAsD9B,GAtD0C,SAsD1C,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;uBA5CR,qBAAqB;;;;aAW/B;;;;cAiCC"}
package/dist/hono/jwt.mjs CHANGED
@@ -12,7 +12,7 @@ function extractToken(c, options = {}) {
12
12
  const cookieHeader = c.req.header("cookie");
13
13
  if (cookieHeader) {
14
14
  const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
- if (match) return match[1];
15
+ if (match?.[1]) return match[1];
16
16
  }
17
17
  }
18
18
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.mjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n type JwtClaims,\n type JwtConfig,\n JwtVerifier,\n type TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n JwtVerifier,\n type JwtClaims,\n type JwtConfig,\n type TokenExtractionOptions,\n};\n\nfunction extractToken(\n c: Context,\n options: TokenExtractionOptions = {},\n): string | null {\n const {\n headerName = 'authorization',\n cookieName,\n tokenPrefix = 'Bearer ',\n } = options;\n\n const headerValue = c.req.header(headerName);\n if (headerValue) {\n if (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n return headerValue.slice(tokenPrefix.length);\n }\n return headerValue;\n }\n\n if (cookieName) {\n const cookieHeader = c.req.header('cookie');\n if (cookieHeader) {\n const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n return match[1];\n }\n }\n }\n\n return null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n config: JwtConfig;\n extraction?: TokenExtractionOptions;\n contextKey?: string;\n onError?: (c: Context, error: Error) => Response | Promise<Response>;\n transformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n private readonly verifier: JwtVerifier<TClaims>;\n private readonly extraction: TokenExtractionOptions;\n private readonly contextKey: string;\n private readonly onError?: (\n c: Context,\n error: Error,\n ) => Response | Promise<Response>;\n private readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n constructor(options: JwtMiddlewareOptions<TClaims>) {\n this.verifier = new JwtVerifier(options.config);\n this.extraction = options.extraction ?? {};\n this.contextKey = options.contextKey ?? 'jwtClaims';\n this.onError = options.onError;\n this.transformClaims = options.transformClaims;\n }\n\n /**\n * Returns middleware that requires valid JWT\n */\n handler(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (!token) {\n if (this.onError) {\n return this.onError(c, new Error('No token provided'));\n }\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const payload = await this.verifier.verify(token);\n const claims = this.transformClaims\n ? this.transformClaims(payload)\n : payload;\n\n c.set(this.contextKey, claims);\n c.set('jwtToken', token);\n\n await next();\n } catch (error) {\n if (this.onError) {\n return this.onError(c, error as Error);\n }\n return c.json({ error: 'Invalid token' }, 401);\n }\n };\n }\n\n /**\n * Returns middleware that allows unauthenticated requests\n */\n optional(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (token) {\n const claims = await this.verifier.verifyOrNull(token);\n if (claims) {\n const transformed = this.transformClaims\n ? this.transformClaims(claims)\n : claims;\n c.set(this.contextKey, transformed);\n c.set('jwtToken', token);\n }\n }\n\n await next();\n };\n }\n}\n"],"mappings":";;;AAeA,SAAS,aACPA,GACAC,UAAkC,CAAE,GACrB;CACf,MAAM,EACJ,aAAa,iBACb,YACA,cAAc,WACf,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AACf,MAAI,eAAe,YAAY,WAAW,YAAY,CACpD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE9C,SAAO;CACR;AAED,KAAI,YAAY;EACd,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GAChB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,MACF,QAAO,MAAM;EAEhB;CACF;AAED,QAAO;AACR;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CAChE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AAClD,OAAK,WAAW,IAAI,YAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAChC;;;;CAKD,UAA6B;AAC3B,SAAO,OAAOF,GAAYG,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACV,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAExD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC9C;AAED,OAAI;IACF,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBAChB,KAAK,gBAAgB,QAAQ,GAC7B;AAEJ,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACb,SAAQ,OAAO;AACd,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,MAAe;AAExC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC/C;EACF;CACF;;;;CAKD,WAA8B;AAC5B,SAAO,OAAOH,GAAYG,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACT,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACV,MAAM,cAAc,KAAK,kBACrB,KAAK,gBAAgB,OAAO,GAC5B;AACJ,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACzB;GACF;AAED,SAAM,MAAM;EACb;CACF;AACF"}
1
+ {"version":3,"file":"jwt.mjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n\tJwtVerifier,\n\ttype JwtClaims,\n\ttype JwtConfig,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CACjE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AACnD,OAAK,WAAW,IAAI,YAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;;;;CAKD,UAA6B;AAC5B,SAAO,OAAOF,GAAYG,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,QAAQ,GAC7B;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;;;;CAKD,WAA8B;AAC7B,SAAO,OAAOH,GAAYG,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,OAAO,GAC5B;AACH,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACxB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -12,7 +12,7 @@ function extractToken(c, options = {}) {
12
12
  const cookieHeader = c.req.header("cookie");
13
13
  if (cookieHeader) {
14
14
  const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
- if (match) return match[1];
15
+ if (match?.[1]) return match[1];
16
16
  }
17
17
  }
18
18
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.cjs","names":["c: Context","options: TokenExtractionOptions","options: OidcMiddlewareOptions<TClaims, TUserInfo>","OidcVerifier","next: Next","userInfo: TUserInfo | undefined"],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n type OidcClaims,\n type OidcConfig,\n type OidcUserInfo,\n OidcVerifier,\n type TokenExtractionOptions,\n} from '../oidc';\n\nexport {\n OidcVerifier,\n type OidcClaims,\n type OidcConfig,\n type OidcUserInfo,\n type TokenExtractionOptions,\n};\n\nfunction extractToken(\n c: Context,\n options: TokenExtractionOptions = {},\n): string | null {\n const {\n headerName = 'authorization',\n cookieName,\n tokenPrefix = 'Bearer ',\n } = options;\n\n const headerValue = c.req.header(headerName);\n if (headerValue) {\n if (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n return headerValue.slice(tokenPrefix.length);\n }\n return headerValue;\n }\n\n if (cookieName) {\n const cookieHeader = c.req.header('cookie');\n if (cookieHeader) {\n const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n return match[1];\n }\n }\n }\n\n return null;\n}\n\nexport interface OidcMiddlewareOptions<\n TClaims extends OidcClaims = OidcClaims,\n TUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n config: OidcConfig;\n extraction?: TokenExtractionOptions;\n contextKey?: string;\n fetchUserInfo?: boolean;\n onError?: (c: Context, error: Error) => Response | Promise<Response>;\n transformClaims?: (claims: OidcClaims, userInfo?: TUserInfo) => TClaims;\n}\n\n/**\n * OIDC Middleware for Hono\n *\n * @example\n * ```typescript\n * const oidc = new OidcMiddleware({\n * config: {\n * issuer: 'https://auth.example.com',\n * audience: 'my-client-id',\n * },\n * });\n *\n * app.use('/api/*', oidc.handler());\n *\n * // With user info\n * const oidcWithUserInfo = new OidcMiddleware({\n * config: { issuer: '...', audience: '...' },\n * fetchUserInfo: true,\n * });\n * ```\n */\nexport class OidcMiddleware<\n TClaims extends OidcClaims = OidcClaims,\n TUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n private readonly verifier: OidcVerifier<TClaims, TUserInfo>;\n private readonly extraction: TokenExtractionOptions;\n private readonly contextKey: string;\n private readonly fetchUserInfo: boolean;\n private readonly onError?: (\n c: Context,\n error: Error,\n ) => Response | Promise<Response>;\n private readonly transformClaims?: (\n claims: OidcClaims,\n userInfo?: TUserInfo,\n ) => TClaims;\n\n constructor(options: OidcMiddlewareOptions<TClaims, TUserInfo>) {\n this.verifier = new OidcVerifier(options.config);\n this.extraction = options.extraction ?? {};\n this.contextKey = options.contextKey ?? 'oidcClaims';\n this.fetchUserInfo = options.fetchUserInfo ?? false;\n this.onError = options.onError;\n this.transformClaims = options.transformClaims;\n }\n\n handler(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (!token) {\n if (this.onError) {\n return this.onError(c, new Error('No token provided'));\n }\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const payload = await this.verifier.verify(token);\n\n let userInfo: TUserInfo | undefined;\n if (this.fetchUserInfo) {\n userInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n c.set('oidcUserInfo', userInfo);\n }\n\n const claims = this.transformClaims\n ? this.transformClaims(payload, userInfo)\n : payload;\n\n c.set(this.contextKey, claims);\n c.set('oidcToken', token);\n\n await next();\n } catch (error) {\n if (this.onError) {\n return this.onError(c, error as Error);\n }\n return c.json({ error: 'Invalid token' }, 401);\n }\n };\n }\n\n optional(): MiddlewareHandler {\n return async (c: Context, next: Next) => {\n const token = extractToken(c, this.extraction);\n\n if (token) {\n const payload = await this.verifier.verifyOrNull(token);\n if (payload) {\n let userInfo: TUserInfo | undefined;\n if (this.fetchUserInfo) {\n userInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n c.set('oidcUserInfo', userInfo);\n }\n\n const claims = this.transformClaims\n ? this.transformClaims(payload, userInfo)\n : payload;\n\n c.set(this.contextKey, claims);\n c.set('oidcToken', token);\n }\n }\n\n await next();\n };\n }\n}\n"],"mappings":";;;AAiBA,SAAS,aACPA,GACAC,UAAkC,CAAE,GACrB;CACf,MAAM,EACJ,aAAa,iBACb,YACA,cAAc,WACf,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AACf,MAAI,eAAe,YAAY,WAAW,YAAY,CACpD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE9C,SAAO;CACR;AAED,KAAI,YAAY;EACd,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GAChB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,MACF,QAAO,MAAM;EAEhB;CACF;AAED,QAAO;AACR;;;;;;;;;;;;;;;;;;;;;;AAmCD,IAAa,iBAAb,MAGE;CACA,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAKjB,YAAYC,SAAoD;AAC9D,OAAK,WAAW,IAAIC,0BAAa,QAAQ;AACzC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAChC;CAED,UAA6B;AAC3B,SAAO,OAAOH,GAAYI,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACV,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAExD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC9C;AAED,OAAI;IACF,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IAEjD,IAAIC;AACJ,QAAI,KAAK,eAAe;AACtB,gBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,OAAE,IAAI,gBAAgB,SAAS;IAChC;IAED,MAAM,SAAS,KAAK,kBAChB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEJ,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,aAAa,MAAM;AAEzB,UAAM,MAAM;GACb,SAAQ,OAAO;AACd,QAAI,KAAK,QACP,QAAO,KAAK,QAAQ,GAAG,MAAe;AAExC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC/C;EACF;CACF;CAED,WAA8B;AAC5B,SAAO,OAAOL,GAAYI,SAAe;GACvC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACT,MAAM,UAAU,MAAM,KAAK,SAAS,aAAa,MAAM;AACvD,QAAI,SAAS;KACX,IAAIC;AACJ,SAAI,KAAK,eAAe;AACtB,iBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,QAAE,IAAI,gBAAgB,SAAS;KAChC;KAED,MAAM,SAAS,KAAK,kBAChB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEJ,OAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,OAAE,IAAI,aAAa,MAAM;IAC1B;GACF;AAED,SAAM,MAAM;EACb;CACF;AACF"}
1
+ {"version":3,"file":"oidc.cjs","names":["c: Context","options: TokenExtractionOptions","options: OidcMiddlewareOptions<TClaims, TUserInfo>","OidcVerifier","next: Next","userInfo: TUserInfo | undefined"],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\tOidcVerifier,\n\ttype TokenExtractionOptions,\n} from '../oidc';\n\nexport {\n\tOidcVerifier,\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface OidcMiddlewareOptions<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tconfig: OidcConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tfetchUserInfo?: boolean;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: OidcClaims, userInfo?: TUserInfo) => TClaims;\n}\n\n/**\n * OIDC Middleware for Hono\n *\n * @example\n * ```typescript\n * const oidc = new OidcMiddleware({\n * config: {\n * issuer: 'https://auth.example.com',\n * audience: 'my-client-id',\n * },\n * });\n *\n * app.use('/api/*', oidc.handler());\n *\n * // With user info\n * const oidcWithUserInfo = new OidcMiddleware({\n * config: { issuer: '...', audience: '...' },\n * fetchUserInfo: true,\n * });\n * ```\n */\nexport class OidcMiddleware<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tprivate readonly verifier: OidcVerifier<TClaims, TUserInfo>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly fetchUserInfo: boolean;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (\n\t\tclaims: OidcClaims,\n\t\tuserInfo?: TUserInfo,\n\t) => TClaims;\n\n\tconstructor(options: OidcMiddlewareOptions<TClaims, TUserInfo>) {\n\t\tthis.verifier = new OidcVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'oidcClaims';\n\t\tthis.fetchUserInfo = options.fetchUserInfo ?? false;\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\n\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t}\n\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('oidcToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst payload = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (payload) {\n\t\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t\t: payload;\n\n\t\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\t\tc.set('oidcToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAiBA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;;;;;;;AAmCD,IAAa,iBAAb,MAGE;CACD,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAKjB,YAAYC,SAAoD;AAC/D,OAAK,WAAW,IAAIC,0BAAa,QAAQ;AACzC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;CAED,UAA6B;AAC5B,SAAO,OAAOH,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IAEjD,IAAIC;AACJ,QAAI,KAAK,eAAe;AACvB,gBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,OAAE,IAAI,gBAAgB,SAAS;IAC/B;IAED,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,aAAa,MAAM;AAEzB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;CAED,WAA8B;AAC7B,SAAO,OAAOL,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,UAAU,MAAM,KAAK,SAAS,aAAa,MAAM;AACvD,QAAI,SAAS;KACZ,IAAIC;AACJ,SAAI,KAAK,eAAe;AACvB,iBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,QAAE,IAAI,gBAAgB,SAAS;KAC/B;KAED,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEH,OAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,OAAE,IAAI,aAAa,MAAM;IACzB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -1,5 +1,5 @@
1
- import { TokenExtractionOptions } from "../jwt-DF9kFbmh.cjs";
2
- import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc-DDLIB5gb.cjs";
1
+ import { TokenExtractionOptions } from "../jwt-3eIuY2dg.cjs";
2
+ import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc-ChA17wLB.cjs";
3
3
  import { Context, MiddlewareHandler } from "hono";
4
4
 
5
5
  //#region src/hono/oidc.d.ts
@@ -43,6 +43,7 @@ declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo
43
43
  handler(): MiddlewareHandler;
44
44
  optional(): MiddlewareHandler;
45
45
  }
46
+ //# sourceMappingURL=oidc.d.ts.map
46
47
  //#endregion
47
48
  export { OidcClaims, OidcConfig, OidcMiddleware, OidcMiddlewareOptions, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
48
49
  //# sourceMappingURL=oidc.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.d.cts","names":[],"sources":["../../src/hono/oidc.ts"],"sourcesContent":[],"mappings":";;;;;UAgDiB,sCACA,aAAa,8BACX,eAAe;UAEzB;EAJQ,UAAA,CAAA,EAKH,sBALwB;EAAA,UAAA,CAAA,EAAA,MAAA;EAAA,aACrB,CAAA,EAAA,OAAA;EAAU,OAAG,CAAA,EAAA,CAAA,CAAA,EAOf,OAPe,EAAA,KAAA,EAOC,KAPD,EAAA,GAOW,QAPX,GAOsB,OAPtB,CAO8B,QAP9B,CAAA;EAAU,eACrB,CAAA,EAAA,CAAA,MAAA,EAOS,UAPT,EAAA,QAAA,CAAA,EAOgC,SAPhC,EAAA,GAO8C,OAP9C;;;;;;;;;;;;AAOqD;AAwBxE;;;;;;;;;;AA+Da,cA/DA,cA+DA,CAAA,gBA9DI,UA8DJ,GA9DiB,UA8DjB,EAAA,kBA7DM,YA6DN,GA7DqB,YA6DrB,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;;uBA9CR,sBAAsB,SAAS;aASzC;cAqCC"}
@@ -1,5 +1,5 @@
1
- import { TokenExtractionOptions } from "../jwt-DH8CJ2xC.mjs";
2
- import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc-CKOGLxjV.mjs";
1
+ import { TokenExtractionOptions } from "../jwt-BqLlRkw-.mjs";
2
+ import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc-DTRgBBl6.mjs";
3
3
  import { Context, MiddlewareHandler } from "hono";
4
4
 
5
5
  //#region src/hono/oidc.d.ts
@@ -43,6 +43,7 @@ declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo
43
43
  handler(): MiddlewareHandler;
44
44
  optional(): MiddlewareHandler;
45
45
  }
46
+ //# sourceMappingURL=oidc.d.ts.map
46
47
  //#endregion
47
48
  export { OidcClaims, OidcConfig, OidcMiddleware, OidcMiddlewareOptions, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
48
49
  //# sourceMappingURL=oidc.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.d.mts","names":[],"sources":["../../src/hono/oidc.ts"],"sourcesContent":[],"mappings":";;;;;UAgDiB,sCACA,aAAa,8BACX,eAAe;UAEzB;EAJQ,UAAA,CAAA,EAKH,sBALwB;EAAA,UAAA,CAAA,EAAA,MAAA;EAAA,aACrB,CAAA,EAAA,OAAA;EAAU,OAAG,CAAA,EAAA,CAAA,CAAA,EAOf,OAPe,EAAA,KAAA,EAOC,KAPD,EAAA,GAOW,QAPX,GAOsB,OAPtB,CAO8B,QAP9B,CAAA;EAAU,eACrB,CAAA,EAAA,CAAA,MAAA,EAOS,UAPT,EAAA,QAAA,CAAA,EAOgC,SAPhC,EAAA,GAO8C,OAP9C;;;;;;;;;;;;AAOqD;AAwBxE;;;;;;;;;;AA+Da,cA/DA,cA+DA,CAAA,gBA9DI,UA8DJ,GA9DiB,UA8DjB,EAAA,kBA7DM,YA6DN,GA7DqB,YA6DrB,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;;uBA9CR,sBAAsB,SAAS;aASzC;cAqCC"}
@@ -12,7 +12,7 @@ function extractToken(c, options = {}) {
12
12
  const cookieHeader = c.req.header("cookie");
13
13
  if (cookieHeader) {
14
14
  const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
- if (match) return match[1];
15
+ if (match?.[1]) return match[1];
16
16
  }
17
17
  }
18
18
  return null;