@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.
- package/CHANGELOG.md +67 -0
- package/dist/cacheTokenStorage-16NE8Cd9.mjs +32 -0
- package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
- package/dist/{cacheTokenStorage-B3u8Sf-6.d.cts → cacheTokenStorage-B7sOoysu.d.cts} +5 -2
- package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
- package/dist/cacheTokenStorage-CEpMniTi.cjs +38 -0
- package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
- package/dist/{cacheTokenStorage-B3u8Sf-6.d.mts → cacheTokenStorage-_tq4Kmhc.d.mts} +5 -2
- package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
- package/dist/cacheTokenStorage.cjs +2 -30
- package/dist/cacheTokenStorage.d.cts +1 -1
- package/dist/cacheTokenStorage.d.mts +1 -1
- package/dist/cacheTokenStorage.mjs +2 -29
- package/dist/{rolldown-runtime-VH7oDXx4.cjs → chunk-CUT6urMc.cjs} +10 -8
- package/dist/client-BPl_mMvb.cjs +162 -0
- package/dist/client-BPl_mMvb.cjs.map +1 -0
- package/dist/client-eidYNJSH.mjs +144 -0
- package/dist/client-eidYNJSH.mjs.map +1 -0
- package/dist/client.cjs +6 -144
- package/dist/client.d.cts +1 -1
- package/dist/client.d.mts +1 -1
- package/dist/client.mjs +3 -140
- package/dist/hono/jwt.cjs +10 -7
- package/dist/hono/jwt.cjs.map +1 -1
- package/dist/hono/jwt.d.cts +6 -4
- package/dist/hono/jwt.d.cts.map +1 -1
- package/dist/hono/jwt.d.mts +6 -4
- package/dist/hono/jwt.d.mts.map +1 -1
- package/dist/hono/jwt.mjs +10 -7
- package/dist/hono/jwt.mjs.map +1 -1
- package/dist/hono/oidc.cjs +10 -7
- package/dist/hono/oidc.cjs.map +1 -1
- package/dist/hono/oidc.d.cts +7 -5
- package/dist/hono/oidc.d.cts.map +1 -1
- package/dist/hono/oidc.d.mts +7 -5
- package/dist/hono/oidc.d.mts.map +1 -1
- package/dist/hono/oidc.mjs +10 -7
- package/dist/hono/oidc.mjs.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +5 -4
- package/dist/{jwt-CoKrpeMB.d.mts → jwt-3eIuY2dg.d.cts} +3 -2
- package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
- package/dist/jwt-Bo_eACEi.cjs +70 -0
- package/dist/jwt-Bo_eACEi.cjs.map +1 -0
- package/dist/{jwt-CoKrpeMB.d.cts → jwt-BqLlRkw-.d.mts} +3 -2
- package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
- package/dist/jwt-D88cPJyT.mjs +52 -0
- package/dist/jwt-D88cPJyT.mjs.map +1 -0
- package/dist/jwt.cjs +4 -56
- package/dist/jwt.d.cts +1 -1
- package/dist/jwt.d.mts +1 -1
- package/dist/jwt.mjs +2 -51
- package/dist/lambda/jwt.cjs +20 -16
- package/dist/lambda/jwt.cjs.map +1 -1
- package/dist/lambda/jwt.d.cts +6 -4
- package/dist/lambda/jwt.d.cts.map +1 -1
- package/dist/lambda/jwt.d.mts +6 -4
- package/dist/lambda/jwt.d.mts.map +1 -1
- package/dist/lambda/jwt.mjs +20 -16
- package/dist/lambda/jwt.mjs.map +1 -1
- package/dist/lambda/oidc.cjs +20 -16
- package/dist/lambda/oidc.cjs.map +1 -1
- package/dist/lambda/oidc.d.cts +7 -5
- package/dist/lambda/oidc.d.cts.map +1 -1
- package/dist/lambda/oidc.d.mts +7 -5
- package/dist/lambda/oidc.d.mts.map +1 -1
- package/dist/lambda/oidc.mjs +20 -16
- package/dist/lambda/oidc.mjs.map +1 -1
- package/dist/oidc-C0KyYaAK.cjs +68 -0
- package/dist/oidc-C0KyYaAK.cjs.map +1 -0
- package/dist/oidc-ChA17wLB.d.cts +87 -0
- package/dist/oidc-ChA17wLB.d.cts.map +1 -0
- package/dist/oidc-DTRgBBl6.d.mts +87 -0
- package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
- package/dist/oidc-KA30gMlx.mjs +62 -0
- package/dist/oidc-KA30gMlx.mjs.map +1 -0
- package/dist/oidc.cjs +2 -64
- package/dist/oidc.d.cts +3 -84
- package/dist/oidc.d.mts +3 -84
- package/dist/oidc.mjs +2 -61
- package/dist/server.cjs +4 -4
- package/dist/server.d.cts +3 -3
- package/dist/server.d.mts +3 -3
- package/dist/server.mjs +4 -3
- package/dist/tokenManager-CL3yE06D.d.cts +40 -0
- package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
- package/dist/tokenManager-Ci2Tgxp8.mjs +66 -0
- package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
- package/dist/tokenManager-CvEMgxOp.cjs +72 -0
- package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
- package/dist/tokenManager-RrwjL0y-.d.mts +40 -0
- package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
- package/dist/tokenManager.cjs +2 -64
- package/dist/tokenManager.d.cts +2 -37
- package/dist/tokenManager.d.mts +2 -37
- package/dist/tokenManager.mjs +2 -61
- package/package.json +9 -13
- package/src/__tests__/cacheTokenStorage.spec.ts +213 -0
- package/src/__tests__/client.spec.ts +465 -0
- package/src/__tests__/hono-jwt.spec.ts +232 -0
- package/src/__tests__/hono-oidc.spec.ts +605 -0
- package/src/__tests__/jwt.spec.ts +197 -0
- package/src/__tests__/lambda-jwt.spec.ts +278 -0
- package/src/__tests__/lambda-oidc.spec.ts +624 -0
- package/src/__tests__/oidc.spec.ts +405 -0
- package/src/__tests__/tokenManager.spec.ts +259 -0
- package/src/cacheTokenStorage.ts +43 -0
- package/src/client.ts +220 -0
- package/src/hono/jwt.ts +142 -0
- package/src/hono/oidc.ts +170 -0
- package/src/index.ts +3 -0
- package/src/jwt.ts +106 -0
- package/src/lambda/jwt.ts +210 -0
- package/src/lambda/oidc.ts +203 -0
- package/src/oidc.ts +156 -0
- package/src/server.ts +8 -0
- package/src/tokenManager.ts +106 -0
- package/tsconfig.json +10 -0
- package/tsdown.config.ts +3 -0
- package/dist/cacheTokenStorage-B3u8Sf-6.d.cts.map +0 -1
- package/dist/cacheTokenStorage-B3u8Sf-6.d.mts.map +0 -1
- package/dist/cacheTokenStorage.cjs.map +0 -1
- package/dist/cacheTokenStorage.mjs.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/client.mjs.map +0 -1
- package/dist/cookies.cjs +0 -25
- package/dist/cookies.cjs.map +0 -1
- package/dist/cookies.d.cts +0 -12
- package/dist/cookies.d.cts.map +0 -1
- package/dist/cookies.d.mts +0 -12
- package/dist/cookies.d.mts.map +0 -1
- package/dist/cookies.mjs +0 -24
- package/dist/cookies.mjs.map +0 -1
- package/dist/jwt-CoKrpeMB.d.cts.map +0 -1
- package/dist/jwt-CoKrpeMB.d.mts.map +0 -1
- package/dist/jwt.cjs.map +0 -1
- package/dist/jwt.mjs.map +0 -1
- package/dist/oidc.cjs.map +0 -1
- package/dist/oidc.d.cts.map +0 -1
- package/dist/oidc.d.mts.map +0 -1
- package/dist/oidc.mjs.map +0 -1
- package/dist/tokenManager.cjs.map +0 -1
- package/dist/tokenManager.d.cts.map +0 -1
- package/dist/tokenManager.d.mts.map +0 -1
- package/dist/tokenManager.mjs.map +0 -1
package/dist/hono/oidc.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
48
|
+
export { OidcClaims, OidcConfig, OidcMiddleware, OidcMiddlewareOptions, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
|
|
47
49
|
//# sourceMappingURL=oidc.d.mts.map
|
package/dist/hono/oidc.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.d.mts","names":[],"sources":["../../src/hono/oidc.ts"],"mappings":"
|
|
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"}
|
package/dist/hono/oidc.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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
|
|
13
|
-
if (
|
|
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,
|
|
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
|
package/dist/hono/oidc.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.mjs","names":[],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {
|
|
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
|
-
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
|
|
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 {
|
|
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 {
|
|
2
|
-
import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager
|
|
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
|
-
|
|
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 {
|
|
61
|
-
//# sourceMappingURL=jwt-
|
|
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 {
|
|
61
|
-
//# sourceMappingURL=jwt-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
-
|
|
3
|
+
export { JwtVerifier, decodeJwt, isJwksConfig };
|
package/dist/lambda/jwt.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
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
|
|
96
|
-
|
|
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
|
-
|
|
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
|
package/dist/lambda/jwt.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.cjs","names":["JwtVerifier","
|
|
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"}
|
package/dist/lambda/jwt.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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":[
|
|
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"}
|