@pulse-compute/jwt 0.0.0 → 1.0.0-beta.2

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 (60) hide show
  1. package/README.md +59 -3
  2. package/as/index.as.ts +388 -0
  3. package/conformance/native-contract.json +53 -0
  4. package/dist/bearer.d.ts +4 -0
  5. package/dist/bearer.d.ts.map +1 -0
  6. package/dist/bearer.js +33 -0
  7. package/dist/bearer.js.map +1 -0
  8. package/dist/crypto-verifier.d.ts +19 -0
  9. package/dist/crypto-verifier.d.ts.map +1 -0
  10. package/dist/crypto-verifier.js +225 -0
  11. package/dist/crypto-verifier.js.map +1 -0
  12. package/dist/errors.d.ts +14 -0
  13. package/dist/errors.d.ts.map +1 -0
  14. package/dist/errors.js +65 -0
  15. package/dist/errors.js.map +1 -0
  16. package/dist/index.d.ts +19 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +21 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/internal/clock.d.ts +7 -0
  21. package/dist/internal/clock.d.ts.map +1 -0
  22. package/dist/internal/clock.js +34 -0
  23. package/dist/internal/clock.js.map +1 -0
  24. package/dist/internal/data.d.ts +12 -0
  25. package/dist/internal/data.d.ts.map +1 -0
  26. package/dist/internal/data.js +86 -0
  27. package/dist/internal/data.js.map +1 -0
  28. package/dist/internal/package-runtime.d.ts +9 -0
  29. package/dist/internal/package-runtime.d.ts.map +1 -0
  30. package/dist/internal/package-runtime.js +14 -0
  31. package/dist/internal/package-runtime.js.map +1 -0
  32. package/dist/internal/registered-claims.d.ts +3 -0
  33. package/dist/internal/registered-claims.d.ts.map +1 -0
  34. package/dist/internal/registered-claims.js +84 -0
  35. package/dist/internal/registered-claims.js.map +1 -0
  36. package/dist/internal/verifier-authority.d.ts +24 -0
  37. package/dist/internal/verifier-authority.d.ts.map +1 -0
  38. package/dist/internal/verifier-authority.js +101 -0
  39. package/dist/internal/verifier-authority.js.map +1 -0
  40. package/dist/options.d.ts +113 -0
  41. package/dist/options.d.ts.map +1 -0
  42. package/dist/options.js +382 -0
  43. package/dist/options.js.map +1 -0
  44. package/dist/provider.d.ts +7 -0
  45. package/dist/provider.d.ts.map +1 -0
  46. package/dist/provider.js +7 -0
  47. package/dist/provider.js.map +1 -0
  48. package/dist/result.d.ts +17 -0
  49. package/dist/result.d.ts.map +1 -0
  50. package/dist/result.js +96 -0
  51. package/dist/result.js.map +1 -0
  52. package/dist/token.d.ts +20 -0
  53. package/dist/token.d.ts.map +1 -0
  54. package/dist/token.js +323 -0
  55. package/dist/token.js.map +1 -0
  56. package/package.json +64 -6
  57. package/pulse.package.json +75 -0
  58. package/pulsewasm.compiler.cjs +1258 -0
  59. package/pulsewasm.manifest.cjs +117 -0
  60. package/pulsewasm.native.cjs +60 -0
