cf-nix-cache 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/rpc.ts","../../src/features/auth/authorization.ts","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/buffer_utils.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/crypto_key.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/invalid_key_input.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/util/errors.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/is_key_like.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/base64.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/util/base64url.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/type_checks.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/helpers.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jwk_to_key.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/key.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/key_descriptor.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jwe_algorithms.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/options.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/signing.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jws_algorithms.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jws_verify.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jwt_claims_set.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/jwt/verify.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/jws_sign.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/jws/flattened/sign.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/jws/compact/sign.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/jwt/sign.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/lib/key_algorithm.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/jwks/local.js","../../node_modules/.pnpm/jose@6.2.8/node_modules/jose/dist/webapi/key/import.js","../../src/features/auth/errors.ts","../../src/features/auth/credentials.ts","../../src/types.ts","../../src/generated/json-contracts.ts","../../src/features/domain/errors.ts","../../src/features/domain/identifiers.ts","../../src/features/domain/uploads.ts","../../src/features/auth/jwt.ts","../../src/features/auth/authentication.ts","../../src/features/domain/cursors.ts","../../src/features/runtime/errors.ts","../../src/features/runtime/cache.ts","../../src/features/runtime/tokens.ts","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/compose.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/request/constants.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/utils/buffer.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/utils/body.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/utils/url.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/request.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/utils/html.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/context.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/utils/constants.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/hono-base.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/reg-exp-router/matcher.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/reg-exp-router/node.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/reg-exp-router/trie.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/reg-exp-router/router.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/smart-router/router.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/trie-router/node.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/router/trie-router/router.js","../../node_modules/.pnpm/hono@4.13.1/node_modules/hono/dist/hono.js","../../src/features/cache/application.ts","../../src/features/nix/range.ts","../../src/features/runtime/error-handler.ts","../../src/features/workflows/delete-cache.ts","../../src/features/workflows/enqueue.ts","../../src/features/workflows/process-upload.ts","../../src/features/control/helpers.ts","../../src/features/control/caches.ts","../../src/features/cache/adapters-rpc.ts","../../src/features/cache/adapters.ts","../../src/features/control/paths.ts","../../src/features/audit/shard.ts","../../src/features/control/tokens.ts","../../src/features/control/routes.ts","../../src/features/nix/object.ts","../../src/features/nix/routes.ts","../../src/features/uploads/access.ts","../../src/features/uploads/routes.ts","../../src/features/runtime/app.ts","../../src/infrastructure/durable/shared.ts","../../src/features/cache/durable/helpers.ts","../../src/features/cache/durable/audit.ts","../../src/features/cache/durable/quota.ts","../../src/features/cache/durable/state.ts","../../src/features/cache/durable/uploads.ts","../../src/features/cache/durable/coordinator.ts","../../src/features/cache/durable/index-shard.ts","../../src/features/cache/durable/system.ts","../../src/features/auth/durable/audit.ts","../../src/features/auth/durable/model.ts","../../src/features/auth/durable/issuance.ts","../../src/features/auth/durable/management.ts","../../src/features/auth/durable/signer.ts","../../src/features/auth/durable/catalog.ts","../../src/features/audit/durable/log.ts","../../src/features/uploads/durable/model.ts","../../src/features/uploads/durable/multipart.ts","../../src/features/nix/narinfo.ts","../../src/features/uploads/durable/publication.ts","../../src/features/uploads/durable/storage.ts","../../src/features/uploads/durable/job.ts","../../node_modules/.pnpm/@cloudflare+containers@0.3.7/node_modules/@cloudflare/containers/dist/lib/helpers.js","../../node_modules/.pnpm/@cloudflare+containers@0.3.7/node_modules/@cloudflare/containers/dist/lib/container.js","../../src/features/processing/durable/container.ts"],"sourcesContent":["interface RpcFailure {\n code: string;\n message: string;\n status: number;\n}\n\nexport type RpcResult<T> =\n { ok: true; value: T } | { ok: false; error: RpcFailure };\n\nexport function namedStub<T extends Rpc.DurableObjectBranded>(\n namespace: DurableObjectNamespace<T> | undefined,\n name: string,\n): DurableObjectStub<T> {\n if (!namespace)\n throw new Error(`missing durable object namespace for ${name}`);\n return namespace.getByName(name);\n}\n\nexport function idStub<T extends Rpc.DurableObjectBranded>(\n namespace: DurableObjectNamespace<T> | undefined,\n id: DurableObjectId | string,\n): DurableObjectStub<T> {\n if (!namespace) throw new Error('missing durable object namespace');\n return namespace.get(\n typeof id === 'string' ? namespace.idFromString(id) : id,\n );\n}\n","import type { Grant, Role, TokenClaims } from '../../types';\n\nfunction permits(grant: Role, required: Role): boolean {\n return (\n grant === 'admin' ||\n grant === required ||\n (grant === 'push' && required === 'pull')\n );\n}\n\nexport function permitsCache(\n claims: TokenClaims,\n cache: string,\n required: Role,\n): boolean {\n return claims.grants.some(\n (grant) =>\n (grant.cache === cache || grant.cache === '*') &&\n permits(grant.role, required),\n );\n}\n\n/** Every delegated grant must be covered by one parent admin grant. */\nexport function canDelegate(\n parent: TokenClaims,\n grants: Grant[],\n expiresAt: number,\n): boolean {\n return (\n expiresAt <= parent.exp &&\n grants.length > 0 &&\n grants.every((child) =>\n parent.grants.some(\n (grant) =>\n grant.role === 'admin' &&\n (grant.cache === '*' || grant.cache === child.cache),\n ),\n )\n );\n}\n\nexport function permitsAny(claims: TokenClaims, required: Role): boolean {\n return claims.grants.some((grant) => permits(grant.role, required));\n}\n\n/** Global control-plane operations require an explicit wildcard grant. */\nexport function permitsGlobal(claims: TokenClaims, required: Role): boolean {\n return claims.grants.some(\n (grant) => grant.cache === '*' && permits(grant.role, required),\n );\n}\n","export const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nexport const strictDecoder = new TextDecoder('utf-8', { fatal: true });\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\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 }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function encode(string) {\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 }\n bytes[i] = code;\n }\n return bytes;\n}\n","const unusable = (name, prop = 'algorithm.name') => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\nexport function 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 }\n}\nexport function 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 }\n}\nexport function checkCryptoKey(key, expected, usage) {\n const algorithm = key.algorithm;\n if (algorithm.name !== expected.name) {\n throw unusable(expected.name);\n }\n if (expected.hash && algorithm.hash?.name !== expected.hash) {\n throw unusable(expected.hash, 'algorithm.hash');\n }\n if (expected.namedCurve && algorithm.namedCurve !== expected.namedCurve) {\n throw unusable(expected.namedCurve, 'algorithm.namedCurve');\n }\n if (expected.length !== undefined && algorithm.length !== expected.length) {\n throw unusable(expected.length, 'algorithm.length');\n }\n checkUsage(key, usage);\n}\n","function message(msg, actual, ...types) {\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor?.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nexport const invalidKeyInput = (actual, ...types) => message('Key must be ', actual, ...types);\nexport const withAlg = (alg, actual, ...types) => message(`Key for the ${alg} algorithm must be `, actual, ...types);\n","export class JOSEError extends Error {\n static code = 'ERR_JOSE_GENERIC';\n code = 'ERR_JOSE_GENERIC';\n constructor(message, options) {\n super(message, options);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class 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 } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class 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 } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n static code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n}\nexport class JOSENotSupported extends JOSEError {\n static code = 'ERR_JOSE_NOT_SUPPORTED';\n code = 'ERR_JOSE_NOT_SUPPORTED';\n}\nexport class 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}\nexport class JWEInvalid extends JOSEError {\n static code = 'ERR_JWE_INVALID';\n code = 'ERR_JWE_INVALID';\n}\nexport class JWSInvalid extends JOSEError {\n static code = 'ERR_JWS_INVALID';\n code = 'ERR_JWS_INVALID';\n}\nexport class JWTInvalid extends JOSEError {\n static code = 'ERR_JWT_INVALID';\n code = 'ERR_JWT_INVALID';\n}\nexport class JWKInvalid extends JOSEError {\n static code = 'ERR_JWK_INVALID';\n code = 'ERR_JWK_INVALID';\n}\nexport class JWKSInvalid extends JOSEError {\n static code = 'ERR_JWKS_INVALID';\n code = 'ERR_JWKS_INVALID';\n}\nexport class 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}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator] = async function* () { };\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}\nexport class 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}\nexport class 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}\n","export function assertCryptoKey(key) {\n if (!isCryptoKey(key)) {\n throw new Error('CryptoKey instance expected');\n }\n}\nexport const isCryptoKey = (key) => {\n if (key?.[Symbol.toStringTag] === 'CryptoKey')\n return true;\n try {\n return key instanceof CryptoKey;\n }\n catch {\n return false;\n }\n};\nexport const isKeyObject = (key) => key?.[Symbol.toStringTag] === 'KeyObject';\nexport const isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);\n","export function encodeBase64(input) {\n if (Uint8Array.prototype.toBase64) {\n return input.toBase64();\n }\n const CHUNK_SIZE = 0x8000;\n const 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 }\n return btoa(arr.join(''));\n}\nexport function decodeBase64(encoded) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(encoded);\n }\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","import { encoder, decoder } from '../lib/buffer_utils.js';\nimport { encodeBase64, decodeBase64 } from '../lib/base64.js';\nconst invalid = 'The input to be decoded is not correctly encoded.';\nexport function decode(input) {\n if (Uint8Array.fromBase64) {\n try {\n return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n alphabet: 'base64url',\n });\n }\n catch (cause) {\n throw new TypeError(invalid, { cause });\n }\n }\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n if (encoded.includes('+') || encoded.includes('/')) {\n throw new TypeError(invalid);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError(invalid);\n }\n}\nexport function encode(input) {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n if (Uint8Array.prototype.toBase64) {\n return unencoded.toBase64({ alphabet: 'base64url', omitPadding: true });\n }\n return encodeBase64(unencoded).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","export function isObject(input) {\n if (typeof input !== 'object' ||\n input === null ||\n Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(input);\n if (prototype === null) {\n return true;\n }\n let proto = prototype;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return prototype === proto;\n}\nexport function isDisjoint(...headers) {\n const parameters = new Set();\n for (const header of headers) {\n if (!header)\n continue;\n for (const parameter of Object.keys(header)) {\n if (parameters.has(parameter)) {\n return false;\n }\n parameters.add(parameter);\n }\n }\n return true;\n}\nexport const isJWK = (key) => isObject(key) && typeof key.kty === 'string';\nexport const isPrivateJWK = (key) => key.kty !== 'oct' &&\n ((key.kty === 'AKP' && typeof key.priv === 'string') || typeof key.d === 'string');\nexport const isPublicJWK = (key) => key.kty !== 'oct' && key.d === undefined && key.priv === undefined;\nexport const isSecretJWK = (key) => key.kty === 'oct' && typeof key.k === 'string';\n","import { decode } from '../util/base64url.js';\nimport { encode, strictDecoder } from './buffer_utils.js';\nimport { isObject } from './type_checks.js';\nexport const unprotected = Symbol();\nexport function assertNotSet(value, name) {\n if (value) {\n throw new TypeError(`${name} can only be called once`);\n }\n}\nexport function decodeBase64url(value, label, ErrorClass) {\n try {\n return decode(value);\n }\n catch {\n throw new ErrorClass(`Failed to base64url decode the ${label}`);\n }\n}\nexport function encodeBase64url(value, label, ErrorClass) {\n try {\n return encode(value);\n }\n catch {\n throw new ErrorClass(`The ${label} is not a valid base64url string`);\n }\n}\nexport async function digest(algorithm, data) {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n}\nexport function parseJoseHeader(b64, ErrorClass, message) {\n let parsed;\n try {\n parsed = JSON.parse(strictDecoder.decode(decode(b64)));\n }\n catch {\n throw new ErrorClass(message);\n }\n if (!isObject(parsed)) {\n throw new ErrorClass(message);\n }\n return parsed;\n}\n","import { JOSENotSupported } from '../util/errors.js';\nexport async function jwkToKey(entry, jwk) {\n if (jwk.kty === 'RSA' && 'oth' in jwk && jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n if (!entry.kty.includes(jwk.kty)) {\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n const algorithm = entry.resolve?.({ kty: jwk.kty, crv: jwk.crv }) ?? entry.subtle;\n const isPrivate = !!(jwk.d || jwk.priv);\n const keyData = { ...jwk };\n if (keyData.kty !== 'AKP') {\n delete keyData.alg;\n }\n delete keyData.use;\n return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);\n}\n","import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport { isKeyLike, isCryptoKey } from './is_key_like.js';\nimport * as jwk from './type_checks.js';\nimport { decode } from '../util/base64url.js';\nimport { jwkToKey } from './jwk_to_key.js';\nconst tag = (key) => key[Symbol.toStringTag];\nconst jwkMatchesOp = (entry, key, usage) => {\n const { alg } = entry;\n if (key.use !== undefined) {\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 }\n if (key.alg !== undefined && key.alg !== alg) {\n throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n }\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 }\n};\nexport function checkKeyType(entry, key, usage) {\n const { alg, secret } = entry;\n const privateKey = usage === 'decrypt' || usage === 'sign';\n if (secret && key instanceof Uint8Array)\n return [BYTES, key];\n if (jwk.isJWK(key)) {\n if (secret ? !jwk.isSecretJWK(key) : !(privateKey ? jwk.isPrivateJWK(key) : jwk.isPublicJWK(key))) {\n throw new TypeError(secret\n ? `JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`\n : `JSON Web Key for this operation must be a ${privateKey ? 'private' : 'public'} JWK`);\n }\n jwkMatchesOp(entry, key, usage);\n return [JWK, key];\n }\n if (!isKeyLike(key)) {\n throw new TypeError(secret\n ? invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array')\n : invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));\n }\n if (secret) {\n if (key.type !== 'secret') {\n throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n }\n }\n else {\n if (key.type === 'secret') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n const expectedType = privateKey ? 'private' : 'public';\n if ((key.type === 'public' || key.type === 'private') && key.type !== expectedType) {\n const operation = usage === 'sign'\n ? 'signing'\n : usage === 'verify'\n ? 'verifying'\n : `${usage.slice(0, -1)}tion`;\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm ${operation} must be of type \"${expectedType}\"`);\n }\n }\n return isCryptoKey(key) ? [CRYPTO, key] : [KEYOBJECT, key];\n}\nconst BYTES = 0;\nconst CRYPTO = 1;\nconst KEYOBJECT = 2;\nconst JWK = 3;\nlet cache;\nconst nist = {\n __proto__: null,\n prime256v1: 'P-256',\n secp384r1: 'P-384',\n secp521r1: 'P-521',\n};\nfunction cached(key, alg, value) {\n cache ||= new WeakMap();\n const entry = cache.get(key);\n if (value) {\n if (entry) {\n entry[alg] = value;\n }\n else {\n cache.set(key, { __proto__: null, [alg]: value });\n }\n }\n return value ?? entry?.[alg];\n}\nconst handleJWK = async (key, jwk, entry) => cached(key, entry.alg) ??\n cached(key, entry.alg, await jwkToKey(entry, { ...jwk, alg: entry.alg }));\nconst handleKeyObject = (keyObject, entry) => {\n const hit = cached(keyObject, entry.alg);\n if (hit)\n return hit;\n const isPublic = keyObject.type === 'public';\n const usages = entry.usages[isPublic ? 0 : 1];\n const { asymmetricKeyType } = keyObject;\n const crv = nist[keyObject.asymmetricKeyDetails?.namedCurve];\n const params = entry.resolve?.({ crv, asymmetricKeyType }) ?? entry.subtle;\n return cached(keyObject, entry.alg, keyObject.toCryptoKey(params, isPublic, usages));\n};\nexport async function prepareKey(entry, key, usage) {\n const tagged = checkKeyType(entry, key, usage);\n switch (tagged[0]) {\n case BYTES:\n case CRYPTO:\n return tagged[1];\n case JWK: {\n const key = tagged[1];\n if (key.k) {\n return decode(key.k);\n }\n if (!Object.isFrozen(key)) {\n const { key_ops } = key;\n if (Array.isArray(key_ops))\n Object.freeze(key_ops);\n Object.freeze(key);\n }\n return handleJWK(key, key, entry);\n }\n case KEYOBJECT: {\n const keyObject = tagged[1];\n if (keyObject.type === 'secret') {\n return keyObject.export();\n }\n if ('toCryptoKey' in keyObject && typeof keyObject.toCryptoKey === 'function') {\n return handleKeyObject(keyObject, entry);\n }\n return handleJWK(keyObject, keyObject.export({ format: 'jwk' }), entry);\n }\n }\n}\n","export function table(entries) {\n const out = { __proto__: null };\n for (const alg in entries) {\n out[alg] = { ...entries[alg], alg };\n }\n return out;\n}\n","import { JOSENotSupported } from '../util/errors.js';\nimport { table } from './key_descriptor.js';\nconst wrap = [\n ['encrypt', 'wrapKey'],\n ['decrypt', 'unwrapKey'],\n];\nconst derive = [[], ['deriveBits']];\nconst none = [[], []];\nfunction rsaes(bits) {\n return {\n kty: ['RSA'],\n subtle: { name: 'RSA-OAEP', hash: `SHA-${bits}` },\n usages: wrap,\n ops: ['wrapKey', 'unwrapKey'],\n };\n}\nfunction ecdh() {\n return {\n kty: ['EC', 'OKP'],\n subtle: { name: 'ECDH' },\n resolve: ({ kty, crv, asymmetricKeyType }) => {\n if (crv === 'X25519' || asymmetricKeyType === 'x25519') {\n return { name: 'X25519' };\n }\n if (kty === 'OKP') {\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n return { name: 'ECDH', namedCurve: crv };\n },\n usages: derive,\n ops: [undefined, 'deriveBits'],\n };\n}\nfunction aeskw(bits, gcm = false) {\n return {\n kty: ['oct'],\n secret: true,\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 secret: true,\n subtle: { name: 'PBKDF2' },\n usages: none,\n ops: ['deriveBits', 'deriveBits'],\n };\n}\nexport const JWE = table({\n dir: {\n kty: ['oct'],\n secret: true,\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(),\n 'ECDH-ES+A128KW': ecdh(),\n 'ECDH-ES+A192KW': ecdh(),\n 'ECDH-ES+A256KW': ecdh(),\n A128KW: aeskw(128),\n A192KW: aeskw(192),\n A256KW: aeskw(256),\n A128GCMKW: aeskw(128, true),\n A192GCMKW: aeskw(192, true),\n A256GCMKW: aeskw(256, true),\n 'PBES2-HS256+A128KW': pbes2(),\n 'PBES2-HS384+A192KW': pbes2(),\n 'PBES2-HS512+A256KW': pbes2(),\n});\nconst contentOps = ['encrypt', 'decrypt'];\nfunction contentEncryption(bits, cbc = false) {\n return {\n kty: ['oct'],\n secret: true,\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, true),\n 'A192CBC-HS384': contentEncryption(384, true),\n 'A256CBC-HS512': contentEncryption(512, true),\n});\nfunction unsupported(parameter, name) {\n throw new JOSENotSupported(`Invalid or unsupported \"${parameter}\" (JWE ${name}) header value`);\n}\nexport function jweAlgorithm(alg) {\n return (typeof alg === 'string' ? JWE[alg] : undefined) ?? unsupported('alg', 'Algorithm');\n}\nexport function jweEncryption(enc) {\n return ((typeof enc === 'string' ? ENC[enc] : undefined) ?? unsupported('enc', 'Encryption Algorithm'));\n}\n","import { JOSENotSupported, JWEInvalid, JWSInvalid } from '../util/errors.js';\nexport const JWS_RECOGNIZED = { __proto__: null, b64: true };\nexport const JWE_RECOGNIZED = { __proto__: null };\nexport function validateAlgorithms(option, algorithms) {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n}\nexport function 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 }\n}\nexport function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return [];\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n 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 }\n const recognized = recognizedOption === undefined\n ? recognizedDefault\n : { __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 }\n if (!Object.hasOwn(joseHeader, parameter) || joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n if (recognized[parameter] &&\n (!Object.hasOwn(protectedHeader, parameter) || protectedHeader[parameter] === undefined)) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return protectedHeader.crit;\n}\n","import { checkCryptoKey, checkModulusLength } from './crypto_key.js';\nasync function getSigKey(entry, key, usage) {\n if (key instanceof Uint8Array) {\n return crypto.subtle.importKey('raw', key, entry.subtle, false, [\n usage,\n ]);\n }\n checkCryptoKey(key, entry.subtle, usage);\n if (entry.minRsaBits)\n checkModulusLength(entry.alg, key);\n return key;\n}\nexport async function sign(entry, key, data) {\n const cryptoKey = await getSigKey(entry, key, 'sign');\n const signature = await crypto.subtle.sign(entry.signing, cryptoKey, data);\n return new Uint8Array(signature);\n}\nexport async function verify(entry, key, signature, data) {\n const cryptoKey = await getSigKey(entry, key, 'verify');\n try {\n return await crypto.subtle.verify(entry.signing, cryptoKey, signature, data);\n }\n catch {\n return false;\n }\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: true, subtle, signing: subtle, usages: sig };\n}\nfunction rsa(bits, saltLength) {\n const name = saltLength ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5';\n const subtle = { name, 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 name = `ML-DSA-${bits}`;\n const subtle = { name };\n return {\n kty: ['AKP'],\n subtle,\n signing: subtle,\n usages: sig,\n };\n}\nexport const 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});\nexport function jwsAlgorithm(alg) {\n const entry = typeof alg === 'string' ? JWS[alg] : undefined;\n if (!entry) {\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n return entry;\n}\n","import { verify } from './signing.js';\nimport { 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 } from './helpers.js';\nimport { isDisjoint } from './type_checks.js';\nimport { validateCrit, validateAlgorithms, JWS_RECOGNIZED } from './options.js';\nimport { prepareKey } from './key.js';\nexport function verifyResult(jws, verified) {\n const [payload, parsedProt, , key, resolvedKey] = verified;\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key };\n }\n return result;\n}\nexport function prepareVerify(options) {\n return [options && validateAlgorithms('algorithms', options.algorithms), options?.crit];\n}\nexport async function verifySignature(jws, shared, key) {\n const { protected: encodedProtected, header, payload: inputPayload } = jws;\n let parsedProt = {};\n if (encodedProtected) {\n parsedProt = parseJoseHeader(encodedProtected, JWSInvalid, 'JWS Protected Header is invalid');\n }\n let joseHeader;\n if (header !== undefined) {\n if (!isDisjoint(parsedProt, header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n joseHeader = { ...parsedProt, ...header };\n }\n else {\n joseHeader = parsedProt;\n }\n const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, shared[1], parsedProt, joseHeader);\n let b64 = true;\n if (extensions.includes('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n if (shared[0] && !shared[0].has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n }\n if (b64) {\n if (typeof inputPayload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof inputPayload !== 'string' && !(inputPayload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n }\n const entry = jwsAlgorithm(alg);\n const data = concat(encodedProtected !== undefined ? encode(encodedProtected) : new Uint8Array(), encode('.'), typeof inputPayload === 'string'\n ? b64\n ?\n (shared[2] ??= encodeBase64url(inputPayload, 'payload', JWSInvalid))\n : encoder.encode(inputPayload)\n : inputPayload);\n const signature = decodeBase64url(jws.signature, 'signature', JWSInvalid);\n const k = await prepareKey(entry, key, 'verify');\n const verified = await verify(entry, k, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n payload = decodeBase64url(inputPayload, 'payload', JWSInvalid);\n }\n else if (typeof inputPayload === 'string') {\n payload = encoder.encode(inputPayload);\n }\n else {\n payload = inputPayload;\n }\n return [payload, parsedProt, b64, k, resolvedKey];\n}\nexport async function verifyCompact(jws, shared, key) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n return verifySignature({ payload, protected: protectedHeader, signature }, shared, key);\n}\n","import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from '../util/errors.js';\nimport { encoder, strictDecoder } from './buffer_utils.js';\nimport { isObject } from './type_checks.js';\nconst epoch = (date) => Math.floor(date.getTime() / 1000);\nconst multipliers = {\n s: 1,\n m: 60,\n h: 3600,\n d: 86400,\n w: 604800,\n y: 31557600,\n};\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nconst checkFailed = 'check_failed';\nexport function secs(str) {\n const matched = REGEX.exec(str);\n if (!matched || (matched[4] && matched[1])) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[2]);\n const numericDate = Math.round(value * multipliers[matched[3][0].toLowerCase()]);\n if (matched[1] === '-' || matched[4] === 'ago') {\n return -numericDate;\n }\n return numericDate;\n}\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nfunction numericDate(value, label) {\n if (typeof value === 'number')\n return validateInput(label, value);\n if (value instanceof Date)\n return validateInput(label, epoch(value));\n return epoch(new Date()) + secs(value);\n}\nconst normalizeTyp = (value) => {\n if (value.includes('/')) {\n return value.toLowerCase();\n }\n return `application/${value.toLowerCase()}`;\n};\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some((aud) => audPayload.includes(aud));\n }\n return false;\n};\nfunction validateNumericDate(payload, claim, required = false) {\n const value = payload[claim];\n if (value === undefined && !required)\n return undefined;\n if (typeof value !== 'number') {\n throw new JWTClaimValidationFailed(`\"${claim}\" claim must be a number`, payload, claim, 'invalid');\n }\n return value;\n}\nfunction unexpectedClaim(payload, claim) {\n throw new JWTClaimValidationFailed(`unexpected \"${claim}\" claim value`, payload, claim, checkFailed);\n}\nexport function validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n let payload;\n try {\n payload = JSON.parse(strictDecoder.decode(encodedPayload));\n }\n catch {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, 'typ', checkFailed);\n }\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n const presenceCheck = [...requiredClaims];\n if (maxTokenAge !== undefined)\n presenceCheck.push('iat');\n if (audience !== undefined)\n presenceCheck.push('aud');\n if (subject !== undefined)\n presenceCheck.push('sub');\n if (issuer !== undefined)\n 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 }\n }\n if (issuer !== undefined &&\n !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n unexpectedClaim(payload, 'iss');\n }\n if (subject !== undefined && payload.sub !== subject) {\n unexpectedClaim(payload, 'sub');\n }\n if (audience !== undefined &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n unexpectedClaim(payload, 'aud');\n }\n const { clockTolerance } = options;\n let tolerance = 0;\n if (typeof clockTolerance === 'string') {\n tolerance = secs(clockTolerance);\n }\n else if (clockTolerance !== undefined) {\n if (typeof clockTolerance !== 'number') {\n throw new TypeError('Invalid clockTolerance option type');\n }\n tolerance = clockTolerance;\n }\n validateInput('clockTolerance option', tolerance);\n const { currentDate } = options;\n const now = validateInput('currentDate option', epoch(currentDate || new Date()));\n const iat = validateNumericDate(payload, 'iat', maxTokenAge !== undefined);\n const nbf = validateNumericDate(payload, 'nbf');\n if (nbf !== undefined) {\n if (nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, 'nbf', checkFailed);\n }\n }\n const exp = validateNumericDate(payload, 'exp');\n if (exp !== undefined) {\n if (exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, 'exp', checkFailed);\n }\n }\n if (maxTokenAge !== undefined) {\n const age = now - iat;\n const max = 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 }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, 'iat', checkFailed);\n }\n }\n return payload;\n}\nexport class JWTClaimsBuilder {\n #payload;\n constructor(payload) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this.#payload = structuredClone(payload);\n }\n data() {\n return encoder.encode(JSON.stringify(this.#payload));\n }\n get iss() {\n return this.#payload.iss;\n }\n set iss(value) {\n this.#payload.iss = value;\n }\n get sub() {\n return this.#payload.sub;\n }\n set sub(value) {\n this.#payload.sub = value;\n }\n get aud() {\n return this.#payload.aud;\n }\n set aud(value) {\n this.#payload.aud = value;\n }\n set jti(value) {\n this.#payload.jti = value;\n }\n set nbf(value) {\n this.#payload.nbf = numericDate(value, 'setNotBefore');\n }\n set exp(value) {\n this.#payload.exp = numericDate(value, 'setExpirationTime');\n }\n set iat(value) {\n if (value === undefined) {\n this.#payload.iat = epoch(new Date());\n }\n else if (typeof value === 'string') {\n this.#payload.iat = validateInput('setIssuedAt', epoch(new Date()) + secs(value));\n }\n else {\n this.#payload.iat = numericDate(value, 'setIssuedAt');\n }\n }\n}\n","import { prepareVerify, verifyCompact } from '../lib/jws_verify.js';\nimport { validateClaimsSet } from '../lib/jwt_claims_set.js';\nimport { JWTInvalid } from '../util/errors.js';\nexport async function jwtVerify(jwt, key, options) {\n const verified = await verifyCompact(jwt, prepareVerify(options), key);\n if (!verified[2]) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = validateClaimsSet(verified[1], verified[0], options);\n const result = { payload, protectedHeader: verified[1] };\n if (typeof key === 'function') {\n return { ...result, key: verified[3] };\n }\n return result;\n}\n","import { encode as b64u } from '../util/base64url.js';\nimport { sign } from './signing.js';\nimport { jwsAlgorithm } from './jws_algorithms.js';\nimport { isDisjoint } from './type_checks.js';\nimport { JWSInvalid } from '../util/errors.js';\nimport { concat, encode } from './buffer_utils.js';\nimport { validateCrit, validateCritDuplicates, JWS_RECOGNIZED } from './options.js';\nimport { prepareKey } from './key.js';\nexport function unencodedPayload(protectedHeader) {\n return (protectedHeader?.b64 === false &&\n Array.isArray(protectedHeader.crit) &&\n protectedHeader.crit.includes('b64'));\n}\nexport async function createSignature(input, key) {\n const { protectedHeader, unprotectedHeader } = input;\n if (!protectedHeader && !unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint(protectedHeader, unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = { ...protectedHeader, ...unprotectedHeader };\n validateCritDuplicates(JWSInvalid, protectedHeader);\n const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, input.crit, protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.includes('b64')) {\n b64 = protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const entry = jwsAlgorithm(alg);\n let payloadS;\n let payloadB;\n if (b64) {\n const encoded = (input.encoded ??= []);\n encoded[0] ??= b64u(input.payload);\n encoded[1] ??= encode(encoded[0]);\n payloadS = encoded[0];\n payloadB = encoded[1];\n }\n else {\n payloadB = input.payload;\n payloadS = '';\n }\n let protectedHeaderString;\n let protectedHeaderBytes;\n if (protectedHeader) {\n protectedHeaderString = b64u(JSON.stringify(protectedHeader));\n protectedHeaderBytes = encode(protectedHeaderString);\n }\n else {\n protectedHeaderString = '';\n protectedHeaderBytes = new Uint8Array();\n }\n const data = concat(protectedHeaderBytes, encode('.'), payloadB);\n const k = await prepareKey(entry, key, 'sign');\n const signature = await sign(entry, k, data);\n const jws = {\n signature: b64u(signature),\n payload: payloadS,\n };\n if (protectedHeader) {\n jws.protected = protectedHeaderString;\n }\n if (unprotectedHeader) {\n jws.header = unprotectedHeader;\n }\n return jws;\n}\n","import { createSignature } from '../../lib/jws_sign.js';\nimport { assertNotSet } from '../../lib/helpers.js';\nexport class FlattenedSign {\n #payload;\n #protectedHeader;\n #unprotectedHeader;\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this.#payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n assertNotSet(this.#protectedHeader, 'setProtectedHeader');\n this.#protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n assertNotSet(this.#unprotectedHeader, 'setUnprotectedHeader');\n this.#unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n return createSignature({\n payload: this.#payload,\n protectedHeader: this.#protectedHeader,\n unprotectedHeader: this.#unprotectedHeader,\n crit: options?.crit,\n }, key);\n }\n}\n","import { FlattenedSign } from '../flattened/sign.js';\nimport { unencodedPayload } from '../../lib/jws_sign.js';\nexport class CompactSign {\n #flattened;\n #protectedHeader;\n constructor(payload) {\n this.#flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this.#flattened.setProtectedHeader(protectedHeader);\n this.#protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n if (unencodedPayload(this.#protectedHeader)) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n const jws = await this.#flattened.sign(key, options);\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n","import { CompactSign } from '../jws/compact/sign.js';\nimport { unencodedPayload } from '../lib/jws_sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { JWTClaimsBuilder } from '../lib/jwt_claims_set.js';\nexport class SignJWT {\n #protectedHeader;\n #jwt;\n constructor(payload = {}) {\n this.#jwt = new JWTClaimsBuilder(payload);\n }\n setIssuer(issuer) {\n this.#jwt.iss = issuer;\n return this;\n }\n setSubject(subject) {\n this.#jwt.sub = subject;\n return this;\n }\n setAudience(audience) {\n this.#jwt.aud = audience;\n return this;\n }\n setJti(jwtId) {\n this.#jwt.jti = jwtId;\n return this;\n }\n setNotBefore(input) {\n this.#jwt.nbf = input;\n return this;\n }\n setExpirationTime(input) {\n this.#jwt.exp = input;\n return this;\n }\n setIssuedAt(input) {\n this.#jwt.iat = input;\n return this;\n }\n setProtectedHeader(protectedHeader) {\n this.#protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(this.#jwt.data());\n sig.setProtectedHeader(this.#protectedHeader);\n if (unencodedPayload(this.#protectedHeader)) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n","import { JOSENotSupported } from '../util/errors.js';\nimport { JWS } from './jws_algorithms.js';\nimport { JWE } from './jwe_algorithms.js';\nexport const algArgument = '\"alg\" (Algorithm)';\nexport function unsupportedAlg(source = 'JWK \"alg\" (Algorithm) Parameter') {\n throw new JOSENotSupported(`Invalid or unsupported ${source} value`);\n}\nexport function keyAlgorithm(alg, source) {\n return (typeof alg === 'string' ? (JWS[alg] ?? JWE[alg]) : undefined) ?? unsupportedAlg(source);\n}\n","import { jwkToKey } from '../lib/jwk_to_key.js';\nimport { JWS } from '../lib/jws_algorithms.js';\nimport { JWKSInvalid, JOSENotSupported, JWKSNoMatchingKey, JWKSMultipleMatchingKeys, } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nfunction signatureAlgorithm(alg) {\n const entry = typeof alg === 'string' ? JWS[alg] : undefined;\n if (!entry || entry.secret) {\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n return entry;\n}\nfunction isJWKSLike(jwks) {\n if (!jwks || typeof jwks !== 'object') {\n return false;\n }\n const { keys } = jwks;\n return Array.isArray(keys) && keys.every((isObject));\n}\nclass LocalJWKSetImpl {\n #jwks;\n #cached = new WeakMap();\n constructor(jwks) {\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this.#jwks = structuredClone(jwks);\n }\n jwks() {\n return this.#jwks;\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token?.header };\n const entry = signatureAlgorithm(alg);\n const candidates = this.#jwks.keys.filter((jwk) => entry.kty.includes(jwk.kty) &&\n (typeof kid !== 'string' || kid === jwk.kid) &&\n (!(typeof jwk.alg === 'string' || jwk.kty === 'AKP') || alg === jwk.alg) &&\n (typeof jwk.use !== 'string' || jwk.use === 'sig') &&\n (!Array.isArray(jwk.key_ops) || jwk.key_ops.includes('verify')) &&\n (!entry.crv || jwk.crv === entry.crv));\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n if (length !== 1) {\n const error = new JWKSMultipleMatchingKeys();\n const _cached = this.#cached;\n error[Symbol.asyncIterator] = async function* () {\n for (const jwk of candidates) {\n try {\n yield await importWithAlgCache(_cached, jwk, entry);\n }\n catch { }\n }\n };\n throw error;\n }\n return importWithAlgCache(this.#cached, jwk, entry);\n }\n}\nasync function importWithAlgCache(cache, jwk, entry) {\n const cached = cache.get(jwk) || cache.set(jwk, { __proto__: null }).get(jwk);\n if (cached[entry.alg] === undefined) {\n const key = await jwkToKey(entry, { ...jwk, alg: entry.alg, ext: true });\n if (key.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[entry.alg] = key;\n }\n return cached[entry.alg];\n}\nexport function createLocalJWKSet(jwks) {\n const set = new LocalJWKSetImpl(jwks);\n const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperty(localJWKSet, 'jwks', {\n value: () => structuredClone(set.jwks()),\n });\n return localJWKSet;\n}\n","import { decode as decodeBase64URL } from '../util/base64url.js';\nimport { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';\nimport { jwkToKey } from '../lib/jwk_to_key.js';\nimport { keyAlgorithm } from '../lib/key_algorithm.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nexport async 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 }\n return fromSPKI(spki, alg, options);\n}\nexport async 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 }\n return fromX509(x509, alg, options);\n}\nexport async 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 }\n return fromPKCS8(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg, options) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg ??= jwk.alg;\n const ext = options?.extractable ?? jwk.ext;\n if (jwk.kty !== 'oct' && !alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n return jwkToKey(keyAlgorithm(alg), { ...jwk, alg, ext });\n case 'AKP': {\n if (typeof jwk.alg !== 'string' || !jwk.alg) {\n throw new TypeError('missing \"alg\" (Algorithm) Parameter value');\n }\n if (alg !== undefined && alg !== jwk.alg) {\n throw new TypeError('JWK alg and alg option value mismatch');\n }\n return jwkToKey(keyAlgorithm(jwk.alg), { ...jwk, ext });\n }\n case 'EC':\n case 'OKP':\n return jwkToKey(keyAlgorithm(alg), { ...jwk, alg, ext });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n","export class AuthError extends Error {\n constructor(\n readonly code: string,\n message: string,\n ) {\n super(message);\n }\n}\n","import { base64url } from 'jose';\nimport { AuthError } from './errors';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function tokenFromRequest(request: Request): string | undefined {\n const authorization = request.headers.get('authorization');\n if (authorization?.toLowerCase().startsWith('bearer '))\n return authorization.slice(7).trim();\n if (authorization?.toLowerCase().startsWith('basic ')) {\n try {\n const encoded = authorization.slice(6).trim();\n const padded = encoded + '='.repeat((4 - (encoded.length % 4)) % 4);\n const decoded = decoder.decode(\n Uint8Array.from(atob(padded), (character) => character.charCodeAt(0)),\n );\n const separator = decoded.indexOf(':');\n return separator < 0 ? decoded : decoded.slice(separator + 1);\n } catch {\n throw new AuthError('invalid_token', 'malformed basic credentials');\n }\n }\n return undefined;\n}\n\nexport async function hashSecret(value: string): Promise<string> {\n return base64url.encode(\n new Uint8Array(\n await crypto.subtle.digest('SHA-256', encoder.encode(value)),\n ),\n );\n}\n","import type {\n AuditEvent as GeneratedAuditEvent,\n CacheResponse as GeneratedCacheResponse,\n CfNixCacheChunkManifest,\n CfNixCacheProcessorJob,\n CompleteUpload,\n InitiateUploadResponse as GeneratedInitiateUploadResponse,\n Grant as GeneratedGrant,\n Manifest as GeneratedManifest,\n ResponseTokenSummary as GeneratedTokenSummary,\n Role as GeneratedRole,\n UploadStatus,\n UploadStateResponse as GeneratedUploadStateResponse,\n} from './generated/contracts';\n\nexport type Role = GeneratedRole;\n\nexport type UploadState = UploadStatus;\n\nexport type Grant = GeneratedGrant;\n\nexport interface TokenClaims {\n iss: string;\n aud: string;\n sub: string;\n jti: string;\n iat: number;\n nbf?: number;\n exp: number;\n grants: Grant[];\n}\n\nexport type CacheConfig = GeneratedCacheResponse;\n\nexport type UploadManifest = GeneratedManifest;\nexport type ChunkManifest = CfNixCacheChunkManifest;\nexport type CompleteUploadRequest = CompleteUpload;\n\nexport interface ChunkRef {\n raw_hash: string;\n raw_size: number;\n compressed_hash: string;\n compressed_size: number;\n key: string;\n}\n\nexport interface PathRecord {\n cache: string;\n store_hash: string;\n store_path: string;\n nar_hash: string;\n nar_size: number;\n references: string[];\n deriver?: string | null;\n ca?: string | null;\n manifest_key: string;\n narinfo: string;\n file_hash: string;\n file_size: number;\n last_accessed: number;\n created_at: number;\n}\n\nexport type ProcessJob = CfNixCacheProcessorJob;\n\nexport type UploadStateResponse = GeneratedUploadStateResponse;\n\nexport type InitiateUploadResponse = GeneratedInitiateUploadResponse;\n\nexport interface PageResponse<T> {\n items: T[];\n next_cursor: string | null;\n}\n\nexport type TokenSummary = GeneratedTokenSummary;\n\nexport type AuditEvent = GeneratedAuditEvent;\n\nexport type CacheMutation =\n | { kind: 'upsert'; record: PathRecord }\n | { kind: 'delete'; store_hash: string }\n | { kind: 'clear' };\n\nexport interface PreparedMutation {\n operation_id: string;\n cache: string;\n store_hash?: string;\n delta: number;\n previous: PathRecord | null;\n record: PathRecord | null;\n status: 'PREPARED' | 'COMMITTED' | 'ABORTED';\n}\n\nexport interface QuotaReservation {\n operation_id: string;\n delta: number;\n status: 'RESERVED' | 'FINALIZED' | 'ABORTED';\n}\n\nexport interface ProcessResult {\n manifest_key: string;\n manifest: ChunkManifest;\n deduplicated: boolean;\n}\n\nexport interface CacheReference {\n id: string;\n name: string;\n incarnation: string;\n coordinator_id: string;\n /** Catalogue lifecycle, when the reference came from SystemControl. */\n lifecycle?: CacheConfig['lifecycle'];\n}\n\nexport type CacheState = CacheConfig & { reference: CacheReference };\n\nexport interface CacheWorkflowJob {\n cache: string;\n cache_id: string;\n incarnation: string;\n coordinator_id: string;\n operation_id: string;\n}\n\ndeclare global {\n interface Env {\n AUTH_PRIVATE_JWK: string;\n AUTH_PUBLIC_JWKS: string;\n NIX_PRIVATE_JWK: string;\n BOOTSTRAP_SECRET_HASH: string;\n }\n}\n\nexport const ENCODING_ID = 'fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1';\nexport const MULTIPART_PART_SIZE = 64 * 1024 * 1024;\nexport const MAX_METADATA_BYTES = 256 * 1024;\n","// GENERATED FROM schemas/*.json. Do not edit by hand.\n// @ts-nocheck\n\nimport type { ContractSchema } from '../contracts';\nimport type { CfNixCacheAPIContract, Role, Grant, Manifest, CreateCache, ConfigureCache, Cache, TokenRequest, BootstrapRequest, UploadRequest, MissingPaths, UploadStatus, UploadState, TokenResponse, TokenSummary, AuditEvent, CompleteUpload, CfNixCacheChunkManifest, CfNixCacheProcessorJob, CfNixCacheAPIResponses, ApiError, CacheResponse, CachePage, UploadStateResponse, InitiateUploadResponse, TokenIssueResponse, ResponseTokenSummary, TokenPageResponse, AuditPage, MissingPathsResponse } from './contracts';\n\n\"use strict\";const APIContractSchemaValidator = validate20;const schema31 = {\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"$id\":\"https://cf-nix-cache.dev/schemas/api.json\",\"title\":\"cf-nix-cache API contract\",\"type\":\"object\",\"additionalProperties\":false,\"$defs\":{\"role\":{\"enum\":[\"pull\",\"push\",\"admin\"]},\"grant\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"role\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^(\\\\*|[a-z0-9_-]{1,64})$\"},\"role\":{\"$ref\":\"#/$defs/role\"}}},\"manifest\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"store_hash\",\"store_path\",\"nar_hash\",\"nar_size\",\"references\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"store_hash\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},\"store_path\":{\"type\":\"string\",\"pattern\":\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\",\"maxLength\":512},\"nar_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"nar_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":10737418240},\"references\":{\"type\":\"array\",\"maxItems\":1024,\"items\":{\"type\":\"string\",\"maxLength\":512}},\"deriver\":{\"type\":[\"string\",\"null\"],\"maxLength\":512},\"ca\":{\"type\":[\"string\",\"null\"],\"maxLength\":512}}},\"create_cache\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"name\",\"quota_bytes\"],\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\",\"default\":false},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"}}},\"configure_cache\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"public\"],\"properties\":{\"public\":{\"type\":\"boolean\"}}},\"cache\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\",\"public\",\"quota_bytes\",\"logical_bytes\",\"encoding_id\",\"created_at\",\"lifecycle\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\"},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"logical_bytes\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},\"created_at\":{\"type\":\"integer\",\"minimum\":1},\"lifecycle\":{\"enum\":[\"CREATING\",\"ACTIVE\",\"DELETING\"]}}},\"token_request\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"subject\",\"valid_for_seconds\",\"grants\"],\"properties\":{\"subject\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"valid_for_seconds\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":157680000},\"grants\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":256,\"items\":{\"$ref\":\"#/$defs/grant\"}}}},\"bootstrap_request\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"subject\",\"valid_for_seconds\",\"grants\",\"secret\"],\"properties\":{\"subject\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"valid_for_seconds\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":157680000},\"grants\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":256,\"items\":{\"$ref\":\"#/$defs/grant\"}},\"secret\":{\"type\":\"string\",\"minLength\":1}}},\"upload_request\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"manifest\",\"compressed_size\"],\"properties\":{\"manifest\":{\"$ref\":\"#/$defs/manifest\"},\"compressed_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":12884901888}}},\"missing_paths\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"store_hashes\"],\"properties\":{\"store_hashes\":{\"type\":\"array\",\"maxItems\":100,\"items\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"}}}},\"upload_status\":{\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]},\"upload_state\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"$ref\":\"#/$defs/upload_status\"},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000}}},\"token_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"token\",\"expires_at\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"token\":{\"type\":\"string\",\"minLength\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1}}},\"token_summary\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"subject\",\"grants\",\"issued_at\",\"expires_at\",\"revoked\"],\"properties\":{\"id\":{\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"grants\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/grant\"}},\"issued_at\":{\"type\":\"integer\",\"minimum\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"revoked\":{\"type\":\"boolean\"}}},\"audit_event\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"timestamp\",\"actor\",\"action\",\"resource\",\"outcome\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"timestamp\":{\"type\":\"integer\",\"minimum\":1},\"actor\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"action\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"resource\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"outcome\":{\"type\":\"string\",\"enum\":[\"success\",\"accepted\",\"failure\"]},\"metadata\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"complete_upload\":{\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"parts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"part_number\",\"etag\"],\"properties\":{\"part_number\":{\"type\":\"integer\",\"minimum\":1},\"etag\":{\"type\":\"string\",\"minLength\":1}}}}}}},\"oneOf\":[{\"$ref\":\"#/$defs/create_cache\"},{\"$ref\":\"#/$defs/token_request\"},{\"$ref\":\"#/$defs/bootstrap_request\"},{\"$ref\":\"#/$defs/upload_request\"},{\"$ref\":\"#/$defs/upload_state\"},{\"$ref\":\"#/$defs/configure_cache\"},{\"$ref\":\"#/$defs/cache\"},{\"$ref\":\"#/$defs/missing_paths\"},{\"$ref\":\"#/$defs/token_response\"},{\"$ref\":\"#/$defs/token_summary\"},{\"$ref\":\"#/$defs/audit_event\"},{\"$ref\":\"#/$defs/complete_upload\"}]};const schema32 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"name\",\"quota_bytes\"],\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\",\"default\":false},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"}}};const schema41 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"public\"],\"properties\":{\"public\":{\"type\":\"boolean\"}}};const schema42 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\",\"public\",\"quota_bytes\",\"logical_bytes\",\"encoding_id\",\"created_at\",\"lifecycle\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\"},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"logical_bytes\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},\"created_at\":{\"type\":\"integer\",\"minimum\":1},\"lifecycle\":{\"enum\":[\"CREATING\",\"ACTIVE\",\"DELETING\"]}}};const schema43 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"store_hashes\"],\"properties\":{\"store_hashes\":{\"type\":\"array\",\"maxItems\":100,\"items\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"}}}};const schema44 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"token\",\"expires_at\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"token\":{\"type\":\"string\",\"minLength\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1}}};const schema46 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"timestamp\",\"actor\",\"action\",\"resource\",\"outcome\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"timestamp\":{\"type\":\"integer\",\"minimum\":1},\"actor\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"action\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"resource\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"outcome\":{\"type\":\"string\",\"enum\":[\"success\",\"accepted\",\"failure\"]},\"metadata\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}};const schema47 = {\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"parts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"part_number\",\"etag\"],\"properties\":{\"part_number\":{\"type\":\"integer\",\"minimum\":1},\"etag\":{\"type\":\"string\",\"minLength\":1}}}}}};const pattern4 = new RegExp(\"^[a-z0-9_-]{1,64}$\", \"u\");const pattern7 = new RegExp(\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\", \"u\");const schema33 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"subject\",\"valid_for_seconds\",\"grants\"],\"properties\":{\"subject\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"valid_for_seconds\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":157680000},\"grants\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":256,\"items\":{\"$ref\":\"#/$defs/grant\"}}}};const func1 = (value) => Array.from(value).length;const schema34 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"role\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^(\\\\*|[a-z0-9_-]{1,64})$\"},\"role\":{\"$ref\":\"#/$defs/role\"}}};const schema35 = {\"enum\":[\"pull\",\"push\",\"admin\"]};const pattern5 = new RegExp(\"^(\\\\*|[a-z0-9_-]{1,64})$\", \"u\");function validate22(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate22.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.cache === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.role === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"role\"},message:\"must have required property '\"+\"role\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"cache\") || (key0 === \"role\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.cache !== undefined){let data0 = data.cache;if(typeof data0 === \"string\"){if(!pattern5.test(data0)){const err3 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^(\\\\*|[a-z0-9_-]{1,64})$\"},message:\"must match pattern \\\"\"+\"^(\\\\*|[a-z0-9_-]{1,64})$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.role !== undefined){let data1 = data.role;if(!(((data1 === \"pull\") || (data1 === \"push\")) || (data1 === \"admin\"))){const err5 = {instancePath:instancePath+\"/role\",schemaPath:\"#/$defs/role/enum\",keyword:\"enum\",params:{allowedValues: schema35.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate22.errors = vErrors;return errors === 0;}validate22.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};function validate21(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate21.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.subject === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.valid_for_seconds === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"valid_for_seconds\"},message:\"must have required property '\"+\"valid_for_seconds\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"subject\") || (key0 === \"valid_for_seconds\")) || (key0 === \"grants\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.subject !== undefined){let data0 = data.subject;if(typeof data0 === \"string\"){if(func1(data0) > 256){const err4 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.valid_for_seconds !== undefined){let data1 = data.valid_for_seconds;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err7 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 > 157680000 || isNaN(data1)){const err8 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 157680000},message:\"must be <= 157680000\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data1 < 1 || isNaN(data1)){const err9 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){if(data2.length > 256){const err10 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/maxItems\",keyword:\"maxItems\",params:{limit: 256},message:\"must NOT have more than 256 items\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(data2.length < 1){const err11 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err12 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}else {const err13 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}validate21.errors = vErrors;return errors === 0;}validate21.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const schema36 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"subject\",\"valid_for_seconds\",\"grants\",\"secret\"],\"properties\":{\"subject\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"valid_for_seconds\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":157680000},\"grants\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":256,\"items\":{\"$ref\":\"#/$defs/grant\"}},\"secret\":{\"type\":\"string\",\"minLength\":1}}};function validate25(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate25.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.subject === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.valid_for_seconds === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"valid_for_seconds\"},message:\"must have required property '\"+\"valid_for_seconds\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.secret === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"secret\"},message:\"must have required property '\"+\"secret\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((key0 === \"subject\") || (key0 === \"valid_for_seconds\")) || (key0 === \"grants\")) || (key0 === \"secret\"))){const err4 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.subject !== undefined){let data0 = data.subject;if(typeof data0 === \"string\"){if(func1(data0) > 256){const err5 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(func1(data0) < 1){const err6 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.valid_for_seconds !== undefined){let data1 = data.valid_for_seconds;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err8 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 > 157680000 || isNaN(data1)){const err9 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 157680000},message:\"must be <= 157680000\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data1 < 1 || isNaN(data1)){const err10 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){if(data2.length > 256){const err11 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/maxItems\",keyword:\"maxItems\",params:{limit: 256},message:\"must NOT have more than 256 items\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data2.length < 1){const err12 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err13 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.secret !== undefined){let data4 = data.secret;if(typeof data4 === \"string\"){if(func1(data4) < 1){const err14 = {instancePath:instancePath+\"/secret\",schemaPath:\"#/properties/secret/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+\"/secret\",schemaPath:\"#/properties/secret/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}else {const err16 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}validate25.errors = vErrors;return errors === 0;}validate25.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const schema37 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"manifest\",\"compressed_size\"],\"properties\":{\"manifest\":{\"$ref\":\"#/$defs/manifest\"},\"compressed_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":12884901888}}};const schema38 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"store_hash\",\"store_path\",\"nar_hash\",\"nar_size\",\"references\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"store_hash\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},\"store_path\":{\"type\":\"string\",\"pattern\":\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\",\"maxLength\":512},\"nar_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"nar_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":10737418240},\"references\":{\"type\":\"array\",\"maxItems\":1024,\"items\":{\"type\":\"string\",\"maxLength\":512}},\"deriver\":{\"type\":[\"string\",\"null\"],\"maxLength\":512},\"ca\":{\"type\":[\"string\",\"null\"],\"maxLength\":512}}};const pattern8 = new RegExp(\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\", \"u\");const pattern9 = new RegExp(\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\", \"u\");function validate28(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate28.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.manifest === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"manifest\"},message:\"must have required property '\"+\"manifest\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.compressed_size === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"compressed_size\"},message:\"must have required property '\"+\"compressed_size\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"manifest\") || (key0 === \"compressed_size\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.manifest !== undefined){let data0 = data.manifest;if(data0 && typeof data0 == \"object\" && !Array.isArray(data0)){if(data0.cache === undefined){const err3 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data0.store_hash === undefined){const err4 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"store_hash\"},message:\"must have required property '\"+\"store_hash\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data0.store_path === undefined){const err5 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"store_path\"},message:\"must have required property '\"+\"store_path\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data0.nar_hash === undefined){const err6 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"nar_hash\"},message:\"must have required property '\"+\"nar_hash\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data0.nar_size === undefined){const err7 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"nar_size\"},message:\"must have required property '\"+\"nar_size\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data0.references === undefined){const err8 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"references\"},message:\"must have required property '\"+\"references\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}for(const key1 in data0){if(!((((((((key1 === \"cache\") || (key1 === \"store_hash\")) || (key1 === \"store_path\")) || (key1 === \"nar_hash\")) || (key1 === \"nar_size\")) || (key1 === \"references\")) || (key1 === \"deriver\")) || (key1 === \"ca\"))){const err9 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data0.cache !== undefined){let data1 = data0.cache;if(typeof data1 === \"string\"){if(!pattern4.test(data1)){const err10 = {instancePath:instancePath+\"/manifest/cache\",schemaPath:\"#/$defs/manifest/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/manifest/cache\",schemaPath:\"#/$defs/manifest/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data0.store_hash !== undefined){let data2 = data0.store_hash;if(typeof data2 === \"string\"){if(!pattern7.test(data2)){const err12 = {instancePath:instancePath+\"/manifest/store_hash\",schemaPath:\"#/$defs/manifest/properties/store_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/manifest/store_hash\",schemaPath:\"#/$defs/manifest/properties/store_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data0.store_path !== undefined){let data3 = data0.store_path;if(typeof data3 === \"string\"){if(func1(data3) > 512){const err14 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(!pattern8.test(data3)){const err15 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/pattern\",keyword:\"pattern\",params:{pattern: \"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"},message:\"must match pattern \\\"\"+\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data0.nar_hash !== undefined){let data4 = data0.nar_hash;if(typeof data4 === \"string\"){if(!pattern9.test(data4)){const err17 = {instancePath:instancePath+\"/manifest/nar_hash\",schemaPath:\"#/$defs/manifest/properties/nar_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/manifest/nar_hash\",schemaPath:\"#/$defs/manifest/properties/nar_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data0.nar_size !== undefined){let data5 = data0.nar_size;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err19 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 > 10737418240 || isNaN(data5)){const err20 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 10737418240},message:\"must be <= 10737418240\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}if(data5 < 1 || isNaN(data5)){const err21 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}}if(data0.references !== undefined){let data6 = data0.references;if(Array.isArray(data6)){if(data6.length > 1024){const err22 = {instancePath:instancePath+\"/manifest/references\",schemaPath:\"#/$defs/manifest/properties/references/maxItems\",keyword:\"maxItems\",params:{limit: 1024},message:\"must NOT have more than 1024 items\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}const len0 = data6.length;for(let i0=0; i0<len0; i0++){let data7 = data6[i0];if(typeof data7 === \"string\"){if(func1(data7) > 512){const err23 = {instancePath:instancePath+\"/manifest/references/\" + i0,schemaPath:\"#/$defs/manifest/properties/references/items/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}else {const err24 = {instancePath:instancePath+\"/manifest/references/\" + i0,schemaPath:\"#/$defs/manifest/properties/references/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath:instancePath+\"/manifest/references\",schemaPath:\"#/$defs/manifest/properties/references/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data0.deriver !== undefined){let data8 = data0.deriver;if((typeof data8 !== \"string\") && (data8 !== null)){const err26 = {instancePath:instancePath+\"/manifest/deriver\",schemaPath:\"#/$defs/manifest/properties/deriver/type\",keyword:\"type\",params:{type: schema38.properties.deriver.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(typeof data8 === \"string\"){if(func1(data8) > 512){const err27 = {instancePath:instancePath+\"/manifest/deriver\",schemaPath:\"#/$defs/manifest/properties/deriver/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}if(data0.ca !== undefined){let data9 = data0.ca;if((typeof data9 !== \"string\") && (data9 !== null)){const err28 = {instancePath:instancePath+\"/manifest/ca\",schemaPath:\"#/$defs/manifest/properties/ca/type\",keyword:\"type\",params:{type: schema38.properties.ca.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}if(typeof data9 === \"string\"){if(func1(data9) > 512){const err29 = {instancePath:instancePath+\"/manifest/ca\",schemaPath:\"#/$defs/manifest/properties/ca/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}}}else {const err30 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}if(data.compressed_size !== undefined){let data10 = data.compressed_size;if(!(((typeof data10 == \"number\") && (!(data10 % 1) && !isNaN(data10))) && (isFinite(data10)))){const err31 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if((typeof data10 == \"number\") && (isFinite(data10))){if(data10 > 12884901888 || isNaN(data10)){const err32 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 12884901888},message:\"must be <= 12884901888\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}if(data10 < 1 || isNaN(data10)){const err33 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}}else {const err34 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}validate28.errors = vErrors;return errors === 0;}validate28.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const schema39 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"$ref\":\"#/$defs/upload_status\"},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000}}};const schema40 = {\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]};function validate30(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate30.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.status === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.error === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"id\") || (key0 === \"status\")) || (key0 === \"error\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.status !== undefined){let data1 = data.status;if(!(((((((((data1 === \"CREATED\") || (data1 === \"UPLOADING\")) || (data1 === \"COMPLETING\")) || (data1 === \"QUEUED\")) || (data1 === \"PROCESSING\")) || (data1 === \"PUBLISHING\")) || (data1 === \"READY\")) || (data1 === \"FAILED\")) || (data1 === \"ABORTED\"))){const err7 = {instancePath:instancePath+\"/status\",schemaPath:\"#/$defs/upload_status/enum\",keyword:\"enum\",params:{allowedValues: schema40.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.error !== undefined){let data2 = data.error;if((typeof data2 !== \"string\") && (data2 !== null)){const err8 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/type\",keyword:\"type\",params:{type: schema39.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(typeof data2 === \"string\"){if(func1(data2) > 2000){const err9 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}}else {const err10 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}validate30.errors = vErrors;return errors === 0;}validate30.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const schema45 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"subject\",\"grants\",\"issued_at\",\"expires_at\",\"revoked\"],\"properties\":{\"id\":{\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"grants\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/grant\"}},\"issued_at\":{\"type\":\"integer\",\"minimum\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"revoked\":{\"type\":\"boolean\"}}};function validate32(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate32.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.subject === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.issued_at === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.expires_at === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.revoked === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"revoked\"},message:\"must have required property '\"+\"revoked\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"subject\")) || (key0 === \"grants\")) || (key0 === \"issued_at\")) || (key0 === \"expires_at\")) || (key0 === \"revoked\"))){const err6 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.id !== undefined){if(typeof data.id !== \"string\"){const err7 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.subject !== undefined){if(typeof data.subject !== \"string\"){const err8 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err9 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.issued_at !== undefined){let data4 = data.issued_at;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err10 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 < 1 || isNaN(data4)){const err11 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}if(data.expires_at !== undefined){let data5 = data.expires_at;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err12 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 < 1 || isNaN(data5)){const err13 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}if(data.revoked !== undefined){if(typeof data.revoked !== \"boolean\"){const err14 = {instancePath:instancePath+\"/revoked\",schemaPath:\"#/properties/revoked/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}}else {const err15 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}validate32.errors = vErrors;return errors === 0;}validate32.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};function validate20(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL=\"https://cf-nix-cache.dev/schemas/api.json\" */;let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs1 = errors;let valid0 = false;let passing0 = null;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.name === undefined){const err0 = {instancePath,schemaPath:\"#/$defs/create_cache/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.quota_bytes === undefined){const err1 = {instancePath,schemaPath:\"#/$defs/create_cache/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((key0 === \"name\") || (key0 === \"public\")) || (key0 === \"quota_bytes\")) || (key0 === \"encoding_id\"))){const err2 = {instancePath,schemaPath:\"#/$defs/create_cache/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.name !== undefined){let data0 = data.name;if(typeof data0 === \"string\"){if(!pattern4.test(data0)){const err3 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/create_cache/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/create_cache/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err5 = {instancePath:instancePath+\"/public\",schemaPath:\"#/$defs/create_cache/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.quota_bytes !== undefined){let data2 = data.quota_bytes;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err6 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/create_cache/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 > 9007199254740991 || isNaN(data2)){const err7 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/create_cache/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data2 < 1 || isNaN(data2)){const err8 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/create_cache/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err9 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/$defs/create_cache/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}else {const err10 = {instancePath,schemaPath:\"#/$defs/create_cache/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}var _valid0 = _errs2 === errors;if(_valid0){valid0 = true;passing0 = 0;var props0 = true;}const _errs13 = errors;if(!(validate21(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}var _valid0 = _errs13 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 1];}else {if(_valid0){valid0 = true;passing0 = 1;if(props0 !== true){props0 = true;}}const _errs14 = errors;if(!(validate25(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}var _valid0 = _errs14 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 2];}else {if(_valid0){valid0 = true;passing0 = 2;if(props0 !== true){props0 = true;}}const _errs15 = errors;if(!(validate28(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate28.errors : vErrors.concat(validate28.errors);errors = vErrors.length;}var _valid0 = _errs15 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 3];}else {if(_valid0){valid0 = true;passing0 = 3;if(props0 !== true){props0 = true;}}const _errs16 = errors;if(!(validate30(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate30.errors : vErrors.concat(validate30.errors);errors = vErrors.length;}var _valid0 = _errs16 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 4];}else {if(_valid0){valid0 = true;passing0 = 4;if(props0 !== true){props0 = true;}}const _errs17 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.public === undefined){const err11 = {instancePath,schemaPath:\"#/$defs/configure_cache/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}for(const key1 in data){if(!(key1 === \"public\")){const err12 = {instancePath,schemaPath:\"#/$defs/configure_cache/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err13 = {instancePath:instancePath+\"/public\",schemaPath:\"#/$defs/configure_cache/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/$defs/configure_cache/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}var _valid0 = _errs17 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 5];}else {if(_valid0){valid0 = true;passing0 = 5;if(props0 !== true){props0 = true;}}const _errs23 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err15 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.name === undefined){const err16 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.public === undefined){const err17 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}if(data.quota_bytes === undefined){const err18 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if(data.logical_bytes === undefined){const err19 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data.encoding_id === undefined){const err20 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}if(data.created_at === undefined){const err21 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if(data.lifecycle === undefined){const err22 = {instancePath,schemaPath:\"#/$defs/cache/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}for(const key2 in data){if(!((((((((key2 === \"id\") || (key2 === \"name\")) || (key2 === \"public\")) || (key2 === \"quota_bytes\")) || (key2 === \"logical_bytes\")) || (key2 === \"encoding_id\")) || (key2 === \"created_at\")) || (key2 === \"lifecycle\"))){const err23 = {instancePath,schemaPath:\"#/$defs/cache/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data.id !== undefined){let data5 = data.id;if(typeof data5 === \"string\"){if(func1(data5) > 128){const err24 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}if(func1(data5) < 1){const err25 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}else {const err26 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data.name !== undefined){let data6 = data.name;if(typeof data6 === \"string\"){if(!pattern4.test(data6)){const err27 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/cache/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}else {const err28 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/cache/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err29 = {instancePath:instancePath+\"/public\",schemaPath:\"#/$defs/cache/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.quota_bytes !== undefined){let data8 = data.quota_bytes;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err30 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 > 9007199254740991 || isNaN(data8)){const err31 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if(data8 < 1 || isNaN(data8)){const err32 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}}if(data.logical_bytes !== undefined){let data9 = data.logical_bytes;if(!(((typeof data9 == \"number\") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){const err33 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}if((typeof data9 == \"number\") && (isFinite(data9))){if(data9 > 9007199254740991 || isNaN(data9)){const err34 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}if(data9 < 0 || isNaN(data9)){const err35 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err36 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/$defs/cache/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}if(data.created_at !== undefined){let data11 = data.created_at;if(!(((typeof data11 == \"number\") && (!(data11 % 1) && !isNaN(data11))) && (isFinite(data11)))){const err37 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/$defs/cache/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}if((typeof data11 == \"number\") && (isFinite(data11))){if(data11 < 1 || isNaN(data11)){const err38 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/$defs/cache/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}}if(data.lifecycle !== undefined){let data12 = data.lifecycle;if(!(((data12 === \"CREATING\") || (data12 === \"ACTIVE\")) || (data12 === \"DELETING\"))){const err39 = {instancePath:instancePath+\"/lifecycle\",schemaPath:\"#/$defs/cache/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema42.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}}else {const err40 = {instancePath,schemaPath:\"#/$defs/cache/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}var _valid0 = _errs23 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 6];}else {if(_valid0){valid0 = true;passing0 = 6;if(props0 !== true){props0 = true;}}const _errs41 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.store_hashes === undefined){const err41 = {instancePath,schemaPath:\"#/$defs/missing_paths/required\",keyword:\"required\",params:{missingProperty: \"store_hashes\"},message:\"must have required property '\"+\"store_hashes\"+\"'\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}for(const key3 in data){if(!(key3 === \"store_hashes\")){const err42 = {instancePath,schemaPath:\"#/$defs/missing_paths/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}if(data.store_hashes !== undefined){let data13 = data.store_hashes;if(Array.isArray(data13)){if(data13.length > 100){const err43 = {instancePath:instancePath+\"/store_hashes\",schemaPath:\"#/$defs/missing_paths/properties/store_hashes/maxItems\",keyword:\"maxItems\",params:{limit: 100},message:\"must NOT have more than 100 items\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}const len0 = data13.length;for(let i0=0; i0<len0; i0++){let data14 = data13[i0];if(typeof data14 === \"string\"){if(!pattern7.test(data14)){const err44 = {instancePath:instancePath+\"/store_hashes/\" + i0,schemaPath:\"#/$defs/missing_paths/properties/store_hashes/items/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+\"/store_hashes/\" + i0,schemaPath:\"#/$defs/missing_paths/properties/store_hashes/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}}else {const err46 = {instancePath:instancePath+\"/store_hashes\",schemaPath:\"#/$defs/missing_paths/properties/store_hashes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}}else {const err47 = {instancePath,schemaPath:\"#/$defs/missing_paths/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}var _valid0 = _errs41 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 7];}else {if(_valid0){valid0 = true;passing0 = 7;if(props0 !== true){props0 = true;}}const _errs49 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err48 = {instancePath,schemaPath:\"#/$defs/token_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}if(data.token === undefined){const err49 = {instancePath,schemaPath:\"#/$defs/token_response/required\",keyword:\"required\",params:{missingProperty: \"token\"},message:\"must have required property '\"+\"token\"+\"'\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}if(data.expires_at === undefined){const err50 = {instancePath,schemaPath:\"#/$defs/token_response/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}for(const key4 in data){if(!(((key4 === \"id\") || (key4 === \"token\")) || (key4 === \"expires_at\"))){const err51 = {instancePath,schemaPath:\"#/$defs/token_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key4},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.id !== undefined){let data15 = data.id;if(typeof data15 === \"string\"){if(func1(data15) > 128){const err52 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(func1(data15) < 1){const err53 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}}else {const err54 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}}if(data.token !== undefined){let data16 = data.token;if(typeof data16 === \"string\"){if(func1(data16) < 1){const err55 = {instancePath:instancePath+\"/token\",schemaPath:\"#/$defs/token_response/properties/token/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}else {const err56 = {instancePath:instancePath+\"/token\",schemaPath:\"#/$defs/token_response/properties/token/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}if(data.expires_at !== undefined){let data17 = data.expires_at;if(!(((typeof data17 == \"number\") && (!(data17 % 1) && !isNaN(data17))) && (isFinite(data17)))){const err57 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/$defs/token_response/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}if((typeof data17 == \"number\") && (isFinite(data17))){if(data17 < 1 || isNaN(data17)){const err58 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/$defs/token_response/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}}}else {const err59 = {instancePath,schemaPath:\"#/$defs/token_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}var _valid0 = _errs49 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 8];}else {if(_valid0){valid0 = true;passing0 = 8;if(props0 !== true){props0 = true;}}const _errs59 = errors;if(!(validate32(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate32.errors : vErrors.concat(validate32.errors);errors = vErrors.length;}var _valid0 = _errs59 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 9];}else {if(_valid0){valid0 = true;passing0 = 9;if(props0 !== true){props0 = true;}}const _errs60 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err60 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if(data.timestamp === undefined){const err61 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"timestamp\"},message:\"must have required property '\"+\"timestamp\"+\"'\"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}if(data.actor === undefined){const err62 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"actor\"},message:\"must have required property '\"+\"actor\"+\"'\"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(data.action === undefined){const err63 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"action\"},message:\"must have required property '\"+\"action\"+\"'\"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}if(data.resource === undefined){const err64 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"resource\"},message:\"must have required property '\"+\"resource\"+\"'\"};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}if(data.outcome === undefined){const err65 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"outcome\"},message:\"must have required property '\"+\"outcome\"+\"'\"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}if(data.metadata === undefined){const err66 = {instancePath,schemaPath:\"#/$defs/audit_event/required\",keyword:\"required\",params:{missingProperty: \"metadata\"},message:\"must have required property '\"+\"metadata\"+\"'\"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}for(const key5 in data){if(!(((((((key5 === \"id\") || (key5 === \"timestamp\")) || (key5 === \"actor\")) || (key5 === \"action\")) || (key5 === \"resource\")) || (key5 === \"outcome\")) || (key5 === \"metadata\"))){const err67 = {instancePath,schemaPath:\"#/$defs/audit_event/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key5},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}if(data.id !== undefined){let data18 = data.id;if(typeof data18 === \"string\"){if(func1(data18) > 256){const err68 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/audit_event/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}if(func1(data18) < 1){const err69 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/audit_event/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}}else {const err70 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/audit_event/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}if(data.timestamp !== undefined){let data19 = data.timestamp;if(!(((typeof data19 == \"number\") && (!(data19 % 1) && !isNaN(data19))) && (isFinite(data19)))){const err71 = {instancePath:instancePath+\"/timestamp\",schemaPath:\"#/$defs/audit_event/properties/timestamp/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}if((typeof data19 == \"number\") && (isFinite(data19))){if(data19 < 1 || isNaN(data19)){const err72 = {instancePath:instancePath+\"/timestamp\",schemaPath:\"#/$defs/audit_event/properties/timestamp/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}}if(data.actor !== undefined){let data20 = data.actor;if(typeof data20 === \"string\"){if(func1(data20) > 256){const err73 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/$defs/audit_event/properties/actor/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}if(func1(data20) < 1){const err74 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/$defs/audit_event/properties/actor/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}}else {const err75 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/$defs/audit_event/properties/actor/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err75];}else {vErrors.push(err75);}errors++;}}if(data.action !== undefined){let data21 = data.action;if(typeof data21 === \"string\"){if(func1(data21) > 128){const err76 = {instancePath:instancePath+\"/action\",schemaPath:\"#/$defs/audit_event/properties/action/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}if(func1(data21) < 1){const err77 = {instancePath:instancePath+\"/action\",schemaPath:\"#/$defs/audit_event/properties/action/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}}else {const err78 = {instancePath:instancePath+\"/action\",schemaPath:\"#/$defs/audit_event/properties/action/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}if(data.resource !== undefined){let data22 = data.resource;if(typeof data22 === \"string\"){if(func1(data22) > 512){const err79 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/$defs/audit_event/properties/resource/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err79];}else {vErrors.push(err79);}errors++;}if(func1(data22) < 1){const err80 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/$defs/audit_event/properties/resource/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err80];}else {vErrors.push(err80);}errors++;}}else {const err81 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/$defs/audit_event/properties/resource/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}if(data.outcome !== undefined){let data23 = data.outcome;if(typeof data23 !== \"string\"){const err82 = {instancePath:instancePath+\"/outcome\",schemaPath:\"#/$defs/audit_event/properties/outcome/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}if(!(((data23 === \"success\") || (data23 === \"accepted\")) || (data23 === \"failure\"))){const err83 = {instancePath:instancePath+\"/outcome\",schemaPath:\"#/$defs/audit_event/properties/outcome/enum\",keyword:\"enum\",params:{allowedValues: schema46.properties.outcome.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}if(data.metadata !== undefined){let data24 = data.metadata;if(data24 && typeof data24 == \"object\" && !Array.isArray(data24)){for(const key6 in data24){if(typeof data24[key6] !== \"string\"){const err84 = {instancePath:instancePath+\"/metadata/\" + key6.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/$defs/audit_event/properties/metadata/additionalProperties/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {instancePath:instancePath+\"/metadata\",schemaPath:\"#/$defs/audit_event/properties/metadata/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err85];}else {vErrors.push(err85);}errors++;}}}else {const err86 = {instancePath,schemaPath:\"#/$defs/audit_event/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err86];}else {vErrors.push(err86);}errors++;}var _valid0 = _errs60 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 10];}else {if(_valid0){valid0 = true;passing0 = 10;if(props0 !== true){props0 = true;}}const _errs81 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){for(const key7 in data){if(!(key7 === \"parts\")){const err87 = {instancePath,schemaPath:\"#/$defs/complete_upload/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key7},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}}if(data.parts !== undefined){let data26 = data.parts;if(Array.isArray(data26)){const len1 = data26.length;for(let i1=0; i1<len1; i1++){let data27 = data26[i1];if(data27 && typeof data27 == \"object\" && !Array.isArray(data27)){if(data27.part_number === undefined){const err88 = {instancePath:instancePath+\"/parts/\" + i1,schemaPath:\"#/$defs/complete_upload/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"part_number\"},message:\"must have required property '\"+\"part_number\"+\"'\"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}if(data27.etag === undefined){const err89 = {instancePath:instancePath+\"/parts/\" + i1,schemaPath:\"#/$defs/complete_upload/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"etag\"},message:\"must have required property '\"+\"etag\"+\"'\"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}for(const key8 in data27){if(!((key8 === \"part_number\") || (key8 === \"etag\"))){const err90 = {instancePath:instancePath+\"/parts/\" + i1,schemaPath:\"#/$defs/complete_upload/properties/parts/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key8},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err90];}else {vErrors.push(err90);}errors++;}}if(data27.part_number !== undefined){let data28 = data27.part_number;if(!(((typeof data28 == \"number\") && (!(data28 % 1) && !isNaN(data28))) && (isFinite(data28)))){const err91 = {instancePath:instancePath+\"/parts/\" + i1+\"/part_number\",schemaPath:\"#/$defs/complete_upload/properties/parts/items/properties/part_number/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err91];}else {vErrors.push(err91);}errors++;}if((typeof data28 == \"number\") && (isFinite(data28))){if(data28 < 1 || isNaN(data28)){const err92 = {instancePath:instancePath+\"/parts/\" + i1+\"/part_number\",schemaPath:\"#/$defs/complete_upload/properties/parts/items/properties/part_number/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err92];}else {vErrors.push(err92);}errors++;}}}if(data27.etag !== undefined){let data29 = data27.etag;if(typeof data29 === \"string\"){if(func1(data29) < 1){const err93 = {instancePath:instancePath+\"/parts/\" + i1+\"/etag\",schemaPath:\"#/$defs/complete_upload/properties/parts/items/properties/etag/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err93];}else {vErrors.push(err93);}errors++;}}else {const err94 = {instancePath:instancePath+\"/parts/\" + i1+\"/etag\",schemaPath:\"#/$defs/complete_upload/properties/parts/items/properties/etag/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}}else {const err95 = {instancePath:instancePath+\"/parts/\" + i1,schemaPath:\"#/$defs/complete_upload/properties/parts/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}}}else {const err96 = {instancePath:instancePath+\"/parts\",schemaPath:\"#/$defs/complete_upload/properties/parts/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}}else {const err97 = {instancePath,schemaPath:\"#/$defs/complete_upload/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;}var _valid0 = _errs81 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 11];}else {if(_valid0){valid0 = true;passing0 = 11;if(props0 !== true){props0 = true;}}}}}}}}}}}}}if(!valid0){const err98 = {instancePath,schemaPath:\"#/oneOf\",keyword:\"oneOf\",params:{passingSchemas: passing0},message:\"must match exactly one schema in oneOf\"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}else {errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){for(const key9 in data){const err99 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key9},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}else {const err100 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const RoleSchemaValidator = validate35;function validate35(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate35.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(!(((data === \"pull\") || (data === \"push\")) || (data === \"admin\"))){const err0 = {instancePath,schemaPath:\"#/enum\",keyword:\"enum\",params:{allowedValues: schema35.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}validate35.errors = vErrors;return errors === 0;}validate35.evaluated = {\"dynamicProps\":false,\"dynamicItems\":false};const GrantSchemaValidator = validate36;function validate36(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate36.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.cache === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.role === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"role\"},message:\"must have required property '\"+\"role\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"cache\") || (key0 === \"role\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.cache !== undefined){let data0 = data.cache;if(typeof data0 === \"string\"){if(!pattern5.test(data0)){const err3 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^(\\\\*|[a-z0-9_-]{1,64})$\"},message:\"must match pattern \\\"\"+\"^(\\\\*|[a-z0-9_-]{1,64})$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.role !== undefined){let data1 = data.role;if(!(((data1 === \"pull\") || (data1 === \"push\")) || (data1 === \"admin\"))){const err5 = {instancePath:instancePath+\"/role\",schemaPath:\"#/$defs/role/enum\",keyword:\"enum\",params:{allowedValues: schema35.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate36.errors = vErrors;return errors === 0;}validate36.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const ManifestSchemaValidator = validate37;function validate37(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate37.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.cache === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.store_hash === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"store_hash\"},message:\"must have required property '\"+\"store_hash\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.store_path === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"store_path\"},message:\"must have required property '\"+\"store_path\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.nar_hash === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_hash\"},message:\"must have required property '\"+\"nar_hash\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.nar_size === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_size\"},message:\"must have required property '\"+\"nar_size\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.references === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"references\"},message:\"must have required property '\"+\"references\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}for(const key0 in data){if(!((((((((key0 === \"cache\") || (key0 === \"store_hash\")) || (key0 === \"store_path\")) || (key0 === \"nar_hash\")) || (key0 === \"nar_size\")) || (key0 === \"references\")) || (key0 === \"deriver\")) || (key0 === \"ca\"))){const err6 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.cache !== undefined){let data0 = data.cache;if(typeof data0 === \"string\"){if(!pattern4.test(data0)){const err7 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/cache\",schemaPath:\"#/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.store_hash !== undefined){let data1 = data.store_hash;if(typeof data1 === \"string\"){if(!pattern7.test(data1)){const err9 = {instancePath:instancePath+\"/store_hash\",schemaPath:\"#/properties/store_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/store_hash\",schemaPath:\"#/properties/store_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.store_path !== undefined){let data2 = data.store_path;if(typeof data2 === \"string\"){if(func1(data2) > 512){const err11 = {instancePath:instancePath+\"/store_path\",schemaPath:\"#/properties/store_path/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(!pattern8.test(data2)){const err12 = {instancePath:instancePath+\"/store_path\",schemaPath:\"#/properties/store_path/pattern\",keyword:\"pattern\",params:{pattern: \"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"},message:\"must match pattern \\\"\"+\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/store_path\",schemaPath:\"#/properties/store_path/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.nar_hash !== undefined){let data3 = data.nar_hash;if(typeof data3 === \"string\"){if(!pattern9.test(data3)){const err14 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data.nar_size !== undefined){let data4 = data.nar_size;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err16 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 > 10737418240 || isNaN(data4)){const err17 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 10737418240},message:\"must be <= 10737418240\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}if(data4 < 1 || isNaN(data4)){const err18 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}}if(data.references !== undefined){let data5 = data.references;if(Array.isArray(data5)){if(data5.length > 1024){const err19 = {instancePath:instancePath+\"/references\",schemaPath:\"#/properties/references/maxItems\",keyword:\"maxItems\",params:{limit: 1024},message:\"must NOT have more than 1024 items\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}const len0 = data5.length;for(let i0=0; i0<len0; i0++){let data6 = data5[i0];if(typeof data6 === \"string\"){if(func1(data6) > 512){const err20 = {instancePath:instancePath+\"/references/\" + i0,schemaPath:\"#/properties/references/items/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/references/\" + i0,schemaPath:\"#/properties/references/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}}else {const err22 = {instancePath:instancePath+\"/references\",schemaPath:\"#/properties/references/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.deriver !== undefined){let data7 = data.deriver;if((typeof data7 !== \"string\") && (data7 !== null)){const err23 = {instancePath:instancePath+\"/deriver\",schemaPath:\"#/properties/deriver/type\",keyword:\"type\",params:{type: schema38.properties.deriver.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}if(typeof data7 === \"string\"){if(func1(data7) > 512){const err24 = {instancePath:instancePath+\"/deriver\",schemaPath:\"#/properties/deriver/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}if(data.ca !== undefined){let data8 = data.ca;if((typeof data8 !== \"string\") && (data8 !== null)){const err25 = {instancePath:instancePath+\"/ca\",schemaPath:\"#/properties/ca/type\",keyword:\"type\",params:{type: schema38.properties.ca.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if(typeof data8 === \"string\"){if(func1(data8) > 512){const err26 = {instancePath:instancePath+\"/ca\",schemaPath:\"#/properties/ca/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}}else {const err27 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}validate37.errors = vErrors;return errors === 0;}validate37.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const CreateCacheSchemaValidator = validate38;function validate38(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate38.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.name === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.quota_bytes === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((key0 === \"name\") || (key0 === \"public\")) || (key0 === \"quota_bytes\")) || (key0 === \"encoding_id\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.name !== undefined){let data0 = data.name;if(typeof data0 === \"string\"){if(!pattern4.test(data0)){const err3 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err5 = {instancePath:instancePath+\"/public\",schemaPath:\"#/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.quota_bytes !== undefined){let data2 = data.quota_bytes;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err6 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 > 9007199254740991 || isNaN(data2)){const err7 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data2 < 1 || isNaN(data2)){const err8 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err9 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}else {const err10 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}validate38.errors = vErrors;return errors === 0;}validate38.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const ConfigureCacheSchemaValidator = validate39;function validate39(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate39.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.public === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"public\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err2 = {instancePath:instancePath+\"/public\",schemaPath:\"#/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}}else {const err3 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}validate39.errors = vErrors;return errors === 0;}validate39.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const CacheSchemaValidator = validate40;function validate40(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate40.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.public === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.quota_bytes === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.logical_bytes === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.encoding_id === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data.created_at === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.lifecycle === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}for(const key0 in data){if(!((((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"public\")) || (key0 === \"quota_bytes\")) || (key0 === \"logical_bytes\")) || (key0 === \"encoding_id\")) || (key0 === \"created_at\")) || (key0 === \"lifecycle\"))){const err8 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err9 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(func1(data0) < 1){const err10 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(!pattern4.test(data1)){const err12 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err14 = {instancePath:instancePath+\"/public\",schemaPath:\"#/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.quota_bytes !== undefined){let data3 = data.quota_bytes;if(!(((typeof data3 == \"number\") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){const err15 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if((typeof data3 == \"number\") && (isFinite(data3))){if(data3 > 9007199254740991 || isNaN(data3)){const err16 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data3 < 1 || isNaN(data3)){const err17 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}}if(data.logical_bytes !== undefined){let data4 = data.logical_bytes;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err18 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 > 9007199254740991 || isNaN(data4)){const err19 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data4 < 0 || isNaN(data4)){const err20 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err21 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.created_at !== undefined){let data6 = data.created_at;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err22 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 < 1 || isNaN(data6)){const err23 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data.lifecycle !== undefined){let data7 = data.lifecycle;if(!(((data7 === \"CREATING\") || (data7 === \"ACTIVE\")) || (data7 === \"DELETING\"))){const err24 = {instancePath:instancePath+\"/lifecycle\",schemaPath:\"#/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema42.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}validate40.errors = vErrors;return errors === 0;}validate40.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const TokenRequestSchemaValidator = validate41;function validate41(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate41.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.subject === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.valid_for_seconds === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"valid_for_seconds\"},message:\"must have required property '\"+\"valid_for_seconds\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"subject\") || (key0 === \"valid_for_seconds\")) || (key0 === \"grants\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.subject !== undefined){let data0 = data.subject;if(typeof data0 === \"string\"){if(func1(data0) > 256){const err4 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.valid_for_seconds !== undefined){let data1 = data.valid_for_seconds;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err7 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 > 157680000 || isNaN(data1)){const err8 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 157680000},message:\"must be <= 157680000\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data1 < 1 || isNaN(data1)){const err9 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){if(data2.length > 256){const err10 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/maxItems\",keyword:\"maxItems\",params:{limit: 256},message:\"must NOT have more than 256 items\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(data2.length < 1){const err11 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err12 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}else {const err13 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}validate41.errors = vErrors;return errors === 0;}validate41.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const BootstrapRequestSchemaValidator = validate43;function validate43(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate43.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.subject === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.valid_for_seconds === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"valid_for_seconds\"},message:\"must have required property '\"+\"valid_for_seconds\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.secret === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"secret\"},message:\"must have required property '\"+\"secret\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((key0 === \"subject\") || (key0 === \"valid_for_seconds\")) || (key0 === \"grants\")) || (key0 === \"secret\"))){const err4 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.subject !== undefined){let data0 = data.subject;if(typeof data0 === \"string\"){if(func1(data0) > 256){const err5 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(func1(data0) < 1){const err6 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.valid_for_seconds !== undefined){let data1 = data.valid_for_seconds;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err8 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 > 157680000 || isNaN(data1)){const err9 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 157680000},message:\"must be <= 157680000\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data1 < 1 || isNaN(data1)){const err10 = {instancePath:instancePath+\"/valid_for_seconds\",schemaPath:\"#/properties/valid_for_seconds/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){if(data2.length > 256){const err11 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/maxItems\",keyword:\"maxItems\",params:{limit: 256},message:\"must NOT have more than 256 items\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data2.length < 1){const err12 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err13 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.secret !== undefined){let data4 = data.secret;if(typeof data4 === \"string\"){if(func1(data4) < 1){const err14 = {instancePath:instancePath+\"/secret\",schemaPath:\"#/properties/secret/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+\"/secret\",schemaPath:\"#/properties/secret/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}else {const err16 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}validate43.errors = vErrors;return errors === 0;}validate43.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const UploadRequestSchemaValidator = validate45;function validate45(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate45.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.manifest === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"manifest\"},message:\"must have required property '\"+\"manifest\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.compressed_size === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"compressed_size\"},message:\"must have required property '\"+\"compressed_size\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"manifest\") || (key0 === \"compressed_size\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.manifest !== undefined){let data0 = data.manifest;if(data0 && typeof data0 == \"object\" && !Array.isArray(data0)){if(data0.cache === undefined){const err3 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data0.store_hash === undefined){const err4 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"store_hash\"},message:\"must have required property '\"+\"store_hash\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data0.store_path === undefined){const err5 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"store_path\"},message:\"must have required property '\"+\"store_path\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data0.nar_hash === undefined){const err6 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"nar_hash\"},message:\"must have required property '\"+\"nar_hash\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data0.nar_size === undefined){const err7 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"nar_size\"},message:\"must have required property '\"+\"nar_size\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data0.references === undefined){const err8 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/required\",keyword:\"required\",params:{missingProperty: \"references\"},message:\"must have required property '\"+\"references\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}for(const key1 in data0){if(!((((((((key1 === \"cache\") || (key1 === \"store_hash\")) || (key1 === \"store_path\")) || (key1 === \"nar_hash\")) || (key1 === \"nar_size\")) || (key1 === \"references\")) || (key1 === \"deriver\")) || (key1 === \"ca\"))){const err9 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data0.cache !== undefined){let data1 = data0.cache;if(typeof data1 === \"string\"){if(!pattern4.test(data1)){const err10 = {instancePath:instancePath+\"/manifest/cache\",schemaPath:\"#/$defs/manifest/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/manifest/cache\",schemaPath:\"#/$defs/manifest/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data0.store_hash !== undefined){let data2 = data0.store_hash;if(typeof data2 === \"string\"){if(!pattern7.test(data2)){const err12 = {instancePath:instancePath+\"/manifest/store_hash\",schemaPath:\"#/$defs/manifest/properties/store_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/manifest/store_hash\",schemaPath:\"#/$defs/manifest/properties/store_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data0.store_path !== undefined){let data3 = data0.store_path;if(typeof data3 === \"string\"){if(func1(data3) > 512){const err14 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(!pattern8.test(data3)){const err15 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/pattern\",keyword:\"pattern\",params:{pattern: \"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"},message:\"must match pattern \\\"\"+\"^/nix/store/[0-9abcdfghijklmnpqrsvwxyz]{32}-.+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/manifest/store_path\",schemaPath:\"#/$defs/manifest/properties/store_path/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data0.nar_hash !== undefined){let data4 = data0.nar_hash;if(typeof data4 === \"string\"){if(!pattern9.test(data4)){const err17 = {instancePath:instancePath+\"/manifest/nar_hash\",schemaPath:\"#/$defs/manifest/properties/nar_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/manifest/nar_hash\",schemaPath:\"#/$defs/manifest/properties/nar_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data0.nar_size !== undefined){let data5 = data0.nar_size;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err19 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 > 10737418240 || isNaN(data5)){const err20 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 10737418240},message:\"must be <= 10737418240\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}if(data5 < 1 || isNaN(data5)){const err21 = {instancePath:instancePath+\"/manifest/nar_size\",schemaPath:\"#/$defs/manifest/properties/nar_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}}if(data0.references !== undefined){let data6 = data0.references;if(Array.isArray(data6)){if(data6.length > 1024){const err22 = {instancePath:instancePath+\"/manifest/references\",schemaPath:\"#/$defs/manifest/properties/references/maxItems\",keyword:\"maxItems\",params:{limit: 1024},message:\"must NOT have more than 1024 items\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}const len0 = data6.length;for(let i0=0; i0<len0; i0++){let data7 = data6[i0];if(typeof data7 === \"string\"){if(func1(data7) > 512){const err23 = {instancePath:instancePath+\"/manifest/references/\" + i0,schemaPath:\"#/$defs/manifest/properties/references/items/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}else {const err24 = {instancePath:instancePath+\"/manifest/references/\" + i0,schemaPath:\"#/$defs/manifest/properties/references/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath:instancePath+\"/manifest/references\",schemaPath:\"#/$defs/manifest/properties/references/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data0.deriver !== undefined){let data8 = data0.deriver;if((typeof data8 !== \"string\") && (data8 !== null)){const err26 = {instancePath:instancePath+\"/manifest/deriver\",schemaPath:\"#/$defs/manifest/properties/deriver/type\",keyword:\"type\",params:{type: schema38.properties.deriver.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(typeof data8 === \"string\"){if(func1(data8) > 512){const err27 = {instancePath:instancePath+\"/manifest/deriver\",schemaPath:\"#/$defs/manifest/properties/deriver/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}if(data0.ca !== undefined){let data9 = data0.ca;if((typeof data9 !== \"string\") && (data9 !== null)){const err28 = {instancePath:instancePath+\"/manifest/ca\",schemaPath:\"#/$defs/manifest/properties/ca/type\",keyword:\"type\",params:{type: schema38.properties.ca.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}if(typeof data9 === \"string\"){if(func1(data9) > 512){const err29 = {instancePath:instancePath+\"/manifest/ca\",schemaPath:\"#/$defs/manifest/properties/ca/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}}}else {const err30 = {instancePath:instancePath+\"/manifest\",schemaPath:\"#/$defs/manifest/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}if(data.compressed_size !== undefined){let data10 = data.compressed_size;if(!(((typeof data10 == \"number\") && (!(data10 % 1) && !isNaN(data10))) && (isFinite(data10)))){const err31 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if((typeof data10 == \"number\") && (isFinite(data10))){if(data10 > 12884901888 || isNaN(data10)){const err32 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 12884901888},message:\"must be <= 12884901888\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}if(data10 < 1 || isNaN(data10)){const err33 = {instancePath:instancePath+\"/compressed_size\",schemaPath:\"#/properties/compressed_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}}else {const err34 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}validate45.errors = vErrors;return errors === 0;}validate45.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const MissingPathsSchemaValidator = validate46;function validate46(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate46.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.store_hashes === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"store_hashes\"},message:\"must have required property '\"+\"store_hashes\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"store_hashes\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.store_hashes !== undefined){let data0 = data.store_hashes;if(Array.isArray(data0)){if(data0.length > 100){const err2 = {instancePath:instancePath+\"/store_hashes\",schemaPath:\"#/properties/store_hashes/maxItems\",keyword:\"maxItems\",params:{limit: 100},message:\"must NOT have more than 100 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern7.test(data1)){const err3 = {instancePath:instancePath+\"/store_hashes/\" + i0,schemaPath:\"#/properties/store_hashes/items/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/store_hashes/\" + i0,schemaPath:\"#/properties/store_hashes/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath:instancePath+\"/store_hashes\",schemaPath:\"#/properties/store_hashes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate46.errors = vErrors;return errors === 0;}validate46.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const UploadStatusSchemaValidator = validate47;function validate47(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate47.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(!(((((((((data === \"CREATED\") || (data === \"UPLOADING\")) || (data === \"COMPLETING\")) || (data === \"QUEUED\")) || (data === \"PROCESSING\")) || (data === \"PUBLISHING\")) || (data === \"READY\")) || (data === \"FAILED\")) || (data === \"ABORTED\"))){const err0 = {instancePath,schemaPath:\"#/enum\",keyword:\"enum\",params:{allowedValues: schema40.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}validate47.errors = vErrors;return errors === 0;}validate47.evaluated = {\"dynamicProps\":false,\"dynamicItems\":false};const UploadStateSchemaValidator = validate48;function validate48(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate48.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.status === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.error === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"id\") || (key0 === \"status\")) || (key0 === \"error\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.status !== undefined){let data1 = data.status;if(!(((((((((data1 === \"CREATED\") || (data1 === \"UPLOADING\")) || (data1 === \"COMPLETING\")) || (data1 === \"QUEUED\")) || (data1 === \"PROCESSING\")) || (data1 === \"PUBLISHING\")) || (data1 === \"READY\")) || (data1 === \"FAILED\")) || (data1 === \"ABORTED\"))){const err7 = {instancePath:instancePath+\"/status\",schemaPath:\"#/$defs/upload_status/enum\",keyword:\"enum\",params:{allowedValues: schema40.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.error !== undefined){let data2 = data.error;if((typeof data2 !== \"string\") && (data2 !== null)){const err8 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/type\",keyword:\"type\",params:{type: schema39.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(typeof data2 === \"string\"){if(func1(data2) > 2000){const err9 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}}else {const err10 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}validate48.errors = vErrors;return errors === 0;}validate48.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const TokenResponseSchemaValidator = validate49;function validate49(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate49.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.token === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"token\"},message:\"must have required property '\"+\"token\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.expires_at === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"id\") || (key0 === \"token\")) || (key0 === \"expires_at\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.token !== undefined){let data1 = data.token;if(typeof data1 === \"string\"){if(func1(data1) < 1){const err7 = {instancePath:instancePath+\"/token\",schemaPath:\"#/properties/token/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/token\",schemaPath:\"#/properties/token/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.expires_at !== undefined){let data2 = data.expires_at;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err9 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 < 1 || isNaN(data2)){const err10 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate49.errors = vErrors;return errors === 0;}validate49.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const TokenSummarySchemaValidator = validate50;function validate50(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate50.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.subject === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.issued_at === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.expires_at === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.revoked === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"revoked\"},message:\"must have required property '\"+\"revoked\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"subject\")) || (key0 === \"grants\")) || (key0 === \"issued_at\")) || (key0 === \"expires_at\")) || (key0 === \"revoked\"))){const err6 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.id !== undefined){if(typeof data.id !== \"string\"){const err7 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.subject !== undefined){if(typeof data.subject !== \"string\"){const err8 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){const len0 = data2.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data2[i0], {instancePath:instancePath+\"/grants/\" + i0,parentData:data2,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err9 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.issued_at !== undefined){let data4 = data.issued_at;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err10 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 < 1 || isNaN(data4)){const err11 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}if(data.expires_at !== undefined){let data5 = data.expires_at;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err12 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 < 1 || isNaN(data5)){const err13 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}if(data.revoked !== undefined){if(typeof data.revoked !== \"boolean\"){const err14 = {instancePath:instancePath+\"/revoked\",schemaPath:\"#/properties/revoked/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}}else {const err15 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}validate50.errors = vErrors;return errors === 0;}validate50.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const AuditEventSchemaValidator = validate52;function validate52(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate52.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.timestamp === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"timestamp\"},message:\"must have required property '\"+\"timestamp\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.actor === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"actor\"},message:\"must have required property '\"+\"actor\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.action === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"action\"},message:\"must have required property '\"+\"action\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.resource === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"resource\"},message:\"must have required property '\"+\"resource\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.outcome === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"outcome\"},message:\"must have required property '\"+\"outcome\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data.metadata === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"metadata\"},message:\"must have required property '\"+\"metadata\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}for(const key0 in data){if(!(((((((key0 === \"id\") || (key0 === \"timestamp\")) || (key0 === \"actor\")) || (key0 === \"action\")) || (key0 === \"resource\")) || (key0 === \"outcome\")) || (key0 === \"metadata\"))){const err7 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 256){const err8 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(func1(data0) < 1){const err9 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.timestamp !== undefined){let data1 = data.timestamp;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err11 = {instancePath:instancePath+\"/timestamp\",schemaPath:\"#/properties/timestamp/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 < 1 || isNaN(data1)){const err12 = {instancePath:instancePath+\"/timestamp\",schemaPath:\"#/properties/timestamp/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}if(data.actor !== undefined){let data2 = data.actor;if(typeof data2 === \"string\"){if(func1(data2) > 256){const err13 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/properties/actor/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(func1(data2) < 1){const err14 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/properties/actor/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+\"/actor\",schemaPath:\"#/properties/actor/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data.action !== undefined){let data3 = data.action;if(typeof data3 === \"string\"){if(func1(data3) > 128){const err16 = {instancePath:instancePath+\"/action\",schemaPath:\"#/properties/action/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(func1(data3) < 1){const err17 = {instancePath:instancePath+\"/action\",schemaPath:\"#/properties/action/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/action\",schemaPath:\"#/properties/action/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.resource !== undefined){let data4 = data.resource;if(typeof data4 === \"string\"){if(func1(data4) > 512){const err19 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/properties/resource/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(func1(data4) < 1){const err20 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/properties/resource/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/resource\",schemaPath:\"#/properties/resource/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.outcome !== undefined){let data5 = data.outcome;if(typeof data5 !== \"string\"){const err22 = {instancePath:instancePath+\"/outcome\",schemaPath:\"#/properties/outcome/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(!(((data5 === \"success\") || (data5 === \"accepted\")) || (data5 === \"failure\"))){const err23 = {instancePath:instancePath+\"/outcome\",schemaPath:\"#/properties/outcome/enum\",keyword:\"enum\",params:{allowedValues: schema46.properties.outcome.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data.metadata !== undefined){let data6 = data.metadata;if(data6 && typeof data6 == \"object\" && !Array.isArray(data6)){for(const key1 in data6){if(typeof data6[key1] !== \"string\"){const err24 = {instancePath:instancePath+\"/metadata/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/metadata/additionalProperties/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath:instancePath+\"/metadata\",schemaPath:\"#/properties/metadata/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}else {const err26 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}validate52.errors = vErrors;return errors === 0;}validate52.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const CompleteUploadSchemaValidator = validate53;function validate53(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate53.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){for(const key0 in data){if(!(key0 === \"parts\")){const err0 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}}if(data.parts !== undefined){let data0 = data.parts;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.part_number === undefined){const err1 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"part_number\"},message:\"must have required property '\"+\"part_number\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data1.etag === undefined){const err2 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"etag\"},message:\"must have required property '\"+\"etag\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key1 in data1){if(!((key1 === \"part_number\") || (key1 === \"etag\"))){const err3 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data1.part_number !== undefined){let data2 = data1.part_number;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err4 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/properties/parts/items/properties/part_number/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 < 1 || isNaN(data2)){const err5 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/properties/parts/items/properties/part_number/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}if(data1.etag !== undefined){let data3 = data1.etag;if(typeof data3 === \"string\"){if(func1(data3) < 1){const err6 = {instancePath:instancePath+\"/parts/\" + i0+\"/etag\",schemaPath:\"#/properties/parts/items/properties/etag/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/parts/\" + i0+\"/etag\",schemaPath:\"#/properties/parts/items/properties/etag/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}else {const err8 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath:instancePath+\"/parts\",schemaPath:\"#/properties/parts/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}else {const err10 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}validate53.errors = vErrors;return errors === 0;}validate53.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const ChunkManifestSchemaValidator = validate54;const schema67 = {\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"$id\":\"https://cf-nix-cache.dev/schemas/manifest.json\",\"title\":\"cf-nix-cache chunk manifest\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"encoding_id\",\"nar_hash\",\"nar_size\",\"file_hash\",\"file_size\",\"chunks\",\"processing_version\",\"created_at\"],\"properties\":{\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},\"nar_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"nar_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":10737418240},\"file_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"file_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":12884901888},\"chunks\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"raw_hash\",\"raw_size\",\"compressed_hash\",\"compressed_size\",\"key\"],\"properties\":{\"raw_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"raw_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"compressed_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"compressed_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"key\":{\"type\":\"string\",\"pattern\":\"^chunks/[^/]+/sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}\\\\.zst$\"}}}},\"processing_version\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":64},\"created_at\":{\"type\":\"integer\",\"minimum\":1}}};const pattern28 = new RegExp(\"^chunks/[^/]+/sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}\\\\.zst$\", \"u\");function validate54(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL=\"https://cf-nix-cache.dev/schemas/manifest.json\" */;let vErrors = null;let errors = 0;const evaluated0 = validate54.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.encoding_id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.nar_hash === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_hash\"},message:\"must have required property '\"+\"nar_hash\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.nar_size === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_size\"},message:\"must have required property '\"+\"nar_size\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.file_hash === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"file_hash\"},message:\"must have required property '\"+\"file_hash\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.file_size === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"file_size\"},message:\"must have required property '\"+\"file_size\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.chunks === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"chunks\"},message:\"must have required property '\"+\"chunks\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data.processing_version === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"processing_version\"},message:\"must have required property '\"+\"processing_version\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.created_at === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}for(const key0 in data){if(!((((((((key0 === \"encoding_id\") || (key0 === \"nar_hash\")) || (key0 === \"nar_size\")) || (key0 === \"file_hash\")) || (key0 === \"file_size\")) || (key0 === \"chunks\")) || (key0 === \"processing_version\")) || (key0 === \"created_at\"))){const err8 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err9 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.nar_hash !== undefined){let data1 = data.nar_hash;if(typeof data1 === \"string\"){if(!pattern9.test(data1)){const err10 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.nar_size !== undefined){let data2 = data.nar_size;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err12 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 > 10737418240 || isNaN(data2)){const err13 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 10737418240},message:\"must be <= 10737418240\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(data2 < 1 || isNaN(data2)){const err14 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}}if(data.file_hash !== undefined){let data3 = data.file_hash;if(typeof data3 === \"string\"){if(!pattern9.test(data3)){const err15 = {instancePath:instancePath+\"/file_hash\",schemaPath:\"#/properties/file_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/file_hash\",schemaPath:\"#/properties/file_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.file_size !== undefined){let data4 = data.file_size;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err17 = {instancePath:instancePath+\"/file_size\",schemaPath:\"#/properties/file_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 > 12884901888 || isNaN(data4)){const err18 = {instancePath:instancePath+\"/file_size\",schemaPath:\"#/properties/file_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 12884901888},message:\"must be <= 12884901888\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if(data4 < 1 || isNaN(data4)){const err19 = {instancePath:instancePath+\"/file_size\",schemaPath:\"#/properties/file_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}if(data.chunks !== undefined){let data5 = data.chunks;if(Array.isArray(data5)){if(data5.length < 1){const err20 = {instancePath:instancePath+\"/chunks\",schemaPath:\"#/properties/chunks/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}const len0 = data5.length;for(let i0=0; i0<len0; i0++){let data6 = data5[i0];if(data6 && typeof data6 == \"object\" && !Array.isArray(data6)){if(data6.raw_hash === undefined){const err21 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/required\",keyword:\"required\",params:{missingProperty: \"raw_hash\"},message:\"must have required property '\"+\"raw_hash\"+\"'\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if(data6.raw_size === undefined){const err22 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/required\",keyword:\"required\",params:{missingProperty: \"raw_size\"},message:\"must have required property '\"+\"raw_size\"+\"'\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(data6.compressed_hash === undefined){const err23 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/required\",keyword:\"required\",params:{missingProperty: \"compressed_hash\"},message:\"must have required property '\"+\"compressed_hash\"+\"'\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}if(data6.compressed_size === undefined){const err24 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/required\",keyword:\"required\",params:{missingProperty: \"compressed_size\"},message:\"must have required property '\"+\"compressed_size\"+\"'\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}if(data6.key === undefined){const err25 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/required\",keyword:\"required\",params:{missingProperty: \"key\"},message:\"must have required property '\"+\"key\"+\"'\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}for(const key1 in data6){if(!(((((key1 === \"raw_hash\") || (key1 === \"raw_size\")) || (key1 === \"compressed_hash\")) || (key1 === \"compressed_size\")) || (key1 === \"key\"))){const err26 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data6.raw_hash !== undefined){let data7 = data6.raw_hash;if(typeof data7 === \"string\"){if(!pattern9.test(data7)){const err27 = {instancePath:instancePath+\"/chunks/\" + i0+\"/raw_hash\",schemaPath:\"#/properties/chunks/items/properties/raw_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}else {const err28 = {instancePath:instancePath+\"/chunks/\" + i0+\"/raw_hash\",schemaPath:\"#/properties/chunks/items/properties/raw_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data6.raw_size !== undefined){let data8 = data6.raw_size;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err29 = {instancePath:instancePath+\"/chunks/\" + i0+\"/raw_size\",schemaPath:\"#/properties/chunks/items/properties/raw_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 > 9007199254740991 || isNaN(data8)){const err30 = {instancePath:instancePath+\"/chunks/\" + i0+\"/raw_size\",schemaPath:\"#/properties/chunks/items/properties/raw_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}if(data8 < 1 || isNaN(data8)){const err31 = {instancePath:instancePath+\"/chunks/\" + i0+\"/raw_size\",schemaPath:\"#/properties/chunks/items/properties/raw_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}}if(data6.compressed_hash !== undefined){let data9 = data6.compressed_hash;if(typeof data9 === \"string\"){if(!pattern9.test(data9)){const err32 = {instancePath:instancePath+\"/chunks/\" + i0+\"/compressed_hash\",schemaPath:\"#/properties/chunks/items/properties/compressed_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+\"/chunks/\" + i0+\"/compressed_hash\",schemaPath:\"#/properties/chunks/items/properties/compressed_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}if(data6.compressed_size !== undefined){let data10 = data6.compressed_size;if(!(((typeof data10 == \"number\") && (!(data10 % 1) && !isNaN(data10))) && (isFinite(data10)))){const err34 = {instancePath:instancePath+\"/chunks/\" + i0+\"/compressed_size\",schemaPath:\"#/properties/chunks/items/properties/compressed_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}if((typeof data10 == \"number\") && (isFinite(data10))){if(data10 > 9007199254740991 || isNaN(data10)){const err35 = {instancePath:instancePath+\"/chunks/\" + i0+\"/compressed_size\",schemaPath:\"#/properties/chunks/items/properties/compressed_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}if(data10 < 1 || isNaN(data10)){const err36 = {instancePath:instancePath+\"/chunks/\" + i0+\"/compressed_size\",schemaPath:\"#/properties/chunks/items/properties/compressed_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}}if(data6.key !== undefined){let data11 = data6.key;if(typeof data11 === \"string\"){if(!pattern28.test(data11)){const err37 = {instancePath:instancePath+\"/chunks/\" + i0+\"/key\",schemaPath:\"#/properties/chunks/items/properties/key/pattern\",keyword:\"pattern\",params:{pattern: \"^chunks/[^/]+/sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}\\\\.zst$\"},message:\"must match pattern \\\"\"+\"^chunks/[^/]+/sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}\\\\.zst$\"+\"\\\"\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}else {const err38 = {instancePath:instancePath+\"/chunks/\" + i0+\"/key\",schemaPath:\"#/properties/chunks/items/properties/key/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}}else {const err39 = {instancePath:instancePath+\"/chunks/\" + i0,schemaPath:\"#/properties/chunks/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}}else {const err40 = {instancePath:instancePath+\"/chunks\",schemaPath:\"#/properties/chunks/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.processing_version !== undefined){let data12 = data.processing_version;if(typeof data12 === \"string\"){if(func1(data12) > 64){const err41 = {instancePath:instancePath+\"/processing_version\",schemaPath:\"#/properties/processing_version/maxLength\",keyword:\"maxLength\",params:{limit: 64},message:\"must NOT have more than 64 characters\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}if(func1(data12) < 1){const err42 = {instancePath:instancePath+\"/processing_version\",schemaPath:\"#/properties/processing_version/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}else {const err43 = {instancePath:instancePath+\"/processing_version\",schemaPath:\"#/properties/processing_version/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.created_at !== undefined){let data13 = data.created_at;if(!(((typeof data13 == \"number\") && (!(data13 % 1) && !isNaN(data13))) && (isFinite(data13)))){const err44 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}if((typeof data13 == \"number\") && (isFinite(data13))){if(data13 < 1 || isNaN(data13)){const err45 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}}}else {const err46 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}validate54.errors = vErrors;return errors === 0;}validate54.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const ProcessorJobSchemaValidator = validate55;const schema68 = {\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"$id\":\"https://cf-nix-cache.dev/schemas/process-job.json\",\"title\":\"cf-nix-cache processor job\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"job_id\",\"staging_key\",\"nar_hash\",\"nar_size\",\"encoding_id\"],\"properties\":{\"job_id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"staging_key\":{\"type\":\"string\",\"pattern\":\"^staging/[A-Za-z0-9_-]+\\\\.nar\\\\.zst$\"},\"nar_hash\":{\"type\":\"string\",\"pattern\":\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},\"nar_size\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":10737418240},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"}}};const pattern29 = new RegExp(\"^staging/[A-Za-z0-9_-]+\\\\.nar\\\\.zst$\", \"u\");function validate55(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL=\"https://cf-nix-cache.dev/schemas/process-job.json\" */;let vErrors = null;let errors = 0;const evaluated0 = validate55.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.job_id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"job_id\"},message:\"must have required property '\"+\"job_id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.staging_key === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"staging_key\"},message:\"must have required property '\"+\"staging_key\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.nar_hash === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_hash\"},message:\"must have required property '\"+\"nar_hash\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.nar_size === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"nar_size\"},message:\"must have required property '\"+\"nar_size\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.encoding_id === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}for(const key0 in data){if(!(((((key0 === \"job_id\") || (key0 === \"staging_key\")) || (key0 === \"nar_hash\")) || (key0 === \"nar_size\")) || (key0 === \"encoding_id\"))){const err5 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.job_id !== undefined){let data0 = data.job_id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err6 = {instancePath:instancePath+\"/job_id\",schemaPath:\"#/properties/job_id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(func1(data0) < 1){const err7 = {instancePath:instancePath+\"/job_id\",schemaPath:\"#/properties/job_id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/job_id\",schemaPath:\"#/properties/job_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.staging_key !== undefined){let data1 = data.staging_key;if(typeof data1 === \"string\"){if(!pattern29.test(data1)){const err9 = {instancePath:instancePath+\"/staging_key\",schemaPath:\"#/properties/staging_key/pattern\",keyword:\"pattern\",params:{pattern: \"^staging/[A-Za-z0-9_-]+\\\\.nar\\\\.zst$\"},message:\"must match pattern \\\"\"+\"^staging/[A-Za-z0-9_-]+\\\\.nar\\\\.zst$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/staging_key\",schemaPath:\"#/properties/staging_key/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.nar_hash !== undefined){let data2 = data.nar_hash;if(typeof data2 === \"string\"){if(!pattern9.test(data2)){const err11 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/pattern\",keyword:\"pattern\",params:{pattern: \"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"},message:\"must match pattern \\\"\"+\"^sha256:[0-9abcdfghijklmnpqrsvwxyz]{52}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/nar_hash\",schemaPath:\"#/properties/nar_hash/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.nar_size !== undefined){let data3 = data.nar_size;if(!(((typeof data3 == \"number\") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){const err13 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if((typeof data3 == \"number\") && (isFinite(data3))){if(data3 > 10737418240 || isNaN(data3)){const err14 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 10737418240},message:\"must be <= 10737418240\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data3 < 1 || isNaN(data3)){const err15 = {instancePath:instancePath+\"/nar_size\",schemaPath:\"#/properties/nar_size/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err16 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}}else {const err17 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}validate55.errors = vErrors;return errors === 0;}validate55.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const APIResponsesSchemaValidator = validate56;const schema69 = {\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"$id\":\"https://cf-nix-cache.dev/schemas/responses.json\",\"title\":\"cf-nix-cache API responses\",\"oneOf\":[{\"$ref\":\"#/$defs/api_error\"},{\"$ref\":\"#/$defs/cache_response\"},{\"$ref\":\"#/$defs/cache_page\"},{\"$ref\":\"#/$defs/upload_state_response\"},{\"$ref\":\"#/$defs/initiate_upload_response\"},{\"$ref\":\"#/$defs/token_issue_response\"},{\"$ref\":\"#/$defs/token_page_response\"},{\"$ref\":\"#/$defs/audit_page\"},{\"$ref\":\"#/$defs/missing_paths_response\"}],\"$defs\":{\"api_error\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"code\",\"message\",\"request_id\"],\"properties\":{\"code\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"message\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":2000},\"request_id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128}}},\"cache_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\",\"public\",\"quota_bytes\",\"logical_bytes\",\"encoding_id\",\"created_at\",\"lifecycle\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\"},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"logical_bytes\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},\"created_at\":{\"type\":\"integer\",\"minimum\":1},\"lifecycle\":{\"enum\":[\"CREATING\",\"ACTIVE\",\"DELETING\"]}}},\"cache_page\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/cache_response\"}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}},\"upload_state_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000}}},\"initiate_upload_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\",\"parts\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000},\"parts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"part_number\",\"url\"],\"properties\":{\"part_number\":{\"type\":\"integer\",\"minimum\":1},\"url\":{\"type\":\"string\",\"minLength\":1}}}}}},\"token_issue_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"token\",\"expires_at\",\"repeated\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"token\":{\"type\":\"string\",\"minLength\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"repeated\":{\"type\":\"boolean\"}}},\"response_token_summary\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"subject\",\"grants\",\"issued_at\",\"expires_at\",\"revoked\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"subject\":{\"type\":\"string\",\"minLength\":1},\"grants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"role\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^(\\\\*|[a-z0-9_-]{1,64})$\"},\"role\":{\"enum\":[\"pull\",\"push\",\"admin\"]}}}},\"issued_at\":{\"type\":\"integer\",\"minimum\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"revoked\":{\"type\":\"boolean\"}}},\"token_page_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/response_token_summary\"}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}},\"audit_page\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"timestamp\",\"actor\",\"action\",\"resource\",\"outcome\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"timestamp\":{\"type\":\"integer\",\"minimum\":1},\"actor\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"action\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"resource\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"outcome\":{\"enum\":[\"success\",\"accepted\",\"failure\"]},\"metadata\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}},\"missing_paths_response\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"missing\"],\"properties\":{\"missing\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"}}}}}};const schema70 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"code\",\"message\",\"request_id\"],\"properties\":{\"code\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"message\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":2000},\"request_id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128}}};const schema71 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\",\"public\",\"quota_bytes\",\"logical_bytes\",\"encoding_id\",\"created_at\",\"lifecycle\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"name\":{\"type\":\"string\",\"pattern\":\"^[a-z0-9_-]{1,64}$\"},\"public\":{\"type\":\"boolean\"},\"quota_bytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":9007199254740991},\"logical_bytes\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"encoding_id\":{\"const\":\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},\"created_at\":{\"type\":\"integer\",\"minimum\":1},\"lifecycle\":{\"enum\":[\"CREATING\",\"ACTIVE\",\"DELETING\"]}}};const schema74 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000}}};const schema75 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"status\",\"error\",\"parts\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"status\":{\"enum\":[\"CREATED\",\"UPLOADING\",\"COMPLETING\",\"QUEUED\",\"PROCESSING\",\"PUBLISHING\",\"READY\",\"FAILED\",\"ABORTED\"]},\"error\":{\"type\":[\"string\",\"null\"],\"maxLength\":2000},\"parts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"part_number\",\"url\"],\"properties\":{\"part_number\":{\"type\":\"integer\",\"minimum\":1},\"url\":{\"type\":\"string\",\"minLength\":1}}}}}};const schema76 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"token\",\"expires_at\",\"repeated\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"token\":{\"type\":\"string\",\"minLength\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"repeated\":{\"type\":\"boolean\"}}};const schema79 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"timestamp\",\"actor\",\"action\",\"resource\",\"outcome\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"timestamp\":{\"type\":\"integer\",\"minimum\":1},\"actor\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"action\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"resource\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"outcome\":{\"enum\":[\"success\",\"accepted\",\"failure\"]},\"metadata\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}};const schema80 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"missing\"],\"properties\":{\"missing\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"}}}};const schema72 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/cache_response\"}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}};function validate57(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate57.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.next_cursor === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"items\") || (key0 === \"next_cursor\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.items !== undefined){let data0 = data.items;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.id === undefined){const err3 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data1.name === undefined){const err4 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data1.public === undefined){const err5 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data1.quota_bytes === undefined){const err6 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data1.logical_bytes === undefined){const err7 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data1.encoding_id === undefined){const err8 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data1.created_at === undefined){const err9 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data1.lifecycle === undefined){const err10 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key1 in data1){if(!((((((((key1 === \"id\") || (key1 === \"name\")) || (key1 === \"public\")) || (key1 === \"quota_bytes\")) || (key1 === \"logical_bytes\")) || (key1 === \"encoding_id\")) || (key1 === \"created_at\")) || (key1 === \"lifecycle\"))){const err11 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data1.id !== undefined){let data2 = data1.id;if(typeof data2 === \"string\"){if(func1(data2) > 128){const err12 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if(func1(data2) < 1){const err13 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}else {const err14 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data1.name !== undefined){let data3 = data1.name;if(typeof data3 === \"string\"){if(!pattern4.test(data3)){const err15 = {instancePath:instancePath+\"/items/\" + i0+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/items/\" + i0+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data1.public !== undefined){if(typeof data1.public !== \"boolean\"){const err17 = {instancePath:instancePath+\"/items/\" + i0+\"/public\",schemaPath:\"#/$defs/cache_response/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data1.quota_bytes !== undefined){let data5 = data1.quota_bytes;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err18 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 > 9007199254740991 || isNaN(data5)){const err19 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data5 < 1 || isNaN(data5)){const err20 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data1.logical_bytes !== undefined){let data6 = data1.logical_bytes;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err21 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 > 9007199254740991 || isNaN(data6)){const err22 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(data6 < 0 || isNaN(data6)){const err23 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data1.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data1.encoding_id){const err24 = {instancePath:instancePath+\"/items/\" + i0+\"/encoding_id\",schemaPath:\"#/$defs/cache_response/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.created_at !== undefined){let data8 = data1.created_at;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err25 = {instancePath:instancePath+\"/items/\" + i0+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 < 1 || isNaN(data8)){const err26 = {instancePath:instancePath+\"/items/\" + i0+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}if(data1.lifecycle !== undefined){let data9 = data1.lifecycle;if(!(((data9 === \"CREATING\") || (data9 === \"ACTIVE\")) || (data9 === \"DELETING\"))){const err27 = {instancePath:instancePath+\"/items/\" + i0+\"/lifecycle\",schemaPath:\"#/$defs/cache_response/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema71.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}}else {const err29 = {instancePath:instancePath+\"/items\",schemaPath:\"#/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.next_cursor !== undefined){let data10 = data.next_cursor;if((typeof data10 !== \"string\") && (data10 !== null)){const err30 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/properties/next_cursor/type\",keyword:\"type\",params:{type: schema72.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}else {const err31 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}validate57.errors = vErrors;return errors === 0;}validate57.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const schema77 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"items\",\"next_cursor\"],\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/response_token_summary\"}},\"next_cursor\":{\"type\":[\"string\",\"null\"]}}};const schema78 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"subject\",\"grants\",\"issued_at\",\"expires_at\",\"revoked\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"subject\":{\"type\":\"string\",\"minLength\":1},\"grants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"cache\",\"role\"],\"properties\":{\"cache\":{\"type\":\"string\",\"pattern\":\"^(\\\\*|[a-z0-9_-]{1,64})$\"},\"role\":{\"enum\":[\"pull\",\"push\",\"admin\"]}}}},\"issued_at\":{\"type\":\"integer\",\"minimum\":1},\"expires_at\":{\"type\":\"integer\",\"minimum\":1},\"revoked\":{\"type\":\"boolean\"}}};function validate59(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate59.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.next_cursor === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"items\") || (key0 === \"next_cursor\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.items !== undefined){let data0 = data.items;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.id === undefined){const err3 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data1.subject === undefined){const err4 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data1.grants === undefined){const err5 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data1.issued_at === undefined){const err6 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data1.expires_at === undefined){const err7 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data1.revoked === undefined){const err8 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"revoked\"},message:\"must have required property '\"+\"revoked\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}for(const key1 in data1){if(!((((((key1 === \"id\") || (key1 === \"subject\")) || (key1 === \"grants\")) || (key1 === \"issued_at\")) || (key1 === \"expires_at\")) || (key1 === \"revoked\"))){const err9 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data1.id !== undefined){let data2 = data1.id;if(typeof data2 === \"string\"){if(func1(data2) < 1){const err10 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/response_token_summary/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/response_token_summary/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data1.subject !== undefined){let data3 = data1.subject;if(typeof data3 === \"string\"){if(func1(data3) < 1){const err12 = {instancePath:instancePath+\"/items/\" + i0+\"/subject\",schemaPath:\"#/$defs/response_token_summary/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/items/\" + i0+\"/subject\",schemaPath:\"#/$defs/response_token_summary/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data1.grants !== undefined){let data4 = data1.grants;if(Array.isArray(data4)){const len1 = data4.length;for(let i1=0; i1<len1; i1++){let data5 = data4[i1];if(data5 && typeof data5 == \"object\" && !Array.isArray(data5)){if(data5.cache === undefined){const err14 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data5.role === undefined){const err15 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"role\"},message:\"must have required property '\"+\"role\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}for(const key2 in data5){if(!((key2 === \"cache\") || (key2 === \"role\"))){const err16 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data5.cache !== undefined){let data6 = data5.cache;if(typeof data6 === \"string\"){if(!pattern5.test(data6)){const err17 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/cache\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^(\\\\*|[a-z0-9_-]{1,64})$\"},message:\"must match pattern \\\"\"+\"^(\\\\*|[a-z0-9_-]{1,64})$\"+\"\\\"\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/cache\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data5.role !== undefined){let data7 = data5.role;if(!(((data7 === \"pull\") || (data7 === \"push\")) || (data7 === \"admin\"))){const err19 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/role\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/role/enum\",keyword:\"enum\",params:{allowedValues: schema78.properties.grants.items.properties.role.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}else {const err21 = {instancePath:instancePath+\"/items/\" + i0+\"/grants\",schemaPath:\"#/$defs/response_token_summary/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data1.issued_at !== undefined){let data8 = data1.issued_at;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err22 = {instancePath:instancePath+\"/items/\" + i0+\"/issued_at\",schemaPath:\"#/$defs/response_token_summary/properties/issued_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 < 1 || isNaN(data8)){const err23 = {instancePath:instancePath+\"/items/\" + i0+\"/issued_at\",schemaPath:\"#/$defs/response_token_summary/properties/issued_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data1.expires_at !== undefined){let data9 = data1.expires_at;if(!(((typeof data9 == \"number\") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){const err24 = {instancePath:instancePath+\"/items/\" + i0+\"/expires_at\",schemaPath:\"#/$defs/response_token_summary/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}if((typeof data9 == \"number\") && (isFinite(data9))){if(data9 < 1 || isNaN(data9)){const err25 = {instancePath:instancePath+\"/items/\" + i0+\"/expires_at\",schemaPath:\"#/$defs/response_token_summary/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}if(data1.revoked !== undefined){if(typeof data1.revoked !== \"boolean\"){const err26 = {instancePath:instancePath+\"/items/\" + i0+\"/revoked\",schemaPath:\"#/$defs/response_token_summary/properties/revoked/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}else {const err27 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+\"/items\",schemaPath:\"#/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.next_cursor !== undefined){let data11 = data.next_cursor;if((typeof data11 !== \"string\") && (data11 !== null)){const err29 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/properties/next_cursor/type\",keyword:\"type\",params:{type: schema77.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}}else {const err30 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}validate59.errors = vErrors;return errors === 0;}validate59.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};function validate56(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL=\"https://cf-nix-cache.dev/schemas/responses.json\" */;let vErrors = null;let errors = 0;const evaluated0 = validate56.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs0 = errors;let valid0 = false;let passing0 = null;const _errs1 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.code === undefined){const err0 = {instancePath,schemaPath:\"#/$defs/api_error/required\",keyword:\"required\",params:{missingProperty: \"code\"},message:\"must have required property '\"+\"code\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.message === undefined){const err1 = {instancePath,schemaPath:\"#/$defs/api_error/required\",keyword:\"required\",params:{missingProperty: \"message\"},message:\"must have required property '\"+\"message\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.request_id === undefined){const err2 = {instancePath,schemaPath:\"#/$defs/api_error/required\",keyword:\"required\",params:{missingProperty: \"request_id\"},message:\"must have required property '\"+\"request_id\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"code\") || (key0 === \"message\")) || (key0 === \"request_id\"))){const err3 = {instancePath,schemaPath:\"#/$defs/api_error/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.code !== undefined){let data0 = data.code;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/code\",schemaPath:\"#/$defs/api_error/properties/code/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/code\",schemaPath:\"#/$defs/api_error/properties/code/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/code\",schemaPath:\"#/$defs/api_error/properties/code/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.message !== undefined){let data1 = data.message;if(typeof data1 === \"string\"){if(func1(data1) > 2000){const err7 = {instancePath:instancePath+\"/message\",schemaPath:\"#/$defs/api_error/properties/message/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(func1(data1) < 1){const err8 = {instancePath:instancePath+\"/message\",schemaPath:\"#/$defs/api_error/properties/message/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/message\",schemaPath:\"#/$defs/api_error/properties/message/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.request_id !== undefined){let data2 = data.request_id;if(typeof data2 === \"string\"){if(func1(data2) > 128){const err10 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/$defs/api_error/properties/request_id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(func1(data2) < 1){const err11 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/$defs/api_error/properties/request_id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/$defs/api_error/properties/request_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}else {const err13 = {instancePath,schemaPath:\"#/$defs/api_error/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}var _valid0 = _errs1 === errors;if(_valid0){valid0 = true;passing0 = 0;var props0 = true;}const _errs11 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err14 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data.name === undefined){const err15 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.public === undefined){const err16 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.quota_bytes === undefined){const err17 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}if(data.logical_bytes === undefined){const err18 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if(data.encoding_id === undefined){const err19 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data.created_at === undefined){const err20 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}if(data.lifecycle === undefined){const err21 = {instancePath,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}for(const key1 in data){if(!((((((((key1 === \"id\") || (key1 === \"name\")) || (key1 === \"public\")) || (key1 === \"quota_bytes\")) || (key1 === \"logical_bytes\")) || (key1 === \"encoding_id\")) || (key1 === \"created_at\")) || (key1 === \"lifecycle\"))){const err22 = {instancePath,schemaPath:\"#/$defs/cache_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.id !== undefined){let data3 = data.id;if(typeof data3 === \"string\"){if(func1(data3) > 128){const err23 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}if(func1(data3) < 1){const err24 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else {const err25 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data.name !== undefined){let data4 = data.name;if(typeof data4 === \"string\"){if(!pattern4.test(data4)){const err26 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}else {const err27 = {instancePath:instancePath+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err28 = {instancePath:instancePath+\"/public\",schemaPath:\"#/$defs/cache_response/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.quota_bytes !== undefined){let data6 = data.quota_bytes;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err29 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 > 9007199254740991 || isNaN(data6)){const err30 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}if(data6 < 1 || isNaN(data6)){const err31 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}}if(data.logical_bytes !== undefined){let data7 = data.logical_bytes;if(!(((typeof data7 == \"number\") && (!(data7 % 1) && !isNaN(data7))) && (isFinite(data7)))){const err32 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}if((typeof data7 == \"number\") && (isFinite(data7))){if(data7 > 9007199254740991 || isNaN(data7)){const err33 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}if(data7 < 0 || isNaN(data7)){const err34 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err35 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/$defs/cache_response/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}if(data.created_at !== undefined){let data9 = data.created_at;if(!(((typeof data9 == \"number\") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){const err36 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}if((typeof data9 == \"number\") && (isFinite(data9))){if(data9 < 1 || isNaN(data9)){const err37 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}}if(data.lifecycle !== undefined){let data10 = data.lifecycle;if(!(((data10 === \"CREATING\") || (data10 === \"ACTIVE\")) || (data10 === \"DELETING\"))){const err38 = {instancePath:instancePath+\"/lifecycle\",schemaPath:\"#/$defs/cache_response/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema71.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}}else {const err39 = {instancePath,schemaPath:\"#/$defs/cache_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}var _valid0 = _errs11 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 1];}else {if(_valid0){valid0 = true;passing0 = 1;if(props0 !== true){props0 = true;}}const _errs29 = errors;if(!(validate57(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate57.errors : vErrors.concat(validate57.errors);errors = vErrors.length;}var _valid0 = _errs29 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 2];}else {if(_valid0){valid0 = true;passing0 = 2;if(props0 !== true){props0 = true;}}const _errs30 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err40 = {instancePath,schemaPath:\"#/$defs/upload_state_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}if(data.status === undefined){const err41 = {instancePath,schemaPath:\"#/$defs/upload_state_response/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}if(data.error === undefined){const err42 = {instancePath,schemaPath:\"#/$defs/upload_state_response/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}for(const key2 in data){if(!(((key2 === \"id\") || (key2 === \"status\")) || (key2 === \"error\"))){const err43 = {instancePath,schemaPath:\"#/$defs/upload_state_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.id !== undefined){let data11 = data.id;if(typeof data11 === \"string\"){if(func1(data11) > 128){const err44 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/upload_state_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}if(func1(data11) < 1){const err45 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/upload_state_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}else {const err46 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/upload_state_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}if(data.status !== undefined){let data12 = data.status;if(!(((((((((data12 === \"CREATED\") || (data12 === \"UPLOADING\")) || (data12 === \"COMPLETING\")) || (data12 === \"QUEUED\")) || (data12 === \"PROCESSING\")) || (data12 === \"PUBLISHING\")) || (data12 === \"READY\")) || (data12 === \"FAILED\")) || (data12 === \"ABORTED\"))){const err47 = {instancePath:instancePath+\"/status\",schemaPath:\"#/$defs/upload_state_response/properties/status/enum\",keyword:\"enum\",params:{allowedValues: schema74.properties.status.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}if(data.error !== undefined){let data13 = data.error;if((typeof data13 !== \"string\") && (data13 !== null)){const err48 = {instancePath:instancePath+\"/error\",schemaPath:\"#/$defs/upload_state_response/properties/error/type\",keyword:\"type\",params:{type: schema74.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}if(typeof data13 === \"string\"){if(func1(data13) > 2000){const err49 = {instancePath:instancePath+\"/error\",schemaPath:\"#/$defs/upload_state_response/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}}}else {const err50 = {instancePath,schemaPath:\"#/$defs/upload_state_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}var _valid0 = _errs30 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 3];}else {if(_valid0){valid0 = true;passing0 = 3;if(props0 !== true){props0 = true;}}const _errs39 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err51 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}if(data.status === undefined){const err52 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(data.error === undefined){const err53 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}if(data.parts === undefined){const err54 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/required\",keyword:\"required\",params:{missingProperty: \"parts\"},message:\"must have required property '\"+\"parts\"+\"'\"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}for(const key3 in data){if(!((((key3 === \"id\") || (key3 === \"status\")) || (key3 === \"error\")) || (key3 === \"parts\"))){const err55 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data.id !== undefined){let data14 = data.id;if(typeof data14 === \"string\"){if(func1(data14) > 128){const err56 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/initiate_upload_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}if(func1(data14) < 1){const err57 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/initiate_upload_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}}else {const err58 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/initiate_upload_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}if(data.status !== undefined){let data15 = data.status;if(!(((((((((data15 === \"CREATED\") || (data15 === \"UPLOADING\")) || (data15 === \"COMPLETING\")) || (data15 === \"QUEUED\")) || (data15 === \"PROCESSING\")) || (data15 === \"PUBLISHING\")) || (data15 === \"READY\")) || (data15 === \"FAILED\")) || (data15 === \"ABORTED\"))){const err59 = {instancePath:instancePath+\"/status\",schemaPath:\"#/$defs/initiate_upload_response/properties/status/enum\",keyword:\"enum\",params:{allowedValues: schema75.properties.status.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}if(data.error !== undefined){let data16 = data.error;if((typeof data16 !== \"string\") && (data16 !== null)){const err60 = {instancePath:instancePath+\"/error\",schemaPath:\"#/$defs/initiate_upload_response/properties/error/type\",keyword:\"type\",params:{type: schema75.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if(typeof data16 === \"string\"){if(func1(data16) > 2000){const err61 = {instancePath:instancePath+\"/error\",schemaPath:\"#/$defs/initiate_upload_response/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}}}if(data.parts !== undefined){let data17 = data.parts;if(Array.isArray(data17)){const len0 = data17.length;for(let i0=0; i0<len0; i0++){let data18 = data17[i0];if(data18 && typeof data18 == \"object\" && !Array.isArray(data18)){if(data18.part_number === undefined){const err62 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"part_number\"},message:\"must have required property '\"+\"part_number\"+\"'\"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(data18.url === undefined){const err63 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"url\"},message:\"must have required property '\"+\"url\"+\"'\"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}for(const key4 in data18){if(!((key4 === \"part_number\") || (key4 === \"url\"))){const err64 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key4},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}if(data18.part_number !== undefined){let data19 = data18.part_number;if(!(((typeof data19 == \"number\") && (!(data19 % 1) && !isNaN(data19))) && (isFinite(data19)))){const err65 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/properties/part_number/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}if((typeof data19 == \"number\") && (isFinite(data19))){if(data19 < 1 || isNaN(data19)){const err66 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/properties/part_number/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}}}if(data18.url !== undefined){let data20 = data18.url;if(typeof data20 === \"string\"){if(func1(data20) < 1){const err67 = {instancePath:instancePath+\"/parts/\" + i0+\"/url\",schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/properties/url/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}else {const err68 = {instancePath:instancePath+\"/parts/\" + i0+\"/url\",schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/properties/url/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}}else {const err69 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/$defs/initiate_upload_response/properties/parts/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}}}else {const err70 = {instancePath:instancePath+\"/parts\",schemaPath:\"#/$defs/initiate_upload_response/properties/parts/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}}else {const err71 = {instancePath,schemaPath:\"#/$defs/initiate_upload_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}var _valid0 = _errs39 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 4];}else {if(_valid0){valid0 = true;passing0 = 4;if(props0 !== true){props0 = true;}}const _errs57 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err72 = {instancePath,schemaPath:\"#/$defs/token_issue_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}if(data.token === undefined){const err73 = {instancePath,schemaPath:\"#/$defs/token_issue_response/required\",keyword:\"required\",params:{missingProperty: \"token\"},message:\"must have required property '\"+\"token\"+\"'\"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}if(data.expires_at === undefined){const err74 = {instancePath,schemaPath:\"#/$defs/token_issue_response/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}if(data.repeated === undefined){const err75 = {instancePath,schemaPath:\"#/$defs/token_issue_response/required\",keyword:\"required\",params:{missingProperty: \"repeated\"},message:\"must have required property '\"+\"repeated\"+\"'\"};if(vErrors === null){vErrors = [err75];}else {vErrors.push(err75);}errors++;}for(const key5 in data){if(!((((key5 === \"id\") || (key5 === \"token\")) || (key5 === \"expires_at\")) || (key5 === \"repeated\"))){const err76 = {instancePath,schemaPath:\"#/$defs/token_issue_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key5},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}}if(data.id !== undefined){let data21 = data.id;if(typeof data21 === \"string\"){if(func1(data21) > 128){const err77 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_issue_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}if(func1(data21) < 1){const err78 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_issue_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}else {const err79 = {instancePath:instancePath+\"/id\",schemaPath:\"#/$defs/token_issue_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err79];}else {vErrors.push(err79);}errors++;}}if(data.token !== undefined){let data22 = data.token;if(typeof data22 === \"string\"){if(func1(data22) < 1){const err80 = {instancePath:instancePath+\"/token\",schemaPath:\"#/$defs/token_issue_response/properties/token/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err80];}else {vErrors.push(err80);}errors++;}}else {const err81 = {instancePath:instancePath+\"/token\",schemaPath:\"#/$defs/token_issue_response/properties/token/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}if(data.expires_at !== undefined){let data23 = data.expires_at;if(!(((typeof data23 == \"number\") && (!(data23 % 1) && !isNaN(data23))) && (isFinite(data23)))){const err82 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/$defs/token_issue_response/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}if((typeof data23 == \"number\") && (isFinite(data23))){if(data23 < 1 || isNaN(data23)){const err83 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/$defs/token_issue_response/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}}if(data.repeated !== undefined){if(typeof data.repeated !== \"boolean\"){const err84 = {instancePath:instancePath+\"/repeated\",schemaPath:\"#/$defs/token_issue_response/properties/repeated/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {instancePath,schemaPath:\"#/$defs/token_issue_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err85];}else {vErrors.push(err85);}errors++;}var _valid0 = _errs57 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 5];}else {if(_valid0){valid0 = true;passing0 = 5;if(props0 !== true){props0 = true;}}const _errs69 = errors;if(!(validate59(data, {instancePath,parentData,parentDataProperty,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate59.errors : vErrors.concat(validate59.errors);errors = vErrors.length;}var _valid0 = _errs69 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 6];}else {if(_valid0){valid0 = true;passing0 = 6;if(props0 !== true){props0 = true;}}const _errs70 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err86 = {instancePath,schemaPath:\"#/$defs/audit_page/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err86];}else {vErrors.push(err86);}errors++;}if(data.next_cursor === undefined){const err87 = {instancePath,schemaPath:\"#/$defs/audit_page/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}for(const key6 in data){if(!((key6 === \"items\") || (key6 === \"next_cursor\"))){const err88 = {instancePath,schemaPath:\"#/$defs/audit_page/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key6},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data.items !== undefined){let data25 = data.items;if(Array.isArray(data25)){const len1 = data25.length;for(let i1=0; i1<len1; i1++){let data26 = data25[i1];if(data26 && typeof data26 == \"object\" && !Array.isArray(data26)){if(data26.id === undefined){const err89 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}if(data26.timestamp === undefined){const err90 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"timestamp\"},message:\"must have required property '\"+\"timestamp\"+\"'\"};if(vErrors === null){vErrors = [err90];}else {vErrors.push(err90);}errors++;}if(data26.actor === undefined){const err91 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"actor\"},message:\"must have required property '\"+\"actor\"+\"'\"};if(vErrors === null){vErrors = [err91];}else {vErrors.push(err91);}errors++;}if(data26.action === undefined){const err92 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"action\"},message:\"must have required property '\"+\"action\"+\"'\"};if(vErrors === null){vErrors = [err92];}else {vErrors.push(err92);}errors++;}if(data26.resource === undefined){const err93 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"resource\"},message:\"must have required property '\"+\"resource\"+\"'\"};if(vErrors === null){vErrors = [err93];}else {vErrors.push(err93);}errors++;}if(data26.outcome === undefined){const err94 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"outcome\"},message:\"must have required property '\"+\"outcome\"+\"'\"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}if(data26.metadata === undefined){const err95 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"metadata\"},message:\"must have required property '\"+\"metadata\"+\"'\"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}for(const key7 in data26){if(!(((((((key7 === \"id\") || (key7 === \"timestamp\")) || (key7 === \"actor\")) || (key7 === \"action\")) || (key7 === \"resource\")) || (key7 === \"outcome\")) || (key7 === \"metadata\"))){const err96 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key7},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}if(data26.id !== undefined){let data27 = data26.id;if(typeof data27 === \"string\"){if(func1(data27) > 256){const err97 = {instancePath:instancePath+\"/items/\" + i1+\"/id\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;}if(func1(data27) < 1){const err98 = {instancePath:instancePath+\"/items/\" + i1+\"/id\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}}else {const err99 = {instancePath:instancePath+\"/items/\" + i1+\"/id\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}if(data26.timestamp !== undefined){let data28 = data26.timestamp;if(!(((typeof data28 == \"number\") && (!(data28 % 1) && !isNaN(data28))) && (isFinite(data28)))){const err100 = {instancePath:instancePath+\"/items/\" + i1+\"/timestamp\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/timestamp/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}if((typeof data28 == \"number\") && (isFinite(data28))){if(data28 < 1 || isNaN(data28)){const err101 = {instancePath:instancePath+\"/items/\" + i1+\"/timestamp\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/timestamp/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;}}}if(data26.actor !== undefined){let data29 = data26.actor;if(typeof data29 === \"string\"){if(func1(data29) > 256){const err102 = {instancePath:instancePath+\"/items/\" + i1+\"/actor\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/actor/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}if(func1(data29) < 1){const err103 = {instancePath:instancePath+\"/items/\" + i1+\"/actor\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/actor/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}}else {const err104 = {instancePath:instancePath+\"/items/\" + i1+\"/actor\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/actor/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}}if(data26.action !== undefined){let data30 = data26.action;if(typeof data30 === \"string\"){if(func1(data30) > 128){const err105 = {instancePath:instancePath+\"/items/\" + i1+\"/action\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/action/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}if(func1(data30) < 1){const err106 = {instancePath:instancePath+\"/items/\" + i1+\"/action\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/action/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}else {const err107 = {instancePath:instancePath+\"/items/\" + i1+\"/action\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/action/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}if(data26.resource !== undefined){let data31 = data26.resource;if(typeof data31 === \"string\"){if(func1(data31) > 512){const err108 = {instancePath:instancePath+\"/items/\" + i1+\"/resource\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/resource/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}if(func1(data31) < 1){const err109 = {instancePath:instancePath+\"/items/\" + i1+\"/resource\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/resource/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}}else {const err110 = {instancePath:instancePath+\"/items/\" + i1+\"/resource\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/resource/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}if(data26.outcome !== undefined){let data32 = data26.outcome;if(!(((data32 === \"success\") || (data32 === \"accepted\")) || (data32 === \"failure\"))){const err111 = {instancePath:instancePath+\"/items/\" + i1+\"/outcome\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/outcome/enum\",keyword:\"enum\",params:{allowedValues: schema79.properties.items.items.properties.outcome.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data26.metadata !== undefined){let data33 = data26.metadata;if(data33 && typeof data33 == \"object\" && !Array.isArray(data33)){for(const key8 in data33){if(typeof data33[key8] !== \"string\"){const err112 = {instancePath:instancePath+\"/items/\" + i1+\"/metadata/\" + key8.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/$defs/audit_page/properties/items/items/properties/metadata/additionalProperties/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}}else {const err113 = {instancePath:instancePath+\"/items/\" + i1+\"/metadata\",schemaPath:\"#/$defs/audit_page/properties/items/items/properties/metadata/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}}else {const err114 = {instancePath:instancePath+\"/items/\" + i1,schemaPath:\"#/$defs/audit_page/properties/items/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}}}else {const err115 = {instancePath:instancePath+\"/items\",schemaPath:\"#/$defs/audit_page/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}if(data.next_cursor !== undefined){let data35 = data.next_cursor;if((typeof data35 !== \"string\") && (data35 !== null)){const err116 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/$defs/audit_page/properties/next_cursor/type\",keyword:\"type\",params:{type: schema79.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}}else {const err117 = {instancePath,schemaPath:\"#/$defs/audit_page/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}var _valid0 = _errs70 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 7];}else {if(_valid0){valid0 = true;passing0 = 7;if(props0 !== true){props0 = true;}}const _errs97 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.missing === undefined){const err118 = {instancePath,schemaPath:\"#/$defs/missing_paths_response/required\",keyword:\"required\",params:{missingProperty: \"missing\"},message:\"must have required property '\"+\"missing\"+\"'\"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}for(const key9 in data){if(!(key9 === \"missing\")){const err119 = {instancePath,schemaPath:\"#/$defs/missing_paths_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key9},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}}if(data.missing !== undefined){let data36 = data.missing;if(Array.isArray(data36)){const len2 = data36.length;for(let i2=0; i2<len2; i2++){let data37 = data36[i2];if(typeof data37 === \"string\"){if(!pattern7.test(data37)){const err120 = {instancePath:instancePath+\"/missing/\" + i2,schemaPath:\"#/$defs/missing_paths_response/properties/missing/items/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}else {const err121 = {instancePath:instancePath+\"/missing/\" + i2,schemaPath:\"#/$defs/missing_paths_response/properties/missing/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}}}else {const err122 = {instancePath:instancePath+\"/missing\",schemaPath:\"#/$defs/missing_paths_response/properties/missing/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}}else {const err123 = {instancePath,schemaPath:\"#/$defs/missing_paths_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}var _valid0 = _errs97 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 8];}else {if(_valid0){valid0 = true;passing0 = 8;if(props0 !== true){props0 = true;}}}}}}}}}}if(!valid0){const err124 = {instancePath,schemaPath:\"#/oneOf\",keyword:\"oneOf\",params:{passingSchemas: passing0},message:\"must match exactly one schema in oneOf\"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}else {errors = _errs0;if(vErrors !== null){if(_errs0){vErrors.length = _errs0;}else {vErrors = null;}}}validate56.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate56.evaluated = {\"dynamicProps\":true,\"dynamicItems\":false};const ApiErrorSchemaValidator = validate61;function validate61(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate61.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.code === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"code\"},message:\"must have required property '\"+\"code\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.message === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"message\"},message:\"must have required property '\"+\"message\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.request_id === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"request_id\"},message:\"must have required property '\"+\"request_id\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"code\") || (key0 === \"message\")) || (key0 === \"request_id\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.code !== undefined){let data0 = data.code;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/code\",schemaPath:\"#/properties/code/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/code\",schemaPath:\"#/properties/code/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/code\",schemaPath:\"#/properties/code/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.message !== undefined){let data1 = data.message;if(typeof data1 === \"string\"){if(func1(data1) > 2000){const err7 = {instancePath:instancePath+\"/message\",schemaPath:\"#/properties/message/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(func1(data1) < 1){const err8 = {instancePath:instancePath+\"/message\",schemaPath:\"#/properties/message/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/message\",schemaPath:\"#/properties/message/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.request_id !== undefined){let data2 = data.request_id;if(typeof data2 === \"string\"){if(func1(data2) > 128){const err10 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/properties/request_id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(func1(data2) < 1){const err11 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/properties/request_id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/request_id\",schemaPath:\"#/properties/request_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}else {const err13 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}validate61.errors = vErrors;return errors === 0;}validate61.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const CacheResponseSchemaValidator = validate62;function validate62(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate62.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.public === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.quota_bytes === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.logical_bytes === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.encoding_id === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data.created_at === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.lifecycle === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}for(const key0 in data){if(!((((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"public\")) || (key0 === \"quota_bytes\")) || (key0 === \"logical_bytes\")) || (key0 === \"encoding_id\")) || (key0 === \"created_at\")) || (key0 === \"lifecycle\"))){const err8 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err9 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(func1(data0) < 1){const err10 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(!pattern4.test(data1)){const err12 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/name\",schemaPath:\"#/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.public !== undefined){if(typeof data.public !== \"boolean\"){const err14 = {instancePath:instancePath+\"/public\",schemaPath:\"#/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.quota_bytes !== undefined){let data3 = data.quota_bytes;if(!(((typeof data3 == \"number\") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){const err15 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if((typeof data3 == \"number\") && (isFinite(data3))){if(data3 > 9007199254740991 || isNaN(data3)){const err16 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data3 < 1 || isNaN(data3)){const err17 = {instancePath:instancePath+\"/quota_bytes\",schemaPath:\"#/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}}if(data.logical_bytes !== undefined){let data4 = data.logical_bytes;if(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){const err18 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if((typeof data4 == \"number\") && (isFinite(data4))){if(data4 > 9007199254740991 || isNaN(data4)){const err19 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data4 < 0 || isNaN(data4)){const err20 = {instancePath:instancePath+\"/logical_bytes\",schemaPath:\"#/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data.encoding_id){const err21 = {instancePath:instancePath+\"/encoding_id\",schemaPath:\"#/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.created_at !== undefined){let data6 = data.created_at;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err22 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 < 1 || isNaN(data6)){const err23 = {instancePath:instancePath+\"/created_at\",schemaPath:\"#/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data.lifecycle !== undefined){let data7 = data.lifecycle;if(!(((data7 === \"CREATING\") || (data7 === \"ACTIVE\")) || (data7 === \"DELETING\"))){const err24 = {instancePath:instancePath+\"/lifecycle\",schemaPath:\"#/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema71.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}validate62.errors = vErrors;return errors === 0;}validate62.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const CachePageSchemaValidator = validate63;function validate63(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate63.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.next_cursor === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"items\") || (key0 === \"next_cursor\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.items !== undefined){let data0 = data.items;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.id === undefined){const err3 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data1.name === undefined){const err4 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data1.public === undefined){const err5 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"public\"},message:\"must have required property '\"+\"public\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data1.quota_bytes === undefined){const err6 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"quota_bytes\"},message:\"must have required property '\"+\"quota_bytes\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data1.logical_bytes === undefined){const err7 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"logical_bytes\"},message:\"must have required property '\"+\"logical_bytes\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data1.encoding_id === undefined){const err8 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"encoding_id\"},message:\"must have required property '\"+\"encoding_id\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data1.created_at === undefined){const err9 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"created_at\"},message:\"must have required property '\"+\"created_at\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data1.lifecycle === undefined){const err10 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/required\",keyword:\"required\",params:{missingProperty: \"lifecycle\"},message:\"must have required property '\"+\"lifecycle\"+\"'\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key1 in data1){if(!((((((((key1 === \"id\") || (key1 === \"name\")) || (key1 === \"public\")) || (key1 === \"quota_bytes\")) || (key1 === \"logical_bytes\")) || (key1 === \"encoding_id\")) || (key1 === \"created_at\")) || (key1 === \"lifecycle\"))){const err11 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data1.id !== undefined){let data2 = data1.id;if(typeof data2 === \"string\"){if(func1(data2) > 128){const err12 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if(func1(data2) < 1){const err13 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}else {const err14 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/cache_response/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data1.name !== undefined){let data3 = data1.name;if(typeof data3 === \"string\"){if(!pattern4.test(data3)){const err15 = {instancePath:instancePath+\"/items/\" + i0+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/pattern\",keyword:\"pattern\",params:{pattern: \"^[a-z0-9_-]{1,64}$\"},message:\"must match pattern \\\"\"+\"^[a-z0-9_-]{1,64}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/items/\" + i0+\"/name\",schemaPath:\"#/$defs/cache_response/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data1.public !== undefined){if(typeof data1.public !== \"boolean\"){const err17 = {instancePath:instancePath+\"/items/\" + i0+\"/public\",schemaPath:\"#/$defs/cache_response/properties/public/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data1.quota_bytes !== undefined){let data5 = data1.quota_bytes;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err18 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 > 9007199254740991 || isNaN(data5)){const err19 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(data5 < 1 || isNaN(data5)){const err20 = {instancePath:instancePath+\"/items/\" + i0+\"/quota_bytes\",schemaPath:\"#/$defs/cache_response/properties/quota_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data1.logical_bytes !== undefined){let data6 = data1.logical_bytes;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err21 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 > 9007199254740991 || isNaN(data6)){const err22 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/maximum\",keyword:\"maximum\",params:{comparison: \"<=\", limit: 9007199254740991},message:\"must be <= 9007199254740991\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(data6 < 0 || isNaN(data6)){const err23 = {instancePath:instancePath+\"/items/\" + i0+\"/logical_bytes\",schemaPath:\"#/$defs/cache_response/properties/logical_bytes/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data1.encoding_id !== undefined){if(\"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\" !== data1.encoding_id){const err24 = {instancePath:instancePath+\"/items/\" + i0+\"/encoding_id\",schemaPath:\"#/$defs/cache_response/properties/encoding_id/const\",keyword:\"const\",params:{allowedValue: \"fastcdc-v2020-min1m-avg4m-max16m-zstd3-v1\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.created_at !== undefined){let data8 = data1.created_at;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err25 = {instancePath:instancePath+\"/items/\" + i0+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 < 1 || isNaN(data8)){const err26 = {instancePath:instancePath+\"/items/\" + i0+\"/created_at\",schemaPath:\"#/$defs/cache_response/properties/created_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}if(data1.lifecycle !== undefined){let data9 = data1.lifecycle;if(!(((data9 === \"CREATING\") || (data9 === \"ACTIVE\")) || (data9 === \"DELETING\"))){const err27 = {instancePath:instancePath+\"/items/\" + i0+\"/lifecycle\",schemaPath:\"#/$defs/cache_response/properties/lifecycle/enum\",keyword:\"enum\",params:{allowedValues: schema71.properties.lifecycle.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/cache_response/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}}else {const err29 = {instancePath:instancePath+\"/items\",schemaPath:\"#/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.next_cursor !== undefined){let data10 = data.next_cursor;if((typeof data10 !== \"string\") && (data10 !== null)){const err30 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/properties/next_cursor/type\",keyword:\"type\",params:{type: schema72.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}else {const err31 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}validate63.errors = vErrors;return errors === 0;}validate63.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const UploadStateResponseSchemaValidator = validate64;function validate64(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate64.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.status === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.error === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!(((key0 === \"id\") || (key0 === \"status\")) || (key0 === \"error\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(func1(data0) < 1){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.status !== undefined){let data1 = data.status;if(!(((((((((data1 === \"CREATED\") || (data1 === \"UPLOADING\")) || (data1 === \"COMPLETING\")) || (data1 === \"QUEUED\")) || (data1 === \"PROCESSING\")) || (data1 === \"PUBLISHING\")) || (data1 === \"READY\")) || (data1 === \"FAILED\")) || (data1 === \"ABORTED\"))){const err7 = {instancePath:instancePath+\"/status\",schemaPath:\"#/properties/status/enum\",keyword:\"enum\",params:{allowedValues: schema74.properties.status.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.error !== undefined){let data2 = data.error;if((typeof data2 !== \"string\") && (data2 !== null)){const err8 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/type\",keyword:\"type\",params:{type: schema74.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(typeof data2 === \"string\"){if(func1(data2) > 2000){const err9 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}}else {const err10 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}validate64.errors = vErrors;return errors === 0;}validate64.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const InitiateUploadResponseSchemaValidator = validate65;function validate65(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate65.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.status === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"status\"},message:\"must have required property '\"+\"status\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.error === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"error\"},message:\"must have required property '\"+\"error\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.parts === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"parts\"},message:\"must have required property '\"+\"parts\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((key0 === \"id\") || (key0 === \"status\")) || (key0 === \"error\")) || (key0 === \"parts\"))){const err4 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(func1(data0) < 1){const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.status !== undefined){let data1 = data.status;if(!(((((((((data1 === \"CREATED\") || (data1 === \"UPLOADING\")) || (data1 === \"COMPLETING\")) || (data1 === \"QUEUED\")) || (data1 === \"PROCESSING\")) || (data1 === \"PUBLISHING\")) || (data1 === \"READY\")) || (data1 === \"FAILED\")) || (data1 === \"ABORTED\"))){const err8 = {instancePath:instancePath+\"/status\",schemaPath:\"#/properties/status/enum\",keyword:\"enum\",params:{allowedValues: schema75.properties.status.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.error !== undefined){let data2 = data.error;if((typeof data2 !== \"string\") && (data2 !== null)){const err9 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/type\",keyword:\"type\",params:{type: schema75.properties.error.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(typeof data2 === \"string\"){if(func1(data2) > 2000){const err10 = {instancePath:instancePath+\"/error\",schemaPath:\"#/properties/error/maxLength\",keyword:\"maxLength\",params:{limit: 2000},message:\"must NOT have more than 2000 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}if(data.parts !== undefined){let data3 = data.parts;if(Array.isArray(data3)){const len0 = data3.length;for(let i0=0; i0<len0; i0++){let data4 = data3[i0];if(data4 && typeof data4 == \"object\" && !Array.isArray(data4)){if(data4.part_number === undefined){const err11 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"part_number\"},message:\"must have required property '\"+\"part_number\"+\"'\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data4.url === undefined){const err12 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/required\",keyword:\"required\",params:{missingProperty: \"url\"},message:\"must have required property '\"+\"url\"+\"'\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}for(const key1 in data4){if(!((key1 === \"part_number\") || (key1 === \"url\"))){const err13 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data4.part_number !== undefined){let data5 = data4.part_number;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err14 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/properties/parts/items/properties/part_number/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 < 1 || isNaN(data5)){const err15 = {instancePath:instancePath+\"/parts/\" + i0+\"/part_number\",schemaPath:\"#/properties/parts/items/properties/part_number/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}if(data4.url !== undefined){let data6 = data4.url;if(typeof data6 === \"string\"){if(func1(data6) < 1){const err16 = {instancePath:instancePath+\"/parts/\" + i0+\"/url\",schemaPath:\"#/properties/parts/items/properties/url/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}else {const err17 = {instancePath:instancePath+\"/parts/\" + i0+\"/url\",schemaPath:\"#/properties/parts/items/properties/url/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}}else {const err18 = {instancePath:instancePath+\"/parts/\" + i0,schemaPath:\"#/properties/parts/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}}else {const err19 = {instancePath:instancePath+\"/parts\",schemaPath:\"#/properties/parts/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}validate65.errors = vErrors;return errors === 0;}validate65.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const TokenIssueResponseSchemaValidator = validate66;function validate66(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate66.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.token === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"token\"},message:\"must have required property '\"+\"token\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.expires_at === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.repeated === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"repeated\"},message:\"must have required property '\"+\"repeated\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((key0 === \"id\") || (key0 === \"token\")) || (key0 === \"expires_at\")) || (key0 === \"repeated\"))){const err4 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) > 128){const err5 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(func1(data0) < 1){const err6 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.token !== undefined){let data1 = data.token;if(typeof data1 === \"string\"){if(func1(data1) < 1){const err8 = {instancePath:instancePath+\"/token\",schemaPath:\"#/properties/token/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/token\",schemaPath:\"#/properties/token/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.expires_at !== undefined){let data2 = data.expires_at;if(!(((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){const err10 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if((typeof data2 == \"number\") && (isFinite(data2))){if(data2 < 1 || isNaN(data2)){const err11 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}if(data.repeated !== undefined){if(typeof data.repeated !== \"boolean\"){const err12 = {instancePath:instancePath+\"/repeated\",schemaPath:\"#/properties/repeated/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}}else {const err13 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}validate66.errors = vErrors;return errors === 0;}validate66.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const ResponseTokenSummarySchemaValidator = validate67;function validate67(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate67.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.subject === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.grants === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.issued_at === undefined){const err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.expires_at === undefined){const err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data.revoked === undefined){const err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"revoked\"},message:\"must have required property '\"+\"revoked\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"subject\")) || (key0 === \"grants\")) || (key0 === \"issued_at\")) || (key0 === \"expires_at\")) || (key0 === \"revoked\"))){const err6 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(func1(data0) < 1){const err7 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/id\",schemaPath:\"#/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.subject !== undefined){let data1 = data.subject;if(typeof data1 === \"string\"){if(func1(data1) < 1){const err9 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/subject\",schemaPath:\"#/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.grants !== undefined){let data2 = data.grants;if(Array.isArray(data2)){const len0 = data2.length;for(let i0=0; i0<len0; i0++){let data3 = data2[i0];if(data3 && typeof data3 == \"object\" && !Array.isArray(data3)){if(data3.cache === undefined){const err11 = {instancePath:instancePath+\"/grants/\" + i0,schemaPath:\"#/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data3.role === undefined){const err12 = {instancePath:instancePath+\"/grants/\" + i0,schemaPath:\"#/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"role\"},message:\"must have required property '\"+\"role\"+\"'\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}for(const key1 in data3){if(!((key1 === \"cache\") || (key1 === \"role\"))){const err13 = {instancePath:instancePath+\"/grants/\" + i0,schemaPath:\"#/properties/grants/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data3.cache !== undefined){let data4 = data3.cache;if(typeof data4 === \"string\"){if(!pattern5.test(data4)){const err14 = {instancePath:instancePath+\"/grants/\" + i0+\"/cache\",schemaPath:\"#/properties/grants/items/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^(\\\\*|[a-z0-9_-]{1,64})$\"},message:\"must match pattern \\\"\"+\"^(\\\\*|[a-z0-9_-]{1,64})$\"+\"\\\"\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+\"/grants/\" + i0+\"/cache\",schemaPath:\"#/properties/grants/items/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data3.role !== undefined){let data5 = data3.role;if(!(((data5 === \"pull\") || (data5 === \"push\")) || (data5 === \"admin\"))){const err16 = {instancePath:instancePath+\"/grants/\" + i0+\"/role\",schemaPath:\"#/properties/grants/items/properties/role/enum\",keyword:\"enum\",params:{allowedValues: schema78.properties.grants.items.properties.role.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}}else {const err17 = {instancePath:instancePath+\"/grants/\" + i0,schemaPath:\"#/properties/grants/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}}else {const err18 = {instancePath:instancePath+\"/grants\",schemaPath:\"#/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.issued_at !== undefined){let data6 = data.issued_at;if(!(((typeof data6 == \"number\") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){const err19 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if((typeof data6 == \"number\") && (isFinite(data6))){if(data6 < 1 || isNaN(data6)){const err20 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data.expires_at !== undefined){let data7 = data.expires_at;if(!(((typeof data7 == \"number\") && (!(data7 % 1) && !isNaN(data7))) && (isFinite(data7)))){const err21 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if((typeof data7 == \"number\") && (isFinite(data7))){if(data7 < 1 || isNaN(data7)){const err22 = {instancePath:instancePath+\"/expires_at\",schemaPath:\"#/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}}if(data.revoked !== undefined){if(typeof data.revoked !== \"boolean\"){const err23 = {instancePath:instancePath+\"/revoked\",schemaPath:\"#/properties/revoked/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}validate67.errors = vErrors;return errors === 0;}validate67.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const TokenPageResponseSchemaValidator = validate68;function validate68(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate68.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.next_cursor === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"items\") || (key0 === \"next_cursor\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.items !== undefined){let data0 = data.items;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.id === undefined){const err3 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data1.subject === undefined){const err4 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"subject\"},message:\"must have required property '\"+\"subject\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data1.grants === undefined){const err5 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"grants\"},message:\"must have required property '\"+\"grants\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data1.issued_at === undefined){const err6 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data1.expires_at === undefined){const err7 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"expires_at\"},message:\"must have required property '\"+\"expires_at\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data1.revoked === undefined){const err8 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/required\",keyword:\"required\",params:{missingProperty: \"revoked\"},message:\"must have required property '\"+\"revoked\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}for(const key1 in data1){if(!((((((key1 === \"id\") || (key1 === \"subject\")) || (key1 === \"grants\")) || (key1 === \"issued_at\")) || (key1 === \"expires_at\")) || (key1 === \"revoked\"))){const err9 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data1.id !== undefined){let data2 = data1.id;if(typeof data2 === \"string\"){if(func1(data2) < 1){const err10 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/response_token_summary/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/$defs/response_token_summary/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data1.subject !== undefined){let data3 = data1.subject;if(typeof data3 === \"string\"){if(func1(data3) < 1){const err12 = {instancePath:instancePath+\"/items/\" + i0+\"/subject\",schemaPath:\"#/$defs/response_token_summary/properties/subject/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/items/\" + i0+\"/subject\",schemaPath:\"#/$defs/response_token_summary/properties/subject/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data1.grants !== undefined){let data4 = data1.grants;if(Array.isArray(data4)){const len1 = data4.length;for(let i1=0; i1<len1; i1++){let data5 = data4[i1];if(data5 && typeof data5 == \"object\" && !Array.isArray(data5)){if(data5.cache === undefined){const err14 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"cache\"},message:\"must have required property '\"+\"cache\"+\"'\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data5.role === undefined){const err15 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/required\",keyword:\"required\",params:{missingProperty: \"role\"},message:\"must have required property '\"+\"role\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}for(const key2 in data5){if(!((key2 === \"cache\") || (key2 === \"role\"))){const err16 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data5.cache !== undefined){let data6 = data5.cache;if(typeof data6 === \"string\"){if(!pattern5.test(data6)){const err17 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/cache\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/cache/pattern\",keyword:\"pattern\",params:{pattern: \"^(\\\\*|[a-z0-9_-]{1,64})$\"},message:\"must match pattern \\\"\"+\"^(\\\\*|[a-z0-9_-]{1,64})$\"+\"\\\"\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/cache\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/cache/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data5.role !== undefined){let data7 = data5.role;if(!(((data7 === \"pull\") || (data7 === \"push\")) || (data7 === \"admin\"))){const err19 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1+\"/role\",schemaPath:\"#/$defs/response_token_summary/properties/grants/items/properties/role/enum\",keyword:\"enum\",params:{allowedValues: schema78.properties.grants.items.properties.role.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath:instancePath+\"/items/\" + i0+\"/grants/\" + i1,schemaPath:\"#/$defs/response_token_summary/properties/grants/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}else {const err21 = {instancePath:instancePath+\"/items/\" + i0+\"/grants\",schemaPath:\"#/$defs/response_token_summary/properties/grants/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data1.issued_at !== undefined){let data8 = data1.issued_at;if(!(((typeof data8 == \"number\") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){const err22 = {instancePath:instancePath+\"/items/\" + i0+\"/issued_at\",schemaPath:\"#/$defs/response_token_summary/properties/issued_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if((typeof data8 == \"number\") && (isFinite(data8))){if(data8 < 1 || isNaN(data8)){const err23 = {instancePath:instancePath+\"/items/\" + i0+\"/issued_at\",schemaPath:\"#/$defs/response_token_summary/properties/issued_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data1.expires_at !== undefined){let data9 = data1.expires_at;if(!(((typeof data9 == \"number\") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){const err24 = {instancePath:instancePath+\"/items/\" + i0+\"/expires_at\",schemaPath:\"#/$defs/response_token_summary/properties/expires_at/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}if((typeof data9 == \"number\") && (isFinite(data9))){if(data9 < 1 || isNaN(data9)){const err25 = {instancePath:instancePath+\"/items/\" + i0+\"/expires_at\",schemaPath:\"#/$defs/response_token_summary/properties/expires_at/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}if(data1.revoked !== undefined){if(typeof data1.revoked !== \"boolean\"){const err26 = {instancePath:instancePath+\"/items/\" + i0+\"/revoked\",schemaPath:\"#/$defs/response_token_summary/properties/revoked/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}else {const err27 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/$defs/response_token_summary/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+\"/items\",schemaPath:\"#/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.next_cursor !== undefined){let data11 = data.next_cursor;if((typeof data11 !== \"string\") && (data11 !== null)){const err29 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/properties/next_cursor/type\",keyword:\"type\",params:{type: schema77.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}}else {const err30 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}validate68.errors = vErrors;return errors === 0;}validate68.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const AuditPageSchemaValidator = validate69;function validate69(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate69.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.items === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"items\"},message:\"must have required property '\"+\"items\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.next_cursor === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"next_cursor\"},message:\"must have required property '\"+\"next_cursor\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"items\") || (key0 === \"next_cursor\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.items !== undefined){let data0 = data.items;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(data1 && typeof data1 == \"object\" && !Array.isArray(data1)){if(data1.id === undefined){const err3 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data1.timestamp === undefined){const err4 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"timestamp\"},message:\"must have required property '\"+\"timestamp\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}if(data1.actor === undefined){const err5 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"actor\"},message:\"must have required property '\"+\"actor\"+\"'\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data1.action === undefined){const err6 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"action\"},message:\"must have required property '\"+\"action\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data1.resource === undefined){const err7 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"resource\"},message:\"must have required property '\"+\"resource\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data1.outcome === undefined){const err8 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"outcome\"},message:\"must have required property '\"+\"outcome\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data1.metadata === undefined){const err9 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/required\",keyword:\"required\",params:{missingProperty: \"metadata\"},message:\"must have required property '\"+\"metadata\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}for(const key1 in data1){if(!(((((((key1 === \"id\") || (key1 === \"timestamp\")) || (key1 === \"actor\")) || (key1 === \"action\")) || (key1 === \"resource\")) || (key1 === \"outcome\")) || (key1 === \"metadata\"))){const err10 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data1.id !== undefined){let data2 = data1.id;if(typeof data2 === \"string\"){if(func1(data2) > 256){const err11 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/properties/items/items/properties/id/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(func1(data2) < 1){const err12 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/properties/items/items/properties/id/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/items/\" + i0+\"/id\",schemaPath:\"#/properties/items/items/properties/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data1.timestamp !== undefined){let data3 = data1.timestamp;if(!(((typeof data3 == \"number\") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){const err14 = {instancePath:instancePath+\"/items/\" + i0+\"/timestamp\",schemaPath:\"#/properties/items/items/properties/timestamp/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if((typeof data3 == \"number\") && (isFinite(data3))){if(data3 < 1 || isNaN(data3)){const err15 = {instancePath:instancePath+\"/items/\" + i0+\"/timestamp\",schemaPath:\"#/properties/items/items/properties/timestamp/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}if(data1.actor !== undefined){let data4 = data1.actor;if(typeof data4 === \"string\"){if(func1(data4) > 256){const err16 = {instancePath:instancePath+\"/items/\" + i0+\"/actor\",schemaPath:\"#/properties/items/items/properties/actor/maxLength\",keyword:\"maxLength\",params:{limit: 256},message:\"must NOT have more than 256 characters\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(func1(data4) < 1){const err17 = {instancePath:instancePath+\"/items/\" + i0+\"/actor\",schemaPath:\"#/properties/items/items/properties/actor/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+\"/items/\" + i0+\"/actor\",schemaPath:\"#/properties/items/items/properties/actor/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data1.action !== undefined){let data5 = data1.action;if(typeof data5 === \"string\"){if(func1(data5) > 128){const err19 = {instancePath:instancePath+\"/items/\" + i0+\"/action\",schemaPath:\"#/properties/items/items/properties/action/maxLength\",keyword:\"maxLength\",params:{limit: 128},message:\"must NOT have more than 128 characters\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(func1(data5) < 1){const err20 = {instancePath:instancePath+\"/items/\" + i0+\"/action\",schemaPath:\"#/properties/items/items/properties/action/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/items/\" + i0+\"/action\",schemaPath:\"#/properties/items/items/properties/action/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data1.resource !== undefined){let data6 = data1.resource;if(typeof data6 === \"string\"){if(func1(data6) > 512){const err22 = {instancePath:instancePath+\"/items/\" + i0+\"/resource\",schemaPath:\"#/properties/items/items/properties/resource/maxLength\",keyword:\"maxLength\",params:{limit: 512},message:\"must NOT have more than 512 characters\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(func1(data6) < 1){const err23 = {instancePath:instancePath+\"/items/\" + i0+\"/resource\",schemaPath:\"#/properties/items/items/properties/resource/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}else {const err24 = {instancePath:instancePath+\"/items/\" + i0+\"/resource\",schemaPath:\"#/properties/items/items/properties/resource/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.outcome !== undefined){let data7 = data1.outcome;if(!(((data7 === \"success\") || (data7 === \"accepted\")) || (data7 === \"failure\"))){const err25 = {instancePath:instancePath+\"/items/\" + i0+\"/outcome\",schemaPath:\"#/properties/items/items/properties/outcome/enum\",keyword:\"enum\",params:{allowedValues: schema79.properties.items.items.properties.outcome.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data1.metadata !== undefined){let data8 = data1.metadata;if(data8 && typeof data8 == \"object\" && !Array.isArray(data8)){for(const key2 in data8){if(typeof data8[key2] !== \"string\"){const err26 = {instancePath:instancePath+\"/items/\" + i0+\"/metadata/\" + key2.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/items/items/properties/metadata/additionalProperties/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}else {const err27 = {instancePath:instancePath+\"/items/\" + i0+\"/metadata\",schemaPath:\"#/properties/items/items/properties/metadata/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+\"/items/\" + i0,schemaPath:\"#/properties/items/items/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}}else {const err29 = {instancePath:instancePath+\"/items\",schemaPath:\"#/properties/items/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.next_cursor !== undefined){let data10 = data.next_cursor;if((typeof data10 !== \"string\") && (data10 !== null)){const err30 = {instancePath:instancePath+\"/next_cursor\",schemaPath:\"#/properties/next_cursor/type\",keyword:\"type\",params:{type: schema79.properties.next_cursor.type},message:\"must be string,null\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}else {const err31 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}validate69.errors = vErrors;return errors === 0;}validate69.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};const MissingPathsResponseSchemaValidator = validate70;function validate70(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate70.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.missing === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"missing\"},message:\"must have required property '\"+\"missing\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"missing\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.missing !== undefined){let data0 = data.missing;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern7.test(data1)){const err2 = {instancePath:instancePath+\"/missing/\" + i0,schemaPath:\"#/properties/missing/items/pattern\",keyword:\"pattern\",params:{pattern: \"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"},message:\"must match pattern \\\"\"+\"^[0-9abcdfghijklmnpqrsvwxyz]{32}$\"+\"\\\"\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}else {const err3 = {instancePath:instancePath+\"/missing/\" + i0,schemaPath:\"#/properties/missing/items/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}else {const err4 = {instancePath:instancePath+\"/missing\",schemaPath:\"#/properties/missing/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}validate70.errors = vErrors;return errors === 0;}validate70.evaluated = {\"props\":true,\"dynamicProps\":false,\"dynamicItems\":false};\nexport const APIContractSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json\",\n validate: APIContractSchemaValidator as ContractSchema<CfNixCacheAPIContract>['validate'],\n} satisfies ContractSchema<CfNixCacheAPIContract>;\nexport const RoleSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/role\",\n validate: RoleSchemaValidator as ContractSchema<Role>['validate'],\n} satisfies ContractSchema<Role>;\nexport const GrantSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/grant\",\n validate: GrantSchemaValidator as ContractSchema<Grant>['validate'],\n} satisfies ContractSchema<Grant>;\nexport const ManifestSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/manifest\",\n validate: ManifestSchemaValidator as ContractSchema<Manifest>['validate'],\n} satisfies ContractSchema<Manifest>;\nexport const CreateCacheSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/create_cache\",\n validate: CreateCacheSchemaValidator as ContractSchema<CreateCache>['validate'],\n} satisfies ContractSchema<CreateCache>;\nexport const ConfigureCacheSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/configure_cache\",\n validate: ConfigureCacheSchemaValidator as ContractSchema<ConfigureCache>['validate'],\n} satisfies ContractSchema<ConfigureCache>;\nexport const CacheSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/cache\",\n validate: CacheSchemaValidator as ContractSchema<Cache>['validate'],\n} satisfies ContractSchema<Cache>;\nexport const TokenRequestSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/token_request\",\n validate: TokenRequestSchemaValidator as ContractSchema<TokenRequest>['validate'],\n} satisfies ContractSchema<TokenRequest>;\nexport const BootstrapRequestSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/bootstrap_request\",\n validate: BootstrapRequestSchemaValidator as ContractSchema<BootstrapRequest>['validate'],\n} satisfies ContractSchema<BootstrapRequest>;\nexport const UploadRequestSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/upload_request\",\n validate: UploadRequestSchemaValidator as ContractSchema<UploadRequest>['validate'],\n} satisfies ContractSchema<UploadRequest>;\nexport const MissingPathsSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/missing_paths\",\n validate: MissingPathsSchemaValidator as ContractSchema<MissingPaths>['validate'],\n} satisfies ContractSchema<MissingPaths>;\nexport const UploadStatusSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/upload_status\",\n validate: UploadStatusSchemaValidator as ContractSchema<UploadStatus>['validate'],\n} satisfies ContractSchema<UploadStatus>;\nexport const UploadStateSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/upload_state\",\n validate: UploadStateSchemaValidator as ContractSchema<UploadState>['validate'],\n} satisfies ContractSchema<UploadState>;\nexport const TokenResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/token_response\",\n validate: TokenResponseSchemaValidator as ContractSchema<TokenResponse>['validate'],\n} satisfies ContractSchema<TokenResponse>;\nexport const TokenSummarySchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/token_summary\",\n validate: TokenSummarySchemaValidator as ContractSchema<TokenSummary>['validate'],\n} satisfies ContractSchema<TokenSummary>;\nexport const AuditEventSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/audit_event\",\n validate: AuditEventSchemaValidator as ContractSchema<AuditEvent>['validate'],\n} satisfies ContractSchema<AuditEvent>;\nexport const CompleteUploadSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/api.json#/$defs/complete_upload\",\n validate: CompleteUploadSchemaValidator as ContractSchema<CompleteUpload>['validate'],\n} satisfies ContractSchema<CompleteUpload>;\nexport const ChunkManifestSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/manifest.json\",\n validate: ChunkManifestSchemaValidator as ContractSchema<CfNixCacheChunkManifest>['validate'],\n} satisfies ContractSchema<CfNixCacheChunkManifest>;\nexport const ProcessorJobSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/process-job.json\",\n validate: ProcessorJobSchemaValidator as ContractSchema<CfNixCacheProcessorJob>['validate'],\n} satisfies ContractSchema<CfNixCacheProcessorJob>;\nexport const APIResponsesSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json\",\n validate: APIResponsesSchemaValidator as ContractSchema<CfNixCacheAPIResponses>['validate'],\n} satisfies ContractSchema<CfNixCacheAPIResponses>;\nexport const ApiErrorSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/api_error\",\n validate: ApiErrorSchemaValidator as ContractSchema<ApiError>['validate'],\n} satisfies ContractSchema<ApiError>;\nexport const CacheResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/cache_response\",\n validate: CacheResponseSchemaValidator as ContractSchema<CacheResponse>['validate'],\n} satisfies ContractSchema<CacheResponse>;\nexport const CachePageSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/cache_page\",\n validate: CachePageSchemaValidator as ContractSchema<CachePage>['validate'],\n} satisfies ContractSchema<CachePage>;\nexport const UploadStateResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/upload_state_response\",\n validate: UploadStateResponseSchemaValidator as ContractSchema<UploadStateResponse>['validate'],\n} satisfies ContractSchema<UploadStateResponse>;\nexport const InitiateUploadResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/initiate_upload_response\",\n validate: InitiateUploadResponseSchemaValidator as ContractSchema<InitiateUploadResponse>['validate'],\n} satisfies ContractSchema<InitiateUploadResponse>;\nexport const TokenIssueResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/token_issue_response\",\n validate: TokenIssueResponseSchemaValidator as ContractSchema<TokenIssueResponse>['validate'],\n} satisfies ContractSchema<TokenIssueResponse>;\nexport const ResponseTokenSummarySchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/response_token_summary\",\n validate: ResponseTokenSummarySchemaValidator as ContractSchema<ResponseTokenSummary>['validate'],\n} satisfies ContractSchema<ResponseTokenSummary>;\nexport const TokenPageResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/token_page_response\",\n validate: TokenPageResponseSchemaValidator as ContractSchema<TokenPageResponse>['validate'],\n} satisfies ContractSchema<TokenPageResponse>;\nexport const AuditPageSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/audit_page\",\n validate: AuditPageSchemaValidator as ContractSchema<AuditPage>['validate'],\n} satisfies ContractSchema<AuditPage>;\nexport const MissingPathsResponseSchema = {\n ref: \"https://cf-nix-cache.dev/schemas/responses.json#/$defs/missing_paths_response\",\n validate: MissingPathsResponseSchemaValidator as ContractSchema<MissingPathsResponse>['validate'],\n} satisfies ContractSchema<MissingPathsResponse>;\n","import type { ContractSchema } from '../../contracts';\n\nexport class DomainError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly status: number,\n ) {\n super(message);\n }\n}\n\nexport function parseJsonSchema<T>(\n schema: ContractSchema<T>,\n value: unknown,\n): T {\n if (!schema.validate(value)) {\n const message = (schema.validate.errors ?? [])\n .map(\n (issue) =>\n `${issue.instancePath || 'body'}: ${issue.message ?? 'is invalid'}`,\n )\n .join('; ');\n throw new DomainError(\n 'validation_failed',\n message || 'request does not match the wire contract',\n 422,\n );\n }\n return value as T;\n}\n","import { DomainError } from './errors';\n\nconst NIX_BASE32 = '0123456789abcdfghijklmnpqrsvwxyz';\nconst NIX32 = new RegExp(`^[${NIX_BASE32}]{32}$`);\nconst CACHE_NAME = /^[a-z0-9_-]{1,64}$/;\n\nexport function hasControlCharacters(\n value: string,\n includeSlash = false,\n): boolean {\n return [...value].some((character) => {\n const code = character.codePointAt(0)!;\n return code <= 0x1f || code === 0x7f || (includeSlash && character === '/');\n });\n}\n\nexport function utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nexport function assertCacheName(value: unknown): asserts value is string {\n if (typeof value !== 'string' || !CACHE_NAME.test(value))\n throw new DomainError('invalid_cache', 'invalid cache name', 422);\n}\n\nexport function assertOpaqueId(\n value: unknown,\n label = 'resource',\n): asserts value is string {\n if (\n typeof value !== 'string' ||\n value.length < 1 ||\n value.length > 128 ||\n !/^[A-Za-z0-9_-]+$/u.test(value)\n ) {\n throw new DomainError('invalid_id', `invalid ${label} id`, 422);\n }\n}\n\nexport function assertNamespaceId(\n value: unknown,\n label = 'resource',\n): asserts value is string {\n if (typeof value !== 'string' || !/^[0-9a-f]{64}$/u.test(value))\n throw new DomainError('invalid_id', `invalid ${label} id`, 422);\n}\n\nexport function assertStoreHash(value: unknown): asserts value is string {\n if (typeof value !== 'string' || !NIX32.test(value))\n throw new DomainError('invalid_store_hash', 'invalid store hash', 422);\n}\n\nexport function assertIdempotencyKey(value: string | null): string {\n if (\n !value ||\n value.length > 128 ||\n ![...value].every(\n (character) =>\n character.codePointAt(0)! >= 0x21 && character.codePointAt(0)! <= 0x7e,\n )\n ) {\n throw new DomainError(\n 'idempotency_key_required',\n 'a valid Idempotency-Key is required',\n 400,\n );\n }\n return value;\n}\n\nexport function parseContentLength(request: Request): number {\n const value = request.headers.get('content-length');\n const length = value === null ? NaN : Number(value);\n if (!Number.isSafeInteger(length) || length < 0)\n throw new DomainError(\n 'length_required',\n 'upload parts require a valid Content-Length header',\n 411,\n );\n return length;\n}\n","import type {\n Grant,\n PathRecord,\n UploadManifest,\n UploadState,\n} from '../../types';\nimport { MAX_METADATA_BYTES } from '../../types';\nimport { GrantSchema, ManifestSchema, UploadRequestSchema } from './schemas';\nimport { DomainError, parseJsonSchema } from './errors';\nimport {\n assertCacheName,\n assertStoreHash,\n hasControlCharacters,\n utf8Bytes,\n} from './identifiers';\n\nconst NIX_BASE32 = '0123456789abcdfghijklmnpqrsvwxyz';\n\nfunction assertSafeInteger(\n value: unknown,\n label: string,\n): asserts value is number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new DomainError(\n 'invalid_number',\n `${label} must be a non-negative safe integer`,\n 422,\n );\n }\n}\n\nfunction validPathName(value: string): boolean {\n return (\n new RegExp(`^[${NIX_BASE32}]{32}-.{1,479}$`, 'u').test(value) &&\n utf8Bytes(value) <= 512 &&\n !hasControlCharacters(value, true)\n );\n}\n\nexport function validateGrant(grant: unknown): grant is Grant {\n return Boolean(GrantSchema.validate(grant));\n}\n\nexport function validateUploadManifest(\n manifest: UploadManifest,\n compressedSize: number,\n): void {\n const validManifest = parseJsonSchema(ManifestSchema, manifest);\n parseJsonSchema(UploadRequestSchema, {\n manifest: validManifest,\n compressed_size: compressedSize,\n });\n assertSafeInteger(compressedSize, 'compressed_size');\n assertCacheName(validManifest.cache);\n assertStoreHash(validManifest.store_hash);\n if (\n utf8Bytes(validManifest.store_path) > 512 ||\n hasControlCharacters(validManifest.store_path)\n ) {\n throw new DomainError(\n 'validation_failed',\n 'store metadata contains invalid characters',\n 422,\n );\n }\n const basename = validManifest.store_path.split('/').at(-1) ?? '';\n if (\n !validManifest.store_path.startsWith('/nix/store/') ||\n validManifest.store_path.split('/').length !== 4 ||\n !basename.startsWith(`${validManifest.store_hash}-`) ||\n basename.length <= validManifest.store_hash.length + 1\n ) {\n throw new DomainError(\n 'validation_failed',\n 'store path does not match the declared store hash',\n 422,\n );\n }\n if (\n new TextEncoder().encode(JSON.stringify(validManifest)).byteLength >\n MAX_METADATA_BYTES\n ) {\n throw new DomainError(\n 'validation_failed',\n 'upload metadata is too large',\n 422,\n );\n }\n if (\n validManifest.references.some((reference) => !validPathName(reference)) ||\n (validManifest.deriver != null && !validPathName(validManifest.deriver)) ||\n (validManifest.ca != null &&\n (utf8Bytes(validManifest.ca) > 512 ||\n hasControlCharacters(validManifest.ca)))\n ) {\n throw new DomainError(\n 'validation_failed',\n 'store metadata contains invalid characters',\n 422,\n );\n }\n}\n\nexport function requestFingerprint(input: {\n manifest: UploadManifest;\n compressed_size: number;\n}): string {\n return JSON.stringify({\n compressed_size: input.compressed_size,\n manifest: input.manifest,\n });\n}\n\nexport function partsFor(size: number, partSize: number): number {\n return Math.ceil(size / partSize);\n}\n\nexport function transition(from: UploadState, to: UploadState): void {\n if (from === to) return;\n const allowed: Record<UploadState, UploadState[]> = {\n CREATED: ['UPLOADING', 'ABORTED', 'FAILED'],\n UPLOADING: ['COMPLETING', 'ABORTED', 'FAILED'],\n COMPLETING: ['QUEUED', 'ABORTED', 'FAILED'],\n QUEUED: ['PROCESSING', 'ABORTED', 'FAILED'],\n PROCESSING: ['PUBLISHING', 'FAILED'],\n PUBLISHING: ['READY', 'FAILED'],\n READY: [],\n FAILED: [],\n ABORTED: [],\n };\n if (!allowed[from].includes(to))\n throw new DomainError(\n 'invalid_transition',\n `invalid upload transition from ${from} to ${to}`,\n 409,\n );\n}\n\nexport function deltaFor(\n next: PathRecord | null,\n previous: PathRecord | null,\n): number {\n return (next?.file_size ?? 0) - (previous?.file_size ?? 0);\n}\n","import { createLocalJWKSet, jwtVerify, type JWTPayload } from 'jose';\nimport type { Grant, TokenClaims } from '../../types';\nimport { validateGrant } from '../domain/uploads';\n\nfunction claimsFromPayload(payload: JWTPayload): TokenClaims {\n if (\n typeof payload.iss !== 'string' ||\n typeof payload.aud !== 'string' ||\n typeof payload.sub !== 'string' ||\n typeof payload.jti !== 'string' ||\n typeof payload.iat !== 'number' ||\n typeof payload.exp !== 'number' ||\n !Array.isArray(payload.grants) ||\n !payload.grants.every(validateGrant)\n ) {\n throw new Error('token claims do not match the capability contract');\n }\n return {\n iss: payload.iss,\n aud: payload.aud,\n sub: payload.sub,\n jti: payload.jti,\n iat: payload.iat,\n nbf: typeof payload.nbf === 'number' ? payload.nbf : undefined,\n exp: payload.exp,\n grants: payload.grants as Grant[],\n };\n}\n\nexport async function verifySignature(\n token: string,\n env: Env,\n): Promise<TokenClaims> {\n const configured = JSON.parse(env.AUTH_PUBLIC_JWKS) as Array<{\n kid: string;\n jwk: JsonWebKey;\n }>;\n const keySet = createLocalJWKSet({\n keys: configured.map(({ kid, jwk }) => ({ ...jwk, kid })),\n });\n const verified = await jwtVerify(token, keySet, {\n issuer: env.TOKEN_ISSUER,\n audience: env.TOKEN_AUDIENCE,\n algorithms: ['EdDSA'],\n typ: 'JWT',\n });\n return claimsFromPayload(verified.payload);\n}\n","import type { Role, TokenClaims } from '../../types';\nimport { namedStub } from '../../rpc';\nimport { permitsAny, permitsCache, permitsGlobal } from './authorization';\nimport { tokenFromRequest } from './credentials';\nimport { AuthError } from './errors';\nimport { verifySignature } from './jwt';\n\nconst TOKEN_STATUS_CACHE_TTL = 5;\n\nasync function verifiedClaims(\n request: Request,\n env: Env,\n): Promise<TokenClaims> {\n const token = tokenFromRequest(request);\n if (!token)\n throw new AuthError('missing_token', 'authentication is required');\n try {\n return await verifySignature(token, env);\n } catch (error) {\n throw new AuthError(\n 'invalid_token',\n error instanceof Error ? error.message : 'invalid token',\n );\n }\n}\n\nasync function assertActive(env: Env, claims: TokenClaims): Promise<void> {\n const key = new Request(\n `https://token-status.invalid/${encodeURIComponent(claims.iss)}/${encodeURIComponent(claims.jti)}?exp=${claims.exp}`,\n );\n try {\n const cached = await caches.default.match(key);\n if (cached) return;\n } catch {\n // Cache API availability is runtime-dependent; the catalog remains the\n // authoritative fallback.\n }\n\n const result = await namedStub(env.TOKEN_CATALOG, 'catalog').check({\n jti: claims.jti,\n exp: claims.exp,\n });\n if (!result.ok || !result.value.active)\n throw new AuthError('revoked_token', 'token is revoked or unknown');\n\n try {\n void caches.default\n .put(\n key,\n Response.json(\n { active: true },\n {\n headers: {\n 'cache-control': `public, max-age=${TOKEN_STATUS_CACHE_TTL}`,\n },\n },\n ),\n )\n .catch(() => undefined);\n } catch {\n // Best-effort acceleration only; never make authentication depend on it.\n }\n}\n\nexport async function authenticateAny(\n request: Request,\n env: Env,\n required: Role,\n): Promise<TokenClaims> {\n const claims = await verifiedClaims(request, env);\n if (!permitsAny(claims, required))\n throw new AuthError(\n 'forbidden',\n 'token does not grant the requested capability',\n );\n await assertActive(env, claims);\n return claims;\n}\n\nexport async function authenticate(\n request: Request,\n env: Env,\n cache: string,\n required: Role,\n): Promise<TokenClaims> {\n const claims = await verifiedClaims(request, env);\n if (!permitsCache(claims, cache, required))\n throw new AuthError(\n 'forbidden',\n 'token does not grant the requested capability',\n );\n await assertActive(env, claims);\n return claims;\n}\n\nexport async function authenticateGlobal(\n request: Request,\n env: Env,\n required: Role,\n): Promise<TokenClaims> {\n const claims = await verifiedClaims(request, env);\n if (!permitsGlobal(claims, required))\n throw new AuthError(\n 'forbidden',\n 'token does not grant the requested global capability',\n );\n await assertActive(env, claims);\n return claims;\n}\n\nexport { AuthError } from './errors';\nexport { hashSecret } from './credentials';\n","import { base64url } from 'jose';\nimport { DomainError } from './errors';\n\nexport function encodeCursor(value: unknown): string {\n return base64url.encode(JSON.stringify(value));\n}\n\nexport function decodeCursor<T>(value: string | null): T | null {\n if (!value) return null;\n try {\n return JSON.parse(new TextDecoder().decode(base64url.decode(value))) as T;\n } catch {\n throw new DomainError('invalid_cursor', 'invalid pagination cursor', 400);\n }\n}\n","import { DomainError } from '../domain/validation';\nimport type { RpcResult } from '../../rpc';\n\nexport class ApiCallError extends Error {\n constructor(\n readonly status: number,\n readonly code: string,\n message: string,\n ) {\n super(message);\n }\n}\n\nexport async function parseJson(request: Request): Promise<unknown> {\n try {\n return await request.json();\n } catch {\n throw new DomainError(\n 'validation_failed',\n 'request body must be valid JSON',\n 400,\n );\n }\n}\n\nexport function unwrapRpc<T>(result: RpcResult<T>): T {\n if (!result.ok)\n throw new ApiCallError(\n result.error.status,\n result.error.code,\n result.error.message,\n );\n return result.value;\n}\n","import { authenticate, AuthError } from '../auth/authentication';\nimport { assertCacheName, assertStoreHash } from '../domain/validation';\nimport type {\n CacheConfig,\n CacheReference,\n CacheState,\n PathRecord,\n Role,\n} from '../../types';\nimport { idStub, namedStub } from '../../rpc';\nimport { ApiCallError, unwrapRpc } from './errors';\n\nexport function system(env: Env) {\n return namedStub(env.SYSTEM_CONTROL, 'system');\n}\n\nexport function coordinator(env: Env, reference: CacheReference) {\n return idStub(env.CACHE_COORDINATOR, reference.coordinator_id);\n}\n\nconst DIRECTORY_CACHE_TTL = 5;\n\nfunction effectiveLifecycle(\n catalogue: CacheReference['lifecycle'],\n coordinatorLifecycle: CacheConfig['lifecycle'],\n): CacheConfig['lifecycle'] {\n // DELETING is a safety fence and wins over stale cache entries; CREATING\n // also wins over ACTIVE so activation cannot become visible early.\n if (catalogue === 'DELETING' || coordinatorLifecycle === 'DELETING')\n return 'DELETING';\n if (catalogue === 'CREATING' || coordinatorLifecycle === 'CREATING')\n return 'CREATING';\n return 'ACTIVE';\n}\n\nasync function directoryReference(\n env: Env,\n name: string,\n): Promise<CacheReference> {\n const key = new Request(`https://directory.invalid/cache/${name}`);\n try {\n const cached = await caches.default.match(key);\n if (cached) return (await cached.json()) as CacheReference;\n } catch {\n // The Cache API is unavailable in some local/unit runtimes; the Durable\n // Object remains the authoritative fallback.\n }\n\n const reference = unwrapRpc(await system(env).getCache(name));\n try {\n void caches.default\n .put(\n key,\n Response.json(reference, {\n headers: { 'cache-control': `max-age=${DIRECTORY_CACHE_TTL}` },\n }),\n )\n .catch(() => undefined);\n } catch {\n // Best-effort acceleration only; never make routing depend on the cache.\n }\n return reference;\n}\n\nexport async function getCache(env: Env, name: string): Promise<CacheState> {\n assertCacheName(name);\n let reference = await directoryReference(env, name);\n // Cache API entries written before lifecycle was included are not trusted\n // for routing. Refresh them once from the catalogue so a CREATING cache\n // cannot be served while its coordinator is already ACTIVE.\n if (!reference.lifecycle)\n reference = unwrapRpc(await system(env).getCache(name));\n let configResult = await coordinator(env, reference).getCache();\n // A short-lived directory entry can point at a completed deletion. Refresh\n // once so a cache recreated with the same name is routed to its incarnation.\n if (!configResult.ok && configResult.error.code === 'not_found') {\n reference = unwrapRpc(await system(env).getCache(name));\n configResult = await coordinator(env, reference).getCache();\n }\n const config = unwrapRpc(configResult);\n return {\n ...config,\n // SystemControl is the lifecycle saga authority. During activation and\n // teardown it may intentionally lead the coordinator by one step.\n lifecycle: effectiveLifecycle(reference.lifecycle, config.lifecycle),\n reference,\n };\n}\n\nexport { effectiveLifecycle };\n\nexport function publicCache(cache: CacheState): CacheConfig {\n return {\n id: cache.id,\n name: cache.name,\n public: cache.public,\n quota_bytes: cache.quota_bytes,\n logical_bytes: cache.logical_bytes,\n encoding_id: cache.encoding_id,\n created_at: cache.created_at,\n lifecycle: cache.lifecycle,\n };\n}\n\nexport async function getPath(\n env: Env,\n cache: CacheState,\n storeHash: string,\n): Promise<PathRecord> {\n assertStoreHash(storeHash);\n const shard = idStub(\n env.CACHE_INDEX,\n env.CACHE_INDEX!.idFromName(\n `${cache.reference.incarnation}:${storeHash.slice(0, 2)}`,\n ),\n );\n return unwrapRpc(await shard.lookup(storeHash));\n}\n\nexport function isNotFound(error: unknown): boolean {\n return error instanceof ApiCallError && error.code === 'not_found';\n}\n\nexport async function authFor(\n request: Request,\n env: Env,\n cache: CacheState,\n required: Role,\n): Promise<{ sub: string }> {\n if (cache.lifecycle !== 'ACTIVE')\n throw new AuthError(\n cache.lifecycle === 'DELETING' ? 'cache_deleting' : 'cache_unavailable',\n 'cache is not active',\n );\n if (required === 'pull' && cache.public) return { sub: 'anonymous' };\n return authenticate(request, env, cache.name, required);\n}\n","import { canDelegate } from '../auth';\nimport {\n assertIdempotencyKey,\n DomainError,\n parseJsonSchema,\n TokenRequestSchema,\n} from '../domain/validation';\nimport type { Grant, TokenClaims } from '../../types';\nimport { namedStub } from '../../rpc';\nimport { unwrapRpc } from './errors';\n\nexport function idempotency(request: Request): string {\n return assertIdempotencyKey(request.headers.get('Idempotency-Key'));\n}\n\nexport async function issueFromInput(\n env: Env,\n input: { subject: string; valid_for_seconds: number; grants: Grant[] },\n operationId: string,\n parent?: TokenClaims,\n): Promise<{\n id: string;\n token: string;\n expires_at: number;\n repeated: boolean;\n}> {\n const validated = parseJsonSchema(TokenRequestSchema, input);\n const issuedAt = Math.floor(Date.now() / 1000);\n const expiresAt = issuedAt + validated.valid_for_seconds;\n if (parent && !canDelegate(parent, validated.grants, expiresAt))\n throw new DomainError(\n 'forbidden',\n 'requested grants must be individually covered by an administrator grant and expire no later than the issuer',\n 403,\n );\n const fingerprint = JSON.stringify(validated);\n return unwrapRpc(\n await namedStub(env.TOKEN_CATALOG, 'catalog').issue({\n operation_id: operationId,\n fingerprint,\n actor: parent?.sub ?? validated.subject,\n subject: validated.subject,\n grants: validated.grants,\n expires_at: expiresAt,\n }),\n );\n}\n","// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n","// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n","// src/utils/buffer.ts\nimport { sha256 } from \"./crypto.js\";\nvar equal = (a, b) => {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n const va = new DataView(a);\n const vb = new DataView(b);\n let i = va.byteLength;\n while (i--) {\n if (va.getUint8(i) !== vb.getUint8(i)) {\n return false;\n }\n }\n return true;\n};\nvar constantTimeEqualString = (a, b) => {\n const aLen = a.length;\n const bLen = b.length;\n const maxLen = Math.max(aLen, bLen);\n let out = aLen ^ bLen;\n for (let i = 0; i < maxLen; i++) {\n const aChar = i < aLen ? a.charCodeAt(i) : 0;\n const bChar = i < bLen ? b.charCodeAt(i) : 0;\n out |= aChar ^ bChar;\n }\n return out === 0;\n};\nvar timingSafeEqualString = async (a, b, hashFunction) => {\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (sa == null || sb == null || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n const hashEqual = constantTimeEqualString(sa, sb);\n const originalEqual = constantTimeEqualString(a, b);\n return hashEqual && originalEqual;\n};\nvar timingSafeEqual = async (a, b, hashFunction) => {\n if (typeof a === \"string\" && typeof b === \"string\") {\n return timingSafeEqualString(a, b, hashFunction);\n }\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (!sa || !sb || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n return timingSafeEqualString(sa, sb);\n};\nvar bufferToString = (buffer) => {\n if (buffer instanceof ArrayBuffer) {\n const enc = new TextDecoder(\"utf-8\");\n return enc.decode(buffer);\n }\n return buffer;\n};\nvar bufferToFormData = (arrayBuffer, contentType) => {\n const response = new Response(arrayBuffer, {\n headers: {\n // Normalize the media type (case-insensitive) while keeping parameters like the boundary\n \"Content-Type\": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase())\n }\n });\n return response.formData();\n};\nexport {\n bufferToFormData,\n bufferToString,\n equal,\n timingSafeEqual\n};\n","// src/utils/body.ts\nimport { bufferToFormData } from \"./buffer.js\";\nvar isRawRequest = (request) => \"headers\" in request;\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const contentType = headers.get(\"Content-Type\");\n const mediaType = contentType?.split(\";\")[0].trim().toLowerCase();\n if (mediaType === \"multipart/form-data\" || mediaType === \"application/x-www-form-urlencoded\") {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n if (!isRawRequest(request) && request.bodyCache.formData) {\n return convertFormDataToBodyData(\n await request.bodyCache.formData,\n options\n );\n }\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const arrayBuffer = await request.arrayBuffer();\n const formDataPromise = bufferToFormData(arrayBuffer, headers.get(\"Content-Type\") || \"\");\n if (!isRawRequest(request)) {\n request.bodyCache.formData = formDataPromise;\n }\n const formData = await formDataPromise;\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n if (/(?:^|\\.)__proto__\\./.test(key)) {\n return;\n }\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const hashIndex = url.indexOf(\"#\", i);\n const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n const path = url.slice(start, end);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63 || charCode === 35) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar tryDecodeURIComponent = (str) => str.indexOf(\"%\") !== -1 ? tryDecode(str, decodeURIComponent_) : str;\nvar _decodeURI = (value) => {\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return tryDecodeURIComponent(value);\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && key.indexOf(\"%\") === -1 && key.indexOf(\"+\") === -1) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = /* @__PURE__ */ Object.create(null);\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode,\n tryDecodeURI,\n tryDecodeURIComponent\n};\n","// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { getQueryParam, getQueryParams, tryDecodeURIComponent } from \"./utils/url.js\";\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && tryDecodeURIComponent(param);\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = tryDecodeURIComponent(value);\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = /* @__PURE__ */ Object.create(null);\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n for (const anyCachedKey in bodyCache) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * `.bytes()` parses the request body as a `Uint8Array`.\n *\n * @see {@link https://hono.dev/docs/api/request#bytes}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.bytes()\n * })\n * ```\n */\n bytes() {\n return this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n ;\n (this.#validatedData ??= {})[target] = data;\n }\n valid(target) {\n return this.#validatedData?.[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const body = await req[cacheKey]();\n const headers = req.header();\n if (body instanceof FormData) {\n delete headers[\"content-type\"];\n }\n const requestInit = {\n body,\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers,\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n","// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \"&quot;\";\n break;\n case 39:\n escape = \"&#39;\";\n break;\n case 38:\n escape = \"&amp;\";\n break;\n case 60:\n escape = \"&lt;\";\n break;\n case 62:\n escape = \"&gt;\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n","// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= createResponseInstance(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = createResponseInstance(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = createResponseInstance(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;\n if (typeof arg === \"object\" && arg.headers) {\n responseHeaders ??= new Headers();\n for (const [key, value] of new Headers(arg.headers)) {\n if (key === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n if (!responseHeaders) {\n let count = 0;\n for (const k in headers) {\n if (++count > 1 || typeof headers[k] !== \"string\") {\n responseHeaders = new Headers();\n break;\n }\n }\n }\n if (responseHeaders) {\n for (const k in headers) {\n const v = headers[k];\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return createResponseInstance(data, {\n status,\n headers: responseHeaders ?? headers\n });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => createResponseInstance();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\", \"query\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n","// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n","// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n query;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler, r.basePath);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = this.getPath(request).slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler, baseRoutePath) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = {\n basePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n path,\n method,\n handler\n };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} env - env Object\n * @param {ExecutionContext} executionCtx - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n","// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return b === TAIL_WILDCARD_REG_EXP_STR ? -1 : 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n // handler index of a dynamic path, or -1 for a static path terminal\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, isStatic) {\n let node = this;\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n const pattern = token.length === 1 ? token === \"*\" ? i === len - 1 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : null : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let nextNode;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n if (regexpStr.length === 1 && regExpMetaChars.has(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n nextNode = node.#children[regexpStr];\n if (!nextNode) {\n if (regexpStr !== ONLY_WILDCARD_REG_EXP_STR && regexpStr !== TAIL_WILDCARD_REG_EXP_STR) {\n for (const k in node.#children) {\n if (\n // a single-char pattern coexists with single-char literals as a literal does\n (regexpStr.length > 1 || k.length > 1) && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n ) {\n throw PATH_ERROR;\n }\n }\n }\n nextNode = node.#children[regexpStr] = new _Node();\n }\n if (name !== \"\") {\n nextNode.#varIndex ??= context.varIndex++;\n paramMap.push([name, nextNode.#varIndex]);\n }\n } else {\n nextNode = node.#children[token];\n if (!nextNode) {\n for (const k in node.#children) {\n if (k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR) {\n throw PATH_ERROR;\n }\n }\n nextNode = node.#children[token] = new _Node();\n }\n }\n node = nextNode;\n }\n if (node.#index !== void 0) {\n throw PATH_ERROR;\n }\n node.#index = isStatic ? -1 : index;\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n const childStr = c.buildRegExpStr();\n return childStr === \"\" ? \"\" : (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + childStr;\n }).filter(Boolean);\n if (typeof this.#index === \"number\" && this.#index !== -1) {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n #index = 0;\n // dynamic path -> [handler index, param assoc]; static paths are not registered\n paths = /* @__PURE__ */ Object.create(null);\n insert(path, isStatic) {\n if (isStatic) {\n this.#root.insert(path.split(\"\"), 0, [], this.#context, true);\n return;\n }\n const paramAssoc = [];\n const groups = [];\n let markedPath = path;\n for (let i = 0; ; ) {\n let replaced = false;\n markedPath = markedPath.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = markedPath.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, this.#index, paramAssoc, this.#context, false);\n this.paths[path] = [this.#index++, paramAssoc];\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n #tries;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#tries = { [METHOD_NAME_ALL]: new Trie() };\n }\n #insertPath(method, path) {\n try {\n this.#tries[method].insert(path, !/\\*|\\/:/.test(path));\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n this.#tries[method] = new Trie();\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n this.#insertPath(method, p);\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n Object.keys(middleware).forEach((m) => {\n if ((method === METHOD_NAME_ALL || method === m) && !middleware[m][path]) {\n this.#insertPath(m, path);\n middleware[m][path] = findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n });\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n if (!routes[m][path2]) {\n this.#insertPath(m, path2);\n routes[m][path2] = [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n }\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = this.#tries = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const middleware = this.#middleware[method];\n const routes = this.#routes[method];\n const trie = this.#tries[method];\n const staticMap = /* @__PURE__ */ Object.create(null);\n const handlerData = [];\n [middleware, routes].forEach((r) => {\n for (const path in r) {\n const handlers = r[path];\n const pathData = trie.paths[path];\n if (!pathData) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n continue;\n }\n const paramAssoc = pathData[1];\n handlerData[pathData[0]] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n });\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n }\n};\nexport {\n RegExpRouter\n};\n","// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n","// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar hasChildren = (children) => {\n for (const _ in children) {\n return true;\n }\n return false;\n};\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n const len = parts.length;\n let partOffsets = null;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n }\n this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n this.#pushHandlerSets(handlerSets, astNode, method, node.#params);\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n if (matcher instanceof RegExp) {\n if (partOffsets === null) {\n partOffsets = new Array(len);\n let offset = path[0] === \"/\" ? 1 : 0;\n for (let p = 0; p < len; p++) {\n partOffsets[p] = offset;\n offset += parts[p].length + 1;\n }\n }\n const restPathString = path.substring(partOffsets[i]);\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n if (m[0].length === restPathString.length && child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n node.#params,\n params\n );\n }\n if (hasChildren(child.#children)) {\n child.#params = params;\n const componentCount = m[0].match(/\\//g)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n if (child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n params,\n node.#params\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n const shifted = curNodesQueue.shift();\n curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n","// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n","// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n","import type { CacheIndex, QuotaLedger } from './ports';\nimport type { CacheMutation, PreparedMutation } from '../../types';\n\n/**\n * Infrastructure-free publication protocol. Durable Object adapters provide\n * the ports; this use case owns the ordering and compensation rules.\n */\nexport class PublicationApplication {\n constructor(\n private readonly index: CacheIndex,\n private readonly quota: QuotaLedger,\n ) {}\n\n async execute(\n operationId: string,\n mutation: CacheMutation,\n ): Promise<PreparedMutation> {\n const prepared = await this.index.prepare(operationId, mutation);\n if (prepared.status === 'ABORTED')\n throw new PublicationError(\n 'operation was aborted before publication',\n false,\n );\n try {\n const reservation = await this.quota.reserve(operationId, prepared.delta);\n if (reservation.status === 'ABORTED')\n throw new PublicationError('quota operation was aborted', false);\n } catch (error) {\n // A transport failure is ambiguous: the quota reservation may have\n // committed remotely, so leave the durable prepare in place for a\n // retry/reconciliation rather than issuing a compensating mutation.\n if (error instanceof PublicationError && !error.retryable)\n await this.index.abort(operationId);\n throw error;\n }\n if (prepared.status !== 'COMMITTED') await this.index.commit(operationId);\n await this.quota.finalize(operationId);\n return prepared;\n }\n}\n\nexport class PublicationError extends Error {\n constructor(\n message: string,\n readonly retryable: boolean,\n ) {\n super(message);\n }\n}\n","import type { ChunkRef } from '../../types';\n\nexport interface PlannedRange {\n chunk: ChunkRef;\n offset: number;\n length: number;\n output_offset: number;\n}\n\nexport interface ByteRange {\n start: number;\n end: number;\n}\n\nexport class RangeRequestError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport function parseRange(\n value: string | null,\n size: number,\n): ByteRange | null {\n if (!value) return null;\n const match = /^bytes=(\\d*)-(\\d*)$/.exec(value.trim());\n if (!match || (!match[1] && !match[2]) || size === 0)\n throw new RangeRequestError('invalid range');\n const suffix = !match[1] && Boolean(match[2]);\n const start = suffix\n ? Math.max(0, size - Number(match[2]))\n : Number(match[1]);\n const end = suffix || !match[2] ? size - 1 : Number(match[2]);\n if (\n !Number.isSafeInteger(start) ||\n !Number.isSafeInteger(end) ||\n start < 0 ||\n end < start ||\n start >= size\n )\n throw new RangeRequestError('range not satisfiable');\n return { start, end: Math.min(end, size - 1) };\n}\n\nexport function planRange(\n chunks: ChunkRef[],\n range: ByteRange | null,\n): PlannedRange[] {\n const start = range?.start ?? 0;\n const end =\n range?.end ??\n chunks.reduce((total, chunk) => total + chunk.compressed_size, 0) - 1;\n let cursor = 0;\n const plan: PlannedRange[] = [];\n for (const chunk of chunks) {\n const chunkStart = cursor;\n const chunkEnd = cursor + chunk.compressed_size - 1;\n const overlapStart = Math.max(start, chunkStart);\n const overlapEnd = Math.min(end, chunkEnd);\n if (overlapStart <= overlapEnd) {\n plan.push({\n chunk,\n offset: overlapStart - chunkStart,\n length: overlapEnd - overlapStart + 1,\n output_offset: overlapStart - start,\n });\n }\n cursor += chunk.compressed_size;\n }\n return plan;\n}\n","import { AuthError } from '../auth';\nimport { PublicationError } from '../cache/application';\nimport { DomainError } from '../domain/validation';\nimport { RangeRequestError } from '../nix/range';\nimport { ApiCallError } from './errors';\n\ntype RequestContext = { get(key: 'requestId'): string };\n\nexport function errorResponse(\n c: RequestContext,\n code: string,\n message: string,\n status: number,\n): Response {\n return Response.json(\n { code, message, request_id: c.get('requestId') },\n {\n status,\n headers: {\n 'cache-control': 'no-store',\n 'x-request-id': c.get('requestId'),\n },\n },\n );\n}\n\nfunction errorStatus(error: AuthError): number {\n if (error.code === 'missing_token') return 401;\n if (error.code === 'cache_deleting') return 410;\n if (error.code === 'cache_unavailable') return 503;\n return 403;\n}\n\nexport function handleError(caught: unknown, c: RequestContext): Response {\n if (caught instanceof AuthError)\n return errorResponse(c, caught.code, caught.message, errorStatus(caught));\n if (caught instanceof DomainError)\n return errorResponse(c, caught.code, caught.message, caught.status);\n if (caught instanceof ApiCallError)\n return errorResponse(c, caught.code, caught.message, caught.status);\n if (caught instanceof PublicationError)\n return errorResponse(\n c,\n 'retryable_failure',\n caught.message,\n caught.retryable ? 503 : 409,\n );\n if (caught instanceof RangeRequestError)\n return errorResponse(c, 'range_not_satisfiable', caught.message, 416);\n console.error({ request_id: c.get('requestId'), error: caught });\n return errorResponse(c, 'internal_error', 'internal server error', 500);\n}\n","import {\n WorkflowEntrypoint,\n type WorkflowEvent,\n type WorkflowStep,\n} from 'cloudflare:workers';\nimport type { CacheWorkflowJob } from '../../types';\nimport { idStub } from '../../rpc';\nimport { coordinator, system } from '../runtime/http';\n\nexport class DeleteCacheWorkflow extends WorkflowEntrypoint<\n Env,\n CacheWorkflowJob\n> {\n async run(\n event: WorkflowEvent<CacheWorkflowJob>,\n step: WorkflowStep,\n ): Promise<{ deleted: number }> {\n const job = event.payload;\n const cache = coordinator(this.env, {\n id: job.cache_id,\n name: job.cache,\n incarnation: job.incarnation,\n coordinator_id: job.coordinator_id,\n });\n let deleted = 0;\n for (let prefix = 0; prefix < 256; prefix += 1) {\n const value = prefix.toString(16).padStart(2, '0');\n const count = await step.do(`clear shard ${value}`, async () => {\n const shardId = this.env\n .CACHE_INDEX!.idFromName(`${job.incarnation}:${value}`)\n .toString();\n const shard = idStub(this.env.CACHE_INDEX, shardId);\n const cleared = await shard.clear(\n `clear:${job.incarnation}:${job.operation_id}:${value}`,\n );\n if (!cleared.ok)\n throw new Error(\n `unable to clear shard ${value}: ${cleared.error.message}`,\n );\n const reconciled = await cache.reconcile({\n operation_ids: cleared.value.reconcile_operation_ids,\n });\n if (!reconciled.ok)\n throw new Error(\n `unable to reconcile shard ${value} publications: ${reconciled.error.message}`,\n );\n const applied = await cache.clearDelta({\n operation_id: `clear:${job.incarnation}:${job.operation_id}:${value}`,\n delta: -cleared.value.bytes,\n });\n if (!applied.ok)\n throw new Error(\n `unable to apply shard ${value} quota delta: ${applied.error.message}`,\n );\n return cleared.value.deleted;\n });\n deleted += count;\n }\n await step.do('flush cache audit', async () => {\n const flushed = await cache.flushAudit();\n if (!flushed.ok)\n throw new Error(\n `unable to flush cache audit: ${flushed.error.message}`,\n );\n return { flushed: true };\n });\n await step.do('remove cache storage', async () => {\n const removed = await cache.remove();\n if (!removed.ok)\n throw new Error(\n `unable to remove cache coordinator: ${removed.error.message}`,\n );\n const catalog = await system(this.env).removeCache({\n id: job.cache_id,\n name: job.cache,\n incarnation: job.incarnation,\n coordinator_id: job.coordinator_id,\n });\n if (!catalog.ok)\n throw new Error(\n `unable to remove cache catalog: ${catalog.error.message}`,\n );\n return { removed: true };\n });\n return { deleted };\n }\n}\n","export async function ensureWorkflow<T>(\n workflow: Workflow<T>,\n id: string,\n params: T,\n): Promise<void> {\n try {\n await workflow.createBatch([{ id, params }]);\n return;\n } catch (createError) {\n try {\n const instance = await workflow.get(id);\n const status = await instance.status();\n if (status.status === 'errored' || status.status === 'terminated')\n await instance.restart();\n return;\n } catch (lookupError) {\n throw new Error(\n `workflow enqueue failed for ${id}: ${createError instanceof Error ? createError.message : String(createError)}; reconciliation failed: ${lookupError instanceof Error ? lookupError.message : String(lookupError)}`,\n { cause: lookupError },\n );\n }\n }\n}\n","import {\n WorkflowEntrypoint,\n type WorkflowEvent,\n type WorkflowStep,\n} from 'cloudflare:workers';\nimport type { ProcessJob, ProcessResult } from '../../types';\nimport { idStub } from '../../rpc';\n\nclass PermanentWorkflowError extends Error {}\n\nexport class ProcessUploadWorkflow extends WorkflowEntrypoint<Env, ProcessJob> {\n async run(\n event: WorkflowEvent<ProcessJob>,\n step: WorkflowStep,\n ): Promise<ProcessResult> {\n const job = event.payload;\n const upload = idStub(this.env.UPLOAD_JOB, job.job_id);\n try {\n await step.do('claim upload', async () => {\n const result = await upload.processing();\n if (!result.ok)\n throw new (\n result.error.status >= 500 ? Error : PermanentWorkflowError\n )(`${result.error.code}: ${result.error.message}`);\n return { ok: true };\n });\n const processed = await step.do(\n 'process NAR',\n { retries: { limit: 4, delay: '30 seconds', backoff: 'exponential' } },\n async () => {\n const response = await this.env\n .PROCESSOR!.getByName(job.job_id)\n .fetch('https://processor/process', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(job),\n });\n if (response.status === 503)\n throw new Error(\n `processor temporary failure: ${await response.text()}`,\n );\n if (!response.ok)\n return {\n permanent_error: `processor rejected input with ${response.status}: ${await response.text()}`,\n } as const;\n return { result: await response.json<ProcessResult>() } as const;\n },\n );\n if ('permanent_error' in processed)\n throw new PermanentWorkflowError(processed.permanent_error);\n const publication = await step.do(\n 'publish authoritative manifest',\n { retries: { limit: 5, delay: '10 seconds', backoff: 'exponential' } },\n async () => {\n const result = await upload.publish(processed.result);\n if (!result.ok) {\n if (result.error.status >= 500)\n throw new Error(`${result.error.code}: ${result.error.message}`);\n return {\n permanent_error: `${result.error.code}: ${result.error.message}`,\n } as const;\n }\n return { published: true } as const;\n },\n );\n if ('permanent_error' in publication)\n throw new PermanentWorkflowError(publication.permanent_error);\n return processed.result;\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : String(caught);\n const terminal = caught instanceof PermanentWorkflowError;\n const failed = await step.do('mark failed', async () => {\n const result = await upload.fail(message, terminal);\n if (!result.ok)\n throw new Error(\n `unable to mark upload failed: ${result.error.message}`,\n );\n return { failed: true };\n });\n void failed;\n throw caught;\n }\n }\n}\n","import type { AuditEvent } from '../../types';\n\nexport function pageLimit(value: string | undefined): number {\n const parsed = Number(value ?? 50);\n return Number.isSafeInteger(parsed) ? Math.min(Math.max(parsed, 1), 100) : 50;\n}\n\nexport function event(\n id: string,\n actor: string,\n action: string,\n resource: string,\n outcome: AuditEvent['outcome'],\n): AuditEvent {\n return {\n id,\n timestamp: Math.floor(Date.now() / 1000),\n actor,\n action,\n resource,\n outcome,\n metadata: {},\n };\n}\n","import { Hono } from 'hono';\nimport { authenticate, authenticateGlobal } from '../auth/authentication';\nimport {\n assertCacheName,\n ConfigureCacheSchema,\n CreateCacheSchema,\n decodeCursor,\n encodeCursor,\n parseJsonSchema,\n} from '../domain/validation';\nimport { ensureWorkflow } from '../workflows/workflow';\nimport type { AppEnv } from '../runtime/http';\nimport {\n coordinator,\n effectiveLifecycle,\n getCache,\n idempotency,\n parseJson,\n publicCache,\n system,\n unwrapRpc,\n} from '../runtime/http';\nimport { ENCODING_ID } from '../../types';\nimport { event } from './helpers';\nimport { pageLimit } from './helpers';\n\nexport const cacheRoutes = new Hono<AppEnv>();\n\ncacheRoutes.post('/api/caches', async (c) => {\n const operationId = idempotency(c.req.raw);\n const admin = await authenticateGlobal(c.req.raw, c.env, 'admin');\n const input = parseJsonSchema(CreateCacheSchema, await parseJson(c.req.raw));\n const creation = unwrapRpc(\n await system(c.env).createCache({\n operation_id: operationId,\n fingerprint: JSON.stringify(input),\n name: input.name,\n public: input.public ?? false,\n quota_bytes: input.quota_bytes,\n encoding_id: input.encoding_id ?? ENCODING_ID,\n }),\n );\n const reference = creation.reference;\n const cacheCoordinator = coordinator(c.env, reference);\n unwrapRpc(\n await cacheCoordinator.initialize({\n reference,\n public: input.public ?? false,\n quota_bytes: input.quota_bytes,\n encoding_id: input.encoding_id ?? ENCODING_ID,\n created_at: Math.floor(Date.now() / 1000),\n }),\n );\n // Activate the serving authority first. The catalogue remains CREATING\n // until this succeeds, so a lost response leaves a state that a later\n // create request can safely resume.\n const active = unwrapRpc(await cacheCoordinator.activate());\n unwrapRpc(await system(c.env).activateCache(reference));\n unwrapRpc(\n await cacheCoordinator.recordAudit(\n event(\n `cache-create:${operationId}`,\n admin.sub,\n 'cache.create',\n input.name,\n 'success',\n ),\n ),\n );\n return c.json(\n publicCache({ ...active, reference }),\n creation.repeated ? 200 : 201,\n );\n});\n\ncacheRoutes.get('/api/caches', async (c) => {\n await authenticate(c.req.raw, c.env, '*', 'admin');\n const limit = pageLimit(c.req.query('limit'));\n const after = decodeCursor<string>(c.req.query('cursor') ?? null) ?? null;\n const page = unwrapRpc(await system(c.env).listCaches({ after, limit }));\n const items = await Promise.all(\n page.items.map(async (reference) => {\n const config = unwrapRpc(await coordinator(c.env, reference).getCache());\n return publicCache({\n ...config,\n lifecycle: effectiveLifecycle(reference.lifecycle, config.lifecycle),\n reference,\n });\n }),\n );\n return c.json({\n items,\n next_cursor: page.next_after ? encodeCursor(page.next_after) : null,\n });\n});\n\ncacheRoutes.get('/api/caches/:name', async (c) => {\n const name = c.req.param('name');\n assertCacheName(name);\n const cache = await getCache(c.env, name);\n await authenticate(c.req.raw, c.env, '*', 'admin');\n return c.json(publicCache(cache));\n});\n\ncacheRoutes.delete('/api/caches/:name', async (c) => {\n const operationId = idempotency(c.req.raw);\n const name = c.req.param('name');\n assertCacheName(name);\n const cache = await getCache(c.env, name);\n const admin = await authenticate(c.req.raw, c.env, cache.name, 'admin');\n const deletion = unwrapRpc(\n await system(c.env).beginDelete({\n reference: cache.reference,\n operation_id: operationId,\n }),\n );\n unwrapRpc(await coordinator(c.env, cache.reference).beginDelete());\n unwrapRpc(\n await coordinator(c.env, cache.reference).recordAudit(\n event(\n `cache-delete:${operationId}`,\n admin.sub,\n 'cache.delete',\n cache.name,\n 'accepted',\n ),\n ),\n );\n await ensureWorkflow(\n c.env.DELETE_CACHE!,\n `delete:${cache.reference.incarnation}`,\n {\n cache: cache.name,\n cache_id: cache.reference.id,\n incarnation: cache.reference.incarnation,\n coordinator_id: cache.reference.coordinator_id,\n operation_id: deletion.operation_id,\n },\n );\n return c.json({ deleting: true }, 202);\n});\n\ncacheRoutes.patch('/api/caches/:name/config', async (c) => {\n const operationId = idempotency(c.req.raw);\n const name = c.req.param('name');\n assertCacheName(name);\n const cache = await getCache(c.env, name);\n const admin = await authenticate(c.req.raw, c.env, cache.name, 'admin');\n const input = parseJsonSchema(\n ConfigureCacheSchema,\n await parseJson(c.req.raw),\n );\n const updated = unwrapRpc(\n await coordinator(c.env, cache.reference).configure(input),\n );\n unwrapRpc(\n await coordinator(c.env, cache.reference).recordAudit(\n event(\n `cache-config:${operationId}`,\n admin.sub,\n 'cache.configure',\n cache.name,\n 'success',\n ),\n ),\n );\n return c.json(updated);\n});\n","import type { RpcResult } from '../../rpc';\nimport { PublicationError } from './application';\n\nexport function unwrapPublication<T>(result: RpcResult<T>, cache: string): T {\n if (!result.ok)\n throw new PublicationError(\n `${cache}: ${result.error.message}`,\n result.error.status >= 500,\n );\n return result.value;\n}\n","import { PublicationApplication, PublicationError } from './application';\nimport type { CacheIndex, QuotaLedger } from './ports';\nimport type {\n CacheMutation,\n CacheState,\n PreparedMutation,\n QuotaReservation,\n} from '../../types';\nimport { idStub } from '../../rpc';\nimport { unwrapPublication } from './adapters-rpc';\n\nclass DurableCacheIndexAdapter implements CacheIndex {\n constructor(\n private readonly stub: ReturnType<NonNullable<Env['CACHE_INDEX']>['get']>,\n private readonly cache: string,\n ) {}\n\n async prepare(\n operationId: string,\n mutation: CacheMutation,\n ): Promise<PreparedMutation> {\n if (mutation.kind === 'clear')\n throw new PublicationError('clear is not a path publication', false);\n const request =\n mutation.kind === 'upsert'\n ? { kind: 'upsert' as const, record: mutation.record }\n : { kind: 'delete' as const, store_hash: mutation.store_hash };\n return {\n ...unwrapPublication(\n await this.stub.prepare({\n operation_id: operationId,\n mutation: request,\n }),\n this.cache,\n ),\n cache: this.cache,\n };\n }\n\n async commit(operationId: string): Promise<PreparedMutation> {\n return {\n ...unwrapPublication(await this.stub.commit(operationId), this.cache),\n cache: this.cache,\n };\n }\n\n async abort(operationId: string): Promise<void> {\n unwrapPublication(await this.stub.abort(operationId), this.cache);\n }\n}\n\nclass DurableQuotaLedgerAdapter implements QuotaLedger {\n constructor(\n private readonly stub: ReturnType<\n NonNullable<Env['CACHE_COORDINATOR']>['get']\n >,\n ) {}\n\n async reserve(operationId: string, delta: number): Promise<QuotaReservation> {\n return unwrapPublication(\n await this.stub.reserve({ operation_id: operationId, delta }),\n 'quota',\n );\n }\n\n async finalize(operationId: string): Promise<void> {\n unwrapPublication(\n await this.stub.finalize({ operation_id: operationId }),\n 'quota',\n );\n }\n\n async abort(operationId: string): Promise<void> {\n unwrapPublication(\n await this.stub.abort({ operation_id: operationId }),\n 'quota',\n );\n }\n}\n\nexport function publicationFor(\n env: Env,\n cache: CacheState,\n storeHash: string,\n): PublicationApplication {\n const index = idStub(\n env.CACHE_INDEX,\n env.CACHE_INDEX!.idFromName(\n `${cache.reference.incarnation}:${storeHash.slice(0, 2)}`,\n ),\n );\n const quota = idStub(env.CACHE_COORDINATOR, cache.reference.coordinator_id);\n return new PublicationApplication(\n new DurableCacheIndexAdapter(index, cache.name),\n new DurableQuotaLedgerAdapter(quota),\n );\n}\n","import { Hono } from 'hono';\nimport {\n assertCacheName,\n assertStoreHash,\n MissingPathsSchema,\n parseJsonSchema,\n} from '../domain/validation';\nimport type { AppEnv } from '../runtime/http';\nimport {\n authFor,\n coordinator,\n getCache,\n getPath,\n idempotency,\n isNotFound,\n parseJson,\n unwrapRpc,\n} from '../runtime/http';\nimport { publicationFor } from '../cache';\nimport { authenticate } from '../auth/authentication';\nimport { event } from './helpers';\n\nexport const pathRoutes = new Hono<AppEnv>();\n\npathRoutes.post('/api/caches/:name/missing', async (c) => {\n const name = c.req.param('name');\n assertCacheName(name);\n const cache = await getCache(c.env, name);\n idempotency(c.req.raw);\n await authFor(c.req.raw, c.env, cache, 'push');\n const input = parseJsonSchema(MissingPathsSchema, await parseJson(c.req.raw));\n const missing: string[] = [];\n for (const storeHash of input.store_hashes) {\n assertStoreHash(storeHash);\n try {\n await getPath(c.env, cache, storeHash);\n } catch (caught) {\n if (isNotFound(caught)) missing.push(storeHash);\n else throw caught;\n }\n }\n return c.json({ missing });\n});\n\npathRoutes.delete('/api/caches/:name/paths/:storeHash', async (c) => {\n const operationId = idempotency(c.req.raw);\n const name = c.req.param('name');\n assertCacheName(name);\n const cache = await getCache(c.env, name);\n const admin = await authenticate(c.req.raw, c.env, cache.name, 'admin');\n const storeHash = c.req.param('storeHash');\n assertStoreHash(storeHash);\n const prepared = await publicationFor(c.env, cache, storeHash).execute(\n `delete:${cache.reference.incarnation}:${storeHash}:${operationId}`,\n { kind: 'delete', store_hash: storeHash },\n );\n unwrapRpc(\n await coordinator(c.env, cache.reference).recordAudit(\n event(\n `path-delete:${operationId}`,\n admin.sub,\n 'path.delete',\n `${cache.name}/${storeHash}`,\n 'success',\n ),\n ),\n );\n return c.json({ deleted: Boolean(prepared.previous) });\n});\n","import { idStub } from '../../rpc';\n\nconst AUDIT_SHARD_COUNT = 16;\n\nfunction shardNumber(eventId: string): number {\n // FNV-1a keeps routing deterministic without adding a crypto dependency to\n // the audit fan-out path. The shard count is fixed so readers can enumerate\n // every shard without a catalogue write on every event.\n let hash = 2166136261;\n for (const character of eventId) {\n hash ^= character.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) % AUDIT_SHARD_COUNT;\n}\n\nfunction auditShardName(eventId: string): string {\n return `audit:${shardNumber(eventId).toString(16).padStart(2, '0')}`;\n}\n\nexport function auditShardNames(): string[] {\n return Array.from(\n { length: AUDIT_SHARD_COUNT },\n (_, index) => `audit:${index.toString(16).padStart(2, '0')}`,\n ).concat('audit');\n}\n\nexport function auditStub(env: Env, eventId: string) {\n return idStub(\n env.AUDIT_LOG,\n env.AUDIT_LOG!.idFromName(auditShardName(eventId)),\n );\n}\n","import { Hono } from 'hono';\nimport { authenticate, authenticateAny } from '../auth/authentication';\nimport {\n assertOpaqueId,\n BootstrapRequestSchema,\n encodeCursor,\n parseJsonSchema,\n TokenRequestSchema,\n} from '../domain/validation';\nimport type { AuditEvent, PageResponse, TokenSummary } from '../../types';\nimport type { AppEnv } from '../runtime/http';\nimport {\n idempotency,\n issueFromInput,\n parseJson,\n unwrapRpc,\n} from '../runtime/http';\nimport { namedStub } from '../../rpc';\nimport { auditShardNames } from '../audit/shard';\nimport { pageLimit } from './helpers';\n\nexport const tokenRoutes = new Hono<AppEnv>();\n\ntokenRoutes.post('/api/bootstrap', async (c) => {\n const operationId = idempotency(c.req.raw);\n const input = parseJsonSchema(\n BootstrapRequestSchema,\n await parseJson(c.req.raw),\n );\n const now = Math.floor(Date.now() / 1000);\n const result = unwrapRpc(\n await namedStub(c.env.TOKEN_CATALOG, 'catalog').bootstrap({\n operation_id: operationId,\n fingerprint: JSON.stringify({\n subject: input.subject,\n valid_for_seconds: input.valid_for_seconds,\n grants: input.grants,\n }),\n subject: input.subject,\n grants: input.grants,\n expires_at: now + input.valid_for_seconds,\n secret: input.secret,\n }),\n );\n return c.json(result, result.repeated ? 200 : 201);\n});\n\ntokenRoutes.post('/api/tokens', async (c) => {\n const operationId = idempotency(c.req.raw);\n const admin = await authenticateAny(c.req.raw, c.env, 'admin');\n const input = parseJsonSchema(TokenRequestSchema, await parseJson(c.req.raw));\n const result = await issueFromInput(\n c.env,\n input,\n `token:${operationId}`,\n admin,\n );\n return c.json(result, result.repeated ? 200 : 201);\n});\n\ntokenRoutes.get('/api/tokens', async (c) => {\n await authenticate(c.req.raw, c.env, '*', 'admin');\n const result = unwrapRpc(\n await namedStub(c.env.TOKEN_CATALOG, 'catalog').list({\n limit: pageLimit(c.req.query('limit')),\n cursor: c.req.query('cursor') ?? null,\n }),\n ) as PageResponse<TokenSummary>;\n return c.json(result);\n});\n\ntokenRoutes.delete('/api/tokens/:jti', async (c) => {\n const operationId = idempotency(c.req.raw);\n const admin = await authenticate(c.req.raw, c.env, '*', 'admin');\n const jti = c.req.param('jti');\n assertOpaqueId(jti, 'token');\n unwrapRpc(\n await namedStub(c.env.TOKEN_CATALOG, 'catalog').revoke({\n operation_id: `revoke:${operationId}`,\n jti,\n actor: admin.sub,\n }),\n );\n return c.json({ revoked: true });\n});\n\ntokenRoutes.get('/api/audit', async (c) => {\n await authenticate(c.req.raw, c.env, '*', 'admin');\n const limit = pageLimit(c.req.query('limit'));\n const cursor = c.req.query('cursor') ?? null;\n const pages = await Promise.all(\n auditShardNames().map(async (name) =>\n unwrapRpc(await namedStub(c.env.AUDIT_LOG, name).list({ limit, cursor })),\n ),\n );\n const items = pages\n .flatMap((page) => page.items)\n .sort((left, right) =>\n right.timestamp !== left.timestamp\n ? right.timestamp - left.timestamp\n : right.id === left.id\n ? 0\n : right.id > left.id\n ? 1\n : -1,\n );\n const selected = items.slice(0, limit) as AuditEvent[];\n const hasMore =\n items.length > limit || pages.some((page) => page.next_cursor !== null);\n const last = selected.at(-1);\n return c.json({\n items: selected,\n next_cursor:\n hasMore && last\n ? encodeCursor({ timestamp: last.timestamp, id: last.id })\n : null,\n } satisfies PageResponse<AuditEvent>);\n});\n","import { Hono } from 'hono';\nimport type { AppEnv } from '../runtime/http';\nimport { cacheRoutes } from './caches';\nimport { pathRoutes } from './paths';\nimport { tokenRoutes } from './tokens';\n\nexport const controlRoutes = new Hono<AppEnv>();\n\ncontrolRoutes.get('/health', (c) => c.json({ status: 'ok' }));\n\ncontrolRoutes.get(\n '/api/public-key',\n (c) =>\n new Response(`${c.env.NIX_PUBLIC_KEYS.trim()}\\n`, {\n headers: {\n 'content-type': 'text/plain; charset=utf-8',\n 'cache-control': 'public, max-age=300',\n },\n }),\n);\n\ncontrolRoutes.route('', tokenRoutes);\ncontrolRoutes.route('', cacheRoutes);\ncontrolRoutes.route('', pathRoutes);\n","import type { Context } from 'hono';\nimport type { AppEnv } from '../runtime/http';\nimport type { CacheState, PathRecord } from '../../types';\nimport { ChunkManifestSchema, parseJsonSchema } from '../domain/validation';\nimport { planRange, parseRange } from './range';\nimport { idStub } from '../../rpc';\n\nexport async function serveNarObject(\n c: Context<AppEnv>,\n cache: CacheState,\n storeHash: string,\n record: PathRecord,\n requestId: string,\n): Promise<Response> {\n const request = c.req.raw;\n const object = await c.env.CACHE_BUCKET.get(record.manifest_key);\n if (!object)\n return Response.json(\n {\n code: 'corrupt_manifest',\n message: 'manifest is missing',\n request_id: requestId,\n },\n { status: 500 },\n );\n const manifest = parseJsonSchema(\n ChunkManifestSchema,\n await object.json<unknown>(),\n );\n const total = manifest.chunks.reduce(\n (sum, chunk) => sum + chunk.compressed_size,\n 0,\n );\n if (total !== manifest.file_size)\n return Response.json(\n {\n code: 'corrupt_manifest',\n message: 'manifest chunk sizes do not match file size',\n request_id: requestId,\n },\n { status: 500 },\n );\n const range = parseRange(request.headers.get('range'), manifest.file_size);\n const plan = planRange(manifest.chunks, range);\n const status = range ? 206 : 200;\n const headers = new Headers({\n 'content-type': 'application/x-nix-nar',\n 'accept-ranges': 'bytes',\n 'cache-control': cache.public\n ? // A store hash can be deliberately replaced through the control plane.\n // Keep this response's lifetime aligned with narinfo so a replacement\n // cannot leave clients serving an old NAR for a year.\n 'public, max-age=300'\n : 'private, no-store',\n etag: `\"${manifest.file_hash}\"`,\n 'content-length': String(\n range ? range.end - range.start + 1 : manifest.file_size,\n ),\n });\n if (range)\n headers.set(\n 'content-range',\n `bytes ${range.start}-${range.end}/${manifest.file_size}`,\n );\n c.executionCtx.waitUntil(\n idStub(\n c.env.CACHE_INDEX,\n c.env.CACHE_INDEX!.idFromName(\n `${cache.reference.incarnation}:${storeHash.slice(0, 2)}`,\n ),\n )\n .touch(storeHash)\n .catch((error) => console.error('cache touch failed', error)),\n );\n if (request.method === 'HEAD') return new Response(null, { status, headers });\n\n let planIndex = 0;\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n const stream = new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n while (true) {\n if (!reader) {\n const item = plan[planIndex++];\n if (!item) {\n controller.close();\n return;\n }\n const chunk = await c.env.CACHE_BUCKET.get(item.chunk.key, {\n range: { offset: item.offset, length: item.length },\n });\n if (!chunk?.body)\n throw new Error(`missing chunk ${item.chunk.key}`);\n reader = chunk.body.getReader();\n }\n const next = await reader.read();\n if (next.done) {\n reader.releaseLock();\n reader = null;\n continue;\n }\n controller.enqueue(next.value);\n return;\n }\n } catch (error) {\n controller.error(error);\n }\n },\n async cancel(reason) {\n await reader?.cancel(reason);\n reader = null;\n },\n });\n return new Response(stream, { status, headers });\n}\n","import { Hono, type Context } from 'hono';\nimport { assertCacheName } from '../domain/validation';\nimport type { PathRecord } from '../../types';\nimport type { AppEnv } from '../runtime/http';\nimport { authFor, getCache, getPath, isNotFound } from '../runtime/http';\nimport { serveNarObject } from './object';\n\nexport const nixRoutes = new Hono<AppEnv>();\n\nasync function nixHandler(c: Context<AppEnv>): Promise<Response> {\n const request = c.req.raw;\n const requestId = c.get('requestId');\n if (request.method !== 'GET' && request.method !== 'HEAD')\n return Response.json(\n {\n code: 'method_not_allowed',\n message: 'method not allowed',\n request_id: requestId,\n },\n { status: 405 },\n );\n const cacheName = c.req.param('cache') ?? '';\n assertCacheName(cacheName);\n const suffix = c.req.param('path') ?? '';\n const cache = await getCache(c.env, cacheName);\n if (cache.lifecycle === 'DELETING')\n return Response.json(\n {\n code: 'cache_deleting',\n message: 'cache is being deleted',\n request_id: requestId,\n },\n { status: 410 },\n );\n if (cache.lifecycle !== 'ACTIVE')\n return Response.json(\n {\n code: 'cache_unavailable',\n message: 'cache is not active',\n request_id: requestId,\n },\n { status: 503 },\n );\n const narInfo = /^([0-9abcdfghijklmnpqrsvwxyz]{32})\\.narinfo$/.exec(suffix);\n const narObject = /^nar\\/([0-9abcdfghijklmnpqrsvwxyz]{32})\\.nar\\.zst$/.exec(\n suffix,\n );\n if (suffix === 'nix-cache-info') {\n await authFor(request, c.env, cache, 'pull');\n return new Response(\n request.method === 'HEAD'\n ? null\n : 'StoreDir: /nix/store\\nWantMassQuery: 1\\nPriority: 40\\n',\n {\n headers: {\n 'content-type': 'text/plain',\n 'cache-control': cache.public\n ? 'public, max-age=300'\n : 'private, no-store',\n },\n },\n );\n }\n if (!narInfo && !narObject)\n return Response.json(\n {\n code: 'not_found',\n message: 'path not found',\n request_id: requestId,\n },\n { status: 404 },\n );\n const storeHash = (narInfo ?? narObject)![1];\n await authFor(request, c.env, cache, 'pull');\n let record: PathRecord;\n try {\n record = await getPath(c.env, cache, storeHash);\n } catch (error) {\n if (isNotFound(error))\n return Response.json(\n {\n code: 'not_found',\n message: 'path not found',\n request_id: requestId,\n },\n { status: 404 },\n );\n throw error;\n }\n if (narInfo)\n return new Response(request.method === 'HEAD' ? null : record.narinfo, {\n headers: {\n 'content-type': 'text/plain; charset=utf-8',\n etag: `\"${record.file_hash}\"`,\n 'cache-control': cache.public\n ? 'public, max-age=300'\n : 'private, no-store',\n },\n });\n return serveNarObject(c, cache, storeHash, record, requestId);\n}\n\nnixRoutes.all('/cache/:cache/:path{.+}', nixHandler);\nnixRoutes.all('/cache/:cache', nixHandler);\n","import type { UploadStateResponse } from '../../types';\nimport { assertNamespaceId } from '../domain/validation';\nimport { authFor, getCache, unwrapRpc } from '../runtime/http';\nimport { idStub } from '../../rpc';\n\nexport async function uploadAccess(c: {\n env: Env;\n req: { param(name: string): string; raw: Request };\n}) {\n const id = c.req.param('id');\n assertNamespaceId(id, 'upload');\n const job = idStub(c.env.UPLOAD_JOB, id);\n const access = unwrapRpc(await job.access());\n const cache = await getCache(c.env, access.cache);\n await authFor(c.req.raw, c.env, cache, 'push');\n return { id, cache, job };\n}\n\nexport function stateResponse(value: UploadStateResponse): Response {\n return Response.json(value, { headers: { 'cache-control': 'no-store' } });\n}\n","import { Hono } from 'hono';\nimport {\n parseJsonSchema,\n partsFor,\n requestFingerprint,\n parseContentLength,\n UploadRequestSchema,\n validateUploadManifest,\n} from '../domain/validation';\nimport type { InitiateUploadResponse } from '../../types';\nimport { MULTIPART_PART_SIZE } from '../../types';\nimport type { AppEnv } from '../runtime/http';\nimport {\n authFor,\n coordinator,\n getCache,\n idempotency,\n parseJson,\n unwrapRpc,\n} from '../runtime/http';\nimport { idStub } from '../../rpc';\nimport { uploadAccess, stateResponse } from './access';\n\nexport const uploadRoutes = new Hono<AppEnv>();\n\nuploadRoutes.post('/api/uploads', async (c) => {\n const key = idempotency(c.req.raw);\n const input = parseJsonSchema(\n UploadRequestSchema,\n await parseJson(c.req.raw),\n );\n validateUploadManifest(input.manifest, input.compressed_size);\n const cache = await getCache(c.env, input.manifest.cache);\n await authFor(c.req.raw, c.env, cache, 'push');\n const fingerprint = requestFingerprint(input);\n const allocation = unwrapRpc(\n await coordinator(c.env, cache.reference).allocateUpload({\n operation_id: key,\n fingerprint,\n }),\n );\n const job = idStub(c.env.UPLOAD_JOB, allocation.id);\n const state = unwrapRpc(\n await job.init({\n job_id: allocation.id,\n cache: cache.name,\n cache_id: cache.reference.id,\n incarnation: cache.reference.incarnation,\n staging_key: allocation.staging_key,\n manifest: input.manifest,\n compressed_size: input.compressed_size,\n idempotency_key: key,\n fingerprint,\n }),\n );\n const parts = partsFor(input.compressed_size, MULTIPART_PART_SIZE);\n const result: InitiateUploadResponse = {\n id: allocation.id,\n status: state.state,\n error: null,\n parts: Array.from({ length: parts }, (_, index) => ({\n part_number: index + 1,\n url: `${new URL(c.req.url).origin}/api/uploads/${allocation.id}/parts/${index + 1}`,\n })),\n };\n return c.json(result, allocation.repeated ? 200 : 201);\n});\n\nuploadRoutes.put('/api/uploads/:id/parts/:number', async (c) => {\n const { job } = await uploadAccess(c);\n idempotency(c.req.raw);\n const number = Number(c.req.param('number'));\n const result = unwrapRpc(\n await job.putPart({\n number,\n length: parseContentLength(c.req.raw),\n body: c.req.raw.body,\n }),\n );\n return new Response(null, {\n status: 200,\n headers: { etag: result.etag, 'cache-control': 'no-store' },\n });\n});\n\nuploadRoutes.post('/api/uploads/:id/complete', async (c) => {\n const { job } = await uploadAccess(c);\n idempotency(c.req.raw);\n const input = await parseJson(c.req.raw);\n const result = unwrapRpc(\n await job.complete(input as import('../../types').CompleteUploadRequest),\n );\n return stateResponse(result);\n});\n\nuploadRoutes.get('/api/uploads/:id/state', async (c) => {\n const { job } = await uploadAccess(c);\n return stateResponse(unwrapRpc(await job.state()));\n});\n\nuploadRoutes.get('/api/uploads/:id', async (c) => {\n const { job } = await uploadAccess(c);\n return stateResponse(unwrapRpc(await job.state()));\n});\n\nuploadRoutes.delete('/api/uploads/:id', async (c) => {\n const { job } = await uploadAccess(c);\n idempotency(c.req.raw);\n return stateResponse(unwrapRpc(await job.abort()));\n});\n","import { Hono } from 'hono';\nimport type { AppEnv } from './http';\nimport { handleError, errorResponse } from './error-handler';\nimport { controlRoutes } from '../control';\nimport { nixRoutes } from '../nix';\nimport { uploadRoutes } from '../uploads';\n\nfunction createApp(): Hono<AppEnv> {\n const app = new Hono<AppEnv>();\n app.use('*', async (c, next) => {\n const id = crypto.randomUUID();\n c.set('requestId', id);\n c.header('x-request-id', id);\n await next();\n });\n\n app.route('', controlRoutes);\n app.route('', uploadRoutes);\n app.route('', nixRoutes);\n app.notFound((c) => errorResponse(c, 'not_found', 'route not found', 404));\n app.onError((caught, c) => handleError(caught, c));\n return app;\n}\n\nexport const app = createApp();\n","export type SqlRow = Record<string, string | number | null>;\n\nexport function now(): number {\n return Math.floor(Date.now() / 1000);\n}\n\nexport function initialize(ctx: DurableObjectState, sql: string): void {\n ctx.storage.sql.exec(sql);\n}\n","import type { CacheConfig } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport type { SqlRow } from '../../../infrastructure/durable/shared';\n\nexport const failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\n\nexport function toCache(row: SqlRow): CacheConfig {\n return {\n id: String(row.cache_id),\n name: String(row.name),\n public: Number(row.public) === 1,\n quota_bytes: Number(row.quota_bytes),\n logical_bytes: Number(row.logical_bytes),\n encoding_id: String(row.encoding_id) as CacheConfig['encoding_id'],\n created_at: Number(row.created_at),\n lifecycle: String(row.lifecycle) as CacheConfig['lifecycle'],\n };\n}\n","import type { AuditEvent } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { auditStub } from '../../audit/shard';\nimport { now, type SqlRow } from '../../../infrastructure/durable/shared';\nimport { failure } from './helpers';\n\nexport class CoordinatorAudit {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n ) {}\n\n async record(event: AuditEvent): Promise<RpcResult<void>> {\n this.ctx.storage.transactionSync(() => {\n this.ctx.storage.sql.exec(\n 'INSERT OR IGNORE INTO audit_outbox (event_id, event, created_at) VALUES (?, ?, ?)',\n event.id,\n JSON.stringify(event),\n now(),\n );\n });\n this.ctx.waitUntil(this.drain());\n return { ok: true, value: undefined };\n }\n\n async flush(): Promise<RpcResult<void>> {\n while (true) {\n if (!(await this.drain()))\n return failure(\n 'audit_unavailable',\n 'audit log is unavailable; retry before removing the cache',\n 503,\n );\n const pending = [\n ...this.ctx.storage.sql.exec<{ count: number }>(\n 'SELECT COUNT(*) AS count FROM audit_outbox',\n ),\n ][0];\n if (!pending || Number(pending.count) === 0)\n return { ok: true, value: undefined };\n }\n }\n\n async shardId(prefix: string): Promise<RpcResult<string>> {\n if (!/^[0-9a-f]{2}$/u.test(prefix))\n return failure('invalid_shard', 'invalid cache index shard', 422);\n const row = [\n ...this.ctx.storage.sql.exec<{ incarnation: string }>(\n 'SELECT incarnation FROM cache LIMIT 1',\n ),\n ][0];\n return row\n ? {\n ok: true,\n value: this.env\n .CACHE_INDEX!.idFromName(`${row.incarnation}:${prefix}`)\n .toString(),\n }\n : failure('not_found', 'cache not found', 404);\n }\n\n async alarm(): Promise<void> {\n await this.drain();\n }\n\n private async drain(): Promise<boolean> {\n const rows = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT event_id, event FROM audit_outbox ORDER BY created_at LIMIT 50',\n ),\n ];\n if (!rows.length) return true;\n for (const row of rows) {\n const event = JSON.parse(String(row.event)) as AuditEvent;\n const result = await auditStub(this.env, event.id).append(event);\n if (!result.ok) {\n await this.ctx.storage.setAlarm(Date.now() + 30_000);\n return false;\n }\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'DELETE FROM audit_outbox WHERE event_id = ?',\n row.event_id,\n ),\n );\n }\n const pending = [\n ...this.ctx.storage.sql.exec<{ count: number }>(\n 'SELECT COUNT(*) AS count FROM audit_outbox',\n ),\n ][0];\n if (pending && Number(pending.count) > 0)\n await this.ctx.storage.setAlarm(Date.now() + 1_000);\n return true;\n }\n}\n","import type { QuotaReservation } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { failure } from './helpers';\n\nexport class CoordinatorQuota {\n constructor(private readonly ctx: DurableObjectState) {}\n\n async reserve(input: {\n operation_id: string;\n delta: number;\n }): Promise<RpcResult<QuotaReservation>> {\n return this.ctx.storage.transactionSync(() => {\n // Reconcile an operation before checking lifecycle. A publication may\n // have committed its index mutation immediately before deletion fenced\n // the cache, and must still be allowed to finalize its already-created\n // reservation so the deletion workflow can make progress.\n const old = [\n ...this.ctx.storage.sql.exec<{\n delta: number;\n status: QuotaReservation['status'];\n }>(\n 'SELECT delta, status FROM quota_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (old) {\n if (Number(old.delta) !== input.delta)\n return failure(\n 'operation_conflict',\n 'operation delta changed during retry',\n 409,\n );\n return {\n ok: true,\n value: {\n operation_id: input.operation_id,\n delta: input.delta,\n status: old.status,\n },\n };\n }\n const cache = [\n ...this.ctx.storage.sql.exec<{\n lifecycle: string;\n logical_bytes: number;\n quota_bytes: number;\n }>('SELECT lifecycle, logical_bytes, quota_bytes FROM cache LIMIT 1'),\n ][0];\n if (!cache) return failure('not_found', 'cache not found', 404);\n if (cache.lifecycle !== 'ACTIVE')\n return failure(\n cache.lifecycle === 'DELETING'\n ? 'cache_deleting'\n : 'cache_unavailable',\n 'cache is not active',\n cache.lifecycle === 'DELETING' ? 410 : 503,\n );\n const pending =\n [\n ...this.ctx.storage.sql.exec<{ value: number }>(\n \"SELECT COALESCE(SUM(CASE WHEN status = 'RESERVED' AND delta > 0 THEN delta ELSE 0 END), 0) AS value FROM quota_operations\",\n ),\n ][0]?.value ?? 0;\n if (\n !Number.isSafeInteger(input.delta) ||\n Number(cache.logical_bytes) + Number(pending) + input.delta >\n Number(cache.quota_bytes)\n )\n return failure('quota_exceeded', 'cache quota exceeded', 409);\n if (Number(cache.logical_bytes) + input.delta < 0)\n return failure('quota_invariant', 'quota would become negative', 409);\n this.ctx.storage.sql.exec(\n \"INSERT INTO quota_operations (operation_id, delta, status) VALUES (?, ?, 'RESERVED')\",\n input.operation_id,\n input.delta,\n );\n return {\n ok: true,\n value: {\n operation_id: input.operation_id,\n delta: input.delta,\n status: 'RESERVED',\n },\n };\n });\n }\n\n async finalize(input: { operation_id: string }): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<{ delta: number; status: string }>(\n 'SELECT delta, status FROM quota_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (!row)\n return failure('operation_not_found', 'quota operation not found', 404);\n if (row.status === 'FINALIZED') return { ok: true, value: undefined };\n if (row.status === 'ABORTED')\n return failure('operation_aborted', 'quota operation was aborted', 409);\n this.ctx.storage.sql.exec(\n 'UPDATE cache SET logical_bytes = logical_bytes + ?',\n Number(row.delta),\n );\n this.ctx.storage.sql.exec(\n \"UPDATE quota_operations SET status = 'FINALIZED' WHERE operation_id = ? AND status = 'RESERVED'\",\n input.operation_id,\n );\n return { ok: true, value: undefined };\n });\n }\n\n async abort(input: { operation_id: string }): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n this.ctx.storage.sql.exec(\n \"UPDATE quota_operations SET status = 'ABORTED' WHERE operation_id = ? AND status = 'RESERVED'\",\n input.operation_id,\n );\n return { ok: true, value: undefined };\n });\n }\n\n /**\n * Reconcile publications whose index commit became visible before quota\n * finalization. This is used by cache teardown after an index shard has been\n * fenced and before its bytes are removed from the logical quota total.\n */\n async reconcile(input: {\n operation_ids: string[];\n }): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n for (const operationId of input.operation_ids) {\n const row = [\n ...this.ctx.storage.sql.exec<{\n delta: number;\n status: QuotaReservation['status'];\n }>(\n 'SELECT delta, status FROM quota_operations WHERE operation_id = ?',\n operationId,\n ),\n ][0];\n if (!row) continue;\n if (row.status === 'ABORTED' || row.status === 'FINALIZED') continue;\n this.ctx.storage.sql.exec(\n 'UPDATE cache SET logical_bytes = logical_bytes + ? ',\n Number(row.delta),\n );\n this.ctx.storage.sql.exec(\n \"UPDATE quota_operations SET status = 'FINALIZED' WHERE operation_id = ? AND status = 'RESERVED'\",\n operationId,\n );\n }\n return { ok: true, value: undefined };\n });\n }\n\n async clearDelta(input: {\n operation_id: string;\n delta: number;\n }): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n if (input.delta > 0 || !Number.isSafeInteger(input.delta))\n return failure(\n 'quota_invariant',\n 'cache clear delta must be a negative safe integer',\n 409,\n );\n const old = [\n ...this.ctx.storage.sql.exec<{ delta: number }>(\n 'SELECT delta FROM clear_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (old)\n return Number(old.delta) === input.delta\n ? { ok: true, value: undefined }\n : failure(\n 'operation_conflict',\n 'clear operation delta changed during retry',\n 409,\n );\n const cache = [\n ...this.ctx.storage.sql.exec<{ logical_bytes: number }>(\n 'SELECT logical_bytes FROM cache LIMIT 1',\n ),\n ][0];\n if (!cache || Number(cache.logical_bytes) + input.delta < 0)\n return failure(\n 'quota_invariant',\n 'cache bytes would become negative',\n 409,\n );\n this.ctx.storage.sql.exec(\n 'UPDATE cache SET logical_bytes = logical_bytes + ?',\n input.delta,\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO clear_operations (operation_id, delta) VALUES (?, ?)',\n input.operation_id,\n input.delta,\n );\n return { ok: true, value: undefined };\n });\n }\n}\n","import type { CacheConfig, CacheReference } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport type { SqlRow } from '../../../infrastructure/durable/shared';\nimport { failure, toCache } from './helpers';\n\nexport class CoordinatorState {\n constructor(private readonly ctx: DurableObjectState) {}\n\n async initialize(input: {\n reference: CacheReference;\n public: boolean;\n quota_bytes: number;\n encoding_id: string;\n created_at: number;\n }): Promise<RpcResult<CacheConfig>> {\n return this.ctx.storage.transactionSync(() => {\n const existing = [\n ...this.ctx.storage.sql.exec<SqlRow>('SELECT * FROM cache LIMIT 1'),\n ][0];\n if (existing) {\n if (\n String(existing.cache_id) !== input.reference.id ||\n String(existing.incarnation) !== input.reference.incarnation ||\n Number(existing.quota_bytes) !== input.quota_bytes ||\n Number(existing.public) !== (input.public ? 1 : 0) ||\n String(existing.encoding_id) !== input.encoding_id\n ) {\n return failure(\n 'coordinator_conflict',\n 'cache coordinator is already assigned to another incarnation',\n 409,\n );\n }\n return { ok: true, value: toCache(existing) };\n }\n this.ctx.storage.sql.exec(\n \"INSERT INTO cache (cache_id, name, incarnation, public, quota_bytes, encoding_id, created_at, lifecycle) VALUES (?, ?, ?, ?, ?, ?, ?, 'CREATING')\",\n input.reference.id,\n input.reference.name,\n input.reference.incarnation,\n input.public ? 1 : 0,\n input.quota_bytes,\n input.encoding_id,\n input.created_at,\n );\n return {\n ok: true,\n value: {\n id: input.reference.id,\n name: input.reference.name,\n public: input.public,\n quota_bytes: input.quota_bytes,\n logical_bytes: 0,\n encoding_id: input.encoding_id as CacheConfig['encoding_id'],\n created_at: input.created_at,\n lifecycle: 'CREATING',\n },\n };\n });\n }\n\n async getCache(): Promise<RpcResult<CacheConfig>> {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>('SELECT * FROM cache LIMIT 1'),\n ][0];\n return row\n ? { ok: true, value: toCache(row) }\n : failure('not_found', 'cache not found', 404);\n }\n\n async configure(input: { public: boolean }): Promise<RpcResult<CacheConfig>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>('SELECT * FROM cache LIMIT 1'),\n ][0];\n if (!row) return failure('not_found', 'cache not found', 404);\n if (String(row.lifecycle) === 'DELETING')\n return failure('cache_deleting', 'cache is being deleted', 410);\n this.ctx.storage.sql.exec(\n 'UPDATE cache SET public = ?',\n input.public ? 1 : 0,\n );\n return {\n ok: true,\n value: toCache({ ...row, public: input.public ? 1 : 0 }),\n };\n });\n }\n\n async activate(): Promise<RpcResult<CacheConfig>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>('SELECT * FROM cache LIMIT 1'),\n ][0];\n if (!row) return failure('not_found', 'cache not found', 404);\n if (String(row.lifecycle) === 'DELETING')\n return failure('cache_deleting', 'cache is being deleted', 410);\n this.ctx.storage.sql.exec(\n \"UPDATE cache SET lifecycle = 'ACTIVE' WHERE lifecycle = 'CREATING'\",\n );\n return { ok: true, value: toCache({ ...row, lifecycle: 'ACTIVE' }) };\n });\n }\n\n async beginDelete(): Promise<RpcResult<CacheConfig>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>('SELECT * FROM cache LIMIT 1'),\n ][0];\n if (!row) return failure('not_found', 'cache not found', 404);\n if (String(row.lifecycle) !== 'DELETING')\n this.ctx.storage.sql.exec(\"UPDATE cache SET lifecycle = 'DELETING'\");\n return { ok: true, value: toCache({ ...row, lifecycle: 'DELETING' }) };\n });\n }\n\n async remove(): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<{ lifecycle: string }>(\n 'SELECT lifecycle FROM cache LIMIT 1',\n ),\n ][0];\n if (!row) return { ok: true, value: undefined };\n if (row.lifecycle !== 'DELETING')\n return failure(\n 'cache_not_deleting',\n 'cache must be deleting before removal',\n 409,\n );\n const pendingAudit = [\n ...this.ctx.storage.sql.exec<{ count: number }>(\n 'SELECT COUNT(*) AS count FROM audit_outbox',\n ),\n ][0];\n if (pendingAudit && Number(pendingAudit.count) > 0)\n return failure(\n 'audit_pending',\n 'cache audit events must be delivered before removal',\n 503,\n );\n this.ctx.storage.sql.exec(\n 'DELETE FROM audit_outbox; DELETE FROM clear_operations; DELETE FROM quota_operations; DELETE FROM upload_allocations; DELETE FROM cache;',\n );\n return { ok: true, value: undefined };\n });\n }\n}\n","import type { RpcResult } from '../../../rpc';\nimport type { SqlRow } from '../../../infrastructure/durable/shared';\nimport { failure } from './helpers';\n\nexport class CoordinatorUploads {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n ) {}\n\n async allocate(input: {\n operation_id: string;\n fingerprint: string;\n }): Promise<\n RpcResult<{ id: string; staging_key: string; repeated: boolean }>\n > {\n return this.ctx.storage.transactionSync(() => {\n const cache = [\n ...this.ctx.storage.sql.exec<{ lifecycle: string }>(\n 'SELECT lifecycle FROM cache LIMIT 1',\n ),\n ][0];\n if (!cache) return failure('not_found', 'cache not found', 404);\n if (cache.lifecycle !== 'ACTIVE')\n return failure(\n cache.lifecycle === 'DELETING'\n ? 'cache_deleting'\n : 'cache_unavailable',\n 'cache is not active',\n cache.lifecycle === 'DELETING' ? 410 : 503,\n );\n const old = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT fingerprint, upload_id, staging_key FROM upload_allocations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (old) {\n if (String(old.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different upload metadata',\n 409,\n );\n return {\n ok: true,\n value: {\n id: String(old.upload_id),\n staging_key: String(old.staging_key),\n repeated: true,\n },\n };\n }\n const id = this.env.UPLOAD_JOB!.newUniqueId().toString();\n const stagingKey = `staging/${id}.nar.zst`;\n this.ctx.storage.sql.exec(\n 'INSERT INTO upload_allocations (operation_id, fingerprint, upload_id, staging_key) VALUES (?, ?, ?, ?)',\n input.operation_id,\n input.fingerprint,\n id,\n stagingKey,\n );\n return {\n ok: true,\n value: { id, staging_key: stagingKey, repeated: false },\n };\n });\n }\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport type {\n AuditEvent,\n CacheConfig,\n CacheReference,\n QuotaReservation,\n} from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { initialize } from '../../../infrastructure/durable/shared';\nimport { CoordinatorAudit } from './audit';\nimport { CoordinatorQuota } from './quota';\nimport { CoordinatorState } from './state';\nimport { CoordinatorUploads } from './uploads';\n\nconst schema = `CREATE TABLE IF NOT EXISTS cache (\n cache_id TEXT PRIMARY KEY, name TEXT NOT NULL, incarnation TEXT NOT NULL,\n public INTEGER NOT NULL, quota_bytes INTEGER NOT NULL, logical_bytes INTEGER NOT NULL DEFAULT 0,\n encoding_id TEXT NOT NULL, created_at INTEGER NOT NULL, lifecycle TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS quota_operations (\n operation_id TEXT PRIMARY KEY, delta INTEGER NOT NULL, status TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS upload_allocations (\n operation_id TEXT PRIMARY KEY, fingerprint TEXT NOT NULL, upload_id TEXT NOT NULL UNIQUE, staging_key TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS clear_operations (\n operation_id TEXT PRIMARY KEY, delta INTEGER NOT NULL\n);\nCREATE TABLE IF NOT EXISTS audit_outbox (\n event_id TEXT PRIMARY KEY, event TEXT NOT NULL, created_at INTEGER NOT NULL\n);`;\n\nexport class CacheCoordinator extends DurableObject<Env> {\n private readonly state: CoordinatorState;\n private readonly uploads: CoordinatorUploads;\n private readonly quota: CoordinatorQuota;\n private readonly audit: CoordinatorAudit;\n\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n initialize(ctx, schema);\n this.state = new CoordinatorState(ctx);\n this.uploads = new CoordinatorUploads(ctx, env);\n this.quota = new CoordinatorQuota(ctx);\n this.audit = new CoordinatorAudit(ctx, env);\n }\n\n initialize(input: {\n reference: CacheReference;\n public: boolean;\n quota_bytes: number;\n encoding_id: string;\n created_at: number;\n }): Promise<RpcResult<CacheConfig>> {\n return this.state.initialize(input);\n }\n\n getCache(): Promise<RpcResult<CacheConfig>> {\n return this.state.getCache();\n }\n\n configure(input: { public: boolean }): Promise<RpcResult<CacheConfig>> {\n return this.state.configure(input);\n }\n\n activate(): Promise<RpcResult<CacheConfig>> {\n return this.state.activate();\n }\n\n beginDelete(): Promise<RpcResult<CacheConfig>> {\n return this.state.beginDelete();\n }\n\n remove(): Promise<RpcResult<void>> {\n return this.state.remove();\n }\n\n allocateUpload(input: {\n operation_id: string;\n fingerprint: string;\n }): Promise<\n RpcResult<{ id: string; staging_key: string; repeated: boolean }>\n > {\n return this.uploads.allocate(input);\n }\n\n reserve(input: {\n operation_id: string;\n delta: number;\n }): Promise<RpcResult<QuotaReservation>> {\n return this.quota.reserve(input);\n }\n\n finalize(input: { operation_id: string }): Promise<RpcResult<void>> {\n return this.quota.finalize(input);\n }\n\n abort(input: { operation_id: string }): Promise<RpcResult<void>> {\n return this.quota.abort(input);\n }\n\n reconcile(input: { operation_ids: string[] }): Promise<RpcResult<void>> {\n return this.quota.reconcile(input);\n }\n\n clearDelta(input: {\n operation_id: string;\n delta: number;\n }): Promise<RpcResult<void>> {\n return this.quota.clearDelta(input);\n }\n\n recordAudit(event: AuditEvent): Promise<RpcResult<void>> {\n return this.audit.record(event);\n }\n\n flushAudit(): Promise<RpcResult<void>> {\n return this.audit.flush();\n }\n\n shardId(prefix: string): Promise<RpcResult<string>> {\n return this.audit.shardId(prefix);\n }\n\n alarm(): Promise<void> {\n return this.audit.alarm();\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport { deltaFor } from '../../domain/uploads';\nimport type { CacheMutation, PathRecord } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport {\n initialize,\n now,\n type SqlRow,\n} from '../../../infrastructure/durable/shared';\n\nconst failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\ntype Mutation = Exclude<CacheMutation, { kind: 'clear' }>;\ntype Prepared = {\n operation_id: string;\n delta: number;\n previous: PathRecord | null;\n record: PathRecord | null;\n status: 'PREPARED' | 'COMMITTED' | 'ABORTED';\n};\n\nexport class CacheIndexShard extends DurableObject<Env> {\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n initialize(\n ctx,\n `CREATE TABLE IF NOT EXISTS paths (\n store_hash TEXT PRIMARY KEY, record TEXT NOT NULL, file_size INTEGER NOT NULL,\n last_accessed INTEGER NOT NULL, created_at INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS paths_lru ON paths(last_accessed);\n CREATE TABLE IF NOT EXISTS index_operations (\n operation_id TEXT PRIMARY KEY, store_hash TEXT, mutation TEXT NOT NULL,\n previous TEXT, next_record TEXT, delta INTEGER NOT NULL, status TEXT NOT NULL,\n clear_deleted INTEGER NOT NULL DEFAULT 0, clear_bytes INTEGER NOT NULL DEFAULT 0\n );\n CREATE UNIQUE INDEX IF NOT EXISTS index_store_lock ON index_operations(store_hash) WHERE status = 'PREPARED';\n CREATE TABLE IF NOT EXISTS deletion_fence (\n key INTEGER PRIMARY KEY CHECK (key = 1), operation_id TEXT NOT NULL\n );`,\n );\n }\n\n async lookup(storeHash: string): Promise<RpcResult<PathRecord>> {\n const row = [\n ...this.ctx.storage.sql.exec<{ record: string }>(\n 'SELECT record FROM paths WHERE store_hash = ?',\n storeHash,\n ),\n ][0];\n return row\n ? { ok: true, value: JSON.parse(row.record) as PathRecord }\n : failure('not_found', 'path not found', 404);\n }\n\n async prepare(input: {\n operation_id: string;\n mutation: Mutation;\n }): Promise<RpcResult<Prepared>> {\n return this.ctx.storage.transactionSync(() => {\n const mutationJson = JSON.stringify(input.mutation);\n const existing = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT operation_id, mutation, previous, next_record, delta, status FROM index_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (existing) {\n if (String(existing.mutation) !== mutationJson)\n return failure(\n 'operation_conflict',\n 'index mutation changed during retry',\n 409,\n );\n return { ok: true, value: toPrepared(existing) };\n }\n const fenced = [\n ...this.ctx.storage.sql.exec<{ operation_id: string }>(\n 'SELECT operation_id FROM deletion_fence WHERE key = 1',\n ),\n ][0];\n if (fenced)\n return failure(\n 'cache_deleting',\n 'cache index is fenced for deletion',\n 410,\n );\n const storeHash =\n input.mutation.kind === 'upsert'\n ? input.mutation.record.store_hash\n : input.mutation.store_hash;\n const previousRow = storeHash\n ? [\n ...this.ctx.storage.sql.exec<{ record: string }>(\n 'SELECT record FROM paths WHERE store_hash = ?',\n storeHash,\n ),\n ][0]\n : null;\n const previous = previousRow\n ? (JSON.parse(previousRow.record) as PathRecord)\n : null;\n const next =\n input.mutation.kind === 'upsert' ? input.mutation.record : null;\n const delta =\n input.mutation.kind === 'upsert'\n ? deltaFor(next, previous)\n : deltaFor(null, previous);\n if (storeHash) {\n const lock = [\n ...this.ctx.storage.sql.exec<{ operation_id: string }>(\n \"SELECT operation_id FROM index_operations WHERE store_hash = ? AND status = 'PREPARED'\",\n storeHash,\n ),\n ][0];\n if (lock && lock.operation_id !== input.operation_id)\n return failure(\n 'mutation_in_progress',\n 'another mutation is in progress for this path',\n 409,\n );\n }\n this.ctx.storage.sql.exec(\n \"INSERT INTO index_operations (operation_id, store_hash, mutation, previous, next_record, delta, status) VALUES (?, ?, ?, ?, ?, ?, 'PREPARED')\",\n input.operation_id,\n storeHash,\n mutationJson,\n previous ? JSON.stringify(previous) : null,\n next ? JSON.stringify(next) : null,\n delta,\n );\n return {\n ok: true,\n value: {\n operation_id: input.operation_id,\n delta,\n previous,\n record: next,\n status: 'PREPARED',\n },\n };\n });\n }\n\n async commit(operationId: string): Promise<RpcResult<Prepared>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT * FROM index_operations WHERE operation_id = ?',\n operationId,\n ),\n ][0];\n if (!row)\n return failure('operation_not_found', 'index operation not found', 404);\n if (row.status === 'COMMITTED')\n return { ok: true, value: toPrepared(row) };\n if (row.status === 'ABORTED')\n return failure('operation_aborted', 'index operation was aborted', 409);\n const fenced = [\n ...this.ctx.storage.sql.exec<{ operation_id: string }>(\n 'SELECT operation_id FROM deletion_fence WHERE key = 1',\n ),\n ][0];\n if (fenced) {\n this.ctx.storage.sql.exec(\n \"UPDATE index_operations SET status = 'ABORTED' WHERE operation_id = ? AND status = 'PREPARED'\",\n operationId,\n );\n return failure(\n 'cache_deleting',\n 'cache index is fenced for deletion',\n 410,\n );\n }\n const mutation = JSON.parse(String(row.mutation)) as Mutation;\n if (mutation.kind === 'upsert')\n this.ctx.storage.sql.exec(\n 'INSERT OR REPLACE INTO paths (store_hash, record, file_size, last_accessed, created_at) VALUES (?, ?, ?, ?, ?)',\n mutation.record.store_hash,\n JSON.stringify(mutation.record),\n mutation.record.file_size,\n mutation.record.last_accessed,\n mutation.record.created_at,\n );\n else\n this.ctx.storage.sql.exec(\n 'DELETE FROM paths WHERE store_hash = ?',\n mutation.store_hash,\n );\n this.ctx.storage.sql.exec(\n \"UPDATE index_operations SET status = 'COMMITTED' WHERE operation_id = ? AND status = 'PREPARED'\",\n operationId,\n );\n return { ok: true, value: toPrepared({ ...row, status: 'COMMITTED' }) };\n });\n }\n\n async abort(operationId: string): Promise<RpcResult<void>> {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n \"UPDATE index_operations SET status = 'ABORTED' WHERE operation_id = ? AND status = 'PREPARED'\",\n operationId,\n ),\n );\n return { ok: true, value: undefined };\n }\n\n async clear(operationId: string): Promise<\n RpcResult<{\n deleted: number;\n bytes: number;\n reconcile_operation_ids: string[];\n }>\n > {\n return this.ctx.storage.transactionSync(() => {\n const old = [\n ...this.ctx.storage.sql.exec<{\n clear_deleted: number;\n clear_bytes: number;\n status: string;\n }>(\n 'SELECT clear_deleted, clear_bytes, status FROM index_operations WHERE operation_id = ?',\n operationId,\n ),\n ][0];\n if (old)\n return {\n ok: true,\n value: {\n deleted: Number(old.clear_deleted),\n bytes: Number(old.clear_bytes),\n reconcile_operation_ids: this.committedOperationIds(),\n },\n };\n this.ctx.storage.sql.exec(\n 'INSERT OR IGNORE INTO deletion_fence (key, operation_id) VALUES (1, ?)',\n operationId,\n );\n this.ctx.storage.sql.exec(\n \"UPDATE index_operations SET status = 'ABORTED' WHERE status = 'PREPARED'\",\n );\n const totals = [\n ...this.ctx.storage.sql.exec<{ count: number; bytes: number }>(\n 'SELECT COUNT(*) AS count, COALESCE(SUM(file_size), 0) AS bytes FROM paths',\n ),\n ][0];\n this.ctx.storage.sql.exec('DELETE FROM paths');\n this.ctx.storage.sql.exec(\n \"INSERT INTO index_operations (operation_id, mutation, delta, status, clear_deleted, clear_bytes) VALUES (?, ?, ?, 'COMMITTED', ?, ?)\",\n operationId,\n JSON.stringify({ kind: 'clear' }),\n -Number(totals?.bytes ?? 0),\n Number(totals?.count ?? 0),\n Number(totals?.bytes ?? 0),\n );\n return {\n ok: true,\n value: {\n deleted: Number(totals?.count ?? 0),\n bytes: Number(totals?.bytes ?? 0),\n reconcile_operation_ids: this.committedOperationIds(),\n },\n };\n });\n }\n\n /**\n * Index commits and quota finalization are separate durable operations.\n * Teardown must finalize committed publications before debiting the shard.\n * Returning historical IDs is safe because quota finalization is idempotent.\n */\n private committedOperationIds(): string[] {\n return [\n ...this.ctx.storage.sql.exec<{ operation_id: string }>(\n \"SELECT operation_id FROM index_operations WHERE status = 'COMMITTED' AND store_hash IS NOT NULL\",\n ),\n ].map((row) => String(row.operation_id));\n }\n\n async touch(storeHash: string): Promise<RpcResult<void>> {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'UPDATE paths SET last_accessed = ? WHERE store_hash = ?',\n now(),\n storeHash,\n ),\n );\n return { ok: true, value: undefined };\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n\nfunction toPrepared(row: SqlRow): Prepared {\n return {\n operation_id: String(row.operation_id),\n delta: Number(row.delta),\n previous: row.previous\n ? (JSON.parse(String(row.previous)) as PathRecord)\n : null,\n record: row.next_record\n ? (JSON.parse(String(row.next_record)) as PathRecord)\n : null,\n status: String(row.status) as Prepared['status'],\n };\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport type { CacheReference } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport {\n initialize,\n now,\n type SqlRow,\n} from '../../../infrastructure/durable/shared';\n\nconst failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\n\nexport class SystemControl extends DurableObject<Env> {\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n initialize(\n ctx,\n `CREATE TABLE IF NOT EXISTS caches (\n cache_id TEXT PRIMARY KEY, name TEXT UNIQUE NOT NULL, incarnation TEXT UNIQUE NOT NULL,\n coordinator_id TEXT UNIQUE NOT NULL, created_at INTEGER NOT NULL, lifecycle TEXT NOT NULL\n );\n CREATE TABLE IF NOT EXISTS create_operations (\n operation_id TEXT PRIMARY KEY, fingerprint TEXT NOT NULL, cache_id TEXT NOT NULL,\n FOREIGN KEY (cache_id) REFERENCES caches(cache_id)\n );\n CREATE TABLE IF NOT EXISTS cache_creation_config (\n cache_id TEXT PRIMARY KEY, public INTEGER NOT NULL,\n quota_bytes INTEGER NOT NULL, encoding_id TEXT NOT NULL,\n FOREIGN KEY (cache_id) REFERENCES caches(cache_id)\n );\n CREATE TABLE IF NOT EXISTS delete_operations (\n cache_id TEXT PRIMARY KEY, operation_id TEXT UNIQUE NOT NULL,\n FOREIGN KEY (cache_id) REFERENCES caches(cache_id)\n );`,\n );\n }\n\n async createCache(input: {\n operation_id: string;\n fingerprint: string;\n name: string;\n public: boolean;\n quota_bytes: number;\n encoding_id: string;\n }): Promise<RpcResult<{ reference: CacheReference; repeated: boolean }>> {\n return this.ctx.storage.transactionSync(() => {\n const oldOperation = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT fingerprint, cache_id FROM create_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (oldOperation) {\n if (String(oldOperation.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different cache configuration',\n 409,\n );\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT cache_id, name, incarnation, coordinator_id FROM caches WHERE cache_id = ?',\n oldOperation.cache_id,\n ),\n ][0];\n return row\n ? { ok: true, value: { reference: reference(row), repeated: true } }\n : failure(\n 'operation_not_found',\n 'cache creation record is missing',\n 503,\n );\n }\n const existing = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT cache_id, name, incarnation, coordinator_id, lifecycle FROM caches WHERE name = ?',\n input.name,\n ),\n ][0];\n if (existing) {\n // A request can be lost after the catalogue row is committed but\n // before the coordinator is initialized/activated. Treat a new\n // request for the same name as a recovery attempt, while fencing it\n // to the original creation configuration.\n if (String(existing.lifecycle) === 'CREATING') {\n const config = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT public, quota_bytes, encoding_id FROM cache_creation_config WHERE cache_id = ?',\n existing.cache_id,\n ),\n ][0];\n if (\n config &&\n (Number(config.public) !== (input.public ? 1 : 0) ||\n Number(config.quota_bytes) !== input.quota_bytes ||\n String(config.encoding_id) !== input.encoding_id)\n )\n return failure(\n 'cache_creation_conflict',\n 'cache creation is already in progress with different configuration',\n 409,\n );\n return {\n ok: true,\n value: { reference: reference(existing), repeated: true },\n };\n }\n return failure('cache_exists', 'cache name is already registered', 409);\n }\n const value: CacheReference = {\n id: crypto.randomUUID(),\n name: input.name,\n incarnation: crypto.randomUUID(),\n coordinator_id: this.env.CACHE_COORDINATOR!.newUniqueId().toString(),\n };\n this.ctx.storage.sql.exec(\n \"INSERT INTO caches (cache_id, name, incarnation, coordinator_id, created_at, lifecycle) VALUES (?, ?, ?, ?, ?, 'CREATING')\",\n value.id,\n value.name,\n value.incarnation,\n value.coordinator_id,\n now(),\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO create_operations (operation_id, fingerprint, cache_id) VALUES (?, ?, ?)',\n input.operation_id,\n input.fingerprint,\n value.id,\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO cache_creation_config (cache_id, public, quota_bytes, encoding_id) VALUES (?, ?, ?, ?)',\n value.id,\n input.public ? 1 : 0,\n input.quota_bytes,\n input.encoding_id,\n );\n return { ok: true, value: { reference: value, repeated: false } };\n });\n }\n\n async getCache(name: string): Promise<RpcResult<CacheReference>> {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT cache_id, name, incarnation, coordinator_id, lifecycle FROM caches WHERE name = ?',\n name,\n ),\n ][0];\n return row\n ? { ok: true, value: reference(row) }\n : failure('not_found', 'cache not found', 404);\n }\n\n async activateCache(value: CacheReference): Promise<RpcResult<void>> {\n const result = this.ctx.storage.transactionSync(() => {\n const changed = this.ctx.storage.sql.exec(\n \"UPDATE caches SET lifecycle = 'ACTIVE' WHERE cache_id = ? AND incarnation = ? AND lifecycle = 'CREATING'\",\n value.id,\n value.incarnation,\n ).rowsWritten;\n const row = [\n ...this.ctx.storage.sql.exec<{ lifecycle: string }>(\n 'SELECT lifecycle FROM caches WHERE cache_id = ? AND incarnation = ?',\n value.id,\n value.incarnation,\n ),\n ][0];\n if (!row) return failure('not_found', 'cache not found', 404);\n if (row.lifecycle !== 'ACTIVE' && changed === 0)\n return failure(\n 'cache_unavailable',\n 'cache could not be activated',\n 503,\n );\n return { ok: true as const, value: undefined };\n });\n return result;\n }\n\n async beginDelete(input: {\n reference: CacheReference;\n operation_id: string;\n }): Promise<RpcResult<{ operation_id: string; repeated: boolean }>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<{ lifecycle: string }>(\n 'SELECT lifecycle FROM caches WHERE cache_id = ? AND incarnation = ?',\n input.reference.id,\n input.reference.incarnation,\n ),\n ][0];\n if (!row) return failure('not_found', 'cache not found', 404);\n const operationOnCache = [\n ...this.ctx.storage.sql.exec<{ cache_id: string }>(\n 'SELECT cache_id FROM delete_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (\n operationOnCache &&\n String(operationOnCache.cache_id) !== input.reference.id\n )\n return failure(\n 'idempotency_conflict',\n 'idempotency key is already assigned to another cache deletion',\n 409,\n );\n const existing = [\n ...this.ctx.storage.sql.exec<{ operation_id: string }>(\n 'SELECT operation_id FROM delete_operations WHERE cache_id = ?',\n input.reference.id,\n ),\n ][0];\n if (existing)\n return {\n ok: true as const,\n value: {\n operation_id: String(existing.operation_id),\n repeated: true,\n },\n };\n this.ctx.storage.sql.exec(\n \"UPDATE caches SET lifecycle = 'DELETING' WHERE cache_id = ? AND incarnation = ?\",\n input.reference.id,\n input.reference.incarnation,\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO delete_operations (cache_id, operation_id) VALUES (?, ?)',\n input.reference.id,\n input.operation_id,\n );\n return {\n ok: true as const,\n value: { operation_id: input.operation_id, repeated: false },\n };\n });\n }\n\n async removeCache(value: CacheReference): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n const row = [\n ...this.ctx.storage.sql.exec<{ lifecycle: string }>(\n 'SELECT lifecycle FROM caches WHERE cache_id = ? AND incarnation = ?',\n value.id,\n value.incarnation,\n ),\n ][0];\n // Removal is a retried workflow step. A lost response can cause the\n // catalog mutation to be submitted again after it already committed;\n // absence is therefore the desired idempotent result.\n if (!row) return { ok: true, value: undefined };\n if (row.lifecycle !== 'DELETING')\n return failure(\n 'cache_not_deleting',\n 'cache must be deleting before removal',\n 409,\n );\n this.ctx.storage.sql.exec(\n 'DELETE FROM create_operations WHERE cache_id = ?',\n value.id,\n );\n this.ctx.storage.sql.exec(\n 'DELETE FROM delete_operations WHERE cache_id = ?',\n value.id,\n );\n this.ctx.storage.sql.exec(\n 'DELETE FROM cache_creation_config WHERE cache_id = ?',\n value.id,\n );\n this.ctx.storage.sql.exec(\n 'DELETE FROM caches WHERE cache_id = ? AND incarnation = ?',\n value.id,\n value.incarnation,\n );\n return { ok: true as const, value: undefined };\n });\n }\n\n async listCaches(input: {\n after: string | null;\n limit: number;\n }): Promise<\n RpcResult<{ items: CacheReference[]; next_after: string | null }>\n > {\n const limit = Math.min(Math.max(Math.trunc(input.limit), 1), 100);\n const rows = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n input.after\n ? 'SELECT cache_id, name, incarnation, coordinator_id, lifecycle FROM caches WHERE name > ? ORDER BY name LIMIT ?'\n : 'SELECT cache_id, name, incarnation, coordinator_id, lifecycle FROM caches ORDER BY name LIMIT ?',\n ...(input.after ? [input.after, limit + 1] : [limit + 1]),\n ),\n ];\n const page = rows.slice(0, limit).map(reference);\n return {\n ok: true,\n value: {\n items: page,\n next_after: rows.length > limit ? (page.at(-1)?.name ?? null) : null,\n },\n };\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n\nfunction reference(row: SqlRow): CacheReference {\n return {\n id: String(row.cache_id),\n name: String(row.name),\n incarnation: String(row.incarnation),\n coordinator_id: String(row.coordinator_id),\n lifecycle: row.lifecycle\n ? (String(row.lifecycle) as CacheReference['lifecycle'])\n : undefined,\n };\n}\n","import type { AuditEvent } from '../../../types';\nimport { auditStub } from '../../audit/shard';\nimport { now, type SqlRow } from '../../../infrastructure/durable/shared';\n\nexport class TokenAudit {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n ) {}\n\n enqueue(event: AuditEvent): void {\n this.ctx.storage.sql.exec(\n 'INSERT OR IGNORE INTO audit_outbox (event_id, event, created_at) VALUES (?, ?, ?)',\n event.id,\n JSON.stringify(event),\n now(),\n );\n this.ctx.waitUntil(this.drain());\n }\n\n async alarm(): Promise<void> {\n await this.drain();\n }\n\n private async drain(): Promise<void> {\n const rows = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT event_id, event FROM audit_outbox ORDER BY created_at LIMIT 50',\n ),\n ];\n if (!rows.length) return;\n for (const row of rows) {\n const event = JSON.parse(String(row.event)) as AuditEvent;\n const result = await auditStub(this.env, event.id).append(event);\n if (!result.ok) {\n await this.ctx.storage.setAlarm(Date.now() + 30_000);\n return;\n }\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'DELETE FROM audit_outbox WHERE event_id = ?',\n row.event_id,\n ),\n );\n }\n\n // A recovery alarm processes one bounded batch. Keep scheduling while\n // backlog remains so a quiet catalog eventually drains after an outage.\n const pending = [\n ...this.ctx.storage.sql.exec<{ count: number }>(\n 'SELECT COUNT(*) AS count FROM audit_outbox',\n ),\n ][0];\n if (pending && Number(pending.count) > 0)\n await this.ctx.storage.setAlarm(Date.now() + 1_000);\n }\n}\n","import type { Grant, TokenSummary } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport type { SqlRow } from '../../../infrastructure/durable/shared';\n\nexport const failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\n\nexport const toTokenSummary = (row: SqlRow): TokenSummary => ({\n id: String(row.jti),\n subject: String(row.subject),\n expires_at: Number(row.expires_at),\n issued_at: Number(row.issued_at),\n grants: JSON.parse(String(row.grants)) as Grant[],\n revoked: Number(row.revoked) === 1,\n});\n","import { validateGrant } from '../../domain/validation';\nimport type { Grant } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { hashSecret } from '..';\nimport { type SqlRow } from '../../../infrastructure/durable/shared';\nimport { failure } from './model';\nimport { TokenAudit } from './audit';\nimport { TokenSigner } from './signer';\n\nexport class TokenIssuance {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n private readonly signer: TokenSigner,\n private readonly audit: TokenAudit,\n ) {}\n\n async bootstrap(input: {\n operation_id: string;\n fingerprint: string;\n subject: string;\n grants: Grant[];\n expires_at: number;\n secret: string;\n }): Promise<\n RpcResult<{\n id: string;\n token: string;\n expires_at: number;\n repeated: boolean;\n }>\n > {\n if (!input.grants.length || !input.grants.every(validateGrant))\n return failure('invalid_input', 'bootstrap grants are invalid', 422);\n if ((await hashSecret(input.secret)) !== this.env.BOOTSTRAP_SECRET_HASH)\n return failure('forbidden', 'invalid bootstrap secret', 403);\n const operationId = `bootstrap:${input.operation_id}`;\n const existing = this.findOperation(operationId);\n if (existing) {\n if (String(existing.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different token metadata',\n 409,\n );\n return {\n ok: true,\n value: {\n id: String(existing.jti),\n token: String(existing.token),\n expires_at: Number(existing.expires_at),\n repeated: true,\n },\n };\n }\n const signed = await this.signer.sign(\n input.subject,\n input.grants,\n input.expires_at,\n );\n return this.ctx.storage.transactionSync(() => {\n const operation = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT jti, token, expires_at, fingerprint FROM tokens WHERE operation_id = ?',\n operationId,\n ),\n ][0];\n if (operation) {\n if (String(operation.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different token metadata',\n 409,\n );\n return {\n ok: true,\n value: {\n id: String(operation.jti),\n token: String(operation.token),\n expires_at: Number(operation.expires_at),\n repeated: true,\n },\n };\n }\n const consumed = [\n ...this.ctx.storage.sql.exec('SELECT 1 FROM bootstrap WHERE key = 1'),\n ][0];\n if (consumed)\n return failure(\n 'bootstrap_consumed',\n 'bootstrap has already been consumed',\n 409,\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO tokens (jti, subject, expires_at, issued_at, grants, revoked, token, operation_id, fingerprint) VALUES (?, ?, ?, ?, ?, 0, ?, ?, ?)',\n signed.jti,\n input.subject,\n input.expires_at,\n signed.issued_at,\n JSON.stringify(input.grants),\n signed.token,\n operationId,\n input.fingerprint,\n );\n this.ctx.storage.sql.exec(\n 'INSERT INTO bootstrap (key, operation_id, fingerprint) VALUES (1, ?, ?)',\n input.operation_id,\n input.fingerprint,\n );\n this.audit.enqueue({\n id: `bootstrap:${input.operation_id}`,\n timestamp: signed.issued_at,\n actor: input.subject,\n action: 'bootstrap',\n resource: 'system',\n outcome: 'success',\n metadata: {},\n });\n return {\n ok: true,\n value: {\n id: signed.jti,\n token: signed.token,\n expires_at: input.expires_at,\n repeated: false,\n },\n };\n });\n }\n\n async issue(input: {\n operation_id: string;\n fingerprint: string;\n actor: string;\n subject: string;\n grants: Grant[];\n expires_at: number;\n }): Promise<\n RpcResult<{\n id: string;\n token: string;\n expires_at: number;\n repeated: boolean;\n }>\n > {\n if (!input.grants.length || !input.grants.every(validateGrant))\n return failure('invalid_input', 'token grants are invalid', 422);\n const existing = this.findOperation(input.operation_id);\n if (existing) {\n if (String(existing.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different token metadata',\n 409,\n );\n return {\n ok: true,\n value: {\n id: String(existing.jti),\n token: String(existing.token),\n expires_at: Number(existing.expires_at),\n repeated: true,\n },\n };\n }\n const signed = await this.signer.sign(\n input.subject,\n input.grants,\n input.expires_at,\n );\n return this.ctx.storage.transactionSync(() => {\n const old = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT jti, token, expires_at, fingerprint FROM tokens WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (old) {\n if (String(old.fingerprint) !== input.fingerprint)\n return failure(\n 'idempotency_conflict',\n 'idempotency key was reused with different token metadata',\n 409,\n );\n return {\n ok: true,\n value: {\n id: String(old.jti),\n token: String(old.token),\n expires_at: Number(old.expires_at),\n repeated: true,\n },\n };\n }\n this.ctx.storage.sql.exec(\n 'INSERT INTO tokens (jti, subject, expires_at, issued_at, grants, revoked, token, operation_id, fingerprint) VALUES (?, ?, ?, ?, ?, 0, ?, ?, ?)',\n signed.jti,\n input.subject,\n input.expires_at,\n signed.issued_at,\n JSON.stringify(input.grants),\n signed.token,\n input.operation_id,\n input.fingerprint,\n );\n this.audit.enqueue({\n id: `token:${input.operation_id}`,\n timestamp: signed.issued_at,\n actor: input.actor,\n action: 'token.issue',\n resource: signed.jti,\n outcome: 'success',\n metadata: {},\n });\n return {\n ok: true,\n value: {\n id: signed.jti,\n token: signed.token,\n expires_at: input.expires_at,\n repeated: false,\n },\n };\n });\n }\n\n private findOperation(operationId: string): SqlRow | null {\n return (\n [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT jti, token, expires_at, fingerprint FROM tokens WHERE operation_id = ?',\n operationId,\n ),\n ][0] ?? null\n );\n }\n}\n","import { decodeCursor } from '../../domain/validation';\nimport type { PageResponse, TokenSummary } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { now, type SqlRow } from '../../../infrastructure/durable/shared';\nimport { failure, toTokenSummary } from './model';\nimport { TokenAudit } from './audit';\n\nexport class TokenManagement {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly audit: TokenAudit,\n ) {}\n\n async check(input: {\n jti: string;\n exp: number;\n }): Promise<RpcResult<{ active: boolean }>> {\n const row = [\n ...this.ctx.storage.sql.exec<{ revoked: number; expires_at: number }>(\n 'SELECT revoked, expires_at FROM tokens WHERE jti = ?',\n input.jti,\n ),\n ][0];\n return {\n ok: true,\n value: {\n active: Boolean(\n row &&\n Number(row.revoked) === 0 &&\n Number(row.expires_at) >= now() &&\n Number(row.expires_at) === input.exp,\n ),\n },\n };\n }\n\n async revoke(input: {\n operation_id: string;\n jti: string;\n actor: string;\n }): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n const old = [\n ...this.ctx.storage.sql.exec<{ jti: string }>(\n 'SELECT jti FROM token_operations WHERE operation_id = ?',\n input.operation_id,\n ),\n ][0];\n if (old && old.jti !== input.jti)\n return failure(\n 'idempotency_conflict',\n 'revocation operation changed token',\n 409,\n );\n this.ctx.storage.sql.exec(\n 'UPDATE tokens SET revoked = 1 WHERE jti = ?',\n input.jti,\n );\n this.ctx.storage.sql.exec(\n 'INSERT OR IGNORE INTO token_operations (operation_id, jti) VALUES (?, ?)',\n input.operation_id,\n input.jti,\n );\n this.audit.enqueue({\n id: input.operation_id,\n timestamp: now(),\n actor: input.actor,\n action: 'token.revoke',\n resource: input.jti,\n outcome: 'success',\n metadata: {},\n });\n return { ok: true, value: undefined };\n });\n }\n\n async list(input: {\n limit: number;\n cursor: string | null;\n }): Promise<RpcResult<PageResponse<TokenSummary>>> {\n const cursor = decodeCursor<{ issued_at: number; jti: string }>(\n input.cursor,\n );\n const rows = cursor\n ? [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT jti, subject, expires_at, issued_at, grants, revoked FROM tokens WHERE (issued_at < ? OR (issued_at = ? AND jti < ?)) ORDER BY issued_at DESC, jti DESC LIMIT ?',\n cursor.issued_at,\n cursor.issued_at,\n cursor.jti,\n input.limit + 1,\n ),\n ]\n : [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT jti, subject, expires_at, issued_at, grants, revoked FROM tokens ORDER BY issued_at DESC, jti DESC LIMIT ?',\n input.limit + 1,\n ),\n ];\n const items = rows.slice(0, input.limit).map(toTokenSummary);\n const last = rows.length > input.limit ? rows[input.limit - 1] : null;\n return {\n ok: true,\n value: {\n items,\n next_cursor: last\n ? btoa(\n JSON.stringify({\n issued_at: Number(last.issued_at),\n jti: String(last.jti),\n }),\n ).replaceAll('=', '')\n : null,\n },\n };\n }\n}\n","import { importJWK, SignJWT } from 'jose';\nimport type { Grant } from '../../../types';\nimport { now } from '../../../infrastructure/durable/shared';\n\nexport class TokenSigner {\n constructor(private readonly env: Env) {}\n\n async sign(\n subject: string,\n grants: Grant[],\n expiresAt: number,\n ): Promise<{ jti: string; token: string; issued_at: number }> {\n const issuedAt = now();\n const jti = crypto.randomUUID().replaceAll('-', '');\n const key = await importJWK(\n JSON.parse(this.env.AUTH_PRIVATE_JWK) as JsonWebKey,\n 'EdDSA',\n );\n const token = await new SignJWT({ grants })\n .setProtectedHeader({ alg: 'EdDSA', typ: 'JWT', kid: 'current' })\n .setIssuer(this.env.TOKEN_ISSUER)\n .setAudience(this.env.TOKEN_AUDIENCE)\n .setSubject(subject)\n .setJti(jti)\n .setIssuedAt(issuedAt)\n .setNotBefore(issuedAt)\n .setExpirationTime(expiresAt)\n .sign(key);\n return { jti, token, issued_at: issuedAt };\n }\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport type { Grant, PageResponse, TokenSummary } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { initialize } from '../../../infrastructure/durable/shared';\nimport { TokenAudit } from './audit';\nimport { TokenIssuance } from './issuance';\nimport { TokenManagement } from './management';\nimport { TokenSigner } from './signer';\n\nconst schema = `CREATE TABLE IF NOT EXISTS tokens (\n jti TEXT PRIMARY KEY, subject TEXT NOT NULL, expires_at INTEGER NOT NULL,\n issued_at INTEGER NOT NULL, grants TEXT NOT NULL, revoked INTEGER NOT NULL DEFAULT 0,\n token TEXT NOT NULL, operation_id TEXT UNIQUE NOT NULL, fingerprint TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS token_operations (operation_id TEXT PRIMARY KEY, jti TEXT NOT NULL);\nCREATE TABLE IF NOT EXISTS bootstrap (key INTEGER PRIMARY KEY CHECK (key = 1), operation_id TEXT NOT NULL, fingerprint TEXT NOT NULL);\nCREATE TABLE IF NOT EXISTS audit_outbox (event_id TEXT PRIMARY KEY, event TEXT NOT NULL, created_at INTEGER NOT NULL);`;\n\nexport class TokenCatalog extends DurableObject<Env> {\n private readonly issuance: TokenIssuance;\n private readonly management: TokenManagement;\n private readonly audit: TokenAudit;\n\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n initialize(ctx, schema);\n this.audit = new TokenAudit(ctx, env);\n this.issuance = new TokenIssuance(\n ctx,\n env,\n new TokenSigner(env),\n this.audit,\n );\n this.management = new TokenManagement(ctx, this.audit);\n }\n\n bootstrap(input: {\n operation_id: string;\n fingerprint: string;\n subject: string;\n grants: Grant[];\n expires_at: number;\n secret: string;\n }): Promise<\n RpcResult<{\n id: string;\n token: string;\n expires_at: number;\n repeated: boolean;\n }>\n > {\n return this.issuance.bootstrap(input);\n }\n\n issue(input: {\n operation_id: string;\n fingerprint: string;\n actor: string;\n subject: string;\n grants: Grant[];\n expires_at: number;\n }): Promise<\n RpcResult<{\n id: string;\n token: string;\n expires_at: number;\n repeated: boolean;\n }>\n > {\n return this.issuance.issue(input);\n }\n\n check(input: {\n jti: string;\n exp: number;\n }): Promise<RpcResult<{ active: boolean }>> {\n return this.management.check(input);\n }\n\n revoke(input: {\n operation_id: string;\n jti: string;\n actor: string;\n }): Promise<RpcResult<void>> {\n return this.management.revoke(input);\n }\n\n list(input: {\n limit: number;\n cursor: string | null;\n }): Promise<RpcResult<PageResponse<TokenSummary>>> {\n return this.management.list(input);\n }\n\n alarm(): Promise<void> {\n return this.audit.alarm();\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport { base64url } from 'jose';\nimport type { AuditEvent, PageResponse } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { decodeCursor } from '../../domain/validation';\nimport {\n initialize,\n type SqlRow,\n} from '../../../infrastructure/durable/shared';\n\nconst failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\n\nexport class AuditLog extends DurableObject<Env> {\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n initialize(\n ctx,\n `CREATE TABLE IF NOT EXISTS audit (\n id TEXT PRIMARY KEY, timestamp INTEGER NOT NULL, actor TEXT NOT NULL,\n action TEXT NOT NULL, resource TEXT NOT NULL, outcome TEXT NOT NULL, metadata TEXT NOT NULL\n );\n CREATE INDEX IF NOT EXISTS audit_order ON audit(timestamp DESC, id DESC);`,\n );\n }\n\n async append(event: AuditEvent): Promise<RpcResult<void>> {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'INSERT OR IGNORE INTO audit (id, timestamp, actor, action, resource, outcome, metadata) VALUES (?, ?, ?, ?, ?, ?, ?)',\n event.id,\n event.timestamp,\n event.actor,\n event.action,\n event.resource,\n event.outcome,\n JSON.stringify(event.metadata),\n ),\n );\n return { ok: true, value: undefined };\n }\n\n async list(input: {\n limit: number;\n cursor: string | null;\n }): Promise<RpcResult<PageResponse<AuditEvent>>> {\n if (!Number.isInteger(input.limit) || input.limit < 1 || input.limit > 100)\n return failure('invalid_limit', 'limit must be between 1 and 100', 400);\n const cursor = decodeCursor<{ timestamp: number; id: string }>(\n input.cursor,\n );\n const rows = cursor\n ? [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT id, timestamp, actor, action, resource, outcome, metadata FROM audit WHERE (timestamp < ? OR (timestamp = ? AND id < ?)) ORDER BY timestamp DESC, id DESC LIMIT ?',\n cursor.timestamp,\n cursor.timestamp,\n cursor.id,\n input.limit + 1,\n ),\n ]\n : [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT id, timestamp, actor, action, resource, outcome, metadata FROM audit ORDER BY timestamp DESC, id DESC LIMIT ?',\n input.limit + 1,\n ),\n ];\n const items = rows.slice(0, input.limit).map((row) => ({\n id: String(row.id),\n timestamp: Number(row.timestamp),\n actor: String(row.actor),\n action: String(row.action),\n resource: String(row.resource),\n outcome: String(row.outcome) as AuditEvent['outcome'],\n metadata: JSON.parse(String(row.metadata)) as Record<string, string>,\n }));\n const last = rows.length > input.limit ? rows[input.limit - 1] : null;\n return {\n ok: true,\n value: {\n items,\n next_cursor: last\n ? base64url.encode(\n JSON.stringify({\n timestamp: Number(last.timestamp),\n id: String(last.id),\n }),\n )\n : null,\n },\n };\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n","import type {\n ProcessJob,\n UploadManifest,\n UploadState,\n UploadStateResponse,\n} from '../../../types';\nimport { ENCODING_ID } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\n\nexport interface ProcessReceipt {\n manifest_key: string;\n deduplicated: boolean;\n}\n\nexport interface UploadRow {\n job_id: string;\n cache: string;\n cache_id: string;\n incarnation: string;\n staging_key: string;\n upload_id: string | null;\n state: UploadState;\n manifest: UploadManifest;\n compressed_size: number;\n idempotency_key: string;\n fingerprint: string;\n parts: Record<string, string>;\n error: string | null;\n result: ProcessReceipt | null;\n}\n\nexport const failure = (\n code: string,\n message: string,\n status: number,\n): RpcResult<never> => ({ ok: false, error: { code, message, status } });\n\nexport const state = (row: UploadRow): UploadStateResponse => ({\n id: row.job_id,\n status: row.state,\n error: row.error,\n});\n\nexport const processJob = (row: UploadRow): ProcessJob => ({\n job_id: row.job_id,\n staging_key: row.staging_key,\n nar_hash: row.manifest.nar_hash,\n nar_size: row.manifest.nar_size,\n encoding_id: ENCODING_ID,\n});\n","import {\n CompleteUploadSchema,\n parseJsonSchema,\n partsFor,\n} from '../../domain/validation';\nimport type {\n CompleteUploadRequest,\n UploadManifest,\n UploadState,\n UploadStateResponse,\n} from '../../../types';\nimport { ENCODING_ID, MULTIPART_PART_SIZE } from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { ensureWorkflow } from '../../workflows/workflow';\nimport { failure, processJob, state, type UploadRow } from './model';\nimport { UploadStorage } from './storage';\n\nexport class UploadMultipart {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n private readonly storage: UploadStorage,\n ) {}\n\n async init(input: {\n job_id: string;\n cache: string;\n cache_id: string;\n incarnation: string;\n staging_key: string;\n manifest: UploadManifest;\n compressed_size: number;\n idempotency_key: string;\n fingerprint: string;\n }): Promise<RpcResult<{ job_id: string; state: UploadState }>> {\n const existing = this.storage.row();\n if (existing) {\n if (\n existing.fingerprint !== input.fingerprint ||\n existing.idempotency_key !== input.idempotency_key\n )\n return failure(\n 'idempotency_conflict',\n 'upload metadata changed during retry',\n 409,\n );\n return {\n ok: true,\n value: { job_id: existing.job_id, state: existing.state },\n };\n }\n const upload = await this.env.CACHE_BUCKET.createMultipartUpload(\n input.staging_key,\n { httpMetadata: { contentType: 'application/zstd' } },\n );\n const inserted = this.storage.insert({\n ...input,\n upload_id: upload.uploadId,\n });\n if (!inserted) {\n await this.env.CACHE_BUCKET.resumeMultipartUpload(\n input.staging_key,\n upload.uploadId,\n )\n .abort()\n .catch(() => undefined);\n const row = this.storage.row();\n return row\n ? { ok: true, value: { job_id: row.job_id, state: row.state } }\n : failure('operation_not_found', 'upload allocation disappeared', 503);\n }\n return { ok: true, value: { job_id: input.job_id, state: 'UPLOADING' } };\n }\n\n async putPart(input: {\n number: number;\n length: number;\n body: ReadableStream<Uint8Array> | null;\n }): Promise<RpcResult<{ part_number: number; etag: string }>> {\n const row = this.storage.row();\n if (!row?.upload_id || row.state !== 'UPLOADING')\n return failure('not_uploadable', 'upload is not accepting parts', 409);\n if (\n !Number.isSafeInteger(input.number) ||\n input.number < 1 ||\n input.number > partsFor(row.compressed_size, MULTIPART_PART_SIZE)\n )\n return failure('invalid_part', 'invalid multipart part number', 400);\n if (row.parts[input.number])\n return {\n ok: true,\n value: { part_number: input.number, etag: row.parts[input.number] },\n };\n const upload = this.env.CACHE_BUCKET.resumeMultipartUpload(\n row.staging_key,\n row.upload_id,\n );\n let part;\n if (input.body) {\n const fixed = new FixedLengthStream(input.length);\n const uploadPart = upload.uploadPart(input.number, fixed.readable);\n [part] = await Promise.all([\n uploadPart,\n input.body.pipeTo(fixed.writable),\n ]);\n } else {\n if (input.length !== 0)\n return failure('invalid_part', 'part body length does not match', 400);\n part = await upload.uploadPart(input.number, new Uint8Array());\n }\n const current = this.storage.row();\n if (current && !current.parts[input.number])\n this.storage.setParts(current.job_id, {\n ...current.parts,\n [input.number]: part.etag,\n });\n return { ok: true, value: { part_number: input.number, etag: part.etag } };\n }\n\n async complete(\n input: CompleteUploadRequest,\n ): Promise<RpcResult<UploadStateResponse>> {\n const supplied = parseJsonSchema(CompleteUploadSchema, input);\n const row = this.storage.row();\n if (!row?.upload_id)\n return row\n ? failure('not_uploadable', 'upload is not multipart active', 409)\n : failure('not_found', 'upload not found', 404);\n if (['QUEUED', 'PROCESSING', 'PUBLISHING'].includes(row.state)) {\n // QUEUED is persisted before workflow creation. Reconcile here as well\n // as from state() so a failed enqueue cannot strand an upload forever.\n await ensureWorkflow(\n this.env.PROCESS_UPLOAD!,\n row.job_id,\n processJob(row),\n );\n return { ok: true, value: state(this.storage.row()!) };\n }\n if (row.state === 'READY') return { ok: true, value: state(row) };\n if (row.state !== 'UPLOADING' && row.state !== 'COMPLETING')\n return { ok: true, value: state(row) };\n if (row.state === 'COMPLETING') return this.completeMultipart(row);\n const values = supplied.parts?.length\n ? supplied.parts\n : Object.entries(row.parts).map(([part_number, etag]) => ({\n part_number: Number(part_number),\n etag,\n }));\n if (!values.length)\n return failure('missing_parts', 'no uploaded parts were supplied', 400);\n const storedParts = Object.fromEntries(\n values.map((part) => [part.part_number, part.etag]),\n );\n this.storage.setCompleting(row.job_id, storedParts);\n return this.completeMultipart(this.storage.row()!);\n }\n\n private async completeMultipart(\n row: UploadRow,\n ): Promise<RpcResult<UploadStateResponse>> {\n const completed = await this.env.CACHE_BUCKET.head(row.staging_key);\n if (!completed) {\n if (!row.upload_id)\n return failure('not_uploadable', 'upload is not multipart active', 409);\n const parts = Object.entries(row.parts).map(([part_number, etag]) => ({\n partNumber: Number(part_number),\n etag,\n }));\n if (!parts.length)\n return failure('missing_parts', 'no uploaded parts were supplied', 400);\n await this.env.CACHE_BUCKET.resumeMultipartUpload(\n row.staging_key,\n row.upload_id,\n ).complete(parts);\n }\n return this.finishCompletion(this.storage.row()!);\n }\n\n private async finishCompletion(\n row: UploadRow,\n ): Promise<RpcResult<UploadStateResponse>> {\n const completed = await this.env.CACHE_BUCKET.head(row.staging_key);\n if (!completed)\n return failure(\n 'completion_pending',\n 'multipart completion is not yet visible',\n 503,\n );\n if (completed.size !== row.compressed_size)\n return this.failSize(row, completed.size);\n this.storage.setQueued(row.job_id);\n await ensureWorkflow(this.env.PROCESS_UPLOAD!, row.job_id, {\n job_id: row.job_id,\n staging_key: row.staging_key,\n nar_hash: row.manifest.nar_hash,\n nar_size: row.manifest.nar_size,\n encoding_id: ENCODING_ID,\n });\n return { ok: true, value: state(this.storage.row()!) };\n }\n\n private async failSize(\n row: UploadRow,\n size: number,\n ): Promise<RpcResult<UploadStateResponse>> {\n this.storage.setError(\n row.job_id,\n `completed object size ${size} does not match declared size ${row.compressed_size}`,\n );\n await this.env.CACHE_BUCKET.delete(row.staging_key);\n return { ok: true, value: state(this.storage.row()!) };\n }\n}\n","import type { ChunkManifest, PathRecord } from '../../types';\n\nconst encoder = new TextEncoder();\n\nfunction standardBase64(bytes: ArrayBuffer): string {\n return btoa(String.fromCharCode(...new Uint8Array(bytes)));\n}\n\nexport async function renderNarInfo(\n env: Env,\n record: PathRecord,\n manifest: ChunkManifest,\n): Promise<string> {\n const references = record.references.join(' ');\n const fingerprint = `1;${record.store_path};${record.nar_hash};${record.nar_size};${record.references.map((reference) => (reference.startsWith('/') ? reference : `/nix/store/${reference}`)).join(',')}`;\n const key = await crypto.subtle.importKey(\n 'jwk',\n JSON.parse(env.NIX_PRIVATE_JWK) as JsonWebKey,\n { name: 'Ed25519' },\n false,\n ['sign'],\n );\n const signature = await crypto.subtle.sign(\n { name: 'Ed25519' },\n key,\n encoder.encode(fingerprint),\n );\n const lines = [\n `StorePath: ${record.store_path}`,\n `URL: nar/${record.store_hash}.nar.zst`,\n 'Compression: zstd',\n `FileHash: ${manifest.file_hash}`,\n `FileSize: ${manifest.file_size}`,\n `NarHash: ${record.nar_hash}`,\n `NarSize: ${record.nar_size}`,\n `References: ${references}`,\n `Sig: ${env.NIX_SIGNING_KEY_NAME}:${standardBase64(signature)}`,\n ];\n if (record.deriver) lines.push(`Deriver: ${record.deriver}`);\n if (record.ca) lines.push(`CA: ${record.ca}`);\n return `${lines.join('\\n')}\\n`;\n}\n","import { renderNarInfo } from '../../nix/narinfo';\nimport {\n ChunkManifestSchema,\n parseJsonSchema,\n transition,\n} from '../../domain/validation';\nimport type {\n PathRecord,\n ProcessResult,\n UploadStateResponse,\n} from '../../../types';\nimport { publicationFor } from '../../cache';\nimport { PublicationError } from '../../cache/application';\nimport { ensureWorkflow } from '../../workflows/workflow';\nimport type { RpcResult } from '../../../rpc';\nimport { getCache } from '../../runtime/http';\nimport { now } from '../../../infrastructure/durable/shared';\nimport { failure, processJob, state } from './model';\nimport { UploadStorage } from './storage';\n\nexport class UploadPublication {\n constructor(\n private readonly ctx: DurableObjectState,\n private readonly env: Env,\n private readonly storage: UploadStorage,\n ) {}\n\n async processing(): Promise<RpcResult<void>> {\n return this.ctx.storage.transactionSync(() => {\n const row = this.storage.row();\n if (!row) return failure('not_found', 'upload not found', 404);\n if (['READY', 'PROCESSING', 'PUBLISHING'].includes(row.state))\n return { ok: true, value: undefined };\n if (row.state !== 'QUEUED')\n return failure(\n 'invalid_transition',\n 'upload is not queued for processing',\n 409,\n );\n transition(row.state, 'PROCESSING');\n this.ctx.storage.sql.exec(\n \"UPDATE job SET state = 'PROCESSING' WHERE job_id = ?\",\n row.job_id,\n );\n return { ok: true, value: undefined };\n });\n }\n\n async publish(result: ProcessResult): Promise<RpcResult<void>> {\n const row = this.storage.row();\n if (!row) return failure('not_found', 'upload not found', 404);\n if (row.state === 'READY') return { ok: true, value: undefined };\n if (!['PROCESSING', 'PUBLISHING'].includes(row.state))\n return failure(\n 'invalid_transition',\n 'upload is not ready for publication',\n 409,\n );\n const cache = await getCache(this.env, row.cache);\n if (\n cache.reference.id !== row.cache_id ||\n cache.reference.incarnation !== row.incarnation\n )\n return failure(\n 'cache_recreated',\n 'upload belongs to an older cache incarnation',\n 409,\n );\n const manifestObject = await this.env.CACHE_BUCKET.get(result.manifest_key);\n if (!manifestObject)\n return failure(\n 'publication_result_missing',\n 'processor manifest is missing',\n 503,\n );\n let manifest: ProcessResult['manifest'];\n try {\n manifest = parseJsonSchema(\n ChunkManifestSchema,\n await manifestObject.json<unknown>(),\n );\n } catch {\n return failure('invalid_input', 'processor manifest is invalid', 422);\n }\n if (\n manifest.nar_hash !== row.manifest.nar_hash ||\n manifest.nar_size !== row.manifest.nar_size\n )\n return failure(\n 'invalid_input',\n 'processor manifest does not match upload metadata',\n 422,\n );\n this.storage.setResult(\n row.job_id,\n {\n manifest_key: result.manifest_key,\n deduplicated: result.deduplicated,\n },\n ['PROCESSING', 'PUBLISHING'],\n 'PUBLISHING',\n );\n const record: PathRecord = {\n cache: row.cache,\n store_hash: row.manifest.store_hash,\n store_path: row.manifest.store_path,\n nar_hash: row.manifest.nar_hash,\n nar_size: row.manifest.nar_size,\n references: row.manifest.references,\n deriver: row.manifest.deriver,\n ca: row.manifest.ca,\n manifest_key: result.manifest_key,\n narinfo: '',\n file_hash: manifest.file_hash,\n file_size: manifest.file_size,\n last_accessed: now(),\n created_at: now(),\n };\n record.narinfo = await renderNarInfo(this.env, record, manifest);\n try {\n await publicationFor(this.env, cache, row.manifest.store_hash).execute(\n `publish:${row.job_id}`,\n { kind: 'upsert', record },\n );\n } catch (error) {\n // Preserve the retryability classification across the Durable Object\n // RPC boundary. The workflow must be able to make quota/lifecycle\n // rejection terminal instead of leaving the job in PUBLISHING forever.\n if (error instanceof PublicationError)\n return failure(\n 'publication_failed',\n error.message,\n error.retryable ? 503 : 409,\n );\n throw error;\n }\n this.storage.setState(row.job_id, ['PUBLISHING'], 'READY');\n await this.env.CACHE_BUCKET.delete(row.staging_key);\n return { ok: true, value: undefined };\n }\n\n async fail(message: string, terminal = true): Promise<RpcResult<void>> {\n if (!terminal) return { ok: true, value: undefined };\n this.ctx.storage.transactionSync(() => {\n const row = this.storage.row();\n if (!row || ['READY', 'ABORTED'].includes(row.state)) return;\n this.ctx.storage.sql.exec(\n \"UPDATE job SET state = 'FAILED', error = ? WHERE job_id = ?\",\n message.slice(0, 2000),\n row.job_id,\n );\n });\n return { ok: true, value: undefined };\n }\n\n async abort(): Promise<RpcResult<UploadStateResponse>> {\n const row = this.storage.row();\n if (!row) return failure('not_found', 'upload not found', 404);\n // Once processing has started, publication may be in flight outside this\n // Durable Object. Allowing an abort here would race that publication and\n // could leave an ABORTED job with a live path in the cache. The domain\n // transition graph intentionally permits abort only before PROCESSING.\n if (row.state === 'PROCESSING' || row.state === 'PUBLISHING')\n return failure(\n 'invalid_transition',\n 'upload cannot be aborted after processing has started',\n 409,\n );\n // Fence the job before awaiting R2. Otherwise completion/processing can\n // advance the job while the multipart abort is in flight, after which the\n // stale abort would overwrite PROCESSING or PUBLISHING with ABORTED.\n this.ctx.storage.transactionSync(() => {\n const current = this.storage.row();\n if (\n current &&\n ['UPLOADING', 'COMPLETING', 'QUEUED'].includes(current.state)\n )\n this.ctx.storage.sql.exec(\n \"UPDATE job SET state = 'ABORTED' WHERE job_id = ?\",\n current.job_id,\n );\n });\n if (row.upload_id && ['UPLOADING', 'COMPLETING'].includes(row.state))\n await this.env.CACHE_BUCKET.resumeMultipartUpload(\n row.staging_key,\n row.upload_id,\n )\n .abort()\n .catch(() => undefined);\n return { ok: true, value: state(this.storage.row()!) };\n }\n\n async state(): Promise<RpcResult<UploadStateResponse>> {\n const row = this.storage.row();\n if (!row) return failure('not_found', 'upload not found', 404);\n if (['QUEUED', 'PROCESSING', 'PUBLISHING'].includes(row.state))\n await ensureWorkflow(\n this.env.PROCESS_UPLOAD!,\n row.job_id,\n processJob(row),\n );\n return { ok: true, value: state(this.storage.row()!) };\n }\n}\n","import type { UploadManifest, UploadState } from '../../../types';\nimport {\n initialize,\n type SqlRow,\n} from '../../../infrastructure/durable/shared';\nimport type { ProcessReceipt, UploadRow } from './model';\n\nconst schema = `CREATE TABLE IF NOT EXISTS job (\n job_id TEXT PRIMARY KEY, cache TEXT NOT NULL, cache_id TEXT NOT NULL, incarnation TEXT NOT NULL,\n staging_key TEXT NOT NULL, upload_id TEXT, state TEXT NOT NULL, manifest TEXT NOT NULL,\n compressed_size INTEGER NOT NULL, idempotency_key TEXT NOT NULL, fingerprint TEXT NOT NULL,\n parts TEXT NOT NULL, error TEXT, result TEXT\n);`;\n\nexport class UploadStorage {\n constructor(private readonly ctx: DurableObjectState) {\n initialize(ctx, schema);\n }\n\n row(): UploadRow | null {\n const row = [\n ...this.ctx.storage.sql.exec<SqlRow>(\n 'SELECT job_id, cache, cache_id, incarnation, staging_key, upload_id, state, manifest, compressed_size, idempotency_key, fingerprint, parts, error, result FROM job LIMIT 1',\n ),\n ][0];\n if (!row) return null;\n return {\n job_id: String(row.job_id),\n cache: String(row.cache),\n cache_id: String(row.cache_id),\n incarnation: String(row.incarnation),\n staging_key: String(row.staging_key),\n upload_id: row.upload_id ? String(row.upload_id) : null,\n state: String(row.state) as UploadState,\n manifest: JSON.parse(String(row.manifest)) as UploadManifest,\n compressed_size: Number(row.compressed_size),\n idempotency_key: String(row.idempotency_key),\n fingerprint: String(row.fingerprint),\n parts: JSON.parse(String(row.parts)) as Record<string, string>,\n error: row.error ? String(row.error) : null,\n result: row.result\n ? (JSON.parse(String(row.result)) as ProcessReceipt)\n : null,\n };\n }\n\n insert(input: {\n job_id: string;\n cache: string;\n cache_id: string;\n incarnation: string;\n staging_key: string;\n upload_id: string;\n manifest: UploadManifest;\n compressed_size: number;\n idempotency_key: string;\n fingerprint: string;\n }): boolean {\n return this.ctx.storage.transactionSync(() => {\n if (this.row()) return false;\n this.ctx.storage.sql.exec(\n \"INSERT INTO job (job_id, cache, cache_id, incarnation, staging_key, upload_id, state, manifest, compressed_size, idempotency_key, fingerprint, parts) VALUES (?, ?, ?, ?, ?, ?, 'UPLOADING', ?, ?, ?, ?, ?)\",\n input.job_id,\n input.cache,\n input.cache_id,\n input.incarnation,\n input.staging_key,\n input.upload_id,\n JSON.stringify(input.manifest),\n input.compressed_size,\n input.idempotency_key,\n input.fingerprint,\n '{}',\n );\n return true;\n });\n }\n\n setParts(jobId: string, parts: Record<string, string>): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'UPDATE job SET parts = ? WHERE job_id = ?',\n JSON.stringify(parts),\n jobId,\n ),\n );\n }\n\n setCompleting(jobId: string, parts: Record<string, string>): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n \"UPDATE job SET state = 'COMPLETING', parts = ? WHERE job_id = ? AND state = 'UPLOADING'\",\n JSON.stringify(parts),\n jobId,\n ),\n );\n }\n\n setQueued(jobId: string): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n \"UPDATE job SET state = 'QUEUED' WHERE job_id = ? AND state = 'COMPLETING'\",\n jobId,\n ),\n );\n }\n\n setState(jobId: string, from: UploadState[], to: UploadState): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n `UPDATE job SET state = ? WHERE job_id = ? AND state IN (${from.map(() => '?').join(', ')})`,\n to,\n jobId,\n ...from,\n ),\n );\n }\n\n setResult(\n jobId: string,\n result: ProcessReceipt,\n from: UploadState[],\n to: UploadState,\n ): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n `UPDATE job SET state = ?, result = ? WHERE job_id = ? AND state IN (${from.map(() => '?').join(', ')})`,\n to,\n JSON.stringify(result),\n jobId,\n ...from,\n ),\n );\n }\n\n setError(jobId: string, message: string, to: UploadState = 'FAILED'): void {\n this.ctx.storage.transactionSync(() =>\n this.ctx.storage.sql.exec(\n 'UPDATE job SET state = ?, error = ? WHERE job_id = ?',\n to,\n message.slice(0, 2000),\n jobId,\n ),\n );\n }\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport type {\n CompleteUploadRequest,\n ProcessResult,\n UploadManifest,\n UploadState,\n UploadStateResponse,\n} from '../../../types';\nimport type { RpcResult } from '../../../rpc';\nimport { failure } from './model';\nimport { UploadMultipart } from './multipart';\nimport { UploadPublication } from './publication';\nimport { UploadStorage } from './storage';\n\nexport class UploadJob extends DurableObject<Env> {\n private readonly storage: UploadStorage;\n private readonly multipart: UploadMultipart;\n private readonly publication: UploadPublication;\n\n constructor(ctx: DurableObjectState, env: Env) {\n super(ctx, env);\n this.storage = new UploadStorage(ctx);\n this.multipart = new UploadMultipart(ctx, env, this.storage);\n this.publication = new UploadPublication(ctx, env, this.storage);\n }\n\n async access(): Promise<RpcResult<{ cache: string; state: UploadState }>> {\n const row = this.storage.row();\n return row\n ? { ok: true, value: { cache: row.cache, state: row.state } }\n : failure('not_found', 'upload not found', 404);\n }\n\n init(input: {\n job_id: string;\n cache: string;\n cache_id: string;\n incarnation: string;\n staging_key: string;\n manifest: UploadManifest;\n compressed_size: number;\n idempotency_key: string;\n fingerprint: string;\n }): Promise<RpcResult<{ job_id: string; state: UploadState }>> {\n return this.multipart.init(input);\n }\n\n putPart(input: {\n number: number;\n length: number;\n body: ReadableStream<Uint8Array> | null;\n }): Promise<RpcResult<{ part_number: number; etag: string }>> {\n return this.multipart.putPart(input);\n }\n\n complete(\n input: CompleteUploadRequest,\n ): Promise<RpcResult<UploadStateResponse>> {\n return this.multipart.complete(input);\n }\n\n processing(): Promise<RpcResult<void>> {\n return this.publication.processing();\n }\n\n publish(result: ProcessResult): Promise<RpcResult<void>> {\n return this.publication.publish(result);\n }\n\n fail(message: string, terminal = true): Promise<RpcResult<void>> {\n return this.publication.fail(message, terminal);\n }\n\n abort(): Promise<RpcResult<UploadStateResponse>> {\n return this.publication.abort();\n }\n\n state(): Promise<RpcResult<UploadStateResponse>> {\n return this.publication.state();\n }\n\n fetch(): Response {\n return Response.json({ code: 'rpc_only' }, { status: 404 });\n }\n}\n","/**\n * Generates a random ID of a specified length using a url-friendly alphabet\n * Can be run without node:crypto\n * @param length - The length of the ID to generate (default: 9)\n * @returns A random string ID\n */\nexport function generateId(length = 9) {\n const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const bytes = new Uint8Array(length);\n crypto.getRandomValues(bytes);\n let result = '';\n for (let i = 0; i < length; i++) {\n result += alphabet[bytes[i] % alphabet.length];\n }\n return result;\n}\n/**\n * Parse a time expression into seconds\n * @param timeExpression Time expression (number or string like \"5m\", \"30s\", \"1h\")\n * @returns Number of seconds\n */\nexport function parseTimeExpression(timeExpression) {\n if (typeof timeExpression === 'number') {\n // If it's already a number, assume it's in seconds\n return timeExpression;\n }\n if (typeof timeExpression === 'string') {\n // Parse time expressions like \"5m\", \"30s\", \"1h\"\n const match = timeExpression.match(/^(\\d+)([smh])$/);\n if (!match) {\n throw new Error(`invalid time expression ${timeExpression}`);\n }\n const value = parseInt(match[1]);\n const unit = match[2];\n // Convert to seconds based on unit\n switch (unit) {\n case 's':\n return value;\n case 'm':\n return value * 60;\n case 'h':\n return value * 60 * 60;\n default:\n throw new Error(`unknown time unit ${unit}`);\n }\n }\n throw new Error(`invalid type for a time expression: ${typeof timeExpression}`);\n}\n//# sourceMappingURL=helpers.js.map","import { generateId, parseTimeExpression } from './helpers';\nimport { DurableObject, WorkerEntrypoint } from 'cloudflare:workers';\n// ====================\n// ====================\n// CONSTANTS\n// ====================\n// ====================\nconst NO_CONTAINER_INSTANCE_ERROR = 'there is no container instance that can be provided to this durable object';\nconst RATE_LIMITED_ERROR = 'you are requesting too many containers per second';\nconst RUNTIME_SIGNALLED_ERROR = 'runtime signalled the container to exit:';\nconst UNEXPECTED_EXIT_ERROR = 'container exited with unexpected exit code:';\nconst NOT_LISTENING_ERROR = 'the container is not listening';\nconst CONTAINER_STATE_KEY = '__CF_CONTAINER_STATE';\nconst OUTBOUND_CONFIGURATION_KEY = 'OUTBOUND_CONFIGURATION';\n// maxRetries before scheduling next alarm is purposely set to 3,\n// as according to DO docs at https://developers.cloudflare.com/durable-objects/api/alarms/\n// the maximum amount for alarm retries is 6.\nconst MAX_ALARM_RETRIES = 3;\nconst PING_TIMEOUT_MS = 5000;\nconst DEFAULT_SLEEP_AFTER = '10m'; // Default sleep after inactivity time\nconst INSTANCE_POLL_INTERVAL_MS = 300; // Default interval for polling container state\n// Timeout for getting container instance and launching a VM\n// Time to find an instance, attach a DO, call start, but NOT\n// the time for the app the actually start\nconst TIMEOUT_TO_GET_CONTAINER_MS = 8_000;\n// Timeout for getting a container instance and launching\n// the actual application and have it listen for specific ports\n// One day might be configurable by the end user in Container class attribute\nconst TIMEOUT_TO_GET_PORTS_MS = 20_000;\n// If user has specified no ports and we need to check one\n// to see if the container is up at all.\nconst FALLBACK_PORT_TO_CHECK = 33;\nexport function outboundParams(_handler, params) {\n return params;\n}\n// class name to named outbound handlers (includes the default outbound handler)\nconst outboundHandlersRegistry = new Map();\n// class name to default catch-all outbound handler method name in outboundHandlersRegistry\nconst defaultOutboundHandlerNameRegistry = new Map();\n// class name to hostname to default outbound handler function\nconst outboundByHostRegistry = new Map();\nconst signalToNumbers = {\n SIGINT: 2,\n SIGTERM: 15,\n SIGKILL: 9,\n};\n// =====================\n// =====================\n// HELPER FUNCTIONS\n// =====================\n// =====================\n// ==== Error helpers ====\nfunction isErrorOfType(e, matchingString) {\n const errorString = e instanceof Error ? e.message : String(e);\n return errorString.toLowerCase().includes(matchingString);\n}\nconst isNoInstanceError = (error) => isErrorOfType(error, NO_CONTAINER_INSTANCE_ERROR);\nconst isRateLimitedError = (error) => isErrorOfType(error, RATE_LIMITED_ERROR);\nconst isRuntimeSignalledError = (error) => isErrorOfType(error, RUNTIME_SIGNALLED_ERROR);\nconst isNotListeningError = (error) => isErrorOfType(error, NOT_LISTENING_ERROR);\nconst isContainerExitNonZeroError = (error) => isErrorOfType(error, UNEXPECTED_EXIT_ERROR);\nfunction getExitCodeFromError(error) {\n if (!(error instanceof Error)) {\n return null;\n }\n if (isRuntimeSignalledError(error)) {\n return +error.message\n .toLowerCase()\n .slice(error.message.toLowerCase().indexOf(RUNTIME_SIGNALLED_ERROR) +\n RUNTIME_SIGNALLED_ERROR.length +\n 1);\n }\n if (isContainerExitNonZeroError(error)) {\n return +error.message\n .toLowerCase()\n .slice(error.message.toLowerCase().indexOf(UNEXPECTED_EXIT_ERROR) +\n UNEXPECTED_EXIT_ERROR.length +\n 1);\n }\n return null;\n}\n/**\n * Combines the existing user-defined signal with a signal that aborts after the timeout specified by waitInterval\n */\nfunction addTimeoutSignal(existingSignal, timeoutMs) {\n const controller = new AbortController();\n // Forward existing signal abort\n if (existingSignal?.aborted) {\n controller.abort();\n return controller.signal;\n }\n existingSignal?.addEventListener('abort', () => controller.abort());\n // Add timeout\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n // Clean up timeout if signal is aborted early\n controller.signal.addEventListener('abort', () => clearTimeout(timeoutId));\n return controller.signal;\n}\n// ==== Glob helpers ====\n/**\n * Matches a value against a simple glob pattern where `*` matches\n * any sequence of characters. e.g. `google.*.com`, `*.example.com`, `goo*gle`\n */\nfunction simpleGlobMatch(pattern, value) {\n const parts = pattern.split('*');\n if (parts.length === 1)\n return pattern === value;\n if (!value.startsWith(parts[0]))\n return false;\n if (!value.endsWith(parts[parts.length - 1]))\n return false;\n let pos = parts[0].length;\n for (let i = 1; i < parts.length - 1; i++) {\n const idx = value.indexOf(parts[i], pos);\n if (idx === -1)\n return false;\n pos = idx + parts[i].length;\n }\n return pos <= value.length - parts[parts.length - 1].length;\n}\nfunction matchesHostList(hostname, patterns) {\n return patterns.some(pattern => simpleGlobMatch(pattern, hostname));\n}\nfunction normalizeHostname(hostname) {\n let end = hostname.length;\n while (end > 0 && hostname[end - 1] === '.') {\n end--;\n }\n return hostname.slice(0, end);\n}\n// ===============================\n// CONTAINER STATE WRAPPER\n// ===============================\n/**\n * ContainerState is a wrapper around a DO storage to store and get\n * the container state.\n * It's useful to track which kind of events have been handled by the user,\n * a transition to a new state won't be successful unless the user's hook has been\n * triggered and waited for.\n * A user hook might be repeated multiple times if they throw errors.\n */\nclass ContainerState {\n storage;\n status;\n constructor(storage) {\n this.storage = storage;\n }\n async setRunning() {\n await this.setStatusAndupdate('running');\n }\n async setHealthy() {\n await this.setStatusAndupdate('healthy');\n }\n async setStopping() {\n await this.setStatusAndupdate('stopping');\n }\n async setStopped() {\n await this.setStatusAndupdate('stopped');\n }\n async setStoppedIfUnchanged(previousState) {\n if (this.status !== previousState) {\n return;\n }\n await this.setStopped();\n }\n async setStoppedWithCode(exitCode) {\n this.status = { status: 'stopped_with_code', lastChange: Date.now(), exitCode };\n await this.update();\n }\n async getState() {\n if (!this.status) {\n const state = await this.storage.get(CONTAINER_STATE_KEY);\n if (!state) {\n this.status = {\n status: 'stopped',\n lastChange: Date.now(),\n };\n await this.update();\n }\n else {\n this.status = state;\n }\n }\n return this.status;\n }\n async setStatusAndupdate(status) {\n this.status = { status: status, lastChange: Date.now() };\n await this.update();\n }\n async update() {\n if (!this.status)\n throw new Error('status should be init');\n await this.storage.put(CONTAINER_STATE_KEY, this.status);\n }\n}\nexport class ContainerProxy extends WorkerEntrypoint {\n async fetch(request) {\n const url = new URL(request.url);\n const hostname = normalizeHostname(url.hostname);\n const { className, containerId, outboundByHostOverrides, outboundHandlerOverride, enableInternet, allowedHosts, deniedHosts, interceptAll, } = this.ctx.props;\n const baseCtx = { containerId, className };\n // 1. deniedHosts: overrides everything, blocks unconditionally\n if (deniedHosts && matchesHostList(hostname, deniedHosts)) {\n return new Response('Origin is disallowed', { status: 520 });\n }\n // 2. allowedHosts: when set, acts as a whitelist gate — only matching\n // hosts can proceed. This gates everything below, including outboundByHost.\n // outboundByHost only maps a handler for a hostname, it does not allow it.\n if (allowedHosts && !matchesHostList(hostname, allowedHosts)) {\n return new Response('Origin is disallowed', { status: 520 });\n }\n // 3. outboundByHost (runtime override) — exact match then glob\n const handlers = outboundHandlersRegistry.get(className);\n if (outboundByHostOverrides && handlers) {\n const override = outboundByHostOverrides[hostname] ??\n Object.entries(outboundByHostOverrides).find(([pattern]) => pattern !== hostname && simpleGlobMatch(pattern, hostname))?.[1];\n if (override && handlers[override.method]) {\n return handlers[override.method](request, this.env, {\n ...baseCtx,\n params: override.params,\n });\n }\n }\n // 4. outboundByHost (static) — exact match then glob\n const handlersByHost = outboundByHostRegistry.get(className);\n if (handlersByHost) {\n const handler = handlersByHost[hostname] ??\n Object.entries(handlersByHost).find(([pattern]) => pattern !== hostname && simpleGlobMatch(pattern, hostname))?.[1];\n if (handler) {\n return handler(request, this.env, baseCtx);\n }\n }\n // In per-host mode, only specific hosts were intercepted.\n // If no handler matched above, fall back to direct internet access only\n // when the container already allows it.\n if (!interceptAll) {\n if (allowedHosts || enableInternet) {\n return fetch(request);\n }\n return new Response('Origin is disallowed', { status: 520 });\n }\n // 5. Runtime catch-all handler override\n if (outboundHandlerOverride && handlers?.[outboundHandlerOverride.method]) {\n return handlers[outboundHandlerOverride.method](request, this.env, {\n ...baseCtx,\n params: outboundHandlerOverride.params,\n });\n }\n // 6. Default catch-all handler (static outbound)\n const defaultOutboundHandlerName = defaultOutboundHandlerNameRegistry.get(className);\n if (defaultOutboundHandlerName && handlers?.[defaultOutboundHandlerName]) {\n return handlers[defaultOutboundHandlerName](request, this.env, baseCtx);\n }\n // 7. If the host was explicitly allowed and no outbound handled it, grant internet\n if (allowedHosts) {\n return fetch(request);\n }\n // 8. enableInternet fallback\n if (enableInternet) {\n return fetch(request);\n }\n return new Response('Origin is disallowed', { status: 520 });\n }\n}\n// ===============================\n// ===============================\n// MAIN CONTAINER CLASS\n// ===============================\n// ===============================\n//\nexport class Container extends DurableObject {\n static get outboundByHost() {\n return outboundByHostRegistry.get(this.name);\n }\n static set outboundByHost(handlers) {\n outboundByHostRegistry.set(this.name, handlers);\n }\n static get outboundHandlers() {\n return outboundHandlersRegistry.get(this.name);\n }\n static set outboundHandlers(handlers) {\n const existing = outboundHandlersRegistry.get(this.name) ?? {};\n outboundHandlersRegistry.set(this.name, { ...existing, ...handlers });\n }\n static get outbound() {\n const handlerName = defaultOutboundHandlerNameRegistry.get(this.name);\n if (!handlerName)\n return undefined;\n return outboundHandlersRegistry.get(this.name)?.[handlerName];\n }\n static set outbound(handler) {\n const key = '__outbound__';\n const existing = outboundHandlersRegistry.get(this.name) ?? {};\n outboundHandlersRegistry.set(this.name, { ...existing, [key]: handler });\n defaultOutboundHandlerNameRegistry.set(this.name, key);\n }\n static get outboundProxies() {\n return this.outboundHandlers;\n }\n static set outboundProxies(handlers) {\n this.outboundHandlers = handlers;\n }\n static get outboundProxy() {\n return this.outbound;\n }\n static set outboundProxy(handler) {\n this.outbound = handler;\n }\n // =========================\n // Public Attributes\n // =========================\n // Default port for the container (undefined means no default port)\n defaultPort;\n // Required ports that should be checked for availability during container startup\n // Override this in your subclass to specify ports that must be ready\n requiredPorts;\n // Timeout after which the container will sleep if no activity\n // The signal sent to the container by default is a SIGTERM.\n // The container won't get a SIGKILL if this threshold is triggered.\n sleepAfter = DEFAULT_SLEEP_AFTER;\n // Container configuration properties\n // Set these properties directly in your container instance\n envVars = {};\n entrypoint;\n enableInternet = true;\n labels = {};\n // When true, outbound HTTPS traffic from the container will be intercepted.\n // The container must trust /etc/cloudflare/certs/cloudflare-containers-ca.crt\n interceptHttps = false;\n // Hosts that are allowed to access the internet, even when enableInternet is false.\n // Useful for allowing specific domains on a per-host basis.\n allowedHosts;\n // Hosts that are denied internet access, even when enableInternet is true.\n // Also blocks hosts from being handled by the catch-all outbound handler.\n deniedHosts;\n // pingEndpoint is the host and path value that the class will use to send a request to the container and check if the\n // instance is ready.\n //\n // The user does not have to implement this route by any means,\n // but it's still useful if you want to control the path that\n // the Container class uses to send HTTP requests to.\n pingEndpoint = 'ping';\n applyOutboundInterceptionPromise = Promise.resolve();\n usingInterception = false;\n // =========================\n // PUBLIC INTERFACE\n // =========================\n constructor(ctx, env, options) {\n super(ctx, env);\n if (ctx.container === undefined) {\n throw new Error('Containers have not been enabled for this Durable Object class. Have you correctly setup your Wrangler config? More info: https://developers.cloudflare.com/containers/get-started/#configuration');\n }\n this.state = new ContainerState(this.ctx.storage);\n const persistedOutboundConfiguration = this.restoreOutboundConfiguration();\n this.ctx.blockConcurrencyWhile(async () => {\n // First thing, schedule the next alarms. Also yields a microtask\n // so subclass class-field initializers (e.g. `sleepAfter = \"2h\"`)\n // run before renewActivityTimeout reads `this.sleepAfter`.\n await this.scheduleNextAlarm();\n this.renewActivityTimeout();\n const ctor = this.constructor;\n if (persistedOutboundConfiguration !== undefined ||\n ctor.outboundByHost !== undefined ||\n ctor.outbound !== undefined ||\n ctor.outboundHandlers !== undefined ||\n this.effectiveAllowedHosts !== undefined ||\n this.effectiveDeniedHosts !== undefined) {\n this.usingInterception = true;\n }\n if (this.container.running) {\n this.applyOutboundInterceptionPromise = this.applyOutboundInterception();\n }\n });\n this.container = ctx.container;\n // Apply options if provided\n if (options) {\n if (options.defaultPort !== undefined)\n this.defaultPort = options.defaultPort;\n if (options.sleepAfter !== undefined)\n this.sleepAfter = options.sleepAfter;\n if (options.envVars !== undefined)\n this.envVars = options.envVars;\n if (options.entrypoint !== undefined)\n this.entrypoint = options.entrypoint;\n if (options.enableInternet !== undefined)\n this.enableInternet = options.enableInternet;\n }\n // Create schedules table if it doesn't exist\n this.sql `\n CREATE TABLE IF NOT EXISTS container_schedules (\n id TEXT PRIMARY KEY NOT NULL DEFAULT (randomblob(9)),\n callback TEXT NOT NULL,\n payload TEXT,\n type TEXT NOT NULL CHECK(type IN ('scheduled', 'delayed')),\n time INTEGER NOT NULL,\n delayInSeconds INTEGER,\n created_at INTEGER DEFAULT (unixepoch())\n )\n `;\n if (this.container.running) {\n this.monitor = this.container.monitor();\n this.setupMonitorCallbacks();\n }\n }\n /**\n * Gets the current state of the container\n * @returns Promise<State>\n */\n async getState() {\n return { ...(await this.state.getState()) };\n }\n // ====================================\n // OUTBOUND INTERCEPTION CONFIG\n // ====================================\n /**\n * Set the catch-all outbound handler to a named method from `outboundHandlers`.\n * Overrides the default `outbound` at runtime via ContainerProxy props.\n *\n * @param methodName - Name of a method defined in `static outboundHandlers`\n * @param params - Optional params passed to the handler as `ctx.params`\n * @throws Error if the method name is not found in `outboundHandlers`\n */\n async setOutboundHandler(methodName, ...paramsArg) {\n this.validateOutboundHandlerMethodName(methodName);\n this.outboundHandlerOverride =\n paramsArg.length === 0\n ? { method: methodName }\n : { method: methodName, params: paramsArg[0] };\n await this.refreshOutboundInterception();\n }\n /**\n * Add or override a hostname-specific outbound handler at runtime,\n * referencing a named method from `outboundHandlers`.\n * Overrides any matching entry in `static outboundByHost` for this hostname.\n *\n * @param hostname - The hostname or ip:port to intercept (e.g. `'google.com'`)\n * @param methodName - Name of a method defined in `static outboundHandlers`\n * @param params - Optional params passed to the handler as `ctx.params`\n * @throws Error if the method name is not found in `outboundHandlers`\n */\n async setOutboundByHost(hostname, methodName, ...paramsArg) {\n this.validateOutboundHandlerMethodName(methodName);\n this.outboundByHostOverrides[hostname] =\n paramsArg.length === 0\n ? { method: methodName }\n : { method: methodName, params: paramsArg[0] };\n await this.refreshOutboundInterception();\n }\n /**\n * Remove a runtime hostname override added via `setOutboundByHost`.\n * The default handler from `static outboundByHost` (if any) will be used again.\n *\n * @param hostname - The hostname or ip:port to stop overriding\n */\n async removeOutboundByHost(hostname) {\n delete this.outboundByHostOverrides[hostname];\n await this.refreshOutboundInterception();\n }\n /**\n * Replace all runtime hostname overrides at once.\n * Each value may be either a method name or an object with `method` and `params`.\n *\n * @param handlers - Record mapping hostnames to handler configs in `outboundHandlers`\n * @throws Error if any method name is not found in `outboundHandlers`\n */\n async setOutboundByHosts(handlers) {\n for (const handler of Object.values(handlers)) {\n const methodName = typeof handler === 'string' ? handler : handler.method;\n this.validateOutboundHandlerMethodName(methodName);\n }\n this.outboundByHostOverrides = Object.fromEntries(Object.entries(handlers).map(([hostname, handler]) => [\n hostname,\n typeof handler === 'string' ? { method: handler } : handler,\n ]));\n await this.refreshOutboundInterception();\n }\n // ====================================\n // ALLOWED / DENIED HOSTS CONFIG\n // ====================================\n /**\n * Replace all allowed hosts at runtime.\n * Allowed hosts get internet access even when `enableInternet` is false.\n *\n * @param hosts - Array of hostnames to allow (e.g. `['api.stripe.com', 'example.com']`)\n */\n async setAllowedHosts(hosts) {\n this.allowedHostsOverride = [...hosts];\n this.usingInterception = true;\n await this.refreshOutboundInterception();\n }\n /**\n * Replace all denied hosts at runtime.\n * Denied hosts are blocked unconditionally, even when `enableInternet` is true\n * or a catch-all outbound handler is set.\n *\n * @param hosts - Array of hostnames to deny (e.g. `['evil.com', 'blocked.org']`)\n */\n async setDeniedHosts(hosts) {\n this.deniedHostsOverride = [...hosts];\n this.usingInterception = true;\n await this.refreshOutboundInterception();\n }\n /**\n * Add a single hostname to the allowed hosts list at runtime.\n *\n * @param hostname - The hostname to allow (e.g. `'api.stripe.com'`)\n */\n async allowHost(hostname) {\n const effective = this.effectiveAllowedHosts ?? [];\n if (!effective.includes(hostname)) {\n this.allowedHostsOverride = [...effective, hostname];\n }\n this.usingInterception = true;\n await this.refreshOutboundInterception();\n }\n /**\n * Add a single hostname to the denied hosts list at runtime.\n *\n * @param hostname - The hostname to deny (e.g. `'evil.com'`)\n */\n async denyHost(hostname) {\n const effective = this.effectiveDeniedHosts ?? [];\n if (!effective.includes(hostname)) {\n this.deniedHostsOverride = [...effective, hostname];\n }\n this.usingInterception = true;\n await this.refreshOutboundInterception();\n }\n /**\n * Remove a hostname from the allowed hosts list.\n *\n * @param hostname - The hostname to remove from the allow list\n */\n async removeAllowedHost(hostname) {\n this.allowedHostsOverride = (this.effectiveAllowedHosts ?? []).filter(h => h !== hostname);\n await this.refreshOutboundInterception();\n }\n /**\n * Remove a hostname from the denied hosts list.\n *\n * @param hostname - The hostname to remove from the deny list\n */\n async removeDeniedHost(hostname) {\n this.deniedHostsOverride = (this.effectiveDeniedHosts ?? []).filter(h => h !== hostname);\n await this.refreshOutboundInterception();\n }\n // ==========================\n // CONTAINER STARTING\n // ==========================\n /**\n * Start the container if it's not running and set up monitoring and lifecycle hooks,\n * without waiting for ports to be ready.\n *\n * It will automatically retry if the container fails to start, using the specified waitOptions\n *\n *\n * @example\n * await this.start({\n * envVars: { DEBUG: 'true', NODE_ENV: 'development' },\n * entrypoint: ['npm', 'run', 'dev'],\n * enableInternet: false,\n * labels: { tenant: 'acme', env: 'prod' },\n * });\n *\n * @param startOptions - Override `envVars`, `entrypoint`, `enableInternet` and `labels` on a per-instance basis\n * @param waitOptions - Optional wait configuration with abort signal for cancellation. Default ~8s timeout.\n * @returns A promise that resolves when the container start command has been issued\n * @throws Error if no container context is available or if all start attempts fail\n */\n async start(startOptions, waitOptions) {\n const portToCheck = waitOptions?.portToCheck ??\n this.defaultPort ??\n (this.requiredPorts ? this.requiredPorts[0] : FALLBACK_PORT_TO_CHECK);\n const pollInterval = waitOptions?.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;\n await this.startContainerIfNotRunning({\n signal: waitOptions?.signal,\n waitInterval: pollInterval,\n retries: waitOptions?.retries ?? Math.ceil(TIMEOUT_TO_GET_CONTAINER_MS / pollInterval),\n portToCheck,\n }, startOptions);\n this.setupMonitorCallbacks();\n // TODO: We should consider an onHealthy callback\n await this.ctx.blockConcurrencyWhile(async () => {\n await this.onStart();\n });\n }\n async startAndWaitForPorts(portsOrArgs, cancellationOptions, startOptions) {\n // Parse arguments to handle different overload signatures\n let ports;\n let resolvedCancellationOptions;\n let resolvedStartOptions;\n if (typeof portsOrArgs === 'object' && portsOrArgs !== null && !Array.isArray(portsOrArgs)) {\n // Object-based overload: { startOptions?, ports?, cancellationOptions? }\n ports = portsOrArgs.ports;\n resolvedCancellationOptions = portsOrArgs.cancellationOptions;\n resolvedStartOptions = portsOrArgs.startOptions;\n }\n else {\n ports = portsOrArgs;\n resolvedCancellationOptions = cancellationOptions;\n resolvedStartOptions = startOptions;\n }\n // Determine which ports to check\n const portsToCheck = await this.getPortsToCheck(ports);\n // trigger all onStop that we didn't do yet\n await this.syncPendingStoppedEvents();\n // Prepare to start the container\n resolvedCancellationOptions ??= {};\n const containerGetTimeout = resolvedCancellationOptions.instanceGetTimeoutMS ?? TIMEOUT_TO_GET_CONTAINER_MS;\n const pollInterval = resolvedCancellationOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;\n const containerGetRetries = Math.ceil(containerGetTimeout / pollInterval);\n const waitOptions = {\n signal: resolvedCancellationOptions.abort,\n retries: containerGetRetries,\n waitInterval: pollInterval,\n portToCheck: portsToCheck[0],\n };\n // Start the container if it's not running\n const triesUsed = await this.startContainerIfNotRunning(waitOptions, resolvedStartOptions);\n // Check each port\n const totalPortReadyTries = Math.ceil((resolvedCancellationOptions.portReadyTimeoutMS ?? TIMEOUT_TO_GET_PORTS_MS) / pollInterval);\n let triesLeft = totalPortReadyTries - triesUsed;\n for (const port of portsToCheck) {\n triesLeft = await this.waitForPort({\n signal: resolvedCancellationOptions.abort,\n waitInterval: pollInterval,\n retries: triesLeft,\n portToCheck: port,\n });\n }\n this.setupMonitorCallbacks();\n await this.ctx.blockConcurrencyWhile(async () => {\n // All ports are ready\n await this.state.setHealthy();\n await this.onStart();\n });\n }\n /**\n *\n * Waits for a specified port to be ready\n *\n * Returns the number of tries used to get the port, or throws if it couldn't get the port within the specified retry limits.\n *\n * @param waitOptions -\n * - `portToCheck`: The port number to check\n * - `abort`: Optional AbortSignal to cancel waiting\n * - `retries`: Number of retries before giving up (default: TRIES_TO_GET_PORTS)\n * - `waitInterval`: Interval between retries in milliseconds (default: INSTANCE_POLL_INTERVAL_MS)\n */\n async waitForPort(waitOptions) {\n const port = waitOptions.portToCheck;\n const tcpPort = this.container.getTcpPort(port);\n const abortedSignal = new Promise(res => {\n waitOptions.signal?.addEventListener('abort', () => {\n res(true);\n });\n });\n const pollInterval = waitOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;\n const tries = waitOptions.retries ?? Math.ceil(TIMEOUT_TO_GET_PORTS_MS / pollInterval);\n // Try to connect to the port multiple times\n for (let i = 0; i < tries; i++) {\n try {\n const combinedSignal = addTimeoutSignal(waitOptions.signal, PING_TIMEOUT_MS);\n await tcpPort.fetch(`http://${this.pingEndpoint}`, { signal: combinedSignal });\n // Successfully connected to this port\n break;\n }\n catch (e) {\n // Check for specific error messages that indicate we should keep retrying\n const errorMessage = e instanceof Error ? e.message : String(e);\n // If not running, it means the container crashed\n if (!this.container.running) {\n try {\n await this.onError(new Error(`Container crashed while checking for ports, did you start the container and setup the entrypoint correctly?`));\n }\n catch {\n // Intentionally ignore errors from the user-supplied onError handler; the\n // original error (`e`) is rethrown below regardless.\n }\n throw e;\n }\n // If we're on the last attempt and the port is still not ready, fail\n if (i === tries - 1) {\n try {\n await this.onError(`Failed to verify port ${port} is available after ${(i + 1) * pollInterval}ms, last error: ${errorMessage}`);\n }\n catch {\n // Intentionally ignore errors from the user-supplied onError handler; the\n // original error (`e`) is rethrown below regardless.\n }\n throw e;\n }\n // Wait a bit before trying again\n await Promise.any([\n new Promise(resolve => setTimeout(resolve, pollInterval)),\n abortedSignal,\n ]);\n if (waitOptions.signal?.aborted) {\n throw new Error('Container request aborted.', { cause: e });\n }\n }\n }\n return tries;\n }\n // =======================\n // LIFECYCLE HOOKS\n // =======================\n /**\n * Send a signal to the container.\n * @param signal - The signal to send to the container (default: 15 for SIGTERM)\n */\n async stop(signal = 'SIGTERM') {\n if (this.container.running) {\n this.container.signal(typeof signal === 'string' ? signalToNumbers[signal] : signal);\n }\n await this.syncPendingStoppedEvents();\n }\n /**\n * Destroys the container with a SIGKILL. Triggers onStop.\n */\n async destroy() {\n await this.container.destroy();\n }\n /**\n * Lifecycle method called when container starts successfully\n * Override this method in subclasses to handle container start events\n */\n onStart() {\n // Default implementation does nothing\n }\n /**\n * Lifecycle method called when container shuts down\n * Override this method in subclasses to handle Container stopped events\n * @param params - Object containing exitCode and reason for the stop\n */\n onStop(params) {\n // Default implementation does nothing; subclasses should use `params`.\n void params;\n }\n /**\n * Lifecycle method called when the container is running, and the activity timeout\n * expiration (set by `sleepAfter`) has been reached.\n *\n * If you want to shutdown the container, you should call this.stop() here\n *\n * By default, this method calls `this.stop()`\n */\n async onActivityExpired() {\n console.log('Activity expired, signalling container to stop');\n if (!this.container.running) {\n return;\n }\n await this.stop();\n }\n /**\n * Error handler for container errors\n * Override this method in subclasses to handle container errors\n * @param error - The error that occurred\n * @returns Can return any value or throw the error\n */\n onError(error) {\n console.error('Container error:', error);\n throw error;\n }\n /**\n * Renew the container's activity timeout\n *\n * Call this method whenever there is activity on the container\n */\n renewActivityTimeout() {\n const timeoutInMs = parseTimeExpression(this.sleepAfter) * 1000;\n this.sleepAfterMs = Date.now() + timeoutInMs;\n }\n /**\n * Decrement the inflight request counter.\n * When the counter transitions to 0, renew the activity timeout so the\n * inactivity window starts fresh from the moment the last request completes.\n */\n decrementInflight() {\n this.inflightRequests = Math.max(0, this.inflightRequests - 1);\n if (this.inflightRequests === 0) {\n this.renewActivityTimeout();\n }\n }\n // ==================\n // SCHEDULING\n // ==================\n /**\n * Schedule a task to be executed in the future.\n *\n * We strongly recommend using this instead of the `alarm` handler.\n *\n * @template T Type of the payload data\n * @param when When to execute the task (Date object or number of seconds delay)\n * @param callback Name of the method to call\n * @param payload Data to pass to the callback\n * @returns Schedule object representing the scheduled task\n */\n async schedule(when, callback, payload) {\n const id = generateId(9);\n // Ensure the callback is a string (method name)\n if (typeof callback !== 'string') {\n throw new Error('Callback must be a string (method name)');\n }\n // Ensure the method exists\n if (typeof this[callback] !== 'function') {\n throw new Error(`this.${callback} is not a function`);\n }\n // Schedule based on the type of 'when' parameter\n if (when instanceof Date) {\n // Schedule for a specific time\n const timestamp = Math.floor(when.getTime() / 1000);\n this.sql `\n INSERT OR REPLACE INTO container_schedules (id, callback, payload, type, time)\n VALUES (${id}, ${callback}, ${JSON.stringify(payload)}, 'scheduled', ${timestamp})\n `;\n await this.scheduleNextAlarm();\n return {\n taskId: id,\n callback: callback,\n payload: payload,\n time: timestamp,\n type: 'scheduled',\n };\n }\n if (typeof when === 'number') {\n // Schedule for a delay in seconds\n const time = Math.floor(Date.now() / 1000 + when);\n this.sql `\n INSERT OR REPLACE INTO container_schedules (id, callback, payload, type, delayInSeconds, time)\n VALUES (${id}, ${callback}, ${JSON.stringify(payload)}, 'delayed', ${when}, ${time})\n `;\n await this.scheduleNextAlarm();\n return {\n taskId: id,\n callback: callback,\n payload: payload,\n delayInSeconds: when,\n time,\n type: 'delayed',\n };\n }\n throw new Error(\"Invalid schedule type. 'when' must be a Date or number of seconds\");\n }\n // ============\n // HTTP\n // ============\n /**\n * Send a request to the container (HTTP or WebSocket) using standard fetch API signature\n *\n * This method handles HTTP requests to the container.\n *\n * WebSocket requests done outside the DO won't work until https://github.com/cloudflare/workerd/issues/2319 is addressed.\n * Until then, please use `switchPort` + `fetch()`.\n *\n * Method supports multiple signatures to match standard fetch API:\n * - containerFetch(request: Request, port?: number)\n * - containerFetch(url: string | URL, init?: RequestInit, port?: number)\n *\n * Starts the container if not already running, and waits for the target port to be ready.\n *\n * @returns A Response from the container\n */\n async containerFetch(requestOrUrl, portOrInit, portParam) {\n // Parse the arguments based on their types to handle different method signatures\n const { request, port } = this.requestAndPortFromContainerFetchArgs(requestOrUrl, portOrInit, portParam);\n const state = await this.state.getState();\n if (!this.container.running || state.status !== 'healthy') {\n try {\n await this.startAndWaitForPorts(port, { abort: request.signal });\n }\n catch (e) {\n if (isNoInstanceError(e)) {\n return new Response('There is no Container instance available at this time.\\nThis is likely because you have reached your max concurrent instance count (set in wrangler config) or are you currently provisioning the Container.\\nIf you are deploying your Container for the first time, check your dashboard to see provisioning status, this may take a few minutes.', { status: 503 });\n }\n if (isRateLimitedError(e)) {\n return new Response(e instanceof Error ? e.message : String(e), { status: 429 });\n }\n return new Response(`Failed to start container: ${e instanceof Error ? e.message : String(e)}`, {\n status: 500,\n });\n }\n }\n const tcpPort = this.container.getTcpPort(port);\n // Create URL for the container request\n const containerUrl = request.url.replace('https:', 'http:');\n this.inflightRequests++;\n try {\n // Renew the activity timeout whenever a request is proxied\n this.renewActivityTimeout();\n const res = await tcpPort.fetch(containerUrl, request);\n if (res.webSocket !== null) {\n // WebSocket response: proxy by accepting both sides and forwarding messages\n const containerWs = res.webSocket;\n const [client, server] = Object.values(new WebSocketPair());\n // Guard to ensure we only decrement inflight once per WebSocket,\n // since both close and error events can fire.\n let settled = false;\n const settleInflight = () => {\n if (!settled) {\n settled = true;\n this.decrementInflight();\n }\n };\n // Accept both WebSocket ends\n containerWs.accept();\n server.accept();\n // Forward messages from client to container\n server.addEventListener('message', async (event) => {\n this.renewActivityTimeout();\n try {\n const data = event.data instanceof Blob ? await event.data.arrayBuffer() : event.data;\n containerWs.send(data);\n }\n catch {\n server.close(1011, 'Failed to forward message to container');\n }\n });\n // Forward messages from container to client\n containerWs.addEventListener('message', async (event) => {\n this.renewActivityTimeout();\n try {\n const data = event.data instanceof Blob ? await event.data.arrayBuffer() : event.data;\n server.send(data);\n }\n catch {\n containerWs.close(1011, 'Failed to forward message to client');\n }\n });\n // Forward close from client to container\n server.addEventListener('close', (event) => {\n settleInflight();\n // Codes 1005 (No Status Received) and 1006 (Abnormal Closure) are\n // reserved and cannot be sent in a close frame — fall back to 1000.\n const code = event.code === 1005 || event.code === 1006 ? 1000 : event.code;\n containerWs.close(code, event.reason);\n });\n // Forward close from container to client\n containerWs.addEventListener('close', (event) => {\n settleInflight();\n const code = event.code === 1005 || event.code === 1006 ? 1000 : event.code;\n server.close(code, event.reason);\n });\n // Forward errors\n server.addEventListener('error', () => {\n settleInflight();\n containerWs.close(1011, 'Client WebSocket error');\n });\n containerWs.addEventListener('error', () => {\n settleInflight();\n server.close(1011, 'Container WebSocket error');\n });\n return new Response(null, { status: res.status, webSocket: client, headers: res.headers });\n }\n if (res.body !== null) {\n const { readable, writable } = new IdentityTransformStream();\n res.body?.pipeTo(writable).finally(() => {\n this.decrementInflight();\n });\n return new Response(readable, res);\n }\n this.decrementInflight();\n return res;\n }\n catch (e) {\n this.decrementInflight();\n if (!(e instanceof Error)) {\n throw e;\n }\n // This error means that the container might've just restarted\n if (e.message.includes('Network connection lost.')) {\n return new Response('Container suddenly disconnected, try again', { status: 500 });\n }\n console.error(`Error proxying request to container ${this.ctx.id}:`, e);\n return new Response(`Error proxying request to container: ${e instanceof Error ? e.message : String(e)}`, { status: 500 });\n }\n }\n /**\n *\n * Fetch handler on the Container class.\n * By default this forwards all requests to the container by calling `containerFetch`.\n * Use `switchPort` to specify which port on the container to target, or this will use `defaultPort`.\n * @param request The request to handle\n */\n async fetch(request) {\n if (this.defaultPort === undefined && !request.headers.has('cf-container-target-port')) {\n throw new Error('No port configured for this container. Set the `defaultPort` in your Container subclass, or specify a port with `container.fetch(switchPort(request, port))`.');\n }\n let portValue = this.defaultPort;\n if (request.headers.has('cf-container-target-port')) {\n const portFromHeaders = parseInt(request.headers.get('cf-container-target-port') ?? '');\n if (isNaN(portFromHeaders)) {\n throw new Error('port value from switchPort is not a number');\n }\n else {\n portValue = portFromHeaders;\n }\n }\n // Forward all requests (HTTP and WebSocket) to the container\n return await this.containerFetch(request, portValue);\n }\n // ===============================\n // ===============================\n // PRIVATE METHODS & ATTRS\n // ===============================\n // ===============================\n // ==========================\n // PRIVATE ATTRIBUTES\n // ==========================\n container;\n // onStopCalled will be true when we are in the middle of an onStop call\n onStopCalled = false;\n state;\n monitor;\n // Coalesces concurrent calls to startContainerIfNotRunning so we never\n // call `this.container.start()` twice. Without this guard, two requests\n // racing the readiness path can both pass the `if (this.container.running)`\n // early-return (each yielding the DO input gate at storage awaits) and\n // both reach the synchronous workerd `start()`, causing the second to\n // throw \"start() cannot be called on a container that is already running.\"\n // See https://github.com/cloudflare/containers/issues/173.\n startInFlight;\n monitoredPromise;\n sleepAfterMs = 0;\n inflightRequests = 0;\n // Outbound interception runtime overrides (passed through ContainerProxy props)\n outboundByHostOverrides = {};\n outboundHandlerOverride;\n // Only set when the user calls setAllowedHosts/setDeniedHosts at runtime\n allowedHostsOverride;\n deniedHostsOverride;\n // The runtime does not expose a way to remove outbound interceptions yet, so\n // once we promote an instance to intercept-all we must keep using it.\n hasInterceptAllRegistration = false;\n // ==========================\n // GENERAL HELPERS\n // ==========================\n /**\n * Validates that a method name exists in the outboundHandlers registry for this class.\n * @throws Error if the method name is not found\n */\n validateOutboundHandlerMethodName(methodName) {\n const handlers = outboundHandlersRegistry.get(this.constructor.name);\n if (!handlers || !(methodName in handlers)) {\n throw new Error(`Outbound handler method '${methodName}' not found in outboundHandlers for ${this.constructor.name}`);\n }\n }\n get effectiveAllowedHosts() {\n return this.allowedHostsOverride ?? this.allowedHosts;\n }\n get effectiveDeniedHosts() {\n return this.deniedHostsOverride ?? this.deniedHosts;\n }\n getOutboundConfiguration() {\n return {\n outboundByHostOverrides: Object.keys(this.outboundByHostOverrides).length > 0\n ? this.outboundByHostOverrides\n : undefined,\n outboundHandlerOverride: this.outboundHandlerOverride,\n allowedHosts: this.effectiveAllowedHosts,\n deniedHosts: this.effectiveDeniedHosts,\n hasInterceptAllRegistration: this.hasInterceptAllRegistration || undefined,\n };\n }\n persistOutboundConfiguration(configuration) {\n this.ctx.storage.kv.put(OUTBOUND_CONFIGURATION_KEY, {\n ...configuration,\n allowedHosts: this.allowedHostsOverride,\n deniedHosts: this.deniedHostsOverride,\n });\n }\n restoreOutboundConfiguration() {\n const configuration = this.ctx.storage.kv.get(OUTBOUND_CONFIGURATION_KEY);\n if (!configuration) {\n return undefined;\n }\n this.outboundHandlerOverride = undefined;\n if (configuration.outboundHandlerOverride !== undefined) {\n try {\n this.validateOutboundHandlerMethodName(configuration.outboundHandlerOverride.method);\n this.outboundHandlerOverride = configuration.outboundHandlerOverride;\n }\n catch (error) {\n console.warn('Ignoring invalid persisted outbound handler override:', error);\n }\n }\n this.outboundByHostOverrides = {};\n for (const [hostname, override] of Object.entries(configuration.outboundByHostOverrides ?? {})) {\n try {\n this.validateOutboundHandlerMethodName(override.method);\n this.outboundByHostOverrides[hostname] = override;\n }\n catch (error) {\n console.warn(`Ignoring invalid persisted outbound override for ${hostname}:`, error);\n }\n }\n this.hasInterceptAllRegistration = configuration.hasInterceptAllRegistration === true;\n if (configuration.allowedHosts) {\n this.allowedHostsOverride = configuration.allowedHosts;\n }\n if (configuration.deniedHosts) {\n this.deniedHostsOverride = configuration.deniedHosts;\n }\n return this.getOutboundConfiguration();\n }\n /**\n * Returns true if a catch-all outbound HTTP interception is needed.\n * This is the case when a static `outbound` handler or a runtime\n * `outboundHandlerOverride` (catch-all) is configured.\n * When false, we only intercept specific hosts to avoid overhead.\n */\n needsCatchAllInterception() {\n const ctor = this.constructor;\n return ctor.outbound !== undefined || this.outboundHandlerOverride !== undefined;\n }\n hasMutableOutboundConfiguration() {\n return (Object.keys(this.outboundByHostOverrides).length > 0 ||\n this.allowedHostsOverride !== undefined ||\n this.deniedHostsOverride !== undefined);\n }\n shouldInterceptAllOutbound() {\n return (this.hasInterceptAllRegistration ||\n this.needsCatchAllInterception() ||\n this.effectiveAllowedHosts !== undefined ||\n this.effectiveDeniedHosts !== undefined ||\n this.hasMutableOutboundConfiguration());\n }\n getStaticOutboundByHostKeys() {\n const ctor = this.constructor;\n return ctor.outboundByHost ? Object.keys(ctor.outboundByHost) : [];\n }\n /**\n * Collects all hostnames that need per-host outbound interception.\n * This path is only used for the narrow optimized case where outbound\n * handling is static and host-specific.\n */\n getHostsToIntercept() {\n const hosts = new Set();\n const ctor = this.constructor;\n if (ctor.outboundByHost) {\n for (const hostname of Object.keys(ctor.outboundByHost)) {\n hosts.add(hostname);\n }\n }\n for (const hostname of Object.keys(this.outboundByHostOverrides)) {\n hosts.add(hostname);\n }\n return [...hosts];\n }\n async refreshOutboundInterception() {\n if (!this.usingInterception) {\n return;\n }\n this.applyOutboundInterceptionPromise = this.applyOutboundInterception();\n await this.applyOutboundInterceptionPromise;\n }\n /**\n * Applies (or re-applies) outbound HTTP interception with the current\n * default registries + runtime overrides passed through ContainerProxy props.\n *\n * Uses per-host interception only for static host-specific outbound handlers.\n * As soon as the config needs to evaluate all hosts (catch-all outbound,\n * allow/deny lists, or runtime-mutated outbound config), we promote the\n * container to intercept-all and keep it there until the instance restarts.\n *\n * When `interceptHttps` is enabled, also applies HTTPS interception:\n * - Intercept-all mode: `interceptOutboundHttps('*', ...)` for all HTTPS traffic\n * - Per-host mode: `interceptOutboundHttps(host, ...)` for each known host\n */\n async applyOutboundInterception() {\n const ctx = this.ctx;\n if (ctx.exports === undefined) {\n throw new Error('ctx.exports is undefined, please try to update your compatibility date or export ContainerProxy from the containers package in your worker entrypoint');\n }\n if (ctx.exports.ContainerProxy === undefined) {\n throw new Error('ctx.exports.ContainerProxy is undefined, export ContainerProxy from the containers package in your worker entrypoint');\n }\n const interceptAll = this.shouldInterceptAllOutbound();\n if (interceptAll) {\n this.hasInterceptAllRegistration = interceptAll;\n }\n const outboundConfiguration = this.getOutboundConfiguration();\n this.persistOutboundConfiguration(outboundConfiguration);\n const hosts = this.getHostsToIntercept();\n const props = {\n enableInternet: this.enableInternet,\n containerId: this.ctx.id.toString(),\n className: this.constructor.name,\n outboundByHostOverrides: outboundConfiguration.outboundByHostOverrides,\n outboundHandlerOverride: outboundConfiguration.outboundHandlerOverride,\n allowedHosts: outboundConfiguration.allowedHosts,\n deniedHosts: outboundConfiguration.deniedHosts,\n interceptAll,\n };\n const fetcher = ctx.exports.ContainerProxy({\n props,\n });\n if (interceptAll) {\n // If we previously installed static per-host interceptors, refresh them\n // with the current fetcher so they follow the latest config too.\n for (const host of this.getStaticOutboundByHostKeys()) {\n await this.container.interceptOutboundHttp(host, fetcher);\n if (this.interceptHttps) {\n await this.container.interceptOutboundHttps(host, fetcher);\n }\n }\n // If HTTPS interception is enabled, intercept all HTTPS traffic too\n if (this.interceptHttps) {\n await this.container.interceptOutboundHttps('*', fetcher);\n }\n // Intercept-all: intercept all outbound HTTP traffic\n await this.container.interceptAllOutboundHttp(fetcher);\n }\n else {\n // Per-host: only intercept traffic for known hosts\n for (const host of hosts) {\n await this.container.interceptOutboundHttp(host, fetcher);\n if (this.interceptHttps) {\n await this.container.interceptOutboundHttps(host, fetcher);\n }\n }\n }\n }\n /**\n * Execute SQL queries against the Container's database\n */\n sql(strings, ...values) {\n // Construct the SQL query with placeholders\n const query = strings.reduce((acc, str, i) => acc + str + (i < values.length ? '?' : ''), '');\n // Execute the SQL query with the provided values\n return [...this.ctx.storage.sql.exec(query, ...values)];\n }\n requestAndPortFromContainerFetchArgs(requestOrUrl, portOrInit, portParam) {\n let request;\n let port;\n // Determine if we're using the new signature or the old one\n if (requestOrUrl instanceof Request) {\n // Request-based: containerFetch(request, port?)\n request = requestOrUrl;\n port = typeof portOrInit === 'number' ? portOrInit : undefined;\n }\n else {\n // URL-based: containerFetch(url, init?, port?)\n const url = typeof requestOrUrl === 'string' ? requestOrUrl : requestOrUrl.toString();\n const init = typeof portOrInit === 'number' ? {} : portOrInit || {};\n port =\n typeof portOrInit === 'number'\n ? portOrInit\n : typeof portParam === 'number'\n ? portParam\n : undefined;\n // Create a Request object\n request = new Request(url, init);\n }\n port ??= this.defaultPort;\n // Require a port to be specified, either as a parameter or as a defaultPort property\n if (port === undefined) {\n throw new Error('No port specified for container fetch. Set defaultPort or specify a port parameter.');\n }\n return { request, port };\n }\n /**\n *\n * The method prioritizes port sources in this order:\n * 1. Ports specified directly in the method call\n * 2. `requiredPorts` class property (if set)\n * 3. `defaultPort` (if neither of the above is specified)\n * 4. Falls back to port 33 if none of the above are set\n */\n async getPortsToCheck(overridePorts) {\n if (overridePorts !== undefined) {\n // Use explicitly provided ports (single port or array)\n return Array.isArray(overridePorts) ? overridePorts : [overridePorts];\n }\n if (this.requiredPorts && this.requiredPorts.length > 0) {\n // Use requiredPorts class property if available\n return [...this.requiredPorts];\n }\n // Fall back to defaultPort if available\n return [this.defaultPort ?? FALLBACK_PORT_TO_CHECK];\n }\n // ===========================================\n // CONTAINER INTERACTION & MONITORING\n // ===========================================\n /**\n * Tries to start a container if it's not already running\n * Returns the number of tries used\n */\n async startContainerIfNotRunning(waitOptions, options) {\n // Coalesce concurrent starts: if another caller is already in the start path, join their\n // outcome instead of racing a second `this.container.start()`. Checked before the running\n // fast path so callers also join during the post-start()/pre-port-ready window.\n if (this.startInFlight) {\n return this.startInFlight;\n }\n // Fast path: container is already running and no start is in flight.\n if (this.container.running) {\n if (!this.monitor) {\n this.monitor = this.container.monitor();\n }\n return 0;\n }\n const startPromise = this.doStartContainer(waitOptions, options);\n this.startInFlight = startPromise;\n try {\n return await startPromise;\n }\n finally {\n // Clear the in-flight marker once this attempt resolves so future\n // start attempts (e.g. after the container has stopped) can proceed.\n // Use identity check in case a later attempt has already replaced it.\n if (this.startInFlight === startPromise) {\n this.startInFlight = undefined;\n }\n }\n }\n async doStartContainer(waitOptions, options) {\n const abortedSignal = new Promise(res => {\n waitOptions.signal?.addEventListener('abort', () => {\n res(true);\n });\n });\n const pollInterval = waitOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;\n const totalTries = waitOptions.retries ?? Math.ceil(TIMEOUT_TO_GET_CONTAINER_MS / pollInterval);\n for (let tries = 0; tries < totalTries; tries++) {\n // Use provided options or fall back to instance properties\n const envVars = options?.envVars ?? this.envVars;\n const entrypoint = options?.entrypoint ?? this.entrypoint;\n const enableInternet = options?.enableInternet ?? this.enableInternet;\n const labels = options?.labels ?? this.labels;\n // TODO: hopefully, enableInternet can be false in a future where we enable DNS\n // and TLS paths.\n // Only include properties that are defined\n const startConfig = {\n enableInternet,\n };\n if (envVars && Object.keys(envVars).length > 0)\n startConfig.env = envVars;\n if (entrypoint)\n startConfig.entrypoint = entrypoint;\n if (labels && Object.keys(labels).length > 0)\n startConfig.labels = labels;\n this.renewActivityTimeout();\n const handleError = async () => {\n const err = await this.monitor?.catch(err => err);\n if (typeof err === 'number') {\n const toThrow = new Error(`Container exited before we could determine the container health, exit code: ${err}`);\n await this.state.setStoppedWithCode(err);\n this.monitor = undefined;\n try {\n await this.onError(toThrow);\n }\n catch {\n // Intentionally ignore errors from the user-supplied onError handler; the\n // original error is rethrown below regardless.\n }\n throw toThrow;\n }\n else if (!isNoInstanceError(err)) {\n await this.state.setStopped();\n this.monitor = undefined;\n try {\n await this.onError(err);\n }\n catch {\n // Intentionally ignore errors from the user-supplied onError handler; the\n // original error is rethrown below regardless.\n }\n throw err;\n }\n };\n if (tries > 0 && !this.container.running) {\n await handleError();\n }\n await this.scheduleNextAlarm();\n if (!this.container.running) {\n await this.refreshOutboundInterception();\n this.container.start(startConfig);\n this.monitor = this.container.monitor();\n await this.state.setRunning();\n }\n else {\n await this.scheduleNextAlarm();\n }\n this.renewActivityTimeout();\n // TODO: Make this the port I'm trying to get!\n const port = this.container.getTcpPort(waitOptions.portToCheck);\n try {\n const combinedSignal = addTimeoutSignal(waitOptions.signal, PING_TIMEOUT_MS);\n await port.fetch('http://containerstarthealthcheck', { signal: combinedSignal });\n return tries;\n }\n catch (error) {\n if (isNotListeningError(error) && this.container.running) {\n return tries;\n }\n if (!this.container.running && isNotListeningError(error)) {\n await handleError();\n }\n await Promise.any([\n new Promise(res => setTimeout(res, waitOptions.waitInterval)),\n abortedSignal,\n ]);\n if (waitOptions.signal?.aborted) {\n throw new Error('Aborted waiting for container to start as we received a cancellation signal', { cause: error });\n }\n // TODO: Make this error specific to this, but then catch it above w something else\n if (totalTries === tries + 1) {\n if (error instanceof Error && error.message.includes('Network connection lost')) {\n // We have to abort here, the reasoning is that we might've found\n // ourselves in an internal error where the Worker is stuck with a failed connection to the\n // container services.\n //\n // Until we address this issue on the back-end CF side, we will need to abort the\n // durable object so it retries to reconnect from scratch.\n this.ctx.abort();\n }\n await handleError();\n await this.state.setStopped();\n this.monitor = undefined;\n throw new Error(NO_CONTAINER_INSTANCE_ERROR, { cause: error });\n }\n continue;\n }\n }\n throw new Error(`Container did not start after ${totalTries * pollInterval}ms`);\n }\n setupMonitorCallbacks() {\n const monitor = this.monitor;\n if (!monitor || this.monitoredPromise === monitor) {\n return;\n }\n this.monitoredPromise = monitor;\n monitor\n .then(async () => {\n await this.ctx.blockConcurrencyWhile(async () => {\n if (this.monitor === monitor) {\n await this.state.setStoppedWithCode(0);\n }\n });\n })\n .catch(async (error) => {\n if (this.monitor !== monitor) {\n return;\n }\n if (isNoInstanceError(error)) {\n await this.ctx.blockConcurrencyWhile(async () => {\n if (this.monitor === monitor) {\n await this.state.setStopped();\n }\n });\n return;\n }\n const exitCode = getExitCodeFromError(error);\n if (exitCode !== null) {\n await this.ctx.blockConcurrencyWhile(async () => {\n if (this.monitor === monitor) {\n await this.state.setStoppedWithCode(exitCode);\n }\n });\n return;\n }\n await this.ctx.blockConcurrencyWhile(async () => {\n if (this.monitor === monitor) {\n await this.state.setStopped();\n }\n });\n if (this.monitor !== monitor) {\n return;\n }\n try {\n // TODO: Be able to retrigger onError\n await this.onError(error);\n }\n catch {\n // Intentionally ignore errors from the user-supplied onError handler.\n }\n })\n .finally(() => {\n if (this.monitor !== monitor) {\n return;\n }\n this.monitoredPromise = undefined;\n this.monitor = undefined;\n if (this.timeout) {\n if (this.resolve)\n this.resolve();\n clearTimeout(this.timeout);\n }\n });\n }\n deleteSchedules(name) {\n this.sql `DELETE FROM container_schedules WHERE callback = ${name}`;\n }\n // ============================\n // ALARMS AND SCHEDULES\n // ============================\n /**\n * Method called when an alarm fires\n * Executes any scheduled tasks that are due\n */\n async alarm(alarmProps) {\n if (alarmProps !== undefined &&\n alarmProps.isRetry &&\n alarmProps.retryCount > MAX_ALARM_RETRIES) {\n const scheduleCount = Number(this.sql `SELECT COUNT(*) as count FROM container_schedules`[0]?.count) || 0;\n const hasScheduledTasks = scheduleCount > 0;\n if (hasScheduledTasks || this.container.running) {\n await this.scheduleNextAlarm();\n }\n return;\n }\n // do not remove this, container DOs ALWAYS need an alarm right now.\n // The only way for this DO to stop having alarms is:\n // 1. The container is not running anymore.\n // 2. Activity expired and it exits.\n const prevAlarm = Date.now();\n await this.ctx.storage.setAlarm(prevAlarm);\n await this.ctx.storage.sync();\n // Get all schedules that should be executed now\n const result = this.sql `\n SELECT * FROM container_schedules;\n `;\n let minTime = Date.now() + 3 * 60 * 1000;\n const now = Date.now() / 1000;\n // Process each due schedule\n for (const row of result) {\n // check if we need to run it\n if (row.time > now) {\n continue;\n }\n const callback = this[row.callback];\n if (!callback || typeof callback !== 'function') {\n console.error(`Callback ${row.callback} not found or is not a function`);\n continue;\n }\n // Create a schedule object for context\n const schedule = this.getSchedule(row.id);\n try {\n // Parse the payload and execute the callback\n const payload = row.payload ? JSON.parse(row.payload) : undefined;\n // Use context storage to execute the callback with proper 'this' binding\n await callback.call(this, payload, await schedule);\n }\n catch (e) {\n console.error(`Error executing scheduled callback \"${row.callback}\":`, e);\n }\n // Delete the schedule after execution (one-time schedules)\n this.sql `DELETE FROM container_schedules WHERE id = ${row.id}`;\n }\n const resultForMinTime = this.sql `\n SELECT * FROM container_schedules;\n `;\n const minTimeFromSchedules = Math.min(...resultForMinTime.map(r => r.time * 1000));\n // if not running and nothing to do, stop\n if (!this.container.running) {\n await this.syncPendingStoppedEvents();\n if (resultForMinTime.length == 0) {\n await this.ctx.storage.deleteAlarm();\n }\n else {\n await this.ctx.storage.setAlarm(minTimeFromSchedules);\n }\n return;\n }\n if (this.isActivityExpired()) {\n await this.onActivityExpired();\n // renewActivityTimeout makes sure we don't spam calls here\n this.renewActivityTimeout();\n return;\n }\n // Math.min(3m or maxTime, sleepTimeout)\n minTime = Math.min(minTimeFromSchedules, minTime, this.sleepAfterMs);\n const timeout = Math.max(0, minTime - Date.now());\n // await a sleep for maxTime to keep the DO alive for\n // at least this long\n await new Promise(resolve => {\n this.resolve = resolve;\n if (!this.container.running) {\n resolve();\n return;\n }\n this.timeout = setTimeout(() => {\n resolve();\n }, timeout);\n });\n await this.ctx.storage.setAlarm(Date.now());\n // we exit and we have another alarm,\n // the next alarm is the one that decides if it should stop the loop.\n }\n timeout;\n resolve;\n // synchronises container state with the container source of truth to process events\n async syncPendingStoppedEvents() {\n const state = await this.state.getState();\n if (!this.container.running && (state.status === 'healthy' || state.status === 'running')) {\n await this.callOnStop({ exitCode: 0, reason: 'exit' }, state);\n return;\n }\n if (!this.container.running && state.status === 'stopped_with_code') {\n await this.callOnStop({ exitCode: state.exitCode ?? 0, reason: 'exit' }, state);\n return;\n }\n }\n async callOnStop(onStopParams, stateBeforeOnStop) {\n if (this.onStopCalled) {\n return;\n }\n this.onStopCalled = true;\n const promise = this.onStop(onStopParams);\n if (promise instanceof Promise) {\n await promise.finally(() => {\n this.onStopCalled = false;\n });\n }\n else {\n this.onStopCalled = false;\n }\n await this.state.setStoppedIfUnchanged(stateBeforeOnStop);\n }\n /**\n * Schedule the next alarm based on upcoming tasks\n */\n async scheduleNextAlarm(ms = 1000) {\n const nextTime = ms + Date.now();\n // if not already set\n if (this.timeout) {\n if (this.resolve)\n this.resolve();\n clearTimeout(this.timeout);\n }\n await this.ctx.storage.setAlarm(nextTime);\n await this.ctx.storage.sync();\n }\n async listSchedules(name) {\n const result = this.sql `\n SELECT * FROM container_schedules WHERE callback = ${name} LIMIT 1\n `;\n if (!result || result.length === 0) {\n return [];\n }\n return result.map((this.toSchedule));\n }\n toSchedule(schedule) {\n let payload;\n try {\n payload = JSON.parse(schedule.payload);\n }\n catch (e) {\n console.error(`Error parsing payload for schedule ${schedule.id}:`, e);\n payload = undefined;\n }\n if (schedule.type === 'delayed') {\n return {\n taskId: schedule.id,\n callback: schedule.callback,\n payload,\n type: 'delayed',\n time: schedule.time,\n delayInSeconds: schedule.delayInSeconds,\n };\n }\n return {\n taskId: schedule.id,\n callback: schedule.callback,\n payload,\n type: 'scheduled',\n time: schedule.time,\n };\n }\n /**\n * Get a scheduled task by ID\n * @template T Type of the payload data\n * @param id ID of the scheduled task\n * @returns The Schedule object or undefined if not found\n */\n async getSchedule(id) {\n const result = this.sql `\n SELECT * FROM container_schedules WHERE id = ${id} LIMIT 1\n `;\n if (!result || result.length === 0) {\n return undefined;\n }\n const schedule = result[0];\n return this.toSchedule(schedule);\n }\n isActivityExpired() {\n if (this.inflightRequests > 0) {\n this.renewActivityTimeout();\n return false;\n }\n return this.sleepAfterMs <= Date.now();\n }\n}\n//# sourceMappingURL=container.js.map","import { Container } from '@cloudflare/containers';\n\nconst objectStoreHost = 'cache.r2';\n\nasync function handleObjectStore(\n request: Request,\n env: Pick<Env, 'CACHE_BUCKET'>,\n): Promise<Response> {\n const url = new URL(request.url);\n let key: string;\n try {\n key = decodeURIComponent(url.pathname.slice(1));\n } catch {\n return new Response('Invalid object key', { status: 400 });\n }\n if (!key) return new Response('Object key is required', { status: 400 });\n\n if (request.method === 'GET') {\n const object = await env.CACHE_BUCKET.get(key);\n if (!object) return new Response('Not found', { status: 404 });\n return new Response(object.body, {\n headers: object.httpMetadata?.contentType\n ? { 'content-type': object.httpMetadata.contentType }\n : undefined,\n });\n }\n\n if (request.method === 'PUT') {\n const object = await env.CACHE_BUCKET.put(\n key,\n request.body ?? new Uint8Array(),\n {\n onlyIf: { etagDoesNotMatch: '*' },\n httpMetadata: {\n contentType:\n request.headers.get('content-type') ?? 'application/octet-stream',\n },\n },\n );\n return new Response(null, { status: object ? 201 : 412 });\n }\n\n return new Response('Method not allowed', {\n status: 405,\n headers: { allow: 'GET, PUT' },\n });\n}\n\nexport class ProcessorContainer extends Container<Env> {\n defaultPort = 8080;\n sleepAfter = '2m';\n enableInternet = false;\n\n constructor(ctx: DurableObjectState<Env>, env: Env) {\n super(ctx, env);\n this.envVars = { OBJECT_STORE_ENDPOINT: `http://${objectStoreHost}` };\n }\n\n override fetch(request: Request): Promise<Response> {\n return this.containerFetch(request);\n }\n}\n\nProcessorContainer.outboundByHost = {\n [objectStoreHost]: handleObjectStore,\n};\n"],"names":["cache","encoder","decoder","encode","message","jwk.isJWK","jwk.isSecretJWK","jwk.isPrivateJWK","jwk.isPublicJWK","invalidKeyInput","key","verifySignature","numericDate","now","b64u","sig","jwk","cached","decodeBase64URL","base64url.encode","schema","NIX_BASE32","reference","base64url.decode","getPath","match","Hono","app","event","Node","_Node","HonoBase","state","failure","handleError","err"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,101,102]}