@neuroncloud/ido-core 0.1.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 (105) hide show
  1. package/dist/constants/index.d.ts +4 -0
  2. package/dist/constants/index.d.ts.map +1 -0
  3. package/dist/constants/index.js +4 -0
  4. package/dist/constants/index.js.map +1 -0
  5. package/dist/constants/interaction.d.ts +11 -0
  6. package/dist/constants/interaction.d.ts.map +1 -0
  7. package/dist/constants/interaction.js +11 -0
  8. package/dist/constants/interaction.js.map +1 -0
  9. package/dist/constants/oauth.d.ts +42 -0
  10. package/dist/constants/oauth.d.ts.map +1 -0
  11. package/dist/constants/oauth.js +42 -0
  12. package/dist/constants/oauth.js.map +1 -0
  13. package/dist/constants/oidc.d.ts +11 -0
  14. package/dist/constants/oidc.d.ts.map +1 -0
  15. package/dist/constants/oidc.js +11 -0
  16. package/dist/constants/oidc.js.map +1 -0
  17. package/dist/crypto/id-token.d.ts +15 -0
  18. package/dist/crypto/id-token.d.ts.map +1 -0
  19. package/dist/crypto/id-token.js +99 -0
  20. package/dist/crypto/id-token.js.map +1 -0
  21. package/dist/crypto/jwks.d.ts +18 -0
  22. package/dist/crypto/jwks.d.ts.map +1 -0
  23. package/dist/crypto/jwks.js +98 -0
  24. package/dist/crypto/jwks.js.map +1 -0
  25. package/dist/crypto/jwt.d.ts +12 -0
  26. package/dist/crypto/jwt.d.ts.map +1 -0
  27. package/dist/crypto/jwt.js +52 -0
  28. package/dist/crypto/jwt.js.map +1 -0
  29. package/dist/crypto/random.d.ts +8 -0
  30. package/dist/crypto/random.d.ts.map +1 -0
  31. package/dist/crypto/random.js +22 -0
  32. package/dist/crypto/random.js.map +1 -0
  33. package/dist/errors/index.d.ts +3 -0
  34. package/dist/errors/index.d.ts.map +1 -0
  35. package/dist/errors/index.js +3 -0
  36. package/dist/errors/index.js.map +1 -0
  37. package/dist/errors/protocol-error.d.ts +14 -0
  38. package/dist/errors/protocol-error.d.ts.map +1 -0
  39. package/dist/errors/protocol-error.js +16 -0
  40. package/dist/errors/protocol-error.js.map +1 -0
  41. package/dist/errors/runtime-error.d.ts +8 -0
  42. package/dist/errors/runtime-error.d.ts.map +1 -0
  43. package/dist/errors/runtime-error.js +9 -0
  44. package/dist/errors/runtime-error.js.map +1 -0
  45. package/dist/index.d.ts +29 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +18 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/interaction/remediations.d.ts +7 -0
  50. package/dist/interaction/remediations.d.ts.map +1 -0
  51. package/dist/interaction/remediations.js +39 -0
  52. package/dist/interaction/remediations.js.map +1 -0
  53. package/dist/interaction/response.d.ts +8 -0
  54. package/dist/interaction/response.d.ts.map +1 -0
  55. package/dist/interaction/response.js +18 -0
  56. package/dist/interaction/response.js.map +1 -0
  57. package/dist/interaction/types.d.ts +65 -0
  58. package/dist/interaction/types.d.ts.map +1 -0
  59. package/dist/interaction/types.js +13 -0
  60. package/dist/interaction/types.js.map +1 -0
  61. package/dist/oidc/authorization.d.ts +36 -0
  62. package/dist/oidc/authorization.d.ts.map +1 -0
  63. package/dist/oidc/authorization.js +89 -0
  64. package/dist/oidc/authorization.js.map +1 -0
  65. package/dist/oidc/discovery.d.ts +16 -0
  66. package/dist/oidc/discovery.d.ts.map +1 -0
  67. package/dist/oidc/discovery.js +31 -0
  68. package/dist/oidc/discovery.js.map +1 -0
  69. package/dist/oidc/introspection.d.ts +7 -0
  70. package/dist/oidc/introspection.d.ts.map +1 -0
  71. package/dist/oidc/introspection.js +19 -0
  72. package/dist/oidc/introspection.js.map +1 -0
  73. package/dist/oidc/revocation.d.ts +3 -0
  74. package/dist/oidc/revocation.d.ts.map +1 -0
  75. package/dist/oidc/revocation.js +9 -0
  76. package/dist/oidc/revocation.js.map +1 -0
  77. package/dist/oidc/token.d.ts +22 -0
  78. package/dist/oidc/token.d.ts.map +1 -0
  79. package/dist/oidc/token.js +81 -0
  80. package/dist/oidc/token.js.map +1 -0
  81. package/dist/oidc/user-info.d.ts +3 -0
  82. package/dist/oidc/user-info.d.ts.map +1 -0
  83. package/dist/oidc/user-info.js +15 -0
  84. package/dist/oidc/user-info.js.map +1 -0
  85. package/dist/types/configuration.d.ts +36 -0
  86. package/dist/types/configuration.d.ts.map +1 -0
  87. package/dist/types/configuration.js +2 -0
  88. package/dist/types/configuration.js.map +1 -0
  89. package/dist/types/tokens.d.ts +13 -0
  90. package/dist/types/tokens.d.ts.map +1 -0
  91. package/dist/types/tokens.js +2 -0
  92. package/dist/types/tokens.js.map +1 -0
  93. package/dist/types/user.d.ts +12 -0
  94. package/dist/types/user.d.ts.map +1 -0
  95. package/dist/types/user.js +14 -0
  96. package/dist/types/user.js.map +1 -0
  97. package/dist/utils/index.d.ts +2 -0
  98. package/dist/utils/index.d.ts.map +1 -0
  99. package/dist/utils/index.js +2 -0
  100. package/dist/utils/index.js.map +1 -0
  101. package/dist/utils/values.d.ts +6 -0
  102. package/dist/utils/values.d.ts.map +1 -0
  103. package/dist/utils/values.js +60 -0
  104. package/dist/utils/values.js.map +1 -0
  105. package/package.json +24 -0