@@ -0,0 +1,225 @@
1
+ import { CRYPTO_VERIFICATION_STATUSES, normalizeEs256JoseVerifyRequest, } from '@pulse-compute/crypto';
2
+ import { isJwtError, jwtError } from './errors.js';
3
+ import { normalizeJwtVerifyOptions, selectEs256VerificationJwk, } from './options.js';
4
+ import { normalizeJwtVerification } from './result.js';
5
+ import { compactJwtParts, compactJwtSignatureInput, parseVerifiedClaims, preflightCompactJwt, protectedAlgorithm, protectedHeaderString, } from './token.js';
6
+ import { captureJwtCurrentDate } from './internal/clock.js';
7
+ import { isJwtOrdinaryObject, jwtDataEntries, jwtDataRecord, jwtOwnDataProperty, } from './internal/data.js';
8
+ import { validateRegisteredClaims } from './internal/registered-claims.js';
9
+ import { registerClaimStrings, registerSensitive, validateClaimsSchema, verifierHostFunction, } from './internal/verifier-authority.js';
10
+ function cryptoMacVerify(crypto) {
11
+ if (!isJwtOrdinaryObject(crypto)) {
12
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
13
+ }
14
+ const macProperty = jwtOwnDataProperty(crypto, 'mac');
15
+ if (!macProperty.valid || !macProperty.present || !isJwtOrdinaryObject(macProperty.value)) {
16
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
17
+ }
18
+ const verifyProperty = jwtOwnDataProperty(macProperty.value, 'verify');
19
+ if (!verifyProperty.valid || !verifyProperty.present || typeof verifyProperty.value !== 'function') {
20
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
21
+ }
22
+ return verifyProperty.value;
23
+ }
24
+ function cryptoSignatureVerify(crypto) {
25
+ if (!isJwtOrdinaryObject(crypto)) {
26
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
27
+ }
28
+ const signatureProperty = jwtOwnDataProperty(crypto, 'signature');
29
+ if (!signatureProperty.valid
30
+ || !signatureProperty.present
31
+ || !isJwtOrdinaryObject(signatureProperty.value)) {
32
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
33
+ }
34
+ const verifyProperty = jwtOwnDataProperty(signatureProperty.value, 'verify');
35
+ if (!verifyProperty.valid || !verifyProperty.present || typeof verifyProperty.value !== 'function') {
36
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'crypto-verifier' });
37
+ }
38
+ return verifyProperty.value;
39
+ }
40
+ function normalizedCryptoStatus(value) {
41
+ if (!isJwtOrdinaryObject(value))
42
+ return 'realization-failure';
43
+ const entries = jwtDataEntries(value);
44
+ if (!entries || entries.length !== 1 || entries[0][0] !== 'status') {
45
+ return 'realization-failure';
46
+ }
47
+ const status = entries[0][1];
48
+ return typeof status === 'string'
49
+ && CRYPTO_VERIFICATION_STATUSES.includes(status)
50
+ ? status
51
+ : 'realization-failure';
52
+ }
53
+ function assertCryptoVerified(status) {
54
+ if (status === 'valid')
55
+ return;
56
+ if (status === 'invalid-authenticator') {
57
+ throw jwtError('PULSE_JWT_SIGNATURE_INVALID');
58
+ }
59
+ if (status === 'invalid-key') {
60
+ throw jwtError('PULSE_JWT_KEY_INVALID', { category: 'crypto-key' });
61
+ }
62
+ if (status === 'invalid-input') {
63
+ throw jwtError('PULSE_JWT_MALFORMED', { category: 'crypto-input' });
64
+ }
65
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', {
66
+ category: 'crypto-realization',
67
+ automaticFallback: false,
68
+ });
69
+ }
70
+ async function resolveHmacKeyBytes(key, algorithm, host) {
71
+ if (algorithm !== 'HS256' || key.type !== 'secret') {
72
+ throw jwtError('PULSE_JWT_KEY_INVALID', { category: 'algorithm-key-mismatch' });
73
+ }
74
+ const resolveSecret = verifierHostFunction(host, 'resolveSecret');
75
+ if (!resolveSecret) {
76
+ throw jwtError('PULSE_JWT_TARGET_UNSUPPORTED', { category: 'secret-authority' });
77
+ }
78
+ let resolved;
79
+ try {
80
+ resolved = await resolveSecret(key.binding);
81
+ }
82
+ catch {
83
+ throw jwtError('PULSE_JWT_KEY_INVALID', { category: 'secret-binding' });
84
+ }
85
+ const bytes = typeof resolved === 'string'
86
+ ? new TextEncoder().encode(resolved)
87
+ : resolved instanceof Uint8Array
88
+ ? new Uint8Array(resolved)
89
+ : undefined;
90
+ if (!bytes || bytes.byteLength === 0) {
91
+ throw jwtError('PULSE_JWT_KEY_INVALID', { category: 'secret-binding' });
92
+ }
93
+ try {
94
+ registerSensitive(host, resolved);
95
+ }
96
+ catch (error) {
97
+ bytes.fill(0);
98
+ throw error;
99
+ }
100
+ return bytes;
101
+ }
102
+ async function captureCurrentDate(host) {
103
+ const clock = jwtOwnDataProperty(host, 'captureWallClock');
104
+ if (!clock.valid
105
+ || (clock.present
106
+ && clock.value !== undefined
107
+ && typeof clock.value !== 'function')) {
108
+ throw jwtError('PULSE_JWT_CLOCK_INVALID');
109
+ }
110
+ return captureJwtCurrentDate(typeof clock.value === 'function'
111
+ ? clock.value
112
+ : undefined);
113
+ }
114
+ export async function verifyJwtWithCrypto(input, host, crypto) {
115
+ try {
116
+ const inputRecord = jwtDataRecord(input);
117
+ if (!inputRecord || !isJwtOrdinaryObject(host)) {
118
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', { category: 'verifier-input' });
119
+ }
120
+ const token = inputRecord.get('token');
121
+ const inputOptions = inputRecord.get('options');
122
+ if (typeof token === 'string')
123
+ registerSensitive(host, token);
124
+ const preflight = preflightCompactJwt(token);
125
+ const options = normalizeJwtVerifyOptions(inputOptions);
126
+ const algorithm = protectedAlgorithm(preflight.protectedHeader);
127
+ if (algorithm === 'none' || !options.algorithms.includes(algorithm)) {
128
+ throw jwtError('PULSE_JWT_ALGORITHM_NOT_ALLOWED', { category: 'protected-algorithm' });
129
+ }
130
+ const selectedAlgorithm = algorithm;
131
+ const kid = protectedHeaderString(preflight.protectedHeader, 'kid');
132
+ const typ = protectedHeaderString(preflight.protectedHeader, 'typ');
133
+ if (options.typ !== undefined && typ !== options.typ) {
134
+ throw jwtError('PULSE_JWT_CLAIMS_INVALID', { category: 'protected-type' });
135
+ }
136
+ let cryptoResult;
137
+ if (selectedAlgorithm === 'HS256') {
138
+ const verifyMac = cryptoMacVerify(crypto);
139
+ const keyBytes = await resolveHmacKeyBytes(options.key, selectedAlgorithm, host);
140
+ const compact = compactJwtSignatureInput(token);
141
+ try {
142
+ try {
143
+ cryptoResult = await verifyMac(Object.freeze({
144
+ algorithm: 'HS256',
145
+ key: Object.freeze({
146
+ type: 'hmac-key-bytes',
147
+ bytes: keyBytes,
148
+ }),
149
+ data: compact.signingInput,
150
+ tag: compact.signature,
151
+ }));
152
+ }
153
+ catch {
154
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', {
155
+ category: 'crypto-verification',
156
+ automaticFallback: false,
157
+ });
158
+ }
159
+ }
160
+ finally {
161
+ keyBytes.fill(0);
162
+ }
163
+ }
164
+ else if (selectedAlgorithm === 'ES256') {
165
+ const verifySignature = cryptoSignatureVerify(crypto);
166
+ const selectedJwk = selectEs256VerificationJwk(options.key, kid);
167
+ const compact = compactJwtParts(token);
168
+ const normalized = normalizeEs256JoseVerifyRequest({
169
+ key: {
170
+ x: selectedJwk.x,
171
+ y: selectedJwk.y,
172
+ },
173
+ data: compact.signingInput,
174
+ signature: compact.signatureSegment,
175
+ });
176
+ if (!normalized.ok) {
177
+ assertCryptoVerified(normalized.result.status);
178
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', {
179
+ category: 'crypto-normalization',
180
+ });
181
+ }
182
+ try {
183
+ try {
184
+ cryptoResult = await verifySignature(normalized.request);
185
+ }
186
+ catch {
187
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', {
188
+ category: 'crypto-verification',
189
+ automaticFallback: false,
190
+ });
191
+ }
192
+ }
193
+ finally {
194
+ normalized.request.key.bytes.fill(0);
195
+ }
196
+ }
197
+ else {
198
+ throw jwtError('PULSE_JWT_ALGORITHM_NOT_ALLOWED', {
199
+ category: 'protected-algorithm',
200
+ });
201
+ }
202
+ assertCryptoVerified(normalizedCryptoStatus(cryptoResult));
203
+ const claims = parseVerifiedClaims(preflight);
204
+ registerClaimStrings(host, claims);
205
+ const currentDate = await captureCurrentDate(host);
206
+ validateRegisteredClaims(claims, options, currentDate);
207
+ const normalizedClaims = await validateClaimsSchema(claims, options.claimsSchema, host);
208
+ if (normalizedClaims !== claims)
209
+ registerClaimStrings(host, normalizedClaims);
210
+ return normalizeJwtVerification({
211
+ claims: normalizedClaims,
212
+ protectedHeader: {
213
+ alg: selectedAlgorithm,
214
+ ...(kid === undefined ? {} : { kid }),
215
+ ...(typ === undefined ? {} : { typ }),
216
+ },
217
+ });
218
+ }
219
+ catch (error) {
220
+ if (isJwtError(error))
221
+ throw error;
222
+ throw jwtError('PULSE_JWT_OPERATION_FAILED', { category: 'crypto-verifier' });
223
+ }
224
+ }
225
+ //# sourceMappingURL=crypto-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-verifier.js","sourceRoot":"","sources":["../src/crypto-verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const JWT_ERROR_CODES: readonly ["PULSE_JWT_BEARER_INVALID", "PULSE_JWT_TOKEN_REQUIRED", "PULSE_JWT_MALFORMED", "PULSE_JWT_LIMIT_EXCEEDED", "PULSE_JWT_ALGORITHM_NOT_ALLOWED", "PULSE_JWT_KEY_INVALID", "PULSE_JWT_SIGNATURE_INVALID", "PULSE_JWT_CLAIMS_INVALID", "PULSE_JWT_CLAIMS_SCHEMA_INVALID", "PULSE_JWT_CLOCK_UNAVAILABLE", "PULSE_JWT_CLOCK_INVALID", "PULSE_JWT_TARGET_UNSUPPORTED", "PULSE_JWT_OPERATION_FAILED"];
2
+ export type JwtErrorCode = typeof JWT_ERROR_CODES[number];
3
+ export type JwtErrorDetailValue = string | number | boolean | null | readonly JwtErrorDetailValue[] | Readonly<{
4
+ readonly [name: string]: JwtErrorDetailValue;
5
+ }>;
6
+ export declare class JwtError extends Error {
7
+ readonly code: JwtErrorCode;
8
+ readonly detail: Readonly<Record<string, JwtErrorDetailValue>>;
9
+ static [Symbol.hasInstance](value: unknown): boolean;
10
+ constructor(code: JwtErrorCode, detail?: Readonly<Record<string, JwtErrorDetailValue>>);
11
+ }
12
+ export declare function jwtError(code: JwtErrorCode, detail?: Readonly<Record<string, JwtErrorDetailValue>>): JwtError;
13
+ export declare function isJwtError(value: unknown): value is JwtError;
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,wYAcjB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,mBAAmB,EAAE,GAC9B,QAAQ,CAAC;IAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAAE,CAAC,CAAC;AA4B/D,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE/D,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;gBASlD,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM;CAQ7D;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM,GACzD,QAAQ,CAEV;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D"}
package/dist/errors.js ADDED
@@ -0,0 +1,65 @@
1
+ export const JWT_ERROR_CODES = Object.freeze([
2
+ 'PULSE_JWT_BEARER_INVALID',
3
+ 'PULSE_JWT_TOKEN_REQUIRED',
4
+ 'PULSE_JWT_MALFORMED',
5
+ 'PULSE_JWT_LIMIT_EXCEEDED',
6
+ 'PULSE_JWT_ALGORITHM_NOT_ALLOWED',
7
+ 'PULSE_JWT_KEY_INVALID',
8
+ 'PULSE_JWT_SIGNATURE_INVALID',
9
+ 'PULSE_JWT_CLAIMS_INVALID',
10
+ 'PULSE_JWT_CLAIMS_SCHEMA_INVALID',
11
+ 'PULSE_JWT_CLOCK_UNAVAILABLE',
12
+ 'PULSE_JWT_CLOCK_INVALID',
13
+ 'PULSE_JWT_TARGET_UNSUPPORTED',
14
+ 'PULSE_JWT_OPERATION_FAILED',
15
+ ]);
16
+ const MESSAGES = Object.freeze({
17
+ PULSE_JWT_BEARER_INVALID: 'The Authorization header is not a valid Bearer credential.',
18
+ PULSE_JWT_TOKEN_REQUIRED: 'JWT verification requires a Bearer token.',
19
+ PULSE_JWT_MALFORMED: 'The compact JWT is malformed.',
20
+ PULSE_JWT_LIMIT_EXCEEDED: 'The JWT exceeds a bounded resource limit.',
21
+ PULSE_JWT_ALGORITHM_NOT_ALLOWED: 'The JWT protected algorithm is not allowed.',
22
+ PULSE_JWT_KEY_INVALID: 'The JWT verification key is invalid or ambiguous.',
23
+ PULSE_JWT_SIGNATURE_INVALID: 'The JWT signature is invalid.',
24
+ PULSE_JWT_CLAIMS_INVALID: 'The JWT registered claims are invalid.',
25
+ PULSE_JWT_CLAIMS_SCHEMA_INVALID: 'The verified JWT claims do not match the selected schema.',
26
+ PULSE_JWT_CLOCK_UNAVAILABLE: 'Trusted wall-clock time is unavailable.',
27
+ PULSE_JWT_CLOCK_INVALID: 'The supplied wall-clock instant is invalid.',
28
+ PULSE_JWT_TARGET_UNSUPPORTED: 'The selected target cannot realize this JWT verification.',
29
+ PULSE_JWT_OPERATION_FAILED: 'JWT verification failed.',
30
+ });
31
+ function cloneDetail(value) {
32
+ if (Array.isArray(value))
33
+ return Object.freeze(value.map(cloneDetail));
34
+ if (value && typeof value === 'object') {
35
+ return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, child]) => [key, cloneDetail(child)])));
36
+ }
37
+ return value;
38
+ }
39
+ export class JwtError extends Error {
40
+ code;
41
+ detail;
42
+ static [Symbol.hasInstance](value) {
43
+ if (Function.prototype[Symbol.hasInstance].call(this, value))
44
+ return true;
45
+ if (!(value instanceof Error))
46
+ return false;
47
+ const code = Object.getOwnPropertyDescriptor(value, 'code')?.value;
48
+ return typeof code === 'string'
49
+ && JWT_ERROR_CODES.includes(code);
50
+ }
51
+ constructor(code, detail = {}) {
52
+ super(MESSAGES[code]);
53
+ this.name = 'JwtError';
54
+ this.code = code;
55
+ this.detail = cloneDetail(detail);
56
+ Object.freeze(this.detail);
57
+ }
58
+ }
59
+ export function jwtError(code, detail = {}) {
60
+ return new JwtError(code, detail);
61
+ }
62
+ export function isJwtError(value) {
63
+ return value instanceof JwtError;
64
+ }
65
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,0BAA0B;IAC1B,0BAA0B;IAC1B,qBAAqB;IACrB,0BAA0B;IAC1B,iCAAiC;IACjC,uBAAuB;IACvB,6BAA6B;IAC7B,0BAA0B;IAC1B,iCAAiC;IACjC,6BAA6B;IAC7B,yBAAyB;IACzB,8BAA8B;IAC9B,4BAA4B;CACpB,CAAC,CAAC;AAYZ,MAAM,QAAQ,GAA2C,MAAM,CAAC,MAAM,CAAC;IACrE,wBAAwB,EAAE,4DAA4D;IACtF,wBAAwB,EAAE,2CAA2C;IACrE,mBAAmB,EAAE,+BAA+B;IACpD,wBAAwB,EAAE,2CAA2C;IACrE,+BAA+B,EAAE,6CAA6C;IAC9E,qBAAqB,EAAE,mDAAmD;IAC1E,2BAA2B,EAAE,+BAA+B;IAC5D,wBAAwB,EAAE,wCAAwC;IAClE,+BAA+B,EAAE,2DAA2D;IAC5F,2BAA2B,EAAE,yCAAyC;IACtE,uBAAuB,EAAE,6CAA6C;IACtE,4BAA4B,EAAE,2DAA2D;IACzF,0BAA0B,EAAE,0BAA0B;CACvD,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,KAA0B;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACvE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IACnB,MAAM,CAAgD;IAE/D,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAc;QACxC,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1E,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC;QACnE,OAAO,OAAO,IAAI,KAAK,QAAQ;eACzB,eAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,YACE,IAAkB,EAClB,SAAwD,EAAE;QAE1D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAkD,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CACtB,IAAkB,EAClB,SAAwD,EAAE;IAE1D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,KAAK,YAAY,QAAQ,CAAC;AACnC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { PulseContext, PulseParallelEffect } from '@pulse-compute/runtime';
2
+ import { bearer } from './bearer.js';
3
+ import { JwtError, JWT_ERROR_CODES } from './errors.js';
4
+ import { type JwtClaims, type JwtVerifyOptions } from './options.js';
5
+ import { type JwtVerification } from './result.js';
6
+ export { bearer, JwtError, JWT_ERROR_CODES };
7
+ export type { JwtErrorCode, JwtErrorDetailValue, } from './errors.js';
8
+ export type { JwtAlgorithm, JwtClaims, JwtJsonPrimitive, JwtJsonValue, JwtPublicJwk, JwtVerificationKey, JwtVerifyOptions, } from './options.js';
9
+ export type { DeepReadonly, JwtProtectedHeader, JwtVerification, } from './result.js';
10
+ export declare function verify<Claims>(ctx: PulseContext, token: string | undefined, options: JwtVerifyOptions & {
11
+ readonly claimsSchema: string;
12
+ }): PulseParallelEffect<JwtVerification<Claims>>;
13
+ export declare function verify(ctx: PulseContext, token: string | undefined, options: JwtVerifyOptions): PulseParallelEffect<JwtVerification<JwtClaims>>;
14
+ export declare const jwt: Readonly<{
15
+ bearer: typeof bearer;
16
+ verify: typeof verify;
17
+ }>;
18
+ export default jwt;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,wBAAgB,MAAM,CAAC,MAAM,EAC3B,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,gBAAgB,GAAG;IAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC5D,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,wBAAgB,MAAM,CACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,gBAAgB,GACxB,mBAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAmBnD,eAAO,MAAM,GAAG;;;EAGd,CAAC;AAEH,eAAe,GAAG,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import { bearer } from './bearer.js';
2
+ import { JwtError, JWT_ERROR_CODES } from './errors.js';
3
+ import { normalizeJwtVerifyOptions, } from './options.js';
4
+ import { normalizeJwtVerification, } from './result.js';
5
+ import { preflightCompactJwt } from './token.js';
6
+ import { pulseJwtRuntime } from './internal/package-runtime.js';
7
+ export { bearer, JwtError, JWT_ERROR_CODES };
8
+ export function verify(ctx, token, options) {
9
+ preflightCompactJwt(token);
10
+ const normalized = normalizeJwtVerifyOptions(options);
11
+ return pulseJwtRuntime.effect(ctx, 'verify', {
12
+ token: token,
13
+ options: normalized,
14
+ }, (value) => normalizeJwtVerification(value));
15
+ }
16
+ export const jwt = Object.freeze({
17
+ bearer,
18
+ verify,
19
+ });
20
+ export default jwt;
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,yBAAyB,GAG1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AA8B7C,MAAM,UAAU,MAAM,CACpB,GAAiB,EACjB,KAAyB,EACzB,OAAyB;IAEzB,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,eAAe,CAAC,MAAM,CAC3B,GAAG,EACH,QAAQ,EACR;QACE,KAAK,EAAE,KAAe;QACtB,OAAO,EAAE,UAAU;KACpB,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface JwtCapturedWallClock {
2
+ readonly unixEpochSeconds: number;
3
+ readonly trusted: boolean;
4
+ }
5
+ export type JwtWallClockCapture = () => JwtCapturedWallClock | PromiseLike<JwtCapturedWallClock>;
6
+ export declare function captureJwtCurrentDate(capture: JwtWallClockCapture | undefined): Promise<Date>;
7
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/internal/clock.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC7B,MAAM,oBAAoB,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAIjE,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,34 @@
1
+ import { jwtError } from '../errors.js';
2
+ import { isJwtOrdinaryObject, jwtOwnDataProperty, } from './data.js';
3
+ const MAX_DATE_SECONDS = 8_640_000_000_000;
4
+ export async function captureJwtCurrentDate(capture) {
5
+ if (typeof capture !== 'function')
6
+ throw jwtError('PULSE_JWT_CLOCK_UNAVAILABLE');
7
+ let clock;
8
+ try {
9
+ clock = await capture();
10
+ }
11
+ catch {
12
+ throw jwtError('PULSE_JWT_CLOCK_UNAVAILABLE');
13
+ }
14
+ if (!isJwtOrdinaryObject(clock))
15
+ throw jwtError('PULSE_JWT_CLOCK_INVALID');
16
+ const trusted = jwtOwnDataProperty(clock, 'trusted');
17
+ const instant = jwtOwnDataProperty(clock, 'unixEpochSeconds');
18
+ if (!trusted.valid || !instant.valid)
19
+ throw jwtError('PULSE_JWT_CLOCK_INVALID');
20
+ if (!trusted.present || trusted.value !== true)
21
+ throw jwtError('PULSE_JWT_CLOCK_UNAVAILABLE');
22
+ const seconds = instant.present ? instant.value : undefined;
23
+ if (typeof seconds !== 'number'
24
+ || !Number.isFinite(seconds)
25
+ || seconds < 0
26
+ || seconds > MAX_DATE_SECONDS) {
27
+ throw jwtError('PULSE_JWT_CLOCK_INVALID');
28
+ }
29
+ const date = new Date(seconds * 1000);
30
+ if (!Number.isFinite(date.getTime()))
31
+ throw jwtError('PULSE_JWT_CLOCK_INVALID');
32
+ return date;
33
+ }
34
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/internal/clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAUnB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAwC;IAExC,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,MAAM,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACjF,IAAI,KAA2B,CAAC;IAChC,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAAE,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAChF,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;QAAE,MAAM,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,IACE,OAAO,OAAO,KAAK,QAAQ;WACxB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;WACzB,OAAO,GAAG,CAAC;WACX,OAAO,GAAG,gBAAgB,EAC7B,CAAC;QACD,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface JwtOwnDataProperty {
2
+ readonly present: boolean;
3
+ readonly valid: boolean;
4
+ readonly value?: unknown;
5
+ }
6
+ export declare function isJwtOrdinaryObject(value: unknown): value is Readonly<Record<string, unknown>>;
7
+ export declare function jwtOwnDataProperty(value: object, name: string): JwtOwnDataProperty;
8
+ export declare function jwtDataEntries(value: object): readonly (readonly [string, unknown])[] | undefined;
9
+ export declare function jwtDataRecord(value: unknown): ReadonlyMap<string, unknown> | undefined;
10
+ export declare function jwtDenseArrayValues(value: unknown): readonly unknown[] | undefined;
11
+ export declare function defineJwtDataProperty(target: object, name: string, value: unknown): void;
12
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/internal/data.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQ5C;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,kBAAkB,CAkBpB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAarD;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAI1C;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,SAAS,OAAO,EAAE,GAAG,SAAS,CAmBhC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,IAAI,CAON"}
@@ -0,0 +1,86 @@
1
+ export function isJwtOrdinaryObject(value) {
2
+ if (!value || typeof value !== 'object' || Array.isArray(value))
3
+ return false;
4
+ try {
5
+ const prototype = Object.getPrototypeOf(value);
6
+ return prototype === Object.prototype || prototype === null;
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ export function jwtOwnDataProperty(value, name) {
13
+ try {
14
+ const descriptor = Object.getOwnPropertyDescriptor(value, name);
15
+ if (!descriptor)
16
+ return Object.freeze({ present: false, valid: true });
17
+ if (!descriptor.enumerable
18
+ || !Object.prototype.hasOwnProperty.call(descriptor, 'value')) {
19
+ return Object.freeze({ present: true, valid: false });
20
+ }
21
+ return Object.freeze({
22
+ present: true,
23
+ valid: true,
24
+ value: descriptor.value,
25
+ });
26
+ }
27
+ catch {
28
+ return Object.freeze({ present: true, valid: false });
29
+ }
30
+ }
31
+ export function jwtDataEntries(value) {
32
+ try {
33
+ const entries = [];
34
+ for (const key of Reflect.ownKeys(value)) {
35
+ if (typeof key !== 'string')
36
+ return undefined;
37
+ const property = jwtOwnDataProperty(value, key);
38
+ if (!property.present || !property.valid)
39
+ return undefined;
40
+ entries.push(Object.freeze([key, property.value]));
41
+ }
42
+ return Object.freeze(entries);
43
+ }
44
+ catch {
45
+ return undefined;
46
+ }
47
+ }
48
+ export function jwtDataRecord(value) {
49
+ if (!isJwtOrdinaryObject(value))
50
+ return undefined;
51
+ const entries = jwtDataEntries(value);
52
+ return entries ? new Map(entries) : undefined;
53
+ }
54
+ export function jwtDenseArrayValues(value) {
55
+ if (!Array.isArray(value))
56
+ return undefined;
57
+ try {
58
+ for (const key of Reflect.ownKeys(value)) {
59
+ if (key === 'length')
60
+ continue;
61
+ if (typeof key !== 'string' || !/^(?:0|[1-9]\d*)$/.test(key)) {
62
+ return undefined;
63
+ }
64
+ }
65
+ const output = [];
66
+ for (let index = 0; index < value.length; index += 1) {
67
+ const property = jwtOwnDataProperty(value, String(index));
68
+ if (!property.present || !property.valid)
69
+ return undefined;
70
+ output.push(property.value);
71
+ }
72
+ return Object.freeze(output);
73
+ }
74
+ catch {
75
+ return undefined;
76
+ }
77
+ }
78
+ export function defineJwtDataProperty(target, name, value) {
79
+ Object.defineProperty(target, name, {
80
+ configurable: true,
81
+ enumerable: true,
82
+ value,
83
+ writable: true,
84
+ });
85
+ }
86
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/internal/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import packageRuntime from '@pulse-compute/runtime/package';
2
+ export declare const pulseJwtRuntime: packageRuntime.PulsePackageRuntime<{
3
+ readonly verify: {
4
+ readonly kind: "jwt.verify";
5
+ readonly capability: "jwt.verify";
6
+ readonly result: "jwt-verification";
7
+ };
8
+ }>;
9
+ //# sourceMappingURL=package-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/package-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAE5D,eAAO,MAAM,eAAe;;;;;;EAWjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import packageRuntime from '@pulse-compute/runtime/package';
2
+ export const pulseJwtRuntime = packageRuntime.createPackageRuntime({
3
+ package: '@pulse-compute/jwt',
4
+ contractId: 'pulse.jwt',
5
+ providerKind: 'jwt',
6
+ operations: {
7
+ verify: {
8
+ kind: 'jwt.verify',
9
+ capability: 'jwt.verify',
10
+ result: 'jwt-verification',
11
+ },
12
+ },
13
+ });
14
+ //# sourceMappingURL=package-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-runtime.js","sourceRoot":"","sources":["../../src/internal/package-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,oBAAoB,CAAC;IACjE,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,WAAW;IACvB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,YAAY;YACxB,MAAM,EAAE,kBAAkB;SAC3B;KACF;CACO,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JwtClaims, NormalizedJwtVerifyOptions } from '../options.js';
2
+ export declare function validateRegisteredClaims(claims: JwtClaims, options: NormalizedJwtVerifyOptions, currentDate: Date): void;
3
+ //# sourceMappingURL=registered-claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registered-claims.d.ts","sourceRoot":"","sources":["../../src/internal/registered-claims.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AA+DvB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,0BAA0B,EACnC,WAAW,EAAE,IAAI,GAChB,IAAI,CAuCN"}