@datalayer/personal-agent-protocol 0.2.0 → 0.3.1
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/LICENSE +29 -0
- package/README.md +141 -14
- package/lib/auth.d.ts +35 -1
- package/lib/auth.d.ts.map +1 -1
- package/lib/auth.js +230 -2
- package/lib/auth.js.map +1 -1
- package/lib/crypto.d.ts +1 -1
- package/lib/crypto.d.ts.map +1 -1
- package/lib/crypto.js +1 -2
- package/lib/crypto.js.map +1 -1
- package/lib/discovery.d.ts +1 -0
- package/lib/discovery.d.ts.map +1 -1
- package/lib/discovery.js +4 -3
- package/lib/discovery.js.map +1 -1
- package/lib/errors.d.ts +7 -0
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +6 -0
- package/lib/errors.js.map +1 -1
- package/lib/identity.d.ts +19 -0
- package/lib/identity.d.ts.map +1 -0
- package/lib/identity.js +111 -0
- package/lib/identity.js.map +1 -0
- package/lib/index.d.ts +8 -6
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +667 -656
- package/lib/index.js.map +4 -4
- package/lib/models.d.ts +15 -0
- package/lib/models.d.ts.map +1 -1
- package/lib/models.js +53 -0
- package/lib/models.js.map +1 -1
- package/lib/reactor.d.ts +16 -1
- package/lib/reactor.d.ts.map +1 -1
- package/lib/reactor.js +5 -1
- package/lib/reactor.js.map +1 -1
- package/lib/secret.d.ts +9 -0
- package/lib/secret.d.ts.map +1 -0
- package/lib/secret.js +21 -0
- package/lib/secret.js.map +1 -0
- package/lib/server.d.ts +15 -0
- package/lib/server.d.ts.map +1 -0
- package/lib/server.js +74 -0
- package/lib/server.js.map +1 -0
- package/lib/sessions.d.ts +6 -7
- package/lib/sessions.d.ts.map +1 -1
- package/lib/sessions.js +6 -19
- package/lib/sessions.js.map +1 -1
- package/package.json +14 -1
package/lib/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "
|
|
4
|
-
"sourcesContent": ["/** Safe base error for Personal Agent Protocol failures. */\nexport class PersonalAgentProtocolError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly details: Readonly<Record<string, unknown>>;\n\n constructor(\n code: string,\n message: string,\n options: {\n statusCode?: number;\n details?: Readonly<Record<string, unknown>>;\n cause?: unknown;\n } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = \"PersonalAgentProtocolError\";\n this.code = code;\n this.statusCode = options.statusCode;\n this.details = options.details ?? {};\n }\n\n override toString(): string {\n return `${this.code}: ${this.message}`;\n }\n}\n\nexport class ProtocolValidationError extends PersonalAgentProtocolError {\n constructor(code: string, message: string, options: { cause?: unknown } = {}) {\n super(code, message, options);\n this.name = \"ProtocolValidationError\";\n }\n}\n\nexport class DiscoveryError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"DiscoveryError\";\n }\n}\n\nexport class AuthorizationError extends PersonalAgentProtocolError {\n constructor(code: string, message: string, options: { cause?: unknown } = {}) {\n super(code, message, options);\n this.name = \"AuthorizationError\";\n }\n}\n\nexport class SessionError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; details?: Readonly<Record<string, unknown>>; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"SessionError\";\n }\n}\n\nexport class ProofError extends PersonalAgentProtocolError {\n constructor(code: string, message: string, options: { cause?: unknown } = {}) {\n super(code, message, options);\n this.name = \"ProofError\";\n }\n}\n", "const encoder = new TextEncoder(), decoder = new TextDecoder(), strictDecoder = new TextDecoder(\"utf-8\", { fatal: !0 }), MAX_INT32 = 2 ** 32;\nfunction concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0), buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers)\n buf.set(buffer, i), i += buffer.length;\n return buf;\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32)\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 255], offset);\n}\nfunction uint64be(value) {\n const high = Math.floor(value / MAX_INT32), low = value % MAX_INT32, buf = new Uint8Array(8);\n return writeUInt32BE(buf, high, 0), writeUInt32BE(buf, low, 4), buf;\n}\nfunction uint32be(value) {\n const buf = new Uint8Array(4);\n return writeUInt32BE(buf, value), buf;\n}\nconst NON_ASCII = /[^\\x00-\\x7f]/;\nfunction encode(string) {\n if (typeof string == \"string\" && string.length >= 128) {\n if (NON_ASCII.test(string))\n throw new TypeError(\"non-ASCII string encountered in encode()\");\n return encoder.encode(string);\n }\n const bytes = new Uint8Array(string.length);\n for (let i = 0; i < string.length; i++) {\n const code = string.charCodeAt(i);\n if (code > 127)\n throw new TypeError(\"non-ASCII string encountered in encode()\");\n bytes[i] = code;\n }\n return bytes;\n}\nfunction encodeBase64(input, url = !1) {\n if (Uint8Array.prototype.toBase64)\n return input.toBase64({ alphabet: url ? \"base64url\" : \"base64\", omitPadding: url });\n const CHUNK_SIZE = 32768, arr = [];\n for (let i = 0; i < input.length; i += CHUNK_SIZE)\n arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n const encoded = btoa(arr.join(\"\"));\n return url ? encoded.replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\") : encoded;\n}\nfunction decodeBase64(encoded, url = !1) {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(encoded, { alphabet: url ? \"base64url\" : \"base64\" });\n if (url) {\n if (encoded.includes(\"+\") || encoded.includes(\"/\"))\n throw new TypeError(\"Invalid base64url\");\n encoded = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n }\n const binary = atob(encoded), bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nasync function digest(algorithm, data) {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n}\nexport {\n concat,\n decodeBase64,\n decoder,\n digest,\n encode,\n encodeBase64,\n encoder,\n strictDecoder,\n uint32be,\n uint64be\n};\n", "class JOSEError extends Error {\n static code = \"ERR_JOSE_GENERIC\";\n code = \"ERR_JOSE_GENERIC\";\n constructor(message, options) {\n super(message, options), this.name = this.constructor.name, Error.captureStackTrace?.(this, this.constructor);\n }\n}\nclass JWTClaimValidationFailed extends JOSEError {\n static code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n claim;\n reason;\n payload;\n constructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n super(message, { cause: { claim, reason, payload } }), this.claim = claim, this.reason = reason, this.payload = payload;\n }\n}\nclass JWTExpired extends JOSEError {\n static code = \"ERR_JWT_EXPIRED\";\n code = \"ERR_JWT_EXPIRED\";\n claim;\n reason;\n payload;\n constructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n super(message, { cause: { claim, reason, payload } }), this.claim = claim, this.reason = reason, this.payload = payload;\n }\n}\nclass JOSEAlgNotAllowed extends JOSEError {\n static code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n}\nclass JOSENotSupported extends JOSEError {\n static code = \"ERR_JOSE_NOT_SUPPORTED\";\n code = \"ERR_JOSE_NOT_SUPPORTED\";\n}\nclass JWEDecryptionFailed extends JOSEError {\n static code = \"ERR_JWE_DECRYPTION_FAILED\";\n code = \"ERR_JWE_DECRYPTION_FAILED\";\n constructor(message = \"decryption operation failed\", options) {\n super(message, options);\n }\n}\nclass JWEInvalid extends JOSEError {\n static code = \"ERR_JWE_INVALID\";\n code = \"ERR_JWE_INVALID\";\n}\nclass JWSInvalid extends JOSEError {\n static code = \"ERR_JWS_INVALID\";\n code = \"ERR_JWS_INVALID\";\n}\nclass JWTInvalid extends JOSEError {\n static code = \"ERR_JWT_INVALID\";\n code = \"ERR_JWT_INVALID\";\n}\nclass JWKInvalid extends JOSEError {\n static code = \"ERR_JWK_INVALID\";\n code = \"ERR_JWK_INVALID\";\n}\nclass JWKSInvalid extends JOSEError {\n static code = \"ERR_JWKS_INVALID\";\n code = \"ERR_JWKS_INVALID\";\n}\nclass JWKSNoMatchingKey extends JOSEError {\n static code = \"ERR_JWKS_NO_MATCHING_KEY\";\n code = \"ERR_JWKS_NO_MATCHING_KEY\";\n constructor(message = \"no applicable key found in the JSON Web Key Set\", options) {\n super(message, options);\n }\n}\nclass JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator] = async function* () {\n };\n static code = \"ERR_JWKS_MULTIPLE_MATCHING_KEYS\";\n code = \"ERR_JWKS_MULTIPLE_MATCHING_KEYS\";\n constructor(message = \"multiple matching keys found in the JSON Web Key Set\", options) {\n super(message, options);\n }\n}\nclass JWKSTimeout extends JOSEError {\n static code = \"ERR_JWKS_TIMEOUT\";\n code = \"ERR_JWKS_TIMEOUT\";\n constructor(message = \"request timed out\", options) {\n super(message, options);\n }\n}\nclass JWSSignatureVerificationFailed extends JOSEError {\n static code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n constructor(message = \"signature verification failed\", options) {\n super(message, options);\n }\n}\nexport {\n JOSEAlgNotAllowed,\n JOSEError,\n JOSENotSupported,\n JWEDecryptionFailed,\n JWEInvalid,\n JWKInvalid,\n JWKSInvalid,\n JWKSMultipleMatchingKeys,\n JWKSNoMatchingKey,\n JWKSTimeout,\n JWSInvalid,\n JWSSignatureVerificationFailed,\n JWTClaimValidationFailed,\n JWTExpired,\n JWTInvalid\n};\n", "import { encoder, decoder, encodeBase64, decodeBase64 } from \"../lib/buffer_utils.js\";\nconst invalid = \"The input to be decoded is not correctly encoded.\";\nfunction decode(input) {\n try {\n return decodeBase64(typeof input == \"string\" ? input : decoder.decode(input), !0);\n } catch (cause) {\n throw new TypeError(invalid, { cause });\n }\n}\nfunction encode(input) {\n return encodeBase64(typeof input == \"string\" ? encoder.encode(input) : input, !0);\n}\nexport {\n decode,\n encode\n};\n", "import { JOSENotSupported, JWSInvalid } from \"../util/errors.js\";\nimport { decode } from \"../util/base64url.js\";\nimport { encode, strictDecoder } from \"./buffer_utils.js\";\nfunction assertUint8Array(input, label) {\n if (!(input instanceof Uint8Array))\n throw new TypeError(`${label} must be an instance of Uint8Array`);\n}\nfunction isObject(input) {\n if (typeof input != \"object\" || input === null || Object.prototype.toString.call(input) !== \"[object Object]\")\n return !1;\n const prototype = Object.getPrototypeOf(input);\n return prototype === null || Object.getPrototypeOf(prototype) === null;\n}\nfunction isJwkSet(input) {\n return isObject(input) && Array.isArray(input.keys) && Array.from(input.keys).every(isObject);\n}\nfunction isDisjoint(...headers) {\n const parameters = /* @__PURE__ */ new Set();\n for (const header of headers)\n if (header)\n for (const parameter of Object.keys(header)) {\n if (parameters.has(parameter))\n return !1;\n parameters.add(parameter);\n }\n return !0;\n}\nfunction assertNotSet(value, name) {\n if (value !== void 0)\n throw new TypeError(`${name} can only be called once`);\n}\nfunction decodeBase64url(value, label, ErrorClass) {\n try {\n return decode(value);\n } catch {\n throw new ErrorClass(`Failed to base64url decode the ${label}`);\n }\n}\nfunction encodeBase64url(value, label, ErrorClass) {\n try {\n return encode(value);\n } catch {\n throw new ErrorClass(`The ${label} is not a valid base64url string`);\n }\n}\nfunction parseJoseHeader(b64, ErrorClass, message) {\n let parsed;\n try {\n parsed = JSON.parse(strictDecoder.decode(decode(b64)));\n } catch {\n throw new ErrorClass(message);\n }\n if (!isObject(parsed))\n throw new ErrorClass(message);\n return parsed;\n}\nconst JWS_RECOGNIZED = { __proto__: null, b64: !0 }, JWE_RECOGNIZED = { __proto__: null };\nfunction validateAlgorithms(option, algorithms) {\n if (algorithms !== void 0 && (!Array.isArray(algorithms) || algorithms.some((s) => typeof s != \"string\")))\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n return algorithms === void 0 ? void 0 : new Set(algorithms);\n}\nfunction validateCritDuplicates(Err, protectedHeader) {\n const { crit } = protectedHeader ?? {};\n if (Array.isArray(crit) && new Set(crit).size !== crit.length)\n throw new Err('\"crit\" (Critical) Header Parameter MUST NOT contain duplicate values');\n}\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== void 0 && protectedHeader?.crit === void 0)\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n if (!protectedHeader || protectedHeader.crit === void 0)\n return [];\n if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input) => typeof input != \"string\" || input.length === 0))\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n const recognized = recognizedOption === void 0 ? recognizedDefault : { __proto__: null, ...recognizedOption, ...recognizedDefault };\n for (const parameter of protectedHeader.crit) {\n if (!(parameter in recognized))\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n if (!Object.hasOwn(joseHeader, parameter) || joseHeader[parameter] === void 0)\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n if (recognized[parameter] && (!Object.hasOwn(protectedHeader, parameter) || protectedHeader[parameter] === void 0))\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n return protectedHeader.crit;\n}\nfunction validateB64(protectedHeader, extensions) {\n if (extensions.includes(\"b64\")) {\n const b64 = protectedHeader.b64;\n if (typeof b64 != \"boolean\")\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n return b64;\n }\n return !0;\n}\nfunction serializeJoseHeader(Err, header) {\n let serialized, parsed;\n try {\n serialized = JSON.stringify(header), parsed = JSON.parse(serialized);\n } catch (cause) {\n throw new Err(\"JOSE Header is not valid JSON\", { cause });\n }\n if (!isObject(parsed))\n throw new Err(\"JOSE Header is not a JSON object\");\n return [parsed, serialized];\n}\nexport {\n JWE_RECOGNIZED,\n JWS_RECOGNIZED,\n assertNotSet,\n assertUint8Array,\n decodeBase64url,\n encodeBase64url,\n isDisjoint,\n isJwkSet,\n isObject,\n parseJoseHeader,\n serializeJoseHeader,\n validateAlgorithms,\n validateB64,\n validateCrit,\n validateCritDuplicates\n};\n", "import { isObject } from \"./validate.js\";\nimport { decode } from \"../util/base64url.js\";\nimport { JOSENotSupported } from \"../util/errors.js\";\nconst tag = (key) => key[Symbol.toStringTag], jwkMatchesOp = (entry, key, usage) => {\n const { alg } = entry;\n if (key.use !== void 0) {\n const expected = usage === \"sign\" || usage === \"verify\" ? \"sig\" : \"enc\";\n if (key.use !== expected)\n throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n }\n if (key.alg !== void 0 && key.alg !== alg)\n throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n if (Array.isArray(key.key_ops)) {\n const expectedKeyOp = usage === \"encrypt\" || usage === \"decrypt\" ? entry.ops?.[usage === \"encrypt\" ? 0 : 1] : usage;\n if (expectedKeyOp && !key.key_ops.includes(expectedKeyOp))\n throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n }\n};\nasync function prepareKey(entry, key, usage) {\n const { alg, secret } = entry, privateKey = usage === \"decrypt\" || usage === \"sign\";\n if (secret && key instanceof Uint8Array)\n return key;\n let normalized, keyObject;\n if (isObject(key)) {\n if (normalized = normalizeJwk(key), typeof normalized.kty != \"string\")\n throw invalidKeyType(alg, key, secret);\n if (!(secret ? normalized.kty === \"oct\" && typeof normalized.k == \"string\" : normalized.kty !== \"oct\" && (privateKey ? normalized.kty === \"AKP\" && typeof normalized.priv == \"string\" || typeof normalized.d == \"string\" : normalized.d === void 0 && normalized.priv === void 0)))\n throw new TypeError(secret ? 'JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present' : `JSON Web Key for this operation must be a ${privateKey ? \"private\" : \"public\"} JWK`);\n if (jwkMatchesOp(entry, normalized, usage), normalized.kty === \"oct\")\n return decode(normalized.k);\n if (!Object.isFrozen(key)) {\n const { key_ops } = key;\n Array.isArray(key_ops) && Object.freeze(key_ops), Object.freeze(key);\n }\n } else {\n if (!isKeyLike(key))\n throw invalidKeyType(alg, key, secret);\n const expectedType = secret ? \"secret\" : privateKey ? \"private\" : \"public\";\n if (key.type !== expectedType && (secret || [\"secret\", \"public\", \"private\"].includes(key.type)))\n throw new TypeError(`${tag(key)} instances must be of type \"${expectedType}\" for the ${alg} algorithm`);\n if (isCryptoKey(key))\n return key;\n if (keyObject = key, keyObject.type === \"secret\")\n return keyObject.export();\n }\n cache ||= /* @__PURE__ */ new WeakMap();\n const cacheKey = key;\n let cached = cache.get(cacheKey);\n if (cached?.[alg])\n return cached[alg];\n if (cached || cache.set(cacheKey, cached = {}), keyObject && typeof keyObject.toCryptoKey == \"function\") {\n const isPublic = keyObject.type === \"public\", crv = nist[keyObject.asymmetricKeyDetails?.namedCurve], params = entry.resolve?.({ crv, asymmetricKeyType: keyObject.asymmetricKeyType }) ?? entry.subtle;\n return cached[alg] = keyObject.toCryptoKey(params, isPublic, entry.usages[isPublic ? 0 : 1]);\n }\n return normalized ??= keyObject.export({ format: \"jwk\" }), normalized.alg = alg, cached[alg] = await jwkToKey(entry, normalized);\n}\nlet cache;\nconst nist = {\n __proto__: null,\n prime256v1: \"P-256\",\n secp384r1: \"P-384\",\n secp521r1: \"P-521\"\n};\nfunction assertCryptoKey(key) {\n if (!isCryptoKey(key))\n throw new Error(\"CryptoKey instance expected\");\n}\nconst isCryptoKey = (key) => {\n if (key?.[Symbol.toStringTag] === \"CryptoKey\")\n return !0;\n try {\n return key instanceof CryptoKey;\n } catch {\n return !1;\n }\n}, isKeyObject = (key) => key?.[Symbol.toStringTag] === \"KeyObject\", isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);\nfunction message(msg, actual, ...types) {\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(\", \")}, or ${last}.`;\n } else types.length === 2 ? msg += `one of type ${types[0]} or ${types[1]}.` : msg += `of type ${types[0]}.`;\n return actual == null ? msg += ` Received ${actual}` : typeof actual == \"function\" && actual.name ? msg += ` Received function ${actual.name}` : typeof actual == \"object\" && actual != null && actual.constructor?.name && (msg += ` Received an instance of ${actual.constructor.name}`), msg;\n}\nconst invalidKeyInput = (actual, ...types) => message(\"Key must be \", actual, ...types);\nfunction invalidKeyType(alg, actual, secret) {\n const types = [\"CryptoKey\", \"KeyObject\", \"JSON Web Key\"];\n return secret && types.push(\"Uint8Array\"), new TypeError(message(`Key for the ${alg} algorithm must be `, actual, ...types));\n}\nconst unusable = (name, prop = \"algorithm.name\") => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\nfunction checkUsage(key, usage) {\n if (usage && !key.usages.includes(usage))\n throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n}\nfunction checkModulusLength(alg, key) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength != \"number\" || modulusLength < 2048)\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n}\nfunction checkCryptoKey(key, expected, usage) {\n const algorithm = key.algorithm;\n if (algorithm.name !== expected.name)\n throw unusable(expected.name);\n if (expected.hash && algorithm.hash?.name !== expected.hash)\n throw unusable(expected.hash, \"algorithm.hash\");\n if (expected.namedCurve && algorithm.namedCurve !== expected.namedCurve)\n throw unusable(expected.namedCurve, \"algorithm.namedCurve\");\n if (expected.length !== void 0 && algorithm.length !== expected.length)\n throw unusable(expected.length, \"algorithm.length\");\n checkUsage(key, usage);\n}\nfunction snapshotJwk(jwk) {\n return { __proto__: null, ...jwk };\n}\nfunction normalizeJwk(jwk) {\n const normalized = snapshotJwk(jwk);\n if (normalized.ext !== void 0 && typeof normalized.ext != \"boolean\")\n throw new TypeError('\"ext\" (Extractable) Parameter must be a boolean');\n if (normalized.key_ops !== void 0) {\n const value = normalized.key_ops, keyOps = Array.isArray(value) ? [...value] : void 0;\n if (!keyOps || keyOps.some((operation) => typeof operation != \"string\") || new Set(keyOps).size !== keyOps.length)\n throw new TypeError('\"key_ops\" (Key Operations) Parameter must be an array of unique strings');\n normalized.key_ops = keyOps;\n }\n return normalized;\n}\nfunction validateExtractableOption(extractable) {\n if (extractable !== void 0 && typeof extractable != \"boolean\")\n throw new TypeError('\"extractable\" option must be a boolean');\n return extractable;\n}\nasync function jwkToKey(entry, jwk, extractable) {\n if (!entry.kty.includes(jwk.kty))\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n const algorithm = entry.resolve?.({ kty: jwk.kty, crv: jwk.crv }) ?? entry.subtle, isPrivate = !!(jwk.d || jwk.priv), keyData = { ...jwk, ext: extractable ?? jwk.ext };\n return keyData.kty !== \"AKP\" && delete keyData.alg, delete keyData.use, crypto.subtle.importKey(\"jwk\", keyData, algorithm, keyData.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);\n}\nasync function rawKey(key, expected, usage, extractable = !1) {\n return key instanceof Uint8Array && (key = await crypto.subtle.importKey(\"raw\", key, expected, extractable, [usage])), checkCryptoKey(key, expected, usage), key;\n}\nexport {\n assertCryptoKey,\n checkCryptoKey,\n checkModulusLength,\n checkUsage,\n invalidKeyInput,\n isCryptoKey,\n isKeyLike,\n isKeyObject,\n jwkToKey,\n normalizeJwk,\n prepareKey,\n rawKey,\n snapshotJwk,\n validateExtractableOption\n};\n", "function table(entries) {\n const out = { __proto__: null };\n for (const alg in entries)\n out[alg] = { ...entries[alg], alg };\n return out;\n}\nexport {\n table\n};\n", "import { JOSENotSupported } from \"../util/errors.js\";\nimport { table } from \"./key_descriptor.js\";\nconst wrap = [\n [\"encrypt\", \"wrapKey\"],\n [\"decrypt\", \"unwrapKey\"]\n], derive = [[], [\"deriveBits\"]], none = [[], []];\nfunction rsaes(bits) {\n return {\n kty: [\"RSA\"],\n mode: \"key-encryption\",\n subtle: { name: \"RSA-OAEP\", hash: `SHA-${bits}` },\n usages: wrap,\n ops: [\"wrapKey\", \"unwrapKey\"]\n };\n}\nfunction ecdh(mode) {\n return {\n kty: [\"EC\", \"OKP\"],\n mode,\n subtle: { name: \"ECDH\" },\n resolve: ({ kty, crv, asymmetricKeyType }) => {\n if (crv === \"X25519\" || asymmetricKeyType === \"x25519\")\n return { name: \"X25519\" };\n if (kty === \"OKP\")\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n return { name: \"ECDH\", namedCurve: crv };\n },\n usages: derive,\n ops: [void 0, \"deriveBits\"]\n };\n}\nfunction aeskw(bits, gcm = !1) {\n return {\n kty: [\"oct\"],\n mode: \"key-wrapping\",\n secret: !0,\n subtle: { name: gcm ? \"AES-GCM\" : \"AES-KW\", length: bits },\n usages: none,\n ops: gcm ? [\"encrypt\", \"decrypt\"] : [\"wrapKey\", \"unwrapKey\"]\n };\n}\nfunction pbes2() {\n return {\n kty: [\"oct\"],\n mode: \"key-wrapping\",\n secret: !0,\n subtle: { name: \"PBKDF2\" },\n usages: none,\n ops: [\"deriveBits\", \"deriveBits\"]\n };\n}\nconst JWE = table({\n dir: {\n kty: [\"oct\"],\n mode: \"direct-encryption\",\n secret: !0,\n subtle: { name: \"AES-GCM\" },\n usages: none,\n ops: [\"encrypt\", \"decrypt\"]\n },\n \"RSA-OAEP\": rsaes(1),\n \"RSA-OAEP-256\": rsaes(256),\n \"RSA-OAEP-384\": rsaes(384),\n \"RSA-OAEP-512\": rsaes(512),\n \"ECDH-ES\": ecdh(\"direct-key-agreement\"),\n \"ECDH-ES+A128KW\": ecdh(\"key-agreement-with-key-wrapping\"),\n \"ECDH-ES+A192KW\": ecdh(\"key-agreement-with-key-wrapping\"),\n \"ECDH-ES+A256KW\": ecdh(\"key-agreement-with-key-wrapping\"),\n A128KW: aeskw(128),\n A192KW: aeskw(192),\n A256KW: aeskw(256),\n A128GCMKW: aeskw(128, !0),\n A192GCMKW: aeskw(192, !0),\n A256GCMKW: aeskw(256, !0),\n \"PBES2-HS256+A128KW\": pbes2(),\n \"PBES2-HS384+A192KW\": pbes2(),\n \"PBES2-HS512+A256KW\": pbes2()\n}), contentOps = [\"encrypt\", \"decrypt\"];\nfunction contentEncryption(bits, cbc = !1) {\n return {\n kty: [\"oct\"],\n secret: !0,\n subtle: { name: cbc ? \"AES-CBC\" : \"AES-GCM\", length: bits },\n usages: none,\n ops: contentOps,\n cekBits: bits,\n ivBits: cbc ? 128 : 96,\n cbc\n };\n}\nconst ENC = table({\n A128GCM: contentEncryption(128),\n A192GCM: contentEncryption(192),\n A256GCM: contentEncryption(256),\n \"A128CBC-HS256\": contentEncryption(256, !0),\n \"A192CBC-HS384\": contentEncryption(384, !0),\n \"A256CBC-HS512\": contentEncryption(512, !0)\n});\nfunction unsupported(parameter, name) {\n throw new JOSENotSupported(`Invalid or unsupported \"${parameter}\" (JWE ${name}) header value`);\n}\nfunction jweAlgorithm(alg) {\n return (typeof alg == \"string\" ? JWE[alg] : void 0) ?? unsupported(\"alg\", \"Algorithm\");\n}\nfunction isJWECEKTransport(algorithm) {\n return algorithm.mode === \"key-wrapping\" || algorithm.mode === \"key-encryption\" || algorithm.mode === \"key-agreement-with-key-wrapping\";\n}\nfunction jweEncryption(enc) {\n return (typeof enc == \"string\" ? ENC[enc] : void 0) ?? unsupported(\"enc\", \"Encryption Algorithm\");\n}\nexport {\n JWE,\n isJWECEKTransport,\n jweAlgorithm,\n jweEncryption\n};\n", "import { JOSENotSupported } from \"../util/errors.js\";\nimport { table } from \"./key_descriptor.js\";\nconst sig = [[\"verify\"], [\"sign\"]];\nfunction hmac(bits) {\n const subtle = { name: \"HMAC\", hash: `SHA-${bits}` };\n return { kty: [\"oct\"], secret: !0, subtle, signing: subtle, usages: sig };\n}\nfunction rsa(bits, saltLength) {\n const subtle = { name: saltLength ? \"RSA-PSS\" : \"RSASSA-PKCS1-v1_5\", hash: `SHA-${bits}` };\n return {\n kty: [\"RSA\"],\n subtle,\n signing: saltLength ? { ...subtle, saltLength } : subtle,\n usages: sig,\n minRsaBits: 2048\n };\n}\nfunction ecdsa(crv, bits) {\n return {\n kty: [\"EC\"],\n crv,\n subtle: { name: \"ECDSA\", namedCurve: crv },\n signing: { name: \"ECDSA\", hash: `SHA-${bits}` },\n usages: sig\n };\n}\nfunction eddsa() {\n const subtle = { name: \"Ed25519\" };\n return {\n kty: [\"OKP\"],\n crv: \"Ed25519\",\n subtle,\n signing: subtle,\n usages: sig\n };\n}\nfunction mldsa(bits) {\n const subtle = { name: `ML-DSA-${bits}` };\n return {\n kty: [\"AKP\"],\n subtle,\n signing: subtle,\n usages: sig\n };\n}\nconst JWS = table({\n HS256: hmac(256),\n HS384: hmac(384),\n HS512: hmac(512),\n RS256: rsa(256),\n RS384: rsa(384),\n RS512: rsa(512),\n PS256: rsa(256, 32),\n PS384: rsa(384, 48),\n PS512: rsa(512, 64),\n ES256: ecdsa(\"P-256\", 256),\n ES384: ecdsa(\"P-384\", 384),\n ES512: ecdsa(\"P-521\", 512),\n EdDSA: eddsa(),\n Ed25519: eddsa(),\n \"ML-DSA-44\": mldsa(44),\n \"ML-DSA-65\": mldsa(65),\n \"ML-DSA-87\": mldsa(87)\n});\nfunction jwsAlgorithm(alg) {\n const entry = typeof alg == \"string\" ? JWS[alg] : void 0;\n if (!entry)\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n return entry;\n}\nexport {\n JWS,\n jwsAlgorithm\n};\n", "import { jwsAlgorithm } from \"./jws_algorithms.js\";\nimport { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from \"../util/errors.js\";\nimport { concat, decoder, encoder, encode } from \"./buffer_utils.js\";\nimport { decodeBase64url, encodeBase64url, parseJoseHeader, isDisjoint, isObject, validateB64, validateCrit, validateAlgorithms, JWS_RECOGNIZED } from \"./validate.js\";\nimport { prepareKey, rawKey, checkModulusLength } from \"./key.js\";\nfunction snapshotJws(jws, sharedPayload) {\n const encodedProtected = jws.protected, inputHeader = jws.header, header = isObject(inputHeader) ? { ...inputHeader } : inputHeader;\n let payload = sharedPayload ? sharedPayload[0] : jws.payload;\n !sharedPayload && payload instanceof Uint8Array && (payload = new Uint8Array(payload));\n const signature = jws.signature, snapshot = { payload, signature };\n if (encodedProtected !== void 0 && (snapshot.protected = encodedProtected), inputHeader !== void 0 && (snapshot.header = header), encodedProtected === void 0 && header === void 0)\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n if (encodedProtected !== void 0 && typeof encodedProtected != \"string\")\n throw new JWSInvalid(\"JWS Protected Header incorrect type\");\n if (payload === void 0)\n throw new JWSInvalid(\"JWS Payload missing\");\n if (typeof signature != \"string\")\n throw new JWSInvalid(\"JWS Signature missing or incorrect type\");\n if (header !== void 0 && !isObject(header))\n throw new JWSInvalid(\"JWS Unprotected Header incorrect type\");\n return snapshot;\n}\nfunction prepareVerify(options) {\n return [options && validateAlgorithms(\"algorithms\", options.algorithms), options?.crit];\n}\nfunction parseProtectedHeader(encodedProtected) {\n return encodedProtected === void 0 ? {} : parseJoseHeader(encodedProtected, JWSInvalid, \"JWS Protected Header is invalid\");\n}\nfunction encodeJsonUnencodedPayload(payload) {\n const invalid = /[\\p{Cs}\\p{Cn}]/u.exec(payload)?.[0];\n if (invalid !== void 0)\n throw new JWSInvalid(/\\p{Cs}/u.test(invalid) ? \"JWS Payload must be a well-formed Unicode string\" : \"JWS Payload must not contain unassigned Unicode code points\");\n return encoder.encode(payload);\n}\nfunction encodeCompactUnencodedPayload(payload) {\n try {\n return encode(payload);\n } catch {\n throw new JWSInvalid(\"JWS Compact Serialization payload must use only ASCII characters\");\n }\n}\nasync function verifySignature(jws, shared, key, encodeUnencodedPayload, parsedProtected) {\n const { protected: encodedProtected, header, payload: inputPayload } = jws, parsedProt = parsedProtected ?? parseProtectedHeader(encodedProtected);\n if (!isDisjoint(parsedProt, header))\n throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n const joseHeader = { ...parsedProt, ...header }, b64 = validateB64(parsedProt, validateCrit(JWSInvalid, JWS_RECOGNIZED, shared[1], parsedProt, joseHeader)), { alg } = joseHeader;\n if (typeof alg != \"string\" || !alg)\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n if (shared[0] && !shared[0].has(alg))\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n if (b64) {\n if (typeof inputPayload != \"string\")\n throw new JWSInvalid(\"JWS Payload must be a string\");\n } else if (typeof inputPayload != \"string\" && !(inputPayload instanceof Uint8Array))\n throw new JWSInvalid(\"JWS Payload must be a string or an Uint8Array instance\");\n const signingPayload = b64 || typeof inputPayload != \"string\" ? inputPayload : encodeUnencodedPayload(inputPayload);\n let resolvedKey = !1;\n typeof key == \"function\" && (key = await key(parsedProt, jws), resolvedKey = !0);\n const entry = jwsAlgorithm(alg), data = concat(encodedProtected !== void 0 ? encode(encodedProtected) : new Uint8Array(), encode(\".\"), typeof signingPayload == \"string\" ? shared[2] ??= encodeBase64url(signingPayload, \"payload\", JWSInvalid) : signingPayload), signature = decodeBase64url(jws.signature, \"signature\", JWSInvalid), k = await prepareKey(entry, key, \"verify\"), cryptoKey = await rawKey(k, entry.subtle, \"verify\");\n entry.minRsaBits && checkModulusLength(entry.alg, cryptoKey);\n let verified = !1;\n try {\n verified = await crypto.subtle.verify(entry.signing, cryptoKey, signature, data);\n } catch {\n }\n if (!verified)\n throw new JWSSignatureVerificationFailed();\n const result = { payload: typeof signingPayload == \"string\" ? decodeBase64url(signingPayload, \"payload\", JWSInvalid) : signingPayload };\n return encodedProtected !== void 0 && (result.protectedHeader = parsedProt), header !== void 0 && (result.unprotectedHeader = header), resolvedKey ? [{ ...result, key: k }, b64] : [result, b64];\n}\nasync function verifyCompact(jws, shared, key) {\n if (jws instanceof Uint8Array && (jws = decoder.decode(jws)), typeof jws != \"string\")\n throw new JWSInvalid(\"Compact JWS must be a string or Uint8Array\");\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split(\".\");\n if (length !== 3)\n throw new JWSInvalid(\"Invalid Compact JWS\");\n return verifySignature({ payload, protected: protectedHeader, signature }, shared, key, encodeCompactUnencodedPayload);\n}\nexport {\n encodeJsonUnencodedPayload,\n parseProtectedHeader,\n prepareVerify,\n snapshotJws,\n verifyCompact,\n verifySignature\n};\n", "import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from \"../util/errors.js\";\nimport { encoder, strictDecoder } from \"./buffer_utils.js\";\nimport { isObject } from \"./validate.js\";\nconst epoch = (date) => Math.floor(date.getTime() / 1e3), multipliers = {\n s: 1,\n m: 60,\n h: 3600,\n d: 86400,\n w: 604800,\n y: 31557600\n}, REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i, checkFailed = \"check_failed\";\nfunction invalidDuration() {\n throw new TypeError(\"Invalid time period format\");\n}\nfunction secs(str) {\n typeof str != \"string\" && invalidDuration();\n const matched = REGEX.exec(str);\n (!matched || matched[4] && matched[1]) && invalidDuration();\n const value = parseFloat(matched[2]), numericDate2 = Math.round(value * multipliers[matched[3][0].toLowerCase()]);\n return Number.isFinite(numericDate2) || invalidDuration(), matched[1] === \"-\" || matched[4] === \"ago\" ? -numericDate2 : numericDate2;\n}\nfunction validateInput(label, input) {\n if (!Number.isFinite(input))\n throw new TypeError(`Invalid ${label} input`);\n return input;\n}\nfunction validateStringClaim(claim, value) {\n if (typeof value != \"string\")\n throw new TypeError(`\"${claim}\" claim must be a string`);\n}\nfunction validateAudienceClaim(value) {\n if (typeof value != \"string\" && (!Array.isArray(value) || Array.from(value).some((member) => typeof member != \"string\")))\n throw new TypeError('\"aud\" claim must be a string or an array of strings');\n}\nfunction numericDate(value, label) {\n return typeof value == \"number\" ? validateInput(label, value) : value instanceof Date ? validateInput(label, epoch(value)) : epoch(/* @__PURE__ */ new Date()) + secs(value);\n}\nconst normalizeTyp = (value) => {\n const normalized = value.toLowerCase();\n return value.includes(\"/\") ? normalized : `application/${normalized}`;\n}, checkAudiencePresence = (audPayload, audOption) => typeof audPayload == \"string\" ? audOption.includes(audPayload) : Array.isArray(audPayload) ? audOption.some((aud) => audPayload.includes(aud)) : !1;\nfunction validateNumericDate(payload, claim, required = !1) {\n const value = payload[claim];\n if (!(value === void 0 && !required)) {\n if (typeof value != \"number\")\n throw new JWTClaimValidationFailed(`\"${claim}\" claim must be a number`, payload, claim, \"invalid\");\n return value;\n }\n}\nfunction unexpectedClaim(payload, claim) {\n throw new JWTClaimValidationFailed(`unexpected \"${claim}\" claim value`, payload, claim, checkFailed);\n}\nfunction validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n let payload;\n try {\n payload = JSON.parse(strictDecoder.decode(encodedPayload));\n } catch {\n }\n if (!isObject(payload))\n throw new JWTInvalid(\"JWT Claims Set must be a top-level JSON object\");\n const { typ } = options;\n if (typ !== void 0 && (typeof protectedHeader.typ != \"string\" || normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ)))\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, \"typ\", checkFailed);\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options, presenceCheck = [...requiredClaims];\n maxTokenAge !== void 0 && presenceCheck.push(\"iat\"), audience !== void 0 && presenceCheck.push(\"aud\"), subject !== void 0 && presenceCheck.push(\"sub\"), issuer !== void 0 && presenceCheck.push(\"iss\");\n for (const claim of new Set(presenceCheck.reverse()))\n if (!Object.hasOwn(payload, claim))\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, \"missing\");\n issuer !== void 0 && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss) && unexpectedClaim(payload, \"iss\"), subject !== void 0 && payload.sub !== subject && unexpectedClaim(payload, \"sub\"), audience !== void 0 && !checkAudiencePresence(payload.aud, typeof audience == \"string\" ? [audience] : audience) && unexpectedClaim(payload, \"aud\");\n const { clockTolerance } = options;\n let tolerance = 0;\n if (typeof clockTolerance == \"string\")\n tolerance = secs(clockTolerance);\n else if (clockTolerance !== void 0) {\n if (typeof clockTolerance != \"number\")\n throw new TypeError(\"Invalid clockTolerance option type\");\n tolerance = clockTolerance;\n }\n validateInput(\"clockTolerance option\", tolerance);\n const { currentDate } = options, now = validateInput(\"currentDate option\", epoch(currentDate === void 0 ? /* @__PURE__ */ new Date() : currentDate)), iat = validateNumericDate(payload, \"iat\", maxTokenAge !== void 0), nbf = validateNumericDate(payload, \"nbf\");\n if (nbf !== void 0 && nbf > now + tolerance)\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, \"nbf\", checkFailed);\n const exp = validateNumericDate(payload, \"exp\");\n if (exp !== void 0 && exp <= now - tolerance)\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, \"exp\", checkFailed);\n if (maxTokenAge !== void 0) {\n const age = now - iat, max = validateInput(\"maxTokenAge option\", typeof maxTokenAge == \"number\" ? maxTokenAge : secs(maxTokenAge));\n if (age - tolerance > max)\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, \"iat\", checkFailed);\n if (age < -tolerance)\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, \"iat\", checkFailed);\n }\n return payload;\n}\nlet producerPayloads;\nfunction producerPayload(producer) {\n return producerPayloads.get(producer);\n}\nfunction jwtData(producer) {\n const payload = producerPayload(producer);\n for (const claim of [\"iat\", \"nbf\", \"exp\"]) {\n const value = payload[claim];\n if (typeof value == \"number\" && !Number.isFinite(value))\n throw new TypeError(`\"${claim}\" claim must be a finite number`);\n }\n return encoder.encode(JSON.stringify(payload));\n}\nfunction jwtClaim(producer, claim) {\n return producerPayload(producer)[claim];\n}\nclass JWTClaimsBuilder {\n constructor(payload = {}) {\n if (!isObject(payload))\n throw new TypeError(\"JWT Claims Set MUST be an object\");\n (producerPayloads ||= /* @__PURE__ */ new WeakMap()).set(this, structuredClone(payload));\n }\n setIssuer(value) {\n return validateStringClaim(\"iss\", value), producerPayload(this).iss = value, this;\n }\n setSubject(value) {\n return validateStringClaim(\"sub\", value), producerPayload(this).sub = value, this;\n }\n setAudience(value) {\n return validateAudienceClaim(value), producerPayload(this).aud = value, this;\n }\n setJti(value) {\n return validateStringClaim(\"jti\", value), producerPayload(this).jti = value, this;\n }\n setNotBefore(value) {\n return producerPayload(this).nbf = numericDate(value, \"setNotBefore\"), this;\n }\n setExpirationTime(value) {\n return producerPayload(this).exp = numericDate(value, \"setExpirationTime\"), this;\n }\n setIssuedAt(value) {\n const payload = producerPayload(this);\n return value === void 0 ? payload.iat = epoch(/* @__PURE__ */ new Date()) : typeof value == \"string\" ? payload.iat = validateInput(\"setIssuedAt\", epoch(/* @__PURE__ */ new Date()) + secs(value)) : payload.iat = numericDate(value, \"setIssuedAt\"), this;\n }\n}\nexport {\n JWTClaimsBuilder,\n jwtClaim,\n jwtData,\n secs,\n validateClaimsSet\n};\n", "import { prepareVerify, verifyCompact } from \"../lib/jws_verify.js\";\nimport { validateClaimsSet } from \"../lib/jwt_claims_set.js\";\nimport { JWTInvalid } from \"../util/errors.js\";\nasync function jwtVerify(jwt, key, options) {\n const [verified, b64] = await verifyCompact(jwt, prepareVerify(options), key);\n if (!b64)\n throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n const payload = validateClaimsSet(verified.protectedHeader, verified.payload, options);\n return { ...verified, payload };\n}\nexport {\n jwtVerify\n};\n", "import { encode as b64u } from \"../util/base64url.js\";\nimport { jwsAlgorithm } from \"./jws_algorithms.js\";\nimport { isDisjoint, serializeJoseHeader, validateB64, validateCrit, validateCritDuplicates, JWS_RECOGNIZED } from \"./validate.js\";\nimport { JWSInvalid } from \"../util/errors.js\";\nimport { concat, encode, encoder } from \"./buffer_utils.js\";\nimport { prepareKey, rawKey, checkModulusLength } from \"./key.js\";\nasync function createSignature(input, key, rejectUnencoded) {\n let [payload, protectedHeader, unprotectedHeader, crit] = input, protectedHeaderString = \"\";\n if (protectedHeader !== void 0) {\n const normalized = serializeJoseHeader(JWSInvalid, protectedHeader);\n protectedHeader = normalized[0], protectedHeaderString = b64u(normalized[1]);\n }\n if (unprotectedHeader !== void 0 && (unprotectedHeader = serializeJoseHeader(JWSInvalid, unprotectedHeader)[0]), !protectedHeader && !unprotectedHeader)\n throw new JWSInvalid(\"either setProtectedHeader or setUnprotectedHeader must be called before #sign()\");\n if (!isDisjoint(protectedHeader, unprotectedHeader))\n throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n const joseHeader = { ...protectedHeader, ...unprotectedHeader };\n validateCritDuplicates(JWSInvalid, protectedHeader);\n const b64 = validateB64(protectedHeader, validateCrit(JWSInvalid, JWS_RECOGNIZED, crit, protectedHeader, joseHeader));\n b64 || rejectUnencoded?.();\n const { alg } = joseHeader;\n if (typeof alg != \"string\" || !alg)\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n const entry = jwsAlgorithm(alg);\n let payloadS = \"\", payloadB = payload, data;\n if (b64) {\n const encoded = input[4];\n encoded ? (payloadS = encoded[0] ??= b64u(payload), payloadB = encoded[1] ??= encode(payloadS)) : (payloadS = b64u(payload), data = encoder.encode(`${protectedHeaderString}.${payloadS}`));\n }\n data ??= concat(encode(protectedHeaderString), encode(\".\"), payloadB);\n const k = await rawKey(await prepareKey(entry, key, \"sign\"), entry.subtle, \"sign\");\n entry.minRsaBits && checkModulusLength(entry.alg, k);\n const jws = {\n signature: b64u(new Uint8Array(await crypto.subtle.sign(entry.signing, k, data))),\n payload: payloadS\n };\n return protectedHeader && (jws.protected = protectedHeaderString), unprotectedHeader && (jws.header = unprotectedHeader), [jws, b64];\n}\nasync function createCompactSignature(payload, protectedHeader, crit, key, rejectUnencoded) {\n const [jws] = await createSignature([payload, protectedHeader, void 0, crit], key, rejectUnencoded);\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n}\nexport {\n createCompactSignature,\n createSignature\n};\n", "import { createCompactSignature } from \"../lib/jws_sign.js\";\nimport { JWTInvalid } from \"../util/errors.js\";\nimport { JWTClaimsBuilder, jwtData } from \"../lib/jwt_claims_set.js\";\nimport { assertNotSet } from \"../lib/validate.js\";\nconst SignJWT_base = JWTClaimsBuilder;\nclass SignJWT extends SignJWT_base {\n #protectedHeader;\n setProtectedHeader(protectedHeader) {\n return assertNotSet(this.#protectedHeader, \"setProtectedHeader\"), this.#protectedHeader = protectedHeader, this;\n }\n async sign(key, options) {\n return createCompactSignature(jwtData(this), this.#protectedHeader, options?.crit, key, () => {\n throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n });\n }\n}\nexport {\n SignJWT\n};\n", "import { JOSENotSupported } from \"../util/errors.js\";\nimport { JWS } from \"./jws_algorithms.js\";\nimport { JWE } from \"./jwe_algorithms.js\";\nconst algArgument = '\"alg\" (Algorithm)';\nfunction unsupportedAlg(source = 'JWK \"alg\" (Algorithm) Parameter') {\n throw new JOSENotSupported(`Invalid or unsupported ${source} value`);\n}\nfunction keyAlgorithm(alg, source) {\n return (typeof alg == \"string\" ? JWS[alg] ?? JWE[alg] : void 0) ?? unsupportedAlg(source);\n}\nexport {\n algArgument,\n keyAlgorithm,\n unsupportedAlg\n};\n", "import { toSPKI as exportPublic, toPKCS8 as exportPrivate } from \"../lib/asn1.js\";\nimport { invalidKeyInput, isCryptoKey, isKeyObject } from \"../lib/key.js\";\nimport { encode as b64u } from \"../util/base64url.js\";\nfunction exportSPKI(key) {\n return exportPublic(key);\n}\nfunction exportPKCS8(key) {\n return exportPrivate(key);\n}\nasync function exportJWK(key) {\n if (isKeyObject(key))\n if (key.type === \"secret\")\n key = key.export();\n else\n return key.export({ format: \"jwk\" });\n if (key instanceof Uint8Array)\n return {\n kty: \"oct\",\n k: b64u(key)\n };\n if (!isCryptoKey(key))\n throw new TypeError(invalidKeyInput(key, \"CryptoKey\", \"KeyObject\", \"Uint8Array\"));\n if (!key.extractable)\n throw new TypeError(\"non-extractable CryptoKey cannot be exported as a JWK\");\n const jwk = await crypto.subtle.exportKey(\"jwk\", key);\n delete jwk.ext, delete jwk.key_ops, delete jwk.use, jwk.kty !== \"AKP\" && delete jwk.alg;\n for (const parameter of Object.keys(jwk))\n jwk[parameter] === void 0 && delete jwk[parameter];\n return jwk;\n}\nexport {\n exportJWK,\n exportPKCS8,\n exportSPKI\n};\n", "import { digest, encode } from \"../lib/buffer_utils.js\";\nimport { encode as b64u } from \"../util/base64url.js\";\nimport { JOSENotSupported, JWKInvalid } from \"../util/errors.js\";\nimport { isKeyLike, invalidKeyInput, snapshotJwk } from \"../lib/key.js\";\nimport { isObject } from \"../lib/validate.js\";\nimport { exportJWK } from \"../key/export.js\";\nconst check = (value, description) => {\n if (typeof value != \"string\" || !value)\n throw new JWKInvalid(`${description} missing or invalid`);\n};\nasync function calculateJwkThumbprint(key, digestAlgorithm) {\n let jwk;\n if (isObject(key)) {\n if (jwk = snapshotJwk(key), typeof jwk.kty != \"string\")\n throw new TypeError(invalidKeyInput(key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n } else if (isKeyLike(key))\n jwk = snapshotJwk(await exportJWK(key));\n else\n throw new TypeError(invalidKeyInput(key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n if (digestAlgorithm ??= \"sha256\", digestAlgorithm !== \"sha256\" && digestAlgorithm !== \"sha384\" && digestAlgorithm !== \"sha512\")\n throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n let components;\n switch (jwk.kty) {\n case \"AKP\":\n check(jwk.alg, '\"alg\" (Algorithm) Parameter'), check(jwk.pub, '\"pub\" (Public key) Parameter'), components = { alg: jwk.alg, kty: jwk.kty, pub: jwk.pub };\n break;\n case \"EC\":\n check(jwk.crv, '\"crv\" (Curve) Parameter'), check(jwk.x, '\"x\" (X Coordinate) Parameter'), check(jwk.y, '\"y\" (Y Coordinate) Parameter'), components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n break;\n case \"OKP\":\n check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter'), check(jwk.x, '\"x\" (Public Key) Parameter'), components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n break;\n case \"RSA\":\n check(jwk.e, '\"e\" (Exponent) Parameter'), check(jwk.n, '\"n\" (Modulus) Parameter'), components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n break;\n case \"oct\":\n if (typeof jwk.k != \"string\")\n throw new JWKInvalid('\"k\" (Key Value) Parameter missing or invalid');\n components = { k: jwk.k, kty: jwk.kty };\n break;\n default:\n throw new JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n }\n const data = encode(JSON.stringify(components));\n return b64u(await digest(digestAlgorithm, data));\n}\nasync function calculateJwkThumbprintUri(key, digestAlgorithm) {\n digestAlgorithm ??= \"sha256\";\n const thumbprint = await calculateJwkThumbprint(key, digestAlgorithm);\n return `urn:ietf:params:oauth:jwk-thumbprint:sha-${digestAlgorithm.slice(-3)}:${thumbprint}`;\n}\nexport {\n calculateJwkThumbprint,\n calculateJwkThumbprintUri\n};\n", "import { decode as decodeBase64URL } from \"../util/base64url.js\";\nimport { fromSPKI, fromPKCS8, fromX509 } from \"../lib/asn1.js\";\nimport { jwkToKey, validateExtractableOption, normalizeJwk } from \"../lib/key.js\";\nimport { keyAlgorithm } from \"../lib/key_algorithm.js\";\nimport { JOSENotSupported } from \"../util/errors.js\";\nimport { isObject } from \"../lib/validate.js\";\nasync function importSPKI(spki, alg, options) {\n if (typeof spki != \"string\" || spki.indexOf(\"-----BEGIN PUBLIC KEY-----\") !== 0)\n throw new TypeError('\"spki\" must be SPKI formatted string');\n return fromSPKI(spki, alg, options);\n}\nasync function importX509(x509, alg, options) {\n if (typeof x509 != \"string\" || x509.indexOf(\"-----BEGIN CERTIFICATE-----\") !== 0)\n throw new TypeError('\"x509\" must be X.509 formatted string');\n return fromX509(x509, alg, options);\n}\nasync function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 != \"string\" || pkcs8.indexOf(\"-----BEGIN PRIVATE KEY-----\") !== 0)\n throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n return fromPKCS8(pkcs8, alg, options);\n}\nasync function importJWK(jwk, alg, options) {\n if (!isObject(jwk))\n throw new TypeError(\"JWK must be an object\");\n const normalized = normalizeJwk(jwk), extractable = validateExtractableOption(options?.extractable), { alg: jwkAlg } = normalized;\n if (alg ??= jwkAlg, normalized.kty !== \"oct\" && !alg)\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n switch (normalized.kty) {\n case \"oct\":\n if (typeof normalized.k != \"string\")\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n return decodeBase64URL(normalized.k);\n case \"AKP\": {\n if (typeof jwkAlg != \"string\" || !jwkAlg)\n throw new TypeError('missing \"alg\" (Algorithm) Parameter value');\n if (alg !== jwkAlg)\n throw new TypeError(\"JWK alg and alg option value mismatch\");\n return jwkToKey(keyAlgorithm(alg), normalized, extractable);\n }\n case \"RSA\":\n case \"EC\":\n case \"OKP\":\n return jwkToKey(keyAlgorithm(alg), normalized, extractable);\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\nexport {\n importJWK,\n importPKCS8,\n importSPKI,\n importX509\n};\n", "import { parseJoseHeader } from \"../lib/validate.js\";\nfunction decodeProtectedHeader(token) {\n let protectedB64u;\n if (typeof token == \"string\") {\n const parts = token.split(\".\");\n (parts.length === 3 || parts.length === 5) && ([protectedB64u] = parts);\n } else if (typeof token == \"object\" && token)\n if (\"protected\" in token)\n protectedB64u = token.protected;\n else\n throw new TypeError(\"Token does not contain a Protected Header\");\n const invalid = \"Invalid Token or Protected Header formatting\";\n if (typeof protectedB64u != \"string\" || !protectedB64u)\n throw new TypeError(invalid);\n return parseJoseHeader(protectedB64u, TypeError, invalid);\n}\nexport {\n decodeProtectedHeader\n};\n", "import { ProtocolValidationError } from \"./errors.js\";\n\n/** Parse JSON while rejecting duplicate object member names at every depth. */\nexport function parseJsonStrict(source: string): unknown {\n return new StrictJsonParser(source).parse();\n}\n\nclass StrictJsonParser {\n #offset = 0;\n\n constructor(private readonly source: string) {}\n\n parse(): unknown {\n this.#skipWhitespace();\n const value = this.#parseValue();\n this.#skipWhitespace();\n if (this.#offset !== this.source.length) {\n this.#invalid(\"Unexpected content after the JSON value\");\n }\n return value;\n }\n\n #parseValue(): unknown {\n const character = this.source[this.#offset];\n if (character === \"{\") return this.#parseObject();\n if (character === \"[\") return this.#parseArray();\n if (character === '\"') return this.#parseString();\n if (character === \"t\") return this.#parseLiteral(\"true\", true);\n if (character === \"f\") return this.#parseLiteral(\"false\", false);\n if (character === \"n\") return this.#parseLiteral(\"null\", null);\n if (character === \"-\" || (character !== undefined && /[0-9]/.test(character))) {\n return this.#parseNumber();\n }\n this.#invalid(\"Expected a JSON value\");\n }\n\n #parseObject(): Record<string, unknown> {\n this.#offset += 1;\n this.#skipWhitespace();\n const result: Record<string, unknown> = {};\n const names = new Set<string>();\n if (this.#consume(\"}\")) return result;\n\n while (true) {\n if (this.source[this.#offset] !== '\"') {\n this.#invalid(\"Expected a JSON object member name\");\n }\n const name = this.#parseString();\n if (names.has(name)) {\n throw new ProtocolValidationError(\n \"duplicate_json_member\",\n `JSON object contains duplicate member ${JSON.stringify(name)}`,\n );\n }\n names.add(name);\n this.#skipWhitespace();\n if (!this.#consume(\":\")) this.#invalid(\"Expected ':' after an object member name\");\n this.#skipWhitespace();\n result[name] = this.#parseValue();\n this.#skipWhitespace();\n if (this.#consume(\"}\")) return result;\n if (!this.#consume(\",\")) this.#invalid(\"Expected ',' or '}' in a JSON object\");\n this.#skipWhitespace();\n }\n }\n\n #parseArray(): unknown[] {\n this.#offset += 1;\n this.#skipWhitespace();\n const result: unknown[] = [];\n if (this.#consume(\"]\")) return result;\n\n while (true) {\n result.push(this.#parseValue());\n this.#skipWhitespace();\n if (this.#consume(\"]\")) return result;\n if (!this.#consume(\",\")) this.#invalid(\"Expected ',' or ']' in a JSON array\");\n this.#skipWhitespace();\n }\n }\n\n #parseString(): string {\n const start = this.#offset;\n this.#offset += 1;\n while (this.#offset < this.source.length) {\n const character = this.source[this.#offset];\n if (character === '\"') {\n this.#offset += 1;\n const encoded = this.source.slice(start, this.#offset);\n try {\n return JSON.parse(encoded) as string;\n } catch (cause) {\n this.#invalid(\"Invalid JSON string\", cause);\n }\n }\n if (character === \"\\\\\") {\n this.#offset += 1;\n if (this.#offset >= this.source.length) this.#invalid(\"Unterminated JSON escape\");\n if (this.source[this.#offset] === \"u\") {\n const digits = this.source.slice(this.#offset + 1, this.#offset + 5);\n if (!/^[0-9a-fA-F]{4}$/.test(digits)) this.#invalid(\"Invalid Unicode escape\");\n this.#offset += 4;\n } else if (!'\"\\\\/bfnrt'.includes(this.source[this.#offset] ?? \"\")) {\n this.#invalid(\"Invalid JSON escape\");\n }\n } else if (character === undefined || character.charCodeAt(0) < 0x20) {\n this.#invalid(\"Invalid control character in JSON string\");\n }\n this.#offset += 1;\n }\n this.#invalid(\"Unterminated JSON string\");\n }\n\n #parseNumber(): number {\n const remainder = this.source.slice(this.#offset);\n const match = /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/.exec(remainder);\n if (!match) this.#invalid(\"Invalid JSON number\");\n this.#offset += match[0].length;\n const value = Number(match[0]);\n if (!Number.isFinite(value)) this.#invalid(\"JSON number is outside the supported range\");\n return value;\n }\n\n #parseLiteral<T>(encoded: string, value: T): T {\n if (!this.source.startsWith(encoded, this.#offset)) {\n this.#invalid(\"Invalid JSON literal\");\n }\n this.#offset += encoded.length;\n return value;\n }\n\n #skipWhitespace(): void {\n while (\n this.#offset < this.source.length &&\n \" \\t\\r\\n\".includes(this.source[this.#offset] ?? \"\")\n ) {\n this.#offset += 1;\n }\n }\n\n #consume(character: string): boolean {\n if (this.source[this.#offset] !== character) return false;\n this.#offset += 1;\n return true;\n }\n\n #invalid(message: string, cause?: unknown): never {\n throw new ProtocolValidationError(\"invalid_json\", message, {\n cause,\n });\n }\n}\n", null, null, null, null, null, null, null, null, null, null, null, "import {\n buildReactorFromPlugins,\n contribution,\n defineContributionPoint,\n definePlugin,\n type ReactorPlatform,\n type ReactorPlatformView,\n type ContributionPoint,\n type PlatformInput,\n} from \"@datalayer/reactor\";\n\nimport { DiscoveryError } from \"./errors.js\";\nimport type { SecretValue } from \"./sessions.js\";\n\nexport interface DiscoveryTransport {\n fetch(input: URL, init: RequestInit): Promise<Response>;\n}\n\nexport interface UrlSafetyPolicy {\n assertSafe(url: URL): void | Promise<void>;\n}\n\nexport interface ProtocolProfile {\n readonly version: string;\n}\n\nexport interface ExtensionHandler {\n readonly name: string;\n readonly majorVersion: number;\n}\n\nexport interface Clock {\n now(): Date;\n}\n\nexport interface RandomSource {\n bytes(length: number): Uint8Array;\n}\n\nexport interface Signer {\n sign(\n claims: Readonly<Record<string, unknown>>,\n options: { readonly purpose: string },\n ): Promise<SecretValue>;\n}\n\nexport interface KeyReference {\n readonly id: string;\n readonly algorithm: string;\n}\n\nexport interface KeyStore {\n getOrCreate(options: {\n readonly tenantId: string;\n readonly subject: string;\n readonly purpose: string;\n }): Promise<KeyReference>;\n}\n\nexport interface TokenStore {\n put(reference: string, token: SecretValue): Promise<void>;\n get(reference: string): Promise<SecretValue | undefined>;\n delete(reference: string): Promise<void>;\n}\n\nexport interface ProtocolCache {\n put(key: string, value: unknown, options: { readonly expiresAt: Date }): Promise<void>;\n get(key: string): Promise<unknown | undefined>;\n delete(key: string): Promise<void>;\n}\n\nexport interface BrowserHandoff {\n open(authorizationUrl: SecretValue): Promise<void>;\n}\n\nexport interface DpopProofRequest {\n readonly method: string;\n readonly url: string;\n readonly tenantId: string;\n readonly subject: string;\n readonly issuer: string;\n readonly accessToken?: SecretValue;\n readonly nonce?: string;\n}\n\nexport interface DpopProofProvider {\n create(request: DpopProofRequest): Promise<SecretValue>;\n}\n\nexport const DiscoveryTransports = defineContributionPoint<DiscoveryTransport>(\n \"pap.discoveryTransport\",\n);\nexport const UrlSafetyPolicies = defineContributionPoint<UrlSafetyPolicy>(\n \"pap.urlSafetyPolicy\",\n);\nexport const ProtocolProfiles = defineContributionPoint<ProtocolProfile>(\n \"pap.protocolProfile\",\n);\nexport const ExtensionHandlers = defineContributionPoint<ExtensionHandler>(\n \"pap.extensionHandler\",\n);\nexport const Clocks = defineContributionPoint<Clock>(\"pap.clock\");\nexport const RandomSources = defineContributionPoint<RandomSource>(\"pap.randomSource\");\nexport const Signers = defineContributionPoint<Signer>(\"pap.signer\");\nexport const KeyStores = defineContributionPoint<KeyStore>(\"pap.keyStore\");\nexport const TokenStores = defineContributionPoint<TokenStore>(\"pap.tokenStore\");\nexport const Caches = defineContributionPoint<ProtocolCache>(\"pap.cache\");\nexport const BrowserHandoffs = defineContributionPoint<BrowserHandoff>(\n \"pap.browserHandoff\",\n);\nexport const DpopProofProviders = defineContributionPoint<DpopProofProvider>(\n \"pap.dpopProofProvider\",\n);\n\nexport interface PapCoreOptions {\n readonly fetch?: typeof globalThis.fetch;\n readonly assertSafeUrl?: (url: URL) => void | Promise<void>;\n}\n\nconst systemClock: Clock = { now: () => new Date() };\nconst systemRandom: RandomSource = {\n bytes(length) {\n if (!Number.isInteger(length) || length <= 0) {\n throw new RangeError(\"Random byte length must be a positive integer\");\n }\n if (!globalThis.crypto) {\n throw new Error(\"A cryptographically secure random source is required\");\n }\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n },\n};\n\nfunction assertObviouslyPublic(url: URL): void {\n if (url.protocol !== \"https:\" || url.username || url.password) {\n throw new DiscoveryError(\"unsafe_url\", \"Discovery and metadata URLs must use HTTPS\");\n }\n const host = url.hostname.toLowerCase().replace(/[\\[\\]]/g, \"\");\n if (\n host === \"localhost\" ||\n host.endsWith(\".localhost\") ||\n host === \"::1\" ||\n /^127\\./.test(host) ||\n /^10\\./.test(host) ||\n /^192\\.168\\./.test(host) ||\n /^169\\.254\\./.test(host) ||\n /^172\\.(1[6-9]|2[0-9]|3[01])\\./.test(host)\n ) {\n throw new DiscoveryError(\"unsafe_address\", \"Discovery URL names a private address\");\n }\n}\n\nexport function createPapCorePlugin(options: PapCoreOptions = {}) {\n const fetcher = options.fetch ?? globalThis.fetch;\n if (!fetcher) {\n throw new DiscoveryError(\"fetch_unavailable\", \"A fetch implementation is required\");\n }\n return definePlugin({\n name: \"@datalayer/personal-agent-protocol-core\",\n version: \"0.2.0\",\n contributionPoints: [\n DiscoveryTransports,\n UrlSafetyPolicies,\n ProtocolProfiles,\n ExtensionHandlers,\n Clocks,\n RandomSources,\n Signers,\n KeyStores,\n TokenStores,\n Caches,\n BrowserHandoffs,\n DpopProofProviders,\n ],\n contributes: [\n contribution(\n DiscoveryTransports,\n { fetch: (input, init) => fetcher(input, init) },\n { id: \"fetch\", order: 100 },\n ),\n contribution(\n UrlSafetyPolicies,\n {\n async assertSafe(url) {\n assertObviouslyPublic(url);\n await options.assertSafeUrl?.(url);\n },\n },\n { id: \"public\", order: 100 },\n ),\n contribution(ProtocolProfiles, { version: \"0.1\" }, { id: \"0.1\", order: 100 }),\n contribution(Clocks, systemClock, { id: \"system\", order: 100 }),\n contribution(RandomSources, systemRandom, { id: \"system\", order: 100 }),\n ],\n });\n}\n\nexport function buildPapReactor(\n options: PapCoreOptions = {},\n plugins: PlatformInput[] = [],\n): ReactorPlatform {\n const reactor = buildReactorFromPlugins([createPapCorePlugin(options), ...plugins]);\n reactor.start();\n return reactor;\n}\n\nexport function firstContribution<T>(\n reactor: ReactorPlatformView,\n point: ContributionPoint<T>,\n label: string,\n): T {\n const contributions = reactor.getContributions(point);\n const selected = contributions[0];\n if (!selected) {\n throw new Error(`PAP Reactor has no active ${label} contribution`);\n }\n if (contributions[1]?.order === selected.order) {\n throw new Error(`PAP Reactor has ambiguous ${label} contributions`);\n }\n return selected.value;\n}\n", "import type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nimport { ProtocolValidationError, SessionError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport {\n Clocks,\n DpopProofProviders,\n RandomSources,\n Signers,\n firstContribution,\n} from \"./reactor.js\";\n\nexport const JWT_BEARER_GRANT = \"urn:ietf:params:oauth:grant-type:jwt-bearer\";\nexport const JWT_CLIENT_ASSERTION =\n \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\";\n\nexport class SecretValue {\n readonly #value: string;\n\n constructor(value: string) {\n if (!value) {\n throw new ProtocolValidationError(\"invalid_secret\", \"Secret value must not be empty\");\n }\n this.#value = value;\n }\n\n reveal(): string {\n return this.#value;\n }\n\n toString(): string {\n return \"[REDACTED]\";\n }\n\n toJSON(): string {\n return \"[REDACTED]\";\n }\n}\n\nexport interface SessionAssertionClaims {\n readonly iss: string;\n readonly sub: string;\n readonly aud: string;\n readonly iat: number;\n readonly exp: number;\n readonly jti: string;\n}\n\nexport interface SessionToken {\n readonly accessToken: SecretValue;\n readonly tokenType: \"DPoP\" | \"Bearer\";\n readonly expiresIn: number;\n readonly scopes: readonly string[];\n readonly sessionId: string;\n readonly signedIn: boolean;\n readonly accountToken?: SecretValue;\n}\n\nexport type RandomBytes = (length: number) => Uint8Array;\n\nfunction defaultRandomBytes(length: number): Uint8Array {\n const cryptoApi = globalThis.crypto;\n if (!cryptoApi) {\n throw new Error(\"A cryptographically secure random source is required\");\n }\n return cryptoApi.getRandomValues(new Uint8Array(length));\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const first = bytes[index] ?? 0;\n const second = bytes[index + 1];\n const third = bytes[index + 2];\n output += alphabet[first >>> 2];\n output += alphabet[((first & 3) << 4) | ((second ?? 0) >>> 4)];\n if (second !== undefined) {\n output += alphabet[((second & 15) << 2) | ((third ?? 0) >>> 6)];\n }\n if (third !== undefined) {\n output += alphabet[third & 63];\n }\n }\n return output;\n}\n\nfunction opaqueId(prefix: string, randomBytes: RandomBytes): string {\n const bytes = randomBytes(16);\n if (bytes.byteLength < 16) {\n throw new Error(\"Opaque PAP identifiers require at least 128 random bits\");\n }\n return `${prefix}_${base64Url(bytes)}`;\n}\n\nexport function generatePairwiseUserId(\n randomBytes: RandomBytes = defaultRandomBytes,\n): string {\n return opaqueId(\"usr\", randomBytes);\n}\n\nexport interface SessionAssertionOptions {\n readonly clientId: string;\n readonly pairwiseUserId: string;\n readonly tokenEndpoint: string;\n readonly now?: Date;\n readonly lifetimeSeconds?: number;\n readonly randomBytes?: RandomBytes;\n}\n\nfunction httpsUrl(value: string, label: string): string {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`, {\n cause,\n });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`);\n }\n return value;\n}\n\nexport function buildSessionAssertionClaims(\n options: SessionAssertionOptions,\n): SessionAssertionClaims {\n const lifetime = options.lifetimeSeconds ?? 60;\n if (!Number.isInteger(lifetime) || lifetime <= 0) {\n throw new ProtocolValidationError(\n \"invalid_assertion_lifetime\",\n \"Assertion lifetime must be a positive integer\",\n );\n }\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.pairwiseUserId)) {\n throw new ProtocolValidationError(\n \"invalid_user_id\",\n \"Pairwise user ID must use the URL-safe base64 alphabet\",\n );\n }\n const iat = Math.floor((options.now ?? new Date()).getTime() / 1000);\n return {\n iss: httpsUrl(options.clientId, \"clientId\"),\n sub: options.pairwiseUserId,\n aud: httpsUrl(options.tokenEndpoint, \"tokenEndpoint\"),\n iat,\n exp: iat + lifetime,\n jti: opaqueId(\"jti\", options.randomBytes ?? defaultRandomBytes),\n };\n}\n\nexport interface SessionGrantOptions {\n readonly assertion: string;\n readonly clientId: string;\n readonly clientAssertion: string;\n readonly sessionId?: string;\n}\n\nexport class SessionGrant {\n readonly assertion: SecretValue;\n readonly clientId: string;\n readonly clientAssertion: SecretValue;\n readonly sessionId: string | undefined;\n\n constructor(options: SessionGrantOptions) {\n this.assertion = new SecretValue(options.assertion);\n this.clientId = httpsUrl(options.clientId, \"clientId\");\n this.clientAssertion = new SecretValue(options.clientAssertion);\n if (options.sessionId !== undefined && !/^[A-Za-z0-9_-]{1,256}$/.test(options.sessionId)) {\n throw new ProtocolValidationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n this.sessionId = options.sessionId;\n }\n\n toForm(): URLSearchParams {\n const form = new URLSearchParams({\n grant_type: JWT_BEARER_GRANT,\n assertion: this.assertion.reveal(),\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion.reveal(),\n });\n if (this.sessionId !== undefined) {\n form.set(\"session_id\", this.sessionId);\n }\n return form;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n grant_type: JWT_BEARER_GRANT,\n assertion: this.assertion,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion,\n ...(this.sessionId === undefined ? {} : { session_id: this.sessionId }),\n };\n }\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction nonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !value) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a string`);\n }\n return value;\n}\n\nexport function parseSessionToken(value: unknown): SessionToken {\n const source = object(value, \"session token response\");\n const tokenType = nonEmptyString(source.token_type, \"token_type\");\n if (tokenType !== \"DPoP\" && tokenType !== \"Bearer\") {\n throw new ProtocolValidationError(\"invalid_token_type\", \"Unsupported token_type\");\n }\n const expiresIn = source.expires_in;\n if (!Number.isInteger(expiresIn) || (expiresIn as number) <= 0) {\n throw new ProtocolValidationError(\"invalid_expiry\", \"expires_in must be positive\");\n }\n const sessionId = nonEmptyString(source.session_id, \"session_id\");\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(sessionId)) {\n throw new ProtocolValidationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n if (typeof source.signed_in !== \"boolean\") {\n throw new ProtocolValidationError(\"invalid_type\", \"signed_in must be boolean\");\n }\n if (source.scope !== undefined && typeof source.scope !== \"string\") {\n throw new ProtocolValidationError(\"invalid_type\", \"scope must be a string\");\n }\n const scope = (source.scope as string | undefined) ?? \"\";\n return {\n accessToken: new SecretValue(nonEmptyString(source.access_token, \"access_token\")),\n tokenType,\n expiresIn: expiresIn as number,\n scopes: scope.split(\" \").filter(Boolean),\n sessionId,\n signedIn: source.signed_in,\n ...(source.refresh_token === undefined\n ? {}\n : {\n accountToken: new SecretValue(\n nonEmptyString(source.refresh_token, \"refresh_token\"),\n ),\n }),\n };\n}\n\nexport interface SessionRequestOptions {\n readonly clientId: string;\n readonly pairwiseUserId: string;\n readonly issuer: string;\n readonly tokenEndpoint: string;\n readonly tenantId: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface SessionRenewOptions extends SessionRequestOptions {\n readonly sessionId: string;\n}\n\nexport interface SessionClientOptions {\n readonly reactor: ReactorPlatformView;\n readonly fetch?: typeof globalThis.fetch;\n readonly maxResponseBytes?: number;\n}\n\n/** Start and renew signed-out PAP sessions over an OAuth token endpoint. */\nexport class SessionClient {\n readonly #reactor: ReactorPlatformView;\n readonly #fetch: typeof globalThis.fetch;\n readonly #maxResponseBytes: number;\n\n constructor(options: SessionClientOptions) {\n const fetcher = options.fetch ?? globalThis.fetch;\n if (!fetcher) throw new SessionError(\"fetch_unavailable\", \"A fetch implementation is required\");\n const maxResponseBytes = options.maxResponseBytes ?? 100 * 1024;\n if (!Number.isInteger(maxResponseBytes) || maxResponseBytes <= 0) {\n throw new RangeError(\"maxResponseBytes must be a positive integer\");\n }\n this.#reactor = options.reactor;\n this.#fetch = fetcher;\n this.#maxResponseBytes = maxResponseBytes;\n }\n\n start(options: SessionRequestOptions): Promise<SessionToken> {\n return this.#request(options);\n }\n\n renew(options: SessionRenewOptions): Promise<SessionToken> {\n return this.#request(options, options.sessionId);\n }\n\n async #request(\n options: SessionRequestOptions,\n sessionId?: string,\n ): Promise<SessionToken> {\n const clock = firstContribution(this.#reactor, Clocks, \"clock\");\n const random = firstContribution(this.#reactor, RandomSources, \"random source\");\n const signer = firstContribution(this.#reactor, Signers, \"signer\");\n const dpop = firstContribution(\n this.#reactor,\n DpopProofProviders,\n \"DPoP proof provider\",\n );\n let nonce: string | undefined;\n\n for (let attempt = 0; attempt < 2; attempt += 1) {\n const now = clock.now();\n const sessionClaims = buildSessionAssertionClaims({\n clientId: options.clientId,\n pairwiseUserId: options.pairwiseUserId,\n tokenEndpoint: options.tokenEndpoint,\n now,\n randomBytes: (length) => random.bytes(length),\n });\n const iat = Math.floor(now.getTime() / 1000);\n const clientId = httpsUrl(options.clientId, \"clientId\");\n const tokenEndpoint = httpsUrl(options.tokenEndpoint, \"tokenEndpoint\");\n const issuer = httpsUrl(options.issuer, \"issuer\");\n const clientClaims = {\n iss: clientId,\n sub: clientId,\n aud: tokenEndpoint,\n iat,\n exp: iat + 60,\n jti: opaqueId(\"jti\", (length) => random.bytes(length)),\n };\n const assertion = await signer.sign({ ...sessionClaims }, {\n purpose: \"session_assertion\",\n });\n const clientAssertion = await signer.sign(clientClaims, {\n purpose: \"client_assertion\",\n });\n const proof = await dpop.create({\n method: \"POST\",\n url: tokenEndpoint,\n tenantId: options.tenantId,\n subject: options.pairwiseUserId,\n issuer,\n ...(nonce === undefined ? {} : { nonce }),\n });\n const grant = new SessionGrant({\n assertion: assertion.reveal(),\n clientId,\n clientAssertion: clientAssertion.reveal(),\n ...(sessionId === undefined ? {} : { sessionId }),\n });\n\n let response: Response;\n try {\n response = await this.#fetch(tokenEndpoint, {\n method: \"POST\",\n headers: { Accept: \"application/json\", DPoP: proof.reveal() },\n body: grant.toForm(),\n credentials: \"omit\",\n redirect: \"error\",\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n } catch (cause) {\n throw new SessionError(\"request_failed\", \"Session token request failed\", { cause });\n }\n\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\") {\n throw new SessionError(\n \"invalid_content_type\",\n \"Session token endpoint must return JSON\",\n { statusCode: response.status },\n );\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > this.#maxResponseBytes) {\n throw new SessionError(\n \"response_too_large\",\n \"Session token response exceeds size limit\",\n { statusCode: response.status },\n );\n }\n let payload: unknown;\n try {\n payload = parseJsonStrict(body);\n } catch (cause) {\n throw new SessionError(\"invalid_json\", \"Session token endpoint returned invalid JSON\", {\n statusCode: response.status,\n cause,\n });\n }\n\n if (response.ok) {\n let token: SessionToken;\n try {\n token = parseSessionToken(payload);\n } catch (cause) {\n throw new SessionError(\n \"invalid_token_response\",\n \"Session token response is malformed\",\n { statusCode: response.status, cause },\n );\n }\n if (token.tokenType !== \"DPoP\") {\n throw new SessionError(\n \"unexpected_token_type\",\n \"A proof-bound session request must return a DPoP token\",\n { statusCode: response.status },\n );\n }\n return token;\n }\n\n const source = typeof payload === \"object\" && payload !== null ? payload : {};\n const remoteCode = \"error\" in source ? (source as { error?: unknown }).error : undefined;\n const code = typeof remoteCode === \"string\" ? remoteCode : \"http_error\";\n if (code === \"use_dpop_nonce\" && attempt === 0) {\n nonce = response.headers.get(\"dpop-nonce\") ?? undefined;\n if (!nonce) {\n throw new SessionError(\n \"missing_dpop_nonce\",\n \"Company requested a DPoP nonce but did not send one\",\n { statusCode: response.status },\n );\n }\n continue;\n }\n const retryAfter = response.headers.get(\"retry-after\");\n throw new SessionError(code, \"Company refused the session token request\", {\n statusCode: response.status,\n ...(retryAfter === null ? {} : { details: { retryAfter } }),\n });\n }\n throw new SessionError(\"use_dpop_nonce\", \"Company rejected the refreshed DPoP proof\");\n }\n}\n", "import {\n SignJWT,\n calculateJwkThumbprint,\n decodeProtectedHeader,\n importJWK,\n jwtVerify,\n type JWK,\n type JWTPayload,\n type KeyInput,\n} from \"jose\";\n\nimport { ProofError } from \"./errors.js\";\nimport type { DpopProofProvider, DpopProofRequest, Signer } from \"./reactor.js\";\nimport { SecretValue } from \"./sessions.js\";\n\nexport type JoseAlgorithm = \"ES256\" | \"RS256\";\n\nconst privateJwkMembers = new Set([\"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\", \"oth\", \"k\"]);\n\nfunction algorithm(value: string): JoseAlgorithm {\n if (value !== \"ES256\" && value !== \"RS256\") {\n throw new TypeError(\"PAP JOSE algorithms must be ES256 or RS256\");\n }\n return value;\n}\n\nfunction publicJwk(value: JWK, alg: JoseAlgorithm): JWK {\n for (const member of privateJwkMembers) {\n if (member in value) {\n throw new TypeError(\"DPoP public JWK must not contain private key material\");\n }\n }\n const expected = alg === \"ES256\" ? \"EC\" : \"RSA\";\n if (value.kty !== expected) throw new TypeError(`${alg} requires a ${expected} public JWK`);\n if (alg === \"ES256\") {\n if (value.crv !== \"P-256\" || !value.x || !value.y) {\n throw new TypeError(\"ES256 requires a complete P-256 public JWK\");\n }\n } else if (!value.n || !value.e) {\n throw new TypeError(\"RS256 requires a complete RSA public JWK\");\n }\n return { ...value };\n}\n\nfunction normalizedHtu(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch (cause) {\n throw new ProofError(\"invalid_htu\", \"DPoP target must be an HTTPS URL\", { cause });\n }\n if (url.protocol !== \"https:\" || url.username || url.password) {\n throw new ProofError(\"invalid_htu\", \"DPoP target must be an HTTPS URL\");\n }\n url.search = \"\";\n url.hash = \"\";\n return url.href;\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const value of bytes) binary += String.fromCharCode(value);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/u, \"\");\n}\n\nfunction randomBytes(length: number): Uint8Array {\n if (!globalThis.crypto) throw new ProofError(\"crypto_unavailable\", \"Web Crypto is required\");\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n\nasync function accessTokenHash(token: SecretValue): Promise<string> {\n if (!globalThis.crypto) throw new ProofError(\"crypto_unavailable\", \"Web Crypto is required\");\n const digest = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(token.reveal()),\n );\n return base64Url(new Uint8Array(digest));\n}\n\nexport interface JoseSignerOptions {\n readonly privateKey: KeyInput;\n readonly algorithm?: JoseAlgorithm;\n readonly keyId?: string;\n}\n\n/** Sign PAP assertions with an injected asymmetric private key or handle. */\nexport class JoseSigner implements Signer {\n readonly #privateKey: KeyInput;\n readonly #algorithm: JoseAlgorithm;\n readonly #keyId: string | undefined;\n\n constructor(options: JoseSignerOptions) {\n this.#privateKey = options.privateKey;\n this.#algorithm = algorithm(options.algorithm ?? \"ES256\");\n this.#keyId = options.keyId;\n }\n\n async sign(\n claims: Readonly<Record<string, unknown>>,\n _options: { readonly purpose: string },\n ): Promise<SecretValue> {\n try {\n const token = await new SignJWT(claims as JWTPayload)\n .setProtectedHeader({\n alg: this.#algorithm,\n typ: \"JWT\",\n ...(this.#keyId === undefined ? {} : { kid: this.#keyId }),\n })\n .sign(this.#privateKey);\n return new SecretValue(token);\n } catch (cause) {\n throw new ProofError(\"signing_failed\", \"Could not sign PAP assertion\", { cause });\n }\n }\n}\n\nexport interface DpopKeyMaterial {\n readonly privateKey: KeyInput;\n readonly publicJwk: JWK;\n readonly algorithm?: JoseAlgorithm;\n}\n\nexport type DpopKeyResolver = (\n request: DpopProofRequest,\n) => DpopKeyMaterial | Promise<DpopKeyMaterial>;\n\nexport interface JoseDpopProofProviderOptions {\n readonly resolveKey: DpopKeyResolver;\n readonly now?: () => Date;\n readonly randomBytes?: (length: number) => Uint8Array;\n}\n\n/** Create fresh RFC 9449 proofs using per-user/company key material. */\nexport class JoseDpopProofProvider implements DpopProofProvider {\n readonly #resolveKey: DpopKeyResolver;\n readonly #now: () => Date;\n readonly #randomBytes: (length: number) => Uint8Array;\n\n constructor(options: JoseDpopProofProviderOptions) {\n this.#resolveKey = options.resolveKey;\n this.#now = options.now ?? (() => new Date());\n this.#randomBytes = options.randomBytes ?? randomBytes;\n }\n\n async create(request: DpopProofRequest): Promise<SecretValue> {\n const material = await this.#resolveKey(request);\n const alg = algorithm(material.algorithm ?? \"ES256\");\n const jwk = publicJwk(material.publicJwk, alg);\n const entropy = this.#randomBytes(16);\n if (entropy.byteLength < 16) {\n throw new ProofError(\"weak_randomness\", \"DPoP proof IDs require 128 random bits\");\n }\n const claims: JWTPayload = {\n jti: base64Url(entropy),\n htm: request.method.toUpperCase(),\n htu: normalizedHtu(request.url),\n iat: Math.floor(this.#now().getTime() / 1000),\n ...(request.nonce === undefined ? {} : { nonce: request.nonce }),\n ...(request.accessToken === undefined\n ? {}\n : { ath: await accessTokenHash(request.accessToken) }),\n };\n try {\n const token = await new SignJWT(claims)\n .setProtectedHeader({ typ: \"dpop+jwt\", alg, jwk })\n .sign(material.privateKey);\n return new SecretValue(token);\n } catch (cause) {\n throw new ProofError(\"signing_failed\", \"Could not sign DPoP proof\", { cause });\n }\n }\n}\n\nexport interface DpopReplayCache {\n markOnce(key: string, options: { readonly expiresAt: Date }): Promise<boolean>;\n}\n\nexport interface VerifyDpopProofOptions {\n readonly method: string;\n readonly url: string;\n readonly replayCache: DpopReplayCache;\n readonly accessToken?: SecretValue;\n readonly nonce?: string;\n readonly now?: Date;\n readonly acceptanceWindowSeconds?: number;\n}\n\nexport interface VerifiedDpopProof {\n readonly jti: string;\n readonly issuedAt: Date;\n readonly publicJwk: JWK;\n readonly keyThumbprint: string;\n}\n\n/** Verify signature, binding, freshness, nonce, token hash, and replay state. */\nexport async function verifyDpopProof(\n proof: SecretValue | string,\n options: VerifyDpopProofOptions,\n): Promise<VerifiedDpopProof> {\n const compact = proof instanceof SecretValue ? proof.reveal() : proof;\n const now = options.now ?? new Date();\n const windowSeconds = options.acceptanceWindowSeconds ?? 60;\n if (!Number.isInteger(windowSeconds) || windowSeconds <= 0) {\n throw new RangeError(\"acceptanceWindowSeconds must be a positive integer\");\n }\n let jwk: JWK;\n let payload: JWTPayload;\n try {\n const header = decodeProtectedHeader(compact);\n const alg = algorithm(header.alg ?? \"\");\n if (header.typ !== \"dpop+jwt\" || typeof header.jwk !== \"object\") {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP protected header is invalid\");\n }\n jwk = publicJwk(header.jwk, alg);\n const key = await importJWK(jwk, alg);\n ({ payload } = await jwtVerify(compact, key, {\n algorithms: [alg],\n typ: \"dpop+jwt\",\n requiredClaims: [\"jti\", \"htm\", \"htu\", \"iat\"],\n }));\n } catch (cause) {\n if (cause instanceof ProofError) throw cause;\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP signature or claims are invalid\", {\n cause,\n });\n }\n if (typeof payload.jti !== \"string\" || !payload.jti || typeof payload.iat !== \"number\") {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof identity is invalid\");\n }\n const issuedAt = new Date(payload.iat * 1000);\n const difference = Math.abs(now.getTime() - issuedAt.getTime());\n if (difference > windowSeconds * 1000) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof is outside the acceptance window\");\n }\n if (payload.htm !== options.method.toUpperCase() || payload.htu !== normalizedHtu(options.url)) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof does not match the request\");\n }\n if (options.nonce !== undefined && payload.nonce !== options.nonce) {\n throw new ProofError(\"use_dpop_nonce\", \"DPoP proof nonce is missing or invalid\");\n }\n if (options.accessToken !== undefined) {\n if (payload.ath !== (await accessTokenHash(options.accessToken))) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP access-token hash is invalid\");\n }\n } else if (payload.ath !== undefined) {\n throw new ProofError(\n \"invalid_dpop_proof\",\n \"Token-endpoint DPoP proof must not contain ath\",\n );\n }\n const keyThumbprint = await calculateJwkThumbprint(jwk);\n if (\n !(await options.replayCache.markOnce(`${keyThumbprint}:${payload.jti}`, {\n expiresAt: new Date(now.getTime() + windowSeconds * 1000),\n }))\n ) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof has already been used\");\n }\n return { jti: payload.jti, issuedAt, publicJwk: jwk, keyThumbprint };\n}\n", "import { AuthorizationError } from \"./errors.js\";\nimport { JWT_CLIENT_ASSERTION, SecretValue, type RandomBytes } from \"./sessions.js\";\n\nfunction defaultRandomBytes(length: number): Uint8Array {\n if (!globalThis.crypto) {\n throw new AuthorizationError(\"crypto_unavailable\", \"Web Crypto is required\");\n }\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n\nfunction entropy(length: number, randomBytes: RandomBytes): Uint8Array {\n const value = randomBytes(length);\n if (value.byteLength < length) {\n throw new AuthorizationError(\n \"weak_entropy\",\n `Authorization requires ${length * 8} random bits`,\n );\n }\n return value;\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const first = bytes[index] ?? 0;\n const second = bytes[index + 1];\n const third = bytes[index + 2];\n output += alphabet[first >>> 2];\n output += alphabet[((first & 3) << 4) | ((second ?? 0) >>> 4)];\n if (second !== undefined) {\n output += alphabet[((second & 15) << 2) | ((third ?? 0) >>> 6)];\n }\n if (third !== undefined) {\n output += alphabet[third & 63];\n }\n }\n return output;\n}\n\nfunction httpsUrl(value: string, label: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n throw new AuthorizationError(\"invalid_url\", `${label} must be an HTTPS URL`, { cause });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new AuthorizationError(\"invalid_url\", `${label} must be an HTTPS URL`);\n }\n return parsed;\n}\n\nfunction validScopes(values: readonly string[]): readonly string[] {\n const scopes = [...new Set(values)];\n const token = /^[\\x21\\x23-\\x5b\\x5d-\\x7e]+$/;\n if (scopes.length === 0 || scopes.some((scope) => !token.test(scope))) {\n throw new AuthorizationError(\"invalid_scope\", \"At least one valid OAuth scope is required\");\n }\n return scopes;\n}\n\nexport interface DirectSignInOptions {\n readonly authorizationEndpoint: string;\n readonly issuer: string;\n readonly clientId: string;\n readonly redirectUri: string;\n readonly scopes: readonly string[];\n readonly randomBytes?: RandomBytes;\n}\n\nexport interface DirectSignInRequest {\n readonly authorizationUrl: SecretValue;\n readonly issuer: string;\n readonly clientId: string;\n readonly redirectUri: string;\n readonly scopes: readonly string[];\n readonly state: SecretValue;\n readonly codeVerifier: SecretValue;\n}\n\nexport async function buildDirectSignInRequest(\n options: DirectSignInOptions,\n): Promise<DirectSignInRequest> {\n const randomBytes = options.randomBytes ?? defaultRandomBytes;\n const state = base64Url(entropy(16, randomBytes));\n const verifier = base64Url(entropy(32, randomBytes));\n const challenge = base64Url(\n new Uint8Array(await globalThis.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(verifier))),\n );\n const endpoint = httpsUrl(options.authorizationEndpoint, \"authorizationEndpoint\");\n const scopes = validScopes(options.scopes);\n const clientId = httpsUrl(options.clientId, \"clientId\").toString();\n const redirectUri = httpsUrl(options.redirectUri, \"redirectUri\").toString();\n const issuer = httpsUrl(options.issuer, \"issuer\").toString().replace(/\\/$/, \"\");\n endpoint.searchParams.set(\"response_type\", \"code\");\n endpoint.searchParams.set(\"client_id\", clientId);\n endpoint.searchParams.set(\"redirect_uri\", redirectUri);\n endpoint.searchParams.set(\"scope\", scopes.join(\" \"));\n endpoint.searchParams.set(\"state\", state);\n endpoint.searchParams.set(\"code_challenge\", challenge);\n endpoint.searchParams.set(\"code_challenge_method\", \"S256\");\n endpoint.hash = \"\";\n return {\n authorizationUrl: new SecretValue(endpoint.toString()),\n issuer,\n clientId,\n redirectUri,\n scopes,\n state: new SecretValue(state),\n codeVerifier: new SecretValue(verifier),\n };\n}\n\nexport interface DirectSignInCallback {\n readonly code: SecretValue;\n readonly issuer: string;\n}\n\nfunction equalConstantTime(left: string, right: string): boolean {\n let difference = left.length ^ right.length;\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n difference |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0);\n }\n return difference === 0;\n}\n\nexport function validateDirectSignInCallback(\n request: DirectSignInRequest,\n callbackUrl: string,\n): DirectSignInCallback {\n const expected = httpsUrl(request.redirectUri, \"redirectUri\");\n const callback = httpsUrl(callbackUrl, \"callbackUrl\");\n if (callback.hash) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization callback has a fragment\");\n }\n if (callback.origin !== expected.origin || callback.pathname !== expected.pathname) {\n throw new AuthorizationError(\"redirect_mismatch\", \"Callback does not match redirect URI\");\n }\n for (const [key, value] of expected.searchParams) {\n if (callback.searchParams.get(key) !== value) {\n throw new AuthorizationError(\n \"redirect_mismatch\",\n \"Callback changed redirect URI parameters\",\n );\n }\n }\n for (const key of [\"code\", \"state\", \"iss\", \"error\"]) {\n if (callback.searchParams.getAll(key).length > 1) {\n throw new AuthorizationError(\n \"invalid_callback\",\n \"Authorization callback repeats a security parameter\",\n );\n }\n }\n if (callback.searchParams.has(\"error\")) {\n throw new AuthorizationError(\"authorization_denied\", \"Company did not authorize the request\");\n }\n if (!equalConstantTime(callback.searchParams.get(\"state\") ?? \"\", request.state.reveal())) {\n throw new AuthorizationError(\"state_mismatch\", \"Authorization state does not match\");\n }\n if (callback.searchParams.get(\"iss\") !== request.issuer) {\n throw new AuthorizationError(\"issuer_mismatch\", \"Authorization issuer does not match\");\n }\n const code = callback.searchParams.get(\"code\");\n if (!code) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization callback has no code\");\n }\n return { code: new SecretValue(code), issuer: request.issuer };\n}\n\nexport interface AuthorizationCodeGrantOptions {\n readonly code: string;\n readonly redirectUri: string;\n readonly codeVerifier: string;\n readonly sessionId: string;\n readonly clientId: string;\n readonly clientAssertion: string;\n}\n\nexport class AuthorizationCodeGrant {\n readonly code: SecretValue;\n readonly redirectUri: string;\n readonly codeVerifier: SecretValue;\n readonly sessionId: string;\n readonly clientId: string;\n readonly clientAssertion: SecretValue;\n\n constructor(options: AuthorizationCodeGrantOptions) {\n this.code = new SecretValue(options.code);\n this.redirectUri = httpsUrl(options.redirectUri, \"redirectUri\").toString();\n this.codeVerifier = new SecretValue(options.codeVerifier);\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.sessionId)) {\n throw new AuthorizationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n this.sessionId = options.sessionId;\n this.clientId = httpsUrl(options.clientId, \"clientId\").toString();\n this.clientAssertion = new SecretValue(options.clientAssertion);\n }\n\n toForm(): URLSearchParams {\n return new URLSearchParams({\n grant_type: \"authorization_code\",\n code: this.code.reveal(),\n redirect_uri: this.redirectUri,\n code_verifier: this.codeVerifier.reveal(),\n session_id: this.sessionId,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion.reveal(),\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n grant_type: \"authorization_code\",\n code: this.code,\n redirect_uri: this.redirectUri,\n code_verifier: this.codeVerifier,\n session_id: this.sessionId,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion,\n };\n }\n}\n", "import { ProtocolValidationError } from \"./errors.js\";\n\nexport type UnknownFields = Readonly<Record<string, unknown>>;\n\nexport interface Organization extends UnknownFields {\n readonly name: string;\n readonly domain: string;\n}\n\nexport interface ScopeOption extends UnknownFields {\n readonly scopes: readonly string[];\n}\n\nexport interface MediatedField extends UnknownFields {\n readonly name: string;\n readonly label: string;\n readonly secret: boolean;\n}\n\nexport interface MediatedSignIn extends ScopeOption {\n readonly endpoint: string;\n readonly fields: readonly MediatedField[];\n}\n\nexport interface AuthCapabilities extends UnknownFields {\n readonly issuer: string;\n readonly direct?: ScopeOption;\n readonly device?: ScopeOption;\n readonly mediated?: MediatedSignIn;\n readonly custom_scopes?: Readonly<Record<string, string>>;\n}\n\nexport interface AgentProtocol extends UnknownFields {\n readonly type: string;\n readonly endpoint: string;\n readonly resource?: string;\n}\n\nexport interface AgentDescriptor extends UnknownFields {\n readonly protocols: readonly AgentProtocol[];\n}\n\nexport interface ApiDescriptor extends UnknownFields {\n readonly type: string;\n readonly url: string;\n readonly description: string;\n readonly resource?: string;\n}\n\nexport interface WebDescriptor extends UnknownFields {\n readonly browser_session_endpoint?: string;\n}\n\nexport interface ExtensionDescriptor extends UnknownFields {\n readonly version: string;\n}\n\nexport interface DiscoveryDocument extends UnknownFields {\n readonly protocol_version: string;\n readonly organization: Organization;\n readonly auth?: AuthCapabilities;\n readonly agent?: AgentDescriptor;\n readonly web?: WebDescriptor;\n readonly apis: readonly ApiDescriptor[];\n readonly extensions: Readonly<Record<string, ExtensionDescriptor>>;\n}\n\nexport interface OAuthServerMetadata extends UnknownFields {\n readonly issuer: string;\n readonly token_endpoint: string;\n readonly revocation_endpoint: string;\n readonly authorization_endpoint?: string;\n readonly device_authorization_endpoint?: string;\n readonly poppy_domains: readonly string[];\n}\n\nexport interface ClientMetadata extends UnknownFields {\n readonly client_id: string;\n readonly client_name: string;\n readonly logo_uri?: string;\n readonly jwks_uri: string;\n readonly redirect_uris: readonly string[];\n readonly token_endpoint_auth_method: \"private_key_jwt\";\n readonly extensions: Readonly<Record<string, ExtensionDescriptor>>;\n}\n\nexport type OperationState =\n | \"proposed\"\n | \"in_progress\"\n | \"succeeded\"\n | \"failed\"\n | \"cancelled\"\n | \"expired\";\n\nexport interface OperationResult extends UnknownFields {\n readonly summary: string;\n readonly data?: Readonly<Record<string, unknown>>;\n}\n\nexport interface OperationConfirmation extends UnknownFields {\n readonly revision: number;\n readonly approved_by: \"user\" | \"standing_permission\";\n readonly confirmed_at: string;\n}\n\nexport interface Operation extends UnknownFields {\n readonly operation_id: string;\n readonly revision: number;\n readonly state: OperationState;\n readonly summary: string;\n readonly terms?: Readonly<Record<string, unknown>>;\n readonly expires_at?: string;\n readonly user_approval_required: boolean;\n readonly url?: string;\n readonly confirmation: OperationConfirmation | null;\n readonly result: OperationResult | null;\n}\n\nexport interface Message extends UnknownFields {\n readonly id: string;\n readonly sender: \"agent\" | \"human\";\n readonly role?: \"user\" | \"company\";\n readonly text?: string;\n readonly data?: Readonly<Record<string, unknown>>;\n readonly context?: Readonly<Record<string, unknown>>;\n readonly operation?: Operation;\n}\n\nexport type ConversationStatus = \"working\" | \"idle\" | \"queued\" | \"closed\";\nexport type ConversationResponder = \"agent\" | \"human\";\n\nexport interface ConversationEvent extends UnknownFields {\n readonly id: string;\n readonly type: string;\n readonly created_at: string;\n readonly message?: Message;\n readonly status?: ConversationStatus;\n readonly responder?: ConversationResponder;\n readonly error?: \"sign_in_required\" | \"insufficient_scope\";\n readonly scope?: string;\n readonly reason?: string;\n readonly conversation_id?: string;\n}\n\nexport interface ConversationEventPage extends UnknownFields {\n readonly conversation_id: string;\n readonly events: readonly ConversationEvent[];\n readonly cursor: string;\n readonly has_more: boolean;\n readonly status: ConversationStatus;\n readonly responder: ConversationResponder;\n}\n\nexport interface DiscoveredCompany {\n readonly discoveryUrl: string;\n readonly document: DiscoveryDocument;\n readonly oauthMetadata?: OAuthServerMetadata;\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction string(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction array(value: unknown, label: string): readonly unknown[] {\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an array`);\n }\n return value;\n}\n\nfunction boolean(value: unknown, label: string): boolean {\n if (typeof value !== \"boolean\") {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a boolean`);\n }\n return value;\n}\n\nfunction integer(value: unknown, label: string, minimum = 1): number {\n if (!Number.isInteger(value) || (value as number) < minimum) {\n throw new ProtocolValidationError(\n \"invalid_type\",\n `${label} must be an integer greater than or equal to ${minimum}`,\n );\n }\n return value as number;\n}\n\nfunction identifier(value: unknown, label: string): string {\n const result = string(value, label);\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(result)) {\n throw new ProtocolValidationError(\n \"invalid_identifier\",\n `${label} must use the URL-safe base64 alphabet`,\n );\n }\n return result;\n}\n\nfunction timestamp(value: unknown, label: string): string {\n const result = string(value, label);\n if (!/(?:Z|[+-][0-9]{2}:[0-9]{2})$/u.test(result) || Number.isNaN(Date.parse(result))) {\n throw new ProtocolValidationError(\n \"invalid_timestamp\",\n `${label} must be an RFC 3339 timestamp with a timezone`,\n );\n }\n return result;\n}\n\nfunction oneOf<T extends string>(\n value: unknown,\n values: readonly T[],\n label: string,\n): T {\n if (typeof value !== \"string\" || !values.includes(value as T)) {\n throw new ProtocolValidationError(\n \"invalid_value\",\n `${label} must be one of ${values.join(\", \")}`,\n );\n }\n return value as T;\n}\n\nfunction optionalRecord(\n value: unknown,\n label: string,\n): Readonly<Record<string, unknown>> | undefined {\n return value === undefined ? undefined : record(value, label);\n}\n\nfunction extensions(\n value: unknown,\n label: string,\n): Readonly<Record<string, ExtensionDescriptor>> {\n const source = record(value ?? {}, label);\n return Object.fromEntries(\n Object.entries(source).map(([name, item]) => {\n const extension = record(item, `${label}.${name}`);\n const version = string(extension.version, `${label}.${name}.version`);\n if (!/^(0|[1-9][0-9]*)$/.test(version)) {\n throw new ProtocolValidationError(\n \"invalid_extension_version\",\n `${label}.${name}.version must be a major version`,\n );\n }\n return [name, { ...extension, version } as ExtensionDescriptor];\n }),\n );\n}\n\nfunction httpsUrl(value: unknown, label: string): string {\n const result = string(value, label);\n let parsed: URL;\n try {\n parsed = new URL(result);\n } catch (cause) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`, {\n cause,\n });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new ProtocolValidationError(\n \"invalid_url\",\n `${label} must be an HTTPS URL without user information`,\n );\n }\n return result;\n}\n\nfunction domain(value: unknown, label: string): string {\n const result = string(value, label).replace(/\\.$/, \"\").toLowerCase();\n if (\n !/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(\n result,\n )\n ) {\n throw new ProtocolValidationError(\"invalid_domain\", `${label} must be a DNS domain`);\n }\n return result;\n}\n\nfunction scopes(value: unknown, label: string): ScopeOption {\n const source = record(value, label);\n return {\n ...source,\n scopes: array(source.scopes ?? [], `${label}.scopes`).map((item) => string(item, \"scope\")),\n } as ScopeOption;\n}\n\nfunction stringMap(value: unknown, label: string): Readonly<Record<string, string>> {\n const source = record(value, label);\n return Object.fromEntries(\n Object.entries(source).map(([key, item]) => [key, string(item, `${label}.${key}`)]),\n );\n}\n\nexport function parseDiscoveryDocument(value: unknown): DiscoveryDocument {\n const source = record(value, \"poppy.json\");\n const version = string(source.protocol_version, \"protocol_version\");\n const versionMatch = /^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$/.exec(version);\n if (!versionMatch || versionMatch[1] !== \"0\") {\n throw new ProtocolValidationError(\n \"unsupported_protocol_version\",\n \"protocol_version must be a supported major.minor version\",\n );\n }\n\n const organizationSource = record(source.organization, \"organization\");\n const organization: Organization = {\n ...organizationSource,\n name: string(organizationSource.name, \"organization.name\"),\n domain: domain(organizationSource.domain, \"organization.domain\"),\n } as Organization;\n\n let auth: AuthCapabilities | undefined;\n if (source.auth !== undefined) {\n const authSource = record(source.auth, \"auth\");\n let mediated: MediatedSignIn | undefined;\n if (authSource.mediated !== undefined) {\n const mediatedSource = record(authSource.mediated, \"auth.mediated\");\n const fields = array(mediatedSource.fields, \"auth.mediated.fields\").map(\n (item, index) => {\n const field = record(item, `auth.mediated.fields[${index}]`);\n return {\n ...field,\n name: string(field.name, `auth.mediated.fields[${index}].name`),\n label: string(field.label, `auth.mediated.fields[${index}].label`),\n secret: boolean(field.secret, `auth.mediated.fields[${index}].secret`),\n } as MediatedField;\n },\n );\n if (fields.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_mediated_sign_in\",\n \"auth.mediated.fields must not be empty\",\n );\n }\n mediated = {\n ...mediatedSource,\n ...scopes(mediatedSource, \"auth.mediated\"),\n endpoint: httpsUrl(mediatedSource.endpoint, \"auth.mediated.endpoint\"),\n fields,\n } as MediatedSignIn;\n }\n auth = {\n ...authSource,\n issuer: httpsUrl(authSource.issuer, \"auth.issuer\").replace(/\\/$/, \"\"),\n ...(authSource.direct === undefined\n ? {}\n : { direct: scopes(authSource.direct, \"auth.direct\") }),\n ...(authSource.device === undefined\n ? {}\n : { device: scopes(authSource.device, \"auth.device\") }),\n ...(mediated === undefined ? {} : { mediated }),\n ...(authSource.custom_scopes === undefined\n ? {}\n : {\n custom_scopes: stringMap(authSource.custom_scopes, \"auth.custom_scopes\"),\n }),\n } as AuthCapabilities;\n }\n\n const apis = array(source.apis ?? [], \"apis\").map((item, index) => {\n const api = record(item, `apis[${index}]`);\n return {\n ...api,\n type: string(api.type, `apis[${index}].type`),\n url: httpsUrl(api.url, `apis[${index}].url`),\n description: string(api.description, `apis[${index}].description`),\n ...(api.resource === undefined\n ? {}\n : { resource: httpsUrl(api.resource, `apis[${index}].resource`) }),\n } as ApiDescriptor;\n });\n\n let agent: AgentDescriptor | undefined;\n if (source.agent !== undefined) {\n const agentSource = record(source.agent, \"agent\");\n const protocols = array(agentSource.protocols, \"agent.protocols\").map((item, index) => {\n const protocol = record(item, `agent.protocols[${index}]`);\n return {\n ...protocol,\n type: string(protocol.type, `agent.protocols[${index}].type`),\n endpoint: httpsUrl(protocol.endpoint, `agent.protocols[${index}].endpoint`),\n ...(protocol.resource === undefined\n ? {}\n : {\n resource: httpsUrl(\n protocol.resource,\n `agent.protocols[${index}].resource`,\n ),\n }),\n } as AgentProtocol;\n });\n if (protocols.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_agent\",\n \"agent.protocols must not be empty\",\n );\n }\n agent = { ...agentSource, protocols } as AgentDescriptor;\n }\n\n let web: WebDescriptor | undefined;\n if (source.web !== undefined) {\n const webSource = record(source.web, \"web\");\n web = {\n ...webSource,\n ...(webSource.browser_session_endpoint === undefined\n ? {}\n : {\n browser_session_endpoint: httpsUrl(\n webSource.browser_session_endpoint,\n \"web.browser_session_endpoint\",\n ),\n }),\n };\n }\n\n if (!agent && apis.length === 0 && !web) {\n throw new ProtocolValidationError(\n \"missing_interface\",\n \"one of agent, apis, or web is required\",\n );\n }\n if ((agent || apis.length > 0 || web?.browser_session_endpoint) && !auth) {\n throw new ProtocolValidationError(\n \"missing_auth\",\n \"auth is required for sessions, APIs, or conversations\",\n );\n }\n\n const parsedExtensions = extensions(source.extensions, \"extensions\");\n\n return {\n ...source,\n protocol_version: version,\n organization,\n ...(auth ? { auth } : {}),\n ...(agent ? { agent } : {}),\n ...(web ? { web } : {}),\n apis,\n extensions: parsedExtensions,\n } as DiscoveryDocument;\n}\n\nexport function parseOAuthServerMetadata(value: unknown): OAuthServerMetadata {\n const source = record(value, \"OAuth metadata\");\n const poppyDomains = array(source.poppy_domains, \"poppy_domains\").map((item) =>\n domain(item, \"poppy_domains entry\"),\n );\n if (poppyDomains.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_oauth_metadata\",\n \"poppy_domains must not be empty\",\n );\n }\n return {\n ...source,\n issuer: httpsUrl(source.issuer, \"issuer\").replace(/\\/$/, \"\"),\n token_endpoint: httpsUrl(source.token_endpoint, \"token_endpoint\"),\n revocation_endpoint: httpsUrl(source.revocation_endpoint, \"revocation_endpoint\"),\n ...(source.authorization_endpoint === undefined\n ? {}\n : {\n authorization_endpoint: httpsUrl(\n source.authorization_endpoint,\n \"authorization_endpoint\",\n ),\n }),\n ...(source.device_authorization_endpoint === undefined\n ? {}\n : {\n device_authorization_endpoint: httpsUrl(\n source.device_authorization_endpoint,\n \"device_authorization_endpoint\",\n ),\n }),\n poppy_domains: poppyDomains,\n } as OAuthServerMetadata;\n}\n\nexport function parseClientMetadata(value: unknown): ClientMetadata {\n const source = record(value, \"client metadata\");\n const clientId = httpsUrl(source.client_id, \"client_id\");\n const clientDomain = new URL(clientId).hostname;\n const jwksUri = httpsUrl(source.jwks_uri, \"jwks_uri\");\n const redirectUris = array(source.redirect_uris ?? [], \"redirect_uris\").map((item) =>\n httpsUrl(item, \"redirect URI\"),\n );\n if (\n new URL(jwksUri).hostname !== clientDomain ||\n redirectUris.some((uri) => new URL(uri).hostname !== clientDomain)\n ) {\n throw new ProtocolValidationError(\n \"client_domain_mismatch\",\n \"jwks_uri and redirect_uris must use the client_id domain\",\n );\n }\n const authMethod = source.token_endpoint_auth_method ?? \"private_key_jwt\";\n if (authMethod !== \"private_key_jwt\") {\n throw new ProtocolValidationError(\n \"invalid_client_auth_method\",\n \"token_endpoint_auth_method must be private_key_jwt\",\n );\n }\n return {\n ...source,\n client_id: clientId,\n client_name: string(source.client_name, \"client_name\"),\n ...(source.logo_uri === undefined\n ? {}\n : { logo_uri: httpsUrl(source.logo_uri, \"logo_uri\") }),\n jwks_uri: jwksUri,\n redirect_uris: redirectUris,\n token_endpoint_auth_method: authMethod,\n extensions: extensions(source.extensions, \"extensions\"),\n } as ClientMetadata;\n}\n\nexport function parseOperation(value: unknown): Operation {\n const source = record(value, \"operation\");\n const state = oneOf(\n source.state,\n [\"proposed\", \"in_progress\", \"succeeded\", \"failed\", \"cancelled\", \"expired\"] as const,\n \"operation.state\",\n );\n const revision = integer(source.revision, \"operation.revision\");\n let confirmation: OperationConfirmation | null = null;\n if (source.confirmation !== undefined && source.confirmation !== null) {\n const item = record(source.confirmation, \"operation.confirmation\");\n confirmation = {\n ...item,\n revision: integer(item.revision, \"operation.confirmation.revision\"),\n approved_by: oneOf(\n item.approved_by,\n [\"user\", \"standing_permission\"] as const,\n \"operation.confirmation.approved_by\",\n ),\n confirmed_at: timestamp(item.confirmed_at, \"operation.confirmation.confirmed_at\"),\n } as OperationConfirmation;\n }\n let result: OperationResult | null = null;\n if (source.result !== undefined && source.result !== null) {\n const item = record(source.result, \"operation.result\");\n result = {\n ...item,\n summary: string(item.summary, \"operation.result.summary\"),\n ...(item.data === undefined\n ? {}\n : { data: record(item.data, \"operation.result.data\") }),\n } as OperationResult;\n }\n const expiresAt =\n source.expires_at === undefined\n ? undefined\n : timestamp(source.expires_at, \"operation.expires_at\");\n if (state === \"proposed\" && expiresAt === undefined) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a proposed operation requires expires_at\",\n );\n }\n if (state === \"proposed\" && confirmation !== null) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a proposed operation cannot be confirmed\",\n );\n }\n if (confirmation !== null && confirmation.revision !== revision) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"confirmation must name the current revision\",\n );\n }\n if ([\"succeeded\", \"failed\", \"cancelled\", \"expired\"].includes(state) && result === null) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a final operation requires a result\",\n );\n }\n return {\n ...source,\n operation_id: identifier(source.operation_id, \"operation.operation_id\"),\n revision,\n state,\n summary: string(source.summary, \"operation.summary\"),\n ...(source.terms === undefined\n ? {}\n : { terms: record(source.terms, \"operation.terms\") }),\n ...(expiresAt === undefined ? {} : { expires_at: expiresAt }),\n user_approval_required:\n source.user_approval_required === undefined\n ? false\n : boolean(source.user_approval_required, \"operation.user_approval_required\"),\n ...(source.url === undefined ? {} : { url: httpsUrl(source.url, \"operation.url\") }),\n confirmation,\n result,\n } as Operation;\n}\n\nexport function parseMessage(value: unknown): Message {\n const source = record(value, \"message\");\n const text = source.text === undefined ? undefined : string(source.text, \"message.text\");\n const data = optionalRecord(source.data, \"message.data\");\n const context = optionalRecord(source.context, \"message.context\");\n const operation =\n source.operation === undefined ? undefined : parseOperation(source.operation);\n if (text === undefined && data === undefined && context === undefined && operation === undefined) {\n throw new ProtocolValidationError(\n \"invalid_message\",\n \"a message requires text, data, context, or operation\",\n );\n }\n return {\n ...source,\n id: identifier(source.id, \"message.id\"),\n sender: oneOf(source.sender, [\"agent\", \"human\"] as const, \"message.sender\"),\n ...(source.role === undefined\n ? {}\n : { role: oneOf(source.role, [\"user\", \"company\"] as const, \"message.role\") }),\n ...(text === undefined ? {} : { text }),\n ...(data === undefined ? {} : { data }),\n ...(context === undefined ? {} : { context }),\n ...(operation === undefined ? {} : { operation }),\n } as Message;\n}\n\nexport function parseConversationEvent(value: unknown): ConversationEvent {\n const source = record(value, \"conversation event\");\n const type = string(source.type, \"conversation event.type\");\n const parsed: ConversationEvent = {\n ...source,\n id: identifier(source.id, \"conversation event.id\"),\n type,\n created_at: timestamp(source.created_at, \"conversation event.created_at\"),\n ...(source.message === undefined ? {} : { message: parseMessage(source.message) }),\n ...(source.status === undefined\n ? {}\n : {\n status: oneOf(\n source.status,\n [\"working\", \"idle\", \"queued\", \"closed\"] as const,\n \"conversation event.status\",\n ),\n }),\n ...(source.responder === undefined\n ? {}\n : {\n responder: oneOf(\n source.responder,\n [\"agent\", \"human\"] as const,\n \"conversation event.responder\",\n ),\n }),\n ...(source.error === undefined\n ? {}\n : {\n error: oneOf(\n source.error,\n [\"sign_in_required\", \"insufficient_scope\"] as const,\n \"conversation event.error\",\n ),\n }),\n ...(source.scope === undefined ? {} : { scope: string(source.scope, \"conversation event.scope\") }),\n ...(source.reason === undefined\n ? {}\n : { reason: string(source.reason, \"conversation event.reason\") }),\n ...(source.conversation_id === undefined\n ? {}\n : {\n conversation_id: identifier(\n source.conversation_id,\n \"conversation event.conversation_id\",\n ),\n }),\n } as ConversationEvent;\n if (type === \"message\" && parsed.message === undefined) {\n throw new ProtocolValidationError(\"invalid_event\", \"a message event requires message\");\n }\n if (type === \"state\" && (parsed.status === undefined || parsed.responder === undefined)) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a state event requires status and responder\",\n );\n }\n if (type === \"authorization\") {\n if (parsed.error === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"an authorization event requires error\",\n );\n }\n if (parsed.error === \"insufficient_scope\" && parsed.scope === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"insufficient_scope requires scope\",\n );\n }\n }\n if (type === \"user_requested\" && parsed.reason === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a user_requested event requires reason\",\n );\n }\n if (\n (type === \"direct_opened\" || type === \"direct_closed\") &&\n parsed.conversation_id === undefined\n ) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a direct conversation event requires conversation_id\",\n );\n }\n return parsed;\n}\n\nexport function parseConversationEventPage(value: unknown): ConversationEventPage {\n const source = record(value, \"conversation event page\");\n return {\n ...source,\n conversation_id: identifier(source.conversation_id, \"conversation_id\"),\n events: array(source.events, \"events\").map(parseConversationEvent),\n cursor: identifier(source.cursor, \"cursor\"),\n has_more: boolean(source.has_more, \"has_more\"),\n status: oneOf(\n source.status,\n [\"working\", \"idle\", \"queued\", \"closed\"] as const,\n \"status\",\n ),\n responder: oneOf(source.responder, [\"agent\", \"human\"] as const, \"responder\"),\n } as ConversationEventPage;\n}\n", "import { DiscoveryError, ProtocolValidationError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport {\n parseDiscoveryDocument,\n parseOAuthServerMetadata,\n type DiscoveredCompany,\n} from \"./models.js\";\nimport {\n DiscoveryTransports,\n UrlSafetyPolicies,\n buildPapReactor,\n firstContribution,\n type DiscoveryTransport,\n type UrlSafetyPolicy,\n} from \"./reactor.js\";\nimport type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nexport interface DiscoveryOptions {\n readonly reactor?: ReactorPlatformView;\n readonly fetch?: typeof globalThis.fetch;\n readonly assertSafeUrl?: (url: URL) => void | Promise<void>;\n readonly maxRedirects?: number;\n readonly maxResponseBytes?: number;\n}\n\nfunction normalizeDomain(domain: string): string {\n const value = domain.replace(/\\.$/, \"\").toLowerCase();\n if (!value || value.includes(\"://\") || value.includes(\"/\")) {\n throw new DiscoveryError(\"invalid_domain\", \"Discovery requires a DNS domain name\");\n }\n return value;\n}\n\nfunction metadataUrl(issuer: string): URL {\n const parsed = new URL(issuer);\n const path = parsed.pathname.replace(/\\/$/, \"\");\n parsed.pathname = `/.well-known/oauth-authorization-server${path}`;\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed;\n}\n\nasync function readJson(\n initialUrl: URL,\n transport: DiscoveryTransport,\n urlPolicy: UrlSafetyPolicy,\n maxRedirects: number,\n maxResponseBytes: number,\n): Promise<{ value: unknown; finalUrl: URL }> {\n let current = initialUrl;\n for (let redirects = 0; redirects <= maxRedirects; redirects += 1) {\n await urlPolicy.assertSafe(current);\n let response: Response;\n try {\n response = await transport.fetch(current, {\n headers: { Accept: \"application/json\" },\n redirect: \"manual\",\n credentials: \"omit\",\n });\n } catch (cause) {\n throw new DiscoveryError(\"request_failed\", \"Discovery request failed\", { cause });\n }\n\n if (response.status >= 300 && response.status < 400) {\n if (redirects === maxRedirects) {\n throw new DiscoveryError(\"too_many_redirects\", \"Discovery exceeded redirect limit\");\n }\n const location = response.headers.get(\"location\");\n if (!location) {\n throw new DiscoveryError(\"invalid_redirect\", \"Discovery redirect has no location\");\n }\n current = new URL(location, current);\n continue;\n }\n if (!response.ok) {\n throw new DiscoveryError(\n \"http_error\",\n \"Discovery endpoint returned an unsuccessful status\",\n { statusCode: response.status },\n );\n }\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\" && contentType !== \"application/poppy+json\") {\n throw new DiscoveryError(\"invalid_content_type\", \"Discovery response must be JSON\");\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > maxResponseBytes) {\n throw new DiscoveryError(\"response_too_large\", \"Discovery response exceeds size limit\");\n }\n try {\n return { value: parseJsonStrict(body), finalUrl: current };\n } catch (cause) {\n if (cause instanceof ProtocolValidationError) throw cause;\n throw new ProtocolValidationError(\"invalid_json\", \"Response is not valid JSON\", {\n cause,\n });\n }\n }\n throw new DiscoveryError(\"too_many_redirects\", \"Discovery exceeded redirect limit\");\n}\n\nexport async function discoverCompany(\n domain: string,\n options: DiscoveryOptions = {},\n): Promise<DiscoveredCompany> {\n const requestedDomain = normalizeDomain(domain);\n const reactor = options.reactor ?? buildPapReactor(options);\n const transport = firstContribution<DiscoveryTransport>(\n reactor,\n DiscoveryTransports,\n \"discovery transport\",\n );\n const urlPolicy = firstContribution<UrlSafetyPolicy>(\n reactor,\n UrlSafetyPolicies,\n \"URL safety policy\",\n );\n const maxRedirects = options.maxRedirects ?? 3;\n const maxBytes = options.maxResponseBytes ?? 100 * 1024;\n const discovery = await readJson(\n new URL(`https://${requestedDomain}/.well-known/poppy.json`),\n transport,\n urlPolicy,\n maxRedirects,\n maxBytes,\n );\n const document = parseDiscoveryDocument(discovery.value);\n if (\n document.organization.domain.replace(/^www\\./, \"\") !==\n requestedDomain.replace(/^www\\./, \"\")\n ) {\n throw new DiscoveryError(\n \"organization_domain_mismatch\",\n \"Discovery organization domain does not match the requested domain\",\n );\n }\n if (!document.auth) {\n return { discoveryUrl: discovery.finalUrl.toString(), document };\n }\n\n const metadataResponse = await readJson(\n metadataUrl(document.auth.issuer),\n transport,\n urlPolicy,\n maxRedirects,\n maxBytes,\n );\n const oauthMetadata = parseOAuthServerMetadata(metadataResponse.value);\n if (oauthMetadata.issuer !== document.auth.issuer) {\n throw new DiscoveryError(\"issuer_mismatch\", \"OAuth metadata issuer does not match auth.issuer\");\n }\n if (!oauthMetadata.poppy_domains.includes(document.organization.domain)) {\n throw new DiscoveryError(\n \"domain_not_authorized\",\n \"OAuth metadata does not authorize the discovered company domain\",\n );\n }\n return {\n discoveryUrl: discovery.finalUrl.toString(),\n document,\n oauthMetadata,\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["message", "string", "
|
|
3
|
+
"sources": ["../src/errors.ts", "../node_modules/jose/dist/webapi/lib/buffer_utils.js", "../node_modules/jose/dist/webapi/util/errors.js", "../node_modules/jose/dist/webapi/util/base64url.js", "../node_modules/jose/dist/webapi/lib/validate.js", "../node_modules/jose/dist/webapi/lib/key.js", "../node_modules/jose/dist/webapi/lib/key_descriptor.js", "../node_modules/jose/dist/webapi/lib/jws_algorithms.js", "../node_modules/jose/dist/webapi/lib/jwt_claims_set.js", "../node_modules/jose/dist/webapi/lib/jws_sign.js", "../node_modules/jose/dist/webapi/jwt/sign.js", "../src/crypto.ts", "../src/json.ts", "../src/secret.ts", "../node_modules/@datalayer/reactor/src/core/contributions.ts", "../node_modules/@datalayer/reactor/src/core/commands.ts", "../node_modules/@datalayer/reactor/src/core/activation.ts", "../node_modules/@datalayer/reactor/src/core/extension.ts", "../node_modules/@datalayer/reactor/src/core/gates.ts", "../node_modules/@datalayer/reactor/src/core/reactor.ts", "../node_modules/@datalayer/reactor/src/core/plugin.ts", "../node_modules/@datalayer/reactor/src/core/origins.ts", "../node_modules/@datalayer/reactor/src/core/federation.ts", "../node_modules/@datalayer/reactor/src/core/remote.ts", "../node_modules/@datalayer/reactor/src/core/agentTools.ts", "../src/reactor.ts", "../src/sessions.ts", "../src/auth.ts", "../src/models.ts", "../src/discovery.ts", "../src/identity.ts"],
|
|
4
|
+
"sourcesContent": ["/** Safe base error for Personal Agent Protocol failures. */\nexport class PersonalAgentProtocolError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly details: Readonly<Record<string, unknown>>;\n\n constructor(\n code: string,\n message: string,\n options: {\n statusCode?: number;\n details?: Readonly<Record<string, unknown>>;\n cause?: unknown;\n } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = \"PersonalAgentProtocolError\";\n this.code = code;\n this.statusCode = options.statusCode;\n this.details = options.details ?? {};\n }\n\n override toString(): string {\n return `${this.code}: ${this.message}`;\n }\n}\n\nexport class ProtocolValidationError extends PersonalAgentProtocolError {\n constructor(code: string, message: string, options: { cause?: unknown } = {}) {\n super(code, message, options);\n this.name = \"ProtocolValidationError\";\n }\n}\n\nexport class DiscoveryError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"DiscoveryError\";\n }\n}\n\nexport class IdentityError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"IdentityError\";\n }\n}\n\nexport class AuthorizationError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"AuthorizationError\";\n }\n}\n\nexport class SessionError extends PersonalAgentProtocolError {\n constructor(\n code: string,\n message: string,\n options: { statusCode?: number; details?: Readonly<Record<string, unknown>>; cause?: unknown } = {},\n ) {\n super(code, message, options);\n this.name = \"SessionError\";\n }\n}\n\nexport class ProofError extends PersonalAgentProtocolError {\n constructor(code: string, message: string, options: { cause?: unknown } = {}) {\n super(code, message, options);\n this.name = \"ProofError\";\n }\n}\n", "const encoder = new TextEncoder(), decoder = new TextDecoder(), strictDecoder = new TextDecoder(\"utf-8\", { fatal: !0 }), MAX_INT32 = 2 ** 32;\nfunction concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0), buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers)\n buf.set(buffer, i), i += buffer.length;\n return buf;\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32)\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 255], offset);\n}\nfunction uint64be(value) {\n const high = Math.floor(value / MAX_INT32), low = value % MAX_INT32, buf = new Uint8Array(8);\n return writeUInt32BE(buf, high, 0), writeUInt32BE(buf, low, 4), buf;\n}\nfunction uint32be(value) {\n const buf = new Uint8Array(4);\n return writeUInt32BE(buf, value), buf;\n}\nconst NON_ASCII = /[^\\x00-\\x7f]/;\nfunction encode(string) {\n if (typeof string == \"string\" && string.length >= 128) {\n if (NON_ASCII.test(string))\n throw new TypeError(\"non-ASCII string encountered in encode()\");\n return encoder.encode(string);\n }\n const bytes = new Uint8Array(string.length);\n for (let i = 0; i < string.length; i++) {\n const code = string.charCodeAt(i);\n if (code > 127)\n throw new TypeError(\"non-ASCII string encountered in encode()\");\n bytes[i] = code;\n }\n return bytes;\n}\nfunction encodeBase64(input, url = !1) {\n if (Uint8Array.prototype.toBase64)\n return input.toBase64({ alphabet: url ? \"base64url\" : \"base64\", omitPadding: url });\n const CHUNK_SIZE = 32768, arr = [];\n for (let i = 0; i < input.length; i += CHUNK_SIZE)\n arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n const encoded = btoa(arr.join(\"\"));\n return url ? encoded.replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\") : encoded;\n}\nfunction decodeBase64(encoded, url = !1) {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(encoded, { alphabet: url ? \"base64url\" : \"base64\" });\n if (url) {\n if (encoded.includes(\"+\") || encoded.includes(\"/\"))\n throw new TypeError(\"Invalid base64url\");\n encoded = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n }\n const binary = atob(encoded), bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nasync function digest(algorithm, data) {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n}\nexport {\n concat,\n decodeBase64,\n decoder,\n digest,\n encode,\n encodeBase64,\n encoder,\n strictDecoder,\n uint32be,\n uint64be\n};\n", "class JOSEError extends Error {\n static code = \"ERR_JOSE_GENERIC\";\n code = \"ERR_JOSE_GENERIC\";\n constructor(message, options) {\n super(message, options), this.name = this.constructor.name, Error.captureStackTrace?.(this, this.constructor);\n }\n}\nclass JWTClaimValidationFailed extends JOSEError {\n static code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n claim;\n reason;\n payload;\n constructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n super(message, { cause: { claim, reason, payload } }), this.claim = claim, this.reason = reason, this.payload = payload;\n }\n}\nclass JWTExpired extends JOSEError {\n static code = \"ERR_JWT_EXPIRED\";\n code = \"ERR_JWT_EXPIRED\";\n claim;\n reason;\n payload;\n constructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n super(message, { cause: { claim, reason, payload } }), this.claim = claim, this.reason = reason, this.payload = payload;\n }\n}\nclass JOSEAlgNotAllowed extends JOSEError {\n static code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n}\nclass JOSENotSupported extends JOSEError {\n static code = \"ERR_JOSE_NOT_SUPPORTED\";\n code = \"ERR_JOSE_NOT_SUPPORTED\";\n}\nclass JWEDecryptionFailed extends JOSEError {\n static code = \"ERR_JWE_DECRYPTION_FAILED\";\n code = \"ERR_JWE_DECRYPTION_FAILED\";\n constructor(message = \"decryption operation failed\", options) {\n super(message, options);\n }\n}\nclass JWEInvalid extends JOSEError {\n static code = \"ERR_JWE_INVALID\";\n code = \"ERR_JWE_INVALID\";\n}\nclass JWSInvalid extends JOSEError {\n static code = \"ERR_JWS_INVALID\";\n code = \"ERR_JWS_INVALID\";\n}\nclass JWTInvalid extends JOSEError {\n static code = \"ERR_JWT_INVALID\";\n code = \"ERR_JWT_INVALID\";\n}\nclass JWKInvalid extends JOSEError {\n static code = \"ERR_JWK_INVALID\";\n code = \"ERR_JWK_INVALID\";\n}\nclass JWKSInvalid extends JOSEError {\n static code = \"ERR_JWKS_INVALID\";\n code = \"ERR_JWKS_INVALID\";\n}\nclass JWKSNoMatchingKey extends JOSEError {\n static code = \"ERR_JWKS_NO_MATCHING_KEY\";\n code = \"ERR_JWKS_NO_MATCHING_KEY\";\n constructor(message = \"no applicable key found in the JSON Web Key Set\", options) {\n super(message, options);\n }\n}\nclass JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator] = async function* () {\n };\n static code = \"ERR_JWKS_MULTIPLE_MATCHING_KEYS\";\n code = \"ERR_JWKS_MULTIPLE_MATCHING_KEYS\";\n constructor(message = \"multiple matching keys found in the JSON Web Key Set\", options) {\n super(message, options);\n }\n}\nclass JWKSTimeout extends JOSEError {\n static code = \"ERR_JWKS_TIMEOUT\";\n code = \"ERR_JWKS_TIMEOUT\";\n constructor(message = \"request timed out\", options) {\n super(message, options);\n }\n}\nclass JWSSignatureVerificationFailed extends JOSEError {\n static code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n constructor(message = \"signature verification failed\", options) {\n super(message, options);\n }\n}\nexport {\n JOSEAlgNotAllowed,\n JOSEError,\n JOSENotSupported,\n JWEDecryptionFailed,\n JWEInvalid,\n JWKInvalid,\n JWKSInvalid,\n JWKSMultipleMatchingKeys,\n JWKSNoMatchingKey,\n JWKSTimeout,\n JWSInvalid,\n JWSSignatureVerificationFailed,\n JWTClaimValidationFailed,\n JWTExpired,\n JWTInvalid\n};\n", "import { encoder, decoder, encodeBase64, decodeBase64 } from \"../lib/buffer_utils.js\";\nconst invalid = \"The input to be decoded is not correctly encoded.\";\nfunction decode(input) {\n try {\n return decodeBase64(typeof input == \"string\" ? input : decoder.decode(input), !0);\n } catch (cause) {\n throw new TypeError(invalid, { cause });\n }\n}\nfunction encode(input) {\n return encodeBase64(typeof input == \"string\" ? encoder.encode(input) : input, !0);\n}\nexport {\n decode,\n encode\n};\n", "import { JOSENotSupported, JWSInvalid } from \"../util/errors.js\";\nimport { decode } from \"../util/base64url.js\";\nimport { encode, strictDecoder } from \"./buffer_utils.js\";\nfunction assertUint8Array(input, label) {\n if (!(input instanceof Uint8Array))\n throw new TypeError(`${label} must be an instance of Uint8Array`);\n}\nfunction isObject(input) {\n if (typeof input != \"object\" || input === null || Object.prototype.toString.call(input) !== \"[object Object]\")\n return !1;\n const prototype = Object.getPrototypeOf(input);\n return prototype === null || Object.getPrototypeOf(prototype) === null;\n}\nfunction isJwkSet(input) {\n return isObject(input) && Array.isArray(input.keys) && Array.from(input.keys).every(isObject);\n}\nfunction isDisjoint(...headers) {\n const parameters = /* @__PURE__ */ new Set();\n for (const header of headers)\n if (header)\n for (const parameter of Object.keys(header)) {\n if (parameters.has(parameter))\n return !1;\n parameters.add(parameter);\n }\n return !0;\n}\nfunction assertNotSet(value, name) {\n if (value !== void 0)\n throw new TypeError(`${name} can only be called once`);\n}\nfunction decodeBase64url(value, label, ErrorClass) {\n try {\n return decode(value);\n } catch {\n throw new ErrorClass(`Failed to base64url decode the ${label}`);\n }\n}\nfunction encodeBase64url(value, label, ErrorClass) {\n try {\n return encode(value);\n } catch {\n throw new ErrorClass(`The ${label} is not a valid base64url string`);\n }\n}\nfunction parseJoseHeader(b64, ErrorClass, message) {\n let parsed;\n try {\n parsed = JSON.parse(strictDecoder.decode(decode(b64)));\n } catch {\n throw new ErrorClass(message);\n }\n if (!isObject(parsed))\n throw new ErrorClass(message);\n return parsed;\n}\nconst JWS_RECOGNIZED = { __proto__: null, b64: !0 }, JWE_RECOGNIZED = { __proto__: null };\nfunction validateAlgorithms(option, algorithms) {\n if (algorithms !== void 0 && (!Array.isArray(algorithms) || algorithms.some((s) => typeof s != \"string\")))\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n return algorithms === void 0 ? void 0 : new Set(algorithms);\n}\nfunction validateCritDuplicates(Err, protectedHeader) {\n const { crit } = protectedHeader ?? {};\n if (Array.isArray(crit) && new Set(crit).size !== crit.length)\n throw new Err('\"crit\" (Critical) Header Parameter MUST NOT contain duplicate values');\n}\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== void 0 && protectedHeader?.crit === void 0)\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n if (!protectedHeader || protectedHeader.crit === void 0)\n return [];\n if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input) => typeof input != \"string\" || input.length === 0))\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n const recognized = recognizedOption === void 0 ? recognizedDefault : { __proto__: null, ...recognizedOption, ...recognizedDefault };\n for (const parameter of protectedHeader.crit) {\n if (!(parameter in recognized))\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n if (!Object.hasOwn(joseHeader, parameter) || joseHeader[parameter] === void 0)\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n if (recognized[parameter] && (!Object.hasOwn(protectedHeader, parameter) || protectedHeader[parameter] === void 0))\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n return protectedHeader.crit;\n}\nfunction validateB64(protectedHeader, extensions) {\n if (extensions.includes(\"b64\")) {\n const b64 = protectedHeader.b64;\n if (typeof b64 != \"boolean\")\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n return b64;\n }\n return !0;\n}\nfunction serializeJoseHeader(Err, header) {\n let serialized, parsed;\n try {\n serialized = JSON.stringify(header), parsed = JSON.parse(serialized);\n } catch (cause) {\n throw new Err(\"JOSE Header is not valid JSON\", { cause });\n }\n if (!isObject(parsed))\n throw new Err(\"JOSE Header is not a JSON object\");\n return [parsed, serialized];\n}\nexport {\n JWE_RECOGNIZED,\n JWS_RECOGNIZED,\n assertNotSet,\n assertUint8Array,\n decodeBase64url,\n encodeBase64url,\n isDisjoint,\n isJwkSet,\n isObject,\n parseJoseHeader,\n serializeJoseHeader,\n validateAlgorithms,\n validateB64,\n validateCrit,\n validateCritDuplicates\n};\n", "import { isObject } from \"./validate.js\";\nimport { decode } from \"../util/base64url.js\";\nimport { JOSENotSupported } from \"../util/errors.js\";\nconst tag = (key) => key[Symbol.toStringTag], jwkMatchesOp = (entry, key, usage) => {\n const { alg } = entry;\n if (key.use !== void 0) {\n const expected = usage === \"sign\" || usage === \"verify\" ? \"sig\" : \"enc\";\n if (key.use !== expected)\n throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n }\n if (key.alg !== void 0 && key.alg !== alg)\n throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n if (Array.isArray(key.key_ops)) {\n const expectedKeyOp = usage === \"encrypt\" || usage === \"decrypt\" ? entry.ops?.[usage === \"encrypt\" ? 0 : 1] : usage;\n if (expectedKeyOp && !key.key_ops.includes(expectedKeyOp))\n throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n }\n};\nasync function prepareKey(entry, key, usage) {\n const { alg, secret } = entry, privateKey = usage === \"decrypt\" || usage === \"sign\";\n if (secret && key instanceof Uint8Array)\n return key;\n let normalized, keyObject;\n if (isObject(key)) {\n if (normalized = normalizeJwk(key), typeof normalized.kty != \"string\")\n throw invalidKeyType(alg, key, secret);\n if (!(secret ? normalized.kty === \"oct\" && typeof normalized.k == \"string\" : normalized.kty !== \"oct\" && (privateKey ? normalized.kty === \"AKP\" && typeof normalized.priv == \"string\" || typeof normalized.d == \"string\" : normalized.d === void 0 && normalized.priv === void 0)))\n throw new TypeError(secret ? 'JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present' : `JSON Web Key for this operation must be a ${privateKey ? \"private\" : \"public\"} JWK`);\n if (jwkMatchesOp(entry, normalized, usage), normalized.kty === \"oct\")\n return decode(normalized.k);\n if (!Object.isFrozen(key)) {\n const { key_ops } = key;\n Array.isArray(key_ops) && Object.freeze(key_ops), Object.freeze(key);\n }\n } else {\n if (!isKeyLike(key))\n throw invalidKeyType(alg, key, secret);\n const expectedType = secret ? \"secret\" : privateKey ? \"private\" : \"public\";\n if (key.type !== expectedType && (secret || [\"secret\", \"public\", \"private\"].includes(key.type)))\n throw new TypeError(`${tag(key)} instances must be of type \"${expectedType}\" for the ${alg} algorithm`);\n if (isCryptoKey(key))\n return key;\n if (keyObject = key, keyObject.type === \"secret\")\n return keyObject.export();\n }\n cache ||= /* @__PURE__ */ new WeakMap();\n const cacheKey = key;\n let cached = cache.get(cacheKey);\n if (cached?.[alg])\n return cached[alg];\n if (cached || cache.set(cacheKey, cached = {}), keyObject && typeof keyObject.toCryptoKey == \"function\") {\n const isPublic = keyObject.type === \"public\", crv = nist[keyObject.asymmetricKeyDetails?.namedCurve], params = entry.resolve?.({ crv, asymmetricKeyType: keyObject.asymmetricKeyType }) ?? entry.subtle;\n return cached[alg] = keyObject.toCryptoKey(params, isPublic, entry.usages[isPublic ? 0 : 1]);\n }\n return normalized ??= keyObject.export({ format: \"jwk\" }), normalized.alg = alg, cached[alg] = await jwkToKey(entry, normalized);\n}\nlet cache;\nconst nist = {\n __proto__: null,\n prime256v1: \"P-256\",\n secp384r1: \"P-384\",\n secp521r1: \"P-521\"\n};\nfunction assertCryptoKey(key) {\n if (!isCryptoKey(key))\n throw new Error(\"CryptoKey instance expected\");\n}\nconst isCryptoKey = (key) => {\n if (key?.[Symbol.toStringTag] === \"CryptoKey\")\n return !0;\n try {\n return key instanceof CryptoKey;\n } catch {\n return !1;\n }\n}, isKeyObject = (key) => key?.[Symbol.toStringTag] === \"KeyObject\", isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);\nfunction message(msg, actual, ...types) {\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(\", \")}, or ${last}.`;\n } else types.length === 2 ? msg += `one of type ${types[0]} or ${types[1]}.` : msg += `of type ${types[0]}.`;\n return actual == null ? msg += ` Received ${actual}` : typeof actual == \"function\" && actual.name ? msg += ` Received function ${actual.name}` : typeof actual == \"object\" && actual != null && actual.constructor?.name && (msg += ` Received an instance of ${actual.constructor.name}`), msg;\n}\nconst invalidKeyInput = (actual, ...types) => message(\"Key must be \", actual, ...types);\nfunction invalidKeyType(alg, actual, secret) {\n const types = [\"CryptoKey\", \"KeyObject\", \"JSON Web Key\"];\n return secret && types.push(\"Uint8Array\"), new TypeError(message(`Key for the ${alg} algorithm must be `, actual, ...types));\n}\nconst unusable = (name, prop = \"algorithm.name\") => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\nfunction checkUsage(key, usage) {\n if (usage && !key.usages.includes(usage))\n throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n}\nfunction checkModulusLength(alg, key) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength != \"number\" || modulusLength < 2048)\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n}\nfunction checkCryptoKey(key, expected, usage) {\n const algorithm = key.algorithm;\n if (algorithm.name !== expected.name)\n throw unusable(expected.name);\n if (expected.hash && algorithm.hash?.name !== expected.hash)\n throw unusable(expected.hash, \"algorithm.hash\");\n if (expected.namedCurve && algorithm.namedCurve !== expected.namedCurve)\n throw unusable(expected.namedCurve, \"algorithm.namedCurve\");\n if (expected.length !== void 0 && algorithm.length !== expected.length)\n throw unusable(expected.length, \"algorithm.length\");\n checkUsage(key, usage);\n}\nfunction snapshotJwk(jwk) {\n return { __proto__: null, ...jwk };\n}\nfunction normalizeJwk(jwk) {\n const normalized = snapshotJwk(jwk);\n if (normalized.ext !== void 0 && typeof normalized.ext != \"boolean\")\n throw new TypeError('\"ext\" (Extractable) Parameter must be a boolean');\n if (normalized.key_ops !== void 0) {\n const value = normalized.key_ops, keyOps = Array.isArray(value) ? [...value] : void 0;\n if (!keyOps || keyOps.some((operation) => typeof operation != \"string\") || new Set(keyOps).size !== keyOps.length)\n throw new TypeError('\"key_ops\" (Key Operations) Parameter must be an array of unique strings');\n normalized.key_ops = keyOps;\n }\n return normalized;\n}\nfunction validateExtractableOption(extractable) {\n if (extractable !== void 0 && typeof extractable != \"boolean\")\n throw new TypeError('\"extractable\" option must be a boolean');\n return extractable;\n}\nasync function jwkToKey(entry, jwk, extractable) {\n if (!entry.kty.includes(jwk.kty))\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n const algorithm = entry.resolve?.({ kty: jwk.kty, crv: jwk.crv }) ?? entry.subtle, isPrivate = !!(jwk.d || jwk.priv), keyData = { ...jwk, ext: extractable ?? jwk.ext };\n return keyData.kty !== \"AKP\" && delete keyData.alg, delete keyData.use, crypto.subtle.importKey(\"jwk\", keyData, algorithm, keyData.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);\n}\nasync function rawKey(key, expected, usage, extractable = !1) {\n return key instanceof Uint8Array && (key = await crypto.subtle.importKey(\"raw\", key, expected, extractable, [usage])), checkCryptoKey(key, expected, usage), key;\n}\nexport {\n assertCryptoKey,\n checkCryptoKey,\n checkModulusLength,\n checkUsage,\n invalidKeyInput,\n isCryptoKey,\n isKeyLike,\n isKeyObject,\n jwkToKey,\n normalizeJwk,\n prepareKey,\n rawKey,\n snapshotJwk,\n validateExtractableOption\n};\n", "function table(entries) {\n const out = { __proto__: null };\n for (const alg in entries)\n out[alg] = { ...entries[alg], alg };\n return out;\n}\nexport {\n table\n};\n", "import { JOSENotSupported } from \"../util/errors.js\";\nimport { table } from \"./key_descriptor.js\";\nconst sig = [[\"verify\"], [\"sign\"]];\nfunction hmac(bits) {\n const subtle = { name: \"HMAC\", hash: `SHA-${bits}` };\n return { kty: [\"oct\"], secret: !0, subtle, signing: subtle, usages: sig };\n}\nfunction rsa(bits, saltLength) {\n const subtle = { name: saltLength ? \"RSA-PSS\" : \"RSASSA-PKCS1-v1_5\", hash: `SHA-${bits}` };\n return {\n kty: [\"RSA\"],\n subtle,\n signing: saltLength ? { ...subtle, saltLength } : subtle,\n usages: sig,\n minRsaBits: 2048\n };\n}\nfunction ecdsa(crv, bits) {\n return {\n kty: [\"EC\"],\n crv,\n subtle: { name: \"ECDSA\", namedCurve: crv },\n signing: { name: \"ECDSA\", hash: `SHA-${bits}` },\n usages: sig\n };\n}\nfunction eddsa() {\n const subtle = { name: \"Ed25519\" };\n return {\n kty: [\"OKP\"],\n crv: \"Ed25519\",\n subtle,\n signing: subtle,\n usages: sig\n };\n}\nfunction mldsa(bits) {\n const subtle = { name: `ML-DSA-${bits}` };\n return {\n kty: [\"AKP\"],\n subtle,\n signing: subtle,\n usages: sig\n };\n}\nconst JWS = table({\n HS256: hmac(256),\n HS384: hmac(384),\n HS512: hmac(512),\n RS256: rsa(256),\n RS384: rsa(384),\n RS512: rsa(512),\n PS256: rsa(256, 32),\n PS384: rsa(384, 48),\n PS512: rsa(512, 64),\n ES256: ecdsa(\"P-256\", 256),\n ES384: ecdsa(\"P-384\", 384),\n ES512: ecdsa(\"P-521\", 512),\n EdDSA: eddsa(),\n Ed25519: eddsa(),\n \"ML-DSA-44\": mldsa(44),\n \"ML-DSA-65\": mldsa(65),\n \"ML-DSA-87\": mldsa(87)\n});\nfunction jwsAlgorithm(alg) {\n const entry = typeof alg == \"string\" ? JWS[alg] : void 0;\n if (!entry)\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n return entry;\n}\nexport {\n JWS,\n jwsAlgorithm\n};\n", "import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from \"../util/errors.js\";\nimport { encoder, strictDecoder } from \"./buffer_utils.js\";\nimport { isObject } from \"./validate.js\";\nconst epoch = (date) => Math.floor(date.getTime() / 1e3), multipliers = {\n s: 1,\n m: 60,\n h: 3600,\n d: 86400,\n w: 604800,\n y: 31557600\n}, REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i, checkFailed = \"check_failed\";\nfunction invalidDuration() {\n throw new TypeError(\"Invalid time period format\");\n}\nfunction secs(str) {\n typeof str != \"string\" && invalidDuration();\n const matched = REGEX.exec(str);\n (!matched || matched[4] && matched[1]) && invalidDuration();\n const value = parseFloat(matched[2]), numericDate2 = Math.round(value * multipliers[matched[3][0].toLowerCase()]);\n return Number.isFinite(numericDate2) || invalidDuration(), matched[1] === \"-\" || matched[4] === \"ago\" ? -numericDate2 : numericDate2;\n}\nfunction validateInput(label, input) {\n if (!Number.isFinite(input))\n throw new TypeError(`Invalid ${label} input`);\n return input;\n}\nfunction validateStringClaim(claim, value) {\n if (typeof value != \"string\")\n throw new TypeError(`\"${claim}\" claim must be a string`);\n}\nfunction validateAudienceClaim(value) {\n if (typeof value != \"string\" && (!Array.isArray(value) || Array.from(value).some((member) => typeof member != \"string\")))\n throw new TypeError('\"aud\" claim must be a string or an array of strings');\n}\nfunction numericDate(value, label) {\n return typeof value == \"number\" ? validateInput(label, value) : value instanceof Date ? validateInput(label, epoch(value)) : epoch(/* @__PURE__ */ new Date()) + secs(value);\n}\nconst normalizeTyp = (value) => {\n const normalized = value.toLowerCase();\n return value.includes(\"/\") ? normalized : `application/${normalized}`;\n}, checkAudiencePresence = (audPayload, audOption) => typeof audPayload == \"string\" ? audOption.includes(audPayload) : Array.isArray(audPayload) ? audOption.some((aud) => audPayload.includes(aud)) : !1;\nfunction validateNumericDate(payload, claim, required = !1) {\n const value = payload[claim];\n if (!(value === void 0 && !required)) {\n if (typeof value != \"number\")\n throw new JWTClaimValidationFailed(`\"${claim}\" claim must be a number`, payload, claim, \"invalid\");\n return value;\n }\n}\nfunction unexpectedClaim(payload, claim) {\n throw new JWTClaimValidationFailed(`unexpected \"${claim}\" claim value`, payload, claim, checkFailed);\n}\nfunction validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n let payload;\n try {\n payload = JSON.parse(strictDecoder.decode(encodedPayload));\n } catch {\n }\n if (!isObject(payload))\n throw new JWTInvalid(\"JWT Claims Set must be a top-level JSON object\");\n const { typ } = options;\n if (typ !== void 0 && (typeof protectedHeader.typ != \"string\" || normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ)))\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, \"typ\", checkFailed);\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options, presenceCheck = [...requiredClaims];\n maxTokenAge !== void 0 && presenceCheck.push(\"iat\"), audience !== void 0 && presenceCheck.push(\"aud\"), subject !== void 0 && presenceCheck.push(\"sub\"), issuer !== void 0 && presenceCheck.push(\"iss\");\n for (const claim of new Set(presenceCheck.reverse()))\n if (!Object.hasOwn(payload, claim))\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, \"missing\");\n issuer !== void 0 && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss) && unexpectedClaim(payload, \"iss\"), subject !== void 0 && payload.sub !== subject && unexpectedClaim(payload, \"sub\"), audience !== void 0 && !checkAudiencePresence(payload.aud, typeof audience == \"string\" ? [audience] : audience) && unexpectedClaim(payload, \"aud\");\n const { clockTolerance } = options;\n let tolerance = 0;\n if (typeof clockTolerance == \"string\")\n tolerance = secs(clockTolerance);\n else if (clockTolerance !== void 0) {\n if (typeof clockTolerance != \"number\")\n throw new TypeError(\"Invalid clockTolerance option type\");\n tolerance = clockTolerance;\n }\n validateInput(\"clockTolerance option\", tolerance);\n const { currentDate } = options, now = validateInput(\"currentDate option\", epoch(currentDate === void 0 ? /* @__PURE__ */ new Date() : currentDate)), iat = validateNumericDate(payload, \"iat\", maxTokenAge !== void 0), nbf = validateNumericDate(payload, \"nbf\");\n if (nbf !== void 0 && nbf > now + tolerance)\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, \"nbf\", checkFailed);\n const exp = validateNumericDate(payload, \"exp\");\n if (exp !== void 0 && exp <= now - tolerance)\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, \"exp\", checkFailed);\n if (maxTokenAge !== void 0) {\n const age = now - iat, max = validateInput(\"maxTokenAge option\", typeof maxTokenAge == \"number\" ? maxTokenAge : secs(maxTokenAge));\n if (age - tolerance > max)\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, \"iat\", checkFailed);\n if (age < -tolerance)\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, \"iat\", checkFailed);\n }\n return payload;\n}\nlet producerPayloads;\nfunction producerPayload(producer) {\n return producerPayloads.get(producer);\n}\nfunction jwtData(producer) {\n const payload = producerPayload(producer);\n for (const claim of [\"iat\", \"nbf\", \"exp\"]) {\n const value = payload[claim];\n if (typeof value == \"number\" && !Number.isFinite(value))\n throw new TypeError(`\"${claim}\" claim must be a finite number`);\n }\n return encoder.encode(JSON.stringify(payload));\n}\nfunction jwtClaim(producer, claim) {\n return producerPayload(producer)[claim];\n}\nclass JWTClaimsBuilder {\n constructor(payload = {}) {\n if (!isObject(payload))\n throw new TypeError(\"JWT Claims Set MUST be an object\");\n (producerPayloads ||= /* @__PURE__ */ new WeakMap()).set(this, structuredClone(payload));\n }\n setIssuer(value) {\n return validateStringClaim(\"iss\", value), producerPayload(this).iss = value, this;\n }\n setSubject(value) {\n return validateStringClaim(\"sub\", value), producerPayload(this).sub = value, this;\n }\n setAudience(value) {\n return validateAudienceClaim(value), producerPayload(this).aud = value, this;\n }\n setJti(value) {\n return validateStringClaim(\"jti\", value), producerPayload(this).jti = value, this;\n }\n setNotBefore(value) {\n return producerPayload(this).nbf = numericDate(value, \"setNotBefore\"), this;\n }\n setExpirationTime(value) {\n return producerPayload(this).exp = numericDate(value, \"setExpirationTime\"), this;\n }\n setIssuedAt(value) {\n const payload = producerPayload(this);\n return value === void 0 ? payload.iat = epoch(/* @__PURE__ */ new Date()) : typeof value == \"string\" ? payload.iat = validateInput(\"setIssuedAt\", epoch(/* @__PURE__ */ new Date()) + secs(value)) : payload.iat = numericDate(value, \"setIssuedAt\"), this;\n }\n}\nexport {\n JWTClaimsBuilder,\n jwtClaim,\n jwtData,\n secs,\n validateClaimsSet\n};\n", "import { encode as b64u } from \"../util/base64url.js\";\nimport { jwsAlgorithm } from \"./jws_algorithms.js\";\nimport { isDisjoint, serializeJoseHeader, validateB64, validateCrit, validateCritDuplicates, JWS_RECOGNIZED } from \"./validate.js\";\nimport { JWSInvalid } from \"../util/errors.js\";\nimport { concat, encode, encoder } from \"./buffer_utils.js\";\nimport { prepareKey, rawKey, checkModulusLength } from \"./key.js\";\nasync function createSignature(input, key, rejectUnencoded) {\n let [payload, protectedHeader, unprotectedHeader, crit] = input, protectedHeaderString = \"\";\n if (protectedHeader !== void 0) {\n const normalized = serializeJoseHeader(JWSInvalid, protectedHeader);\n protectedHeader = normalized[0], protectedHeaderString = b64u(normalized[1]);\n }\n if (unprotectedHeader !== void 0 && (unprotectedHeader = serializeJoseHeader(JWSInvalid, unprotectedHeader)[0]), !protectedHeader && !unprotectedHeader)\n throw new JWSInvalid(\"either setProtectedHeader or setUnprotectedHeader must be called before #sign()\");\n if (!isDisjoint(protectedHeader, unprotectedHeader))\n throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n const joseHeader = { ...protectedHeader, ...unprotectedHeader };\n validateCritDuplicates(JWSInvalid, protectedHeader);\n const b64 = validateB64(protectedHeader, validateCrit(JWSInvalid, JWS_RECOGNIZED, crit, protectedHeader, joseHeader));\n b64 || rejectUnencoded?.();\n const { alg } = joseHeader;\n if (typeof alg != \"string\" || !alg)\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n const entry = jwsAlgorithm(alg);\n let payloadS = \"\", payloadB = payload, data;\n if (b64) {\n const encoded = input[4];\n encoded ? (payloadS = encoded[0] ??= b64u(payload), payloadB = encoded[1] ??= encode(payloadS)) : (payloadS = b64u(payload), data = encoder.encode(`${protectedHeaderString}.${payloadS}`));\n }\n data ??= concat(encode(protectedHeaderString), encode(\".\"), payloadB);\n const k = await rawKey(await prepareKey(entry, key, \"sign\"), entry.subtle, \"sign\");\n entry.minRsaBits && checkModulusLength(entry.alg, k);\n const jws = {\n signature: b64u(new Uint8Array(await crypto.subtle.sign(entry.signing, k, data))),\n payload: payloadS\n };\n return protectedHeader && (jws.protected = protectedHeaderString), unprotectedHeader && (jws.header = unprotectedHeader), [jws, b64];\n}\nasync function createCompactSignature(payload, protectedHeader, crit, key, rejectUnencoded) {\n const [jws] = await createSignature([payload, protectedHeader, void 0, crit], key, rejectUnencoded);\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n}\nexport {\n createCompactSignature,\n createSignature\n};\n", "import { createCompactSignature } from \"../lib/jws_sign.js\";\nimport { JWTInvalid } from \"../util/errors.js\";\nimport { JWTClaimsBuilder, jwtData } from \"../lib/jwt_claims_set.js\";\nimport { assertNotSet } from \"../lib/validate.js\";\nconst SignJWT_base = JWTClaimsBuilder;\nclass SignJWT extends SignJWT_base {\n #protectedHeader;\n setProtectedHeader(protectedHeader) {\n return assertNotSet(this.#protectedHeader, \"setProtectedHeader\"), this.#protectedHeader = protectedHeader, this;\n }\n async sign(key, options) {\n return createCompactSignature(jwtData(this), this.#protectedHeader, options?.crit, key, () => {\n throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n });\n }\n}\nexport {\n SignJWT\n};\n", "import {\n SignJWT,\n calculateJwkThumbprint,\n decodeProtectedHeader,\n importJWK,\n jwtVerify,\n type JWK,\n type JWTPayload,\n type KeyInput,\n} from \"jose\";\n\nimport { ProofError, SecretValue } from \"./index.js\";\nimport type { DpopProofProvider, DpopProofRequest, Signer } from \"./reactor.js\";\n\nexport type JoseAlgorithm = \"ES256\" | \"RS256\";\n\nconst privateJwkMembers = new Set([\"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\", \"oth\", \"k\"]);\n\nfunction algorithm(value: string): JoseAlgorithm {\n if (value !== \"ES256\" && value !== \"RS256\") {\n throw new TypeError(\"PAP JOSE algorithms must be ES256 or RS256\");\n }\n return value;\n}\n\nfunction publicJwk(value: JWK, alg: JoseAlgorithm): JWK {\n for (const member of privateJwkMembers) {\n if (member in value) {\n throw new TypeError(\"DPoP public JWK must not contain private key material\");\n }\n }\n const expected = alg === \"ES256\" ? \"EC\" : \"RSA\";\n if (value.kty !== expected) throw new TypeError(`${alg} requires a ${expected} public JWK`);\n if (alg === \"ES256\") {\n if (value.crv !== \"P-256\" || !value.x || !value.y) {\n throw new TypeError(\"ES256 requires a complete P-256 public JWK\");\n }\n } else if (!value.n || !value.e) {\n throw new TypeError(\"RS256 requires a complete RSA public JWK\");\n }\n return { ...value };\n}\n\nfunction normalizedHtu(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch (cause) {\n throw new ProofError(\"invalid_htu\", \"DPoP target must be an HTTPS URL\", { cause });\n }\n if (url.protocol !== \"https:\" || url.username || url.password) {\n throw new ProofError(\"invalid_htu\", \"DPoP target must be an HTTPS URL\");\n }\n url.search = \"\";\n url.hash = \"\";\n return url.href;\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const value of bytes) binary += String.fromCharCode(value);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/u, \"\");\n}\n\nfunction randomBytes(length: number): Uint8Array {\n if (!globalThis.crypto) throw new ProofError(\"crypto_unavailable\", \"Web Crypto is required\");\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n\nasync function accessTokenHash(token: SecretValue): Promise<string> {\n if (!globalThis.crypto) throw new ProofError(\"crypto_unavailable\", \"Web Crypto is required\");\n const digest = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(token.reveal()),\n );\n return base64Url(new Uint8Array(digest));\n}\n\nexport interface JoseSignerOptions {\n readonly privateKey: KeyInput;\n readonly algorithm?: JoseAlgorithm;\n readonly keyId?: string;\n}\n\n/** Sign PAP assertions with an injected asymmetric private key or handle. */\nexport class JoseSigner implements Signer {\n readonly #privateKey: KeyInput;\n readonly #algorithm: JoseAlgorithm;\n readonly #keyId: string | undefined;\n\n constructor(options: JoseSignerOptions) {\n this.#privateKey = options.privateKey;\n this.#algorithm = algorithm(options.algorithm ?? \"ES256\");\n this.#keyId = options.keyId;\n }\n\n async sign(\n claims: Readonly<Record<string, unknown>>,\n _options: { readonly purpose: string },\n ): Promise<SecretValue> {\n try {\n const token = await new SignJWT(claims as JWTPayload)\n .setProtectedHeader({\n alg: this.#algorithm,\n typ: \"JWT\",\n ...(this.#keyId === undefined ? {} : { kid: this.#keyId }),\n })\n .sign(this.#privateKey);\n return new SecretValue(token);\n } catch (cause) {\n throw new ProofError(\"signing_failed\", \"Could not sign PAP assertion\", { cause });\n }\n }\n}\n\nexport interface DpopKeyMaterial {\n readonly privateKey: KeyInput;\n readonly publicJwk: JWK;\n readonly algorithm?: JoseAlgorithm;\n}\n\nexport type DpopKeyResolver = (\n request: DpopProofRequest,\n) => DpopKeyMaterial | Promise<DpopKeyMaterial>;\n\nexport interface JoseDpopProofProviderOptions {\n readonly resolveKey: DpopKeyResolver;\n readonly now?: () => Date;\n readonly randomBytes?: (length: number) => Uint8Array;\n}\n\n/** Create fresh RFC 9449 proofs using per-user/company key material. */\nexport class JoseDpopProofProvider implements DpopProofProvider {\n readonly #resolveKey: DpopKeyResolver;\n readonly #now: () => Date;\n readonly #randomBytes: (length: number) => Uint8Array;\n\n constructor(options: JoseDpopProofProviderOptions) {\n this.#resolveKey = options.resolveKey;\n this.#now = options.now ?? (() => new Date());\n this.#randomBytes = options.randomBytes ?? randomBytes;\n }\n\n async create(request: DpopProofRequest): Promise<SecretValue> {\n const material = await this.#resolveKey(request);\n const alg = algorithm(material.algorithm ?? \"ES256\");\n const jwk = publicJwk(material.publicJwk, alg);\n const entropy = this.#randomBytes(16);\n if (entropy.byteLength < 16) {\n throw new ProofError(\"weak_randomness\", \"DPoP proof IDs require 128 random bits\");\n }\n const claims: JWTPayload = {\n jti: base64Url(entropy),\n htm: request.method.toUpperCase(),\n htu: normalizedHtu(request.url),\n iat: Math.floor(this.#now().getTime() / 1000),\n ...(request.nonce === undefined ? {} : { nonce: request.nonce }),\n ...(request.accessToken === undefined\n ? {}\n : { ath: await accessTokenHash(request.accessToken) }),\n };\n try {\n const token = await new SignJWT(claims)\n .setProtectedHeader({ typ: \"dpop+jwt\", alg, jwk })\n .sign(material.privateKey);\n return new SecretValue(token);\n } catch (cause) {\n throw new ProofError(\"signing_failed\", \"Could not sign DPoP proof\", { cause });\n }\n }\n}\n\nexport interface DpopReplayCache {\n markOnce(key: string, options: { readonly expiresAt: Date }): Promise<boolean>;\n}\n\nexport interface VerifyDpopProofOptions {\n readonly method: string;\n readonly url: string;\n readonly replayCache: DpopReplayCache;\n readonly accessToken?: SecretValue;\n readonly nonce?: string;\n readonly now?: Date;\n readonly acceptanceWindowSeconds?: number;\n}\n\nexport interface VerifiedDpopProof {\n readonly jti: string;\n readonly issuedAt: Date;\n readonly publicJwk: JWK;\n readonly keyThumbprint: string;\n}\n\n/** Verify signature, binding, freshness, nonce, token hash, and replay state. */\nexport async function verifyDpopProof(\n proof: SecretValue | string,\n options: VerifyDpopProofOptions,\n): Promise<VerifiedDpopProof> {\n const compact = proof instanceof SecretValue ? proof.reveal() : proof;\n const now = options.now ?? new Date();\n const windowSeconds = options.acceptanceWindowSeconds ?? 60;\n if (!Number.isInteger(windowSeconds) || windowSeconds <= 0) {\n throw new RangeError(\"acceptanceWindowSeconds must be a positive integer\");\n }\n let jwk: JWK;\n let payload: JWTPayload;\n try {\n const header = decodeProtectedHeader(compact);\n const alg = algorithm(header.alg ?? \"\");\n if (header.typ !== \"dpop+jwt\" || typeof header.jwk !== \"object\") {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP protected header is invalid\");\n }\n jwk = publicJwk(header.jwk, alg);\n const key = await importJWK(jwk, alg);\n ({ payload } = await jwtVerify(compact, key, {\n algorithms: [alg],\n typ: \"dpop+jwt\",\n requiredClaims: [\"jti\", \"htm\", \"htu\", \"iat\"],\n }));\n } catch (cause) {\n if (cause instanceof ProofError) throw cause;\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP signature or claims are invalid\", {\n cause,\n });\n }\n if (typeof payload.jti !== \"string\" || !payload.jti || typeof payload.iat !== \"number\") {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof identity is invalid\");\n }\n const issuedAt = new Date(payload.iat * 1000);\n const difference = Math.abs(now.getTime() - issuedAt.getTime());\n if (difference > windowSeconds * 1000) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof is outside the acceptance window\");\n }\n if (payload.htm !== options.method.toUpperCase() || payload.htu !== normalizedHtu(options.url)) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof does not match the request\");\n }\n if (options.nonce !== undefined && payload.nonce !== options.nonce) {\n throw new ProofError(\"use_dpop_nonce\", \"DPoP proof nonce is missing or invalid\");\n }\n if (options.accessToken !== undefined) {\n if (payload.ath !== (await accessTokenHash(options.accessToken))) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP access-token hash is invalid\");\n }\n } else if (payload.ath !== undefined) {\n throw new ProofError(\n \"invalid_dpop_proof\",\n \"Token-endpoint DPoP proof must not contain ath\",\n );\n }\n const keyThumbprint = await calculateJwkThumbprint(jwk);\n if (\n !(await options.replayCache.markOnce(`${keyThumbprint}:${payload.jti}`, {\n expiresAt: new Date(now.getTime() + windowSeconds * 1000),\n }))\n ) {\n throw new ProofError(\"invalid_dpop_proof\", \"DPoP proof has already been used\");\n }\n return { jti: payload.jti, issuedAt, publicJwk: jwk, keyThumbprint };\n}\n", "import { ProtocolValidationError } from \"./errors.js\";\n\n/** Parse JSON while rejecting duplicate object member names at every depth. */\nexport function parseJsonStrict(source: string): unknown {\n return new StrictJsonParser(source).parse();\n}\n\nclass StrictJsonParser {\n #offset = 0;\n\n constructor(private readonly source: string) {}\n\n parse(): unknown {\n this.#skipWhitespace();\n const value = this.#parseValue();\n this.#skipWhitespace();\n if (this.#offset !== this.source.length) {\n this.#invalid(\"Unexpected content after the JSON value\");\n }\n return value;\n }\n\n #parseValue(): unknown {\n const character = this.source[this.#offset];\n if (character === \"{\") return this.#parseObject();\n if (character === \"[\") return this.#parseArray();\n if (character === '\"') return this.#parseString();\n if (character === \"t\") return this.#parseLiteral(\"true\", true);\n if (character === \"f\") return this.#parseLiteral(\"false\", false);\n if (character === \"n\") return this.#parseLiteral(\"null\", null);\n if (character === \"-\" || (character !== undefined && /[0-9]/.test(character))) {\n return this.#parseNumber();\n }\n this.#invalid(\"Expected a JSON value\");\n }\n\n #parseObject(): Record<string, unknown> {\n this.#offset += 1;\n this.#skipWhitespace();\n const result: Record<string, unknown> = {};\n const names = new Set<string>();\n if (this.#consume(\"}\")) return result;\n\n while (true) {\n if (this.source[this.#offset] !== '\"') {\n this.#invalid(\"Expected a JSON object member name\");\n }\n const name = this.#parseString();\n if (names.has(name)) {\n throw new ProtocolValidationError(\n \"duplicate_json_member\",\n `JSON object contains duplicate member ${JSON.stringify(name)}`,\n );\n }\n names.add(name);\n this.#skipWhitespace();\n if (!this.#consume(\":\")) this.#invalid(\"Expected ':' after an object member name\");\n this.#skipWhitespace();\n result[name] = this.#parseValue();\n this.#skipWhitespace();\n if (this.#consume(\"}\")) return result;\n if (!this.#consume(\",\")) this.#invalid(\"Expected ',' or '}' in a JSON object\");\n this.#skipWhitespace();\n }\n }\n\n #parseArray(): unknown[] {\n this.#offset += 1;\n this.#skipWhitespace();\n const result: unknown[] = [];\n if (this.#consume(\"]\")) return result;\n\n while (true) {\n result.push(this.#parseValue());\n this.#skipWhitespace();\n if (this.#consume(\"]\")) return result;\n if (!this.#consume(\",\")) this.#invalid(\"Expected ',' or ']' in a JSON array\");\n this.#skipWhitespace();\n }\n }\n\n #parseString(): string {\n const start = this.#offset;\n this.#offset += 1;\n while (this.#offset < this.source.length) {\n const character = this.source[this.#offset];\n if (character === '\"') {\n this.#offset += 1;\n const encoded = this.source.slice(start, this.#offset);\n try {\n return JSON.parse(encoded) as string;\n } catch (cause) {\n this.#invalid(\"Invalid JSON string\", cause);\n }\n }\n if (character === \"\\\\\") {\n this.#offset += 1;\n if (this.#offset >= this.source.length) this.#invalid(\"Unterminated JSON escape\");\n if (this.source[this.#offset] === \"u\") {\n const digits = this.source.slice(this.#offset + 1, this.#offset + 5);\n if (!/^[0-9a-fA-F]{4}$/.test(digits)) this.#invalid(\"Invalid Unicode escape\");\n this.#offset += 4;\n } else if (!'\"\\\\/bfnrt'.includes(this.source[this.#offset] ?? \"\")) {\n this.#invalid(\"Invalid JSON escape\");\n }\n } else if (character === undefined || character.charCodeAt(0) < 0x20) {\n this.#invalid(\"Invalid control character in JSON string\");\n }\n this.#offset += 1;\n }\n this.#invalid(\"Unterminated JSON string\");\n }\n\n #parseNumber(): number {\n const remainder = this.source.slice(this.#offset);\n const match = /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/.exec(remainder);\n if (!match) this.#invalid(\"Invalid JSON number\");\n this.#offset += match[0].length;\n const value = Number(match[0]);\n if (!Number.isFinite(value)) this.#invalid(\"JSON number is outside the supported range\");\n return value;\n }\n\n #parseLiteral<T>(encoded: string, value: T): T {\n if (!this.source.startsWith(encoded, this.#offset)) {\n this.#invalid(\"Invalid JSON literal\");\n }\n this.#offset += encoded.length;\n return value;\n }\n\n #skipWhitespace(): void {\n while (\n this.#offset < this.source.length &&\n \" \\t\\r\\n\".includes(this.source[this.#offset] ?? \"\")\n ) {\n this.#offset += 1;\n }\n }\n\n #consume(character: string): boolean {\n if (this.source[this.#offset] !== character) return false;\n this.#offset += 1;\n return true;\n }\n\n #invalid(message: string, cause?: unknown): never {\n throw new ProtocolValidationError(\"invalid_json\", message, {\n cause,\n });\n }\n}\n", "import { ProtocolValidationError } from \"./errors.js\";\n\n/** Redacted wrapper for credentials and other protocol secrets. */\nexport class SecretValue {\n readonly #value: string;\n\n constructor(value: string) {\n if (!value) {\n throw new ProtocolValidationError(\"invalid_secret\", \"Secret value must not be empty\");\n }\n this.#value = value;\n }\n\n reveal(): string {\n return this.#value;\n }\n\n toString(): string {\n return \"[REDACTED]\";\n }\n\n toJSON(): string {\n return \"[REDACTED]\";\n }\n}\n", null, null, null, null, null, null, null, null, null, null, null, "import {\n buildReactorFromPlugins,\n contribution,\n defineContributionPoint,\n definePlugin,\n type ReactorPlatform,\n type ReactorPlatformView,\n type ContributionPoint,\n type PlatformInput,\n} from \"@datalayer/reactor\";\n\nimport { DiscoveryError } from \"./errors.js\";\nimport type { SecretValue } from \"./secret.js\";\n\nexport interface DiscoveryTransport {\n fetch(input: URL, init: RequestInit): Promise<Response>;\n}\n\nexport interface UrlSafetyPolicy {\n assertSafe(url: URL): void | Promise<void>;\n}\n\nexport interface ProtocolProfile {\n readonly version: string;\n}\n\nexport interface ExtensionHandler {\n readonly name: string;\n readonly majorVersion: number;\n}\n\nexport interface Clock {\n now(): Date;\n}\n\nexport interface RandomSource {\n bytes(length: number): Uint8Array;\n}\n\nexport interface Signer {\n sign(\n claims: Readonly<Record<string, unknown>>,\n options: { readonly purpose: string },\n ): Promise<SecretValue>;\n}\n\nexport interface KeyReference {\n readonly id: string;\n readonly algorithm: string;\n}\n\nexport interface KeyStore {\n getOrCreate(options: {\n readonly tenantId: string;\n readonly subject: string;\n readonly purpose: string;\n }): Promise<KeyReference>;\n}\n\nexport interface TokenStore {\n put(reference: string, token: SecretValue): Promise<void>;\n get(reference: string): Promise<SecretValue | undefined>;\n delete(reference: string): Promise<void>;\n}\n\nexport interface PairwiseUserIdStore {\n getOrCreate(options: {\n readonly tenantId: string;\n readonly localUserId: string;\n readonly companyIssuer: string;\n }): Promise<string>;\n}\n\nexport interface AuthorizationStateStore {\n put(reference: string, value: unknown, options: { readonly expiresAt: Date }): Promise<void>;\n take(reference: string): Promise<unknown | undefined>;\n}\n\nexport interface ProtocolCache {\n put(key: string, value: unknown, options: { readonly expiresAt: Date }): Promise<void>;\n get(key: string): Promise<unknown | undefined>;\n delete(key: string): Promise<void>;\n}\n\nexport interface BrowserHandoff {\n open(authorizationUrl: SecretValue): Promise<void>;\n}\n\nexport interface DpopProofRequest {\n readonly method: string;\n readonly url: string;\n readonly tenantId: string;\n readonly subject: string;\n readonly issuer: string;\n readonly accessToken?: SecretValue;\n readonly nonce?: string;\n}\n\nexport interface DpopProofProvider {\n create(request: DpopProofRequest): Promise<SecretValue>;\n}\n\nexport const DiscoveryTransports = defineContributionPoint<DiscoveryTransport>(\n \"pap.discoveryTransport\",\n);\nexport const UrlSafetyPolicies = defineContributionPoint<UrlSafetyPolicy>(\n \"pap.urlSafetyPolicy\",\n);\nexport const ProtocolProfiles = defineContributionPoint<ProtocolProfile>(\n \"pap.protocolProfile\",\n);\nexport const ExtensionHandlers = defineContributionPoint<ExtensionHandler>(\n \"pap.extensionHandler\",\n);\nexport const Clocks = defineContributionPoint<Clock>(\"pap.clock\");\nexport const RandomSources = defineContributionPoint<RandomSource>(\"pap.randomSource\");\nexport const Signers = defineContributionPoint<Signer>(\"pap.signer\");\nexport const KeyStores = defineContributionPoint<KeyStore>(\"pap.keyStore\");\nexport const TokenStores = defineContributionPoint<TokenStore>(\"pap.tokenStore\");\nexport const PairwiseUserIdStores = defineContributionPoint<PairwiseUserIdStore>(\n \"pap.pairwiseUserIdStore\",\n);\nexport const AuthorizationStateStores = defineContributionPoint<AuthorizationStateStore>(\n \"pap.authorizationStateStore\",\n);\nexport const Caches = defineContributionPoint<ProtocolCache>(\"pap.cache\");\nexport const BrowserHandoffs = defineContributionPoint<BrowserHandoff>(\n \"pap.browserHandoff\",\n);\nexport const DpopProofProviders = defineContributionPoint<DpopProofProvider>(\n \"pap.dpopProofProvider\",\n);\n\nexport interface PapCoreOptions {\n readonly fetch?: typeof globalThis.fetch;\n readonly assertSafeUrl?: (url: URL) => void | Promise<void>;\n}\n\nconst systemClock: Clock = { now: () => new Date() };\nconst systemRandom: RandomSource = {\n bytes(length) {\n if (!Number.isInteger(length) || length <= 0) {\n throw new RangeError(\"Random byte length must be a positive integer\");\n }\n if (!globalThis.crypto) {\n throw new Error(\"A cryptographically secure random source is required\");\n }\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n },\n};\n\nfunction assertObviouslyPublic(url: URL): void {\n if (url.protocol !== \"https:\" || url.username || url.password) {\n throw new DiscoveryError(\"unsafe_url\", \"Discovery and metadata URLs must use HTTPS\");\n }\n const host = url.hostname.toLowerCase().replace(/[\\[\\]]/g, \"\");\n if (\n host === \"localhost\" ||\n host.endsWith(\".localhost\") ||\n host === \"::1\" ||\n /^127\\./.test(host) ||\n /^10\\./.test(host) ||\n /^192\\.168\\./.test(host) ||\n /^169\\.254\\./.test(host) ||\n /^172\\.(1[6-9]|2[0-9]|3[01])\\./.test(host)\n ) {\n throw new DiscoveryError(\"unsafe_address\", \"Discovery URL names a private address\");\n }\n}\n\nexport function createPapCorePlugin(options: PapCoreOptions = {}) {\n const fetcher = options.fetch ?? globalThis.fetch;\n if (!fetcher) {\n throw new DiscoveryError(\"fetch_unavailable\", \"A fetch implementation is required\");\n }\n return definePlugin({\n name: \"@datalayer/personal-agent-protocol-core\",\n version: \"0.3.1\",\n contributionPoints: [\n DiscoveryTransports,\n UrlSafetyPolicies,\n ProtocolProfiles,\n ExtensionHandlers,\n Clocks,\n RandomSources,\n Signers,\n KeyStores,\n TokenStores,\n PairwiseUserIdStores,\n AuthorizationStateStores,\n Caches,\n BrowserHandoffs,\n DpopProofProviders,\n ],\n contributes: [\n contribution(\n DiscoveryTransports,\n { fetch: (input, init) => fetcher(input, init) },\n { id: \"fetch\", order: 100 },\n ),\n contribution(\n UrlSafetyPolicies,\n {\n async assertSafe(url) {\n assertObviouslyPublic(url);\n await options.assertSafeUrl?.(url);\n },\n },\n { id: \"public\", order: 100 },\n ),\n contribution(ProtocolProfiles, { version: \"0.1\" }, { id: \"0.1\", order: 100 }),\n contribution(Clocks, systemClock, { id: \"system\", order: 100 }),\n contribution(RandomSources, systemRandom, { id: \"system\", order: 100 }),\n ],\n });\n}\n\nexport function buildPapReactor(\n options: PapCoreOptions = {},\n plugins: PlatformInput[] = [],\n): ReactorPlatform {\n const reactor = buildReactorFromPlugins([createPapCorePlugin(options), ...plugins]);\n reactor.start();\n return reactor;\n}\n\nexport function firstContribution<T>(\n reactor: ReactorPlatformView,\n point: ContributionPoint<T>,\n label: string,\n): T {\n const contributions = reactor.getContributions(point);\n const selected = contributions[0];\n if (!selected) {\n throw new Error(`PAP Reactor has no active ${label} contribution`);\n }\n if (contributions[1]?.order === selected.order) {\n throw new Error(`PAP Reactor has ambiguous ${label} contributions`);\n }\n return selected.value;\n}\n", "import type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nimport { ProtocolValidationError, SessionError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport { SecretValue } from \"./secret.js\";\nimport {\n Clocks,\n DpopProofProviders,\n PairwiseUserIdStores,\n RandomSources,\n Signers,\n firstContribution,\n type PairwiseUserIdStore,\n} from \"./reactor.js\";\n\nexport const JWT_BEARER_GRANT = \"urn:ietf:params:oauth:grant-type:jwt-bearer\";\nexport const JWT_CLIENT_ASSERTION =\n \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\";\n\nexport interface SessionAssertionClaims {\n readonly iss: string;\n readonly sub: string;\n readonly aud: string;\n readonly iat: number;\n readonly exp: number;\n readonly jti: string;\n}\n\nexport interface SessionToken {\n readonly accessToken: SecretValue;\n readonly tokenType: \"DPoP\" | \"Bearer\";\n readonly expiresIn: number;\n readonly scopes: readonly string[];\n readonly sessionId: string;\n readonly signedIn: boolean;\n readonly accountToken?: SecretValue;\n}\n\nexport type RandomBytes = (length: number) => Uint8Array;\n\nfunction defaultRandomBytes(length: number): Uint8Array {\n const cryptoApi = globalThis.crypto;\n if (!cryptoApi) {\n throw new Error(\"A cryptographically secure random source is required\");\n }\n return cryptoApi.getRandomValues(new Uint8Array(length));\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const first = bytes[index] ?? 0;\n const second = bytes[index + 1];\n const third = bytes[index + 2];\n output += alphabet[first >>> 2];\n output += alphabet[((first & 3) << 4) | ((second ?? 0) >>> 4)];\n if (second !== undefined) {\n output += alphabet[((second & 15) << 2) | ((third ?? 0) >>> 6)];\n }\n if (third !== undefined) {\n output += alphabet[third & 63];\n }\n }\n return output;\n}\n\nfunction opaqueId(prefix: string, randomBytes: RandomBytes): string {\n const bytes = randomBytes(16);\n if (bytes.byteLength < 16) {\n throw new Error(\"Opaque PAP identifiers require at least 128 random bits\");\n }\n return `${prefix}_${base64Url(bytes)}`;\n}\n\nexport function generatePairwiseUserId(\n randomBytes: RandomBytes = defaultRandomBytes,\n): string {\n return opaqueId(\"usr\", randomBytes);\n}\n\nexport async function resolvePairwiseUserId(\n reactor: ReactorPlatformView,\n options: {\n readonly tenantId: string;\n readonly localUserId: string;\n readonly companyIssuer: string;\n },\n): Promise<string> {\n const store = firstContribution(\n reactor,\n PairwiseUserIdStores,\n \"pairwise user ID store\",\n ) as PairwiseUserIdStore;\n return store.getOrCreate(options);\n}\n\nexport interface SessionAssertionOptions {\n readonly clientId: string;\n readonly pairwiseUserId: string;\n readonly tokenEndpoint: string;\n readonly now?: Date;\n readonly lifetimeSeconds?: number;\n readonly randomBytes?: RandomBytes;\n}\n\nfunction httpsUrl(value: string, label: string): string {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`, {\n cause,\n });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`);\n }\n return value;\n}\n\nexport function buildSessionAssertionClaims(\n options: SessionAssertionOptions,\n): SessionAssertionClaims {\n const lifetime = options.lifetimeSeconds ?? 60;\n if (!Number.isInteger(lifetime) || lifetime <= 0) {\n throw new ProtocolValidationError(\n \"invalid_assertion_lifetime\",\n \"Assertion lifetime must be a positive integer\",\n );\n }\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.pairwiseUserId)) {\n throw new ProtocolValidationError(\n \"invalid_user_id\",\n \"Pairwise user ID must use the URL-safe base64 alphabet\",\n );\n }\n const iat = Math.floor((options.now ?? new Date()).getTime() / 1000);\n return {\n iss: httpsUrl(options.clientId, \"clientId\"),\n sub: options.pairwiseUserId,\n aud: httpsUrl(options.tokenEndpoint, \"tokenEndpoint\"),\n iat,\n exp: iat + lifetime,\n jti: opaqueId(\"jti\", options.randomBytes ?? defaultRandomBytes),\n };\n}\n\nexport interface SessionGrantOptions {\n readonly assertion: string;\n readonly clientId: string;\n readonly clientAssertion: string;\n readonly sessionId?: string;\n}\n\nexport class SessionGrant {\n readonly assertion: SecretValue;\n readonly clientId: string;\n readonly clientAssertion: SecretValue;\n readonly sessionId: string | undefined;\n\n constructor(options: SessionGrantOptions) {\n this.assertion = new SecretValue(options.assertion);\n this.clientId = httpsUrl(options.clientId, \"clientId\");\n this.clientAssertion = new SecretValue(options.clientAssertion);\n if (options.sessionId !== undefined && !/^[A-Za-z0-9_-]{1,256}$/.test(options.sessionId)) {\n throw new ProtocolValidationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n this.sessionId = options.sessionId;\n }\n\n toForm(): URLSearchParams {\n const form = new URLSearchParams({\n grant_type: JWT_BEARER_GRANT,\n assertion: this.assertion.reveal(),\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion.reveal(),\n });\n if (this.sessionId !== undefined) {\n form.set(\"session_id\", this.sessionId);\n }\n return form;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n grant_type: JWT_BEARER_GRANT,\n assertion: this.assertion,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion,\n ...(this.sessionId === undefined ? {} : { session_id: this.sessionId }),\n };\n }\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction nonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !value) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a string`);\n }\n return value;\n}\n\nexport function parseSessionToken(value: unknown): SessionToken {\n const source = object(value, \"session token response\");\n const tokenType = nonEmptyString(source.token_type, \"token_type\");\n if (tokenType !== \"DPoP\" && tokenType !== \"Bearer\") {\n throw new ProtocolValidationError(\"invalid_token_type\", \"Unsupported token_type\");\n }\n const expiresIn = source.expires_in;\n if (!Number.isInteger(expiresIn) || (expiresIn as number) <= 0) {\n throw new ProtocolValidationError(\"invalid_expiry\", \"expires_in must be positive\");\n }\n const sessionId = nonEmptyString(source.session_id, \"session_id\");\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(sessionId)) {\n throw new ProtocolValidationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n if (typeof source.signed_in !== \"boolean\") {\n throw new ProtocolValidationError(\"invalid_type\", \"signed_in must be boolean\");\n }\n if (source.scope !== undefined && typeof source.scope !== \"string\") {\n throw new ProtocolValidationError(\"invalid_type\", \"scope must be a string\");\n }\n const scope = (source.scope as string | undefined) ?? \"\";\n return {\n accessToken: new SecretValue(nonEmptyString(source.access_token, \"access_token\")),\n tokenType,\n expiresIn: expiresIn as number,\n scopes: scope.split(\" \").filter(Boolean),\n sessionId,\n signedIn: source.signed_in,\n ...(source.refresh_token === undefined\n ? {}\n : {\n accountToken: new SecretValue(\n nonEmptyString(source.refresh_token, \"refresh_token\"),\n ),\n }),\n };\n}\n\nexport interface SessionRequestOptions {\n readonly clientId: string;\n readonly pairwiseUserId: string;\n readonly issuer: string;\n readonly tokenEndpoint: string;\n readonly tenantId: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface SessionRenewOptions extends SessionRequestOptions {\n readonly sessionId: string;\n}\n\nexport interface SessionClientOptions {\n readonly reactor: ReactorPlatformView;\n readonly fetch?: typeof globalThis.fetch;\n readonly maxResponseBytes?: number;\n}\n\n/** Start and renew signed-out PAP sessions over an OAuth token endpoint. */\nexport class SessionClient {\n readonly #reactor: ReactorPlatformView;\n readonly #fetch: typeof globalThis.fetch;\n readonly #maxResponseBytes: number;\n\n constructor(options: SessionClientOptions) {\n const fetcher = options.fetch ?? globalThis.fetch;\n if (!fetcher) throw new SessionError(\"fetch_unavailable\", \"A fetch implementation is required\");\n const maxResponseBytes = options.maxResponseBytes ?? 100 * 1024;\n if (!Number.isInteger(maxResponseBytes) || maxResponseBytes <= 0) {\n throw new RangeError(\"maxResponseBytes must be a positive integer\");\n }\n this.#reactor = options.reactor;\n this.#fetch = fetcher;\n this.#maxResponseBytes = maxResponseBytes;\n }\n\n start(options: SessionRequestOptions): Promise<SessionToken> {\n return this.#request(options);\n }\n\n renew(options: SessionRenewOptions): Promise<SessionToken> {\n return this.#request(options, options.sessionId);\n }\n\n async #request(\n options: SessionRequestOptions,\n sessionId?: string,\n ): Promise<SessionToken> {\n const clock = firstContribution(this.#reactor, Clocks, \"clock\");\n const random = firstContribution(this.#reactor, RandomSources, \"random source\");\n const signer = firstContribution(this.#reactor, Signers, \"signer\");\n const dpop = firstContribution(\n this.#reactor,\n DpopProofProviders,\n \"DPoP proof provider\",\n );\n let nonce: string | undefined;\n\n for (let attempt = 0; attempt < 2; attempt += 1) {\n const now = clock.now();\n const sessionClaims = buildSessionAssertionClaims({\n clientId: options.clientId,\n pairwiseUserId: options.pairwiseUserId,\n tokenEndpoint: options.tokenEndpoint,\n now,\n randomBytes: (length) => random.bytes(length),\n });\n const iat = Math.floor(now.getTime() / 1000);\n const clientId = httpsUrl(options.clientId, \"clientId\");\n const tokenEndpoint = httpsUrl(options.tokenEndpoint, \"tokenEndpoint\");\n const issuer = httpsUrl(options.issuer, \"issuer\");\n const clientClaims = {\n iss: clientId,\n sub: clientId,\n aud: tokenEndpoint,\n iat,\n exp: iat + 60,\n jti: opaqueId(\"jti\", (length) => random.bytes(length)),\n };\n const assertion = await signer.sign({ ...sessionClaims }, {\n purpose: \"session_assertion\",\n });\n const clientAssertion = await signer.sign(clientClaims, {\n purpose: \"client_assertion\",\n });\n const proof = await dpop.create({\n method: \"POST\",\n url: tokenEndpoint,\n tenantId: options.tenantId,\n subject: options.pairwiseUserId,\n issuer,\n ...(nonce === undefined ? {} : { nonce }),\n });\n const grant = new SessionGrant({\n assertion: assertion.reveal(),\n clientId,\n clientAssertion: clientAssertion.reveal(),\n ...(sessionId === undefined ? {} : { sessionId }),\n });\n\n let response: Response;\n try {\n response = await this.#fetch(tokenEndpoint, {\n method: \"POST\",\n headers: { Accept: \"application/json\", DPoP: proof.reveal() },\n body: grant.toForm(),\n credentials: \"omit\",\n redirect: \"error\",\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n } catch (cause) {\n throw new SessionError(\"request_failed\", \"Session token request failed\", { cause });\n }\n\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\") {\n throw new SessionError(\n \"invalid_content_type\",\n \"Session token endpoint must return JSON\",\n { statusCode: response.status },\n );\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > this.#maxResponseBytes) {\n throw new SessionError(\n \"response_too_large\",\n \"Session token response exceeds size limit\",\n { statusCode: response.status },\n );\n }\n let payload: unknown;\n try {\n payload = parseJsonStrict(body);\n } catch (cause) {\n throw new SessionError(\"invalid_json\", \"Session token endpoint returned invalid JSON\", {\n statusCode: response.status,\n cause,\n });\n }\n\n if (response.ok) {\n let token: SessionToken;\n try {\n token = parseSessionToken(payload);\n } catch (cause) {\n throw new SessionError(\n \"invalid_token_response\",\n \"Session token response is malformed\",\n { statusCode: response.status, cause },\n );\n }\n if (token.tokenType !== \"DPoP\") {\n throw new SessionError(\n \"unexpected_token_type\",\n \"A proof-bound session request must return a DPoP token\",\n { statusCode: response.status },\n );\n }\n return token;\n }\n\n const source = typeof payload === \"object\" && payload !== null ? payload : {};\n const remoteCode = \"error\" in source ? (source as { error?: unknown }).error : undefined;\n const code = typeof remoteCode === \"string\" ? remoteCode : \"http_error\";\n if (code === \"use_dpop_nonce\" && attempt === 0) {\n nonce = response.headers.get(\"dpop-nonce\") ?? undefined;\n if (!nonce) {\n throw new SessionError(\n \"missing_dpop_nonce\",\n \"Company requested a DPoP nonce but did not send one\",\n { statusCode: response.status },\n );\n }\n continue;\n }\n const retryAfter = response.headers.get(\"retry-after\");\n throw new SessionError(code, \"Company refused the session token request\", {\n statusCode: response.status,\n ...(retryAfter === null ? {} : { details: { retryAfter } }),\n });\n }\n throw new SessionError(\"use_dpop_nonce\", \"Company rejected the refreshed DPoP proof\");\n }\n}\n", "import type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nimport { AuthorizationError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport { SecretValue } from \"./secret.js\";\nimport {\n JWT_CLIENT_ASSERTION,\n parseSessionToken,\n type RandomBytes,\n type SessionToken,\n} from \"./sessions.js\";\nimport {\n AuthorizationStateStores,\n BrowserHandoffs,\n Clocks,\n DpopProofProviders,\n RandomSources,\n Signers,\n firstContribution,\n} from \"./reactor.js\";\n\nfunction defaultRandomBytes(length: number): Uint8Array {\n if (!globalThis.crypto) {\n throw new AuthorizationError(\"crypto_unavailable\", \"Web Crypto is required\");\n }\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n\nfunction entropy(length: number, randomBytes: RandomBytes): Uint8Array {\n const value = randomBytes(length);\n if (value.byteLength < length) {\n throw new AuthorizationError(\n \"weak_entropy\",\n `Authorization requires ${length * 8} random bits`,\n );\n }\n return value;\n}\n\nfunction base64Url(bytes: Uint8Array): string {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const first = bytes[index] ?? 0;\n const second = bytes[index + 1];\n const third = bytes[index + 2];\n output += alphabet[first >>> 2];\n output += alphabet[((first & 3) << 4) | ((second ?? 0) >>> 4)];\n if (second !== undefined) {\n output += alphabet[((second & 15) << 2) | ((third ?? 0) >>> 6)];\n }\n if (third !== undefined) {\n output += alphabet[third & 63];\n }\n }\n return output;\n}\n\nfunction httpsUrl(value: string, label: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n throw new AuthorizationError(\"invalid_url\", `${label} must be an HTTPS URL`, { cause });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new AuthorizationError(\"invalid_url\", `${label} must be an HTTPS URL`);\n }\n return parsed;\n}\n\nfunction validScopes(values: readonly string[]): readonly string[] {\n const scopes = [...new Set(values)];\n const token = /^[\\x21\\x23-\\x5b\\x5d-\\x7e]+$/;\n if (scopes.length === 0 || scopes.some((scope) => !token.test(scope))) {\n throw new AuthorizationError(\"invalid_scope\", \"At least one valid OAuth scope is required\");\n }\n return scopes;\n}\n\nexport interface DirectSignInOptions {\n readonly authorizationEndpoint: string;\n readonly issuer: string;\n readonly clientId: string;\n readonly redirectUri: string;\n readonly scopes: readonly string[];\n readonly randomBytes?: RandomBytes;\n}\n\nexport interface DirectSignInRequest {\n readonly authorizationUrl: SecretValue;\n readonly issuer: string;\n readonly clientId: string;\n readonly redirectUri: string;\n readonly scopes: readonly string[];\n readonly state: SecretValue;\n readonly codeVerifier: SecretValue;\n}\n\nexport async function buildDirectSignInRequest(\n options: DirectSignInOptions,\n): Promise<DirectSignInRequest> {\n const randomBytes = options.randomBytes ?? defaultRandomBytes;\n const state = base64Url(entropy(16, randomBytes));\n const verifier = base64Url(entropy(32, randomBytes));\n const cryptoApi = globalThis.crypto;\n if (!cryptoApi) {\n throw new AuthorizationError(\"crypto_unavailable\", \"Web Crypto is required\");\n }\n const challenge = base64Url(\n new Uint8Array(await cryptoApi.subtle.digest(\"SHA-256\", new TextEncoder().encode(verifier))),\n );\n const endpoint = httpsUrl(options.authorizationEndpoint, \"authorizationEndpoint\");\n const scopes = validScopes(options.scopes);\n const clientId = httpsUrl(options.clientId, \"clientId\").toString();\n const redirectUri = httpsUrl(options.redirectUri, \"redirectUri\").toString();\n const issuer = httpsUrl(options.issuer, \"issuer\").toString().replace(/\\/$/, \"\");\n endpoint.searchParams.set(\"response_type\", \"code\");\n endpoint.searchParams.set(\"client_id\", clientId);\n endpoint.searchParams.set(\"redirect_uri\", redirectUri);\n endpoint.searchParams.set(\"scope\", scopes.join(\" \"));\n endpoint.searchParams.set(\"state\", state);\n endpoint.searchParams.set(\"code_challenge\", challenge);\n endpoint.searchParams.set(\"code_challenge_method\", \"S256\");\n endpoint.hash = \"\";\n return {\n authorizationUrl: new SecretValue(endpoint.toString()),\n issuer,\n clientId,\n redirectUri,\n scopes,\n state: new SecretValue(state),\n codeVerifier: new SecretValue(verifier),\n };\n}\n\nexport interface DirectSignInCallback {\n readonly code: SecretValue;\n readonly issuer: string;\n}\n\nfunction equalConstantTime(left: string, right: string): boolean {\n let difference = left.length ^ right.length;\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n difference |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0);\n }\n return difference === 0;\n}\n\nexport function validateDirectSignInCallback(\n request: DirectSignInRequest,\n callbackUrl: string,\n): DirectSignInCallback {\n const expected = httpsUrl(request.redirectUri, \"redirectUri\");\n const callback = httpsUrl(callbackUrl, \"callbackUrl\");\n if (callback.hash) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization callback has a fragment\");\n }\n if (callback.origin !== expected.origin || callback.pathname !== expected.pathname) {\n throw new AuthorizationError(\"redirect_mismatch\", \"Callback does not match redirect URI\");\n }\n for (const [key, value] of expected.searchParams) {\n if (callback.searchParams.get(key) !== value) {\n throw new AuthorizationError(\n \"redirect_mismatch\",\n \"Callback changed redirect URI parameters\",\n );\n }\n }\n for (const key of [\"code\", \"state\", \"iss\", \"error\"]) {\n if (callback.searchParams.getAll(key).length > 1) {\n throw new AuthorizationError(\n \"invalid_callback\",\n \"Authorization callback repeats a security parameter\",\n );\n }\n }\n if (callback.searchParams.has(\"error\")) {\n throw new AuthorizationError(\"authorization_denied\", \"Company did not authorize the request\");\n }\n if (!equalConstantTime(callback.searchParams.get(\"state\") ?? \"\", request.state.reveal())) {\n throw new AuthorizationError(\"state_mismatch\", \"Authorization state does not match\");\n }\n if (callback.searchParams.get(\"iss\") !== request.issuer) {\n throw new AuthorizationError(\"issuer_mismatch\", \"Authorization issuer does not match\");\n }\n const code = callback.searchParams.get(\"code\");\n if (!code) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization callback has no code\");\n }\n return { code: new SecretValue(code), issuer: request.issuer };\n}\n\nexport interface AuthorizationCodeGrantOptions {\n readonly code: string;\n readonly redirectUri: string;\n readonly codeVerifier: string;\n readonly sessionId: string;\n readonly clientId: string;\n readonly clientAssertion: string;\n}\n\nexport class AuthorizationCodeGrant {\n readonly code: SecretValue;\n readonly redirectUri: string;\n readonly codeVerifier: SecretValue;\n readonly sessionId: string;\n readonly clientId: string;\n readonly clientAssertion: SecretValue;\n\n constructor(options: AuthorizationCodeGrantOptions) {\n this.code = new SecretValue(options.code);\n this.redirectUri = httpsUrl(options.redirectUri, \"redirectUri\").toString();\n this.codeVerifier = new SecretValue(options.codeVerifier);\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.sessionId)) {\n throw new AuthorizationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n this.sessionId = options.sessionId;\n this.clientId = httpsUrl(options.clientId, \"clientId\").toString();\n this.clientAssertion = new SecretValue(options.clientAssertion);\n }\n\n toForm(): URLSearchParams {\n return new URLSearchParams({\n grant_type: \"authorization_code\",\n code: this.code.reveal(),\n redirect_uri: this.redirectUri,\n code_verifier: this.codeVerifier.reveal(),\n session_id: this.sessionId,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion.reveal(),\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n grant_type: \"authorization_code\",\n code: this.code,\n redirect_uri: this.redirectUri,\n code_verifier: this.codeVerifier,\n session_id: this.sessionId,\n client_id: this.clientId,\n client_assertion_type: JWT_CLIENT_ASSERTION,\n client_assertion: this.clientAssertion,\n };\n }\n}\n\ninterface PendingDirectSignIn {\n readonly kind: \"pap.direct-sign-in.v1\";\n readonly request: DirectSignInRequest;\n readonly tokenEndpoint: string;\n readonly tenantId: string;\n readonly pairwiseUserId: string;\n readonly sessionId: string;\n readonly expiresAt: Date;\n}\n\nexport interface DirectSignInStart {\n readonly expiresAt: Date;\n readonly requestedScopes: readonly string[];\n}\n\nexport interface DirectSignInResult {\n readonly token: SessionToken;\n readonly grantedScopes: readonly string[];\n readonly missingScopes: readonly string[];\n}\n\nexport interface DirectSignInBeginOptions extends DirectSignInOptions {\n readonly tokenEndpoint: string;\n readonly tenantId: string;\n readonly pairwiseUserId: string;\n readonly sessionId: string;\n readonly lifetimeSeconds?: number;\n}\n\nexport interface DirectSignInCompleteOptions {\n readonly callbackUrl: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface DirectSignInClientOptions {\n readonly reactor: ReactorPlatformView;\n readonly fetch?: typeof globalThis.fetch;\n readonly maxResponseBytes?: number;\n}\n\nasync function stateReference(state: string): Promise<string> {\n const bytes = new TextEncoder().encode(state);\n if ([...bytes].some((byte) => byte > 0x7f)) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization state is invalid\");\n }\n const cryptoApi = globalThis.crypto;\n if (!cryptoApi) {\n throw new AuthorizationError(\"crypto_unavailable\", \"Web Crypto is required\");\n }\n const digest = await cryptoApi.subtle.digest(\"SHA-256\", bytes);\n return `direct:${Array.from(new Uint8Array(digest), (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\")}`;\n}\n\nfunction callbackState(callbackUrl: string): string {\n const callback = httpsUrl(callbackUrl, \"callbackUrl\");\n if (callback.hash) {\n throw new AuthorizationError(\"invalid_callback\", \"Authorization callback has a fragment\");\n }\n const states = callback.searchParams.getAll(\"state\");\n if (states.length !== 1 || !states[0]) {\n throw new AuthorizationError(\n \"invalid_callback\",\n \"Authorization callback must contain one state value\",\n );\n }\n return states[0];\n}\n\nfunction isPendingDirectSignIn(value: unknown): value is PendingDirectSignIn {\n if (typeof value !== \"object\" || value === null) return false;\n const pending = value as Partial<PendingDirectSignIn>;\n return (\n pending.kind === \"pap.direct-sign-in.v1\" &&\n typeof pending.tokenEndpoint === \"string\" &&\n typeof pending.tenantId === \"string\" &&\n typeof pending.pairwiseUserId === \"string\" &&\n typeof pending.sessionId === \"string\" &&\n pending.expiresAt instanceof Date &&\n typeof pending.request === \"object\" &&\n pending.request !== null\n );\n}\n\n/** Orchestrate one-use browser authorization and proof-bound code exchange. */\nexport class DirectSignInClient {\n readonly #reactor: ReactorPlatformView;\n readonly #fetch: typeof globalThis.fetch;\n readonly #maxResponseBytes: number;\n\n constructor(options: DirectSignInClientOptions) {\n const fetcher = options.fetch ?? globalThis.fetch;\n if (!fetcher) {\n throw new AuthorizationError(\"fetch_unavailable\", \"A fetch implementation is required\");\n }\n const maxResponseBytes = options.maxResponseBytes ?? 100 * 1024;\n if (!Number.isInteger(maxResponseBytes) || maxResponseBytes <= 0) {\n throw new RangeError(\"maxResponseBytes must be a positive integer\");\n }\n this.#reactor = options.reactor;\n this.#fetch = fetcher;\n this.#maxResponseBytes = maxResponseBytes;\n }\n\n async begin(options: DirectSignInBeginOptions): Promise<DirectSignInStart> {\n const lifetimeSeconds = options.lifetimeSeconds ?? 600;\n if (!Number.isInteger(lifetimeSeconds) || lifetimeSeconds < 1 || lifetimeSeconds > 900) {\n throw new RangeError(\"Direct Sign-In state lifetime must be between 1 and 900 seconds\");\n }\n if (!options.tenantId || options.tenantId.length > 256) {\n throw new RangeError(\"tenantId must contain between 1 and 256 characters\");\n }\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.pairwiseUserId)) {\n throw new AuthorizationError(\n \"invalid_user_id\",\n \"Pairwise user ID must be an opaque URL-safe identifier\",\n );\n }\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(options.sessionId)) {\n throw new AuthorizationError(\"invalid_session_id\", \"Invalid PAP session ID\");\n }\n const clock = firstContribution(this.#reactor, Clocks, \"clock\");\n const random = firstContribution(this.#reactor, RandomSources, \"random source\");\n const store = firstContribution(\n this.#reactor,\n AuthorizationStateStores,\n \"authorization state store\",\n );\n const browser = firstContribution(this.#reactor, BrowserHandoffs, \"browser handoff\");\n const request = await buildDirectSignInRequest({\n authorizationEndpoint: options.authorizationEndpoint,\n issuer: options.issuer,\n clientId: options.clientId,\n redirectUri: options.redirectUri,\n scopes: options.scopes,\n randomBytes: (length) => random.bytes(length),\n });\n const tokenEndpoint = httpsUrl(options.tokenEndpoint, \"tokenEndpoint\").toString();\n const expiresAt = new Date(clock.now().getTime() + lifetimeSeconds * 1000);\n const reference = await stateReference(request.state.reveal());\n const pending: PendingDirectSignIn = {\n kind: \"pap.direct-sign-in.v1\",\n request,\n tokenEndpoint,\n tenantId: options.tenantId,\n pairwiseUserId: options.pairwiseUserId,\n sessionId: options.sessionId,\n expiresAt,\n };\n await store.put(reference, pending, { expiresAt });\n try {\n await browser.open(request.authorizationUrl);\n } catch (cause) {\n await store.take(reference);\n throw new AuthorizationError(\"browser_handoff_failed\", \"Browser handoff failed\", { cause });\n }\n return { expiresAt, requestedScopes: request.scopes };\n }\n\n async complete(options: DirectSignInCompleteOptions): Promise<DirectSignInResult> {\n const state = callbackState(options.callbackUrl);\n const store = firstContribution(\n this.#reactor,\n AuthorizationStateStores,\n \"authorization state store\",\n );\n const pending = await store.take(await stateReference(state));\n if (!isPendingDirectSignIn(pending)) {\n throw new AuthorizationError(\n \"invalid_or_expired_state\",\n \"Authorization state is unknown, expired, or already used\",\n );\n }\n const clock = firstContribution(this.#reactor, Clocks, \"clock\");\n if (clock.now().getTime() > pending.expiresAt.getTime()) {\n throw new AuthorizationError(\"invalid_or_expired_state\", \"Authorization state has expired\");\n }\n const callback = validateDirectSignInCallback(pending.request, options.callbackUrl);\n return this.#exchange(pending, callback, options.signal);\n }\n\n async #exchange(\n pending: PendingDirectSignIn,\n callback: DirectSignInCallback,\n signal?: AbortSignal,\n ): Promise<DirectSignInResult> {\n const clock = firstContribution(this.#reactor, Clocks, \"clock\");\n const random = firstContribution(this.#reactor, RandomSources, \"random source\");\n const signer = firstContribution(this.#reactor, Signers, \"signer\");\n const dpop = firstContribution(\n this.#reactor,\n DpopProofProviders,\n \"DPoP proof provider\",\n );\n let nonce: string | undefined;\n\n for (let attempt = 0; attempt < 2; attempt += 1) {\n const iat = Math.floor(clock.now().getTime() / 1000);\n const clientAssertion = await signer.sign(\n {\n iss: pending.request.clientId,\n sub: pending.request.clientId,\n aud: pending.tokenEndpoint,\n iat,\n exp: iat + 60,\n jti: `jti_${base64Url(entropy(16, (length) => random.bytes(length)))}`,\n },\n { purpose: \"client_assertion\" },\n );\n const proof = await dpop.create({\n method: \"POST\",\n url: pending.tokenEndpoint,\n tenantId: pending.tenantId,\n subject: pending.pairwiseUserId,\n issuer: pending.request.issuer,\n ...(nonce === undefined ? {} : { nonce }),\n });\n const grant = new AuthorizationCodeGrant({\n code: callback.code.reveal(),\n redirectUri: pending.request.redirectUri,\n codeVerifier: pending.request.codeVerifier.reveal(),\n sessionId: pending.sessionId,\n clientId: pending.request.clientId,\n clientAssertion: clientAssertion.reveal(),\n });\n let response: Response;\n try {\n response = await this.#fetch(pending.tokenEndpoint, {\n method: \"POST\",\n headers: { Accept: \"application/json\", DPoP: proof.reveal() },\n body: grant.toForm(),\n credentials: \"omit\",\n redirect: \"error\",\n ...(signal === undefined ? {} : { signal }),\n });\n } catch (cause) {\n throw new AuthorizationError(\n \"request_failed\",\n \"Direct Sign-In token exchange failed\",\n { cause },\n );\n }\n const payload = await this.#decode(response);\n if (response.ok) return this.#result(response, payload, pending);\n\n const source = typeof payload === \"object\" && payload !== null ? payload : {};\n const remoteCode = \"error\" in source ? (source as { error?: unknown }).error : undefined;\n const code = typeof remoteCode === \"string\" ? remoteCode : \"http_error\";\n if (code === \"use_dpop_nonce\" && attempt === 0) {\n nonce = response.headers.get(\"dpop-nonce\") ?? undefined;\n if (!nonce) {\n throw new AuthorizationError(\n \"missing_dpop_nonce\",\n \"Company requested a DPoP nonce but did not send one\",\n { statusCode: response.status },\n );\n }\n continue;\n }\n throw new AuthorizationError(code, \"Company refused the Direct Sign-In token exchange\", {\n statusCode: response.status,\n });\n }\n throw new AuthorizationError(\"use_dpop_nonce\", \"Company rejected the refreshed DPoP proof\");\n }\n\n async #decode(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\") {\n throw new AuthorizationError(\n \"invalid_content_type\",\n \"Direct Sign-In token endpoint must return JSON\",\n { statusCode: response.status },\n );\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > this.#maxResponseBytes) {\n throw new AuthorizationError(\n \"response_too_large\",\n \"Direct Sign-In response exceeds size limit\",\n { statusCode: response.status },\n );\n }\n try {\n return parseJsonStrict(body);\n } catch (cause) {\n throw new AuthorizationError(\n \"invalid_json\",\n \"Direct Sign-In token endpoint returned invalid JSON\",\n { statusCode: response.status, cause },\n );\n }\n }\n\n #result(\n response: Response,\n payload: unknown,\n pending: PendingDirectSignIn,\n ): DirectSignInResult {\n let token: SessionToken;\n try {\n token = parseSessionToken(payload);\n } catch (cause) {\n throw new AuthorizationError(\n \"invalid_token_response\",\n \"Direct Sign-In token response is malformed\",\n { statusCode: response.status, cause },\n );\n }\n if (token.tokenType !== \"DPoP\" || !token.signedIn) {\n throw new AuthorizationError(\n \"invalid_token_response\",\n \"Direct Sign-In must return a signed-in DPoP Session Token\",\n { statusCode: response.status },\n );\n }\n if (token.sessionId !== pending.sessionId) {\n throw new AuthorizationError(\n \"session_mismatch\",\n \"Direct Sign-In response changed the existing Session\",\n { statusCode: response.status },\n );\n }\n if (token.scopes.some((scope) => !pending.request.scopes.includes(scope))) {\n throw new AuthorizationError(\n \"scope_escalation\",\n \"Company returned a scope that was not requested\",\n { statusCode: response.status },\n );\n }\n return {\n token,\n grantedScopes: token.scopes,\n missingScopes: pending.request.scopes.filter((scope) => !token.scopes.includes(scope)),\n };\n }\n}\n", "import { ProtocolValidationError } from \"./errors.js\";\n\nexport type UnknownFields = Readonly<Record<string, unknown>>;\n\nexport interface Organization extends UnknownFields {\n readonly name: string;\n readonly domain: string;\n}\n\nexport interface ScopeOption extends UnknownFields {\n readonly scopes: readonly string[];\n}\n\nexport interface MediatedField extends UnknownFields {\n readonly name: string;\n readonly label: string;\n readonly secret: boolean;\n}\n\nexport interface MediatedSignIn extends ScopeOption {\n readonly endpoint: string;\n readonly fields: readonly MediatedField[];\n}\n\nexport interface AuthCapabilities extends UnknownFields {\n readonly issuer: string;\n readonly direct?: ScopeOption;\n readonly device?: ScopeOption;\n readonly mediated?: MediatedSignIn;\n readonly custom_scopes?: Readonly<Record<string, string>>;\n}\n\nexport interface AgentProtocol extends UnknownFields {\n readonly type: string;\n readonly endpoint: string;\n readonly resource?: string;\n}\n\nexport interface AgentDescriptor extends UnknownFields {\n readonly protocols: readonly AgentProtocol[];\n}\n\nexport interface ApiDescriptor extends UnknownFields {\n readonly type: string;\n readonly url: string;\n readonly description: string;\n readonly resource?: string;\n}\n\nexport interface WebDescriptor extends UnknownFields {\n readonly browser_session_endpoint?: string;\n}\n\nexport interface ExtensionDescriptor extends UnknownFields {\n readonly version: string;\n}\n\nexport interface DiscoveryDocument extends UnknownFields {\n readonly protocol_version: string;\n readonly organization: Organization;\n readonly auth?: AuthCapabilities;\n readonly agent?: AgentDescriptor;\n readonly web?: WebDescriptor;\n readonly apis: readonly ApiDescriptor[];\n readonly extensions: Readonly<Record<string, ExtensionDescriptor>>;\n}\n\nexport interface OAuthServerMetadata extends UnknownFields {\n readonly issuer: string;\n readonly token_endpoint: string;\n readonly revocation_endpoint: string;\n readonly authorization_endpoint?: string;\n readonly device_authorization_endpoint?: string;\n readonly poppy_domains: readonly string[];\n}\n\nexport interface ClientMetadata extends UnknownFields {\n readonly client_id: string;\n readonly client_name: string;\n readonly logo_uri?: string;\n readonly jwks_uri: string;\n readonly redirect_uris: readonly string[];\n readonly token_endpoint_auth_method: \"private_key_jwt\";\n readonly extensions: Readonly<Record<string, ExtensionDescriptor>>;\n}\n\nexport interface JsonWebKey extends UnknownFields {\n readonly kty: \"EC\" | \"RSA\";\n readonly kid?: string;\n readonly use?: \"sig\";\n readonly alg?: \"ES256\" | \"RS256\";\n readonly crv?: \"P-256\";\n readonly x?: string;\n readonly y?: string;\n readonly n?: string;\n readonly e?: string;\n}\n\nexport interface JsonWebKeySet extends UnknownFields {\n readonly keys: readonly JsonWebKey[];\n}\n\nexport type OperationState =\n | \"proposed\"\n | \"in_progress\"\n | \"succeeded\"\n | \"failed\"\n | \"cancelled\"\n | \"expired\";\n\nexport interface OperationResult extends UnknownFields {\n readonly summary: string;\n readonly data?: Readonly<Record<string, unknown>>;\n}\n\nexport interface OperationConfirmation extends UnknownFields {\n readonly revision: number;\n readonly approved_by: \"user\" | \"standing_permission\";\n readonly confirmed_at: string;\n}\n\nexport interface Operation extends UnknownFields {\n readonly operation_id: string;\n readonly revision: number;\n readonly state: OperationState;\n readonly summary: string;\n readonly terms?: Readonly<Record<string, unknown>>;\n readonly expires_at?: string;\n readonly user_approval_required: boolean;\n readonly url?: string;\n readonly confirmation: OperationConfirmation | null;\n readonly result: OperationResult | null;\n}\n\nexport interface Message extends UnknownFields {\n readonly id: string;\n readonly sender: \"agent\" | \"human\";\n readonly role?: \"user\" | \"company\";\n readonly text?: string;\n readonly data?: Readonly<Record<string, unknown>>;\n readonly context?: Readonly<Record<string, unknown>>;\n readonly operation?: Operation;\n}\n\nexport type ConversationStatus = \"working\" | \"idle\" | \"queued\" | \"closed\";\nexport type ConversationResponder = \"agent\" | \"human\";\n\nexport interface ConversationEvent extends UnknownFields {\n readonly id: string;\n readonly type: string;\n readonly created_at: string;\n readonly message?: Message;\n readonly status?: ConversationStatus;\n readonly responder?: ConversationResponder;\n readonly error?: \"sign_in_required\" | \"insufficient_scope\";\n readonly scope?: string;\n readonly reason?: string;\n readonly conversation_id?: string;\n}\n\nexport interface ConversationEventPage extends UnknownFields {\n readonly conversation_id: string;\n readonly events: readonly ConversationEvent[];\n readonly cursor: string;\n readonly has_more: boolean;\n readonly status: ConversationStatus;\n readonly responder: ConversationResponder;\n}\n\nexport interface DiscoveredCompany {\n readonly discoveryUrl: string;\n readonly document: DiscoveryDocument;\n readonly oauthMetadata?: OAuthServerMetadata;\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction string(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction array(value: unknown, label: string): readonly unknown[] {\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be an array`);\n }\n return value;\n}\n\nfunction boolean(value: unknown, label: string): boolean {\n if (typeof value !== \"boolean\") {\n throw new ProtocolValidationError(\"invalid_type\", `${label} must be a boolean`);\n }\n return value;\n}\n\nfunction integer(value: unknown, label: string, minimum = 1): number {\n if (!Number.isInteger(value) || (value as number) < minimum) {\n throw new ProtocolValidationError(\n \"invalid_type\",\n `${label} must be an integer greater than or equal to ${minimum}`,\n );\n }\n return value as number;\n}\n\nfunction identifier(value: unknown, label: string): string {\n const result = string(value, label);\n if (!/^[A-Za-z0-9_-]{1,256}$/.test(result)) {\n throw new ProtocolValidationError(\n \"invalid_identifier\",\n `${label} must use the URL-safe base64 alphabet`,\n );\n }\n return result;\n}\n\nfunction timestamp(value: unknown, label: string): string {\n const result = string(value, label);\n if (!/(?:Z|[+-][0-9]{2}:[0-9]{2})$/u.test(result) || Number.isNaN(Date.parse(result))) {\n throw new ProtocolValidationError(\n \"invalid_timestamp\",\n `${label} must be an RFC 3339 timestamp with a timezone`,\n );\n }\n return result;\n}\n\nfunction oneOf<T extends string>(\n value: unknown,\n values: readonly T[],\n label: string,\n): T {\n if (typeof value !== \"string\" || !values.includes(value as T)) {\n throw new ProtocolValidationError(\n \"invalid_value\",\n `${label} must be one of ${values.join(\", \")}`,\n );\n }\n return value as T;\n}\n\nfunction optionalRecord(\n value: unknown,\n label: string,\n): Readonly<Record<string, unknown>> | undefined {\n return value === undefined ? undefined : record(value, label);\n}\n\nfunction extensions(\n value: unknown,\n label: string,\n): Readonly<Record<string, ExtensionDescriptor>> {\n const source = record(value ?? {}, label);\n return Object.fromEntries(\n Object.entries(source).map(([name, item]) => {\n const extension = record(item, `${label}.${name}`);\n const version = string(extension.version, `${label}.${name}.version`);\n if (!/^(0|[1-9][0-9]*)$/.test(version)) {\n throw new ProtocolValidationError(\n \"invalid_extension_version\",\n `${label}.${name}.version must be a major version`,\n );\n }\n return [name, { ...extension, version } as ExtensionDescriptor];\n }),\n );\n}\n\nfunction httpsUrl(value: unknown, label: string): string {\n const result = string(value, label);\n let parsed: URL;\n try {\n parsed = new URL(result);\n } catch (cause) {\n throw new ProtocolValidationError(\"invalid_url\", `${label} must be an HTTPS URL`, {\n cause,\n });\n }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new ProtocolValidationError(\n \"invalid_url\",\n `${label} must be an HTTPS URL without user information`,\n );\n }\n return result;\n}\n\nfunction domain(value: unknown, label: string): string {\n const result = string(value, label).replace(/\\.$/, \"\").toLowerCase();\n if (\n !/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(\n result,\n )\n ) {\n throw new ProtocolValidationError(\"invalid_domain\", `${label} must be a DNS domain`);\n }\n return result;\n}\n\nfunction scopes(value: unknown, label: string): ScopeOption {\n const source = record(value, label);\n return {\n ...source,\n scopes: array(source.scopes ?? [], `${label}.scopes`).map((item) => string(item, \"scope\")),\n } as ScopeOption;\n}\n\nfunction stringMap(value: unknown, label: string): Readonly<Record<string, string>> {\n const source = record(value, label);\n return Object.fromEntries(\n Object.entries(source).map(([key, item]) => [key, string(item, `${label}.${key}`)]),\n );\n}\n\nexport function parseDiscoveryDocument(value: unknown): DiscoveryDocument {\n const source = record(value, \"poppy.json\");\n const version = string(source.protocol_version, \"protocol_version\");\n const versionMatch = /^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$/.exec(version);\n if (!versionMatch || versionMatch[1] !== \"0\") {\n throw new ProtocolValidationError(\n \"unsupported_protocol_version\",\n \"protocol_version must be a supported major.minor version\",\n );\n }\n\n const organizationSource = record(source.organization, \"organization\");\n const organization: Organization = {\n ...organizationSource,\n name: string(organizationSource.name, \"organization.name\"),\n domain: domain(organizationSource.domain, \"organization.domain\"),\n } as Organization;\n\n let auth: AuthCapabilities | undefined;\n if (source.auth !== undefined) {\n const authSource = record(source.auth, \"auth\");\n let mediated: MediatedSignIn | undefined;\n if (authSource.mediated !== undefined) {\n const mediatedSource = record(authSource.mediated, \"auth.mediated\");\n const fields = array(mediatedSource.fields, \"auth.mediated.fields\").map(\n (item, index) => {\n const field = record(item, `auth.mediated.fields[${index}]`);\n return {\n ...field,\n name: string(field.name, `auth.mediated.fields[${index}].name`),\n label: string(field.label, `auth.mediated.fields[${index}].label`),\n secret: boolean(field.secret, `auth.mediated.fields[${index}].secret`),\n } as MediatedField;\n },\n );\n if (fields.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_mediated_sign_in\",\n \"auth.mediated.fields must not be empty\",\n );\n }\n mediated = {\n ...mediatedSource,\n ...scopes(mediatedSource, \"auth.mediated\"),\n endpoint: httpsUrl(mediatedSource.endpoint, \"auth.mediated.endpoint\"),\n fields,\n } as MediatedSignIn;\n }\n auth = {\n ...authSource,\n issuer: httpsUrl(authSource.issuer, \"auth.issuer\").replace(/\\/$/, \"\"),\n ...(authSource.direct === undefined\n ? {}\n : { direct: scopes(authSource.direct, \"auth.direct\") }),\n ...(authSource.device === undefined\n ? {}\n : { device: scopes(authSource.device, \"auth.device\") }),\n ...(mediated === undefined ? {} : { mediated }),\n ...(authSource.custom_scopes === undefined\n ? {}\n : {\n custom_scopes: stringMap(authSource.custom_scopes, \"auth.custom_scopes\"),\n }),\n } as AuthCapabilities;\n }\n\n const apis = array(source.apis ?? [], \"apis\").map((item, index) => {\n const api = record(item, `apis[${index}]`);\n return {\n ...api,\n type: string(api.type, `apis[${index}].type`),\n url: httpsUrl(api.url, `apis[${index}].url`),\n description: string(api.description, `apis[${index}].description`),\n ...(api.resource === undefined\n ? {}\n : { resource: httpsUrl(api.resource, `apis[${index}].resource`) }),\n } as ApiDescriptor;\n });\n\n let agent: AgentDescriptor | undefined;\n if (source.agent !== undefined) {\n const agentSource = record(source.agent, \"agent\");\n const protocols = array(agentSource.protocols, \"agent.protocols\").map((item, index) => {\n const protocol = record(item, `agent.protocols[${index}]`);\n return {\n ...protocol,\n type: string(protocol.type, `agent.protocols[${index}].type`),\n endpoint: httpsUrl(protocol.endpoint, `agent.protocols[${index}].endpoint`),\n ...(protocol.resource === undefined\n ? {}\n : {\n resource: httpsUrl(\n protocol.resource,\n `agent.protocols[${index}].resource`,\n ),\n }),\n } as AgentProtocol;\n });\n if (protocols.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_agent\",\n \"agent.protocols must not be empty\",\n );\n }\n agent = { ...agentSource, protocols } as AgentDescriptor;\n }\n\n let web: WebDescriptor | undefined;\n if (source.web !== undefined) {\n const webSource = record(source.web, \"web\");\n web = {\n ...webSource,\n ...(webSource.browser_session_endpoint === undefined\n ? {}\n : {\n browser_session_endpoint: httpsUrl(\n webSource.browser_session_endpoint,\n \"web.browser_session_endpoint\",\n ),\n }),\n };\n }\n\n if (!agent && apis.length === 0 && !web) {\n throw new ProtocolValidationError(\n \"missing_interface\",\n \"one of agent, apis, or web is required\",\n );\n }\n if ((agent || apis.length > 0 || web?.browser_session_endpoint) && !auth) {\n throw new ProtocolValidationError(\n \"missing_auth\",\n \"auth is required for sessions, APIs, or conversations\",\n );\n }\n\n const parsedExtensions = extensions(source.extensions, \"extensions\");\n\n return {\n ...source,\n protocol_version: version,\n organization,\n ...(auth ? { auth } : {}),\n ...(agent ? { agent } : {}),\n ...(web ? { web } : {}),\n apis,\n extensions: parsedExtensions,\n } as DiscoveryDocument;\n}\n\nexport function parseOAuthServerMetadata(value: unknown): OAuthServerMetadata {\n const source = record(value, \"OAuth metadata\");\n const poppyDomains = array(source.poppy_domains, \"poppy_domains\").map((item) =>\n domain(item, \"poppy_domains entry\"),\n );\n if (poppyDomains.length === 0) {\n throw new ProtocolValidationError(\n \"invalid_oauth_metadata\",\n \"poppy_domains must not be empty\",\n );\n }\n return {\n ...source,\n issuer: httpsUrl(source.issuer, \"issuer\").replace(/\\/$/, \"\"),\n token_endpoint: httpsUrl(source.token_endpoint, \"token_endpoint\"),\n revocation_endpoint: httpsUrl(source.revocation_endpoint, \"revocation_endpoint\"),\n ...(source.authorization_endpoint === undefined\n ? {}\n : {\n authorization_endpoint: httpsUrl(\n source.authorization_endpoint,\n \"authorization_endpoint\",\n ),\n }),\n ...(source.device_authorization_endpoint === undefined\n ? {}\n : {\n device_authorization_endpoint: httpsUrl(\n source.device_authorization_endpoint,\n \"device_authorization_endpoint\",\n ),\n }),\n poppy_domains: poppyDomains,\n } as OAuthServerMetadata;\n}\n\nexport function parseClientMetadata(value: unknown): ClientMetadata {\n const source = record(value, \"client metadata\");\n const clientId = httpsUrl(source.client_id, \"client_id\");\n const clientDomain = new URL(clientId).hostname;\n const jwksUri = httpsUrl(source.jwks_uri, \"jwks_uri\");\n const redirectUris = array(source.redirect_uris ?? [], \"redirect_uris\").map((item) =>\n httpsUrl(item, \"redirect URI\"),\n );\n if (\n new URL(jwksUri).hostname !== clientDomain ||\n redirectUris.some((uri) => new URL(uri).hostname !== clientDomain)\n ) {\n throw new ProtocolValidationError(\n \"client_domain_mismatch\",\n \"jwks_uri and redirect_uris must use the client_id domain\",\n );\n }\n const authMethod = source.token_endpoint_auth_method ?? \"private_key_jwt\";\n if (authMethod !== \"private_key_jwt\") {\n throw new ProtocolValidationError(\n \"invalid_client_auth_method\",\n \"token_endpoint_auth_method must be private_key_jwt\",\n );\n }\n return {\n ...source,\n client_id: clientId,\n client_name: string(source.client_name, \"client_name\"),\n ...(source.logo_uri === undefined\n ? {}\n : { logo_uri: httpsUrl(source.logo_uri, \"logo_uri\") }),\n jwks_uri: jwksUri,\n redirect_uris: redirectUris,\n token_endpoint_auth_method: authMethod,\n extensions: extensions(source.extensions, \"extensions\"),\n } as ClientMetadata;\n}\n\nconst privateJwkMembers = new Set([\"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\", \"oth\", \"k\"]);\n\nfunction parseJsonWebKey(value: unknown): JsonWebKey {\n const source = record(value, \"JWKS key\");\n if (Object.keys(source).some((key) => privateJwkMembers.has(key))) {\n throw new ProtocolValidationError(\n \"private_jwk\",\n \"JWKS keys must not contain private or symmetric key material\",\n );\n }\n const kty = oneOf(source.kty, [\"EC\", \"RSA\"] as const, \"JWKS key kty\");\n const kid = source.kid === undefined ? undefined : string(source.kid, \"JWKS key kid\");\n const use =\n source.use === undefined ? undefined : oneOf(source.use, [\"sig\"] as const, \"use\");\n const alg =\n source.alg === undefined\n ? undefined\n : oneOf(source.alg, [\"ES256\", \"RS256\"] as const, \"alg\");\n\n if (kty === \"EC\") {\n const crv = oneOf(source.crv, [\"P-256\"] as const, \"EC key crv\");\n const x = string(source.x, \"EC key x\");\n const y = string(source.y, \"EC key y\");\n if (alg !== undefined && alg !== \"ES256\") {\n throw new ProtocolValidationError(\n \"invalid_jwk_algorithm\",\n \"P-256 signing keys may advertise only ES256\",\n );\n }\n return {\n ...source,\n kty,\n ...(kid === undefined ? {} : { kid }),\n ...(use === undefined ? {} : { use }),\n ...(alg === undefined ? {} : { alg }),\n crv,\n x,\n y,\n } as JsonWebKey;\n }\n\n const n = string(source.n, \"RSA key n\");\n const e = string(source.e, \"RSA key e\");\n if (alg !== undefined && alg !== \"RS256\") {\n throw new ProtocolValidationError(\n \"invalid_jwk_algorithm\",\n \"RSA signing keys may advertise only RS256\",\n );\n }\n return {\n ...source,\n kty,\n ...(kid === undefined ? {} : { kid }),\n ...(use === undefined ? {} : { use }),\n ...(alg === undefined ? {} : { alg }),\n n,\n e,\n } as JsonWebKey;\n}\n\nexport function parseJsonWebKeySet(value: unknown): JsonWebKeySet {\n const source = record(value, \"JWKS\");\n const keys = array(source.keys, \"JWKS keys\").map(parseJsonWebKey);\n if (keys.length === 0) {\n throw new ProtocolValidationError(\"invalid_jwks\", \"JWKS keys must not be empty\");\n }\n return { ...source, keys } as JsonWebKeySet;\n}\n\nexport function parseOperation(value: unknown): Operation {\n const source = record(value, \"operation\");\n const state = oneOf(\n source.state,\n [\"proposed\", \"in_progress\", \"succeeded\", \"failed\", \"cancelled\", \"expired\"] as const,\n \"operation.state\",\n );\n const revision = integer(source.revision, \"operation.revision\");\n let confirmation: OperationConfirmation | null = null;\n if (source.confirmation !== undefined && source.confirmation !== null) {\n const item = record(source.confirmation, \"operation.confirmation\");\n confirmation = {\n ...item,\n revision: integer(item.revision, \"operation.confirmation.revision\"),\n approved_by: oneOf(\n item.approved_by,\n [\"user\", \"standing_permission\"] as const,\n \"operation.confirmation.approved_by\",\n ),\n confirmed_at: timestamp(item.confirmed_at, \"operation.confirmation.confirmed_at\"),\n } as OperationConfirmation;\n }\n let result: OperationResult | null = null;\n if (source.result !== undefined && source.result !== null) {\n const item = record(source.result, \"operation.result\");\n result = {\n ...item,\n summary: string(item.summary, \"operation.result.summary\"),\n ...(item.data === undefined\n ? {}\n : { data: record(item.data, \"operation.result.data\") }),\n } as OperationResult;\n }\n const expiresAt =\n source.expires_at === undefined\n ? undefined\n : timestamp(source.expires_at, \"operation.expires_at\");\n if (state === \"proposed\" && expiresAt === undefined) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a proposed operation requires expires_at\",\n );\n }\n if (state === \"proposed\" && confirmation !== null) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a proposed operation cannot be confirmed\",\n );\n }\n if (confirmation !== null && confirmation.revision !== revision) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"confirmation must name the current revision\",\n );\n }\n if ([\"succeeded\", \"failed\", \"cancelled\", \"expired\"].includes(state) && result === null) {\n throw new ProtocolValidationError(\n \"invalid_operation\",\n \"a final operation requires a result\",\n );\n }\n return {\n ...source,\n operation_id: identifier(source.operation_id, \"operation.operation_id\"),\n revision,\n state,\n summary: string(source.summary, \"operation.summary\"),\n ...(source.terms === undefined\n ? {}\n : { terms: record(source.terms, \"operation.terms\") }),\n ...(expiresAt === undefined ? {} : { expires_at: expiresAt }),\n user_approval_required:\n source.user_approval_required === undefined\n ? false\n : boolean(source.user_approval_required, \"operation.user_approval_required\"),\n ...(source.url === undefined ? {} : { url: httpsUrl(source.url, \"operation.url\") }),\n confirmation,\n result,\n } as Operation;\n}\n\nexport function parseMessage(value: unknown): Message {\n const source = record(value, \"message\");\n const text = source.text === undefined ? undefined : string(source.text, \"message.text\");\n const data = optionalRecord(source.data, \"message.data\");\n const context = optionalRecord(source.context, \"message.context\");\n const operation =\n source.operation === undefined ? undefined : parseOperation(source.operation);\n if (text === undefined && data === undefined && context === undefined && operation === undefined) {\n throw new ProtocolValidationError(\n \"invalid_message\",\n \"a message requires text, data, context, or operation\",\n );\n }\n return {\n ...source,\n id: identifier(source.id, \"message.id\"),\n sender: oneOf(source.sender, [\"agent\", \"human\"] as const, \"message.sender\"),\n ...(source.role === undefined\n ? {}\n : { role: oneOf(source.role, [\"user\", \"company\"] as const, \"message.role\") }),\n ...(text === undefined ? {} : { text }),\n ...(data === undefined ? {} : { data }),\n ...(context === undefined ? {} : { context }),\n ...(operation === undefined ? {} : { operation }),\n } as Message;\n}\n\nexport function parseConversationEvent(value: unknown): ConversationEvent {\n const source = record(value, \"conversation event\");\n const type = string(source.type, \"conversation event.type\");\n const parsed: ConversationEvent = {\n ...source,\n id: identifier(source.id, \"conversation event.id\"),\n type,\n created_at: timestamp(source.created_at, \"conversation event.created_at\"),\n ...(source.message === undefined ? {} : { message: parseMessage(source.message) }),\n ...(source.status === undefined\n ? {}\n : {\n status: oneOf(\n source.status,\n [\"working\", \"idle\", \"queued\", \"closed\"] as const,\n \"conversation event.status\",\n ),\n }),\n ...(source.responder === undefined\n ? {}\n : {\n responder: oneOf(\n source.responder,\n [\"agent\", \"human\"] as const,\n \"conversation event.responder\",\n ),\n }),\n ...(source.error === undefined\n ? {}\n : {\n error: oneOf(\n source.error,\n [\"sign_in_required\", \"insufficient_scope\"] as const,\n \"conversation event.error\",\n ),\n }),\n ...(source.scope === undefined ? {} : { scope: string(source.scope, \"conversation event.scope\") }),\n ...(source.reason === undefined\n ? {}\n : { reason: string(source.reason, \"conversation event.reason\") }),\n ...(source.conversation_id === undefined\n ? {}\n : {\n conversation_id: identifier(\n source.conversation_id,\n \"conversation event.conversation_id\",\n ),\n }),\n } as ConversationEvent;\n if (type === \"message\" && parsed.message === undefined) {\n throw new ProtocolValidationError(\"invalid_event\", \"a message event requires message\");\n }\n if (type === \"state\" && (parsed.status === undefined || parsed.responder === undefined)) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a state event requires status and responder\",\n );\n }\n if (type === \"authorization\") {\n if (parsed.error === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"an authorization event requires error\",\n );\n }\n if (parsed.error === \"insufficient_scope\" && parsed.scope === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"insufficient_scope requires scope\",\n );\n }\n }\n if (type === \"user_requested\" && parsed.reason === undefined) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a user_requested event requires reason\",\n );\n }\n if (\n (type === \"direct_opened\" || type === \"direct_closed\") &&\n parsed.conversation_id === undefined\n ) {\n throw new ProtocolValidationError(\n \"invalid_event\",\n \"a direct conversation event requires conversation_id\",\n );\n }\n return parsed;\n}\n\nexport function parseConversationEventPage(value: unknown): ConversationEventPage {\n const source = record(value, \"conversation event page\");\n return {\n ...source,\n conversation_id: identifier(source.conversation_id, \"conversation_id\"),\n events: array(source.events, \"events\").map(parseConversationEvent),\n cursor: identifier(source.cursor, \"cursor\"),\n has_more: boolean(source.has_more, \"has_more\"),\n status: oneOf(\n source.status,\n [\"working\", \"idle\", \"queued\", \"closed\"] as const,\n \"status\",\n ),\n responder: oneOf(source.responder, [\"agent\", \"human\"] as const, \"responder\"),\n } as ConversationEventPage;\n}\n", "import { DiscoveryError, ProtocolValidationError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport {\n parseDiscoveryDocument,\n parseOAuthServerMetadata,\n type DiscoveredCompany,\n} from \"./models.js\";\nimport {\n DiscoveryTransports,\n UrlSafetyPolicies,\n buildPapReactor,\n firstContribution,\n type DiscoveryTransport,\n type UrlSafetyPolicy,\n} from \"./reactor.js\";\nimport type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nexport interface DiscoveryOptions {\n readonly reactor?: ReactorPlatformView;\n readonly fetch?: typeof globalThis.fetch;\n readonly assertSafeUrl?: (url: URL) => void | Promise<void>;\n readonly maxRedirects?: number;\n readonly maxResponseBytes?: number;\n readonly signal?: AbortSignal;\n}\n\nfunction normalizeDomain(domain: string): string {\n const value = domain.replace(/\\.$/, \"\").toLowerCase();\n if (!value || value.includes(\"://\") || value.includes(\"/\")) {\n throw new DiscoveryError(\"invalid_domain\", \"Discovery requires a DNS domain name\");\n }\n return value;\n}\n\nfunction metadataUrl(issuer: string): URL {\n const parsed = new URL(issuer);\n const path = parsed.pathname.replace(/\\/$/, \"\");\n parsed.pathname = `/.well-known/oauth-authorization-server${path}`;\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed;\n}\n\nasync function readJson(\n initialUrl: URL,\n transport: DiscoveryTransport,\n urlPolicy: UrlSafetyPolicy,\n maxRedirects: number,\n maxResponseBytes: number,\n signal?: AbortSignal,\n): Promise<{ value: unknown; finalUrl: URL }> {\n let current = initialUrl;\n for (let redirects = 0; redirects <= maxRedirects; redirects += 1) {\n await urlPolicy.assertSafe(current);\n let response: Response;\n try {\n response = await transport.fetch(current, {\n headers: { Accept: \"application/json\" },\n redirect: \"manual\",\n credentials: \"omit\",\n ...(signal === undefined ? {} : { signal }),\n });\n } catch (cause) {\n throw new DiscoveryError(\"request_failed\", \"Discovery request failed\", { cause });\n }\n\n if (response.status >= 300 && response.status < 400) {\n if (redirects === maxRedirects) {\n throw new DiscoveryError(\"too_many_redirects\", \"Discovery exceeded redirect limit\");\n }\n const location = response.headers.get(\"location\");\n if (!location) {\n throw new DiscoveryError(\"invalid_redirect\", \"Discovery redirect has no location\");\n }\n current = new URL(location, current);\n continue;\n }\n if (!response.ok) {\n throw new DiscoveryError(\n \"http_error\",\n \"Discovery endpoint returned an unsuccessful status\",\n { statusCode: response.status },\n );\n }\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\" && contentType !== \"application/poppy+json\") {\n throw new DiscoveryError(\"invalid_content_type\", \"Discovery response must be JSON\");\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > maxResponseBytes) {\n throw new DiscoveryError(\"response_too_large\", \"Discovery response exceeds size limit\");\n }\n try {\n return { value: parseJsonStrict(body), finalUrl: current };\n } catch (cause) {\n if (cause instanceof ProtocolValidationError) throw cause;\n throw new ProtocolValidationError(\"invalid_json\", \"Response is not valid JSON\", {\n cause,\n });\n }\n }\n throw new DiscoveryError(\"too_many_redirects\", \"Discovery exceeded redirect limit\");\n}\n\nexport async function discoverCompany(\n domain: string,\n options: DiscoveryOptions = {},\n): Promise<DiscoveredCompany> {\n const requestedDomain = normalizeDomain(domain);\n const reactor = options.reactor ?? buildPapReactor(options);\n const transport = firstContribution<DiscoveryTransport>(\n reactor,\n DiscoveryTransports,\n \"discovery transport\",\n );\n const urlPolicy = firstContribution<UrlSafetyPolicy>(\n reactor,\n UrlSafetyPolicies,\n \"URL safety policy\",\n );\n const maxRedirects = options.maxRedirects ?? 3;\n const maxBytes = options.maxResponseBytes ?? 100 * 1024;\n const discovery = await readJson(\n new URL(`https://${requestedDomain}/.well-known/poppy.json`),\n transport,\n urlPolicy,\n maxRedirects,\n maxBytes,\n options.signal,\n );\n const document = parseDiscoveryDocument(discovery.value);\n if (\n document.organization.domain.replace(/^www\\./, \"\") !==\n requestedDomain.replace(/^www\\./, \"\")\n ) {\n throw new DiscoveryError(\n \"organization_domain_mismatch\",\n \"Discovery organization domain does not match the requested domain\",\n );\n }\n if (!document.auth) {\n return { discoveryUrl: discovery.finalUrl.toString(), document };\n }\n\n const metadataResponse = await readJson(\n metadataUrl(document.auth.issuer),\n transport,\n urlPolicy,\n maxRedirects,\n maxBytes,\n options.signal,\n );\n const oauthMetadata = parseOAuthServerMetadata(metadataResponse.value);\n if (oauthMetadata.issuer !== document.auth.issuer) {\n throw new DiscoveryError(\"issuer_mismatch\", \"OAuth metadata issuer does not match auth.issuer\");\n }\n if (!oauthMetadata.poppy_domains.includes(document.organization.domain)) {\n throw new DiscoveryError(\n \"domain_not_authorized\",\n \"OAuth metadata does not authorize the discovered company domain\",\n );\n }\n return {\n discoveryUrl: discovery.finalUrl.toString(),\n document,\n oauthMetadata,\n };\n}\n", "import type { ReactorPlatformView } from \"@datalayer/reactor\";\n\nimport { IdentityError, ProtocolValidationError } from \"./errors.js\";\nimport { parseJsonStrict } from \"./json.js\";\nimport {\n parseClientMetadata,\n parseJsonWebKeySet,\n type ClientMetadata,\n type JsonWebKeySet,\n} from \"./models.js\";\nimport {\n DiscoveryTransports,\n UrlSafetyPolicies,\n buildPapReactor,\n firstContribution,\n type DiscoveryTransport,\n type PapCoreOptions,\n type UrlSafetyPolicy,\n} from \"./reactor.js\";\n\nexport interface AgentIdentityClientOptions extends PapCoreOptions {\n readonly reactor?: ReactorPlatformView;\n readonly maxJwksRedirects?: number;\n readonly maxResponseBytes?: number;\n}\n\nexport interface IdentityRequestOptions {\n readonly signal?: AbortSignal;\n}\n\n/** Safely retrieve and bind a personal agent's public identity documents. */\nexport class AgentIdentityClient {\n readonly #reactor: ReactorPlatformView;\n readonly #maxJwksRedirects: number;\n readonly #maxResponseBytes: number;\n\n constructor(options: AgentIdentityClientOptions = {}) {\n const maxRedirects = options.maxJwksRedirects ?? 3;\n const maxBytes = options.maxResponseBytes ?? 100 * 1024;\n if (!Number.isInteger(maxRedirects) || maxRedirects < 0) {\n throw new RangeError(\"maxJwksRedirects must be a non-negative integer\");\n }\n if (!Number.isInteger(maxBytes) || maxBytes <= 0) {\n throw new RangeError(\"maxResponseBytes must be a positive integer\");\n }\n this.#reactor = options.reactor ?? buildPapReactor(options);\n this.#maxJwksRedirects = maxRedirects;\n this.#maxResponseBytes = maxBytes;\n }\n\n async fetchMetadata(\n clientId: string,\n options: IdentityRequestOptions = {},\n ): Promise<ClientMetadata> {\n const requested = this.#clientIdUrl(clientId);\n const value = await this.#readJson(requested, 0, undefined, options.signal);\n let metadata: ClientMetadata;\n try {\n metadata = parseClientMetadata(value);\n } catch (cause) {\n throw new ProtocolValidationError(\n \"invalid_client_metadata\",\n \"Client metadata failed protocol validation\",\n { cause },\n );\n }\n if (metadata.client_id !== requested.toString()) {\n throw new IdentityError(\n \"client_id_mismatch\",\n \"Client metadata client_id does not match the URL that was fetched\",\n );\n }\n return metadata;\n }\n\n async fetchJwks(\n clientId: string,\n options: IdentityRequestOptions = {},\n ): Promise<JsonWebKeySet> {\n const metadata = await this.fetchMetadata(clientId, options);\n const jwksUrl = new URL(metadata.jwks_uri);\n const value = await this.#readJson(\n jwksUrl,\n this.#maxJwksRedirects,\n new URL(metadata.client_id).hostname,\n options.signal,\n );\n try {\n return parseJsonWebKeySet(value);\n } catch (cause) {\n throw new ProtocolValidationError(\n \"invalid_jwks\",\n \"Personal-agent JWKS failed protocol validation\",\n { cause },\n );\n }\n }\n\n #clientIdUrl(clientId: string): URL {\n let requested: URL;\n try {\n requested = new URL(clientId);\n } catch (cause) {\n throw new IdentityError(\n \"invalid_client_id\",\n \"client_id must be a valid HTTPS URL\",\n { cause },\n );\n }\n if (requested.hash) {\n throw new IdentityError(\"invalid_client_id\", \"client_id must not contain a fragment\");\n }\n return requested;\n }\n\n async #readJson(\n initialUrl: URL,\n maxRedirects: number,\n requiredHost: string | undefined,\n signal: AbortSignal | undefined,\n ): Promise<unknown> {\n const transport = firstContribution(\n this.#reactor,\n DiscoveryTransports,\n \"metadata transport\",\n );\n const policy = firstContribution(\n this.#reactor,\n UrlSafetyPolicies,\n \"URL safety policy\",\n );\n let current = initialUrl;\n\n for (let redirects = 0; redirects <= maxRedirects; redirects += 1) {\n if (requiredHost !== undefined && current.hostname !== requiredHost) {\n throw new IdentityError(\"jwks_domain_mismatch\", \"JWKS redirect changed agent domain\");\n }\n await policy.assertSafe(current);\n let response: Response;\n try {\n response = await transport.fetch(current, {\n headers: { Accept: \"application/json\" },\n redirect: \"manual\",\n credentials: \"omit\",\n ...(signal === undefined ? {} : { signal }),\n });\n } catch (cause) {\n throw new IdentityError(\"request_failed\", \"Agent identity request failed\", { cause });\n }\n if (response.status >= 300 && response.status < 400) {\n if (redirects === maxRedirects) {\n const code = maxRedirects === 0 ? \"metadata_redirect\" : \"too_many_redirects\";\n throw new IdentityError(code, \"Agent identity endpoint exceeded redirect policy\");\n }\n const location = response.headers.get(\"location\");\n if (!location) {\n throw new IdentityError(\n \"invalid_redirect\",\n \"Agent identity redirect has no location\",\n );\n }\n current = new URL(location, current);\n continue;\n }\n if (!response.ok) {\n throw new IdentityError(\n \"http_error\",\n \"Agent identity endpoint returned an unsuccessful status\",\n { statusCode: response.status },\n );\n }\n const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n if (contentType !== \"application/json\" && contentType !== \"application/jwk-set+json\") {\n throw new IdentityError(\"invalid_content_type\", \"Agent identity response must be JSON\");\n }\n const body = await response.text();\n if (new TextEncoder().encode(body).byteLength > this.#maxResponseBytes) {\n throw new IdentityError(\n \"response_too_large\",\n \"Agent identity response exceeds size limit\",\n );\n }\n return parseJsonStrict(body);\n }\n throw new IdentityError(\"too_many_redirects\", \"Agent identity endpoint exceeded redirect policy\");\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["message", "string", "message", "encode", "extensions", "algorithm", "algorithm", "encode", "entropy", "message", "extensions", "record", "options", "base64Url", "randomBytes", "defaultRandomBytes", "randomBytes", "base64Url", "httpsUrl", "scopes", "httpsUrl", "privateJwkMembers", "domain", "location", "policy", "location"]
|
|
7
7
|
}
|