@@ -0,0 +1,4 @@
1
+ export * from "./interaction.js";
2
+ export * from "./oauth.js";
3
+ export * from "./oidc.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./interaction.js";
2
+ export * from "./oauth.js";
3
+ export * from "./oidc.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const ChallengeTypes: {
2
+ readonly Password: "password";
3
+ readonly Passkey: "passkey";
4
+ };
5
+ export declare const AuthenticatorKeys: {
6
+ readonly Password: "password";
7
+ readonly Passkey: "passkey";
8
+ readonly Authenticator: "authenticator";
9
+ readonly RecoveryCode: "recovery_code";
10
+ };
11
+ //# sourceMappingURL=interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../src/constants/interaction.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const ChallengeTypes = {
2
+ Password: "password",
3
+ Passkey: "passkey",
4
+ };
5
+ export const AuthenticatorKeys = {
6
+ Password: "password",
7
+ Passkey: "passkey",
8
+ Authenticator: "authenticator",
9
+ RecoveryCode: "recovery_code",
10
+ };
11
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/constants/interaction.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,eAAe;CACrB,CAAC"}
@@ -0,0 +1,42 @@
1
+ export declare const GrantTypes: {
2
+ readonly AuthorizationCode: "authorization_code";
3
+ readonly Password: "password";
4
+ readonly RefreshToken: "refresh_token";
5
+ readonly ClientCredentials: "client_credentials";
6
+ readonly TwoFactor: "urn:identityone:grant-type:two-factor";
7
+ readonly Passkey: "urn:identityone:grant-type:passkey";
8
+ };
9
+ export declare const Parameters: {
10
+ readonly ClientId: "client_id";
11
+ readonly ClientSecret: "client_secret";
12
+ readonly GrantType: "grant_type";
13
+ readonly Username: "username";
14
+ readonly Password: "password";
15
+ readonly Scope: "scope";
16
+ readonly ContinuationToken: "continuation_token";
17
+ readonly ChallengeType: "challenge_type";
18
+ readonly Credential: "credential";
19
+ readonly Method: "method";
20
+ readonly AvailableMethods: "available_methods";
21
+ readonly Code: "code";
22
+ readonly LoginHint: "login_hint";
23
+ readonly RefreshToken: "refresh_token";
24
+ readonly Token: "token";
25
+ readonly TokenTypeHint: "token_type_hint";
26
+ readonly ResponseType: "response_type";
27
+ readonly RedirectUri: "redirect_uri";
28
+ readonly State: "state";
29
+ readonly Nonce: "nonce";
30
+ readonly CodeVerifier: "code_verifier";
31
+ readonly CodeChallenge: "code_challenge";
32
+ readonly CodeChallengeMethod: "code_challenge_method";
33
+ readonly IdTokenHint: "id_token_hint";
34
+ readonly PostLogoutRedirectUri: "post_logout_redirect_uri";
35
+ readonly Prompt: "prompt";
36
+ readonly Idp: "idp";
37
+ };
38
+ export declare const Suberrors: {
39
+ readonly MfaRequired: "mfa_required";
40
+ readonly TwoFactorMethodUnavailable: "two_factor_method_unavailable";
41
+ };
42
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/constants/oauth.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Bb,CAAC;AAEX,eAAO,MAAM,SAAS;;;CAGZ,CAAC"}
@@ -0,0 +1,42 @@
1
+ export const GrantTypes = {
2
+ AuthorizationCode: "authorization_code",
3
+ Password: "password",
4
+ RefreshToken: "refresh_token",
5
+ ClientCredentials: "client_credentials",
6
+ TwoFactor: "urn:identityone:grant-type:two-factor",
7
+ Passkey: "urn:identityone:grant-type:passkey",
8
+ };
9
+ export const Parameters = {
10
+ ClientId: "client_id",
11
+ ClientSecret: "client_secret",
12
+ GrantType: "grant_type",
13
+ Username: "username",
14
+ Password: "password",
15
+ Scope: "scope",
16
+ ContinuationToken: "continuation_token",
17
+ ChallengeType: "challenge_type",
18
+ Credential: "credential",
19
+ Method: "method",
20
+ AvailableMethods: "available_methods",
21
+ Code: "code",
22
+ LoginHint: "login_hint",
23
+ RefreshToken: "refresh_token",
24
+ Token: "token",
25
+ TokenTypeHint: "token_type_hint",
26
+ ResponseType: "response_type",
27
+ RedirectUri: "redirect_uri",
28
+ State: "state",
29
+ Nonce: "nonce",
30
+ CodeVerifier: "code_verifier",
31
+ CodeChallenge: "code_challenge",
32
+ CodeChallengeMethod: "code_challenge_method",
33
+ IdTokenHint: "id_token_hint",
34
+ PostLogoutRedirectUri: "post_logout_redirect_uri",
35
+ Prompt: "prompt",
36
+ Idp: "idp",
37
+ };
38
+ export const Suberrors = {
39
+ MfaRequired: "mfa_required",
40
+ TwoFactorMethodUnavailable: "two_factor_method_unavailable",
41
+ };
42
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/constants/oauth.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,iBAAiB,EAAE,oBAAoB;IACvC,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,oBAAoB;IACvC,SAAS,EAAE,uCAAuC;IAClD,OAAO,EAAE,oCAAoC;CACrC,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,oBAAoB;IACvC,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,mBAAmB;IACrC,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,eAAe;IAC7B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,iBAAiB;IAChC,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,mBAAmB,EAAE,uBAAuB;IAC5C,WAAW,EAAE,eAAe;IAC5B,qBAAqB,EAAE,0BAA0B;IACjD,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,cAAc;IAC3B,0BAA0B,EAAE,+BAA+B;CACnD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const DefaultScopes: readonly ["openid", "profile", "email", "offline_access"];
2
+ export declare const StorageKeys: {
3
+ readonly Token: "identityone.tokens";
4
+ readonly Transaction: "identityone.transaction";
5
+ readonly Redirect: "identityone.redirect";
6
+ readonly OriginalUri: "identityone.originalUri";
7
+ readonly Jwks: "identityone.jwks";
8
+ };
9
+ export declare const DefaultExpireEarlySeconds = 30;
10
+ export declare const DefaultJwksTtlSeconds = 600;
11
+ //# sourceMappingURL=oidc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../../src/constants/oidc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,2DAA4D,CAAC;AAEvF,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const DefaultScopes = ["openid", "profile", "email", "offline_access"];
2
+ export const StorageKeys = {
3
+ Token: "identityone.tokens",
4
+ Transaction: "identityone.transaction",
5
+ Redirect: "identityone.redirect",
6
+ OriginalUri: "identityone.originalUri",
7
+ Jwks: "identityone.jwks",
8
+ };
9
+ export const DefaultExpireEarlySeconds = 30;
10
+ export const DefaultJwksTtlSeconds = 600;
11
+ //# sourceMappingURL=oidc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/constants/oidc.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAU,CAAC;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,yBAAyB;IACtC,QAAQ,EAAE,sBAAsB;IAChC,WAAW,EAAE,yBAAyB;IACtC,IAAI,EAAE,kBAAkB;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { KeyValueCache, ProtocolHttpClient } from "../types/configuration.js";
2
+ import { type Jwt } from "./jwt.js";
3
+ import { type Jwk } from "./jwks.js";
4
+ export interface VerifyIdTokenOptions {
5
+ issuer: string;
6
+ clientId: string;
7
+ nonce?: string;
8
+ now?: number;
9
+ http?: ProtocolHttpClient;
10
+ jwksUri?: string;
11
+ cache?: KeyValueCache;
12
+ keys?: Jwk[];
13
+ }
14
+ export declare function verifyIdToken(token: string, options: VerifyIdTokenOptions): Promise<Jwt>;
15
+ //# sourceMappingURL=id-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-token.d.ts","sourceRoot":"","sources":["../../src/crypto/id-token.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAY,KAAK,GAAG,EAAkB,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAqB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;CACd;AAiBD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,CAK9F"}
@@ -0,0 +1,99 @@
1
+ import { RuntimeError } from "../errors/runtime-error.js";
2
+ import { parseJwt } from "./jwt.js";
3
+ import { resolveSigningKey } from "./jwks.js";
4
+ const algorithms = {
5
+ RS256: { import: { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, verify: { name: "RSASSA-PKCS1-v1_5" } },
6
+ RS384: { import: { name: "RSASSA-PKCS1-v1_5", hash: "SHA-384" }, verify: { name: "RSASSA-PKCS1-v1_5" } },
7
+ RS512: { import: { name: "RSASSA-PKCS1-v1_5", hash: "SHA-512" }, verify: { name: "RSASSA-PKCS1-v1_5" } },
8
+ PS256: { import: { name: "RSA-PSS", hash: "SHA-256" }, verify: { name: "RSA-PSS", saltLength: 32 } },
9
+ PS384: { import: { name: "RSA-PSS", hash: "SHA-384" }, verify: { name: "RSA-PSS", saltLength: 48 } },
10
+ PS512: { import: { name: "RSA-PSS", hash: "SHA-512" }, verify: { name: "RSA-PSS", saltLength: 64 } },
11
+ ES256: { import: { name: "ECDSA", namedCurve: "P-256" }, verify: { name: "ECDSA", hash: "SHA-256" } },
12
+ ES384: { import: { name: "ECDSA", namedCurve: "P-384" }, verify: { name: "ECDSA", hash: "SHA-384" } },
13
+ ES512: { import: { name: "ECDSA", namedCurve: "P-521" }, verify: { name: "ECDSA", hash: "SHA-512" } },
14
+ };
15
+ export async function verifyIdToken(token, options) {
16
+ const jwt = parseJwt(token);
17
+ await verifySignature(jwt, options);
18
+ verifyClaims(jwt, options);
19
+ return jwt;
20
+ }
21
+ async function verifySignature(jwt, options) {
22
+ const alg = typeof jwt.header.alg === "string" ? jwt.header.alg : undefined;
23
+ if (!alg || !(alg in algorithms)) {
24
+ throw new RuntimeError("The ID token signing algorithm is not supported.", { code: "invalid_algorithm" });
25
+ }
26
+ const kid = typeof jwt.header.kid === "string" ? jwt.header.kid : undefined;
27
+ const first = await signingKey(options, kid, alg, false);
28
+ if (await verifyWithKey(jwt, first, alg)) {
29
+ return;
30
+ }
31
+ if (!options.keys) {
32
+ const rotated = await signingKey(options, kid, alg, true);
33
+ if (await verifyWithKey(jwt, rotated, alg)) {
34
+ return;
35
+ }
36
+ }
37
+ throw new RuntimeError("The ID token signature is invalid.", { code: "invalid_signature" });
38
+ }
39
+ async function signingKey(options, kid, alg, force) {
40
+ if (options.keys?.length) {
41
+ const key = options.keys.find((item) => (!kid || item.kid === kid) && (!item.alg || item.alg === alg)) ?? options.keys[0];
42
+ if (!key) {
43
+ throw new RuntimeError("No matching JWKS signing key was found.", { code: "key_not_found" });
44
+ }
45
+ return key;
46
+ }
47
+ if (!options.http || !options.jwksUri) {
48
+ throw new RuntimeError("JWKS verification is not configured.", { code: "jwks_unavailable" });
49
+ }
50
+ return resolveSigningKey(options.http, options.jwksUri, options.cache, kid, alg, force);
51
+ }
52
+ async function verifyWithKey(jwt, key, alg) {
53
+ const algorithm = algorithms[alg];
54
+ if (!algorithm) {
55
+ return false;
56
+ }
57
+ try {
58
+ const cryptoKey = await crypto.subtle.importKey("jwk", toPublicJwk(key), algorithm.import, false, ["verify"]);
59
+ return crypto.subtle.verify(algorithm.verify, cryptoKey, toBufferSource(jwt.signature), toBufferSource(jwt.signingInput));
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ function toBufferSource(bytes) {
66
+ return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
67
+ }
68
+ function toPublicJwk(key) {
69
+ if (key.kty === "RSA" && key.n && key.e) {
70
+ return { kty: "RSA", n: key.n, e: key.e, ext: true };
71
+ }
72
+ if (key.kty === "EC" && key.crv && key.x && key.y) {
73
+ return { kty: "EC", crv: key.crv, x: key.x, y: key.y, ext: true };
74
+ }
75
+ throw new RuntimeError("The signing key is incomplete or unsupported.", { code: "key_not_found" });
76
+ }
77
+ function verifyClaims(jwt, options) {
78
+ const { payload } = jwt;
79
+ const now = options.now ?? Math.floor(Date.now() / 1000);
80
+ if (typeof payload.iss !== "string" || normalizeIssuer(payload.iss) !== normalizeIssuer(options.issuer)) {
81
+ throw new RuntimeError("The ID token issuer is invalid.", { code: "invalid_issuer" });
82
+ }
83
+ if (!audienceIncludes(payload.aud, options.clientId)) {
84
+ throw new RuntimeError("The ID token audience is invalid.", { code: "invalid_audience" });
85
+ }
86
+ if (typeof payload.exp !== "number" || payload.exp <= now) {
87
+ throw new RuntimeError("The ID token has expired.", { code: "invalid_exp" });
88
+ }
89
+ if (options.nonce !== undefined && payload.nonce !== options.nonce) {
90
+ throw new RuntimeError("The ID token nonce is invalid.", { code: "invalid_nonce" });
91
+ }
92
+ }
93
+ function normalizeIssuer(value) {
94
+ return value.replace(/\/+$/, "");
95
+ }
96
+ function audienceIncludes(audience, clientId) {
97
+ return audience === clientId || (Array.isArray(audience) && audience.includes(clientId));
98
+ }
99
+ //# sourceMappingURL=id-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-token.js","sourceRoot":"","sources":["../../src/crypto/id-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAA4B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAY,MAAM,WAAW,CAAC;AAaxD,MAAM,UAAU,GAGZ;IACF,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;IACxG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;IACxG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;IACxG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IACpG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IACpG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IACpG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IACrG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IACrG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;CACtG,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAA6B;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAc,EAAE,OAA6B;IAC1E,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5E,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,kDAAkD,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAEzD,IAAI,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE1D,IAAI,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,IAAI,YAAY,CAAC,oCAAoC,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA6B,EAAE,GAAuB,EAAE,GAAW,EAAE,KAAc;IAC3G,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1H,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,YAAY,CAAC,yCAAyC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,YAAY,CAAC,sCAAsC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAc,EAAE,GAAQ,EAAE,GAAW;IAChE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9G,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5H,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAgB,CAAC;AAClG,CAAC;AAED,SAAS,WAAW,CAAC,GAAQ;IAC3B,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,YAAY,CAAC,+CAA+C,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ,EAAE,OAA6B;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEzD,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,YAAY,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,YAAY,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1D,MAAM,IAAI,YAAY,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,YAAY,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAiB,EAAE,QAAgB;IAC3D,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { KeyValueCache, ProtocolHttpClient } from "../types/configuration.js";
2
+ export interface Jwk {
3
+ kty: string;
4
+ kid?: string;
5
+ use?: string;
6
+ alg?: string;
7
+ n?: string;
8
+ e?: string;
9
+ crv?: string;
10
+ x?: string;
11
+ y?: string;
12
+ }
13
+ export interface JsonWebKeySet {
14
+ keys: Jwk[];
15
+ }
16
+ export declare function resolveSigningKey(http: ProtocolHttpClient, jwksUri: string, cache: KeyValueCache | undefined, kid: string | undefined, alg: string, force?: boolean): Promise<Jwk>;
17
+ export declare function loadJwks(http: ProtocolHttpClient, jwksUri: string, cache?: KeyValueCache, force?: boolean): Promise<JsonWebKeySet>;
18
+ //# sourceMappingURL=jwks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwks.d.ts","sourceRoot":"","sources":["../../src/crypto/jwks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AASD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,KAAK,UAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,CAkBd;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,aAAa,EACrB,KAAK,UAAQ,GACZ,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -0,0 +1,98 @@
1
+ import { DefaultJwksTtlSeconds, StorageKeys } from "../constants/oidc.js";
2
+ import { RuntimeError } from "../errors/runtime-error.js";
3
+ import { asRecord } from "../utils/values.js";
4
+ const inflight = new Map();
5
+ export async function resolveSigningKey(http, jwksUri, cache, kid, alg, force = false) {
6
+ const key = selectKey(await loadJwks(http, jwksUri, cache, force), kid, alg);
7
+ if (key) {
8
+ return key;
9
+ }
10
+ if (force) {
11
+ throw new RuntimeError("No matching JWKS signing key was found.", { code: "key_not_found" });
12
+ }
13
+ const refreshed = selectKey(await loadJwks(http, jwksUri, cache, true), kid, alg);
14
+ if (!refreshed) {
15
+ throw new RuntimeError("No matching JWKS signing key was found.", { code: "key_not_found" });
16
+ }
17
+ return refreshed;
18
+ }
19
+ export async function loadJwks(http, jwksUri, cache, force = false) {
20
+ if (!force) {
21
+ const cached = readCache(cache);
22
+ if (cached) {
23
+ return cached;
24
+ }
25
+ }
26
+ const pending = inflight.get(jwksUri);
27
+ if (pending && !force) {
28
+ return pending;
29
+ }
30
+ const request = fetchJwks(http, jwksUri).then((result) => {
31
+ writeCache(cache, result.keys, result.ttl);
32
+ return { keys: result.keys };
33
+ });
34
+ inflight.set(jwksUri, request);
35
+ try {
36
+ return await request;
37
+ }
38
+ finally {
39
+ if (inflight.get(jwksUri) === request) {
40
+ inflight.delete(jwksUri);
41
+ }
42
+ }
43
+ }
44
+ function selectKey(set, kid, alg) {
45
+ const usable = set.keys.filter((key) => key.kty && (!key.use || key.use === "sig"));
46
+ const matchedKid = kid ? usable.filter((key) => key.kid === kid) : usable;
47
+ if (kid && matchedKid.length === 0) {
48
+ return undefined;
49
+ }
50
+ const pool = matchedKid.length > 0 ? matchedKid : usable;
51
+ return pool.find((key) => !key.alg || key.alg === alg) ?? pool[0];
52
+ }
53
+ async function fetchJwks(http, jwksUri) {
54
+ const response = await http.get(jwksUri);
55
+ const body = asRecord(response.body);
56
+ const keys = Array.isArray(body?.keys) ? body.keys.filter(isJwk) : [];
57
+ if (response.status < 200 || response.status >= 300 || keys.length === 0) {
58
+ throw new RuntimeError("The JWKS document could not be loaded.", { code: "jwks_unavailable" });
59
+ }
60
+ return { keys, ttl: cacheTtlSeconds(response.headers) };
61
+ }
62
+ function isJwk(value) {
63
+ return typeof value === "object" && value !== null && typeof value.kty === "string";
64
+ }
65
+ function readCache(cache) {
66
+ const raw = cache?.getItem(StorageKeys.Jwks);
67
+ if (!raw) {
68
+ return undefined;
69
+ }
70
+ try {
71
+ const parsed = JSON.parse(raw);
72
+ if (!Array.isArray(parsed.keys) || parsed.expiresAt <= Date.now()) {
73
+ cache?.removeItem(StorageKeys.Jwks);
74
+ return undefined;
75
+ }
76
+ return { keys: parsed.keys.filter(isJwk) };
77
+ }
78
+ catch {
79
+ cache?.removeItem(StorageKeys.Jwks);
80
+ return undefined;
81
+ }
82
+ }
83
+ function writeCache(cache, keys, ttl) {
84
+ cache?.setItem(StorageKeys.Jwks, JSON.stringify({
85
+ keys,
86
+ expiresAt: Date.now() + ttl * 1000,
87
+ }));
88
+ }
89
+ function cacheTtlSeconds(headers) {
90
+ const value = header(headers, "cache-control");
91
+ const match = value?.match(/max-age=(\d+)/i);
92
+ return match?.[1] ? Math.max(0, Number(match[1])) : DefaultJwksTtlSeconds;
93
+ }
94
+ function header(headers, name) {
95
+ const target = name.toLowerCase();
96
+ return Object.entries(headers).find(([key]) => key.toLowerCase() === target)?.[1];
97
+ }
98
+ //# sourceMappingURL=jwks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwks.js","sourceRoot":"","sources":["../../src/crypto/jwks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface Jwt {
2
+ header: Record<string, unknown>;
3
+ payload: Record<string, unknown>;
4
+ }
5
+ export interface ParsedJwt extends Jwt {
6
+ signingInput: Uint8Array;
7
+ signature: Uint8Array;
8
+ }
9
+ export declare function decodeJwt(token: string): Jwt;
10
+ export declare function parseJwt(token: string): ParsedJwt;
11
+ export declare function base64UrlToBytes(value: string): Uint8Array;
12
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/crypto/jwt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAU,SAAQ,GAAG;IACpC,YAAY,EAAE,UAAU,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAW5C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAajD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAW1D"}
@@ -0,0 +1,52 @@
1
+ import { RuntimeError } from "../errors/index.js";
2
+ export function decodeJwt(token) {
3
+ const parts = token.split(".");
4
+ if (parts.length < 2) {
5
+ throw new RuntimeError("The token is not a JWT.", { code: "invalid_token" });
6
+ }
7
+ return {
8
+ header: decodeSegment(parts[0] ?? ""),
9
+ payload: decodeSegment(parts[1] ?? ""),
10
+ };
11
+ }
12
+ export function parseJwt(token) {
13
+ const parts = token.split(".");
14
+ if (parts.length !== 3 || !parts[0] || !parts[1] || !parts[2]) {
15
+ throw new RuntimeError("The token is not a signed JWT.", { code: "invalid_token" });
16
+ }
17
+ return {
18
+ header: decodeSegment(parts[0]),
19
+ payload: decodeSegment(parts[1]),
20
+ signingInput: new TextEncoder().encode(`${parts[0]}.${parts[1]}`),
21
+ signature: base64UrlToBytes(parts[2]),
22
+ };
23
+ }
24
+ export function base64UrlToBytes(value) {
25
+ const normalized = value.replace(/-/g, "+").replace(/_/g, "/");
26
+ const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, "=");
27
+ const binary = decodeBase64(padded);
28
+ const bytes = new Uint8Array(binary.length);
29
+ for (let index = 0; index < binary.length; index += 1) {
30
+ bytes[index] = binary.charCodeAt(index);
31
+ }
32
+ return bytes;
33
+ }
34
+ function decodeSegment(segment) {
35
+ const json = new TextDecoder().decode(base64UrlToBytes(segment));
36
+ const value = JSON.parse(json);
37
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
38
+ throw new RuntimeError("The token segment is not a JSON object.", { code: "invalid_token" });
39
+ }
40
+ return value;
41
+ }
42
+ function decodeBase64(value) {
43
+ if (typeof atob === "function") {
44
+ return atob(value);
45
+ }
46
+ const bufferFactory = globalThis.Buffer;
47
+ if (bufferFactory) {
48
+ return bufferFactory.from(value, "base64").toString("binary");
49
+ }
50
+ throw new RuntimeError("Base64 decoding is not available.", { code: "unsupported" });
51
+ }
52
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/crypto/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,YAAY,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,YAAY,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,YAAY,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IAE1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,YAAY,CAAC,yCAAyC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,aAAa,GAAI,UAErB,CAAC,MAAM,CAAC;IAEV,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,YAAY,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AACvF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function randomUrlSafe(byteLength?: number): string;
2
+ export declare function base64UrlEncode(value: ArrayBuffer | Uint8Array): string;
3
+ export declare function sha256(value: string): Promise<ArrayBuffer>;
4
+ export declare function createPkce(): Promise<{
5
+ verifier: string;
6
+ challenge: string;
7
+ }>;
8
+ //# sourceMappingURL=random.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/crypto/random.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,UAAU,SAAK,GAAG,MAAM,CAIrD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CASvE;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEhE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAInF"}
@@ -0,0 +1,22 @@
1
+ export function randomUrlSafe(byteLength = 32) {
2
+ const bytes = new Uint8Array(byteLength);
3
+ crypto.getRandomValues(bytes);
4
+ return base64UrlEncode(bytes);
5
+ }
6
+ export function base64UrlEncode(value) {
7
+ const bytes = value instanceof Uint8Array ? value : new Uint8Array(value);
8
+ let binary = "";
9
+ for (const byte of bytes) {
10
+ binary += String.fromCharCode(byte);
11
+ }
12
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
13
+ }
14
+ export async function sha256(value) {
15
+ return crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
16
+ }
17
+ export async function createPkce() {
18
+ const verifier = randomUrlSafe(32);
19
+ const challenge = base64UrlEncode(await sha256(verifier));
20
+ return { verifier, challenge };
21
+ }
22
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../../src/crypto/random.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,UAAU,GAAG,EAAE;IAC3C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAA+B;IAC7D,MAAM,KAAK,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ProtocolError, ProtocolError as OAuthError } from "./protocol-error.js";
2
+ export { RuntimeError } from "./runtime-error.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ProtocolError, ProtocolError as OAuthError } from "./protocol-error.js";
2
+ export { RuntimeError } from "./runtime-error.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { RuntimeError } from "./runtime-error.js";
2
+ export declare class ProtocolError extends RuntimeError {
3
+ readonly error: string;
4
+ readonly errorDescription?: string;
5
+ readonly suberror?: string;
6
+ readonly continuationToken?: string;
7
+ constructor(error: string, options?: {
8
+ errorDescription?: string;
9
+ suberror?: string;
10
+ continuationToken?: string;
11
+ cause?: unknown;
12
+ });
13
+ }
14
+ //# sourceMappingURL=protocol-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-error.d.ts","sourceRoot":"","sources":["../../src/errors/protocol-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAGlC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB;CASJ"}
@@ -0,0 +1,16 @@
1
+ import { RuntimeError } from "./runtime-error.js";
2
+ export class ProtocolError extends RuntimeError {
3
+ error;
4
+ errorDescription;
5
+ suberror;
6
+ continuationToken;
7
+ constructor(error, options) {
8
+ super(options?.errorDescription ?? error, { code: error, cause: options?.cause });
9
+ this.name = "ProtocolError";
10
+ this.error = error;
11
+ this.errorDescription = options?.errorDescription;
12
+ this.suberror = options?.suberror;
13
+ this.continuationToken = options?.continuationToken;
14
+ }
15
+ }
16
+ //# sourceMappingURL=protocol-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-error.js","sourceRoot":"","sources":["../../src/errors/protocol-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,aAAc,SAAQ,YAAY;IACpC,KAAK,CAAS;IACd,gBAAgB,CAAU;IAC1B,QAAQ,CAAU;IAClB,iBAAiB,CAAU;IAEpC,YACE,KAAa,EACb,OAKC;QAED,KAAK,CAAC,OAAO,EAAE,gBAAgB,IAAI,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,CAAC;IACtD,CAAC;CACF"}