@geekmidas/auth 10.0.0-alpha.99 → 10.0.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 (147) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/cacheTokenStorage-16NE8Cd9.mjs +32 -0
  3. package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
  4. package/dist/{cacheTokenStorage-B3u8Sf-6.d.cts → cacheTokenStorage-B7sOoysu.d.cts} +5 -2
  5. package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
  6. package/dist/cacheTokenStorage-CEpMniTi.cjs +38 -0
  7. package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
  8. package/dist/{cacheTokenStorage-B3u8Sf-6.d.mts → cacheTokenStorage-_tq4Kmhc.d.mts} +5 -2
  9. package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
  10. package/dist/cacheTokenStorage.cjs +2 -30
  11. package/dist/cacheTokenStorage.d.cts +1 -1
  12. package/dist/cacheTokenStorage.d.mts +1 -1
  13. package/dist/cacheTokenStorage.mjs +2 -29
  14. package/dist/{rolldown-runtime-VH7oDXx4.cjs → chunk-CUT6urMc.cjs} +10 -8
  15. package/dist/client-BPl_mMvb.cjs +162 -0
  16. package/dist/client-BPl_mMvb.cjs.map +1 -0
  17. package/dist/client-eidYNJSH.mjs +144 -0
  18. package/dist/client-eidYNJSH.mjs.map +1 -0
  19. package/dist/client.cjs +6 -144
  20. package/dist/client.d.cts +1 -1
  21. package/dist/client.d.mts +1 -1
  22. package/dist/client.mjs +3 -140
  23. package/dist/hono/jwt.cjs +10 -7
  24. package/dist/hono/jwt.cjs.map +1 -1
  25. package/dist/hono/jwt.d.cts +6 -4
  26. package/dist/hono/jwt.d.cts.map +1 -1
  27. package/dist/hono/jwt.d.mts +6 -4
  28. package/dist/hono/jwt.d.mts.map +1 -1
  29. package/dist/hono/jwt.mjs +10 -7
  30. package/dist/hono/jwt.mjs.map +1 -1
  31. package/dist/hono/oidc.cjs +10 -7
  32. package/dist/hono/oidc.cjs.map +1 -1
  33. package/dist/hono/oidc.d.cts +7 -5
  34. package/dist/hono/oidc.d.cts.map +1 -1
  35. package/dist/hono/oidc.d.mts +7 -5
  36. package/dist/hono/oidc.d.mts.map +1 -1
  37. package/dist/hono/oidc.mjs +10 -7
  38. package/dist/hono/oidc.mjs.map +1 -1
  39. package/dist/index.cjs +5 -5
  40. package/dist/index.d.cts +2 -2
  41. package/dist/index.d.mts +2 -2
  42. package/dist/index.mjs +5 -4
  43. package/dist/{jwt-CoKrpeMB.d.mts → jwt-3eIuY2dg.d.cts} +3 -2
  44. package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
  45. package/dist/jwt-Bo_eACEi.cjs +70 -0
  46. package/dist/jwt-Bo_eACEi.cjs.map +1 -0
  47. package/dist/{jwt-CoKrpeMB.d.cts → jwt-BqLlRkw-.d.mts} +3 -2
  48. package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
  49. package/dist/jwt-D88cPJyT.mjs +52 -0
  50. package/dist/jwt-D88cPJyT.mjs.map +1 -0
  51. package/dist/jwt.cjs +4 -56
  52. package/dist/jwt.d.cts +1 -1
  53. package/dist/jwt.d.mts +1 -1
  54. package/dist/jwt.mjs +2 -51
  55. package/dist/lambda/jwt.cjs +20 -16
  56. package/dist/lambda/jwt.cjs.map +1 -1
  57. package/dist/lambda/jwt.d.cts +6 -4
  58. package/dist/lambda/jwt.d.cts.map +1 -1
  59. package/dist/lambda/jwt.d.mts +6 -4
  60. package/dist/lambda/jwt.d.mts.map +1 -1
  61. package/dist/lambda/jwt.mjs +20 -16
  62. package/dist/lambda/jwt.mjs.map +1 -1
  63. package/dist/lambda/oidc.cjs +20 -16
  64. package/dist/lambda/oidc.cjs.map +1 -1
  65. package/dist/lambda/oidc.d.cts +7 -5
  66. package/dist/lambda/oidc.d.cts.map +1 -1
  67. package/dist/lambda/oidc.d.mts +7 -5
  68. package/dist/lambda/oidc.d.mts.map +1 -1
  69. package/dist/lambda/oidc.mjs +20 -16
  70. package/dist/lambda/oidc.mjs.map +1 -1
  71. package/dist/oidc-C0KyYaAK.cjs +68 -0
  72. package/dist/oidc-C0KyYaAK.cjs.map +1 -0
  73. package/dist/oidc-ChA17wLB.d.cts +87 -0
  74. package/dist/oidc-ChA17wLB.d.cts.map +1 -0
  75. package/dist/oidc-DTRgBBl6.d.mts +87 -0
  76. package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
  77. package/dist/oidc-KA30gMlx.mjs +62 -0
  78. package/dist/oidc-KA30gMlx.mjs.map +1 -0
  79. package/dist/oidc.cjs +2 -64
  80. package/dist/oidc.d.cts +3 -84
  81. package/dist/oidc.d.mts +3 -84
  82. package/dist/oidc.mjs +2 -61
  83. package/dist/server.cjs +4 -4
  84. package/dist/server.d.cts +3 -3
  85. package/dist/server.d.mts +3 -3
  86. package/dist/server.mjs +4 -3
  87. package/dist/tokenManager-CL3yE06D.d.cts +40 -0
  88. package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
  89. package/dist/tokenManager-Ci2Tgxp8.mjs +66 -0
  90. package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
  91. package/dist/tokenManager-CvEMgxOp.cjs +72 -0
  92. package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
  93. package/dist/tokenManager-RrwjL0y-.d.mts +40 -0
  94. package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
  95. package/dist/tokenManager.cjs +2 -64
  96. package/dist/tokenManager.d.cts +2 -37
  97. package/dist/tokenManager.d.mts +2 -37
  98. package/dist/tokenManager.mjs +2 -61
  99. package/package.json +9 -13
  100. package/src/__tests__/cacheTokenStorage.spec.ts +213 -0
  101. package/src/__tests__/client.spec.ts +465 -0
  102. package/src/__tests__/hono-jwt.spec.ts +232 -0
  103. package/src/__tests__/hono-oidc.spec.ts +605 -0
  104. package/src/__tests__/jwt.spec.ts +197 -0
  105. package/src/__tests__/lambda-jwt.spec.ts +278 -0
  106. package/src/__tests__/lambda-oidc.spec.ts +624 -0
  107. package/src/__tests__/oidc.spec.ts +405 -0
  108. package/src/__tests__/tokenManager.spec.ts +259 -0
  109. package/src/cacheTokenStorage.ts +43 -0
  110. package/src/client.ts +220 -0
  111. package/src/hono/jwt.ts +142 -0
  112. package/src/hono/oidc.ts +170 -0
  113. package/src/index.ts +3 -0
  114. package/src/jwt.ts +106 -0
  115. package/src/lambda/jwt.ts +210 -0
  116. package/src/lambda/oidc.ts +203 -0
  117. package/src/oidc.ts +156 -0
  118. package/src/server.ts +8 -0
  119. package/src/tokenManager.ts +106 -0
  120. package/tsconfig.json +10 -0
  121. package/tsdown.config.ts +3 -0
  122. package/dist/cacheTokenStorage-B3u8Sf-6.d.cts.map +0 -1
  123. package/dist/cacheTokenStorage-B3u8Sf-6.d.mts.map +0 -1
  124. package/dist/cacheTokenStorage.cjs.map +0 -1
  125. package/dist/cacheTokenStorage.mjs.map +0 -1
  126. package/dist/client.cjs.map +0 -1
  127. package/dist/client.mjs.map +0 -1
  128. package/dist/cookies.cjs +0 -25
  129. package/dist/cookies.cjs.map +0 -1
  130. package/dist/cookies.d.cts +0 -12
  131. package/dist/cookies.d.cts.map +0 -1
  132. package/dist/cookies.d.mts +0 -12
  133. package/dist/cookies.d.mts.map +0 -1
  134. package/dist/cookies.mjs +0 -24
  135. package/dist/cookies.mjs.map +0 -1
  136. package/dist/jwt-CoKrpeMB.d.cts.map +0 -1
  137. package/dist/jwt-CoKrpeMB.d.mts.map +0 -1
  138. package/dist/jwt.cjs.map +0 -1
  139. package/dist/jwt.mjs.map +0 -1
  140. package/dist/oidc.cjs.map +0 -1
  141. package/dist/oidc.d.cts.map +0 -1
  142. package/dist/oidc.d.mts.map +0 -1
  143. package/dist/oidc.mjs.map +0 -1
  144. package/dist/tokenManager.cjs.map +0 -1
  145. package/dist/tokenManager.d.cts.map +0 -1
  146. package/dist/tokenManager.d.mts.map +0 -1
  147. package/dist/tokenManager.mjs.map +0 -1
@@ -1,8 +1,9 @@
1
- import { o as TokenExtractionOptions } from "../jwt-CoKrpeMB.mjs";
2
- import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc.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
  //#region src/hono/oidc.d.ts
5
- export interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
6
+ interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
6
7
  config: OidcConfig;
7
8
  extraction?: TokenExtractionOptions;
8
9
  contextKey?: string;
@@ -31,7 +32,7 @@ export interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims,
31
32
  * });
32
33
  * ```
33
34
  */
34
- export declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
35
+ declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
35
36
  private readonly verifier;
36
37
  private readonly extraction;
37
38
  private readonly contextKey;
@@ -42,6 +43,7 @@ export declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUs
42
43
  handler(): MiddlewareHandler;
43
44
  optional(): MiddlewareHandler;
44
45
  }
46
+ //# sourceMappingURL=oidc.d.ts.map
45
47
  //#endregion
46
- export type { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
48
+ export { OidcClaims, OidcConfig, OidcMiddleware, OidcMiddlewareOptions, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
47
49
  //# sourceMappingURL=oidc.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.d.mts","names":[],"sources":["../../src/hono/oidc.ts"],"mappings":";;;;iBA8CiB,sBAChB,gBAAgB,aAAa,YAC7B,kBAAkB,eAAe;EAEjC,QAAQ;EACR,aAAa;EACb;EACA;EACA,WAAW,GAAG,SAAS,OAAO,UAAU,WAAW,QAAQ;EAC3D,mBAAmB,QAAQ,YAAY,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;qBAwBpD,eACZ,gBAAgB,aAAa,YAC7B,kBAAkB,eAAe;mBAEhB;mBACA;mBACA;mBACA;mBACA;mBAIA;EAKjB,YAAY,SAAS,sBAAsB,SAAS;EASpD,WAAW;EAqCX,YAAY"}
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"}
@@ -1,5 +1,5 @@
1
- import { readCookie } from "../cookies.mjs";
2
- import { OidcVerifier } from "../oidc.mjs";
1
+ import { OidcVerifier } from "../oidc-KA30gMlx.mjs";
2
+
3
3
  //#region src/hono/oidc.ts
4
4
  function extractToken(c, options = {}) {
5
5
  const { headerName = "authorization", cookieName, tokenPrefix = "Bearer " } = options;
@@ -9,8 +9,11 @@ function extractToken(c, options = {}) {
9
9
  return headerValue;
10
10
  }
11
11
  if (cookieName) {
12
- const cookie = readCookie(c.req.header("cookie"), cookieName);
13
- if (cookie) return cookie;
12
+ const cookieHeader = c.req.header("cookie");
13
+ if (cookieHeader) {
14
+ const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
+ if (match?.[1]) return match[1];
16
+ }
14
17
  }
15
18
  return null;
16
19
  }
@@ -54,7 +57,7 @@ var OidcMiddleware = class {
54
57
  return async (c, next) => {
55
58
  const token = extractToken(c, this.extraction);
56
59
  if (!token) {
57
- if (this.onError) return this.onError(c, /* @__PURE__ */ new Error("No token provided"));
60
+ if (this.onError) return this.onError(c, new Error("No token provided"));
58
61
  return c.json({ error: "Unauthorized" }, 401);
59
62
  }
60
63
  try {
@@ -94,7 +97,7 @@ var OidcMiddleware = class {
94
97
  };
95
98
  }
96
99
  };
97
- //#endregion
98
- export { OidcMiddleware };
99
100
 
101
+ //#endregion
102
+ export { OidcMiddleware, OidcVerifier };
100
103
  //# sourceMappingURL=oidc.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.mjs","names":[],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport { readCookie } from '../cookies';\nimport {\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\tOidcVerifier,\n\ttype TokenExtractionOptions,\n} from '../oidc';\n\nexport type {\n\tOidcVerifier,\n\tOidcClaims,\n\tOidcConfig,\n\tOidcUserInfo,\n\tTokenExtractionOptions,\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 cookie = readCookie(c.req.header('cookie'), cookieName);\n\t\tif (cookie) {\n\t\t\treturn cookie;\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":";;;AAkBA,SAAS,aACR,GACA,UAAkC,CAAC,GACnB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,cACX;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,UAAU;CAC3C,IAAI,aAAa;EAChB,IAAI,eAAe,YAAY,WAAW,WAAW,GACpD,OAAO,YAAY,MAAM,YAAY,MAAM;EAE5C,OAAO;CACR;CAEA,IAAI,YAAY;EACf,MAAM,SAAS,WAAW,EAAE,IAAI,OAAO,QAAQ,GAAG,UAAU;EAC5D,IAAI,QACH,OAAO;CAET;CAEA,OAAO;AACR;;;;;;;;;;;;;;;;;;;;;;AAmCA,IAAa,iBAAb,MAGE;CACD;CACA;CACA;CACA;CACA;CAIA;CAKA,YAAY,SAAoD;EAC/D,KAAK,WAAW,IAAI,aAAa,QAAQ,MAAM;EAC/C,KAAK,aAAa,QAAQ,cAAc,CAAC;EACzC,KAAK,aAAa,QAAQ,cAAc;EACxC,KAAK,gBAAgB,QAAQ,iBAAiB;EAC9C,KAAK,UAAU,QAAQ;EACvB,KAAK,kBAAkB,QAAQ;CAChC;CAEA,UAA6B;EAC5B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,CAAC,OAAO;IACX,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,mBAAG,IAAI,MAAM,mBAAmB,CAAC;IAEtD,OAAO,EAAE,KAAK,EAAE,OAAO,eAAe,GAAG,GAAG;GAC7C;GAEA,IAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,KAAK;IAEhD,IAAI;IACJ,IAAI,KAAK,eAAe;KACvB,WAAY,MAAM,KAAK,SAAS,cAAc,KAAK,KAAM,KAAA;KACzD,EAAE,IAAI,gBAAgB,QAAQ;IAC/B;IAEA,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,QAAQ,IACtC;IAEH,EAAE,IAAI,KAAK,YAAY,MAAM;IAC7B,EAAE,IAAI,aAAa,KAAK;IAExB,MAAM,KAAK;GACZ,SAAS,OAAO;IACf,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,GAAG,KAAc;IAEtC,OAAO,EAAE,KAAK,EAAE,OAAO,gBAAgB,GAAG,GAAG;GAC9C;EACD;CACD;CAEA,WAA8B;EAC7B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,OAAO;IACV,MAAM,UAAU,MAAM,KAAK,SAAS,aAAa,KAAK;IACtD,IAAI,SAAS;KACZ,IAAI;KACJ,IAAI,KAAK,eAAe;MACvB,WAAY,MAAM,KAAK,SAAS,cAAc,KAAK,KAAM,KAAA;MACzD,EAAE,IAAI,gBAAgB,QAAQ;KAC/B;KAEA,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,QAAQ,IACtC;KAEH,EAAE,IAAI,KAAK,YAAY,MAAM;KAC7B,EAAE,IAAI,aAAa,KAAK;IACzB;GACD;GAEA,MAAM,KAAK;EACZ;CACD;AACD"}
1
+ {"version":3,"file":"oidc.mjs","names":["c: Context","options: TokenExtractionOptions","options: OidcMiddlewareOptions<TClaims, TUserInfo>","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,IAAI,aAAa,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,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;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,OAAOJ,GAAYG,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"}
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cacheTokenStorage = require("./cacheTokenStorage.cjs");
3
- const require_client = require("./client.cjs");
4
- const require_tokenManager = require("./tokenManager.cjs");
1
+ const require_cacheTokenStorage = require('./cacheTokenStorage-CEpMniTi.cjs');
2
+ const require_client = require('./client-BPl_mMvb.cjs');
3
+ const require_tokenManager = require('./tokenManager-CvEMgxOp.cjs');
4
+
5
5
  exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
6
6
  exports.LocalStorageTokenStorage = require_client.LocalStorageTokenStorage;
7
7
  exports.MemoryTokenStorage = require_client.MemoryTokenStorage;
8
8
  exports.TokenClient = require_client.TokenClient;
9
- exports.TokenManager = require_tokenManager.TokenManager;
9
+ exports.TokenManager = require_tokenManager.TokenManager;
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- import { a as TokenClientOptions, i as TokenClient, n as LocalStorageTokenStorage, o as TokenStorage, r as MemoryTokenStorage, t as CacheTokenStorage } from "./cacheTokenStorage-B3u8Sf-6.cjs";
2
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager.cjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-B7sOoysu.cjs";
2
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-CL3yE06D.cjs";
3
3
  export { CacheTokenStorage, DecodedToken, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenManager, TokenManagerOptions, TokenPair, TokenPayload, TokenStorage };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { a as TokenClientOptions, i as TokenClient, n as LocalStorageTokenStorage, o as TokenStorage, r as MemoryTokenStorage, t as CacheTokenStorage } from "./cacheTokenStorage-B3u8Sf-6.mjs";
2
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager.mjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-_tq4Kmhc.mjs";
2
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-RrwjL0y-.mjs";
3
3
  export { CacheTokenStorage, DecodedToken, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenManager, TokenManagerOptions, TokenPair, TokenPayload, TokenStorage };
package/dist/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage.mjs";
2
- import { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient } from "./client.mjs";
3
- import { TokenManager } from "./tokenManager.mjs";
4
- export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenManager };
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-16NE8Cd9.mjs";
2
+ import { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient } from "./client-eidYNJSH.mjs";
3
+ import { TokenManager } from "./tokenManager-Ci2Tgxp8.mjs";
4
+
5
+ export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenManager };
@@ -56,6 +56,7 @@ declare class JwtVerifier<TClaims extends JwtClaims = JwtClaims> {
56
56
  * WARNING: This does NOT verify the token signature!
57
57
  */
58
58
  declare function decodeJwt<TClaims extends JwtClaims = JwtClaims>(token: string): TClaims;
59
+ //# sourceMappingURL=jwt.d.ts.map
59
60
  //#endregion
60
- export { JwtVerifier as a, isJwksConfig as c, JwtSecretConfig as i, JwtConfig as n, TokenExtractionOptions as o, JwtJwksConfig as r, decodeJwt as s, JwtClaims as t };
61
- //# sourceMappingURL=jwt-CoKrpeMB.d.mts.map
61
+ export { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig };
62
+ //# sourceMappingURL=jwt-3eIuY2dg.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-3eIuY2dg.d.cts","names":[],"sources":["../src/jwt.ts"],"sourcesContent":[],"mappings":";;AAKA;AAaA;AAUiB,UAvBA,SAAA,CAuBa;EAOlB,GAAA,CAAA,EAAA,MAAS;EAAA,GAAA,CAAA,EAAA,MAAA;EAAA,GAAG,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAe,GAAG,CAAA,EAAA,MAAA;EAAa,GAAA,CAAA,EAAA,MAAA;EAKtC,GAAA,CAAA,EAAA,MAAA;EAMD,GAAA,CAAA,EAAA,MAAA;;;;AAAwD;AAO3D,UAnCI,eAAA,CAmCO;EAAA,MAAA,EAAA,MAAA;EAAA,MAAiB,CAAA,EAAA,MAAA;EAAS,QAAG,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAS,UAIxB,CAAA,EAAA,MAAA,EAAA;;;;;AA2BK,UAxD1B,aAAA,CAwD0B;EAiB3B,OAAA,EAAA,MAAS;EAAA,MAAA,CAAA,EAAA,MAAA;EAAA,QAAiB,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAS,UAAG,CAAA,EAAA,MAAA,EAAA;;AAE5C,KApEE,SAAA,GAAY,eAoEd,GApEgC,aAoEhC;;;;UA/DO,sBAAA;;;;;iBAMD,YAAA,SAAqB,sBAAsB;;;;cAO9C,4BAA4B,YAAY;;;;sBAIf;yBASR,QAAQ;+BAkBF,QAAQ;;;;;;;iBAiB5B,0BAA0B,YAAY,2BAEnD"}
@@ -0,0 +1,70 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const jose = require_chunk.__toESM(require("jose"));
3
+
4
+ //#region src/jwt.ts
5
+ function isJwksConfig(config) {
6
+ return "jwksUri" in config;
7
+ }
8
+ /**
9
+ * JWT Verifier with JWKS caching
10
+ */
11
+ var JwtVerifier = class {
12
+ jwks = null;
13
+ verifyOptions;
14
+ constructor(config) {
15
+ this.config = config;
16
+ this.verifyOptions = {
17
+ issuer: config.issuer,
18
+ audience: config.audience,
19
+ algorithms: config.algorithms ?? (isJwksConfig(config) ? void 0 : ["HS256"])
20
+ };
21
+ }
22
+ async verify(token) {
23
+ if (isJwksConfig(this.config)) {
24
+ if (!this.jwks) this.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
25
+ const { payload: payload$1 } = await jose.jwtVerify(token, this.jwks, this.verifyOptions);
26
+ return payload$1;
27
+ }
28
+ const secret = new TextEncoder().encode(this.config.secret);
29
+ const { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);
30
+ return payload;
31
+ }
32
+ async verifyOrNull(token) {
33
+ try {
34
+ return await this.verify(token);
35
+ } catch {
36
+ return null;
37
+ }
38
+ }
39
+ clearCache() {
40
+ this.jwks = null;
41
+ }
42
+ };
43
+ /**
44
+ * Decode a JWT without verification
45
+ * WARNING: This does NOT verify the token signature!
46
+ */
47
+ function decodeJwt(token) {
48
+ return jose.decodeJwt(token);
49
+ }
50
+
51
+ //#endregion
52
+ Object.defineProperty(exports, 'JwtVerifier', {
53
+ enumerable: true,
54
+ get: function () {
55
+ return JwtVerifier;
56
+ }
57
+ });
58
+ Object.defineProperty(exports, 'decodeJwt', {
59
+ enumerable: true,
60
+ get: function () {
61
+ return decodeJwt;
62
+ }
63
+ });
64
+ Object.defineProperty(exports, 'isJwksConfig', {
65
+ enumerable: true,
66
+ get: function () {
67
+ return isJwksConfig;
68
+ }
69
+ });
70
+ //# sourceMappingURL=jwt-Bo_eACEi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-Bo_eACEi.cjs","names":["config: JwtConfig","token: string","payload"],"sources":["../src/jwt.ts"],"sourcesContent":["import * as jose from 'jose';\n\n/**\n * Standard JWT claims\n */\nexport interface JwtClaims {\n\tsub?: string;\n\tiss?: string;\n\taud?: string | string[];\n\texp?: number;\n\tiat?: number;\n\tnbf?: number;\n\tjti?: string;\n}\n\n/**\n * Configuration for JWT verification with a symmetric secret\n */\nexport interface JwtSecretConfig {\n\tsecret: string;\n\tissuer?: string;\n\taudience?: string | string[];\n\talgorithms?: string[];\n}\n\n/**\n * Configuration for JWT verification with JWKS\n */\nexport interface JwtJwksConfig {\n\tjwksUri: string;\n\tissuer?: string;\n\taudience?: string | string[];\n\talgorithms?: string[];\n}\n\nexport type JwtConfig = JwtSecretConfig | JwtJwksConfig;\n\n/**\n * Options for token extraction from requests\n */\nexport interface TokenExtractionOptions {\n\theaderName?: string;\n\tcookieName?: string;\n\ttokenPrefix?: string;\n}\n\nexport function isJwksConfig(config: JwtConfig): config is JwtJwksConfig {\n\treturn 'jwksUri' in config;\n}\n\n/**\n * JWT Verifier with JWKS caching\n */\nexport class JwtVerifier<TClaims extends JwtClaims = JwtClaims> {\n\tprivate jwks: jose.JWTVerifyGetKey | null = null;\n\tprivate readonly verifyOptions: jose.JWTVerifyOptions;\n\n\tconstructor(private readonly config: JwtConfig) {\n\t\tthis.verifyOptions = {\n\t\t\tissuer: config.issuer,\n\t\t\taudience: config.audience,\n\t\t\talgorithms:\n\t\t\t\tconfig.algorithms ?? (isJwksConfig(config) ? undefined : ['HS256']),\n\t\t};\n\t}\n\n\tasync verify(token: string): Promise<TClaims> {\n\t\tif (isJwksConfig(this.config)) {\n\t\t\tif (!this.jwks) {\n\t\t\t\tthis.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));\n\t\t\t}\n\t\t\tconst { payload } = await jose.jwtVerify(\n\t\t\t\ttoken,\n\t\t\t\tthis.jwks,\n\t\t\t\tthis.verifyOptions,\n\t\t\t);\n\t\t\treturn payload as unknown as TClaims;\n\t\t}\n\n\t\tconst secret = new TextEncoder().encode(this.config.secret);\n\t\tconst { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);\n\t\treturn payload as unknown as TClaims;\n\t}\n\n\tasync verifyOrNull(token: string): Promise<TClaims | null> {\n\t\ttry {\n\t\t\treturn await this.verify(token);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclearCache(): void {\n\t\tthis.jwks = null;\n\t}\n}\n\n/**\n * Decode a JWT without verification\n * WARNING: This does NOT verify the token signature!\n */\nexport function decodeJwt<TClaims extends JwtClaims = JwtClaims>(\n\ttoken: string,\n): TClaims {\n\treturn jose.decodeJwt(token) as unknown as TClaims;\n}\n"],"mappings":";;;;AA8CA,SAAgB,aAAaA,QAA4C;AACxE,QAAO,aAAa;AACpB;;;;AAKD,IAAa,cAAb,MAAgE;CAC/D,AAAQ,OAAoC;CAC5C,AAAiB;CAEjB,YAA6BA,QAAmB;EAAnB;AAC5B,OAAK,gBAAgB;GACpB,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,YACC,OAAO,eAAe,aAAa,OAAO,YAAe,CAAC,OAAQ;EACnE;CACD;CAED,MAAM,OAAOC,OAAiC;AAC7C,MAAI,aAAa,KAAK,OAAO,EAAE;AAC9B,QAAK,KAAK,KACT,MAAK,OAAO,KAAK,mBAAmB,IAAI,IAAI,KAAK,OAAO,SAAS;GAElE,MAAM,EAAE,oBAAS,GAAG,MAAM,KAAK,UAC9B,OACA,KAAK,MACL,KAAK,cACL;AACD,UAAOC;EACP;EAED,MAAM,SAAS,IAAI,cAAc,OAAO,KAAK,OAAO,OAAO;EAC3D,MAAM,EAAE,SAAS,GAAG,MAAM,KAAK,UAAU,OAAO,QAAQ,KAAK,cAAc;AAC3E,SAAO;CACP;CAED,MAAM,aAAaD,OAAwC;AAC1D,MAAI;AACH,UAAO,MAAM,KAAK,OAAO,MAAM;EAC/B,QAAO;AACP,UAAO;EACP;CACD;CAED,aAAmB;AAClB,OAAK,OAAO;CACZ;AACD;;;;;AAMD,SAAgB,UACfA,OACU;AACV,QAAO,KAAK,UAAU,MAAM;AAC5B"}
@@ -56,6 +56,7 @@ declare class JwtVerifier<TClaims extends JwtClaims = JwtClaims> {
56
56
  * WARNING: This does NOT verify the token signature!
57
57
  */
58
58
  declare function decodeJwt<TClaims extends JwtClaims = JwtClaims>(token: string): TClaims;
59
+ //# sourceMappingURL=jwt.d.ts.map
59
60
  //#endregion
60
- export { JwtVerifier as a, isJwksConfig as c, JwtSecretConfig as i, JwtConfig as n, TokenExtractionOptions as o, JwtJwksConfig as r, decodeJwt as s, JwtClaims as t };
61
- //# sourceMappingURL=jwt-CoKrpeMB.d.cts.map
61
+ export { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig };
62
+ //# sourceMappingURL=jwt-BqLlRkw-.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-BqLlRkw-.d.mts","names":[],"sources":["../src/jwt.ts"],"sourcesContent":[],"mappings":";;AAKA;AAaA;AAUiB,UAvBA,SAAA,CAuBa;EAOlB,GAAA,CAAA,EAAA,MAAS;EAAA,GAAA,CAAA,EAAA,MAAA;EAAA,GAAG,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAe,GAAG,CAAA,EAAA,MAAA;EAAa,GAAA,CAAA,EAAA,MAAA;EAKtC,GAAA,CAAA,EAAA,MAAA;EAMD,GAAA,CAAA,EAAA,MAAA;;;;AAAwD;AAO3D,UAnCI,eAAA,CAmCO;EAAA,MAAA,EAAA,MAAA;EAAA,MAAiB,CAAA,EAAA,MAAA;EAAS,QAAG,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAS,UAIxB,CAAA,EAAA,MAAA,EAAA;;;;;AA2BK,UAxD1B,aAAA,CAwD0B;EAiB3B,OAAA,EAAA,MAAS;EAAA,MAAA,CAAA,EAAA,MAAA;EAAA,QAAiB,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA;EAAS,UAAG,CAAA,EAAA,MAAA,EAAA;;AAE5C,KApEE,SAAA,GAAY,eAoEd,GApEgC,aAoEhC;;;;UA/DO,sBAAA;;;;;iBAMD,YAAA,SAAqB,sBAAsB;;;;cAO9C,4BAA4B,YAAY;;;;sBAIf;yBASR,QAAQ;+BAkBF,QAAQ;;;;;;;iBAiB5B,0BAA0B,YAAY,2BAEnD"}
@@ -0,0 +1,52 @@
1
+ import * as jose from "jose";
2
+
3
+ //#region src/jwt.ts
4
+ function isJwksConfig(config) {
5
+ return "jwksUri" in config;
6
+ }
7
+ /**
8
+ * JWT Verifier with JWKS caching
9
+ */
10
+ var JwtVerifier = class {
11
+ jwks = null;
12
+ verifyOptions;
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.verifyOptions = {
16
+ issuer: config.issuer,
17
+ audience: config.audience,
18
+ algorithms: config.algorithms ?? (isJwksConfig(config) ? void 0 : ["HS256"])
19
+ };
20
+ }
21
+ async verify(token) {
22
+ if (isJwksConfig(this.config)) {
23
+ if (!this.jwks) this.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
24
+ const { payload: payload$1 } = await jose.jwtVerify(token, this.jwks, this.verifyOptions);
25
+ return payload$1;
26
+ }
27
+ const secret = new TextEncoder().encode(this.config.secret);
28
+ const { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);
29
+ return payload;
30
+ }
31
+ async verifyOrNull(token) {
32
+ try {
33
+ return await this.verify(token);
34
+ } catch {
35
+ return null;
36
+ }
37
+ }
38
+ clearCache() {
39
+ this.jwks = null;
40
+ }
41
+ };
42
+ /**
43
+ * Decode a JWT without verification
44
+ * WARNING: This does NOT verify the token signature!
45
+ */
46
+ function decodeJwt(token) {
47
+ return jose.decodeJwt(token);
48
+ }
49
+
50
+ //#endregion
51
+ export { JwtVerifier, decodeJwt, isJwksConfig };
52
+ //# sourceMappingURL=jwt-D88cPJyT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-D88cPJyT.mjs","names":["config: JwtConfig","token: string","payload"],"sources":["../src/jwt.ts"],"sourcesContent":["import * as jose from 'jose';\n\n/**\n * Standard JWT claims\n */\nexport interface JwtClaims {\n\tsub?: string;\n\tiss?: string;\n\taud?: string | string[];\n\texp?: number;\n\tiat?: number;\n\tnbf?: number;\n\tjti?: string;\n}\n\n/**\n * Configuration for JWT verification with a symmetric secret\n */\nexport interface JwtSecretConfig {\n\tsecret: string;\n\tissuer?: string;\n\taudience?: string | string[];\n\talgorithms?: string[];\n}\n\n/**\n * Configuration for JWT verification with JWKS\n */\nexport interface JwtJwksConfig {\n\tjwksUri: string;\n\tissuer?: string;\n\taudience?: string | string[];\n\talgorithms?: string[];\n}\n\nexport type JwtConfig = JwtSecretConfig | JwtJwksConfig;\n\n/**\n * Options for token extraction from requests\n */\nexport interface TokenExtractionOptions {\n\theaderName?: string;\n\tcookieName?: string;\n\ttokenPrefix?: string;\n}\n\nexport function isJwksConfig(config: JwtConfig): config is JwtJwksConfig {\n\treturn 'jwksUri' in config;\n}\n\n/**\n * JWT Verifier with JWKS caching\n */\nexport class JwtVerifier<TClaims extends JwtClaims = JwtClaims> {\n\tprivate jwks: jose.JWTVerifyGetKey | null = null;\n\tprivate readonly verifyOptions: jose.JWTVerifyOptions;\n\n\tconstructor(private readonly config: JwtConfig) {\n\t\tthis.verifyOptions = {\n\t\t\tissuer: config.issuer,\n\t\t\taudience: config.audience,\n\t\t\talgorithms:\n\t\t\t\tconfig.algorithms ?? (isJwksConfig(config) ? undefined : ['HS256']),\n\t\t};\n\t}\n\n\tasync verify(token: string): Promise<TClaims> {\n\t\tif (isJwksConfig(this.config)) {\n\t\t\tif (!this.jwks) {\n\t\t\t\tthis.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));\n\t\t\t}\n\t\t\tconst { payload } = await jose.jwtVerify(\n\t\t\t\ttoken,\n\t\t\t\tthis.jwks,\n\t\t\t\tthis.verifyOptions,\n\t\t\t);\n\t\t\treturn payload as unknown as TClaims;\n\t\t}\n\n\t\tconst secret = new TextEncoder().encode(this.config.secret);\n\t\tconst { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);\n\t\treturn payload as unknown as TClaims;\n\t}\n\n\tasync verifyOrNull(token: string): Promise<TClaims | null> {\n\t\ttry {\n\t\t\treturn await this.verify(token);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclearCache(): void {\n\t\tthis.jwks = null;\n\t}\n}\n\n/**\n * Decode a JWT without verification\n * WARNING: This does NOT verify the token signature!\n */\nexport function decodeJwt<TClaims extends JwtClaims = JwtClaims>(\n\ttoken: string,\n): TClaims {\n\treturn jose.decodeJwt(token) as unknown as TClaims;\n}\n"],"mappings":";;;AA8CA,SAAgB,aAAaA,QAA4C;AACxE,QAAO,aAAa;AACpB;;;;AAKD,IAAa,cAAb,MAAgE;CAC/D,AAAQ,OAAoC;CAC5C,AAAiB;CAEjB,YAA6BA,QAAmB;EAAnB;AAC5B,OAAK,gBAAgB;GACpB,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,YACC,OAAO,eAAe,aAAa,OAAO,YAAe,CAAC,OAAQ;EACnE;CACD;CAED,MAAM,OAAOC,OAAiC;AAC7C,MAAI,aAAa,KAAK,OAAO,EAAE;AAC9B,QAAK,KAAK,KACT,MAAK,OAAO,KAAK,mBAAmB,IAAI,IAAI,KAAK,OAAO,SAAS;GAElE,MAAM,EAAE,oBAAS,GAAG,MAAM,KAAK,UAC9B,OACA,KAAK,MACL,KAAK,cACL;AACD,UAAOC;EACP;EAED,MAAM,SAAS,IAAI,cAAc,OAAO,KAAK,OAAO,OAAO;EAC3D,MAAM,EAAE,SAAS,GAAG,MAAM,KAAK,UAAU,OAAO,QAAQ,KAAK,cAAc;AAC3E,SAAO;CACP;CAED,MAAM,aAAaD,OAAwC;AAC1D,MAAI;AACH,UAAO,MAAM,KAAK,OAAO,MAAM;EAC/B,QAAO;AACP,UAAO;EACP;CACD;CAED,aAAmB;AAClB,OAAK,OAAO;CACZ;AACD;;;;;AAMD,SAAgB,UACfA,OACU;AACV,QAAO,KAAK,UAAU,MAAM;AAC5B"}
package/dist/jwt.cjs CHANGED
@@ -1,57 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
3
- let jose = require("jose");
4
- jose = require_rolldown_runtime.__toESM(jose, 1);
5
- //#region src/jwt.ts
6
- function isJwksConfig(config) {
7
- return "jwksUri" in config;
8
- }
9
- /**
10
- * JWT Verifier with JWKS caching
11
- */
12
- var JwtVerifier = class {
13
- config;
14
- jwks = null;
15
- verifyOptions;
16
- constructor(config) {
17
- this.config = config;
18
- this.verifyOptions = {
19
- issuer: config.issuer,
20
- audience: config.audience,
21
- algorithms: config.algorithms ?? (isJwksConfig(config) ? void 0 : ["HS256"])
22
- };
23
- }
24
- async verify(token) {
25
- if (isJwksConfig(this.config)) {
26
- if (!this.jwks) this.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
27
- const { payload } = await jose.jwtVerify(token, this.jwks, this.verifyOptions);
28
- return payload;
29
- }
30
- const secret = new TextEncoder().encode(this.config.secret);
31
- const { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);
32
- return payload;
33
- }
34
- async verifyOrNull(token) {
35
- try {
36
- return await this.verify(token);
37
- } catch {
38
- return null;
39
- }
40
- }
41
- clearCache() {
42
- this.jwks = null;
43
- }
44
- };
45
- /**
46
- * Decode a JWT without verification
47
- * WARNING: This does NOT verify the token signature!
48
- */
49
- function decodeJwt(token) {
50
- return jose.decodeJwt(token);
51
- }
52
- //#endregion
53
- exports.JwtVerifier = JwtVerifier;
54
- exports.decodeJwt = decodeJwt;
55
- exports.isJwksConfig = isJwksConfig;
1
+ const require_jwt = require('./jwt-Bo_eACEi.cjs');
56
2
 
57
- //# sourceMappingURL=jwt.cjs.map
3
+ exports.JwtVerifier = require_jwt.JwtVerifier;
4
+ exports.decodeJwt = require_jwt.decodeJwt;
5
+ exports.isJwksConfig = require_jwt.isJwksConfig;
package/dist/jwt.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as JwtVerifier, c as isJwksConfig, i as JwtSecretConfig, n as JwtConfig, o as TokenExtractionOptions, r as JwtJwksConfig, s as decodeJwt, t as JwtClaims } from "./jwt-CoKrpeMB.cjs";
1
+ import { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig } from "./jwt-3eIuY2dg.cjs";
2
2
  export { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig };
package/dist/jwt.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as JwtVerifier, c as isJwksConfig, i as JwtSecretConfig, n as JwtConfig, o as TokenExtractionOptions, r as JwtJwksConfig, s as decodeJwt, t as JwtClaims } from "./jwt-CoKrpeMB.mjs";
1
+ import { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig } from "./jwt-BqLlRkw-.mjs";
2
2
  export { JwtClaims, JwtConfig, JwtJwksConfig, JwtSecretConfig, JwtVerifier, TokenExtractionOptions, decodeJwt, isJwksConfig };
package/dist/jwt.mjs CHANGED
@@ -1,52 +1,3 @@
1
- import * as jose from "jose";
2
- //#region src/jwt.ts
3
- function isJwksConfig(config) {
4
- return "jwksUri" in config;
5
- }
6
- /**
7
- * JWT Verifier with JWKS caching
8
- */
9
- var JwtVerifier = class {
10
- config;
11
- jwks = null;
12
- verifyOptions;
13
- constructor(config) {
14
- this.config = config;
15
- this.verifyOptions = {
16
- issuer: config.issuer,
17
- audience: config.audience,
18
- algorithms: config.algorithms ?? (isJwksConfig(config) ? void 0 : ["HS256"])
19
- };
20
- }
21
- async verify(token) {
22
- if (isJwksConfig(this.config)) {
23
- if (!this.jwks) this.jwks = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
24
- const { payload } = await jose.jwtVerify(token, this.jwks, this.verifyOptions);
25
- return payload;
26
- }
27
- const secret = new TextEncoder().encode(this.config.secret);
28
- const { payload } = await jose.jwtVerify(token, secret, this.verifyOptions);
29
- return payload;
30
- }
31
- async verifyOrNull(token) {
32
- try {
33
- return await this.verify(token);
34
- } catch {
35
- return null;
36
- }
37
- }
38
- clearCache() {
39
- this.jwks = null;
40
- }
41
- };
42
- /**
43
- * Decode a JWT without verification
44
- * WARNING: This does NOT verify the token signature!
45
- */
46
- function decodeJwt(token) {
47
- return jose.decodeJwt(token);
48
- }
49
- //#endregion
50
- export { JwtVerifier, decodeJwt, isJwksConfig };
1
+ import { JwtVerifier, decodeJwt, isJwksConfig } from "./jwt-D88cPJyT.mjs";
51
2
 
52
- //# sourceMappingURL=jwt.mjs.map
3
+ export { JwtVerifier, decodeJwt, isJwksConfig };
@@ -1,18 +1,18 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cookies = require("../cookies.cjs");
3
- const require_jwt = require("../jwt.cjs");
1
+ const require_jwt = require('../jwt-Bo_eACEi.cjs');
2
+
4
3
  //#region src/lambda/jwt.ts
5
4
  function generatePolicy(principalId, effect, resource, context) {
5
+ const policyDocument = {
6
+ Version: "2012-10-17",
7
+ Statement: [{
8
+ Action: "execute-api:Invoke",
9
+ Effect: effect,
10
+ Resource: resource
11
+ }]
12
+ };
6
13
  return {
7
14
  principalId,
8
- policyDocument: {
9
- Version: "2012-10-17",
10
- Statement: [{
11
- Action: "execute-api:Invoke",
12
- Effect: effect,
13
- Resource: resource
14
- }]
15
- },
15
+ policyDocument,
16
16
  context
17
17
  };
18
18
  }
@@ -66,7 +66,8 @@ var JwtAuthorizer = class {
66
66
  try {
67
67
  const claims = await this.verifier.verify(token);
68
68
  if (this.authorize) {
69
- if (!await this.authorize(claims)) return generatePolicy("unauthorized", "Deny", resource);
69
+ const isAuthorized = await this.authorize(claims);
70
+ if (!isAuthorized) return generatePolicy("unauthorized", "Deny", resource);
70
71
  }
71
72
  const principalId = this.getPrincipalId(claims);
72
73
  const context = this.getContext?.(claims);
@@ -92,8 +93,9 @@ var JwtAuthorizer = class {
92
93
  }
93
94
  }
94
95
  if (cookieName) {
95
- const cookie = require_cookies.readCookie(headers.cookie ?? headers.Cookie, cookieName);
96
- if (cookie) return cookie;
96
+ const cookieHeader = headers.cookie ?? headers.Cookie ?? "";
97
+ const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
98
+ if (match?.[1]) return match[1];
97
99
  }
98
100
  return null;
99
101
  };
@@ -105,7 +107,8 @@ var JwtAuthorizer = class {
105
107
  try {
106
108
  const claims = await this.verifier.verify(token);
107
109
  if (this.authorize) {
108
- if (!await this.authorize(claims)) return generatePolicy("unauthorized", "Deny", resource);
110
+ const isAuthorized = await this.authorize(claims);
111
+ if (!isAuthorized) return generatePolicy("unauthorized", "Deny", resource);
109
112
  }
110
113
  const principalId = this.getPrincipalId(claims);
111
114
  const context = this.getContext?.(claims);
@@ -116,7 +119,8 @@ var JwtAuthorizer = class {
116
119
  };
117
120
  }
118
121
  };
122
+
119
123
  //#endregion
120
124
  exports.JwtAuthorizer = JwtAuthorizer;
121
-
125
+ exports.JwtVerifier = require_jwt.JwtVerifier;
122
126
  //# sourceMappingURL=jwt.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.cjs","names":["JwtVerifier","readCookie"],"sources":["../../src/lambda/jwt.ts"],"sourcesContent":["import type {\n\tAPIGatewayAuthorizerResult,\n\tAPIGatewayRequestAuthorizerEvent,\n\tAPIGatewayTokenAuthorizerEvent,\n\tContext as LambdaContext,\n\tPolicyDocument,\n} from 'aws-lambda';\nimport { readCookie } from '../cookies';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport type { JwtVerifier, JwtClaims, JwtConfig, TokenExtractionOptions };\n\nfunction generatePolicy(\n\tprincipalId: string,\n\teffect: 'Allow' | 'Deny',\n\tresource: string,\n\tcontext?: Record<string, string | number | boolean>,\n): APIGatewayAuthorizerResult {\n\tconst policyDocument: PolicyDocument = {\n\t\tVersion: '2012-10-17',\n\t\tStatement: [\n\t\t\t{\n\t\t\t\tAction: 'execute-api:Invoke',\n\t\t\t\tEffect: effect,\n\t\t\t\tResource: resource,\n\t\t\t},\n\t\t],\n\t};\n\n\treturn {\n\t\tprincipalId,\n\t\tpolicyDocument,\n\t\tcontext,\n\t};\n}\n\nfunction getWildcardResource(methodArn: string): string {\n\tconst parts = methodArn.split('/');\n\treturn `${parts[0]}/${parts[1]}/*`;\n}\n\nexport interface JwtAuthorizerOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\twildcardResource?: boolean;\n\tgetPrincipalId?: (claims: TClaims) => string;\n\tgetContext?: (\n\t\tclaims: TClaims,\n\t) => Record<string, string | number | boolean> | undefined;\n\tauthorize?: (claims: TClaims) => boolean | Promise<boolean>;\n}\n\n/**\n * JWT Lambda Authorizer\n *\n * @example\n * ```typescript\n * const authorizer = new JwtAuthorizer({\n * config: {\n * jwksUri: 'https://auth.example.com/.well-known/jwks.json',\n * issuer: 'https://auth.example.com',\n * },\n * getContext: (claims) => ({ userId: claims.sub! }),\n * });\n *\n * // TOKEN authorizer\n * export const tokenHandler = authorizer.tokenHandler();\n *\n * // REQUEST authorizer\n * export const requestHandler = authorizer.requestHandler();\n * ```\n */\nexport class JwtAuthorizer<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly wildcardResource: boolean;\n\tprivate readonly getPrincipalId: (claims: TClaims) => string;\n\tprivate readonly getContext?: (\n\t\tclaims: TClaims,\n\t) => Record<string, string | number | boolean> | undefined;\n\tprivate readonly authorize?: (claims: TClaims) => boolean | Promise<boolean>;\n\n\tconstructor(options: JwtAuthorizerOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.wildcardResource = options.wildcardResource ?? true;\n\t\tthis.getPrincipalId = options.getPrincipalId ?? ((c) => c.sub ?? 'unknown');\n\t\tthis.getContext = options.getContext;\n\t\tthis.authorize = options.authorize;\n\t}\n\n\t/**\n\t * Returns a TOKEN authorizer handler\n\t */\n\ttokenHandler() {\n\t\treturn async (\n\t\t\tevent: APIGatewayTokenAuthorizerEvent,\n\t\t\t_context: LambdaContext,\n\t\t): Promise<APIGatewayAuthorizerResult> => {\n\t\t\tconst { authorizationToken, methodArn } = event;\n\t\t\tconst resource = this.wildcardResource\n\t\t\t\t? getWildcardResource(methodArn)\n\t\t\t\t: methodArn;\n\n\t\t\tconst token = authorizationToken.startsWith('Bearer ')\n\t\t\t\t? authorizationToken.slice(7)\n\t\t\t\t: authorizationToken;\n\n\t\t\ttry {\n\t\t\t\tconst claims = await this.verifier.verify(token);\n\n\t\t\t\tif (this.authorize) {\n\t\t\t\t\tconst isAuthorized = await this.authorize(claims);\n\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst principalId = this.getPrincipalId(claims);\n\t\t\t\tconst context = this.getContext?.(claims);\n\n\t\t\t\treturn generatePolicy(principalId, 'Allow', resource, context);\n\t\t\t} catch {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns a REQUEST authorizer handler\n\t */\n\trequestHandler() {\n\t\tconst {\n\t\t\theaderName = 'authorization',\n\t\t\tcookieName,\n\t\t\ttokenPrefix = 'Bearer ',\n\t\t} = this.extraction;\n\n\t\tconst extractToken = (\n\t\t\tevent: APIGatewayRequestAuthorizerEvent,\n\t\t): string | null => {\n\t\t\tconst headers = event.headers ?? {};\n\t\t\tconst headerKey = Object.keys(headers).find(\n\t\t\t\t(k) => k.toLowerCase() === headerName.toLowerCase(),\n\t\t\t);\n\t\t\tif (headerKey) {\n\t\t\t\tconst headerValue = headers[headerKey];\n\t\t\t\tif (headerValue) {\n\t\t\t\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\t\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t\t\t\t}\n\t\t\t\t\treturn headerValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cookieName) {\n\t\t\t\tconst cookie = readCookie(headers.cookie ?? headers.Cookie, cookieName);\n\t\t\t\tif (cookie) {\n\t\t\t\t\treturn cookie;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\treturn async (\n\t\t\tevent: APIGatewayRequestAuthorizerEvent,\n\t\t\t_context: LambdaContext,\n\t\t): Promise<APIGatewayAuthorizerResult> => {\n\t\t\tconst methodArn = event.methodArn;\n\t\t\tconst resource = this.wildcardResource\n\t\t\t\t? getWildcardResource(methodArn)\n\t\t\t\t: methodArn;\n\n\t\t\tconst token = extractToken(event);\n\n\t\t\tif (!token) {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst claims = await this.verifier.verify(token);\n\n\t\t\t\tif (this.authorize) {\n\t\t\t\t\tconst isAuthorized = await this.authorize(claims);\n\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst principalId = this.getPrincipalId(claims);\n\t\t\t\tconst context = this.getContext?.(claims);\n\n\t\t\t\treturn generatePolicy(principalId, 'Allow', resource, context);\n\t\t\t} catch {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\t\t};\n\t}\n}\n"],"mappings":";;;;AAiBA,SAAS,eACR,aACA,QACA,UACA,SAC6B;CAY7B,OAAO;EACN;EACA,gBAAA;GAZA,SAAS;GACT,WAAW,CACV;IACC,QAAQ;IACR,QAAQ;IACR,UAAU;GACX,CACD;EAKa;EACb;CACD;AACD;AAEA,SAAS,oBAAoB,WAA2B;CACvD,MAAM,QAAQ,UAAU,MAAM,GAAG;CACjC,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG;AAChC;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAa,gBAAb,MAAkE;CACjE;CACA;CACA;CACA;CACA;CAGA;CAEA,YAAY,SAAwC;EACnD,KAAK,WAAW,IAAIA,YAAAA,YAAY,QAAQ,MAAM;EAC9C,KAAK,aAAa,QAAQ,cAAc,CAAC;EACzC,KAAK,mBAAmB,QAAQ,oBAAoB;EACpD,KAAK,iBAAiB,QAAQ,oBAAoB,MAAM,EAAE,OAAO;EACjE,KAAK,aAAa,QAAQ;EAC1B,KAAK,YAAY,QAAQ;CAC1B;;;;CAKA,eAAe;EACd,OAAO,OACN,OACA,aACyC;GACzC,MAAM,EAAE,oBAAoB,cAAc;GAC1C,MAAM,WAAW,KAAK,mBACnB,oBAAoB,SAAS,IAC7B;GAEH,MAAM,QAAQ,mBAAmB,WAAW,SAAS,IAClD,mBAAmB,MAAM,CAAC,IAC1B;GAEH,IAAI;IACH,MAAM,SAAS,MAAM,KAAK,SAAS,OAAO,KAAK;IAE/C,IAAI,KAAK,WAEJ;SAAA,CAAC,MADsB,KAAK,UAAU,MAAM,GAE/C,OAAO,eAAe,gBAAgB,QAAQ,QAAQ;IAAA;IAIxD,MAAM,cAAc,KAAK,eAAe,MAAM;IAC9C,MAAM,UAAU,KAAK,aAAa,MAAM;IAExC,OAAO,eAAe,aAAa,SAAS,UAAU,OAAO;GAC9D,QAAQ;IACP,OAAO,eAAe,gBAAgB,QAAQ,QAAQ;GACvD;EACD;CACD;;;;CAKA,iBAAiB;EAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,cACX,KAAK;EAET,MAAM,gBACL,UACmB;GACnB,MAAM,UAAU,MAAM,WAAW,CAAC;GAClC,MAAM,YAAY,OAAO,KAAK,OAAO,CAAC,CAAC,MACrC,MAAM,EAAE,YAAY,MAAM,WAAW,YAAY,CACnD;GACA,IAAI,WAAW;IACd,MAAM,cAAc,QAAQ;IAC5B,IAAI,aAAa;KAChB,IAAI,eAAe,YAAY,WAAW,WAAW,GACpD,OAAO,YAAY,MAAM,YAAY,MAAM;KAE5C,OAAO;IACR;GACD;GAEA,IAAI,YAAY;IACf,MAAM,SAASC,gBAAAA,WAAW,QAAQ,UAAU,QAAQ,QAAQ,UAAU;IACtE,IAAI,QACH,OAAO;GAET;GAEA,OAAO;EACR;EAEA,OAAO,OACN,OACA,aACyC;GACzC,MAAM,YAAY,MAAM;GACxB,MAAM,WAAW,KAAK,mBACnB,oBAAoB,SAAS,IAC7B;GAEH,MAAM,QAAQ,aAAa,KAAK;GAEhC,IAAI,CAAC,OACJ,OAAO,eAAe,gBAAgB,QAAQ,QAAQ;GAGvD,IAAI;IACH,MAAM,SAAS,MAAM,KAAK,SAAS,OAAO,KAAK;IAE/C,IAAI,KAAK,WAEJ;SAAA,CAAC,MADsB,KAAK,UAAU,MAAM,GAE/C,OAAO,eAAe,gBAAgB,QAAQ,QAAQ;IAAA;IAIxD,MAAM,cAAc,KAAK,eAAe,MAAM;IAC9C,MAAM,UAAU,KAAK,aAAa,MAAM;IAExC,OAAO,eAAe,aAAa,SAAS,UAAU,OAAO;GAC9D,QAAQ;IACP,OAAO,eAAe,gBAAgB,QAAQ,QAAQ;GACvD;EACD;CACD;AACD"}
1
+ {"version":3,"file":"jwt.cjs","names":["principalId: string","effect: 'Allow' | 'Deny'","resource: string","context?: Record<string, string | number | boolean>","policyDocument: PolicyDocument","methodArn: string","options: JwtAuthorizerOptions<TClaims>","JwtVerifier","event: APIGatewayTokenAuthorizerEvent","_context: LambdaContext","event: APIGatewayRequestAuthorizerEvent"],"sources":["../../src/lambda/jwt.ts"],"sourcesContent":["import type {\n\tAPIGatewayAuthorizerResult,\n\tAPIGatewayRequestAuthorizerEvent,\n\tAPIGatewayTokenAuthorizerEvent,\n\tContext as LambdaContext,\n\tPolicyDocument,\n} from 'aws-lambda';\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 generatePolicy(\n\tprincipalId: string,\n\teffect: 'Allow' | 'Deny',\n\tresource: string,\n\tcontext?: Record<string, string | number | boolean>,\n): APIGatewayAuthorizerResult {\n\tconst policyDocument: PolicyDocument = {\n\t\tVersion: '2012-10-17',\n\t\tStatement: [\n\t\t\t{\n\t\t\t\tAction: 'execute-api:Invoke',\n\t\t\t\tEffect: effect,\n\t\t\t\tResource: resource,\n\t\t\t},\n\t\t],\n\t};\n\n\treturn {\n\t\tprincipalId,\n\t\tpolicyDocument,\n\t\tcontext,\n\t};\n}\n\nfunction getWildcardResource(methodArn: string): string {\n\tconst parts = methodArn.split('/');\n\treturn `${parts[0]}/${parts[1]}/*`;\n}\n\nexport interface JwtAuthorizerOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\twildcardResource?: boolean;\n\tgetPrincipalId?: (claims: TClaims) => string;\n\tgetContext?: (\n\t\tclaims: TClaims,\n\t) => Record<string, string | number | boolean> | undefined;\n\tauthorize?: (claims: TClaims) => boolean | Promise<boolean>;\n}\n\n/**\n * JWT Lambda Authorizer\n *\n * @example\n * ```typescript\n * const authorizer = new JwtAuthorizer({\n * config: {\n * jwksUri: 'https://auth.example.com/.well-known/jwks.json',\n * issuer: 'https://auth.example.com',\n * },\n * getContext: (claims) => ({ userId: claims.sub! }),\n * });\n *\n * // TOKEN authorizer\n * export const tokenHandler = authorizer.tokenHandler();\n *\n * // REQUEST authorizer\n * export const requestHandler = authorizer.requestHandler();\n * ```\n */\nexport class JwtAuthorizer<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly wildcardResource: boolean;\n\tprivate readonly getPrincipalId: (claims: TClaims) => string;\n\tprivate readonly getContext?: (\n\t\tclaims: TClaims,\n\t) => Record<string, string | number | boolean> | undefined;\n\tprivate readonly authorize?: (claims: TClaims) => boolean | Promise<boolean>;\n\n\tconstructor(options: JwtAuthorizerOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.wildcardResource = options.wildcardResource ?? true;\n\t\tthis.getPrincipalId = options.getPrincipalId ?? ((c) => c.sub ?? 'unknown');\n\t\tthis.getContext = options.getContext;\n\t\tthis.authorize = options.authorize;\n\t}\n\n\t/**\n\t * Returns a TOKEN authorizer handler\n\t */\n\ttokenHandler() {\n\t\treturn async (\n\t\t\tevent: APIGatewayTokenAuthorizerEvent,\n\t\t\t_context: LambdaContext,\n\t\t): Promise<APIGatewayAuthorizerResult> => {\n\t\t\tconst { authorizationToken, methodArn } = event;\n\t\t\tconst resource = this.wildcardResource\n\t\t\t\t? getWildcardResource(methodArn)\n\t\t\t\t: methodArn;\n\n\t\t\tconst token = authorizationToken.startsWith('Bearer ')\n\t\t\t\t? authorizationToken.slice(7)\n\t\t\t\t: authorizationToken;\n\n\t\t\ttry {\n\t\t\t\tconst claims = await this.verifier.verify(token);\n\n\t\t\t\tif (this.authorize) {\n\t\t\t\t\tconst isAuthorized = await this.authorize(claims);\n\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst principalId = this.getPrincipalId(claims);\n\t\t\t\tconst context = this.getContext?.(claims);\n\n\t\t\t\treturn generatePolicy(principalId, 'Allow', resource, context);\n\t\t\t} catch {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns a REQUEST authorizer handler\n\t */\n\trequestHandler() {\n\t\tconst {\n\t\t\theaderName = 'authorization',\n\t\t\tcookieName,\n\t\t\ttokenPrefix = 'Bearer ',\n\t\t} = this.extraction;\n\n\t\tconst extractToken = (\n\t\t\tevent: APIGatewayRequestAuthorizerEvent,\n\t\t): string | null => {\n\t\t\tconst headers = event.headers ?? {};\n\t\t\tconst headerKey = Object.keys(headers).find(\n\t\t\t\t(k) => k.toLowerCase() === headerName.toLowerCase(),\n\t\t\t);\n\t\t\tif (headerKey) {\n\t\t\t\tconst headerValue = headers[headerKey];\n\t\t\t\tif (headerValue) {\n\t\t\t\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\t\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t\t\t\t}\n\t\t\t\t\treturn headerValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cookieName) {\n\t\t\t\tconst cookieHeader = headers.cookie ?? headers.Cookie ?? '';\n\t\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\t\tif (match?.[1]) {\n\t\t\t\t\treturn match[1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\treturn async (\n\t\t\tevent: APIGatewayRequestAuthorizerEvent,\n\t\t\t_context: LambdaContext,\n\t\t): Promise<APIGatewayAuthorizerResult> => {\n\t\t\tconst methodArn = event.methodArn;\n\t\t\tconst resource = this.wildcardResource\n\t\t\t\t? getWildcardResource(methodArn)\n\t\t\t\t: methodArn;\n\n\t\t\tconst token = extractToken(event);\n\n\t\t\tif (!token) {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst claims = await this.verifier.verify(token);\n\n\t\t\t\tif (this.authorize) {\n\t\t\t\t\tconst isAuthorized = await this.authorize(claims);\n\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst principalId = this.getPrincipalId(claims);\n\t\t\t\tconst context = this.getContext?.(claims);\n\n\t\t\t\treturn generatePolicy(principalId, 'Allow', resource, context);\n\t\t\t} catch {\n\t\t\t\treturn generatePolicy('unauthorized', 'Deny', resource);\n\t\t\t}\n\t\t};\n\t}\n}\n"],"mappings":";;;AAqBA,SAAS,eACRA,aACAC,QACAC,UACAC,SAC6B;CAC7B,MAAMC,iBAAiC;EACtC,SAAS;EACT,WAAW,CACV;GACC,QAAQ;GACR,QAAQ;GACR,UAAU;EACV,CACD;CACD;AAED,QAAO;EACN;EACA;EACA;CACA;AACD;AAED,SAAS,oBAAoBC,WAA2B;CACvD,MAAM,QAAQ,UAAU,MAAM,IAAI;AAClC,SAAQ,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG;AAC/B;;;;;;;;;;;;;;;;;;;;;AAiCD,IAAa,gBAAb,MAAkE;CACjE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAGjB,AAAiB;CAEjB,YAAYC,SAAwC;AACnD,OAAK,WAAW,IAAIC,wBAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,mBAAmB,QAAQ,oBAAoB;AACpD,OAAK,iBAAiB,QAAQ,mBAAmB,CAAC,MAAM,EAAE,OAAO;AACjE,OAAK,aAAa,QAAQ;AAC1B,OAAK,YAAY,QAAQ;CACzB;;;;CAKD,eAAe;AACd,SAAO,OACNC,OACAC,aACyC;GACzC,MAAM,EAAE,oBAAoB,WAAW,GAAG;GAC1C,MAAM,WAAW,KAAK,mBACnB,oBAAoB,UAAU,GAC9B;GAEH,MAAM,QAAQ,mBAAmB,WAAW,UAAU,GACnD,mBAAmB,MAAM,EAAE,GAC3B;AAEH,OAAI;IACH,MAAM,SAAS,MAAM,KAAK,SAAS,OAAO,MAAM;AAEhD,QAAI,KAAK,WAAW;KACnB,MAAM,eAAe,MAAM,KAAK,UAAU,OAAO;AACjD,UAAK,aACJ,QAAO,eAAe,gBAAgB,QAAQ,SAAS;IAExD;IAED,MAAM,cAAc,KAAK,eAAe,OAAO;IAC/C,MAAM,UAAU,KAAK,aAAa,OAAO;AAEzC,WAAO,eAAe,aAAa,SAAS,UAAU,QAAQ;GAC9D,QAAO;AACP,WAAO,eAAe,gBAAgB,QAAQ,SAAS;GACvD;EACD;CACD;;;;CAKD,iBAAiB;EAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG,KAAK;EAET,MAAM,eAAe,CACpBC,UACmB;GACnB,MAAM,UAAU,MAAM,WAAW,CAAE;GACnC,MAAM,YAAY,OAAO,KAAK,QAAQ,CAAC,KACtC,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,aAAa,CACnD;AACD,OAAI,WAAW;IACd,MAAM,cAAc,QAAQ;AAC5B,QAAI,aAAa;AAChB,SAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,YAAO;IACP;GACD;AAED,OAAI,YAAY;IACf,MAAM,eAAe,QAAQ,UAAU,QAAQ,UAAU;IACzD,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,QAAI,QAAQ,GACX,QAAO,MAAM;GAEd;AAED,UAAO;EACP;AAED,SAAO,OACNA,OACAD,aACyC;GACzC,MAAM,YAAY,MAAM;GACxB,MAAM,WAAW,KAAK,mBACnB,oBAAoB,UAAU,GAC9B;GAEH,MAAM,QAAQ,aAAa,MAAM;AAEjC,QAAK,MACJ,QAAO,eAAe,gBAAgB,QAAQ,SAAS;AAGxD,OAAI;IACH,MAAM,SAAS,MAAM,KAAK,SAAS,OAAO,MAAM;AAEhD,QAAI,KAAK,WAAW;KACnB,MAAM,eAAe,MAAM,KAAK,UAAU,OAAO;AACjD,UAAK,aACJ,QAAO,eAAe,gBAAgB,QAAQ,SAAS;IAExD;IAED,MAAM,cAAc,KAAK,eAAe,OAAO;IAC/C,MAAM,UAAU,KAAK,aAAa,OAAO;AAEzC,WAAO,eAAe,aAAa,SAAS,UAAU,QAAQ;GAC9D,QAAO;AACP,WAAO,eAAe,gBAAgB,QAAQ,SAAS;GACvD;EACD;CACD;AACD"}
@@ -1,7 +1,8 @@
1
- import { a as JwtVerifier, n as JwtConfig, o as TokenExtractionOptions, t as JwtClaims } from "../jwt-CoKrpeMB.cjs";
1
+ import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-3eIuY2dg.cjs";
2
2
  import { APIGatewayAuthorizerResult, APIGatewayRequestAuthorizerEvent, APIGatewayTokenAuthorizerEvent, Context } from "aws-lambda";
3
+
3
4
  //#region src/lambda/jwt.d.ts
4
- export interface JwtAuthorizerOptions<TClaims extends JwtClaims = JwtClaims> {
5
+ interface JwtAuthorizerOptions<TClaims extends JwtClaims = JwtClaims> {
5
6
  config: JwtConfig;
6
7
  extraction?: TokenExtractionOptions;
7
8
  wildcardResource?: boolean;
@@ -29,7 +30,7 @@ export interface JwtAuthorizerOptions<TClaims extends JwtClaims = JwtClaims> {
29
30
  * export const requestHandler = authorizer.requestHandler();
30
31
  * ```
31
32
  */
32
- export declare class JwtAuthorizer<TClaims extends JwtClaims = JwtClaims> {
33
+ declare class JwtAuthorizer<TClaims extends JwtClaims = JwtClaims> {
33
34
  private readonly verifier;
34
35
  private readonly extraction;
35
36
  private readonly wildcardResource;
@@ -46,6 +47,7 @@ export declare class JwtAuthorizer<TClaims extends JwtClaims = JwtClaims> {
46
47
  */
47
48
  requestHandler(): (event: APIGatewayRequestAuthorizerEvent, _context: Context) => Promise<APIGatewayAuthorizerResult>;
48
49
  }
50
+ //# sourceMappingURL=jwt.d.ts.map
49
51
  //#endregion
50
- export type { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions };
52
+ export { JwtAuthorizer, JwtAuthorizerOptions, JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions };
51
53
  //# sourceMappingURL=jwt.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.cts","names":["LambdaContext"],"sources":["../../src/lambda/jwt.ts"],"mappings":";;;iBA8CiB,qBAAqB,gBAAgB,YAAY;EACjE,QAAQ;EACR,aAAa;EACb;EACA,kBAAkB,QAAQ;EAC1B,cACC,QAAQ,YACJ;EACL,aAAa,QAAQ,sBAAsB;;;;;;;;;;;;;;;;;;;;;;qBAuB/B,cAAc,gBAAgB,YAAY;mBACrC;mBACA;mBACA;mBACA;mBACA;mBAGA;EAEjB,YAAY,SAAS,qBAAqB;;;;EAY1C,iBAAY,OAEH,gCAA8B,UAC3BA,YACR,QAAQ;;;;EAiCZ,mBAAc,OAmCL,kCAAgC,UAC7BA,YACR,QAAQ"}
1
+ {"version":3,"file":"jwt.d.cts","names":[],"sources":["../../src/lambda/jwt.ts"],"sourcesContent":[],"mappings":";;;;UAkDiB,qCAAqC,YAAY;EAAjD,MAAA,EACR,SADQ;EAAoB,UAAA,CAAA,EAEvB,sBAFuB;EAAA,gBAAiB,CAAA,EAAA,OAAA;EAAS,cAAG,CAAA,EAAA,CAAA,MAAA,EAIvC,OAJuC,EAAA,GAAA,MAAA;EAAS,UAClE,CAAA,EAAA,CAAA,MAAA,EAKC,OALD,EAAA,GAMH,MANG,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,GAAA,OAAA,CAAA,GAAA,SAAA;EAAS,SACJ,CAAA,EAAA,CAAA,MAAA,EAMQ,OANR,EAAA,GAAA,OAAA,GAM8B,OAN9B,CAAA,OAAA,CAAA;;;;;;AAMqC;AAuBnD;;;;;;;;;;;;;;AAiGY;cAjGC,8BAA8B,YAAY;;;;;;;uBAUjC,qBAAqB;;;;0BAcjC,0CACG,YACR,QAAQ;;;;4BAqEH,4CACG,YACR,QAAQ"}