@tinycloud/share-sdk 0.2.0-beta.1 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../../share-envelope/src/cid.ts","../../share-envelope/src/bearer-delegation.ts","../../../node_modules/multiformats/src/bases/base64.ts","../../share-envelope/src/bytes.ts","../../share-envelope/src/didkey.ts","../../share-envelope/src/bearer.ts","../../share-envelope/src/schema.ts","../../share-envelope/src/aead.ts","../../share-envelope/src/jcs.ts","../../share-envelope/src/compact-ucan.ts","../../share-envelope/src/sign.ts","../../share-envelope/src/link.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../src/receive.ts","../src/publish.ts","../src/addressed.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../src/authorization.ts","../src/targets.ts","../src/addressed-publish.ts","../src/policy-authority.ts","../src/cache.ts","../src/delivery.ts","../src/history.ts","../src/notify.ts","../src/lifecycle.ts","../src/legacy.ts","../src/recipient.ts","../src/protocol.ts","../src/policy.ts"],"sourcesContent":["export { DEFAULT_MAX_CONTENT_BLOB_BYTES, DEFAULT_MAX_SEALED_BLOB_BYTES, SHARE_RESULT_VERSION, inspectShare, receiveShare, ShareReceiveError, toShareErrorInfo, verifyBearerEnvelope, type ShareReceiveAuthorizationRequired, type ShareErrorCode, type ShareErrorInfo, type ShareFetchOptions, type ShareInspection, type ShareMetadata, type ShareReceiveOutcome, type ShareReceiveResult, type VerifyBearerEnvelopeOptions, type SharePolicyAuthority, type SharePolicyEvidence } from \"./receive.js\";\nexport { DEFAULT_SHARE_LIFETIME_MS, SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, SHARE_SEALED_OVERHEAD, publishShare, redactPublishedShare, SharePublishError, type PublishedShare, type PublishedShareMetadata, type SharePublishErrorCode, type SharePublishOptions, type SharePublishTarget, type ShareUpload, type ShareUploadAuthorization, type ShareUploadInput, type ShareUploadResult } from \"./publish.js\";\nexport { parseAddressedEnvelope, type ParsedAddressedEnvelope } from \"./addressed.js\";\nexport { publishAddressedShare } from \"./addressed-publish.js\";\nexport type { AddressedPublishAuthority, AddressedSharePublishOptions } from \"./addressed-publish.js\";\nexport { createRegisteredPolicyAuthority } from \"./policy-authority.js\";\nexport type { RegisteredPolicyAuthorityOptions } from \"./policy-authority.js\";\nexport { checkBearerDelegation, resourceUriCovers, requiredResourceUri, type CheckBearerDelegationOptions, type DelegationCheckResult } from \"@tinycloud/share-envelope\";\nexport { canonicalize, fromBase64Url, toBase64Url } from \"@tinycloud/share-envelope\";\nexport { MemoryShareCache } from \"./cache.js\";\nexport type { ShareCache, ShareCacheEntry, ShareCacheKey, ShareCacheMetadata } from \"./cache.js\";\nexport { createDelegatedShareKey, restoreDelegatedShareKey, createPolicyEnforcementDelegation, canonicalOwnerSharePolicy, computeOwnerShareRegistrationCid, validateOwnerSharePolicyRegistration, validateOwnerSharePolicyRegistrationBytes, OWNER_SHARE_REGISTRATION_DOMAIN, MAX_CONTENT_BYTES } from \"./owner-policy.js\";\nexport type { OwnerDelegationReceipt, OwnerDelegationPermission, CreateOwnerDelegationParams, OwnerShareAction, OwnerShareDecryption, OwnerShareMatcher, OwnerSharePolicyV2, DelegatedShareKey, SignedDelegation, RegisterOwnerSharePolicyParams, OwnerSharePolicyRegistration, OwnerSharePolicyRegistrationReceipt } from \"./owner-policy.js\";\nexport { SHARE_DELIVERY_AUTHORIZATION_DOMAIN, validateShareDeliveryAuthorizationBytes, shareDeliveryTrustedKid } from \"./delivery.js\";\nexport type { ShareDeliveryAuthorizationRequest, ShareDeliveryAuthorization, ShareDeliveryAuthorizationReceipt, ValidateShareDeliveryAuthorizationExpected } from \"./delivery.js\";\nexport { MemorySenderShareRecordStorage, MemorySenderShareKeyStorage, SenderShareStore, historyRecordForPublishedShare } from \"./history.js\";\nexport { MemoryEncryptedShareHistoryStorage, EncryptedSenderShareHistory } from \"./history.js\";\nexport type { SenderShareRecord, SenderShareRecordStorage, SenderShareKeyStorage, SenderShareRevocationScope, EncryptedShareHistoryStorage } from \"./history.js\";\nexport { authorizeShare, authorizationMethodForTarget } from \"./authorization.js\";\nexport type { ShareAuthorizationMethod, ShareAuthorizationRequired, ShareAuthorizationDenied, ShareAuthorizationReady, ShareAuthorizationResult, ShareAuthorizationAdapter, ShareAuthorizedContent } from \"./authorization.js\";\nexport { notifyShare, recipientMatchesShareRecord, ShareNotifyError } from \"./notify.js\";\nexport type { ShareNotifyState, ShareNotifyResult, ShareNotifyInput, ShareDeliveryAdapter } from \"./notify.js\";\nexport { listShares, showShare, revokeShare } from \"./lifecycle.js\";\nexport type { ShareHistoryView, ShareRevocationResult, ShareRevocationAdapter } from \"./lifecycle.js\";\nexport { isLegacyShareLink, receiveLegacyShare, migrateShare } from \"./legacy.js\";\nexport type { LegacyShareReader, LegacyMigrationResult } from \"./legacy.js\";\nexport { normalizeShareTarget, publishTargetShare, targetAuthorizationMethod } from \"./targets.js\";\nexport type { ShareTarget, TargetPublishInput, TargetPublishOutcome, TargetPublishAdapter } from \"./targets.js\";\nexport { ShareRecipientClient, createAddressedAuthorization } from \"./recipient.js\";\nexport type { ShareNodeTrust, SharePolicyChallenge, SharePresentationMaterial, ShareRecipientClientOptions, SharePolicySession } from \"./recipient.js\";\nexport { SHARE_V2_PROTOCOL, createShareV2HolderBindingArtifact } from \"./protocol.js\";\nexport { publishPolicyShare, claimShare, resumeShareAuthorization } from \"./policy.js\";\nexport type { SharePolicyPublishAdapter } from \"./policy.js\";\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\nconst SHA256_CODE = 0x12;\n\n/**\n * Compute the CID of a single raw block, per sharing-viewer-and-registry.md §6.3:\n * CIDv1, codec raw (0x55), sha2-256, canonical lowercase base32 (\"bafkr…\").\n * Hashes the exact bytes given — no chunking, no UnixFS/dag-pb wrapping.\n */\nexport async function computeCid(bytes: Uint8Array): Promise<string> {\n // Normalize cross-realm typed arrays (notably jsdom's TextEncoder output)\n // before multiformats performs its instanceof check.\n const digest = createDigest(SHA256_CODE, sha256(new Uint8Array(bytes)));\n return CID.create(1, raw.code, digest).toString();\n}\n\n/**\n * Is `cidString` a canonical CIDv1/raw/sha2-256 lowercase-base32 CID *string*\n * (no bytes check — see `verifyCid` for that)? Used by the envelope schema's\n * `content.cid` pointer so a non-canonical or non-raw CID never gets signed.\n */\nexport function isCanonicalRawCid(cidString: string): boolean {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n return (\n cid.version === 1 &&\n cid.code === raw.code &&\n cid.multihash.code === SHA256_CODE &&\n cid.toString() === cidString\n );\n}\n\n/**\n * Verify that `cidString` is the canonical CIDv1/raw/sha2-256 base32 CID of `bytes`.\n * Returns false for any mismatch: wrong hash, wrong version/codec, or a\n * non-canonical string form of the right CID.\n */\nexport async function verifyCid(\n bytes: Uint8Array,\n cidString: string,\n): Promise<boolean> {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n if (cid.version !== 1 || cid.code !== raw.code) return false;\n // Require the canonical lowercase base32 string form.\n if (cid.toString() !== cidString) return false;\n return (await computeCid(bytes)) === cidString;\n}\n","/**\n * Bearer-slice delegation: ONE module for both sides so create and verify\n * cannot drift — the CLI mints with `mintBearerDelegation`, the viewer checks\n * with `checkBearerDelegation`, and both share `bearerResourceUri` and\n * `READ_ABILITIES` (this module began life as the stage-3 viewer's\n * delegation.ts and moved here when the stage-4 create flow needed the same\n * conventions from node).\n *\n * --- The check (viewer spec §1 \"Mode detection\") -------------------------\n *\n * The UI must derive its mode from EFFECTIVE CAPABILITIES, never from the\n * envelope's unsigned hints — and never from the mere fact that the envelope\n * decrypted. `checkBearerDelegation` decodes AND cryptographically verifies\n * the envelope's embedded delegation (a UCAN/JWT-shaped token: three\n * base64url segments, header.payload.signature, capabilities in the\n * payload's `att` array) and fails closed unless ALL of the following hold:\n *\n * 1. the token parses (three non-empty base64url segments; header and\n * payload are JSON objects; the signature segment decodes),\n * 2. the header's `alg` is EdDSA and the signature VERIFIES (strict\n * RFC 8032 ed25519) over the JWS signing input against the key the\n * token's own `iss` did:key names — the token is internally\n * consistent: `iss` really signed exactly these claims,\n * 3. the token carries a REQUIRED integer `exp` (UCAN epoch-seconds\n * convention) that has not passed, and — if present — an `nbf` that\n * has (expiry-less tokens are rejected outright),\n * 4. the delegatee (`aud`) DID EQUALS the did:key derived from the\n * envelope's embedded bearer sessionJwk — otherwise the key the link\n * carries cannot use this delegation at all,\n * 5. some capability grants the read ability (`BEARER_READ_ABILITY`,\n * the SAME single constant the mint emits) on a CANONICAL resource\n * URI that covers the envelope's signed target\n * (origin + spaceId + resource.path) exactly or via a `/*` prefix on\n * a segment boundary — see `resourceUriCovers`.\n *\n * WHAT THE CHECK DOES **NOT** DO — and must never be presented as doing:\n * verification of a delegation CHAIN against an out-of-band trust root\n * (proof/`prf` chains, issuer authority over the resource, revocation).\n * In the bearer slice the delegation is SELF-ISSUED — internal consistency\n * is everything there is to verify. In the policy / recipient-DID slices\n * this becomes full chain verification against the owner/issuer roots, and\n * the NODE repeats it at read time as the real enforcement boundary. This\n * check makes the viewer honest — a link whose delegation is unsigned,\n * expired, or cannot authorize its own embedded key is rejected before any\n * \"read access\" claim is shown — it does not make the link authorized.\n *\n * --- The mint (bearer slice ONLY) ----------------------------------------\n *\n * In the bearer slice there is no owner node: possession of the link IS the\n * authority, so `mintBearerDelegation` self-issues a minimal, internally\n * consistent token — a fresh ed25519 issuer signs (real EdDSA over the JWS\n * signing input) a delegation whose `aud` is the link's embedded session\n * did:key and whose single capability grants read over the bearer resource\n * URI. It satisfies exactly the structure `checkBearerDelegation` validates.\n * In the policy / recipient-DID slices this mint is REPLACED by a real\n * owner-signed delegation chain that the node verifies at read time; nothing\n * about the check side changes.\n */\nimport { ed25519 } from \"@noble/curves/ed25519\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport {\n didKeyFromEd25519PublicKey,\n ed25519PublicKeyFromDidKey,\n} from \"./didkey.js\";\nimport { getBearerSessionJwk } from \"./bearer.js\";\nimport {\n isCanonicalHttpsOrigin,\n isCanonicalResourcePath,\n type ShareEnvelope,\n} from \"./schema.js\";\n\n/** The ONE read ability of the bearer slice — minted AND checked (no drift). */\nexport const BEARER_READ_ABILITY = \"kv/get\";\n\n/**\n * Read abilities accepted for the single-file bearer viewer (spec §1 table).\n * Derived from — never listed separately from — the single mint constant, so\n * the set the checker accepts is PROVABLY identical to what the mint emits.\n */\nexport const READ_ABILITIES: ReadonlySet<string> = new Set([BEARER_READ_ABILITY]);\n\n/**\n * Strict ed25519 verification (RFC 8032, not ZIP-215) — same interop\n * rationale as sign.ts: agree byte-for-byte with a strict Rust verifier.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\nexport type DelegationCheckResult =\n | { ok: true; delegateeDid: string }\n | { ok: false; detail: string };\n\ninterface UcanCapability {\n readonly with: string;\n readonly can: string;\n}\n\n/** Strict base64url segment → JSON value, or null on ANY failure. */\nfunction decodeJsonSegment(segment: string): unknown {\n try {\n const bytes = fromBase64Url(segment);\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n return null;\n }\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseCapability(value: unknown): UcanCapability | null {\n if (!isJsonObject(value)) return null;\n const withUri = value[\"with\"];\n const can = value[\"can\"];\n if (typeof withUri !== \"string\" || withUri.length === 0) return null;\n if (typeof can !== \"string\" || can.length === 0) return null;\n return { with: withUri, can };\n}\n\n/**\n * Parse a resource URI into a canonical https origin plus CANONICAL path\n * segments (schema.ts grammar: no `.`/`..` segments, no `//`, no backslash,\n * no percent-encoded separator aliases, no control chars). Returns null —\n * fail closed — for anything else, so a URI carrying a traversal alias can\n * never even reach the comparison below.\n */\nfunction parseCanonicalResourceUri(\n uri: string,\n): { origin: string; segments: readonly string[] } | null {\n const match = /^(https:\\/\\/[^/\\\\]+)\\/(.*)$/.exec(uri);\n if (match === null) return null;\n const [, origin, path] = match as unknown as [string, string, string];\n if (!isCanonicalHttpsOrigin(origin)) return null;\n if (!isCanonicalResourcePath(path)) return null;\n return { origin, segments: path.split(\"/\") };\n}\n\n/**\n * Does a granted resource URI cover the target resource URI? BOTH sides must\n * parse under the canonical grammar (anything non-canonical — `..` segments,\n * `//`, encoded separators — is rejected outright, never normalized-and-\n * accepted). Coverage is exact segment-wise equality, or a `<prefix>/*`\n * grant whose segments are a strict prefix of the target's segments — i.e.\n * only on canonical segment boundaries: `foo/*` covers `foo/bar`, never\n * `foobar` and never `foo/../bar`. Nothing looser (no mid-segment globs,\n * no scheme-relative tricks) — fail closed.\n */\nexport function resourceUriCovers(granted: string, target: string): boolean {\n const targetParsed = parseCanonicalResourceUri(target);\n if (targetParsed === null) return false;\n const wildcard = granted.endsWith(\"/*\");\n const grantedParsed = parseCanonicalResourceUri(\n wildcard ? granted.slice(0, -2) : granted,\n );\n if (grantedParsed === null) return false;\n if (grantedParsed.origin !== targetParsed.origin) return false;\n const grantedSegments = grantedParsed.segments;\n const targetSegments = targetParsed.segments;\n const prefixMatches = grantedSegments.every(\n (segment, index) => segment === targetSegments[index],\n );\n if (!prefixMatches) return false;\n return wildcard\n ? targetSegments.length > grantedSegments.length\n : targetSegments.length === grantedSegments.length;\n}\n\n/**\n * The canonical bearer-slice resource URI: `<origin>/<spaceId>/<path>`.\n * THE single convention shared by mint (CLI) and check (viewer) — it must be\n * aligned with the node's authoritative resource grammar before real\n * node-gated reads ship in the policy/recipient-DID slices.\n */\nexport function bearerResourceUri(\n origin: string,\n spaceId: string,\n path: string,\n): string {\n return `${origin}/${spaceId}/${path}`;\n}\n\n/** The resource URI a delegation must cover for this envelope's signed target. */\nexport function requiredResourceUri(envelope: ShareEnvelope): string {\n const { origin, spaceId, resource } = envelope.target;\n return bearerResourceUri(origin, spaceId, resource.path);\n}\n\nexport interface CheckBearerDelegationOptions {\n /** Clock override (epoch MILLISECONDS) for exp/nbf; defaults to Date.now(). */\n now?: () => number;\n}\n\n/**\n * Bearer-binding check described in the module header: structural decode +\n * cryptographic verification of the token's own EdDSA signature, expiry, and\n * not-before. Returns a failure `detail` suitable for logging/diagnostics —\n * NOT for claiming more than internal consistency (see module header for\n * what chain verification is deferred to the node in later slices).\n */\nexport function checkBearerDelegation(\n envelope: ShareEnvelope,\n options: CheckBearerDelegationOptions = {},\n): DelegationCheckResult {\n // 1. Derive the did:key the embedded bearer key actually is. Only Ed25519\n // OKP session keys are supported in this slice (the did:key helper is\n // ed25519-only); anything else fails closed rather than guessing.\n let sessionDid: string;\n try {\n const jwk = getBearerSessionJwk(envelope);\n if (jwk.kty !== \"OKP\" || jwk.crv !== \"Ed25519\") {\n return {\n ok: false,\n detail: `unsupported bearer session key family ${jwk.kty}/${jwk.crv}; this build binds Ed25519 keys only`,\n };\n }\n const publicKey = fromBase64Url(jwk.x);\n const privateKey = fromBase64Url(jwk.d);\n if (publicKey.length !== 32 || privateKey.length !== 32) {\n return { ok: false, detail: \"bearer session key must contain 32-byte Ed25519 coordinates\" };\n }\n const derivedPublicKey = ed25519.getPublicKey(privateKey);\n if (!derivedPublicKey.every((byte, index) => byte === publicKey[index])) {\n return { ok: false, detail: \"bearer session private and public keys do not match\" };\n }\n sessionDid = didKeyFromEd25519PublicKey(publicKey);\n } catch (error) {\n return {\n ok: false,\n detail: `could not derive did:key from embedded session key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n\n // 2. Structural token decode: header.payload.signature.\n const segments = envelope.delegation.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) {\n return { ok: false, detail: \"delegation is not a three-segment JWT-shaped token\" };\n }\n const [headerSegment, payloadSegment, signatureSegment] = segments as [\n string,\n string,\n string,\n ];\n const header = decodeJsonSegment(headerSegment);\n if (!isJsonObject(header)) {\n return { ok: false, detail: \"delegation header is not a base64url JSON object\" };\n }\n const payload = decodeJsonSegment(payloadSegment);\n if (!isJsonObject(payload)) {\n return { ok: false, detail: \"delegation payload is not a base64url JSON object\" };\n }\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = fromBase64Url(signatureSegment);\n if (signatureBytes.length === 0) {\n return { ok: false, detail: \"delegation signature segment is empty\" };\n }\n } catch {\n return { ok: false, detail: \"delegation signature segment is not base64url\" };\n }\n\n // 3. Cryptographic verification: the token must be EdDSA-signed by the key\n // its own `iss` did:key names (the mint signs for real — an unsigned or\n // tampered token is rejected, never waved through on shape alone).\n if (header[\"alg\"] !== \"EdDSA\") {\n return {\n ok: false,\n detail: `delegation alg must be EdDSA, got ${JSON.stringify(header[\"alg\"])}`,\n };\n }\n const issuer = payload[\"iss\"];\n if (typeof issuer !== \"string\" || issuer.length === 0) {\n return { ok: false, detail: \"delegation payload has no issuer (iss) DID\" };\n }\n let issuerPublicKey: Uint8Array;\n try {\n issuerPublicKey = ed25519PublicKeyFromDidKey(issuer);\n } catch (error) {\n return {\n ok: false,\n detail: `delegation issuer is not an ed25519 did:key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n let signatureValid: boolean;\n try {\n signatureValid = ed25519.verify(\n signatureBytes,\n utf8Bytes(`${headerSegment}.${payloadSegment}`),\n issuerPublicKey,\n ED25519_VERIFY_OPTS,\n );\n } catch {\n signatureValid = false;\n }\n if (!signatureValid) {\n return { ok: false, detail: \"delegation signature does not verify against iss\" };\n }\n\n // 4. Time bounds, fail closed: `exp` is REQUIRED (UCAN epoch seconds — an\n // expiry-less delegation is rejected outright) and `nbf` is enforced\n // when present.\n const nowMs = options.now?.() ?? Date.now();\n const exp = payload[\"exp\"];\n if (typeof exp !== \"number\" || !Number.isSafeInteger(exp) || exp <= 0) {\n return { ok: false, detail: \"delegation has no valid expiry (exp) claim\" };\n }\n if (nowMs >= exp * 1000) {\n return { ok: false, detail: \"delegation is expired\" };\n }\n const nbf = payload[\"nbf\"];\n if (nbf !== undefined) {\n if (typeof nbf !== \"number\" || !Number.isSafeInteger(nbf)) {\n return { ok: false, detail: \"delegation nbf claim is not a valid time\" };\n }\n if (nowMs < nbf * 1000) {\n return { ok: false, detail: \"delegation is not yet valid (nbf)\" };\n }\n }\n\n // 5. Delegatee binding: aud must BE the embedded key's did:key.\n const audience = payload[\"aud\"];\n if (typeof audience !== \"string\" || audience.length === 0) {\n return { ok: false, detail: \"delegation payload has no audience (aud) DID\" };\n }\n if (audience !== sessionDid) {\n return {\n ok: false,\n detail: \"delegation audience is not the link's embedded session key\",\n };\n }\n\n // 6. Capability coverage: some `att` entry must grant read on a CANONICAL\n // resource URI covering the envelope's signed target.\n const att = payload[\"att\"];\n if (!Array.isArray(att) || att.length === 0) {\n return { ok: false, detail: \"delegation payload has no capabilities (att)\" };\n }\n const required = requiredResourceUri(envelope);\n const granted = att\n .map(parseCapability)\n .some(\n (capability) =>\n capability !== null &&\n READ_ABILITIES.has(capability.can) &&\n resourceUriCovers(capability.with, required),\n );\n if (!granted) {\n return {\n ok: false,\n detail: `delegation grants no read capability covering ${required}`,\n };\n }\n\n return { ok: true, delegateeDid: audience };\n}\n\nexport interface MintBearerDelegationOptions {\n /** ed25519 private key (32-byte seed) of the self-issued bearer issuer. */\n issuerPrivateKey: Uint8Array;\n /** The link's embedded session did:key — the delegatee (`aud`). */\n audienceDid: string;\n /** Resource the capability covers — build it with `bearerResourceUri`. */\n resourceUri: string;\n /** Delegation expiry, epoch SECONDS (UCAN `exp` convention). */\n expiresAtSeconds: number;\n}\n\n/**\n * Mint the bearer slice's self-issued delegation token (see module header:\n * a stand-in for a real owner-signed chain, replaced in later slices).\n * JWT-shaped: base64url(header) \".\" base64url(payload) \".\" base64url(sig),\n * signed EdDSA (ed25519) over the UTF-8 signing input `header.payload` by\n * the issuer key, so the token is internally consistent — `iss` really did\n * sign it — even though no node verifies the chain in this slice.\n */\nexport function mintBearerDelegation(options: MintBearerDelegationOptions): string {\n const { issuerPrivateKey, audienceDid, resourceUri, expiresAtSeconds } = options;\n if (!audienceDid.startsWith(\"did:\")) {\n throw new TypeError(`audienceDid must be a DID, got ${audienceDid}`);\n }\n if (resourceUri.length === 0) {\n throw new TypeError(\"resourceUri must be non-empty\");\n }\n if (!Number.isSafeInteger(expiresAtSeconds) || expiresAtSeconds <= 0) {\n throw new TypeError(\n `expiresAtSeconds must be a positive integer (epoch seconds), got ${expiresAtSeconds}`,\n );\n }\n const issuerDid = didKeyFromEd25519PublicKey(\n ed25519.getPublicKey(issuerPrivateKey),\n );\n const header = { alg: \"EdDSA\", typ: \"JWT\", ucv: \"0.9.1\" };\n const payload = {\n iss: issuerDid,\n aud: audienceDid,\n att: [{ with: resourceUri, can: BEARER_READ_ABILITY }],\n prf: [],\n exp: expiresAtSeconds,\n };\n const signingInput = `${toBase64Url(utf8Bytes(JSON.stringify(header)))}.${toBase64Url(\n utf8Bytes(JSON.stringify(payload)),\n )}`;\n const signature = ed25519.sign(utf8Bytes(signingInput), issuerPrivateKey);\n return `${signingInput}.${toBase64Url(signature)}`;\n}\n","import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","import { base64url as mfBase64url } from \"multiformats/bases/base64\";\n\n/** Encode bytes as unpadded base64url (RFC 4648 §5, no multibase prefix). */\nexport function toBase64Url(bytes: Uint8Array): string {\n return mfBase64url.baseEncode(bytes);\n}\n\n/**\n * STRICT decode of unpadded base64url into bytes. Throws on characters\n * outside the alphabet, impossible lengths, non-zero trailing bits, and any\n * padded or otherwise non-canonical form: the input must re-encode to itself\n * byte-for-byte. (multiformats' baseDecode alone tolerates trailing `=`.)\n */\nexport function fromBase64Url(text: string): Uint8Array {\n const bytes = mfBase64url.baseDecode(text);\n if (mfBase64url.baseEncode(bytes) !== text) {\n // Deliberately does not echo the input — it may be key material.\n throw new TypeError(\"non-canonical base64url input\");\n }\n return bytes;\n}\n\nexport function utf8Bytes(text: string): Uint8Array {\n return new TextEncoder().encode(text);\n}\n","import { base58btc } from \"multiformats/bases/base58\";\n\n/** Multicodec varint prefix for an ed25519 public key (0xed → varint ed 01). */\nconst ED25519_MULTICODEC_PREFIX = Uint8Array.of(0xed, 0x01);\nconst PUBLIC_KEY_LENGTH = 32;\n\n/** Encode a 32-byte ed25519 public key as a did:key (multibase base58btc). */\nexport function didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== PUBLIC_KEY_LENGTH) {\n throw new TypeError(\n `ed25519 public key must be ${PUBLIC_KEY_LENGTH} bytes, got ${publicKey.length}`,\n );\n }\n const prefixed = new Uint8Array(ED25519_MULTICODEC_PREFIX.length + publicKey.length);\n prefixed.set(ED25519_MULTICODEC_PREFIX, 0);\n prefixed.set(publicKey, ED25519_MULTICODEC_PREFIX.length);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\n/** Decode a did:key back to the raw 32-byte ed25519 public key. Throws on any other DID. */\nexport function ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new TypeError(`not a did:key: ${did}`);\n }\n const multibase = did.slice(\"did:key:\".length);\n const prefixed = base58btc.decode(multibase);\n if (\n prefixed.length !== ED25519_MULTICODEC_PREFIX.length + PUBLIC_KEY_LENGTH ||\n prefixed[0] !== ED25519_MULTICODEC_PREFIX[0] ||\n prefixed[1] !== ED25519_MULTICODEC_PREFIX[1]\n ) {\n throw new TypeError(\"did:key does not encode an ed25519 public key\");\n }\n return prefixed.slice(ED25519_MULTICODEC_PREFIX.length);\n}\n","import type { SessionJwk, ShareEnvelope } from \"./schema.js\";\n\n/**\n * Extract the embedded session JWK from a bearer-target envelope\n * (blueprint §2.1 \"Embedded key\" row). Node invocation with this key is\n * stage 3/4 — this is only the envelope side.\n *\n * Throws if the envelope's authorizationTarget is not `bearerKey`; callers\n * must switch on the discriminated union first (viewer spec §1).\n */\nexport function getBearerSessionJwk(envelope: ShareEnvelope): SessionJwk {\n const target = envelope.authorizationTarget;\n if (target.kind !== \"bearerKey\") {\n throw new TypeError(\n `envelope authorizationTarget is \"${target.kind}\", not \"bearerKey\"`,\n );\n }\n return target.sessionJwk;\n}\n","import { z } from \"zod\";\n\nimport { fromBase64Url } from \"./bytes.js\";\nimport { isCanonicalRawCid } from \"./cid.js\";\n\n/**\n * ShareEnvelope schema per sharing-ux-blueprint.md §2.1, with the signed\n * typed resource selector and optional display.mode presentation hint from\n * sharing-viewer-and-registry.md §1. All objects are strict — unknown fields\n * are rejected everywhere.\n */\n\n/** Strictly-decodable unpadded base64url: alphabet, length, AND zero trailing bits. */\nfunction decodeBase64UrlOrNull(value: string): Uint8Array | null {\n try {\n return fromBase64Url(value);\n } catch {\n return null;\n }\n}\n\nconst base64UrlString = () =>\n z.string().refine((value) => decodeBase64UrlOrNull(value) !== null, {\n message: \"expected strictly-decodable unpadded base64url\",\n });\n\n/**\n * A canonical HTTPS web origin: `https://host[:non-default-port]` and nothing\n * else. No path, query, fragment, userinfo, trailing slash, default-port\n * alias (`:443`), or non-lowercase host — the string must round-trip exactly\n * through URL origin serialization. Rejects every non-https scheme\n * (http:, ftp:, file:, javascript:, …). This must byte-match what a Rust\n * verifier would accept, so it is exact-string, not \"URL-ish\".\n */\nexport function isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\" && url.origin === value;\n}\n\n/**\n * Session JWK carried by bearer-target envelopes. Strict discriminated union\n * over the asymmetric private-key families a session key can be (OKP / EC).\n * The private component (`d`) is REQUIRED — a bearer envelope without it is\n * useless — and cross-family members (`y` on OKP, `k` anywhere) are rejected,\n * as are unknown JWK members, rather than silently signed over.\n */\nconst sessionJwkCommonFields = {\n alg: z.string().min(1).optional(),\n use: z.string().min(1).optional(),\n key_ops: z.array(z.string().min(1)).optional(),\n kid: z.string().min(1).optional(),\n ext: z.boolean().optional(),\n};\n\nconst okpPrivateJwkSchema = z\n .object({\n kty: z.literal(\"OKP\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nconst ecPrivateJwkSchema = z\n .object({\n kty: z.literal(\"EC\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n y: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nexport const sessionJwkSchema = z.discriminatedUnion(\"kty\", [\n okpPrivateJwkSchema,\n ecPrivateJwkSchema,\n]);\n\nexport const policyTargetSchema = z\n .object({\n kind: z.literal(\"policy\"),\n policyCid: z.string().min(1),\n /** Canonical policy bytes, base64url-encoded (bytes are not JSON). */\n policyBytes: base64UrlString(),\n })\n .strict();\n\nexport const bearerKeyTargetSchema = z\n .object({\n kind: z.literal(\"bearerKey\"),\n sessionJwk: sessionJwkSchema,\n })\n .strict();\n\nexport const recipientDidTargetSchema = z\n .object({\n kind: z.literal(\"recipientDid\"),\n did: z.string().regex(/^did:[a-z0-9]+:.+$/, \"expected a DID\"),\n })\n .strict();\n\n/** Signed discriminated union — the target kind itself is signature-covered. */\nexport const authorizationTargetSchema = z.discriminatedUnion(\"kind\", [\n policyTargetSchema,\n bearerKeyTargetSchema,\n recipientDidTargetSchema,\n]);\n\n/**\n * THE canonical resource-path grammar — the ONE grammar shared by schema\n * validation here and capability coverage in bearer-delegation.ts (which\n * previously compared raw concatenated strings, so `shares/s/../victim.md`\n * aliased into a `shares/s/*` grant). A canonical path is \"/\"-joined\n * segments where every segment is non-empty (no `//`, no leading/trailing\n * slash) and none is `.` or `..`, and the whole string contains no\n * backslash, no ASCII control characters, and no percent-encoded\n * separator/dot aliases (%2f, %5c, %2e in any casing). Fail closed: anything\n * outside this grammar is rejected before any comparison happens.\n */\nexport function isCanonicalResourcePath(value: string): boolean {\n if (value.length === 0) return false;\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return false;\n if (/%2f|%5c|%2e/i.test(value)) return false;\n return value\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\n/** ONE canonical path segment: canonical-path rules, and no separator at all. */\nexport function isCanonicalPathSegment(value: string): boolean {\n return isCanonicalResourcePath(value) && !value.includes(\"/\");\n}\n\nexport const resourceSelectorSchema = z\n .object({\n kind: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n path: z.string().min(1),\n })\n .strict()\n .superRefine((selector, ctx) => {\n // Prefix selectors may carry ONE trailing \"/\" (folder convention);\n // the body must be canonical either way.\n const body =\n selector.kind === \"prefix\" && selector.path.endsWith(\"/\")\n ? selector.path.slice(0, -1)\n : selector.path;\n if (!isCanonicalResourcePath(body)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"path\"],\n message:\n \"expected a canonical resource path (non-empty segments, no . or .. segments, no //, no backslash, no %2f/%5c/%2e, no control chars)\",\n });\n }\n });\n\nexport const targetSchema = z\n .object({\n origin: z.string().refine(isCanonicalHttpsOrigin, {\n message: \"expected a canonical https origin (https://host[:port], nothing else)\",\n }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, {\n message:\n \"expected a single canonical path segment (spaceId joins the resource URI; separators/traversal would alias grants)\",\n }),\n resource: resourceSelectorSchema,\n })\n .strict();\n\nexport const displaySchema = z\n .object({\n senderName: z.string().optional(),\n filename: z.string().optional(),\n recipientHint: z.string().optional(),\n /**\n * Presentation preference only (viewer spec §1): may narrow, never widen;\n * capabilities always win.\n */\n mode: z.union([z.literal(\"document\"), z.literal(\"source\"), z.literal(\"folder\")]).optional(),\n })\n .strict();\n\n/**\n * BEARER-SLICE content pointer (stage 4). The shared file's bytes are sealed\n * as their OWN AEAD blob (same `seal` machinery as the envelope) and put in\n * the registry; this field points at it:\n *\n * - `cid` — CIDv1/raw/sha2-256 of the sealed content blob. The viewer\n * re-verifies fetched bytes against it (trustless), so a lying registry\n * cannot substitute content.\n * - `key` — the content blob's own 32-byte AES-256-GCM key, base64url. It\n * rides INSIDE the sealed envelope (confidential to link holders) and is\n * signature-covered like every other field (a tampered pointer fails the\n * envelope signature before any fetch). Carrying a distinct key — rather\n * than reusing the fragment key — preserves the viewer's key-hygiene\n * contract: the fragment key is still dead (zeroed) the moment the\n * envelope is decrypted.\n *\n * This is a bearer-slice mechanism: possession of the link IS the read\n * authority, so the content is fetched straight from the registry. In the\n * policy / recipient-DID slices this field is absent and the viewer instead\n * performs a capability-gated read from the node named in `target` — the\n * node, not the registry, is the enforcement boundary there.\n */\nexport const contentPointerSchema = z\n .object({\n cid: z.string().refine(isCanonicalRawCid, {\n message: \"expected a canonical CIDv1 raw sha2-256 base32 CID\",\n }),\n key: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 32, {\n message: \"expected base64url decoding to exactly 32 bytes\",\n }),\n })\n .strict();\n\nexport const signatureSchema = z\n .object({\n /** did:key of the sender's ed25519 signing key. */\n signerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/, \"expected a did:key\"),\n algorithm: z.literal(\"Ed25519\"),\n /** base64url-encoded ed25519 signature over the JCS bytes of all other fields. */\n value: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 64, {\n message: \"expected base64url decoding to exactly 64 bytes\",\n }),\n })\n .strict();\n\n/** Envelope body — every signature-covered field. */\nexport const unsignedShareEnvelopeSchema = z\n .object({\n version: z.literal(1),\n shareId: z.string().min(1),\n /** Full signed delegation chain, opaque serialized form. */\n delegation: z.string().min(1),\n authorizationTarget: authorizationTargetSchema,\n target: targetSchema,\n display: displaySchema,\n /** ISO 8601 UTC datetime. Advisory here; enforcement is the delegation's. */\n expiry: z.string().datetime(),\n /** Bearer-slice sealed-content pointer (see contentPointerSchema). */\n content: contentPointerSchema.optional(),\n })\n .strict();\n\nexport const shareEnvelopeSchema = unsignedShareEnvelopeSchema\n .extend({ signature: signatureSchema })\n .strict();\n\nexport type SessionJwk = z.infer<typeof sessionJwkSchema>;\nexport type ContentPointer = z.infer<typeof contentPointerSchema>;\nexport type PolicyTarget = z.infer<typeof policyTargetSchema>;\nexport type BearerKeyTarget = z.infer<typeof bearerKeyTargetSchema>;\nexport type RecipientDidTarget = z.infer<typeof recipientDidTargetSchema>;\nexport type AuthorizationTarget = z.infer<typeof authorizationTargetSchema>;\nexport type ResourceSelector = z.infer<typeof resourceSelectorSchema>;\nexport type ShareTarget = z.infer<typeof targetSchema>;\nexport type ShareDisplay = z.infer<typeof displaySchema>;\nexport type EnvelopeSignature = z.infer<typeof signatureSchema>;\nexport type UnsignedShareEnvelope = z.infer<typeof unsignedShareEnvelopeSchema>;\nexport type ShareEnvelope = z.infer<typeof shareEnvelopeSchema>;\n\n/** Version 2 additions shared by the browser composer and recipient SDK. */\nexport const recipientMatcherSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"exactEmail\"), value: z.string().min(3).regex(/^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"emailDomain\"), value: z.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"recipientDid\"), value: z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict(),\n z.object({ kind: z.literal(\"policyDigest\"), value: z.string().regex(/^[A-Za-z0-9_-]{43}$/) }).strict(),\n z.object({ kind: z.literal(\"bearer\") }).strict(),\n]);\n\nexport const shareActionSchema = z.union([z.literal(\"read\"), z.literal(\"list\"), z.literal(\"edit\")]);\n\n/** The source selector is shared byte-for-byte by the envelope, policy, and\n * native Node request. It deliberately describes a named operation, never\n * executable SQL or a browser-controlled URL. */\nconst kvContentSourceSchema = z.object({\n kind: z.literal(\"kv\"),\n space: z.string().min(1),\n path: z.string().min(1),\n action: z.literal(\"tinycloud.kv/get\"),\n}).strict();\nconst sqlContentSourceSchema = z.object({\n kind: z.literal(\"sql\"),\n space: z.string().min(1),\n database: z.string().min(1),\n path: z.string().min(1),\n statement: z.string().min(1),\n arguments: z.record(z.string(), z.number().int()),\n argumentsDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n action: z.literal(\"tinycloud.sql/read\"),\n}).strict();\nexport const contentSourceSchema = z.discriminatedUnion(\"kind\", [kvContentSourceSchema, sqlContentSourceSchema]);\n\nexport const v2TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n\nconst shareDecryptionSchema = z.object({\n networkId: z.string().min(1),\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\n\nconst ownerAuthoritySchema = z.object({\n registrationCid: z.string().min(1),\n shareCid: z.string().min(1),\n envelopeCid: z.string().min(1),\n enforcementDelegation: z.record(z.string(), z.unknown()),\n outerEnvelope: z.record(z.string(), z.unknown()),\n /** Node-signed registration evidence; required by trusted policy adapters. */\n registrationReceipt: z.object({\n registration: z.record(z.string(), z.unknown()),\n proof: z.record(z.string(), z.unknown()),\n }).strict().optional(),\n}).strict();\n\nexport const contentMetadataSchema = z.object({\n mediaType: z.string().min(1).max(128).optional(),\n byteLength: z.number().int().nonnegative().max(100 * 1024 * 1024).optional(),\n filename: z.string().min(1).max(255).optional(),\n encoding: z.literal(\"utf-8\").optional(),\n /** Encrypted presentation discriminator. The fixed entry point is index.html. */\n artifact: z.literal(\"html\").optional(),\n}).strict();\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: z.string().email().optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v2TargetSchema,\n delegationCid: z.string().min(1),\n authorityMaterialHandle: z.string().min(1),\n authorityMaterialDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n decryption: shareDecryptionSchema.optional(),\n contentSource: contentSourceSchema,\n contentSourceDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n authorizationTarget: authorizationTargetSchema,\n display: displaySchema,\n expiry: z.string().datetime(),\n encrypted: z.boolean(),\n content: contentPointerSchema.optional(),\n metadata: contentMetadataSchema,\n ownerAuthority: ownerAuthoritySchema.optional(),\n}).strict();\n\nfunction validateV2Invariants(value: z.infer<typeof unsignedShareEnvelopeV2BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique\" });\n if (actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be canonically ordered\" });\n if (!value.encrypted && value.recipientMatcher.kind !== \"policyDigest\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"recipientMatcher\"], message: \"safe plaintext must carry only a matcher digest\" });\n if (!value.encrypted && value.authorizationTarget.kind !== \"policy\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encrypted\"], message: \"unencrypted content requires a policy target\" });\n if (!value.encrypted && value.content !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"content\"], message: \"policy-only plaintext cannot carry content\" });\n if (value.encrypted && (value.metadata.mediaType === undefined || value.metadata.filename === undefined || value.metadata.byteLength === undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"encrypted shares must describe their content\" });\n if (!value.encrypted && Object.keys(value.metadata).length !== 0) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"policy-only plaintext cannot describe content\" });\n if (!value.encrypted && value.metadata.encoding !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"encoding\"], message: \"policy-only plaintext cannot carry content encoding\" });\n if (value.metadata.artifact === \"html\" && (!value.encrypted || value.resource.kind !== \"prefix\" || !value.actions.includes(\"read\") || !value.actions.includes(\"list\"))) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"artifact\"], message: \"html artifacts require an encrypted readable prefix\" });\n if (!value.encrypted && (value.display.senderName !== undefined || value.display.filename !== undefined || value.display.recipientHint !== undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"display\"], message: \"policy-only plaintext cannot carry display metadata\" });\n if (!value.encrypted && value.deliveryEmail !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"policy-only plaintext cannot carry delivery metadata\" });\n if (value.recipientMatcher.kind === \"exactEmail\" && value.deliveryEmail !== undefined && value.deliveryEmail !== value.recipientMatcher.value) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must match the exact matcher\" });\n if (value.recipientMatcher.kind === \"emailDomain\" && value.deliveryEmail !== undefined && value.deliveryEmail.toLowerCase().endsWith(`@${value.recipientMatcher.value}`) === false) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must belong to the matcher domain\" });\n if (value.contentSource.kind === \"kv\" && value.contentSource.action !== \"tinycloud.kv/get\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n if (value.contentSource.kind === \"sql\" && value.contentSource.action !== \"tinycloud.sql/read\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n}\n\nexport const unsignedShareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.superRefine(validateV2Invariants);\n\n// Extend the unsigned object instead of intersecting two strict objects. A\n// strict intersection rejects every valid signed envelope because each side\n// treats the other side's fields as unknown.\nexport const shareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV2Invariants);\nexport type RecipientMatcher = z.infer<typeof recipientMatcherSchema>;\nexport type ShareAction = z.infer<typeof shareActionSchema>;\nexport type ContentSource = z.infer<typeof contentSourceSchema>;\nexport type ContentMetadata = z.infer<typeof contentMetadataSchema>;\nexport type UnsignedShareEnvelopeV2 = z.infer<typeof unsignedShareEnvelopeV2Schema>;\nexport type ShareEnvelopeV2 = z.infer<typeof shareEnvelopeV2Schema>;\n\n/**\n * TC-405 addressed-share envelope. This is intentionally a separate\n * contract from v2: a v3 reader must never reinterpret a v2 policy/session\n * artifact as an ordinary delegation claim.\n */\nconst unifiedResourceSchema = z.string().refine((value) => {\n const match = /^tinycloud:\\/\\/([^/]+)\\/kv\\/(.+)$/.exec(value);\n if (match === null || /[:?#%]/.test(match[1]!)) return false;\n const path = match[2]!;\n return !path.startsWith(\"/\") && !path.endsWith(\"/\") && !path.includes(\"//\") && path.split(\"/\").every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}, { message: \"expected canonical TinyCloud KV resource\" });\nconst unifiedEncryptionNetworkSchema = z.string().refine((value) => {\n if (!value.startsWith(\"urn:tinycloud:encryption:\")) return false;\n const rest = value.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const owner = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n return owner.startsWith(\"did:\") && owner.length > 4 && network.length > 0 && !/[:/%?#\\s]/.test(network);\n}, { message: \"expected canonical TinyCloud encryption network\" });\nconst unifiedKvCapabilitySchema = z.object({\n kind: z.literal(\"kv\"),\n resource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n actions: z.array(z.union([\n z.literal(\"tinycloud.kv/get\"),\n z.literal(\"tinycloud.kv/list\"),\n z.literal(\"tinycloud.kv/metadata\"),\n z.literal(\"tinycloud.kv/put\"),\n ])).min(1),\n}).strict();\nconst unifiedEncryptionCapabilitySchema = z.object({\n kind: z.literal(\"encryption\"),\n resource: unifiedEncryptionNetworkSchema,\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\nconst unifiedCapabilitySchema = z.union([unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema]);\nconst unifiedContentSourceSchema = z.object({\n shareId: z.string().min(1),\n kvResource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n encryptedSymmetricKeyDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n keyVersion: z.number().int().positive(),\n mode: z.union([z.literal(\"mutable\"), z.literal(\"immutable\")]),\n initialCiphertextDigestHex: z.string().regex(/^[0-9a-f]{64}$/).optional(),\n}).strict();\nconst unifiedPolicySchema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v1\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n signature: z.object({ suite: z.string().min(1), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nconst unifiedRootSchema = z.object({\n cid: z.string().min(1),\n authorization: z.string().regex(/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/),\n role: z.union([z.literal(\"policy-authority\"), z.literal(\"policy-enforcement\")]),\n}).strict();\nconst attestedEnforcerBindingV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/attested-enforcer/v2\"),\n enforcerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/),\n nodeAudience: z.string().min(1),\n attestationBindingDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n issuedAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }),\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: base64UrlString() }).strict(),\n}).strict();\nconst v3TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: z.string().email().optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v3TargetSchema,\n policy: unifiedPolicySchema,\n policyCid: z.string().min(1),\n policyRoot: unifiedRootSchema,\n enforcementRoot: unifiedRootSchema,\n attestedEnforcerBinding: attestedEnforcerBindingV2Schema,\n contentSource: unifiedContentSourceSchema,\n contentSourceDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n expiry: z.string().datetime({ offset: true }),\n display: displaySchema,\n encrypted: z.literal(true),\n metadata: contentMetadataSchema,\n}).strict();\n\nfunction validateV3Invariants(value: z.infer<typeof unsignedShareEnvelopeV3BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length || actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique and canonically ordered\" });\n }\n if (value.policyRoot.role !== \"policy-authority\" || value.enforcementRoot.role !== \"policy-enforcement\") {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyRoot\", \"role\"], message: \"root roles are fixed\" });\n }\n if (value.policyCid.length === 0 || value.policyCid === value.policyRoot.cid || value.policyCid === value.enforcementRoot.cid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyCid\"], message: \"policy CID must be distinct from both roots\" });\n }\n if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encryptionNetwork\"], message: \"encryption network is not bound to the source\" });\n }\n if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.target.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"attestedEnforcerBinding\"], message: \"enforcer binding does not cover the target and share lifetime\" });\n }\n if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"content source is not bound to policy\" });\n }\n if (value.policy.signature.suite !== \"Ed25519\" || value.policy.signature.signerDid !== value.policy.ownerDid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"signature\"], message: \"policy must be signed by its owner\" });\n }\n const kvCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"kv\");\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === value.encryptionNetwork && capability.action === \"tinycloud.encryption/decrypt\");\n if (value.policy.capabilityCeiling.length !== 2 || kvCapabilities.length !== 1 || decryptCapabilities.length !== 1 || kvCapabilities[0]?.resource !== value.contentSource.kvResource || kvCapabilities[0]?.selector !== value.contentSource.selector) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"capabilityCeiling\"], message: \"policy ceiling must contain exact decrypt network\" });\n }\n}\n\nexport const unsignedShareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.superRefine(validateV3Invariants);\nexport const shareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV3Invariants);\nexport type UnifiedPolicyCapability = z.infer<typeof unifiedCapabilitySchema>;\nexport type UnifiedContentSource = z.infer<typeof unifiedContentSourceSchema>;\nexport type UnifiedPolicy = z.infer<typeof unifiedPolicySchema>;\nexport type UnifiedRoot = z.infer<typeof unifiedRootSchema>;\nexport type UnsignedShareEnvelopeV3 = z.infer<typeof unsignedShareEnvelopeV3Schema>;\nexport type ShareEnvelopeV3 = z.infer<typeof shareEnvelopeV3Schema>;\n","import { utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\n\n/**\n * Fixed protocol-label AAD, authenticated on every envelope\n * (blueprint §2.1: \"versioned protocol label\").\n */\nexport const ENVELOPE_AAD_LABEL = \"tinycloud-share-envelope-v1\";\n\n/**\n * Version byte of the sealed-blob wire format (see `seal`). Bump only with a\n * new format; verifiers must reject unknown versions.\n */\nexport const SEALED_BLOB_VERSION = 0x01;\n\nconst AAD = utf8Bytes(ENVELOPE_AAD_LABEL);\nconst KEY_LENGTH = 32;\nconst NONCE_LENGTH = 12; // 96-bit nonce, the AES-GCM standard size.\nconst TAG_LENGTH = 16; // AES-GCM authentication tag appended to the ciphertext.\nconst HEADER_LENGTH = 1; // the version byte\n\nexport interface EncryptedEnvelope {\n nonce: Uint8Array;\n ciphertext: Uint8Array;\n}\n\nfunction assertKey(key32: Uint8Array): void {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n}\n\nasync function importAesKey(\n key32: Uint8Array,\n usage: KeyUsage,\n): Promise<CryptoKey> {\n assertKey(key32);\n return globalThis.crypto.subtle.importKey(\n \"raw\",\n key32 as BufferSource,\n \"AES-GCM\",\n false,\n [usage],\n );\n}\n\n/** Generate a fresh random 32-byte AES-256-GCM key. */\nexport function generateKey(): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(KEY_LENGTH));\n}\n\nexport interface SealedEnvelope {\n /** The canonical stored block: `version(0x01) || nonce(12) || ciphertext+tag`. */\n blob: Uint8Array;\n /** CIDv1/raw/sha2-256 of `blob` — the CID that goes in the share link. */\n cid: string;\n}\n\n/**\n * Seal envelope plaintext into the ONE canonical stored-block format:\n *\n * blob = version byte (0x01) || nonce (12 bytes) || AES-256-GCM ciphertext\n * (which includes the trailing 16-byte auth tag)\n *\n * The returned CID is computed over the WHOLE blob, so a recipient holding\n * only the link (CID + key) can fetch the blob, verify the CID, and recover\n * the nonce from the blob itself. This is the only format the public\n * packaging path (and the share link) addresses; `encryptEnvelope` /\n * `decryptEnvelope` are the low-level pieces.\n */\nexport async function seal(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<SealedEnvelope> {\n const { nonce, ciphertext } = await encryptEnvelope(plaintextBytes, key32);\n const blob = new Uint8Array(HEADER_LENGTH + nonce.length + ciphertext.length);\n blob[0] = SEALED_BLOB_VERSION;\n blob.set(nonce, HEADER_LENGTH);\n blob.set(ciphertext, HEADER_LENGTH + nonce.length);\n return { blob, cid: await computeCid(blob) };\n}\n\n/**\n * Open a sealed blob produced by `seal`: check the version byte, split\n * `nonce || ciphertext`, and decrypt. Throws on unknown version, truncated\n * blobs, and any AEAD failure (wrong key / tampering).\n */\nexport async function open(\n blob: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (blob.length < HEADER_LENGTH + NONCE_LENGTH + TAG_LENGTH) {\n throw new TypeError(`sealed blob too short: ${blob.length} bytes`);\n }\n if (blob[0] !== SEALED_BLOB_VERSION) {\n throw new TypeError(`unknown sealed blob version: ${blob[0]}`);\n }\n const nonce = blob.subarray(HEADER_LENGTH, HEADER_LENGTH + NONCE_LENGTH);\n const ciphertext = blob.subarray(HEADER_LENGTH + NONCE_LENGTH);\n return decryptEnvelope(nonce, ciphertext, key32);\n}\n\n/**\n * Encrypt envelope plaintext with AES-256-GCM under a fresh random 96-bit\n * nonce, authenticating the fixed protocol-label AAD.\n *\n * Low-level: the nonce is NOT carried by the share link. Public packaging\n * must go through `seal`, which binds `nonce || ciphertext` into one\n * CID-addressed blob.\n */\nexport async function encryptEnvelope(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<EncryptedEnvelope> {\n const key = await importAesKey(key32, \"encrypt\");\n const nonce = globalThis.crypto.getRandomValues(new Uint8Array(NONCE_LENGTH));\n const ciphertext = new Uint8Array(\n await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n plaintextBytes as BufferSource,\n ),\n );\n return { nonce, ciphertext };\n}\n\n/**\n * Decrypt an AES-256-GCM envelope. Throws (Web Crypto `OperationError`) if the\n * key is wrong, the AAD does not match, or the ciphertext was tampered with.\n */\nexport async function decryptEnvelope(\n nonce: Uint8Array,\n ciphertext: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (nonce.length !== NONCE_LENGTH) {\n throw new TypeError(`nonce must be ${NONCE_LENGTH} bytes, got ${nonce.length}`);\n }\n const key = await importAesKey(key32, \"decrypt\");\n return new Uint8Array(\n await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n ciphertext as BufferSource,\n ),\n );\n}\n","/**\n * RFC 8785 (JCS) canonical JSON serialization — in-house implementation.\n *\n * Why no dependency: on any ECMA-262 engine, `JSON.stringify` of a primitive\n * already matches JCS exactly — RFC 8785 §3.2.2.3 defines number\n * serialization as ECMAScript's Number::toString, and §3.2.2.2 defines string\n * escaping as ECMAScript's JSON quoting (short escapes \\b \\t \\n \\f \\r \\\" \\\\,\n * lowercase \\u00xx for remaining control chars). So canonicalization reduces\n * to recursive property sorting by UTF-16 code units (the default JS string\n * comparison) plus rejecting values JSON cannot represent.\n */\n\nfunction isPlainRecord(value: object): value is Record<string, unknown> {\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * RFC 8785 §3.2.2.2 requires REJECTING strings that are not valid Unicode —\n * i.e. unpaired UTF-16 surrogates. `JSON.stringify` happily emits `\"\\ud800\"`\n * for a lone surrogate, but a conforming implementation in a language with\n * enforced-valid strings (Rust) errors instead, so we must too.\n */\nfunction assertNoLoneSurrogates(text: string): void {\n for (let i = 0; i < text.length; i++) {\n const unit = text.charCodeAt(i);\n if (unit >= 0xdc00 && unit <= 0xdfff) {\n throw new TypeError(\n `cannot canonicalize string with unpaired low surrogate at index ${i}`,\n );\n }\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = text.charCodeAt(i + 1); // NaN when past the end\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(\n `cannot canonicalize string with unpaired high surrogate at index ${i}`,\n );\n }\n i++; // well-formed pair — skip the low surrogate\n }\n }\n}\n\nfunction serializeString(text: string): string {\n assertNoLoneSurrogates(text);\n return JSON.stringify(text);\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return \"null\";\n switch (typeof value) {\n case \"boolean\":\n return JSON.stringify(value);\n case \"string\":\n return serializeString(value);\n case \"number\":\n if (!Number.isFinite(value)) {\n throw new TypeError(`cannot canonicalize non-finite number: ${value}`);\n }\n return JSON.stringify(value);\n case \"object\":\n break;\n default:\n throw new TypeError(`cannot canonicalize value of type ${typeof value}`);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n if (!isPlainRecord(value)) {\n throw new TypeError(\"cannot canonicalize non-plain object\");\n }\n const keys = Object.keys(value).sort(); // UTF-16 code unit order (RFC 8785 §3.2.3)\n const members: string[] = [];\n for (const key of keys) {\n const member = value[key];\n if (member === undefined) continue; // JSON.stringify drops undefined properties\n members.push(`${serializeString(key)}:${serialize(member)}`);\n }\n return `{${members.join(\",\")}}`;\n}\n\n/** Serialize a JSON-representable value to its RFC 8785 canonical form. */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { canonicalize } from \"./jcs.js\";\nimport { ed25519PublicKeyFromDidKey } from \"./didkey.js\";\n\nexport interface CompactUcanAuthorization {\n readonly authorization: string;\n readonly cid: string;\n readonly header: Readonly<Record<string, unknown>>;\n readonly payload: {\n readonly att: Readonly<Record<string, unknown>>;\n readonly aud: string;\n readonly exp: number;\n readonly fct: readonly [Readonly<Record<string, unknown>>];\n readonly iss: string;\n readonly nbf: number;\n readonly nnc: string;\n readonly prf: readonly string[];\n };\n}\n\nexport interface SignCompactUcanInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, unknown>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\n/** Produce the exact JCS compact-UCAN representation accepted by the Node. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanInput,\n): Promise<CompactUcanAuthorization> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60) {\n throw new TypeError(\"compact invocation lifetime must be between one and 60 seconds\");\n }\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n const header = {\n alg: \"EdDSA\",\n jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) },\n typ: \"JWT\",\n ucv: \"0.10.0\",\n };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\")\n ? input.issuerDid\n : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(canonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = await input.sign(signingInput);\n if (signature.length !== 64) throw new TypeError(\"compact Authorization signature must be Ed25519\");\n return verifyCompactUcanAuthorization(\n `${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`,\n );\n}\n\nexport function verifyCompactUcanAuthorization(\n authorization: string,\n expectedCid?: string,\n): CompactUcanAuthorization {\n if (/\\s/.test(authorization)) throw new TypeError(\"compact Authorization contains whitespace\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new TypeError(\"compact Authorization must contain three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = decodeBase64Url(headerSegment);\n const payloadBytes = decodeBase64Url(payloadSegment);\n const signature = decodeBase64Url(signatureSegment);\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const header = JSON.parse(decoder.decode(headerBytes)) as Record<string, unknown>;\n const payload = JSON.parse(decoder.decode(payloadBytes)) as Record<string, unknown>;\n if (canonicalize(header) !== decoder.decode(headerBytes) || canonicalize(payload) !== decoder.decode(payloadBytes)) throw new TypeError(\"compact Authorization JSON is not canonical\");\n assertExactKeys(header, [\"alg\", \"jwk\", \"typ\", \"ucv\"], \"protected header\");\n const jwk = object(header.jwk, \"protected JWK\");\n assertExactKeys(jwk, [\"alg\", \"crv\", \"kty\", \"x\"], \"protected JWK\");\n if (header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || jwk.alg !== \"EdDSA\" || jwk.crv !== \"Ed25519\" || jwk.kty !== \"OKP\" || typeof jwk.x !== \"string\") throw new TypeError(\"compact Authorization header is invalid\");\n assertExactKeys(payload, [\"att\", \"aud\", \"exp\", \"fct\", \"iss\", \"nbf\", \"nnc\", \"prf\"], \"UCAN payload\");\n if (typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || typeof payload.nnc !== \"string\" || !Number.isInteger(payload.nbf) || !Number.isInteger(payload.exp) || (payload.nbf as number) >= (payload.exp as number) || !Array.isArray(payload.prf) || payload.prf.some((proof) => typeof proof !== \"string\") || !Array.isArray(payload.fct) || payload.fct.length !== 1) throw new TypeError(\"compact Authorization payload is invalid\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n if (!equal(publicKey, decodeBase64Url(jwk.x))) throw new TypeError(\"compact Authorization JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new TypeError(\"compact Authorization signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid) throw new TypeError(\"compact Authorization CID mismatch\");\n return { authorization, cid, header, payload: payload as CompactUcanAuthorization[\"payload\"] };\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(`${label} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, keys: readonly string[], label: string): void {\n if (Object.keys(value).length !== keys.length || Object.keys(value).some((key) => !keys.includes(key))) throw new TypeError(`${label} has unknown or missing fields`);\n}\n\nfunction decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value) || value.length % 4 === 1) throw new TypeError(\"compact Authorization segment is not base64url\");\n const bytes = typeof Buffer !== \"undefined\"\n ? new Uint8Array(Buffer.from(value, \"base64url\"))\n : Uint8Array.from(atob(value.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(value.length / 4) * 4, \"=\")), (character) => character.charCodeAt(0));\n const encoded = typeof Buffer !== \"undefined\"\n ? Buffer.from(bytes).toString(\"base64url\")\n : btoa(String.fromCharCode(...bytes)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n if (encoded !== value) throw new TypeError(\"compact Authorization segment is not canonical\");\n return bytes;\n}\n\nfunction encodeBase64Url(value: Uint8Array): string {\n return typeof Buffer !== \"undefined\"\n ? Buffer.from(value).toString(\"base64url\")\n : btoa(String.fromCharCode(...value)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n\nfunction equal(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { didKeyFromEd25519PublicKey, ed25519PublicKeyFromDidKey } from \"./didkey.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { verifyCompactUcanAuthorization } from \"./compact-ucan.js\";\nimport {\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n unsignedShareEnvelopeSchema,\n unsignedShareEnvelopeV2Schema,\n unsignedShareEnvelopeV3Schema,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n type UnsignedShareEnvelope,\n type UnsignedShareEnvelopeV2,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"./schema.js\";\n\n/**\n * Ed25519 verification mode: strict RFC 8032, NOT ZIP-215. `zip215: false`\n * makes @noble/curves reject non-canonical point encodings (y >= p) that the\n * looser ZIP-215 rules accept, so this JS verifier and a strict Rust verifier\n * (e.g. ed25519-dalek `verify_strict`) agree on exactly the same signature\n * set. Chosen deliberately: interop determinism over batch-verification\n * compatibility.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\n/** The one canonical envelope signing domain shared by runtime and vectors. */\nexport const ENVELOPE_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v1\\0\";\nexport const ENVELOPE_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\nexport const ENVELOPE_V3_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\n/** Domain-separated JCS bytes of every envelope field except `signature`. */\nfunction signingBytes(unsigned: UnsignedShareEnvelope): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV2(unsigned: UnsignedShareEnvelopeV2): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V2_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV3(unsigned: UnsignedShareEnvelopeV3): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V3_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\n/**\n * Sign an envelope body with an ed25519 private key (32-byte seed). The\n * signature covers the domain-separated RFC 8785 canonical JSON of all other fields —\n * including `authorizationTarget.kind` and `target.origin` (blueprint §2.1).\n * Throws if the body does not validate against the strict schema.\n */\nexport function signEnvelope(\n envelopeWithoutSig: UnsignedShareEnvelope,\n ed25519PrivKey: Uint8Array,\n): ShareEnvelope {\n const unsigned = unsignedShareEnvelopeSchema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n const signature = ed25519.sign(signingBytes(unsigned), ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(signature),\n },\n };\n}\n\nexport function signEnvelopeV2(envelopeWithoutSig: UnsignedShareEnvelopeV2, ed25519PrivKey: Uint8Array): ShareEnvelopeV2 {\n const unsigned = unsignedShareEnvelopeV2Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(signingBytesV2(unsigned), ed25519PrivKey)),\n },\n };\n}\n\n/** Sign a strict v3 envelope. v3 is intentionally not accepted by v1/v2 helpers. */\nexport function signEnvelopeV3(envelopeWithoutSig: UnsignedShareEnvelopeV3, ed25519PrivKey: Uint8Array): ShareEnvelopeV3 {\n const unsigned = unsignedShareEnvelopeV3Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(sha256(signingBytesV3(unsigned)), ed25519PrivKey)),\n },\n };\n}\n\nexport interface VerifyEnvelopeOptions {\n /**\n * The did:key the caller ALREADY trusts to be the sender. REQUIRED:\n * `signature.signerDid` is self-asserted by whoever built the envelope, so\n * verifying against it alone proves nothing — an attacker signs their own\n * \"Adam\" envelope with their own key and it self-verifies. In later stages\n * the expected signer is the delegation chain's issuer DID; for now the\n * caller supplies it out-of-band.\n */\n expectedSignerDid: string;\n}\n\n/**\n * Signature-only check: strict-parse, recompute the JCS signing bytes, and\n * check the ed25519 signature against the key in `signature.signerDid`.\n *\n * WARNING: this only proves the envelope is internally consistent with its\n * OWN self-asserted signer. It binds no trust — use `verifyEnvelope` with an\n * `expectedSignerDid` unless you are doing the binding yourself.\n */\nexport function verifyEnvelopeSignatureOnly(envelope: ShareEnvelope): boolean {\n const parsed = shareEnvelopeSchema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n return ed25519.verify(\n fromBase64Url(signature.value),\n signingBytes(unsigned),\n publicKey,\n ED25519_VERIFY_OPTS,\n );\n}\n\n/**\n * Verify a signed envelope against an EXPECTED signer:\n *\n * 1. strict schema parse (throws on malformed input),\n * 2. `signature.signerDid` must equal `options.expectedSignerDid`,\n * 3. the ed25519 signature must verify (strict RFC 8032) over the domain-separated JCS bytes,\n * 4. for `authorizationTarget.kind === \"policy\"`, the decoded `policyBytes`\n * must hash to `policyCid` (CIDv1/raw/sha2-256).\n *\n * Returns false for any trust or integrity failure.\n */\nexport async function verifyEnvelope(\n envelope: ShareEnvelope,\n options: VerifyEnvelopeOptions,\n): Promise<boolean> {\n const parsed = shareEnvelopeSchema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid) return false;\n if (!verifyEnvelopeSignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") {\n const policyBytes = fromBase64Url(parsed.authorizationTarget.policyBytes);\n if ((await computeCid(policyBytes)) !== parsed.authorizationTarget.policyCid) {\n return false;\n }\n }\n return true;\n}\n\nexport function verifyEnvelopeV2SignatureOnly(envelope: ShareEnvelopeV2): boolean {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), signingBytesV2(unsigned), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV2(envelope: ShareEnvelopeV2, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || !verifyEnvelopeV2SignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") return (await computeCid(fromBase64Url(parsed.authorizationTarget.policyBytes))) === parsed.authorizationTarget.policyCid;\n return true;\n}\n\nexport function verifyEnvelopeV3SignatureOnly(envelope: ShareEnvelopeV3): boolean {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), sha256(signingBytesV3(unsigned)), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV3(envelope: ShareEnvelopeV3, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policyDigest = sha256(new TextEncoder().encode(`${POLICY_V1_SIGNATURE_DOMAIN}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = sha256(new TextEncoder().encode(`${POLICY_V1_SIGNATURE_DOMAIN}${canonicalize(unsignedPolicy)}`));\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(\"tinycloud://\".length).split(\"/\")[0], path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const resource = /^tinycloud:\\/\\/([^/]+)\\/kv\\/(.+)$/.exec(parsed.contentSource.kvResource);\n if (parsed.shareId !== parsed.contentSource.shareId || resource === null || resource[1] !== parsed.target.spaceId || resource[2] !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.enforcerDid !== parsed.target.nodeAudience || binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.enforcerDid || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > Date.now() || Date.parse(binding.expiresAt) <= Date.now() || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.enforcerDid), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== parsed.target.nodeAudience || enforcementFact.enforcerDid !== parsed.target.nodeAudience || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== parsed.target.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\n\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { isCanonicalHttpsOrigin } from \"./schema.js\";\n\n/**\n * Share link codec (blueprint §2.1):\n *\n * ${origin}/s/${cid}#k=${base64url(key32)}\n *\n * The CID addresses the SEALED BLOB (`seal` in aead.ts: version byte ||\n * nonce || ciphertext+tag), so the link plus the fetched blob is everything a\n * recipient needs — the nonce rides inside the CID-verified blob.\n *\n * The AEAD key rides in the URL FRAGMENT only. Fragments are never sent in\n * HTTP requests, so the registry, CDNs, and any server that sees the URL\n * without its fragment learn nothing that decrypts the envelope. The fragment\n * must never leave the client (no logging, no postMessage to other origins).\n */\n\nconst KEY_LENGTH = 32;\n\nexport interface ShareUrlParts {\n origin: string;\n /** CIDv1/raw/sha2-256 of the sealed blob. */\n ciphertextCid: string;\n key32: Uint8Array;\n}\n\nexport interface ParseShareUrlOptions {\n /** If given, the URL's origin must equal this canonical https origin exactly. */\n expectedOrigin?: string;\n}\n\nexport interface InlineShareUrlParts {\n readonly origin: string;\n /** The complete sealed envelope blob. It is kept in the fragment only. */\n readonly ciphertext: Uint8Array;\n /** The AES key that opens the sealed envelope. Omit only for policy-safe public envelopes. */\n readonly key32?: Uint8Array;\n}\n\nexport interface ParsedInlineShareUrl {\n readonly kind: \"inline\";\n readonly ciphertextCid: string;\n readonly ciphertext: Uint8Array;\n readonly key32?: Uint8Array;\n}\n\nconst INLINE_PREFIX = \"#v=2&p=\";\nconst MAX_INLINE_BYTES = 256 * 1024;\n\nfunction assertCanonicalCid(cidString: string): void {\n const cid = CID.parse(cidString); // throws on garbage\n if (\n cid.version !== 1 ||\n cid.code !== raw.code ||\n cid.multihash.code !== 0x12 || // sha2-256 (0x12) only, at the link layer too\n cid.toString() !== cidString\n ) {\n throw new TypeError(`not a canonical CIDv1 raw sha2-256 base32 CID: ${cidString}`);\n }\n}\n\nexport function encodeShareUrl({ origin, ciphertextCid, key32 }: ShareUrlParts): string {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n assertCanonicalCid(ciphertextCid);\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new TypeError(`origin must be a canonical https origin, got ${origin}`);\n }\n return `${origin}/s/${ciphertextCid}#k=${toBase64Url(key32)}`;\n}\n\nexport function parseShareUrl(\n url: string,\n options: ParseShareUrlOptions = {},\n): { ciphertextCid: string; key32: Uint8Array } {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") {\n throw new TypeError(`share URL must be https, got ${parsed.protocol}`);\n }\n if (parsed.username !== \"\" || parsed.password !== \"\") {\n throw new TypeError(\"share URL must not carry userinfo\");\n }\n // The key must never appear anywhere a server would see it — reject ANY\n // query string rather than guessing at intent.\n if (parsed.search !== \"\") {\n throw new TypeError(\"share URL must not have a query string\");\n }\n if (options.expectedOrigin !== undefined) {\n if (!isCanonicalHttpsOrigin(options.expectedOrigin)) {\n throw new TypeError(\n `expectedOrigin must be a canonical https origin, got ${options.expectedOrigin}`,\n );\n }\n if (parsed.origin !== options.expectedOrigin) {\n throw new TypeError(\n `share URL origin ${parsed.origin} does not match expected ${options.expectedOrigin}`,\n );\n }\n }\n const match = /^\\/s\\/([a-z2-7]+)$/.exec(parsed.pathname);\n if (!match || match[1] === undefined) {\n throw new TypeError(`not a share URL path: ${parsed.pathname}`);\n }\n const ciphertextCid = match[1];\n assertCanonicalCid(ciphertextCid);\n if (!parsed.hash.startsWith(\"#k=\")) {\n throw new TypeError(\"share URL is missing the #k= key fragment\");\n }\n // fromBase64Url is a STRICT decode: it throws on padding, characters\n // outside the base64url alphabet, impossible lengths, and non-zero\n // trailing bits — not just an alphabet regex.\n const key32 = fromBase64Url(parsed.hash.slice(\"#k=\".length));\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`fragment key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n return { ciphertextCid, key32 };\n}\n\n/**\n * Encode an explicit v2 inline fallback. The entire payload is in the\n * fragment, so it is never sent in an HTTP request. The payload is canonical\n * JSON and contains only sealed bytes, their CID, and (when encrypted) the\n * envelope key; callers must never place recipient or holder material here.\n */\nexport async function encodeInlineShareUrl(parts: InlineShareUrlParts): Promise<string> {\n if (!isCanonicalHttpsOrigin(parts.origin)) throw new TypeError(\"origin must be a canonical https origin\");\n if (parts.ciphertext.byteLength === 0 || parts.ciphertext.byteLength > MAX_INLINE_BYTES) throw new RangeError(\"inline ciphertext is outside the allowed size\");\n if (parts.key32 !== undefined && parts.key32.length !== KEY_LENGTH) throw new TypeError(\"inline key must be 32 bytes\");\n const ciphertextCid = await computeCid(parts.ciphertext);\n const payload = canonicalize({\n v: 2,\n c: toBase64Url(parts.ciphertext),\n cid: ciphertextCid,\n ...(parts.key32 === undefined ? {} : { k: toBase64Url(parts.key32) }),\n });\n const payloadBytes = new TextEncoder().encode(payload);\n if (payloadBytes.byteLength > MAX_INLINE_BYTES * 2) throw new RangeError(\"inline URL is too large\");\n return `${parts.origin}/s/inline${INLINE_PREFIX}${toBase64Url(payloadBytes)}`;\n}\n\nexport function parseInlineShareUrl(url: string, options: ParseShareUrlOptions = {}): ParsedInlineShareUrl {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\" || parsed.username !== \"\" || parsed.password !== \"\" || parsed.search !== \"\") throw new TypeError(\"inline share URL must be canonical HTTPS without query or userinfo\");\n if (!isCanonicalHttpsOrigin(parsed.origin) || (options.expectedOrigin !== undefined && parsed.origin !== options.expectedOrigin)) throw new TypeError(\"inline share URL origin is not trusted\");\n if (parsed.pathname !== \"/s/inline\" || !parsed.hash.startsWith(INLINE_PREFIX)) throw new TypeError(\"not an inline v2 share URL\");\n let payloadBytes: Uint8Array;\n try { payloadBytes = fromBase64Url(parsed.hash.slice(INLINE_PREFIX.length)); } catch { throw new TypeError(\"inline payload is not canonical base64url\"); }\n if (payloadBytes.byteLength === 0 || payloadBytes.byteLength > MAX_INLINE_BYTES * 2) throw new TypeError(\"inline payload is too large\");\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(payloadBytes)) as unknown; } catch { throw new TypeError(\"inline payload is not valid JSON\"); }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new TypeError(\"inline payload must be an object\");\n if (canonicalize(value) !== new TextDecoder(\"utf-8\").decode(payloadBytes)) throw new TypeError(\"inline payload is not canonical JSON\");\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n if (!keys.every((key) => key === \"v\" || key === \"c\" || key === \"cid\" || key === \"k\") || record.v !== 2 || typeof record.c !== \"string\" || typeof record.cid !== \"string\") throw new TypeError(\"inline payload has invalid fields\");\n let ciphertext: Uint8Array;\n try { ciphertext = fromBase64Url(record.c); } catch { throw new TypeError(\"inline ciphertext is not canonical base64url\"); }\n if (ciphertext.byteLength === 0 || ciphertext.byteLength > MAX_INLINE_BYTES) throw new TypeError(\"inline ciphertext is outside the allowed size\");\n assertCanonicalCid(record.cid);\n if (record.k !== undefined && typeof record.k !== \"string\") throw new TypeError(\"inline key must be base64url\");\n let key32: Uint8Array | undefined;\n try { key32 = record.k === undefined ? undefined : fromBase64Url(record.k); } catch { throw new TypeError(\"inline key is not canonical base64url\"); }\n if (key32 !== undefined && key32.length !== KEY_LENGTH) throw new TypeError(\"inline key must be 32 bytes\");\n return { kind: \"inline\", ciphertextCid: record.cid, ciphertext, ...(key32 === undefined ? {} : { key32 }) };\n}\n\nexport function parseCompactOrInlineShareUrl(url: string, options: ParseShareUrlOptions = {}):\n | { readonly kind: \"compact\"; readonly ciphertextCid: string; readonly key32: Uint8Array }\n | ParsedInlineShareUrl {\n if (new URL(url).pathname === \"/s/inline\") return parseInlineShareUrl(url, options);\n return { kind: \"compact\", ...parseShareUrl(url, options) };\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import {\n checkBearerDelegation,\n canonicalize,\n computeCid,\n fromBase64Url,\n open,\n parseCompactOrInlineShareUrl,\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n verifyEnvelopeV2,\n verifyEnvelope,\n toBase64Url,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n} from \"@tinycloud/share-envelope\";\nimport type { ShareAuthorizedContent, ShareAuthorizationAdapter, ShareAuthorizationMethod } from \"./authorization.js\";\n\nexport type ShareErrorCode = \"invalid-link\" | \"fetch-failed\" | \"max-bytes-exceeded\" | \"cid-mismatch\" | \"decrypt-failed\" | \"envelope-invalid\" | \"origin-mismatch\" | \"signature-invalid\" | \"capability-invalid\" | \"expired\" | \"unsupported-target\" | \"authorization-denied\" | \"content-integrity-failed\";\n\nexport const SHARE_RESULT_VERSION = 1 as const;\n\n/** Maximum stored-block size accepted by the headless verifier by default. */\nexport const DEFAULT_MAX_SEALED_BLOB_BYTES = 100 * 1024 * 1024 + 29;\n\n/** Content metadata permits at most 100 MiB of plaintext plus sealed overhead. */\nexport const DEFAULT_MAX_CONTENT_BLOB_BYTES = DEFAULT_MAX_SEALED_BLOB_BYTES;\n\nconst CONTENT_SEALED_OVERHEAD = 1 + 12 + 16;\n\nexport class ShareReceiveError extends Error {\n readonly code: ShareErrorCode;\n readonly details: { readonly expiresAt?: string; readonly stage?: \"envelope\" | \"content\"; readonly reason?: \"policy-target\" | \"recipient-did-target\" | \"prefix-resource\" } | undefined;\n constructor(code: ShareErrorCode, message: string, details?: { readonly expiresAt?: string; readonly stage?: \"envelope\" | \"content\"; readonly reason?: \"policy-target\" | \"recipient-did-target\" | \"prefix-resource\" }) {\n super(message); this.name = \"ShareReceiveError\"; this.code = code; this.details = details;\n }\n /** Machine output is deliberately code-only; diagnostics belong on stderr. */\n toJSON(): ShareErrorInfo { return { protocol: \"tinycloud-share\", version: SHARE_RESULT_VERSION, error: { code: this.code } }; }\n}\n\nexport interface ShareErrorInfo {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_RESULT_VERSION;\n readonly error: { readonly code: ShareErrorCode };\n}\n\n/** Convert unknown failures to the redacted public error schema. */\nexport function toShareErrorInfo(error: unknown): ShareErrorInfo {\n if (error instanceof ShareReceiveError) return error.toJSON();\n return { protocol: \"tinycloud-share\", version: SHARE_RESULT_VERSION, error: { code: \"fetch-failed\" } };\n}\n\nexport interface ShareFetchOptions {\n readonly registryBaseUrl?: string;\n readonly fetchBlob?: (input: { readonly origin: string; readonly cid: string }) => Promise<Uint8Array>;\n readonly fetchFn?: typeof globalThis.fetch;\n readonly expectedOrigin?: string;\n /** Out-of-band signer trust root for addressed envelopes. */\n readonly trustedSignerDid?: string;\n /**\n * Out-of-band policy authority. The policy bytes carried by an envelope\n * are only a CID-addressed integrity witness; they are never a trust root.\n */\n readonly trustedPolicyAuthority?: SharePolicyAuthority;\n readonly now?: () => number;\n readonly maxSealedBlobBytes?: number;\n readonly maxContentBlobBytes?: number;\n /** Observability-only hook; the SDK zeroes this authority-bearing buffer. */\n readonly onKeyParsed?: (key32: Uint8Array) => void;\n /** Optional node/OpenKey/email adapter for addressed v2 shares. */\n readonly authorization?: ShareAuthorizationAdapter<ShareAuthorizedContent>;\n readonly authorizationResumeToken?: string;\n readonly authorizationProof?: unknown;\n /** Addressed-only presentation hook. Bearer envelopes and their keys never cross this boundary. */\n readonly onResolvedAddressedEnvelope?: (envelope: ShareEnvelope | ShareEnvelopeV2, cid: string) => void;\n}\n\nexport interface SharePolicyEvidence {\n readonly policyCid: string;\n readonly signerDid: string;\n readonly registrationCid: string;\n readonly shareId: string;\n readonly recipientMatcher: unknown;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly contentSource: unknown;\n readonly contentSourceDigest: string;\n readonly delegationCid: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly expiresAt: string;\n}\n\nexport interface SharePolicyAuthority {\n resolve(input: { readonly policyCid: string; readonly envelope: ShareEnvelopeV2 }): Promise<SharePolicyEvidence | undefined>;\n}\n\nexport interface VerifyBearerEnvelopeOptions {\n readonly expectedOrigin?: string;\n readonly now?: () => number;\n}\n\n\n/** Redacted metadata; link keys, delegations, policy bytes, and claims never appear here. */\nexport interface ShareMetadata {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly origin: string;\n readonly target: { readonly kind: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\"; readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly expiresAt: string;\n readonly display: { readonly senderName?: string; readonly filename?: string; readonly mode?: string };\n readonly content?: { readonly cid: string };\n}\n\nexport interface ShareInspection { readonly metadata: ShareMetadata; readonly link: { readonly origin: string; readonly cid: string; readonly kind: \"compact\" | \"inline\" } }\nexport interface ShareReceiveAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n readonly continueUrl?: string;\n readonly resumeToken?: string;\n}\nexport interface ShareReceiveResult extends ShareInspection { readonly bytes: Uint8Array; readonly text?: string }\nexport type ShareReceiveOutcome = ShareReceiveResult | ShareReceiveAuthorizationRequired;\n\ninterface ResolvedShareEnvelope {\n readonly envelope: ShareEnvelope | ShareEnvelopeV2;\n readonly origin: string;\n readonly cid: string;\n readonly kind: \"compact\" | \"inline\";\n}\n\nfunction boundedBytes(value: Uint8Array, limit: number, code: ShareErrorCode): Uint8Array {\n if (!Number.isSafeInteger(limit) || limit <= 0) throw new ShareReceiveError(\"fetch-failed\", \"share byte limit is invalid\");\n if (!(value instanceof Uint8Array)) throw new ShareReceiveError(\"fetch-failed\", \"registry returned invalid bytes\");\n if (value.byteLength > limit) throw new ShareReceiveError(code, \"share blob exceeds the configured byte limit\");\n return value;\n}\n\nasync function readResponseBytes(response: Response, limit: number, tooLargeCode: ShareErrorCode): Promise<Uint8Array> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength !== null && Number.isSafeInteger(Number(contentLength)) && Number(contentLength) > limit) {\n throw new ShareReceiveError(tooLargeCode, \"share blob exceeds the configured byte limit\");\n }\n if (response.body === null) {\n return boundedBytes(new Uint8Array(await response.arrayBuffer()), limit, tooLargeCode);\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for (;;) {\n const part = await reader.read();\n if (part.done) break;\n total += part.value.byteLength;\n if (total > limit) {\n await reader.cancel();\n throw new ShareReceiveError(tooLargeCode, \"share blob exceeds the configured byte limit\");\n }\n chunks.push(part.value);\n }\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction registryFetcher(options: ShareFetchOptions, limit: number, tooLargeCode: ShareErrorCode = \"max-bytes-exceeded\", stage: \"envelope\" | \"content\" = \"envelope\"): (input: { readonly origin: string; readonly cid: string }) => Promise<Uint8Array> {\n if (options.fetchBlob !== undefined) return async (input) => {\n try {\n return boundedBytes(await options.fetchBlob!(input), limit, tooLargeCode);\n } catch (error) {\n if (error instanceof ShareReceiveError) throw error;\n throw new ShareReceiveError(\"fetch-failed\", \"registry unavailable\", { stage });\n }\n };\n if (options.registryBaseUrl === undefined) throw new ShareReceiveError(\"fetch-failed\", \"a registry fetch adapter is required\");\n const fetchFn = options.fetchFn ?? globalThis.fetch;\n const base = options.registryBaseUrl.replace(/\\/+$/, \"\");\n return async ({ cid }) => {\n try {\n const response = await fetchFn(`${base}/ipfs/${cid}?format=raw`, { headers: { accept: \"application/vnd.ipld.raw\" }, redirect: \"error\" });\n if (!response.ok) throw new ShareReceiveError(\"fetch-failed\", `registry returned ${response.status}`, { stage });\n return await readResponseBytes(response, limit, tooLargeCode);\n } catch (error) {\n if (error instanceof ShareReceiveError) throw error;\n throw new ShareReceiveError(\"fetch-failed\", \"registry unavailable\", { stage });\n }\n };\n}\n\nfunction metadataFor(envelope: ShareEnvelope | ShareEnvelopeV2, origin: string): ShareMetadata {\n if (envelope.version === 2) {\n const targetKind = envelope.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : envelope.recipientMatcher.kind === \"exactEmail\" ? \"email\" : envelope.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\";\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: envelope.shareId, origin,\n target: { ...envelope.target, kind: targetKind }, resource: envelope.resource, actions: envelope.actions, expiresAt: envelope.expiry,\n display: {\n ...(envelope.display.senderName === undefined ? {} : { senderName: envelope.display.senderName }),\n ...(envelope.display.filename === undefined ? {} : { filename: envelope.display.filename }),\n ...(envelope.display.mode === undefined ? {} : { mode: envelope.display.mode }),\n },\n ...(envelope.content === undefined ? {} : { content: { cid: envelope.content.cid } }),\n };\n }\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: envelope.shareId, origin,\n target: { ...envelope.target, kind: \"bearer\" }, resource: envelope.target.resource, actions: [\"read\"], expiresAt: envelope.expiry,\n display: {\n ...(envelope.display.senderName === undefined ? {} : { senderName: envelope.display.senderName }),\n ...(envelope.display.filename === undefined ? {} : { filename: envelope.display.filename }),\n ...(envelope.display.mode === undefined ? {} : { mode: envelope.display.mode }),\n },\n ...(envelope.content === undefined ? {} : { content: { cid: envelope.content.cid } }),\n };\n}\n\nfunction parseEnvelope(bytes: Uint8Array): ShareEnvelope | ShareEnvelopeV2 {\n try {\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n const value = JSON.parse(text) as unknown;\n if (canonicalize(value) !== text) throw new Error(\"share envelope is not canonical JSON\");\n if (typeof value === \"object\" && value !== null && !Array.isArray(value) && (value as { readonly version?: unknown }).version === 2) {\n return shareEnvelopeV2Schema.parse(value);\n }\n return shareEnvelopeSchema.parse(value);\n }\n catch { throw new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\"); }\n}\n\n/**\n * Resolve a compact or inline link through the canonical ordered pipeline:\n * origin/path parsing, bounded transport, CID verification, AEAD opening,\n * canonical JSON, and strict envelope schema validation. Cryptographic target\n * verification is intentionally separate so policy and recipient-DID callers\n * can apply their own trusted-authority checks before network effects.\n */\nasync function resolveShareEnvelope(link: string, options: ShareFetchOptions = {}): Promise<ResolvedShareEnvelope> {\n let parsed: ReturnType<typeof parseCompactOrInlineShareUrl>;\n try { parsed = parseCompactOrInlineShareUrl(link, { ...(options.expectedOrigin === undefined ? {} : { expectedOrigin: options.expectedOrigin }) }); }\n catch { throw new ShareReceiveError(\"invalid-link\", \"share link format is invalid\"); }\n try {\n if (parsed.key32 !== undefined) options.onKeyParsed?.(parsed.key32);\n const url = new URL(link);\n const sealed = parsed.kind === \"inline\"\n ? boundedBytes(parsed.ciphertext, options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES, \"max-bytes-exceeded\")\n : await registryFetcher(options, options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES)({ origin: url.origin, cid: parsed.ciphertextCid });\n if (await computeCid(sealed) !== parsed.ciphertextCid) throw new ShareReceiveError(\"cid-mismatch\", \"registry bytes do not match the link CID\");\n let plaintext: Uint8Array;\n try { plaintext = parsed.key32 === undefined ? sealed : await open(sealed, parsed.key32); }\n catch { throw new ShareReceiveError(\"decrypt-failed\", \"share envelope could not be opened\"); }\n return { envelope: parseEnvelope(plaintext), origin: url.origin, cid: parsed.ciphertextCid, kind: parsed.kind };\n } finally {\n // Fragment material is authority-bearing and must be cleared on every\n // path, including registry errors and CID mismatches before AEAD.\n parsed.key32?.fill(0);\n }\n}\n\nfunction actionName(value: string): string {\n return value === \"read\" ? \"tinycloud.kv/get\" : value === \"list\" ? \"tinycloud.kv/list\" : value === \"edit\" ? \"tinycloud.kv/put\" : value;\n}\n\nfunction resourceContains(outer: SharePolicyEvidence[\"resource\"], inner: SharePolicyEvidence[\"resource\"]): boolean {\n if (outer.kind === \"exact\") return inner.kind === \"exact\" && outer.path === inner.path;\n const prefix = outer.path.endsWith(\"/\") ? outer.path : `${outer.path}/`;\n return inner.path === outer.path || inner.path.startsWith(prefix);\n}\n\nfunction policyEvidenceMatches(envelope: ShareEnvelopeV2, evidence: SharePolicyEvidence): boolean {\n const registeredActions = new Set(evidence.actions.map(actionName));\n return evidence.policyCid === (envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\")\n && evidence.signerDid === envelope.signature.signerDid\n && evidence.registrationCid.length > 0\n && evidence.shareId === envelope.shareId\n && canonicalize(evidence.recipientMatcher) === canonicalize(envelope.recipientMatcher)\n && canonicalize(evidence.target) === canonicalize(envelope.target)\n && resourceContains(evidence.resource, envelope.resource)\n && envelope.actions.every((action) => registeredActions.has(actionName(action)))\n && canonicalize(evidence.contentSource) === canonicalize(envelope.contentSource)\n && evidence.contentSourceDigest === envelope.contentSourceDigest\n && evidence.delegationCid === envelope.delegationCid\n && evidence.authorityMaterialHandle === envelope.authorityMaterialHandle\n && evidence.authorityMaterialDigest === envelope.authorityMaterialDigest\n && evidence.expiresAt === envelope.expiry\n && Number.isFinite(Date.parse(evidence.expiresAt))\n && Date.parse(evidence.expiresAt) === Date.parse(envelope.expiry);\n}\n\nasync function verifyV2Envelope(envelope: ShareEnvelopeV2, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n // v2's signed target origin is the enforcing Node, not the Share viewer.\n // The link parser binds the separately trusted viewer origin; the external\n // policy authority below binds the Node origin/audience/enforcer tuple.\n if (options.expectedOrigin !== undefined && linkOrigin !== options.expectedOrigin) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share link origin does not match the trusted origin\");\n }\n // Verify the signed envelope before consulting any policy or registration\n // authority. This first check establishes integrity only: the signer named\n // by an untrusted envelope is not a trust root. The external authority below\n // must still bind that signer to an enrolled registration, and an explicit\n // trustedSignerDid remains an additional trust constraint when supplied.\n try {\n if (!await verifyEnvelopeV2(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\");\n } catch {\n throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\");\n }\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"share expiry is invalid\");\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"share has expired\", { expiresAt: envelope.expiry });\n\n if (envelope.authorizationTarget.kind === \"policy\") {\n if (options.trustedPolicyAuthority === undefined) throw new ShareReceiveError(\"envelope-invalid\", \"an external policy authority is required\");\n let evidence: SharePolicyEvidence | undefined;\n try { evidence = await options.trustedPolicyAuthority.resolve({ policyCid: envelope.authorizationTarget.policyCid, envelope }); } catch { evidence = undefined; }\n if (evidence === undefined || !policyEvidenceMatches(envelope, evidence)) throw new ShareReceiveError(\"capability-invalid\", \"share policy authority evidence is not bound to the envelope\");\n // The signer is a trust root only when the separately configured policy\n // authority has vouched for it. Never promote the signer or policy bytes\n // supplied by the untrusted envelope into authority.\n if (options.trustedSignerDid !== undefined && (evidence.signerDid !== options.trustedSignerDid || envelope.signature.signerDid !== options.trustedSignerDid)) {\n throw new ShareReceiveError(\"signature-invalid\", \"share signer is not trusted\");\n }\n } else if (envelope.authorizationTarget.kind === \"recipientDid\" && envelope.recipientMatcher.kind === \"recipientDid\" && envelope.authorizationTarget.did !== envelope.recipientMatcher.value) {\n throw new ShareReceiveError(\"capability-invalid\", \"recipient authorization does not match the signed recipient\");\n } else {\n if (options.trustedSignerDid === undefined || envelope.signature.signerDid !== options.trustedSignerDid) throw new ShareReceiveError(\"signature-invalid\", \"an addressed signer trust root is required\");\n }\n}\n\nasync function verifyV1PolicyEnvelope(envelope: ShareEnvelope, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n if (envelope.authorizationTarget.kind !== \"policy\") throw new ShareReceiveError(\"unsupported-target\", \"share target is not an addressed policy\", { reason: \"policy-target\" });\n if (envelope.target.origin !== linkOrigin || (options.expectedOrigin !== undefined && (linkOrigin !== options.expectedOrigin || envelope.target.origin !== options.expectedOrigin))) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share origin does not match the trusted origin\");\n }\n // v1 policy bytes are an integrity witness, never a trust root. This\n // compatibility verifier has no external v1 authority contract, so it must\n // not accept an addressed envelope as signature-valid.\n throw new ShareReceiveError(\"unsupported-target\", \"share policy target is not supported\", { reason: \"policy-target\" });\n}\n\n/** Verify a decrypted bearer envelope for browser adapters that own transport. */\nexport async function verifyBearerEnvelope(\n envelope: ShareEnvelope,\n linkOrigin: string,\n options: VerifyBearerEnvelopeOptions = {},\n): Promise<void> {\n // The registry origin is part of the signed target binding. A valid\n // envelope copied to another canonical Share origin must not become a\n // valid link there, even when the caller did not provide an allowlist.\n if (envelope.target.origin !== linkOrigin || (options.expectedOrigin !== undefined && (linkOrigin !== options.expectedOrigin || envelope.target.origin !== options.expectedOrigin))) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share origin does not match the trusted origin\");\n }\n if (envelope.authorizationTarget.kind !== \"bearerKey\") throw new ShareReceiveError(\"unsupported-target\", \"this receive path only handles bearer shares\", { reason: envelope.authorizationTarget.kind === \"policy\" ? \"policy-target\" : \"recipient-did-target\" });\n if (envelope.target.resource.kind !== \"exact\") throw new ShareReceiveError(\"unsupported-target\", \"this receive path only handles exact resources\", { reason: \"prefix-resource\" });\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"share expiry is invalid\");\n try { if (!await verifyEnvelope(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\"); }\n catch { throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\"); }\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"share has expired\", { expiresAt: envelope.expiry });\n const capability = checkBearerDelegation(envelope, options.now === undefined ? {} : { now: options.now });\n if (!capability.ok) throw new ShareReceiveError(\"capability-invalid\", \"share delegation does not authorize the target\");\n}\n\nasync function verifyResolved(envelope: ShareEnvelope, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n await verifyBearerEnvelope(envelope, linkOrigin, options);\n}\n\nexport async function inspectShare(link: string, options: ShareFetchOptions = {}): Promise<ShareInspection> {\n const resolved = await resolveShareEnvelope(link, options);\n if (resolved.envelope.version === 1 && resolved.envelope.authorizationTarget.kind === \"policy\") await verifyV1PolicyEnvelope(resolved.envelope, resolved.origin, options);\n else if (resolved.envelope.version === 1) await verifyResolved(resolved.envelope, resolved.origin, options);\n else await verifyV2Envelope(resolved.envelope, resolved.origin, options);\n if (resolved.envelope.version === 2 || resolved.envelope.authorizationTarget.kind === \"policy\") options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind } };\n}\n\nexport async function receiveShare(link: string, options: ShareFetchOptions = {}): Promise<ShareReceiveOutcome> {\n const resolved = await resolveShareEnvelope(link, options);\n if (resolved.envelope.version === 2) {\n await verifyV2Envelope(resolved.envelope, resolved.origin, options);\n options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n const method: ShareAuthorizationMethod = resolved.envelope.recipientMatcher.kind === \"recipientDid\" ? \"openkey-device\" : \"email-claim\";\n if (options.authorization === undefined) return { state: \"authorization-required\", method };\n const result = options.authorizationResumeToken === undefined\n ? await options.authorization.begin({ envelope: resolved.envelope, method })\n : await options.authorization.resume({ envelope: resolved.envelope, method, resumeToken: options.authorizationResumeToken, ...(options.authorizationProof === undefined ? {} : { proof: options.authorizationProof }) });\n if (result.state === \"authorization-required\") return result;\n if (result.state === \"denied\") throw new ShareReceiveError(\"authorization-denied\", \"share authorization was denied\");\n if (result.value === null || typeof result.value !== \"object\" || !(result.value.bytes instanceof Uint8Array) || result.value.proof === undefined || options.authorization.verifyResult === undefined) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"share authorization returned an unsigned content result\");\n }\n const authorized = result.value;\n try {\n if (!await options.authorization.verifyResult({ envelope: resolved.envelope, value: authorized, proof: authorized.proof })) throw new Error(\"node proof\");\n } catch {\n throw new ShareReceiveError(\"content-integrity-failed\", \"node authorization proof is invalid\");\n }\n const bytes = authorized.bytes.slice();\n const maxBytes = options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES;\n if (bytes.byteLength > maxBytes) throw new ShareReceiveError(\"max-bytes-exceeded\", \"shared content exceeds the configured byte limit\");\n const digestBytes = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes));\n const bodyDigest = toBase64Url(digestBytes);\n if (authorized.bodyDigest !== bodyDigest) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content digest does not match\");\n if (authorized.contentSourceDigest !== resolved.envelope.contentSourceDigest) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content source does not match\");\n const binding = authorized.binding;\n if (\n binding.shareId !== resolved.envelope.shareId ||\n binding.delegationCid !== resolved.envelope.delegationCid ||\n binding.authorityMaterialHandle !== resolved.envelope.authorityMaterialHandle ||\n binding.authorityMaterialDigest !== resolved.envelope.authorityMaterialDigest ||\n binding.resource.kind !== resolved.envelope.resource.kind ||\n binding.resource.path !== resolved.envelope.resource.path ||\n (binding.action !== undefined && !resolved.envelope.actions.some((action) => action === binding.action || `tinycloud.kv/${action}` === binding.action))\n ) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content binding does not match\");\n if (resolved.envelope.metadata.byteLength !== undefined && resolved.envelope.metadata.byteLength !== bytes.byteLength) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content length does not match\");\n }\n let text: string | undefined;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary result */ }\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind }, bytes, ...(text === undefined ? {} : { text }) };\n }\n if (resolved.envelope.authorizationTarget.kind === \"policy\") {\n await verifyV1PolicyEnvelope(resolved.envelope, resolved.origin, options);\n options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n return { state: \"authorization-required\", method: \"email-claim\" };\n }\n await verifyResolved(resolved.envelope, resolved.origin, options);\n // Bearer envelopes are intentionally never exposed to an adapter callback.\n let bytes: Uint8Array<ArrayBufferLike> = new Uint8Array();\n if (resolved.envelope.content !== undefined) {\n bytes = await registryFetcher(\n options,\n (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES) + CONTENT_SEALED_OVERHEAD,\n \"max-bytes-exceeded\",\n \"content\",\n )({ origin: resolved.origin, cid: resolved.envelope.content.cid });\n if (await computeCid(bytes) !== resolved.envelope.content.cid) throw new ShareReceiveError(\"content-integrity-failed\", \"shared content CID does not match\");\n const key = fromBase64Url(resolved.envelope.content.key);\n try { bytes = await open(bytes, key); } catch { throw new ShareReceiveError(\"content-integrity-failed\", \"shared content could not be opened\"); } finally { key.fill(0); }\n if (bytes.byteLength > (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES)) {\n throw new ShareReceiveError(\"max-bytes-exceeded\", \"shared content exceeds the configured byte limit\");\n }\n }\n let text: string | undefined;\n if (bytes.byteLength !== 0) {\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary result */ }\n }\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind }, bytes, ...(text === undefined ? {} : { text }) };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport {\n bearerResourceUri,\n canonicalize,\n computeCid,\n didKeyFromEd25519PublicKey,\n encodeInlineShareUrl,\n encodeShareUrl,\n generateKey,\n isCanonicalHttpsOrigin,\n mintBearerDelegation,\n seal,\n signEnvelope,\n toBase64Url,\n type ShareEnvelope,\n type UnsignedShareEnvelope,\n} from \"@tinycloud/share-envelope\";\n\nexport const SHARE_CONTENT_LIMIT = 100 * 1024 * 1024;\nexport const SHARE_SEALED_OVERHEAD = 1 + 12 + 16;\nexport const SHARE_PUBLISH_RESULT_VERSION = 1 as const;\nexport const DEFAULT_SHARE_LIFETIME_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport type SharePublishTarget =\n | { readonly kind: \"bearer\" }\n | { readonly kind: \"recipientDid\"; readonly did: string }\n | { readonly kind: \"email\"; readonly address: string }\n | { readonly kind: \"emailDomain\"; readonly domain: string };\n\nexport interface ShareUploadInput {\n readonly blob: Uint8Array;\n readonly cid: string;\n readonly deleteAfter: string;\n readonly contentLength: number;\n}\n\nexport interface ShareUploadResult {\n readonly cid: string;\n readonly deleteAfter: string;\n}\n\nexport type ShareUpload = (input: ShareUploadInput) => Promise<ShareUploadResult>;\n\nexport type ShareUploadAuthorization =\n | string\n | HeadersInit;\n\nexport interface SharePublishOptions {\n readonly source: Uint8Array | AsyncIterable<Uint8Array>;\n readonly filename: string;\n readonly mediaType?: string;\n /** Browser Share also publishes binary files; the CLI leaves this false. */\n readonly allowBinary?: boolean;\n readonly target?: SharePublishTarget;\n readonly expiresAt?: Date;\n readonly origin: string;\n readonly nodeAudience?: string;\n readonly spaceId?: string;\n readonly inline?: boolean;\n readonly maxBytes?: number;\n readonly now?: () => number;\n readonly registryBaseUrl?: string;\n readonly fetchFn?: typeof globalThis.fetch;\n /**\n * Signs the complete upload request, including its digest, size, expiry,\n * and session binding. Production callers must provide this or explicitly\n * opt into browser cookie credentials; an unsigned public upload is never\n * attempted.\n */\n readonly authorizeUpload?: (input: ShareUploadInput) => Promise<ShareUploadAuthorization>;\n /** Origin to which any cookie-bearing upload authorization is scoped. */\n readonly authorizationOrigin?: string;\n readonly credentials?: RequestCredentials;\n /** Test/dev-only escape hatch for a local HTTP registry. */\n readonly allowInsecureRegistry?: boolean;\n /** A hermetic or service-specific uploader can own transport completely. */\n readonly uploadBlob?: ShareUpload;\n}\n\nexport interface PublishedShareMetadata {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly origin: string;\n readonly target: { readonly kind: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\"; readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly expiresAt: string;\n readonly display: { readonly filename?: string; readonly senderName?: string };\n readonly content?: { readonly cid: string };\n /** Addressed publication receipts are copied into encrypted history only. */\n readonly recipientMatcher?: { readonly kind: \"bearer\" | \"recipientDid\" | \"exactEmail\" | \"emailDomain\"; readonly value?: string };\n readonly registrationCid?: string;\n readonly policyCid?: string;\n readonly ownerDelegationCid?: string;\n readonly enforcementDelegationCid?: string;\n readonly ownerDid?: string;\n readonly shareKeyDid?: string;\n readonly enforcerDid?: string;\n readonly envelopeCid?: string;\n readonly shareCid?: string;\n}\n\nexport interface PublishedShare {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_PUBLISH_RESULT_VERSION;\n /** The only authority-bearing value returned by publish. */\n readonly url: string;\n readonly link: { readonly kind: \"compact\" | \"inline\"; readonly cid: string };\n readonly metadata: PublishedShareMetadata;\n readonly registryDeleteAfter: string;\n}\n\n/** Machine-readable output omits the complete bearer capability. */\nexport function redactPublishedShare(result: PublishedShare): Omit<PublishedShare, \"url\"> {\n return {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n link: { kind: result.link.kind, cid: result.link.cid },\n metadata: {\n protocol: \"tinycloud-share\",\n version: 1,\n shareId: result.metadata.shareId,\n origin: result.metadata.origin,\n target: { ...result.metadata.target },\n resource: { ...result.metadata.resource },\n actions: [...result.metadata.actions],\n expiresAt: result.metadata.expiresAt,\n display: { ...result.metadata.display },\n ...(result.metadata.content === undefined ? {} : { content: { cid: result.metadata.content.cid } }),\n },\n registryDeleteAfter: result.registryDeleteAfter,\n };\n}\n\nexport type SharePublishErrorCode =\n | \"invalid-argument\"\n | \"unsupported-target\"\n | \"upload-auth-required\"\n | \"upload-failed\"\n | \"max-bytes-exceeded\"\n | \"inline-too-large\";\n\nexport class SharePublishError extends Error {\n readonly code: SharePublishErrorCode;\n constructor(code: SharePublishErrorCode, message: string) {\n super(message);\n this.name = \"SharePublishError\";\n this.code = code;\n }\n}\n\nfunction assertSafeFilename(filename: string): void {\n if (\n filename.length === 0 ||\n filename === \".\" ||\n filename === \"..\" ||\n /[/\\\\\\u0000-\\u001f\\u007f]/.test(filename)\n ) {\n throw new SharePublishError(\"invalid-argument\", \"filename must be one safe path segment\");\n }\n}\n\nfunction assertOrigin(origin: string, label: string): void {\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new SharePublishError(\"invalid-argument\", `${label} must be a canonical HTTPS origin`);\n }\n}\n\nasync function snapshotSource(\n source: Uint8Array | AsyncIterable<Uint8Array>,\n limit: number,\n): Promise<Uint8Array> {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new SharePublishError(\"invalid-argument\", \"maxBytes must be a positive safe integer\");\n }\n if (source instanceof Uint8Array) {\n if (source.byteLength > limit) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the configured byte limit\");\n return source.slice();\n }\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for await (const chunk of source) {\n if (!(chunk instanceof Uint8Array)) throw new SharePublishError(\"invalid-argument\", \"share source yielded invalid bytes\");\n total += chunk.byteLength;\n if (total > limit) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the configured byte limit\");\n chunks.push(chunk);\n }\n } catch (error) {\n if (error instanceof SharePublishError) throw error;\n throw new SharePublishError(\"upload-failed\", \"share source could not be read\");\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction assertTarget(target: SharePublishTarget): asserts target is { readonly kind: \"bearer\" } {\n if (target.kind !== \"bearer\") {\n throw new SharePublishError(\"unsupported-target\", \"this release publishes bearer shares only\");\n }\n}\n\nfunction assertRegistryUrl(value: string, allowInsecure: boolean): URL {\n let url: URL;\n try { url = new URL(value); } catch { throw new SharePublishError(\"invalid-argument\", \"registry URL is invalid\"); }\n if (url.username || url.password || url.search || url.hash) throw new SharePublishError(\"invalid-argument\", \"registry URL must not contain credentials, query, or fragment\");\n if (!allowInsecure && url.protocol !== \"https:\") throw new SharePublishError(\"invalid-argument\", \"production registry uploads require HTTPS\");\n if (url.protocol !== \"https:\" && url.hostname !== \"127.0.0.1\" && url.hostname !== \"localhost\") throw new SharePublishError(\"invalid-argument\", \"insecure registry uploads are limited to localhost\");\n return url;\n}\n\nasync function defaultUpload(options: SharePublishOptions, input: ShareUploadInput): Promise<ShareUploadResult> {\n if (options.registryBaseUrl === undefined) throw new SharePublishError(\"upload-auth-required\", \"an authenticated share registry is required\");\n const base = assertRegistryUrl(options.registryBaseUrl, options.allowInsecureRegistry === true).toString().replace(/\\/$/, \"\");\n const localInsecure = options.allowInsecureRegistry === true && (new URL(base).hostname === \"127.0.0.1\" || new URL(base).hostname === \"localhost\");\n // A Node fetch implementation does not carry the browser's Share session\n // cookie. `credentials: include` is therefore never upload authority by\n // itself; callers must inject the nonce/signature-bound authorizer or an\n // explicit hermetic uploader.\n if (options.authorizeUpload === undefined && !localInsecure) {\n throw new SharePublishError(\"upload-auth-required\", \"share upload authorization is required\");\n }\n let authorization: ShareUploadAuthorization | undefined;\n if (options.authorizeUpload !== undefined) {\n try { authorization = await options.authorizeUpload(input); }\n catch { throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\"); }\n }\n if (authorization !== undefined && options.authorizationOrigin !== undefined) {\n let authorizationUrl: URL;\n try { authorizationUrl = new URL(options.authorizationOrigin); } catch { throw new SharePublishError(\"invalid-argument\", \"upload authorization origin is invalid\"); }\n if (authorizationUrl.origin !== new URL(base).origin) throw new SharePublishError(\"upload-auth-required\", \"upload authorization is scoped to another origin\");\n }\n const headers = new Headers({\n \"content-type\": \"application/vnd.ipld.raw\",\n \"if-none-match\": \"*\",\n \"x-delete-after\": input.deleteAfter,\n });\n if (typeof authorization === \"string\") {\n headers.set(\"x-tinycloud-upload-attestation\", authorization);\n try {\n const attestation = JSON.parse(authorization) as { retention?: unknown };\n if (attestation.retention === undefined) throw new Error(\"retention\");\n headers.set(\"x-tinycloud-retention\", canonicalize(attestation.retention));\n } catch {\n throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\");\n }\n } else if (authorization !== undefined) {\n new Headers(authorization).forEach((value, key) => headers.set(key, value));\n }\n let response: Response;\n try {\n response = await (options.fetchFn ?? globalThis.fetch)(`${base}/blobs`, {\n method: \"POST\",\n headers,\n body: input.blob as BodyInit,\n ...(options.credentials === undefined ? {} : { credentials: options.credentials }),\n redirect: \"error\",\n referrerPolicy: \"no-referrer\",\n });\n } catch { throw new SharePublishError(\"upload-failed\", \"share registry is unavailable\"); }\n if (response.status === 401 || response.status === 403) throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\");\n if (!response.ok) throw new SharePublishError(\"upload-failed\", \"share registry rejected the encrypted blob\");\n let body: unknown;\n try { body = await response.json(); } catch { throw new SharePublishError(\"upload-failed\", \"share registry returned an invalid response\"); }\n const record = typeof body === \"object\" && body !== null ? body as Record<string, unknown> : {};\n if (record.cid !== input.cid || typeof record.deleteAfter !== \"string\") throw new SharePublishError(\"upload-failed\", \"share registry returned an unexpected CID or retention value\");\n return { cid: input.cid, deleteAfter: record.deleteAfter };\n}\n\n/** Internal transport seam shared by bearer and addressed publishers. */\nexport async function uploadShareBlob(options: SharePublishOptions, input: ShareUploadInput): Promise<ShareUploadResult> {\n const result = await (options.uploadBlob ?? ((value: ShareUploadInput) => defaultUpload(options, value)))(input);\n if (result.cid !== input.cid || typeof result.deleteAfter !== \"string\") throw new SharePublishError(\"upload-failed\", \"share uploader returned an invalid result\");\n return result;\n}\n\n/** Publish a bounded bearer Markdown artifact using the canonical envelope. */\nexport async function publishShare(options: SharePublishOptions): Promise<PublishedShare> {\n const target = options.target ?? { kind: \"bearer\" as const };\n assertTarget(target);\n assertSafeFilename(options.filename);\n assertOrigin(options.origin, \"share origin\");\n if (options.mediaType !== undefined && options.mediaType.length === 0) throw new SharePublishError(\"invalid-argument\", \"mediaType must not be empty\");\n const maxBytes = options.maxBytes ?? SHARE_CONTENT_LIMIT;\n if (maxBytes > SHARE_CONTENT_LIMIT) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the maximum 100 MiB limit\");\n const content = await snapshotSource(options.source, maxBytes);\n if (content.byteLength === 0) throw new SharePublishError(\"invalid-argument\", \"share content is empty\");\n if (options.allowBinary !== true) {\n try { new TextDecoder(\"utf-8\", { fatal: true }).decode(content); }\n catch { throw new SharePublishError(\"invalid-argument\", \"Markdown input must be valid UTF-8\"); }\n }\n const nowMs = options.now?.() ?? Date.now();\n const expiresAt = options.expiresAt ?? new Date(nowMs + DEFAULT_SHARE_LIFETIME_MS);\n if (!Number.isFinite(expiresAt.getTime()) || expiresAt.getTime() <= nowMs) throw new SharePublishError(\"invalid-argument\", \"expiresAt must be a valid future time\");\n const expiry = expiresAt.toISOString();\n const nodeAudience = options.nodeAudience ?? \"did:web:node.tinycloud.xyz\";\n const spaceId = options.spaceId ?? \"bearer\";\n const shareId = toBase64Url(globalThis.crypto.getRandomValues(new Uint8Array(16)));\n const path = `shares/${shareId}/${options.filename}`;\n const sessionPrivateKey = ed25519.utils.randomPrivateKey();\n const senderPrivateKey = ed25519.utils.randomPrivateKey();\n let contentKey: Uint8Array | undefined;\n let envelopeKey: Uint8Array | undefined;\n try {\n const sessionPublicKey = ed25519.getPublicKey(sessionPrivateKey);\n const sessionDid = didKeyFromEd25519PublicKey(sessionPublicKey);\n const delegation = mintBearerDelegation({\n issuerPrivateKey: senderPrivateKey,\n audienceDid: sessionDid,\n resourceUri: bearerResourceUri(options.origin, spaceId, path),\n expiresAtSeconds: Math.ceil(expiresAt.getTime() / 1000),\n });\n contentKey = generateKey();\n const sealedContent = await seal(content, contentKey);\n const unsigned: UnsignedShareEnvelope = {\n version: 1,\n shareId,\n delegation,\n authorizationTarget: {\n kind: \"bearerKey\",\n sessionJwk: { kty: \"OKP\", crv: \"Ed25519\", x: toBase64Url(sessionPublicKey), d: toBase64Url(sessionPrivateKey) },\n },\n target: { origin: options.origin, nodeAudience, spaceId, resource: { kind: \"exact\", path } },\n display: { filename: options.filename },\n expiry,\n content: { cid: sealedContent.cid, key: toBase64Url(contentKey) },\n };\n const envelope = signEnvelope(unsigned, senderPrivateKey);\n envelopeKey = generateKey();\n const sealedEnvelope = await seal(new TextEncoder().encode(canonicalize(envelope)), envelopeKey);\n let inlineUrl: string | undefined;\n if (options.inline === true) {\n try { inlineUrl = await encodeInlineShareUrl({ origin: options.origin, ciphertext: sealedEnvelope.blob, key32: envelopeKey }); }\n catch (error) { throw new SharePublishError(\"inline-too-large\", error instanceof Error ? error.message : \"inline share is too large\"); }\n }\n const contentUpload = await uploadShareBlob(options, { blob: sealedContent.blob, cid: sealedContent.cid, deleteAfter: expiry, contentLength: sealedContent.blob.byteLength });\n let url: string;\n let kind: \"compact\" | \"inline\";\n let retention = contentUpload.deleteAfter;\n if (options.inline === true) {\n if (inlineUrl === undefined) throw new SharePublishError(\"inline-too-large\", \"inline share is too large\");\n url = inlineUrl;\n kind = \"inline\";\n } else {\n const envelopeUpload = await uploadShareBlob(options, { blob: sealedEnvelope.blob, cid: sealedEnvelope.cid, deleteAfter: expiry, contentLength: sealedEnvelope.blob.byteLength });\n url = encodeShareUrl({ origin: options.origin, ciphertextCid: envelopeUpload.cid, key32: envelopeKey });\n kind = \"compact\";\n retention = envelopeUpload.deleteAfter;\n }\n const metadata: PublishedShareMetadata = {\n protocol: \"tinycloud-share\", version: 1, shareId, origin: options.origin,\n target: { kind: \"bearer\", origin: options.origin, nodeAudience, spaceId },\n resource: { kind: \"exact\", path }, actions: [\"read\"], expiresAt: expiry,\n display: { filename: options.filename }, content: { cid: sealedContent.cid },\n };\n const result = { protocol: \"tinycloud-share\", version: SHARE_PUBLISH_RESULT_VERSION, link: { kind, cid: sealedEnvelope.cid }, metadata, registryDeleteAfter: retention } as PublishedShare;\n Object.defineProperty(result, \"toJSON\", {\n enumerable: false,\n value: () => redactPublishedShare(result),\n });\n Object.defineProperty(result, \"url\", { enumerable: false, value: url });\n return result;\n } finally {\n sessionPrivateKey.fill(0);\n senderPrivateKey.fill(0);\n contentKey?.fill(0);\n envelopeKey?.fill(0);\n }\n}\n","import { computeCid, fromBase64Url, shareEnvelopeV2Schema, type ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\n\nexport interface ParsedAddressedEnvelope {\n readonly envelope: ShareEnvelopeV2;\n readonly policy: Record<string, unknown>;\n readonly policyCid: string;\n}\n\n/** Parse and bind the signed policy bytes before any holder or node effect. */\nexport async function parseAddressedEnvelope(value: unknown): Promise<ParsedAddressedEnvelope> {\n const envelope = shareEnvelopeV2Schema.parse(value);\n if (envelope.authorizationTarget.kind !== \"policy\") throw new TypeError(\"addressed envelope target\");\n const bytes = fromBase64Url(envelope.authorizationTarget.policyBytes);\n if (await computeCid(bytes) !== envelope.authorizationTarget.policyCid) throw new TypeError(\"addressed policy CID\");\n let decoded: unknown;\n try { decoded = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)) as unknown; } catch { throw new TypeError(\"addressed policy bytes\"); }\n if (typeof decoded !== \"object\" || decoded === null || Array.isArray(decoded)) throw new TypeError(\"addressed policy object\");\n return { envelope, policy: decoded as Record<string, unknown>, policyCid: envelope.authorizationTarget.policyCid };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base32 } from \"multiformats/bases/base32\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nconst SHA256_CODE = 0x12;\nimport * as raw from \"multiformats/codecs/raw\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\nexport interface OwnerDelegationReceipt {\n readonly delegationCid: string;\n readonly signedDagCbor: Uint8Array;\n readonly delegation: { readonly delegateDID: string; readonly spaceId: string; readonly path: string; readonly actions: readonly string[]; readonly expiry: Date };\n /** Exact service-scoped capabilities encoded in the signed owner delegation. */\n readonly permissions?: readonly OwnerDelegationPermission[];\n}\n\nexport interface OwnerDelegationPermission {\n readonly service: string;\n readonly path: string;\n readonly actions: readonly string[];\n}\n\ninterface CreateOwnerDelegationBase {\n readonly delegateDid: string;\n readonly spaceId: string;\n readonly expiresAt: Date;\n}\n\nexport type CreateOwnerDelegationParams = CreateOwnerDelegationBase & (\n | {\n readonly path: string;\n readonly actions: readonly string[];\n readonly permissions?: never;\n }\n | {\n readonly permissions: readonly OwnerDelegationPermission[];\n readonly path?: never;\n readonly actions?: never;\n }\n);\n\nconst MAX_CONTENT_BYTES = 100 * 1024 * 1024;\nexport const POLICY_ENFORCEMENT_DOMAIN = \"xyz.tinycloud.share/policy-enforcement/v2\\0\";\nconst POLICY_DOMAIN = \"xyz.tinycloud.share/policy/v2\\0\";\nexport const OWNER_SHARE_REGISTRATION_DOMAIN = \"xyz.tinycloud.share/policy-registration/v2\\0\";\n\nexport type OwnerShareAction = \"tinycloud.kv/get\" | \"tinycloud.kv/list\" | \"tinycloud.kv/metadata\" | \"tinycloud.kv/put\";\nexport interface OwnerShareDecryption {\n readonly networkId: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\nexport type OwnerShareMatcher =\n | { readonly kind: \"exactEmail\"; readonly value: string }\n | { readonly kind: \"emailDomain\"; readonly value: string }\n | { readonly kind: \"recipientDid\"; readonly value: string }\n | { readonly kind: \"bearer\" };\n\nexport interface OwnerSharePolicyV2 {\n readonly type: \"TinyCloudSharePolicy\";\n readonly version: 2;\n readonly shareId: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly enforcerDid: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly decryption?: OwnerShareDecryption;\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly ownerDelegationCid: string;\n readonly expiresAt: string;\n}\n\nexport interface DelegatedShareKey {\n readonly did: string;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n /** The underlying WebCrypto private key handle; private JWK material is never returned. */\n readonly cryptoKey: CryptoKey;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n clear(): void;\n}\n\nexport interface SignedDelegation {\n readonly cid: string;\n readonly dagCbor: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly facts: Record<string, string | readonly string[]>;\n readonly signature: string;\n}\n\nexport interface RegisterOwnerSharePolicyParams {\n readonly policy: { readonly bytes: Uint8Array; readonly cid: string; readonly proof: string };\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly enforcementDelegation: SignedDelegation;\n readonly contentSourceDigest: string;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof?: { readonly kid: string; readonly publicKey: Uint8Array };\n}\n\nexport interface OwnerSharePolicyRegistration {\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly ownerDelegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly enforcerDid: string;\n readonly shareId: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly registeredAt: string;\n readonly expiresAt: string;\n}\n\nexport interface OwnerSharePolicyRegistrationReceipt {\n readonly registration: OwnerSharePolicyRegistration;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nfunction bytes(value: Uint8Array): Uint8Array { return new Uint8Array(value); }\n\nfunction b64(value: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of value) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n if (typeof Buffer !== \"undefined\") return Buffer.from(value).toString(\"base64url\");\n throw new Error(\"base64url encoding is unavailable\");\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"owner-share value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\nfunction cid(bytesValue: Uint8Array): string {\n return CID.createV1(raw.code, createDigest(SHA256_CODE, sha256(bytesValue))).toString(base32.encoder);\n}\n\nfunction digest(bytesValue: Uint8Array): string { return b64(sha256(bytesValue)); }\n\nfunction didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share key public key must be 32 bytes\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\nfunction assertCanonical(value: string, label: string): void {\n if (value !== canonicalize(JSON.parse(value))) throw new Error(`${label} is not canonical JSON`);\n}\n\nexport function dagCborEncode(value: unknown): Uint8Array {\n const output: number[] = [];\n const writeHeader = (major: number, length: number): void => {\n if (!Number.isSafeInteger(length) || length < 0) throw new Error(\"DAG-CBOR value is too large\");\n if (length < 24) output.push((major << 5) | length);\n else if (length < 0x100) output.push((major << 5) | 24, length);\n else if (length < 0x10000) output.push((major << 5) | 25, length >> 8, length & 0xff);\n else throw new Error(\"DAG-CBOR value is too large\");\n };\n const write = (item: unknown): void => {\n if (item === null) { output.push(0xf6); return; }\n if (item === false) { output.push(0xf4); return; }\n if (item === true) { output.push(0xf5); return; }\n if (typeof item === \"string\") {\n const encoded = new TextEncoder().encode(item);\n writeHeader(3, encoded.length); output.push(...encoded); return;\n }\n if (typeof item === \"number\" && Number.isSafeInteger(item)) {\n if (item >= 0) writeHeader(0, item);\n else writeHeader(1, -1 - item);\n return;\n }\n if (Array.isArray(item)) {\n writeHeader(4, item.length); item.forEach(write); return;\n }\n if (typeof item === \"object\" && item !== null) {\n const entries = Object.entries(item as Record<string, unknown>).map(([key, value]) => {\n const keyBytes = dagCborEncode(key);\n return { key, value, keyBytes };\n }).sort((left, right) => {\n if (left.keyBytes.length !== right.keyBytes.length) return left.keyBytes.length - right.keyBytes.length;\n for (let index = 0; index < left.keyBytes.length; index += 1) {\n const leftByte = left.keyBytes[index] ?? 0;\n const rightByte = right.keyBytes[index] ?? 0;\n if (leftByte !== rightByte) return leftByte - rightByte;\n }\n return 0;\n });\n writeHeader(5, entries.length);\n entries.forEach(({ key, value }) => { write(key); write(value); });\n return;\n }\n throw new Error(\"Unsupported DAG-CBOR value\");\n };\n write(value);\n return Uint8Array.from(output);\n}\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nexport async function createDelegatedShareKey(options: { readonly extractable: boolean }): Promise<DelegatedShareKey> {\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n const generated = await crypto.subtle.generateKey({ name: \"Ed25519\" }, options.extractable, [\"sign\", \"verify\"]) as CryptoKeyPair;\n const privateKey = generated.privateKey;\n const publicKey = new Uint8Array(await crypto.subtle.exportKey(\"raw\", generated.publicKey));\n let cleared = false;\n const key: DelegatedShareKey = {\n did: didKeyFromEd25519PublicKey(publicKey),\n publicKey: bytes(publicKey),\n extractable: options.extractable,\n cryptoKey: privateKey,\n async sign(input) {\n if (cleared) throw new Error(\"share key has been cleared\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, privateKey, input));\n },\n clear() { cleared = true; },\n };\n return key;\n}\n\n/**\n * Rehydrate a signer wrapper around a `DelegatedShareKey`'s private\n * `CryptoKey` handle that was persisted (e.g. via IndexedDB structured\n * clone) and recovered after a reload. `privateKey` must be the same\n * non-extractable Ed25519 `CryptoKey` originally produced by\n * {@link createDelegatedShareKey}.\n */\nexport function restoreDelegatedShareKey(input: { readonly privateKey: CryptoKey; readonly publicKey: Uint8Array; readonly extractable: boolean }): DelegatedShareKey {\n let cleared = false;\n return {\n did: didKeyFromEd25519PublicKey(input.publicKey),\n publicKey: bytes(input.publicKey),\n extractable: input.extractable,\n cryptoKey: input.privateKey,\n async sign(signBytes) {\n if (cleared) throw new Error(\"share key has been cleared\");\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, input.privateKey, signBytes));\n },\n clear() { cleared = true; },\n };\n}\n\nexport async function createPolicyEnforcementDelegation(input: {\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly shareKey: DelegatedShareKey;\n readonly enforcerDid: string;\n readonly policyCid: string;\n readonly shareId: string;\n readonly spaceId: string;\n readonly nodeAudience: string;\n readonly path: string;\n readonly actions: readonly OwnerShareAction[];\n readonly contentSourceDigest: string;\n readonly expiresAt: string;\n}): Promise<SignedDelegation> {\n if (input.shareKey.did.length === 0 || input.ownerDelegation.delegationCid.length === 0) throw new Error(\"owner delegation and share key are required\");\n const facts = {\n ownerDelegationCid: input.ownerDelegation.delegationCid,\n policyCid: input.policyCid,\n shareId: input.shareId,\n shareKeyDid: input.shareKey.did,\n enforcerDid: input.enforcerDid,\n nodeAudience: input.nodeAudience,\n spaceId: input.spaceId,\n path: input.path,\n actions: [...input.actions],\n contentSourceDigest: input.contentSourceDigest,\n expiresAt: input.expiresAt,\n } satisfies Record<string, string | readonly string[]>;\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts };\n const dagCborBytes = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n const signature = b64(await input.shareKey.sign(dagCborBytes));\n return { cid: cid(dagCborBytes), dagCbor: b64(dagCborBytes), issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts, signature };\n}\n\nexport async function canonicalOwnerSharePolicy(policy: OwnerSharePolicyV2): Promise<{ readonly bytes: Uint8Array; readonly cid: string; readonly digest: string }> {\n const text = canonicalize({ domain: POLICY_DOMAIN, policy });\n const policyBytes = new TextEncoder().encode(text);\n return { bytes: policyBytes, cid: cid(policyBytes), digest: digest(policyBytes) };\n}\n\nexport function computeOwnerShareRegistrationCid(registration: Omit<OwnerSharePolicyRegistration, \"registrationCid\">): string {\n return cid(new TextEncoder().encode(canonicalize(registration)));\n}\n\nexport function validateOwnerSharePolicyRegistration(value: unknown, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n if (cid(expected.policy.bytes) !== expected.policy.cid) throw new Error(\"submitted owner-share policy bytes do not match its CID\");\n const root = assertObject(value, [\"registration\", \"proof\"], \"owner-share registration response\");\n const registration = assertObject(root.registration, [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"], \"owner-share registration\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"owner-share registration proof\");\n if (registration.policyCid !== expected.policy.cid || registration.ownerDelegationCid !== expected.ownerDelegation.delegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegation.cid || registration.contentSourceDigest !== expected.contentSourceDigest) throw new Error(\"owner-share registration is not bound to the submitted chain\");\n let policyValue: Record<string, unknown>;\n try { policyValue = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(expected.policy.bytes)) as Record<string, unknown>; } catch { throw new Error(\"owner-share policy is not valid JSON\"); }\n const policy = policyValue.policy as Record<string, unknown> | undefined;\n if (policyValue.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || Array.isArray(policy)) throw new Error(\"owner-share policy envelope is invalid\");\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown>;\n const registrationResource = registration.resource as Record<string, unknown>;\n const enforcementFacts = expected.enforcementDelegation.facts;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\" || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource?.path !== \"string\" || !Array.isArray(policy.actions) || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId || canonicalize(policy.recipientMatcher) !== canonicalize(registration.recipientMatcher) || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path || canonicalize(policy.actions) !== canonicalize(registration.actions) || canonicalize(policy.contentSource) !== canonicalize(registration.contentSource) || policy.expiresAt !== registration.expiresAt || policy.contentSourceDigest !== registration.contentSourceDigest || enforcementFacts.ownerDelegationCid !== registration.ownerDelegationCid || enforcementFacts.policyCid !== registration.policyCid || enforcementFacts.shareKeyDid !== registration.shareKeyDid || enforcementFacts.enforcerDid !== registration.enforcerDid || enforcementFacts.nodeAudience !== registrationTarget.nodeAudience || enforcementFacts.spaceId !== registrationTarget.spaceId || enforcementFacts.path !== registrationResource.path || canonicalize(enforcementFacts.actions) !== canonicalize(registration.actions) || enforcementFacts.expiresAt !== registration.expiresAt) throw new Error(\"owner-share registration is not bound to the canonical policy\");\n if (typeof registration.registrationCid !== \"string\" || typeof registration.expiresAt !== \"string\" || typeof registration.registeredAt !== \"string\") throw new Error(\"owner-share registration timestamps are invalid\");\n if (new Date(registration.expiresAt).toISOString() !== registration.expiresAt || Date.parse(registration.expiresAt) <= Date.now()) throw new Error(\"owner-share registration is expired or non-canonical\");\n const { registrationCid: _registrationCid, ...registrationCore } = registration;\n if (computeOwnerShareRegistrationCid(registrationCore as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registration.registrationCid) throw new Error(\"owner-share registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"owner-share registration proof is invalid\");\n const proofKey = expected.nodeProof;\n if (proofKey === undefined) throw new Error(\"owner-share registration proof trust material is required\");\n if (proof.kid !== proofKey.kid) throw new Error(\"owner-share registration proof key is not trusted\");\n const encodedKid = proofKey.publicKey;\n if (encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01) {\n // did:key multicodec prefix is removed below.\n } else if (encodedKid.length !== 32) throw new Error(\"owner-share registration proof key is invalid\");\n const publicKey = encodedKid.length === 34 ? encodedKid.slice(2) : encodedKid;\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(registrationCore)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"owner-share registration proof signature is invalid\");\n return { registration: registration as unknown as OwnerSharePolicyRegistration, proof: proof as unknown as OwnerSharePolicyRegistrationReceipt[\"proof\"] };\n}\n\n/** Validate the exact UTF-8 response bytes emitted by the registration route. */\nexport function validateOwnerSharePolicyRegistrationBytes(bytesValue: Uint8Array, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"owner-share registration response is not valid UTF-8 JSON\");\n }\n return validateOwnerSharePolicyRegistration(value, expected);\n}\n\nexport { MAX_CONTENT_BYTES };\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import type { ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\n\n/** The only interactive boundary exposed by the headless SDK. */\nexport type ShareAuthorizationMethod = \"openkey-device\" | \"email-claim\" | \"email-otp\";\n\nexport interface ShareAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n /** A browser-safe continuation location. It must never contain a claim secret. */\n readonly continueUrl?: string;\n /** An opaque, short-lived, nonce-bound handle. It is not a bearer credential. */\n readonly resumeToken?: string;\n}\n\nexport interface ShareAuthorizationDenied {\n readonly state: \"denied\";\n readonly reason: \"rejected\" | \"expired\" | \"revoked\" | \"unsupported\";\n}\n\nexport interface ShareAuthorizationReady<T> {\n readonly state: \"ready\";\n readonly value: T;\n}\n\nexport type ShareAuthorizationResult<T> = ShareAuthorizationReady<T> | ShareAuthorizationRequired | ShareAuthorizationDenied;\n\nexport interface ShareAuthorizationAdapter<T> {\n begin(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n }): Promise<ShareAuthorizationResult<T>>;\n resume(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n readonly resumeToken: string;\n readonly proof?: unknown;\n }): Promise<ShareAuthorizationResult<T>>;\n /** Verify the detached node proof against a pinned authority trust bundle. */\n readonly verifyResult?: (input: { readonly envelope: ShareEnvelopeV2; readonly value: T; readonly proof: unknown }) => Promise<boolean>;\n}\n\n/**\n * A node-authorized addressed read. Returning plaintext alone is not an\n * authorization result: the caller must also return the signed response\n * binding and digest that the node produced for that exact share.\n */\nexport interface ShareAuthorizedContent {\n readonly bytes: Uint8Array;\n readonly bodyDigest: string;\n readonly contentSourceDigest: string;\n readonly binding: {\n readonly shareId: string;\n readonly delegationCid: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly action?: string;\n };\n /** A detached node proof; self-reported bytes and digests are not authorization. */\n readonly proof: unknown;\n}\n\n/**\n * Start or continue a target authorization without ever guessing a device,\n * claim, or delegation secret. Adapters own their protocol and are expected\n * to bind their resume token to a server challenge and expiry.\n */\nexport async function authorizeShare<T>(\n input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n readonly adapter: ShareAuthorizationAdapter<T>;\n readonly resumeToken?: string;\n readonly proof?: unknown;\n },\n): Promise<ShareAuthorizationResult<T>> {\n if (input.resumeToken !== undefined) {\n if (input.resumeToken.length < 16 || input.resumeToken.length > 512) {\n return { state: \"denied\", reason: \"rejected\" };\n }\n return input.adapter.resume({\n envelope: input.envelope,\n method: input.method,\n resumeToken: input.resumeToken,\n ...(input.proof === undefined ? {} : { proof: input.proof }),\n });\n }\n return input.adapter.begin({ envelope: input.envelope, method: input.method });\n}\n\nexport function authorizationMethodForTarget(target: { readonly kind: string }): ShareAuthorizationMethod | undefined {\n if (target.kind === \"recipientDid\") return \"openkey-device\";\n if (target.kind === \"email\") return \"email-claim\";\n if (target.kind === \"emailDomain\") return \"email-claim\";\n return undefined;\n}\n","import type { ShareAuthorizationRequired, ShareAuthorizationMethod } from \"./authorization.js\";\nimport { authorizationMethodForTarget } from \"./authorization.js\";\nimport type { AddressedSharePublishOptions } from \"./addressed-publish.js\";\nimport { publishShare, SharePublishError, SHARE_CONTENT_LIMIT, type PublishedShare, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nimport { base58btc } from \"multiformats/bases/base58\";\n\nexport type ShareTarget = SharePublishTarget;\n\nexport interface TargetPublishInput {\n readonly source: Uint8Array;\n readonly filename: string;\n /** Additional files for a prefix resource; source remains the first file for compatibility. */\n readonly files?: readonly { readonly bytes: Uint8Array; readonly filename: string; readonly mediaType?: string }[];\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n readonly expiresAt: Date;\n readonly origin: string;\n readonly mediaType?: string;\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly inline?: boolean;\n readonly upload?: AddressedSharePublishOptions[\"upload\"];\n readonly notify?: boolean;\n}\n\nexport type TargetPublishOutcome = PublishedShare | ShareAuthorizationRequired;\n\nexport interface TargetPublishAdapter {\n publish(input: TargetPublishInput): Promise<TargetPublishOutcome>;\n}\n\nfunction validEmail(value: string): boolean {\n return /^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i.test(value);\n}\n\nfunction validDomain(value: string): boolean {\n return /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))+$/i.test(value);\n}\n\nfunction validRecipientDid(value: string): boolean {\n if (value.length === 0 || value.length > 2048 || /[\\u0000-\\u0020\\u007f]/.test(value)) return false;\n const parts = value.split(\":\");\n if (parts.length < 3 || parts[0] !== \"did\" || !/^[a-z0-9]+$/.test(parts[1] ?? \"\")) return false;\n const identifier = parts.slice(2);\n if (identifier.some((part) => part.length === 0)) return false;\n if (parts[1] === \"web\") {\n const host = identifier[0] ?? \"\";\n if (host.length > 253 || host.split(\".\").some((label) => !label || label.length > 63 || !/^[A-Za-z0-9-]+$/.test(label) || label.startsWith(\"-\") || label.endsWith(\"-\"))) return false;\n return identifier.slice(1).every((part) => /^[A-Za-z0-9._%-]+$/.test(part));\n }\n if (parts[1] === \"pkh\") return identifier.length >= 3 && identifier.every((part) => /^[A-Za-z0-9._%-]+$/.test(part));\n if (parts[1] === \"key\") {\n try {\n const bytes = base58btc.decode(identifier.join(\":\"));\n return bytes.length === 34 && bytes[0] === 0xed && bytes[1] === 0x01;\n } catch {\n return false;\n }\n }\n return false;\n}\n\nexport function normalizeShareTarget(target: ShareTarget): ShareTarget {\n if (target.kind === \"bearer\") return target;\n if (target.kind === \"recipientDid\") {\n if (!validRecipientDid(target.did)) throw new TypeError(\"recipient DID is invalid\");\n return { kind: target.kind, did: target.did };\n }\n if (target.kind === \"email\") {\n if (!validEmail(target.address)) throw new TypeError(\"recipient email is invalid\");\n const at = target.address.lastIndexOf(\"@\");\n return { kind: target.kind, address: `${target.address.slice(0, at)}@${target.address.slice(at + 1).toLowerCase()}` };\n }\n if (!validDomain(target.domain)) throw new TypeError(\"recipient email domain is invalid\");\n return { kind: target.kind, domain: target.domain.toLowerCase() };\n}\n\nexport function targetAuthorizationMethod(target: ShareTarget): ShareAuthorizationMethod | undefined {\n return authorizationMethodForTarget(target);\n}\n\n/** Publish bearer shares locally, and route addressed shares to an authority adapter. */\nexport async function publishTargetShare(input: SharePublishOptions & {\n readonly target: ShareTarget;\n readonly notify?: boolean;\n readonly targetAdapter?: TargetPublishAdapter;\n readonly files?: readonly { readonly bytes: Uint8Array; readonly filename: string; readonly mediaType?: string }[];\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n}): Promise<TargetPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n if (target.kind === \"bearer\") return publishShare(input);\n if (input.targetAdapter === undefined) {\n return {\n state: \"authorization-required\",\n method: targetAuthorizationMethod(target)!,\n };\n }\n const source = input.source instanceof Uint8Array ? input.source.slice() : await (async () => {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of input.source as AsyncIterable<Uint8Array>) {\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"addressed publication source yielded invalid bytes\");\n size += chunk.byteLength;\n if (size > (input.maxBytes ?? 100 * 1024 * 1024)) throw new TypeError(\"addressed publication exceeds maxBytes\");\n chunks.push(chunk.slice());\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n return bytes;\n })();\n const files = input.files === undefined || input.files.length === 0\n ? [{ bytes: source }]\n : input.files;\n const limit = input.maxBytes ?? SHARE_CONTENT_LIMIT;\n let totalBytes = 0;\n for (const file of files) {\n totalBytes += file.bytes.byteLength;\n if (!Number.isSafeInteger(totalBytes) || totalBytes > limit) {\n throw new SharePublishError(\"max-bytes-exceeded\", \"addressed publication exceeds the combined byte limit\");\n }\n }\n return input.targetAdapter.publish({\n source,\n filename: input.filename,\n ...(input.files === undefined ? {} : { files: input.files }),\n ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),\n ...(input.resourceKind === undefined ? {} : { resourceKind: input.resourceKind }),\n ...(input.actions === undefined ? {} : { actions: input.actions }),\n target,\n expiresAt: input.expiresAt ?? new Date((input.now?.() ?? Date.now()) + 7 * 24 * 60 * 60 * 1000),\n origin: input.origin,\n ...(input.inline === undefined ? {} : { inline: input.inline }),\n upload: {\n ...(input.registryBaseUrl === undefined ? {} : { registryBaseUrl: input.registryBaseUrl }),\n ...(input.fetchFn === undefined ? {} : { fetchFn: input.fetchFn }),\n ...(input.authorizeUpload === undefined ? {} : { authorizeUpload: input.authorizeUpload }),\n ...(input.authorizationOrigin === undefined ? {} : { authorizationOrigin: input.authorizationOrigin }),\n ...(input.credentials === undefined ? {} : { credentials: input.credentials }),\n ...(input.allowInsecureRegistry === undefined ? {} : { allowInsecureRegistry: input.allowInsecureRegistry }),\n ...(input.uploadBlob === undefined ? {} : { uploadBlob: input.uploadBlob }),\n },\n ...(input.notify === undefined ? {} : { notify: input.notify }),\n });\n}\n","import {\n canonicalize,\n computeCid,\n encodeInlineShareUrl,\n encodeShareUrl,\n fromBase64Url,\n generateKey,\n seal,\n shareEnvelopeV2Schema,\n toBase64Url,\n unsignedShareEnvelopeV2Schema,\n type ContentSource,\n type ShareAction,\n} from \"@tinycloud/share-envelope\";\nimport {\n canonicalOwnerSharePolicy,\n createDelegatedShareKey,\n createPolicyEnforcementDelegation,\n type CreateOwnerDelegationParams,\n type OwnerDelegationReceipt,\n type OwnerShareAction,\n type OwnerShareDecryption,\n type OwnerShareMatcher,\n type OwnerSharePolicyRegistrationReceipt,\n type RegisterOwnerSharePolicyParams,\n} from \"./owner-policy.js\";\nimport {\n SHARE_CONTENT_LIMIT,\n SHARE_PUBLISH_RESULT_VERSION,\n redactPublishedShare,\n uploadShareBlob,\n type PublishedShare,\n type SharePublishOptions,\n} from \"./publish.js\";\nimport { normalizeShareTarget, type ShareTarget } from \"./targets.js\";\n\nconst ENVELOPE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\n\nexport interface AddressedPublishAuthority {\n readonly ownerDid: string;\n createOwnerDelegation(input: CreateOwnerDelegationParams): Promise<OwnerDelegationReceipt>;\n registerOwnerSharePolicy(input: RegisterOwnerSharePolicyParams): Promise<OwnerSharePolicyRegistrationReceipt>;\n}\n\nexport interface AddressedSharePublishOptions {\n readonly shareId: string;\n readonly shareOrigin: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n readonly spaceId: string;\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly ShareAction[];\n readonly policyActions: readonly OwnerShareAction[];\n readonly contentSource: ContentSource;\n readonly contentSourceDigest?: string;\n readonly filename: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n readonly deliveryEmail?: string;\n readonly expiresAt: Date;\n readonly decryption?: OwnerShareDecryption;\n readonly inline?: boolean;\n readonly authority: AddressedPublishAuthority;\n readonly upload: Pick<SharePublishOptions, \"registryBaseUrl\" | \"fetchFn\" | \"authorizeUpload\" | \"authorizationOrigin\" | \"credentials\" | \"allowInsecureRegistry\" | \"uploadBlob\">;\n}\n\nfunction targetMatcher(target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>): OwnerShareMatcher {\n if (target.kind === \"recipientDid\") return { kind: \"recipientDid\", value: target.did };\n if (target.kind === \"email\") return { kind: \"exactEmail\", value: target.address };\n return { kind: \"emailDomain\", value: target.domain };\n}\n\nfunction targetKind(target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>): \"recipientDid\" | \"email\" | \"emailDomain\" {\n return target.kind;\n}\n\nfunction assertSafeInput(input: AddressedSharePublishOptions): void {\n if (!/^[A-Za-z0-9_-]{16,128}$/.test(input.shareId)) throw new TypeError(\"addressed share id is invalid\");\n if (input.filename.length === 0 || input.filename === \".\" || input.filename === \"..\" || /[/\\\\\\u0000-\\u001f\\u007f]/.test(input.filename)) throw new TypeError(\"addressed filename is invalid\");\n if (!Number.isSafeInteger(input.byteLength) || input.byteLength < 0 || input.byteLength > SHARE_CONTENT_LIMIT) throw new TypeError(\"addressed content length is invalid\");\n if (input.actions.length === 0 || input.policyActions.length === 0) throw new TypeError(\"addressed share actions are empty\");\n const expiry = input.expiresAt.getTime();\n if (!Number.isFinite(expiry) || expiry <= Date.now()) throw new TypeError(\"addressed share expiry must be in the future\");\n if (input.artifact === \"html\" && (input.resource.kind !== \"prefix\" || !input.actions.includes(\"read\") || !input.actions.includes(\"list\"))) throw new TypeError(\"html artifacts require a readable prefix\");\n if (input.contentSource.kind !== \"kv\") throw new TypeError(\"addressed policy publication requires a KV content source\");\n}\n\nasync function sha256(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n\nfunction publicationResult(input: {\n readonly options: AddressedSharePublishOptions;\n readonly url: string;\n readonly envelopeCid: string;\n readonly shareCid: string;\n readonly matcher: OwnerShareMatcher;\n readonly registration: OwnerSharePolicyRegistrationReceipt[\"registration\"];\n readonly policyCid: string;\n readonly enforcementDelegationCid: string;\n readonly shareKeyDid: string;\n readonly retention: string;\n}): PublishedShare {\n const result = {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n url: input.url,\n link: { kind: input.options.inline === true ? \"inline\" as const : \"compact\" as const, cid: input.envelopeCid },\n metadata: {\n protocol: \"tinycloud-share\" as const,\n version: 1 as const,\n shareId: input.options.shareId,\n origin: input.options.shareOrigin,\n target: {\n kind: targetKind(input.options.target),\n origin: input.options.nodeOrigin,\n nodeAudience: input.options.nodeAudience,\n spaceId: input.options.spaceId,\n },\n resource: { ...input.options.resource },\n actions: [...input.options.actions],\n expiresAt: input.options.expiresAt.toISOString(),\n display: { filename: input.options.filename },\n recipientMatcher: { ...input.matcher },\n registrationCid: input.registration.registrationCid,\n policyCid: input.policyCid,\n ownerDelegationCid: input.registration.ownerDelegationCid,\n enforcementDelegationCid: input.enforcementDelegationCid,\n ownerDid: input.registration.ownerDid,\n shareKeyDid: input.shareKeyDid,\n enforcerDid: input.registration.enforcerDid,\n envelopeCid: input.envelopeCid,\n shareCid: input.shareCid,\n },\n registryDeleteAfter: input.retention,\n } satisfies PublishedShare;\n Object.defineProperty(result, \"toJSON\", { enumerable: false, value: () => redactPublishedShare(result) });\n Object.defineProperty(result, \"url\", { enumerable: false, value: input.url });\n return result;\n}\n\n/**\n * Canonical addressed publisher shared by browser and CLI.\n *\n * Callers own authenticated KV writes and transport. This function alone owns\n * the policy, delegation, outer-authority, signed-envelope, encryption, and\n * link bytes.\n */\nexport async function publishAddressedShare(options: AddressedSharePublishOptions): Promise<PublishedShare> {\n assertSafeInput(options);\n const target = normalizeShareTarget(options.target);\n if (target.kind === \"bearer\") throw new TypeError(\"addressed target is required\");\n if (options.contentSource.kind !== \"kv\") throw new TypeError(\"addressed policy publication requires a KV content source\");\n const contentSource = options.contentSource;\n const matcher = targetMatcher(target);\n const expiresAt = options.expiresAt.toISOString();\n const contentSourceDigest = options.contentSourceDigest ?? await sha256(new TextEncoder().encode(canonicalize(contentSource)));\n const shareKey = await createDelegatedShareKey({ extractable: false });\n let envelopeKey: Uint8Array | undefined;\n try {\n const permissions = [\n {\n service: \"tinycloud.kv\",\n path: options.resource.kind === \"prefix\" ? `${options.resource.path.replace(/\\/+$/, \"\")}/` : options.resource.path,\n actions: [...options.policyActions],\n },\n ...(options.decryption === undefined ? [] : [{\n service: \"tinycloud.encryption\",\n path: options.decryption.networkId,\n actions: [options.decryption.action],\n }]),\n ];\n const ownerDelegation = await options.authority.createOwnerDelegation({\n delegateDid: shareKey.did,\n spaceId: options.spaceId,\n permissions,\n expiresAt: options.expiresAt,\n });\n const policy = {\n type: \"TinyCloudSharePolicy\" as const,\n version: 2 as const,\n shareId: options.shareId,\n ownerDid: options.authority.ownerDid,\n shareKeyDid: shareKey.did,\n recipientMatcher: matcher,\n target: {\n origin: options.nodeOrigin,\n nodeAudience: options.nodeAudience,\n enforcerDid: options.enforcerDid,\n spaceId: options.spaceId,\n },\n resource: { ...options.resource },\n actions: [...options.policyActions],\n ...(options.decryption === undefined ? {} : { decryption: options.decryption }),\n contentSource,\n contentSourceDigest,\n ownerDelegationCid: ownerDelegation.delegationCid,\n expiresAt,\n };\n const canonicalPolicy = await canonicalOwnerSharePolicy(policy);\n const policyProof = toBase64Url(await shareKey.sign(canonicalPolicy.bytes));\n const enforcementDelegation = await createPolicyEnforcementDelegation({\n ownerDelegation,\n shareKey,\n enforcerDid: options.enforcerDid,\n policyCid: canonicalPolicy.cid,\n shareId: options.shareId,\n spaceId: options.spaceId,\n nodeAudience: options.nodeAudience,\n path: options.resource.path,\n actions: options.policyActions,\n contentSourceDigest,\n expiresAt,\n });\n const registration = await options.authority.registerOwnerSharePolicy({\n policy: { bytes: canonicalPolicy.bytes, cid: canonicalPolicy.cid, proof: policyProof },\n ownerDelegation,\n enforcementDelegation,\n contentSourceDigest,\n });\n const authorityMaterialDigest = await sha256(fromBase64Url(enforcementDelegation.dagCbor));\n const authorityTarget = {\n origin: options.nodeOrigin,\n nodeAudience: options.nodeAudience,\n enforcerDid: options.enforcerDid,\n spaceId: options.spaceId,\n };\n const envelopeIdentity = {\n schema: \"xyz.tinycloud.share/envelope/v2\",\n version: 2,\n shareId: options.shareId,\n delegationCid: ownerDelegation.delegationCid,\n policyCid: canonicalPolicy.cid,\n target: authorityTarget,\n resource: options.resource,\n actions: options.policyActions,\n ...(options.decryption === undefined ? {} : { decryption: options.decryption }),\n contentSource,\n contentSourceDigest,\n expiresAt,\n };\n const envelopeCid = await computeCid(new TextEncoder().encode(canonicalize(envelopeIdentity)));\n const shareCid = await computeCid(new TextEncoder().encode(canonicalize({ version: 2, shareId: options.shareId, policyCid: canonicalPolicy.cid, envelopeCid })));\n const outerUnsigned = { ...envelopeIdentity, envelopeCid, shareCid };\n const outerSignature = toBase64Url(await shareKey.sign(new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(outerUnsigned)}`)));\n const unsigned = {\n version: 2 as const,\n shareId: options.shareId,\n recipientMatcher: matcher,\n ...(options.deliveryEmail === undefined ? {} : { deliveryEmail: options.deliveryEmail }),\n actions: [...options.actions],\n resource: { ...options.resource },\n target: { origin: options.nodeOrigin, nodeAudience: options.nodeAudience, spaceId: options.spaceId },\n delegationCid: ownerDelegation.delegationCid,\n authorityMaterialHandle: registration.registration.registrationCid,\n authorityMaterialDigest,\n contentSource,\n contentSourceDigest,\n authorizationTarget: { kind: \"policy\" as const, policyCid: canonicalPolicy.cid, policyBytes: toBase64Url(canonicalPolicy.bytes) },\n display: { filename: options.filename },\n expiry: expiresAt,\n encrypted: true,\n metadata: {\n mediaType: options.mediaType,\n byteLength: options.byteLength,\n filename: options.filename,\n ...(options.mediaType.startsWith(\"text/\") ? { encoding: \"utf-8\" as const } : {}),\n ...(options.artifact === undefined ? {} : { artifact: options.artifact }),\n },\n ownerAuthority: {\n registrationCid: registration.registration.registrationCid,\n shareCid,\n envelopeCid,\n enforcementDelegation,\n registrationReceipt: registration,\n outerEnvelope: {\n ...outerUnsigned,\n signature: { signerDid: shareKey.did, algorithm: \"Ed25519\" as const, value: outerSignature },\n },\n },\n };\n unsignedShareEnvelopeV2Schema.parse(unsigned);\n const envelopeSignature = toBase64Url(await shareKey.sign(new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(unsigned)}`)));\n const envelope = { ...unsigned, signature: { signerDid: shareKey.did, algorithm: \"Ed25519\" as const, value: envelopeSignature } };\n shareEnvelopeV2Schema.parse(envelope);\n envelopeKey = generateKey();\n const sealed = await seal(new TextEncoder().encode(canonicalize(envelope)), envelopeKey);\n let url: string;\n let retention = expiresAt;\n if (options.inline === true) {\n url = await encodeInlineShareUrl({ origin: options.shareOrigin, ciphertext: sealed.blob, key32: envelopeKey });\n } else {\n const uploaded = await uploadShareBlob({\n source: new Uint8Array([1]),\n filename: options.filename,\n origin: options.shareOrigin,\n ...options.upload,\n }, { blob: sealed.blob, cid: sealed.cid, deleteAfter: expiresAt, contentLength: sealed.blob.byteLength });\n retention = uploaded.deleteAfter;\n url = encodeShareUrl({ origin: options.shareOrigin, ciphertextCid: uploaded.cid, key32: envelopeKey });\n }\n return publicationResult({\n options,\n url,\n envelopeCid: sealed.cid,\n shareCid,\n matcher,\n registration: registration.registration,\n policyCid: canonicalPolicy.cid,\n enforcementDelegationCid: enforcementDelegation.cid,\n shareKeyDid: shareKey.did,\n retention,\n });\n } finally {\n shareKey.clear();\n envelopeKey?.fill(0);\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport {\n canonicalize,\n computeCid,\n ed25519PublicKeyFromDidKey,\n fromBase64Url,\n type ShareEnvelopeV2,\n} from \"@tinycloud/share-envelope\";\nimport {\n validateOwnerSharePolicyRegistration,\n type OwnerDelegationReceipt,\n type SignedDelegation,\n dagCborEncode,\n POLICY_ENFORCEMENT_DOMAIN,\n} from \"./owner-policy.js\";\nimport type { SharePolicyAuthority, SharePolicyEvidence } from \"./receive.js\";\n\nconst ENVELOPE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\n\nexport interface RegisteredPolicyAuthorityOptions {\n readonly nodeProof: { readonly kid: string; readonly publicKey: Uint8Array };\n readonly expectedTarget: {\n readonly origin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n };\n}\n\nfunction record(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const output = value as Record<string, unknown>;\n if (Object.keys(output).length !== keys.length || keys.some((key) => !Object.hasOwn(output, key))) throw new Error(`${label} has unknown or missing fields`);\n return output;\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw new Error(`${label} is invalid`);\n return value;\n}\n\nfunction stringArray(value: unknown, label: string): readonly string[] {\n if (!Array.isArray(value) || value.length === 0 || !value.every((item) => typeof item === \"string\" && item.length > 0)) throw new Error(`${label} is invalid`);\n return value;\n}\n\nfunction parseEnforcement(value: unknown): SignedDelegation {\n const delegation = record(value, [\"cid\", \"dagCbor\", \"issuerDid\", \"audienceDid\", \"facts\", \"signature\"], \"policy enforcement delegation\");\n const facts = record(delegation.facts, [\"ownerDelegationCid\", \"policyCid\", \"shareId\", \"shareKeyDid\", \"enforcerDid\", \"nodeAudience\", \"spaceId\", \"path\", \"actions\", \"contentSourceDigest\", \"expiresAt\"], \"policy enforcement facts\");\n return {\n cid: requiredString(delegation.cid, \"policy enforcement CID\"),\n dagCbor: requiredString(delegation.dagCbor, \"policy enforcement bytes\"),\n issuerDid: requiredString(delegation.issuerDid, \"policy enforcement issuer\"),\n audienceDid: requiredString(delegation.audienceDid, \"policy enforcement audience\"),\n facts: {\n ownerDelegationCid: requiredString(facts.ownerDelegationCid, \"owner delegation CID\"),\n policyCid: requiredString(facts.policyCid, \"policy CID\"),\n shareId: requiredString(facts.shareId, \"share id\"),\n shareKeyDid: requiredString(facts.shareKeyDid, \"share key DID\"),\n enforcerDid: requiredString(facts.enforcerDid, \"enforcer DID\"),\n nodeAudience: requiredString(facts.nodeAudience, \"node audience\"),\n spaceId: requiredString(facts.spaceId, \"space id\"),\n path: requiredString(facts.path, \"resource path\"),\n actions: stringArray(facts.actions, \"policy actions\"),\n contentSourceDigest: requiredString(facts.contentSourceDigest, \"content source digest\"),\n expiresAt: requiredString(facts.expiresAt, \"policy expiry\"),\n },\n signature: requiredString(delegation.signature, \"policy enforcement signature\"),\n };\n}\n\nasync function verifyEnforcement(delegation: SignedDelegation): Promise<boolean> {\n try {\n const dagCbor = fromBase64Url(delegation.dagCbor);\n if (await computeCid(dagCbor) !== delegation.cid) return false;\n const expectedDagCbor = dagCborEncode({\n domain: POLICY_ENFORCEMENT_DOMAIN,\n unsigned: {\n type: \"TinyCloudSharePolicyEnforcement\",\n version: 2,\n issuerDid: delegation.issuerDid,\n audienceDid: delegation.audienceDid,\n facts: delegation.facts,\n },\n });\n if (expectedDagCbor.length !== dagCbor.length || expectedDagCbor.some((byte, index) => byte !== dagCbor[index])) return false;\n const signature = fromBase64Url(delegation.signature);\n return signature.length === 64 && ed25519.verify(\n signature,\n dagCbor,\n ed25519PublicKeyFromDidKey(delegation.issuerDid),\n { zip215: false },\n );\n } catch {\n return false;\n }\n}\n\nasync function verifyOuterEnvelope(\n value: unknown,\n envelope: ShareEnvelopeV2,\n policyCid: string,\n expectedEnforcerDid: string,\n expectedActions: readonly string[],\n): Promise<{ readonly envelopeCid: string; readonly shareCid: string } | undefined> {\n try {\n const hasDecryption = typeof value === \"object\" && value !== null && Object.hasOwn(value, \"decryption\");\n const outer = record(value, [\"schema\", \"version\", \"shareId\", \"delegationCid\", \"policyCid\", \"target\", \"resource\", \"actions\", ...(hasDecryption ? [\"decryption\"] : []), \"contentSource\", \"contentSourceDigest\", \"expiresAt\", \"envelopeCid\", \"shareCid\", \"signature\"], \"outer envelope\");\n const target = record(outer.target, [\"origin\", \"nodeAudience\", \"enforcerDid\", \"spaceId\"], \"outer target\");\n const signature = record(outer.signature, [\"signerDid\", \"algorithm\", \"value\"], \"outer envelope signature\");\n const envelopeCid = requiredString(outer.envelopeCid, \"outer envelope CID\");\n const shareCid = requiredString(outer.shareCid, \"outer share CID\");\n const { signature: _signature, envelopeCid: _envelopeCid, shareCid: _shareCid, ...identity } = outer;\n if (\n outer.schema !== \"xyz.tinycloud.share/envelope/v2\"\n || outer.version !== 2\n || outer.shareId !== envelope.shareId\n || outer.delegationCid !== envelope.delegationCid\n || outer.policyCid !== policyCid\n || target.origin !== envelope.target.origin\n || target.nodeAudience !== envelope.target.nodeAudience\n || target.enforcerDid !== expectedEnforcerDid\n || target.spaceId !== envelope.target.spaceId\n || canonicalize(outer.resource) !== canonicalize(envelope.resource)\n || canonicalize(outer.actions) !== canonicalize(expectedActions)\n || (hasDecryption\n ? envelope.decryption === undefined || canonicalize(outer.decryption) !== canonicalize(envelope.decryption)\n : envelope.decryption !== undefined)\n || canonicalize(outer.contentSource) !== canonicalize(envelope.contentSource)\n || outer.contentSourceDigest !== envelope.contentSourceDigest\n || outer.expiresAt !== envelope.expiry\n || signature.signerDid !== envelope.signature.signerDid\n || signature.algorithm !== \"Ed25519\"\n ) return undefined;\n if (envelopeCid !== await computeCid(new TextEncoder().encode(canonicalize(identity)))) return undefined;\n if (shareCid !== await computeCid(new TextEncoder().encode(canonicalize({ version: 2, shareId: envelope.shareId, policyCid, envelopeCid })))) return undefined;\n const unsigned = { ...identity, envelopeCid, shareCid };\n const signatureBytes = fromBase64Url(requiredString(signature.value, \"outer signature\"));\n if (signatureBytes.length !== 64 || !ed25519.verify(\n signatureBytes,\n new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(unsigned)}`),\n ed25519PublicKeyFromDidKey(envelope.signature.signerDid),\n { zip215: false },\n )) return undefined;\n return { envelopeCid, shareCid };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Build a policy authority from an enrolled node receipt key. The encrypted\n * envelope carries the receipt as evidence, but only the separately pinned\n * key can make that evidence authoritative.\n */\nexport function createRegisteredPolicyAuthority(options: RegisteredPolicyAuthorityOptions): SharePolicyAuthority {\n const proofKey = options.nodeProof.publicKey.slice();\n return {\n async resolve({ policyCid, envelope }): Promise<SharePolicyEvidence | undefined> {\n try {\n if (envelope.authorizationTarget.kind !== \"policy\" || envelope.authorizationTarget.policyCid !== policyCid) return undefined;\n const ownerAuthority = envelope.ownerAuthority as typeof envelope.ownerAuthority & {\n readonly registrationReceipt?: unknown;\n };\n if (ownerAuthority?.registrationReceipt === undefined) return undefined;\n const enforcement = parseEnforcement(ownerAuthority.enforcementDelegation);\n if (!await verifyEnforcement(enforcement)) return undefined;\n const policyBytes = fromBase64Url(envelope.authorizationTarget.policyBytes);\n const ownerDelegation: OwnerDelegationReceipt = {\n delegationCid: envelope.delegationCid,\n signedDagCbor: new Uint8Array(),\n delegation: {\n delegateDID: envelope.signature.signerDid,\n spaceId: envelope.target.spaceId,\n path: envelope.resource.path,\n actions: envelope.actions,\n expiry: new Date(envelope.expiry),\n },\n };\n const receipt = validateOwnerSharePolicyRegistration(ownerAuthority.registrationReceipt, {\n policy: { bytes: policyBytes, cid: policyCid, proof: \"\" },\n ownerDelegation,\n enforcementDelegation: enforcement,\n contentSourceDigest: envelope.contentSourceDigest,\n nodeProof: { kid: options.nodeProof.kid, publicKey: proofKey },\n });\n const registration = receipt.registration;\n const outer = await verifyOuterEnvelope(ownerAuthority.outerEnvelope, envelope, policyCid, options.expectedTarget.enforcerDid, registration.actions);\n if (\n outer === undefined\n || ownerAuthority.registrationCid !== registration.registrationCid\n || ownerAuthority.envelopeCid !== outer.envelopeCid\n || ownerAuthority.shareCid !== outer.shareCid\n || envelope.authorityMaterialHandle !== registration.registrationCid\n || envelope.signature.signerDid !== registration.shareKeyDid\n || registration.target.origin !== options.expectedTarget.origin\n || registration.target.nodeAudience !== options.expectedTarget.nodeAudience\n || registration.enforcerDid !== options.expectedTarget.enforcerDid\n || enforcement.issuerDid !== registration.shareKeyDid\n || enforcement.audienceDid !== registration.enforcerDid\n ) return undefined;\n return {\n policyCid: registration.policyCid,\n signerDid: registration.shareKeyDid,\n registrationCid: registration.registrationCid,\n shareId: registration.shareId,\n recipientMatcher: registration.recipientMatcher,\n target: registration.target,\n resource: registration.resource,\n actions: registration.actions,\n contentSource: registration.contentSource,\n contentSourceDigest: registration.contentSourceDigest,\n delegationCid: registration.ownerDelegationCid,\n authorityMaterialHandle: registration.registrationCid,\n authorityMaterialDigest: envelope.authorityMaterialDigest,\n expiresAt: registration.expiresAt,\n };\n } catch {\n return undefined;\n }\n },\n };\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\n\nexport interface ShareCacheKey {\n readonly cid: string;\n readonly expiresAt: string;\n}\n\nexport interface ShareCacheMetadata {\n readonly contentType: string;\n readonly size: number;\n readonly encrypted: boolean;\n}\n\nexport interface ShareCacheEntry {\n readonly key: ShareCacheKey;\n readonly bytes: Uint8Array;\n readonly digest: Uint8Array;\n readonly metadata: ShareCacheMetadata;\n}\n\nexport interface ShareCache {\n get(key: ShareCacheKey, now?: Date): Promise<Uint8Array | undefined>;\n /** Retrieve a valid entry without a process-local expiry index. */\n getByCid?(cid: string, now?: Date): Promise<ShareCacheEntry | undefined>;\n set(key: ShareCacheKey, bytes: Uint8Array, metadata: ShareCacheMetadata): Promise<void>;\n delete(key: ShareCacheKey): Promise<void>;\n clear(): Promise<void>;\n}\n\nfunction cacheKey(key: ShareCacheKey): string {\n if (!key.cid || !key.expiresAt) throw new Error(\"share cache keys require CID and expiry\");\n return `${key.cid}\\0${key.expiresAt}`;\n}\n\nfunction digest(bytes: Uint8Array): Uint8Array {\n return sha256(bytes);\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n return left.every((byte, index) => byte === right[index]);\n}\n\n/**\n * A deliberately memory-only cache. It stores verified artifact bytes and\n * non-secret metadata only; fragment keys, presentations, sessions, and\n * decrypted content never cross this boundary.\n */\nexport class MemoryShareCache implements ShareCache {\n private readonly entries = new Map<string, ShareCacheEntry>();\n\n constructor(private readonly now: () => Date = () => new Date()) {}\n\n async get(key: ShareCacheKey, now = new Date()): Promise<Uint8Array | undefined> {\n const mapKey = cacheKey(key);\n const entry = this.entries.get(mapKey);\n if (entry === undefined) return undefined;\n if (Date.parse(entry.key.expiresAt) <= now.getTime() || !equalBytes(entry.digest, digest(entry.bytes))) {\n this.entries.delete(mapKey);\n return undefined;\n }\n return entry.bytes.slice();\n }\n\n async getByCid(cid: string, now = new Date()): Promise<ShareCacheEntry | undefined> {\n const entries = [...this.entries.values()].filter((entry) => entry.key.cid === cid);\n for (const entry of entries) {\n if (Date.parse(entry.key.expiresAt) <= now.getTime() || !equalBytes(entry.digest, digest(entry.bytes))) {\n this.entries.delete(cacheKey(entry.key));\n continue;\n }\n return {\n key: { ...entry.key },\n bytes: entry.bytes.slice(),\n digest: entry.digest.slice(),\n metadata: { ...entry.metadata },\n };\n }\n return undefined;\n }\n\n async set(key: ShareCacheKey, bytes: Uint8Array, metadata: ShareCacheMetadata): Promise<void> {\n if (Date.parse(key.expiresAt) <= this.now().getTime()) return;\n this.entries.set(cacheKey(key), {\n key: { cid: key.cid, expiresAt: key.expiresAt },\n bytes: bytes.slice(),\n digest: digest(bytes),\n metadata: { ...metadata },\n });\n }\n\n async delete(key: ShareCacheKey): Promise<void> {\n this.entries.delete(cacheKey(key));\n }\n\n async clear(): Promise<void> {\n this.entries.clear();\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\n/** Matches V2_DELIVERY_DOMAIN in tinycloud-node-server/src/share_v2.rs. */\nexport const SHARE_DELIVERY_AUTHORIZATION_DOMAIN = \"xyz.tinycloud.share/delivery-authorization/v2\\0\";\n\n/** Exact camelCase mirror of the Rust `V2DeliveryRequest` wire struct. */\nexport interface ShareDeliveryAuthorizationRequest {\n readonly envelopeCid: string;\n readonly shareCid: string;\n readonly shareId: string;\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly delegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly recipientEmail: string;\n readonly shareUrl: string;\n readonly documentName: string;\n readonly jti: string;\n readonly idempotencyKey: string;\n readonly expiresAt: string;\n readonly requestBodyDigest: string;\n}\n\n/** Exact mirror of the `authorization` object the Node route signs and returns. */\nexport interface ShareDeliveryAuthorization {\n readonly type: \"TinyCloudShareDeliveryAuthorization\";\n readonly version: 2;\n readonly jti: string;\n readonly shareCid: string;\n readonly shareId: string;\n readonly registrationCid: string;\n readonly delegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly envelopeCid: string;\n readonly policyCid: string;\n readonly nodeAudience: string;\n readonly targetOrigin: string;\n /**\n * The OpenCredentials witness this delivery is scoped to, sourced from\n * Node's own trusted credentials origin. Deliberately distinct from\n * `nodeAudience` (the node's own DID) and `returnOrigin` (Share's page\n * origin) — conflating any of these three would let a party impersonate\n * another's audience.\n */\n readonly openCredentialsAudience: string;\n readonly holder: string;\n readonly recipientMatcher: unknown;\n readonly deliveryEmail: string;\n readonly shareUrl: string;\n readonly returnOrigin: string;\n readonly documentName: string;\n readonly senderDid: string;\n readonly senderTrust: string;\n readonly contentSource: unknown;\n readonly contentSourceDigest: string;\n readonly shareExpiresAt: string;\n readonly issuedAt: string;\n readonly reportAbuseToken: string;\n readonly actions: readonly string[];\n readonly resource: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly requestBodyDigest: string;\n readonly idempotencyKey: string;\n readonly expiresAt: string;\n readonly dataAuthority: false;\n}\n\nexport interface ShareDeliveryAuthorizationReceipt {\n readonly authorization: ShareDeliveryAuthorization;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nexport interface ValidateShareDeliveryAuthorizationExpected {\n readonly request: ShareDeliveryAuthorizationRequest;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof: { readonly kid: string; readonly publicKey: Uint8Array };\n /**\n * The OpenCredentials witness origin the caller trusts, from the same\n * trust bundle as `nodeProof`. Validated independently of the\n * authorization's own `nodeAudience`/`returnOrigin` fields so a Node that\n * mislabels or omits its credentials origin fails closed here rather than\n * silently inheriting one of those unrelated identities.\n */\n readonly credentialsAudience: string;\n}\n\n/** Matches `canonical_https_origin` in tinycloud-node-server/src/config.rs. */\nfunction isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\"\n && url.origin === value\n && url.pathname === \"/\"\n && url.search === \"\"\n && url.hash === \"\"\n && url.username === \"\"\n && url.password === \"\";\n}\n\nconst AUTHORIZATION_KEYS = [\n \"type\", \"version\", \"jti\", \"shareCid\", \"shareId\", \"registrationCid\", \"delegationCid\",\n \"enforcementDelegationCid\", \"envelopeCid\", \"policyCid\", \"nodeAudience\", \"targetOrigin\",\n \"openCredentialsAudience\",\n \"holder\", \"recipientMatcher\", \"deliveryEmail\", \"shareUrl\", \"returnOrigin\", \"documentName\",\n \"senderDid\", \"senderTrust\", \"contentSource\", \"contentSourceDigest\", \"shareExpiresAt\",\n \"issuedAt\", \"reportAbuseToken\", \"actions\", \"resource\", \"authorityMaterialHandle\",\n \"authorityMaterialDigest\", \"requestBodyDigest\", \"idempotencyKey\", \"expiresAt\", \"dataAuthority\",\n] as const;\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"share delivery value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\n/**\n * Validate the exact UTF-8 response bytes emitted by\n * `POST /share/v2/deliveries/authorize`, bind them to the submitted\n * request, and verify the Node's detached EdDSA proof.\n */\nexport function validateShareDeliveryAuthorizationBytes(bytesValue: Uint8Array, expected: ValidateShareDeliveryAuthorizationExpected): ShareDeliveryAuthorizationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"share delivery authorization response is not valid UTF-8 JSON\");\n }\n const root = assertObject(value, [\"authorization\", \"proof\"], \"share delivery authorization response\");\n const authorization = assertObject(root.authorization, AUTHORIZATION_KEYS, \"share delivery authorization\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"share delivery authorization proof\");\n\n const request = expected.request;\n if (\n authorization.type !== \"TinyCloudShareDeliveryAuthorization\"\n || authorization.version !== 2\n || authorization.dataAuthority !== false\n || authorization.jti !== request.jti\n || authorization.shareCid !== request.shareCid\n || authorization.shareId !== request.shareId\n || authorization.registrationCid !== request.registrationCid\n || authorization.delegationCid !== request.delegationCid\n || authorization.enforcementDelegationCid !== request.enforcementDelegationCid\n || authorization.envelopeCid !== request.envelopeCid\n || authorization.policyCid !== request.policyCid\n || authorization.deliveryEmail !== request.recipientEmail\n || authorization.shareUrl !== request.shareUrl\n || authorization.documentName !== request.documentName\n || authorization.requestBodyDigest !== request.requestBodyDigest\n || authorization.expiresAt !== request.expiresAt\n || authorization.idempotencyKey !== request.idempotencyKey\n || authorization.reportAbuseToken !== request.jti\n || authorization.authorityMaterialHandle !== request.registrationCid\n ) {\n throw new Error(\"share delivery authorization is not bound to the submitted request\");\n }\n const now = Date.now();\n const issuedAt = typeof authorization.issuedAt === \"string\" ? Date.parse(authorization.issuedAt) : Number.NaN;\n const expiresAt = typeof authorization.expiresAt === \"string\" ? Date.parse(authorization.expiresAt) : Number.NaN;\n if (!Number.isFinite(issuedAt) || issuedAt > now + 60_000 || issuedAt > expiresAt) throw new Error(\"share delivery authorization issuedAt is invalid\");\n if (!Number.isFinite(expiresAt) || expiresAt <= now) throw new Error(\"share delivery authorization is expired\");\n if (new Date(expiresAt).toISOString() !== authorization.expiresAt) throw new Error(\"share delivery authorization expiresAt is non-canonical\");\n\n // Independent audience check: the OpenCredentials witness field must be a\n // canonical https origin, must equal the caller's own trusted value (never\n // derived from the response), and must not collapse into the node's own\n // audience or Share's return origin.\n if (\n typeof authorization.openCredentialsAudience !== \"string\"\n || !isCanonicalHttpsOrigin(authorization.openCredentialsAudience)\n || authorization.openCredentialsAudience !== expected.credentialsAudience\n || authorization.openCredentialsAudience === authorization.nodeAudience\n || authorization.openCredentialsAudience === authorization.returnOrigin\n ) {\n throw new Error(\"share delivery authorization openCredentialsAudience is missing or untrusted\");\n }\n\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"share delivery authorization proof is invalid\");\n if (proof.kid !== expected.nodeProof.kid) throw new Error(\"share delivery authorization proof key is not trusted\");\n const encodedKid = expected.nodeProof.publicKey;\n const publicKey = encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01 ? encodedKid.slice(2) : encodedKid;\n if (publicKey.length !== 32) throw new Error(\"share delivery authorization proof key is invalid\");\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${SHARE_DELIVERY_AUTHORIZATION_DOMAIN}${canonicalize(authorization)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"share delivery authorization proof signature is invalid\");\n\n return { authorization: authorization as unknown as ShareDeliveryAuthorization, proof: proof as unknown as ShareDeliveryAuthorizationReceipt[\"proof\"] };\n}\n\n/** Build the trusted-signer descriptor `did:key:...#z...` expects from a raw node signing key. */\nexport function shareDeliveryTrustedKid(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share delivery node key must be a raw 32-byte Ed25519 public key\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n const did = `did:key:${base58btc.encode(prefixed)}`;\n return `${did}#${did.slice(\"did:key:\".length)}`;\n}\n","import type { DelegatedShareKey, OwnerShareAction, OwnerShareMatcher, OwnerSharePolicyRegistrationReceipt } from \"./owner-policy\";\nimport { restoreDelegatedShareKey } from \"./owner-policy\";\nimport type { PublishedShare } from \"./publish.js\";\n\nexport interface EncryptedShareHistoryStorage {\n put(value: Uint8Array): Promise<void>;\n list(): Promise<readonly Uint8Array[]>;\n clear(): Promise<void>;\n}\n\nexport class MemoryEncryptedShareHistoryStorage implements EncryptedShareHistoryStorage {\n private readonly values: Uint8Array[] = [];\n async put(value: Uint8Array): Promise<void> { this.values.push(value.slice()); }\n async list(): Promise<readonly Uint8Array[]> { return this.values.map((value) => value.slice()); }\n async clear(): Promise<void> { this.values.length = 0; }\n}\n\n/**\n * The durable record a sender needs, after a reload, to display and manage\n * a share it created. Every identity/CID here comes verbatim from the\n * Node-verified {@link OwnerSharePolicyRegistrationReceipt}; nothing is\n * re-derived or guessed.\n */\nexport interface SenderShareRecord {\n readonly shareId: string;\n readonly registrationCid?: string;\n readonly policyCid?: string;\n readonly ownerDelegationCid?: string;\n readonly enforcementDelegationCid?: string;\n readonly shareKeyDid?: string;\n readonly ownerDid?: string;\n readonly enforcerDid?: string;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly recipientMatcher: OwnerShareMatcher;\n /** The signed target discriminator, retained separately from the email matcher. */\n readonly targetKind?: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\";\n readonly registeredAt: string;\n readonly expiresAt: string;\n readonly revokedAt?: string;\n readonly envelopeCid?: string;\n readonly shareCid?: string;\n /** Complete bearer links are encrypted at rest and only revealed explicitly. */\n readonly link?: string;\n readonly filename?: string;\n}\n\n/** Create the durable encrypted-history shape from canonical publication receipts. */\nexport function historyRecordForPublishedShare(result: PublishedShare, now: Date = new Date()): SenderShareRecord {\n const target = result.metadata.target.kind;\n const supplied = result.metadata.recipientMatcher;\n let matcher: OwnerShareMatcher;\n if (supplied?.kind === \"recipientDid\" && typeof supplied.value === \"string\") matcher = { kind: \"recipientDid\", value: supplied.value };\n else if (supplied?.kind === \"exactEmail\" && typeof supplied.value === \"string\") matcher = { kind: \"exactEmail\", value: supplied.value };\n else if (supplied?.kind === \"emailDomain\" && typeof supplied.value === \"string\") matcher = { kind: \"emailDomain\", value: supplied.value };\n else if (target !== \"bearer\") throw new TypeError(\"addressed publication is missing its recipient binding\");\n else matcher = { kind: \"bearer\" };\n return {\n shareId: result.metadata.shareId,\n target: result.metadata.target,\n resource: result.metadata.resource,\n actions: result.metadata.actions.map((action) =>\n action === \"read\" ? \"tinycloud.kv/get\"\n : action === \"list\" ? \"tinycloud.kv/list\"\n : action === \"edit\" ? \"tinycloud.kv/put\"\n : action,\n ) as OwnerShareAction[],\n recipientMatcher: matcher,\n targetKind: target,\n ...(result.metadata.registrationCid === undefined ? {} : { registrationCid: result.metadata.registrationCid }),\n ...(result.metadata.policyCid === undefined ? {} : { policyCid: result.metadata.policyCid }),\n ...(result.metadata.ownerDelegationCid === undefined ? {} : { ownerDelegationCid: result.metadata.ownerDelegationCid }),\n ...(result.metadata.enforcementDelegationCid === undefined ? {} : { enforcementDelegationCid: result.metadata.enforcementDelegationCid }),\n ...(result.metadata.ownerDid === undefined ? {} : { ownerDid: result.metadata.ownerDid }),\n ...(result.metadata.shareKeyDid === undefined ? {} : { shareKeyDid: result.metadata.shareKeyDid }),\n ...(result.metadata.enforcerDid === undefined ? {} : { enforcerDid: result.metadata.enforcerDid }),\n ...(result.metadata.envelopeCid === undefined ? {} : { envelopeCid: result.metadata.envelopeCid }),\n ...(result.metadata.shareCid === undefined ? {} : { shareCid: result.metadata.shareCid }),\n registeredAt: now.toISOString(),\n expiresAt: result.metadata.expiresAt,\n link: result.url,\n ...(result.metadata.display.filename === undefined ? {} : { filename: result.metadata.display.filename }),\n };\n}\n\n/**\n * \"direct\" revokes only this share's enforcement delegation. \"ancestor\"\n * revokes the owner delegation the share descends from, which transitively\n * denies every share built on it (see `revocation_in_ancestry` in\n * `tinycloud-node-server/src/share_v2.rs`). Both are existing CIDs that a\n * caller passes to the node's generic `tinycloud.delegation/revoke`\n * invocation (`DelegationManager.revoke` / `TinyCloudNode.revokeDelegation`)\n * -- there is no share-v2-specific revoke route.\n */\nexport type SenderShareRevocationScope = \"direct\" | \"ancestor\";\n\nexport interface SenderShareRecordStorage {\n put(record: SenderShareRecord): Promise<void>;\n list(): Promise<readonly SenderShareRecord[]>;\n get(shareId: string): Promise<SenderShareRecord | undefined>;\n delete(shareId: string): Promise<void>;\n}\n\nexport interface StoredSenderShareKey {\n readonly cryptoKey: CryptoKey;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n}\n\nexport interface SenderShareKeyStorage {\n put(shareId: string, key: StoredSenderShareKey): Promise<void>;\n get(shareId: string): Promise<StoredSenderShareKey | undefined>;\n delete(shareId: string): Promise<void>;\n}\n\n/** In-memory reference implementation. Real deployments back these with IndexedDB so the non-extractable `CryptoKey` survives a reload via structured clone. */\nexport class MemorySenderShareRecordStorage implements SenderShareRecordStorage {\n private readonly records = new Map<string, SenderShareRecord>();\n\n async put(record: SenderShareRecord): Promise<void> {\n this.records.set(record.shareId, record);\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n return [...this.records.values()];\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n return this.records.get(shareId);\n }\n\n async delete(shareId: string): Promise<void> {\n this.records.delete(shareId);\n }\n}\n\nexport class MemorySenderShareKeyStorage implements SenderShareKeyStorage {\n private readonly keys = new Map<string, StoredSenderShareKey>();\n\n async put(shareId: string, key: StoredSenderShareKey): Promise<void> {\n this.keys.set(shareId, key);\n }\n\n async get(shareId: string): Promise<StoredSenderShareKey | undefined> {\n return this.keys.get(shareId);\n }\n\n async delete(shareId: string): Promise<void> {\n this.keys.delete(shareId);\n }\n}\n\nexport interface SenderShareStoreOptions {\n readonly records: SenderShareRecordStorage;\n readonly keys: SenderShareKeyStorage;\n readonly now?: () => Date;\n}\n\n/**\n * Reload-safe sender-side management for shares created through\n * {@link canonicalOwnerSharePolicy} / `registerOwnerSharePolicy`. Persists\n * the registration receipt's canonical identity tuple plus the ephemeral\n * share key's non-extractable `CryptoKey` handle, so a sender can list,\n * inspect, and revoke shares it created in an earlier session -- without\n * ever re-exporting private key material.\n */\nexport class SenderShareStore {\n private readonly records: SenderShareRecordStorage;\n private readonly keys: SenderShareKeyStorage;\n private readonly now: () => Date;\n\n constructor(options: SenderShareStoreOptions) {\n this.records = options.records;\n this.keys = options.keys;\n this.now = options.now ?? (() => new Date());\n }\n\n /** Persist a Node-verified registration receipt and its share key handle. */\n async save(receipt: OwnerSharePolicyRegistrationReceipt, key: DelegatedShareKey): Promise<SenderShareRecord> {\n const registration = receipt.registration;\n if (registration.shareKeyDid !== key.did) throw new Error(\"share key does not match the registered receipt\");\n const record: SenderShareRecord = {\n shareId: registration.shareId,\n registrationCid: registration.registrationCid,\n policyCid: registration.policyCid,\n ownerDelegationCid: registration.ownerDelegationCid,\n enforcementDelegationCid: registration.enforcementDelegationCid,\n shareKeyDid: registration.shareKeyDid,\n ownerDid: registration.ownerDid,\n enforcerDid: registration.enforcerDid,\n target: registration.target,\n resource: registration.resource,\n actions: registration.actions,\n recipientMatcher: registration.recipientMatcher,\n targetKind: registration.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : registration.recipientMatcher.kind === \"exactEmail\" ? \"email\" : registration.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\",\n registeredAt: registration.registeredAt,\n expiresAt: registration.expiresAt,\n };\n await this.records.put(record);\n await this.keys.put(record.shareId, { cryptoKey: key.cryptoKey, publicKey: key.publicKey, extractable: key.extractable });\n return record;\n }\n\n /** List shares created in any session, most recent first. */\n async list(options?: { readonly includeRevoked?: boolean; readonly includeExpired?: boolean }): Promise<readonly SenderShareRecord[]> {\n const now = this.now().getTime();\n const records = await this.records.list();\n return records\n .filter((record) => (options?.includeRevoked ?? false) || record.revokedAt === undefined)\n .filter((record) => (options?.includeExpired ?? false) || Date.parse(record.expiresAt) > now)\n .sort((left, right) => Date.parse(right.registeredAt) - Date.parse(left.registeredAt));\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n return this.records.get(shareId);\n }\n\n /** Recover a signer for the persisted share key after a reload. */\n async loadKey(shareId: string): Promise<DelegatedShareKey | undefined> {\n const stored = await this.keys.get(shareId);\n if (stored === undefined) return undefined;\n return restoreDelegatedShareKey({\n privateKey: stored.cryptoKey,\n publicKey: stored.publicKey,\n extractable: stored.extractable,\n });\n }\n\n /**\n * The delegation CID to pass to the node's existing generic\n * `tinycloud.delegation/revoke` invocation to revoke this share at the\n * requested scope. Does not itself call the node -- callers invoke\n * their own `revokeDelegation`/`DelegationManager.revoke` with the\n * returned CID, then call {@link markRevoked} once that succeeds.\n */\n async revocationTarget(shareId: string, scope: SenderShareRevocationScope): Promise<string> {\n const record = await this.records.get(shareId);\n if (record === undefined) throw new Error(`Unknown share: ${shareId}`);\n const delegationCid = scope === \"direct\" ? record.enforcementDelegationCid : record.ownerDelegationCid;\n if (delegationCid === undefined) throw new Error(\"share has no node-enforced delegation\");\n return delegationCid;\n }\n\n /** Mark a share revoked locally after the caller's node-side revoke call succeeds. */\n async markRevoked(shareId: string, revokedAt: string = this.now().toISOString()): Promise<SenderShareRecord> {\n const record = await this.records.get(shareId);\n if (record === undefined) throw new Error(`Unknown share: ${shareId}`);\n const revoked: SenderShareRecord = { ...record, revokedAt };\n await this.records.put(revoked);\n return revoked;\n }\n\n /** Forget a share and clear its persisted key handle. */\n async remove(shareId: string): Promise<void> {\n await this.records.delete(shareId);\n await this.keys.delete(shareId);\n }\n}\n\n/** WebCrypto-backed persistence adapter; links and private material are absent. */\nexport class EncryptedSenderShareHistory {\n constructor(\n private readonly storage: EncryptedShareHistoryStorage,\n private readonly key: CryptoKey,\n private readonly now: () => Date = () => new Date(),\n ) {}\n\n async put(record: SenderShareRecord): Promise<void> {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const payload = new TextEncoder().encode(JSON.stringify(record));\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: \"AES-GCM\", iv }, this.key, payload));\n const encoded = new Uint8Array(iv.length + ciphertext.length);\n encoded.set(iv); encoded.set(ciphertext, iv.length);\n await this.storage.put(encoded);\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n const records: SenderShareRecord[] = [];\n for (const encoded of await this.storage.list()) {\n if (encoded.length <= 12) continue;\n try {\n const value = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: encoded.slice(0, 12) }, this.key, encoded.slice(12));\n const parsed = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(value)) as SenderShareRecord;\n if (typeof parsed.shareId === \"string\" && typeof parsed.expiresAt === \"string\") records.push(parsed);\n } catch {\n // Ignore corrupt/foreign records rather than returning unauthenticated data.\n }\n }\n return records;\n }\n\n async clear(): Promise<void> { await this.storage.clear(); }\n}\n","import { canonicalize, toBase64Url } from \"@tinycloud/share-envelope\";\nimport type { SenderShareRecord } from \"./history.js\";\n\nexport type ShareNotifyState = \"delivered\" | \"already-delivered\" | \"partial-failure\";\n\nexport interface ShareNotifyResult {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly state: ShareNotifyState;\n readonly idempotencyKey: string;\n readonly attempts: number;\n readonly retryable?: boolean;\n}\n\nexport interface ShareNotifyInput {\n readonly shareId: string;\n readonly recipient: string;\n readonly record?: SenderShareRecord;\n readonly idempotencyKey?: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface ShareDeliveryAdapter {\n /** The server must deduplicate this key before any message is sent. */\n deliver(input: ShareNotifyInput): Promise<\"delivered\" | \"already-delivered\">;\n}\n\nexport class ShareNotifyError extends Error {\n readonly code = \"delivery-failed\" as const;\n constructor(message = \"share delivery did not complete\") {\n super(message);\n this.name = \"ShareNotifyError\";\n }\n}\n\n/** Match a delivery address against the recipient constraint recorded when the share was created. */\nexport function recipientMatchesShareRecord(record: SenderShareRecord, recipient: string): boolean {\n const matcher = record.recipientMatcher;\n if (matcher.kind === \"bearer\" || matcher.kind === \"recipientDid\") return false;\n if (matcher.kind === \"exactEmail\") return matcher.value === recipient;\n const at = recipient.lastIndexOf(\"@\");\n return at > 0 && recipient.slice(at + 1).toLowerCase() === matcher.value;\n}\n\n/**\n * Delivery is deliberately separate from publication. A failed notification\n * never causes a second envelope or link to be minted.\n */\nexport async function notifyShare(input: {\n readonly shareId: string;\n readonly recipient: string;\n readonly record?: SenderShareRecord;\n readonly adapter: ShareDeliveryAdapter;\n readonly idempotencyKey?: string;\n readonly maxAttempts?: number;\n readonly signal?: AbortSignal;\n}): Promise<ShareNotifyResult> {\n if (!input.shareId || !input.recipient || !input.recipient.includes(\"@\")) throw new ShareNotifyError(\"recipient is invalid\");\n if (input.record !== undefined && !recipientMatchesShareRecord(input.record, input.recipient)) {\n throw new ShareNotifyError(\"recipient does not match the stored share target\");\n }\n const idempotencyKey = input.idempotencyKey ?? await defaultIdempotencyKey(input.shareId, input.recipient);\n const attemptsLimit = input.maxAttempts ?? 3;\n if (!Number.isSafeInteger(attemptsLimit) || attemptsLimit < 1 || attemptsLimit > 8) throw new ShareNotifyError(\"maxAttempts is invalid\");\n let attempts = 0;\n let lastError: unknown;\n while (attempts < attemptsLimit) {\n if (input.signal?.aborted) throw new ShareNotifyError(\"share delivery was cancelled\");\n attempts += 1;\n try {\n const state = await input.adapter.deliver({ shareId: input.shareId, recipient: input.recipient, idempotencyKey, ...(input.record === undefined ? {} : { record: input.record }), ...(input.signal === undefined ? {} : { signal: input.signal }) });\n return { protocol: \"tinycloud-share\", version: 1, shareId: input.shareId, state, idempotencyKey, attempts };\n } catch (error) {\n lastError = error;\n }\n }\n void lastError;\n return { protocol: \"tinycloud-share\", version: 1, shareId: input.shareId, state: \"partial-failure\", idempotencyKey, attempts, retryable: true };\n}\n\n/** Bind the default retry key to the canonical recipient as well as the share. */\nasync function defaultIdempotencyKey(shareId: string, recipient: string): Promise<string> {\n const canonicalRecipient = canonicalize(recipient.trim().toLowerCase());\n const digest = new Uint8Array(await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(canonicalRecipient),\n ));\n return `tinycloud-share:${shareId}:${toBase64Url(digest)}`;\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"./history.js\";\n\nexport type ShareRevocationResult =\n | { readonly state: \"revoked\"; readonly target: \"recipientDid\" | \"email\" | \"emailDomain\"; readonly delegationCid: string; readonly revokedAt: string }\n | { readonly state: \"retention-only\"; readonly target: \"bearer\"; readonly reason: \"bearer-capability-cannot-be-revoked\" }\n | { readonly state: \"unsupported\"; readonly target: string; readonly reason: string; readonly code: \"unsupported-target\" };\n\nexport interface ShareRevocationAdapter {\n revokeDelegation(input: { readonly delegationCid: string; readonly scope: \"direct\" | \"ancestor\" }): Promise<void>;\n}\n\nfunction targetKind(record: SenderShareRecord): string {\n if (record.targetKind !== undefined) return record.targetKind;\n return record.recipientMatcher.kind === \"exactEmail\" ? \"email\" : record.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : record.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : \"bearer\";\n}\n\n/** Report retention for bearer shares; only node-enforced targets are revokeable. */\nexport async function revokeShare(input: {\n readonly record: SenderShareRecord;\n /** Optional durable store; successful revocation is persisted before return. */\n readonly records?: SenderShareRecordStorage;\n readonly adapter?: ShareRevocationAdapter;\n readonly scope?: \"direct\" | \"ancestor\";\n readonly now?: () => Date;\n}): Promise<ShareRevocationResult> {\n const target = targetKind(input.record);\n if (target === \"bearer\") return { state: \"retention-only\", target, reason: \"bearer-capability-cannot-be-revoked\" };\n if (input.adapter === undefined) return { state: \"unsupported\", target, reason: \"node revocation authority is required\", code: \"unsupported-target\" };\n const scope = input.scope ?? \"direct\";\n const delegationCid = scope === \"ancestor\" ? input.record.ownerDelegationCid : input.record.enforcementDelegationCid;\n if (delegationCid === undefined) return { state: \"unsupported\", target, reason: \"share has no node-enforced delegation receipt\", code: \"unsupported-target\" };\n await input.adapter.revokeDelegation({ delegationCid, scope });\n const revokedAt = (input.now?.() ?? new Date()).toISOString();\n if (input.records !== undefined) await input.records.put({ ...input.record, revokedAt });\n return { state: \"revoked\", target: target as \"recipientDid\" | \"email\" | \"emailDomain\", delegationCid, revokedAt };\n}\n\nexport interface ShareHistoryView {\n readonly shareId: string;\n readonly target: string;\n readonly recipient?: string;\n readonly expiresAt: string;\n readonly revoked: boolean;\n readonly link?: string;\n}\n\nfunction redactRecord(record: SenderShareRecord, revealLink: boolean, link?: string): ShareHistoryView {\n const matcher = record.recipientMatcher;\n const revealedLink = revealLink ? link ?? record.link : undefined;\n return {\n shareId: record.shareId,\n target: matcher.kind === \"exactEmail\" ? \"email\" : matcher.kind === \"emailDomain\" ? \"email-domain\" : matcher.kind === \"recipientDid\" ? \"recipient-did\" : \"bearer\",\n ...(matcher.kind === \"exactEmail\" ? { recipient: matcher.value } : matcher.kind === \"emailDomain\" ? { recipient: `*@${matcher.value}` } : matcher.kind === \"recipientDid\" ? { recipient: matcher.value } : {}),\n expiresAt: record.expiresAt,\n revoked: record.revokedAt !== undefined,\n ...(revealedLink === undefined ? {} : { link: revealedLink }),\n };\n}\n\nexport async function listShares(storage: SenderShareRecordStorage): Promise<readonly ShareHistoryView[]> {\n const records = await storage.list();\n return records.map((record) => redactRecord(record, false));\n}\n\nexport async function showShare(input: { readonly storage: SenderShareRecordStorage; readonly shareId: string; readonly revealLink?: boolean; readonly link?: string }): Promise<ShareHistoryView> {\n const record = await input.storage.get(input.shareId);\n if (record === undefined) throw new Error(\"share not found\");\n return redactRecord(record, input.revealLink === true, input.link);\n}\n","import type { PublishedShare } from \"./publish.js\";\n\nexport interface LegacyShareReader<T> {\n read(link: string): Promise<T>;\n}\n\nexport interface LegacyMigrationResult<T> {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly legacy: true;\n readonly migrated: PublishedShare;\n readonly value: T;\n}\n\nexport function isLegacyShareLink(value: string): boolean {\n return value.startsWith(\"tc1:\");\n}\n\n/** Modern commands never call this function implicitly. */\nexport async function receiveLegacyShare<T>(link: string, reader: LegacyShareReader<T>): Promise<T> {\n if (!isLegacyShareLink(link)) throw new Error(\"legacy link must use tc1:\");\n return reader.read(link);\n}\n\n/** Read tc1, then explicitly re-mint through the modern publisher. */\nexport async function migrateShare<T>(input: {\n readonly link: string;\n readonly reader: LegacyShareReader<T>;\n readonly publish: (value: T) => Promise<PublishedShare>;\n}): Promise<LegacyMigrationResult<T>> {\n const value = await receiveLegacyShare(input.link, input.reader);\n return { protocol: \"tinycloud-share\", version: 1, legacy: true, value, migrated: await input.publish(value) };\n}\n","import { ed25519, x25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport {\n canonicalize,\n ed25519PublicKeyFromDidKey,\n fromBase64Url,\n signCompactUcanAuthorization,\n toBase64Url,\n verifyCompactUcanAuthorization,\n type ShareEnvelopeV2,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport type { ShareAuthorizationAdapter, ShareAuthorizedContent, ShareAuthorizationResult } from \"./authorization.js\";\nimport { SHARE_V2_PROTOCOL } from \"./protocol.js\";\n\nexport interface ShareNodeTrust {\n readonly invitationKid: string;\n readonly invitationPublicKey: Uint8Array;\n}\n\nexport interface SharePresentationMaterial {\n readonly holderDid: string;\n readonly credential: string;\n readonly credentialDigest?: string;\n readonly holderBinding: Record<string, unknown>;\n readonly proof: Record<string, unknown>;\n readonly sign?: (bytes: Uint8Array) => Promise<Uint8Array>;\n readonly email?: string;\n /** Exact v3 credential claim returned by the verified holder ceremony. */\n readonly claim?: Record<string, unknown>;\n /** Exact v3 presentation returned by the verified holder ceremony. */\n readonly presentation?: Record<string, unknown>;\n}\n\nexport interface SharePolicyChallenge {\n readonly challengeId: string;\n readonly nonce: string;\n readonly expiresAt: string;\n readonly enforcerDid?: string;\n readonly action: string;\n readonly requestBodyDigest: string;\n readonly [key: string]: unknown;\n}\n\nexport interface ShareRecipientClientOptions {\n readonly nodeOrigin: string;\n readonly trustedNode: ShareNodeTrust;\n readonly holderDid: string;\n readonly envelope: ShareEnvelopeV2 | ShareEnvelopeV3;\n readonly fetchFn?: typeof fetch;\n readonly buildPresentation?: (input: { readonly challenge: SharePolicyChallenge; readonly envelope: ShareEnvelopeV2 | ShareEnvelopeV3; readonly policy: Record<string, unknown> }) => Promise<SharePresentationMaterial>;\n readonly sign?: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport interface SharePolicySession {\n readonly sessionId: string;\n readonly expiresAt: string;\n readonly actions: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n}\n\nconst DOMAIN = SHARE_V2_PROTOCOL.challengeDomain;\nconst PRESENTATION_DOMAIN = SHARE_V2_PROTOCOL.sessionDomain;\nconst SESSION_DOMAIN = SHARE_V2_PROTOCOL.sessionDomain;\nconst INVOCATION_DOMAIN = SHARE_V2_PROTOCOL.invocationDomain;\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n return value as Record<string, unknown>;\n}\n\nfunction bytes(value: unknown, label: string): Uint8Array {\n if (typeof value !== \"string\" || !/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(`${label} is invalid`);\n const decoded = fromBase64Url(value);\n if (decoded.length !== 64 || toBase64Url(decoded) !== value) throw new Error(`${label} is invalid`);\n return decoded;\n}\n\nasync function digest(value: unknown): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(canonicalize(value)))));\n}\n\nasync function digestText(value: string): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value))));\n}\n\nasync function digestBytes(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n\nfunction trustedPublicKey(value: ShareNodeTrust): Uint8Array {\n if (!(value.invitationPublicKey instanceof Uint8Array) || value.invitationPublicKey.length !== 32) {\n throw new Error(\"share node trust key is invalid\");\n }\n return value.invitationPublicKey;\n}\n\nasync function verifyWrapped(value: unknown, key: \"challenge\" | \"session\", domain: string, trust: ShareNodeTrust): Promise<Record<string, unknown>> {\n const wrapper = object(value, `${key} response`);\n if (Object.keys(wrapper).length !== 2 || !Object.hasOwn(wrapper, key) || !Object.hasOwn(wrapper, \"proof\")) throw new Error(`${key} response is invalid`);\n const artifact = object(wrapper[key], `${key} artifact`);\n const proof = object(wrapper.proof, `${key} proof`);\n if (proof.alg !== \"EdDSA\" || proof.kid !== trust.invitationKid) throw new Error(`${key} proof is invalid`);\n if (!ed25519.verify(bytes(proof.signature, `${key} signature`), new TextEncoder().encode(`${domain}${canonicalize(artifact)}`), trustedPublicKey(trust))) throw new Error(`${key} proof is invalid`);\n return artifact;\n}\n\nfunction nativeAction(action: string): string {\n return action === \"list\" ? \"tinycloud.kv/list\" : action === \"edit\" ? \"tinycloud.kv/put\" : \"tinycloud.kv/get\";\n}\n\nfunction uiAction(action: unknown): \"read\" | \"list\" | \"edit\" {\n return action === \"tinycloud.kv/list\" ? \"list\" : action === \"tinycloud.kv/put\" ? \"edit\" : \"read\";\n}\n\nfunction selectedAction(envelope: ShareEnvelopeV2): string {\n return envelope.actions.includes(\"list\") ? \"tinycloud.kv/list\" : envelope.actions.includes(\"edit\") ? \"tinycloud.kv/put\" : \"tinycloud.kv/get\";\n}\n\nfunction hex(value: Uint8Array): string {\n return [...value].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction canonicalHashHex(value: string): string {\n return hex(sha256(new TextEncoder().encode(canonicalize(value))));\n}\n\nasync function aesGcmDecrypt(key: Uint8Array, blob: Uint8Array): Promise<Uint8Array> {\n if (key.length !== 32 || blob.length < 28) throw new Error(\"encrypted content is malformed\");\n const cryptoKey = await crypto.subtle.importKey(\"raw\", key as unknown as BufferSource, \"AES-GCM\", false, [\"decrypt\"]);\n return new Uint8Array(await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: blob.slice(0, 12) as unknown as BufferSource }, cryptoKey, blob.slice(12) as unknown as BufferSource));\n}\n\nasync function aesGcmEncrypt(key: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {\n if (key.length !== 32) throw new Error(\"encrypted content key is malformed\");\n const nonce = crypto.getRandomValues(new Uint8Array(12));\n const cryptoKey = await crypto.subtle.importKey(\"raw\", key as unknown as BufferSource, \"AES-GCM\", false, [\"encrypt\"]);\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: nonce as unknown as BufferSource }, cryptoKey, plaintext as unknown as BufferSource));\n const output = new Uint8Array(nonce.length + ciphertext.length);\n output.set(nonce);\n output.set(ciphertext, nonce.length);\n return output;\n}\n\ninterface V3InlineEncryptedEnvelope {\n readonly v: 1;\n readonly networkId: string;\n readonly alg: \"x25519-aes256gcm/v1\";\n readonly keyVersion: number;\n readonly encryptedSymmetricKey: string;\n readonly encryptedSymmetricKeyHash: string;\n readonly ciphertext: string;\n readonly metadata?: Readonly<Record<string, string>>;\n}\n\nfunction parseV3InlineEncryptedEnvelope(bytes: Uint8Array, expected: ShareEnvelopeV3): V3InlineEncryptedEnvelope {\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)); } catch { throw new Error(\"encrypted content envelope is malformed\"); }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"encrypted content envelope is malformed\");\n const record = value as Record<string, unknown>;\n const allowed = [\"v\", \"networkId\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"metadata\"];\n if (Object.keys(record).some((key) => !allowed.includes(key))\n || record.v !== 1 || record.networkId !== expected.encryptionNetwork\n || record.alg !== \"x25519-aes256gcm/v1\" || record.keyVersion !== expected.contentSource.keyVersion\n || typeof record.encryptedSymmetricKey !== \"string\" || typeof record.encryptedSymmetricKeyHash !== \"string\"\n || record.encryptedSymmetricKeyHash !== expected.contentSource.encryptedSymmetricKeyDigestHex\n || record.encryptedSymmetricKeyHash !== canonicalHashHex(record.encryptedSymmetricKey)\n || typeof record.ciphertext !== \"string\"\n || record.metadata !== undefined && (record.metadata === null || typeof record.metadata !== \"object\" || Array.isArray(record.metadata) || Object.values(record.metadata).some((entry) => typeof entry !== \"string\"))) {\n throw new Error(\"encrypted content envelope binding is invalid\");\n }\n return record as unknown as V3InlineEncryptedEnvelope;\n}\n\nasync function verifyDetachedResponse(response: Response, trust: ShareNodeTrust): Promise<void> {\n let value: unknown;\n try { value = await response.clone().json(); } catch { throw new Error(\"share read response is invalid\"); }\n const record = object(value, \"share read response\");\n const proof = object(record.proof, \"share read detached proof\");\n if (proof.alg !== \"EdDSA\" || proof.kid !== trust.invitationKid) throw new Error(\"share read detached proof is invalid\");\n const unsigned = { ...record };\n delete unsigned.proof;\n if (!ed25519.verify(bytes(proof.signature, \"share read signature\"), new TextEncoder().encode(`${SHARE_V2_PROTOCOL.readResponseDomain}${canonicalize(unsigned)}`), trustedPublicKey(trust))) throw new Error(\"share read detached proof is invalid\");\n}\n\nasync function post(fetchFn: typeof fetch, origin: string, path: string, body: unknown): Promise<unknown> {\n const response = await fetchFn(new URL(path, origin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(body) });\n if (!response.ok) throw new Error(\"share authority rejected the request\");\n return response.json();\n}\n\nexport class ShareRecipientClient {\n private readonly fetchFn: typeof fetch;\n private session: SharePolicySession | undefined;\n private signer: ((bytes: Uint8Array) => Promise<Uint8Array>) | undefined;\n private nativeSigner: ((bytes: Uint8Array) => Promise<Uint8Array>) | undefined;\n private holderProof: Record<string, unknown> | undefined;\n private v3Authorization: string | undefined;\n private v3ContentKey: Uint8Array | undefined;\n private v3ContentEnvelope: V3InlineEncryptedEnvelope | undefined;\n\n constructor(private readonly options: ShareRecipientClientOptions) {\n this.fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);\n this.signer = options.sign;\n }\n\n async beginChallenge(envelope: ShareEnvelopeV2): Promise<SharePolicyChallenge> {\n const authority = envelope.ownerAuthority;\n if (authority === undefined) throw new Error(\"addressed owner authority is required\");\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const target = object(outer.target, \"owner authority target\");\n const outerResource = object(outer.resource, \"owner authority resource\");\n const source = object(outer.contentSource, \"owner authority content source\");\n if (!Array.isArray(outer.actions) || outer.actions.length === 0 || outer.actions.some((value) => typeof value !== \"string\")) throw new Error(\"owner authority outer envelope actions are invalid\");\n const actions = [...outer.actions] as string[];\n const action = selectedAction(envelope);\n const challengeBody = { envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), enforcementDelegation: enforcement, outerEnvelope: outer, contentSource: source, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(target.origin), nodeAudience: String(target.nodeAudience), action, actions, resource: String(outerResource.path) };\n const requestBodyDigest = await digest(challengeBody);\n const challenge = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/challenges\", { ...challengeBody, requestBodyDigest }), \"challenge\", DOMAIN, this.options.trustedNode) as unknown as SharePolicyChallenge;\n if (challenge.type !== \"TinyCloudSharePolicyChallenge\" || challenge.version !== 2 || challenge.challengeId.length < 16 || challenge.nonce.length < 16 || challenge.shareCid !== authority.shareCid || challenge.shareId !== envelope.shareId || challenge.registrationCid !== authority.registrationCid || challenge.envelopeCid !== authority.envelopeCid || challenge.policyCid !== challengeBody.policyCid || challenge.delegationCid !== envelope.delegationCid || challenge.enforcementDelegationCid !== enforcement.cid || canonicalize(challenge.contentSource) !== canonicalize(source) || challenge.contentSourceDigest !== challengeBody.contentSourceDigest || challenge.requestBodyDigest !== requestBodyDigest || challenge.holderDid !== this.options.holderDid || challenge.targetOrigin !== challengeBody.targetOrigin || challenge.nodeAudience !== challengeBody.nodeAudience || challenge.action !== action || canonicalize(challenge.actions) !== canonicalize(actions) || challenge.resource !== challengeBody.resource || !Number.isFinite(Date.parse(challenge.expiresAt)) || Date.parse(challenge.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound challenge\");\n return challenge;\n }\n\n private async establish(envelope: ShareEnvelopeV2): Promise<SharePolicySession> {\n const authority = envelope.ownerAuthority;\n if (authority === undefined) throw new Error(\"addressed owner authority is required\");\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const target = object(outer.target, \"owner authority target\");\n const outerResource = object(outer.resource, \"owner authority resource\");\n const source = object(outer.contentSource, \"owner authority content source\");\n if (!Array.isArray(outer.actions) || outer.actions.length === 0 || outer.actions.some((value) => typeof value !== \"string\")) throw new Error(\"owner authority outer envelope actions are invalid\");\n const actions = [...outer.actions] as string[];\n const action = selectedAction(envelope);\n const challengeBody = { envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), enforcementDelegation: enforcement, outerEnvelope: outer, contentSource: source, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(target.origin), nodeAudience: String(target.nodeAudience), action, actions, resource: String(outerResource.path) };\n const requestBodyDigest = await digest(challengeBody);\n const challenge = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/challenges\", { ...challengeBody, requestBodyDigest }), \"challenge\", DOMAIN, this.options.trustedNode) as unknown as SharePolicyChallenge;\n if (challenge.type !== \"TinyCloudSharePolicyChallenge\" || challenge.version !== 2 || challenge.challengeId === undefined || challenge.nonce === undefined || challenge.shareCid !== authority.shareCid || challenge.shareId !== envelope.shareId || challenge.registrationCid !== authority.registrationCid || challenge.envelopeCid !== authority.envelopeCid || challenge.policyCid !== challengeBody.policyCid || challenge.delegationCid !== envelope.delegationCid || challenge.enforcementDelegationCid !== enforcement.cid || challenge.requestBodyDigest !== requestBodyDigest || canonicalize(challenge.contentSource) !== canonicalize(source) || challenge.contentSourceDigest !== challengeBody.contentSourceDigest || challenge.holderDid !== this.options.holderDid || challenge.targetOrigin !== challengeBody.targetOrigin || challenge.nodeAudience !== challengeBody.nodeAudience || challenge.action !== action || canonicalize(challenge.actions) !== canonicalize(actions) || challenge.resource !== challengeBody.resource || !Number.isFinite(Date.parse(challenge.expiresAt)) || Date.parse(challenge.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound challenge\");\n if (this.options.buildPresentation === undefined) throw new Error(\"share presentation builder is required\");\n const material = await this.options.buildPresentation({ challenge, envelope, policy: {} });\n this.holderProof = material.proof;\n this.signer = material.sign;\n this.nativeSigner = material.sign;\n if (this.signer === undefined) throw new Error(\"share holder signer is required\");\n const presentation = {\n type: \"TinyCloudSharePolicyPresentation\", version: 2, challengeId: challenge.challengeId, nonce: challenge.nonce,\n shareCid: authority.shareCid, shareId: envelope.shareId, delegationCid: envelope.delegationCid,\n policyCid: challengeBody.policyCid, contentSource: source, contentSourceDigest: challengeBody.contentSourceDigest,\n holderDid: material.holderDid, targetOrigin: challengeBody.targetOrigin, nodeAudience: challengeBody.nodeAudience,\n ...(challenge.enforcerDid === undefined ? {} : { enforcerDid: challenge.enforcerDid }), credentialDigest: material.credentialDigest ?? await digestText(material.credential),\n action, actions, resource: challengeBody.resource, requestBodyDigest,\n issuedAt: new Date().toISOString(), expiresAt: challenge.expiresAt, jti: toBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n };\n const presentationProof = { alg: \"EdDSA\", kid: `${material.holderDid}#${material.holderDid.slice(\"did:key:\".length)}`, signature: toBase64Url(await this.signer(new TextEncoder().encode(`${PRESENTATION_DOMAIN}${canonicalize(presentation)}`))) };\n const session = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/session\", { challengeId: challenge.challengeId, nonce: challenge.nonce, presentation, credential: material.credential, proof: presentationProof, holderBinding: material.holderBinding, readSignerDid: material.holderDid }), \"session\", SESSION_DOMAIN, this.options.trustedNode);\n if (session.type !== \"TinyCloudSharePolicySession\" || session.version !== 2 || typeof session.sessionId !== \"string\" || session.shareCid !== authority.shareCid || session.shareId !== envelope.shareId || session.registrationCid !== authority.registrationCid || session.envelopeCid !== authority.envelopeCid || session.policyCid !== challengeBody.policyCid || session.delegationCid !== envelope.delegationCid || session.holderDid !== this.options.holderDid || session.targetOrigin !== challengeBody.targetOrigin || session.nodeAudience !== challengeBody.nodeAudience || session.action !== action || canonicalize(session.actions) !== canonicalize(actions) || canonicalize(session.contentSource) !== canonicalize(source) || session.contentSourceDigest !== challengeBody.contentSourceDigest || session.resource !== challengeBody.resource || typeof session.expiresAt !== \"string\" || !Number.isFinite(Date.parse(session.expiresAt)) || Date.parse(session.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound session\");\n this.session = { sessionId: session.sessionId, expiresAt: session.expiresAt, actions: actions.map(uiAction), resource: { kind: envelope.resource.kind, path: String(session.resource) } };\n return this.session;\n }\n\n async authorize(envelope: ShareEnvelopeV2): Promise<ShareAuthorizedContent> {\n if (this.session === undefined) await this.establish(envelope);\n const response = await this.nativeInvoke({ action: \"get\", resource: envelope.resource });\n if (!response.ok) throw new Error(\"share recipient read was rejected\");\n const value = object(await response.json(), \"share read response\");\n const expectedAction = nativeAction(\"read\");\n if (\n value.type !== \"TinyCloudShareInvokeResponse\" ||\n value.version !== 2 ||\n value.action !== expectedAction ||\n value.resource !== envelope.resource.path ||\n typeof value.content !== \"string\" ||\n typeof value.bodyDigest !== \"string\" ||\n !/^[A-Za-z0-9_-]{43}$/.test(value.bodyDigest) ||\n !Object.hasOwn(value, \"proof\")\n ) throw new Error(\"share read response is invalid\");\n const content = fromBase64Url(value.content);\n if (await digestBytes(content) !== value.bodyDigest) throw new Error(\"share read response integrity is invalid\");\n return { bytes: content, bodyDigest: value.bodyDigest, contentSourceDigest: envelope.contentSourceDigest, binding: { shareId: envelope.shareId, delegationCid: envelope.delegationCid, authorityMaterialHandle: envelope.authorityMaterialHandle, authorityMaterialDigest: envelope.authorityMaterialDigest, resource: { kind: envelope.resource.kind, path: value.resource }, action: value.action }, proof: { response: value, detached: value.proof } };\n }\n\n async establishPolicySession(): Promise<SharePolicySession> {\n if (this.session !== undefined) return this.session;\n const envelope = this.options.envelope;\n if (envelope.version === 3) return this.establishV3(envelope);\n return this.establish(envelope);\n }\n\n private async establishV3(envelope: ShareEnvelopeV3): Promise<SharePolicySession> {\n if (this.options.buildPresentation === undefined) throw new Error(\"share presentation builder is required\");\n const challengeResponse = await this.fetchFn(new URL(\"/share/v3/policy/challenges\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: envelope.policyCid, recipientDid: this.options.holderDid, requestedCapabilities: envelope.policy.capabilityCeiling }),\n });\n if (!challengeResponse.ok) throw new Error(`v3 policy challenge rejected (${challengeResponse.status})`);\n const challenge = object(await challengeResponse.json(), \"v3 policy challenge\");\n if (typeof challenge.challengeId !== \"string\" || typeof challenge.nonce !== \"string\" || challenge.policyCid !== envelope.policyCid || challenge.recipientDid !== this.options.holderDid) throw new Error(\"v3 policy challenge binding mismatch\");\n const material = await this.options.buildPresentation({\n challenge: challenge as unknown as SharePolicyChallenge,\n envelope,\n policy: envelope.policy as unknown as Record<string, unknown>,\n });\n if (material.sign === undefined || material.claim === undefined || material.presentation === undefined) throw new Error(\"v3 ceremony requires a recipient signer, claim, and presentation\");\n const delegationResponse = await this.fetchFn(new URL(\"/share/v3/policy/delegations\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: material.claim, presentation: material.presentation }),\n });\n if (!delegationResponse.ok) throw new Error(`v3 policy delegation rejected (${delegationResponse.status})`);\n const delegation = object(await delegationResponse.json(), \"v3 policy delegation\");\n if (delegation.admitted !== true || typeof delegation.sessionCid !== \"string\" || typeof delegation.authorization !== \"string\") throw new Error(\"v3 policy delegation response is not admitted\");\n const compact = verifyCompactUcanAuthorization(delegation.authorization, delegation.sessionCid);\n const fact = compact.payload.fct[0];\n if (compact.payload.aud !== this.options.holderDid\n || fact.profile !== \"policy-session-ucan/v1\"\n || fact.policyCid !== envelope.policyCid\n || fact.recipientDid !== this.options.holderDid\n || fact.policyDelegationCid !== envelope.policyRoot.cid\n || fact.enforcementDelegationCid !== envelope.enforcementRoot.cid\n || compact.payload.prf.length !== 2\n || compact.payload.prf[0] !== envelope.policyRoot.cid\n || compact.payload.prf[1] !== envelope.enforcementRoot.cid\n || compact.payload.exp - compact.payload.nbf > 60) throw new Error(\"v3 policy delegation signed binding mismatch\");\n const imported = await this.fetchFn(new URL(\"/delegate\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { Authorization: delegation.authorization } });\n if (!imported.ok) throw new Error(`ordinary delegation import rejected (${imported.status})`);\n this.signer = material.sign;\n this.v3Authorization = delegation.authorization;\n this.session = { sessionId: delegation.sessionCid, expiresAt: new Date(compact.payload.exp * 1000).toISOString(), actions: envelope.actions, resource: envelope.resource };\n return this.session;\n }\n\n /** Decrypt a v3 KV value through a fresh recipient-signed decrypt invocation. */\n async decryptV3Content(bytes: Uint8Array): Promise<{ readonly bytes: Uint8Array; readonly mediaType: string }> {\n const envelope = this.options.envelope;\n const signer = this.nativeSigner ?? this.signer;\n if (envelope.version !== 3 || this.session === undefined || this.v3Authorization === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n const encrypted = parseV3InlineEncryptedEnvelope(bytes, envelope);\n const receiverPrivateKey = crypto.getRandomValues(new Uint8Array(32));\n const receiverPublicKey = toBase64Url(x25519.getPublicKey(receiverPrivateKey));\n const receiverPublicKeyHash = canonicalHashHex(receiverPublicKey);\n const body = { type: \"tinycloud.encryption.decrypt/v1\", targetNode: envelope.target.nodeAudience, networkId: encrypted.networkId, alg: encrypted.alg, keyVersion: encrypted.keyVersion, encryptedSymmetricKey: encrypted.encryptedSymmetricKey, encryptedSymmetricKeyHash: encrypted.encryptedSymmetricKeyHash, receiverPublicKey, receiverPublicKeyHash };\n const bodyHash = hex(sha256(new TextEncoder().encode(canonicalize(body))));\n const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);\n const now = Math.floor(Date.now() / 1000);\n const invocation = await signCompactUcanAuthorization({\n issuerDid: this.options.holderDid,\n audienceDid: envelope.target.nodeAudience,\n attenuation: { [encrypted.networkId]: { \"tinycloud.encryption/decrypt\": [{}] } },\n facts: [{ type: body.type, targetNode: body.targetNode, networkId: body.networkId, bodyHash, encryptedSymmetricKeyHash: body.encryptedSymmetricKeyHash, receiverPublicKeyHash, alg: body.alg, keyVersion: body.keyVersion }],\n proofs: [session.cid],\n notBefore: now,\n expiresAt: Math.min(now + 60, session.payload.exp),\n nonce: toBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n sign: signer,\n });\n try {\n const response = await this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/json\", \"content-type\": \"application/json\", Authorization: invocation.authorization }, body: JSON.stringify(body) });\n if (!response.ok) throw new Error(`v3 decrypt invocation rejected (${response.status})`);\n const value = object(await response.json(), \"v3 decrypt response\");\n const allowed = [\"type\", \"targetNode\", \"networkId\", \"invocationCid\", \"encryptedSymmetricKeyHash\", \"receiverPublicKeyHash\", \"wrappedKey\", \"alg\", \"keyVersion\", \"requestHash\", \"nodeId\", \"nodeSignature\"];\n if (Object.keys(value).length !== allowed.length || Object.keys(value).some((key) => !allowed.includes(key))\n || value.type !== \"tinycloud.encryption.decrypt-result/v1\" || value.targetNode !== body.targetNode || value.nodeId !== body.targetNode\n || value.networkId !== body.networkId || value.invocationCid !== invocation.cid\n || value.encryptedSymmetricKeyHash !== body.encryptedSymmetricKeyHash || value.receiverPublicKeyHash !== receiverPublicKeyHash\n || value.alg !== body.alg || value.keyVersion !== body.keyVersion\n || value.requestHash !== hex(sha256(new TextEncoder().encode(`${invocation.cid}${bodyHash}`)))\n || typeof value.wrappedKey !== \"string\" || typeof value.nodeSignature !== \"string\") throw new Error(\"v3 decrypt response binding is invalid\");\n const unsigned = { ...value };\n delete unsigned.nodeSignature;\n const signature = fromBase64Url(value.nodeSignature);\n if (signature.length !== 64 || !ed25519.verify(signature, new TextEncoder().encode(canonicalize(unsigned)), ed25519PublicKeyFromDidKey(body.targetNode), { zip215: false })) throw new Error(\"v3 decrypt response signature is invalid\");\n const wrapped = fromBase64Url(value.wrappedKey);\n if (wrapped.length < 60) throw new Error(\"v3 wrapped content key is malformed\");\n const shared = x25519.getSharedSecret(receiverPrivateKey, wrapped.slice(0, 32));\n const symmetricKey = await aesGcmDecrypt(shared, wrapped.slice(32));\n shared.fill(0);\n if (symmetricKey.length !== 32) throw new Error(\"v3 content key is malformed\");\n const plaintext = await aesGcmDecrypt(symmetricKey, fromBase64Url(encrypted.ciphertext));\n this.v3ContentKey?.fill(0);\n this.v3ContentKey = symmetricKey;\n this.v3ContentEnvelope = encrypted;\n return { bytes: plaintext, mediaType: encrypted.metadata?.contentType ?? envelope.metadata.mediaType ?? \"application/octet-stream\" };\n } finally {\n receiverPrivateKey.fill(0);\n }\n }\n\n /** Re-encrypt edited v3 content with the admitted content key. */\n async encryptV3Content(bytes: Uint8Array, mediaType: string): Promise<Uint8Array> {\n if (this.options.envelope.version !== 3 || this.v3ContentKey === undefined || this.v3ContentEnvelope === undefined) throw new Error(\"v3 content must be decrypted before it can be saved\");\n return new TextEncoder().encode(canonicalize({ ...this.v3ContentEnvelope, ciphertext: toBase64Url(await aesGcmEncrypt(this.v3ContentKey, bytes)), metadata: { ...(this.v3ContentEnvelope.metadata ?? {}), contentType: mediaType } }));\n }\n\n async resumeWithProof(envelope: ShareEnvelopeV2, resumeToken: string, proof: unknown): Promise<ShareAuthorizedContent> {\n const material = object(proof, \"share authorization proof\");\n const presentation = object(material.presentation, \"share presentation\");\n const presentationProof = object(material.presentationProof, \"share presentation proof\");\n const nonce = material.nonce;\n const credential = material.credential;\n const holderDid = material.holderDid;\n const holderBinding = material.holderBinding;\n if (typeof nonce !== \"string\" || typeof credential !== \"string\" || typeof holderDid !== \"string\" || holderDid !== this.options.holderDid || typeof holderBinding !== \"object\" || holderBinding === null || presentationProof.alg !== \"EdDSA\" || typeof presentationProof.signature !== \"string\") throw new Error(\"share authorization proof is incomplete\");\n const value = object(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/session\", { challengeId: resumeToken, nonce, presentation, credential, proof: presentationProof, holderBinding, readSignerDid: holderDid }), \"share policy session\");\n const session = await verifyWrapped(value, \"session\", SESSION_DOMAIN, this.options.trustedNode);\n const authority = envelope.ownerAuthority;\n if (authority === undefined || session.type !== \"TinyCloudSharePolicySession\" || session.version !== 2 || typeof session.sessionId !== \"string\" || session.shareCid !== authority.shareCid || session.shareId !== envelope.shareId || session.registrationCid !== authority.registrationCid || session.envelopeCid !== authority.envelopeCid || session.delegationCid !== envelope.delegationCid || typeof session.resource !== \"string\" || typeof session.expiresAt !== \"string\") throw new Error(\"share authority returned an unbound session\");\n const policyCid = envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\";\n const actions = [...new Set(envelope.actions.map(nativeAction))].sort();\n if (\n session.policyCid !== policyCid ||\n session.holderDid !== this.options.holderDid ||\n session.targetOrigin !== envelope.target.origin ||\n session.nodeAudience !== envelope.target.nodeAudience ||\n session.action !== selectedAction(envelope) ||\n canonicalize(session.actions) !== canonicalize(actions) ||\n canonicalize(session.contentSource) !== canonicalize(envelope.contentSource) ||\n session.contentSourceDigest !== envelope.contentSourceDigest ||\n !Number.isFinite(Date.parse(session.expiresAt)) ||\n Date.parse(session.expiresAt) <= Date.now()\n ) throw new Error(\"share authority returned an unbound session\");\n this.session = { sessionId: session.sessionId, expiresAt: session.expiresAt, actions: actions.map(uiAction), resource: { kind: envelope.resource.kind, path: String(session.resource) } };\n this.holderProof = presentationProof;\n this.signer ??= this.options.sign;\n return this.authorize(envelope);\n }\n\n async nativeInvoke(request: { readonly action: string; readonly resource?: Record<string, unknown>; readonly body?: number[]; readonly bodyDigest?: number[]; readonly ifMatch?: string; readonly contentType?: string }): Promise<Response> {\n if (this.session === undefined) throw new Error(\"share policy session is required\");\n const envelope = this.options.envelope;\n if (envelope.version === 3) return this.nativeInvokeV3(request, envelope);\n if (envelope.ownerAuthority === undefined || this.signer === undefined || this.holderProof === undefined) throw new Error(\"share holder signer is required\");\n const authority = envelope.ownerAuthority;\n const action = request.action === \"list\" ? \"tinycloud.kv/list\" : request.action === \"put\" ? \"tinycloud.kv/put\" : request.action === \"metadata\" ? \"tinycloud.kv/metadata\" : \"tinycloud.kv/get\";\n const resource = typeof request.resource?.path === \"string\" ? request.resource.path : this.session.resource.path;\n const actions = [...new Set(this.session.actions.map(nativeAction).concat(action === \"tinycloud.kv/metadata\" ? [action] : []))].sort();\n const bodyBytes = request.body === undefined ? undefined : Uint8Array.from(request.body);\n const bodyDigest = bodyBytes === undefined ? undefined : toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bodyBytes)));\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const invocationBase = { type: \"TinyCloudShareReadInvocation\", version: 2, sessionId: this.session.sessionId, envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), contentSource: outer.contentSource, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(object(outer.target, \"owner authority target\").origin), nodeAudience: String(object(outer.target, \"owner authority target\").nodeAudience), action, actions, resource, ...(action === \"tinycloud.kv/list\" ? { limit: 100 } : {}), ...(bodyDigest === undefined ? {} : { bodyDigest, ifMatch: request.ifMatch, contentType: request.contentType }), issuedAt: new Date().toISOString(), expiresAt: new Date(Math.min(Date.now() + 60_000, Date.parse(this.session.expiresAt))).toISOString(), jti: toBase64Url(crypto.getRandomValues(new Uint8Array(16))) };\n const requestBodyDigest = await digest(invocationBase);\n const invocation = { ...invocationBase, requestBodyDigest };\n const proof = { ...this.holderProof, signature: toBase64Url(await this.signer(new TextEncoder().encode(`${INVOCATION_DOMAIN}${canonicalize(invocation)}`))) };\n const signedRequest = { sessionId: this.session.sessionId, envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), contentSource: outer.contentSource, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, nodeAudience: String(object(outer.target, \"owner authority target\").nodeAudience), action, actions, resource, requestBodyDigest, invocation, proof };\n const response = await this.fetchFn(new URL(\"/share/v2/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/vnd.tinycloud.share+json\", \"content-type\": \"application/vnd.tinycloud.share+json\" }, body: JSON.stringify({ request: signedRequest, ...(action === \"tinycloud.kv/list\" ? { limit: 100 } : {}), ...(bodyBytes === undefined ? {} : { body: toBase64Url(bodyBytes), bodyDigest, ifMatch: request.ifMatch, contentType: request.contentType }) }) });\n if (response.ok) await verifyDetachedResponse(response, this.options.trustedNode);\n return response;\n }\n\n private async nativeInvokeV3(request: { readonly action: string; readonly resource?: Record<string, unknown>; readonly body?: number[]; readonly ifMatch?: string; readonly contentType?: string }, envelope: ShareEnvelopeV3): Promise<Response> {\n const signer = this.nativeSigner ?? this.signer;\n if (this.session === undefined || this.v3Authorization === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);\n if (session.payload.aud !== this.options.holderDid) throw new Error(\"v3 session recipient mismatch\");\n const action = request.action === \"list\" ? \"tinycloud.kv/list\" : request.action === \"put\" ? \"tinycloud.kv/put\" : request.action === \"metadata\" ? \"tinycloud.kv/metadata\" : \"tinycloud.kv/get\";\n const path = typeof request.resource?.path === \"string\" ? request.resource.path.replace(/^\\//, \"\").replace(/\\/$/, \"\") : envelope.resource.path;\n const capability = envelope.policy.capabilityCeiling.find((candidate) => candidate.kind === \"kv\");\n if (capability === undefined || !capability.actions.includes(action as never)) throw new Error(\"v3 requested capability is not in the signed policy\");\n const marker = \"/kv/\";\n const split = capability.resource.indexOf(marker);\n if (split < 0) throw new Error(\"v3 KV resource is invalid\");\n const root = capability.resource.slice(split + marker.length).replace(/\\/$/, \"\");\n if (path !== root && !(capability.selector === \"prefix\" && path.startsWith(`${root}/`))) throw new Error(\"v3 KV request is outside the signed selector\");\n const resource = `${capability.resource.slice(0, split + marker.length)}${path}`;\n const now = Math.floor(Date.now() / 1000);\n const invocation = await signCompactUcanAuthorization({ issuerDid: this.options.holderDid, audienceDid: envelope.target.nodeAudience, attenuation: { [resource]: { [action]: [{ type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: resource }] } }, facts: [{ type: \"tinycloud.policy.invocation/v1\", policyCid: envelope.policyCid, sessionCid: session.cid }], proofs: [session.cid], notBefore: now, expiresAt: Math.min(now + 60, session.payload.exp), nonce: toBase64Url(crypto.getRandomValues(new Uint8Array(16))), sign: signer });\n const headers = new Headers({ accept: \"application/json\", Authorization: invocation.authorization });\n let body: BodyInit | undefined;\n if (action === \"tinycloud.kv/put\") {\n if (request.body === undefined) throw new Error(\"v3 KV put requires bytes\");\n body = Uint8Array.from(request.body) as BodyInit;\n headers.set(\"content-type\", request.contentType ?? \"application/octet-stream\");\n if (request.ifMatch !== undefined) headers.set(\"if-match\", request.ifMatch);\n }\n return this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers, ...(body === undefined ? {} : { body }) });\n }\n}\n\nexport function createAddressedAuthorization(input: Omit<ShareRecipientClientOptions, \"envelope\" | \"buildPresentation\"> & { readonly buildPresentation?: (input: { readonly challenge: SharePolicyChallenge; readonly envelope: ShareEnvelopeV2; readonly policy: Record<string, unknown> }) => Promise<SharePresentationMaterial> }): ShareAuthorizationAdapter<ShareAuthorizedContent> {\n const { buildPresentation, ...options } = input;\n const client = (envelope: ShareEnvelopeV2): ShareRecipientClient => new ShareRecipientClient({\n ...options,\n envelope,\n ...(buildPresentation === undefined ? {} : { buildPresentation: ({ challenge, envelope: candidate, policy }) => buildPresentation({ challenge, envelope: candidate as ShareEnvelopeV2, policy }) }),\n });\n return {\n async begin({ envelope, method }): Promise<ShareAuthorizationResult<ShareAuthorizedContent>> {\n const current = client(envelope);\n if (input.buildPresentation !== undefined) return { state: \"ready\", value: await current.authorize(envelope) };\n const challenge = await current.beginChallenge(envelope);\n return { state: \"authorization-required\", method, resumeToken: challenge.challengeId };\n },\n async resume({ envelope, method, resumeToken, proof }): Promise<ShareAuthorizationResult<ShareAuthorizedContent>> {\n if (proof === undefined) return { state: \"authorization-required\", method, resumeToken };\n return { state: \"ready\", value: await client(envelope).resumeWithProof(envelope, resumeToken, proof) };\n },\n async verifyResult({ envelope, value, proof }) {\n try {\n const wrapper = object(proof, \"share read proof\");\n const response = object(wrapper.response, \"share read response proof\");\n const envelopeAction = nativeAction(\"read\");\n if (\n response.type !== \"TinyCloudShareInvokeResponse\" ||\n response.version !== 2 ||\n response.action !== envelopeAction ||\n response.resource !== envelope.resource.path ||\n typeof response.bodyDigest !== \"string\" ||\n response.bodyDigest !== value.bodyDigest ||\n response.bodyDigest !== await digestBytes(value.bytes)\n ) return false;\n const detached = object(wrapper.detached, \"share read detached proof\");\n if (detached.alg !== \"EdDSA\" || detached.kid !== input.trustedNode.invitationKid) return false;\n const unsigned = { ...response };\n delete unsigned.proof;\n return ed25519.verify(bytes(detached.signature, \"share read signature\"), new TextEncoder().encode(`${SHARE_V2_PROTOCOL.readResponseDomain}${canonicalize(unsigned)}`), trustedPublicKey(input.trustedNode));\n } catch {\n return false;\n }\n },\n };\n}\n","import { canonicalize, toBase64Url } from \"@tinycloud/share-envelope\";\n\nexport const SHARE_V2_PROTOCOL = Object.freeze({\n challengeDomain: \"xyz.tinycloud.share/policy-challenge/v2\\0\",\n sessionDomain: \"xyz.tinycloud.share/policy-session/v2\\0\",\n invocationDomain: \"xyz.tinycloud.share/invocation/v2\\0\",\n readResponseDomain: \"xyz.tinycloud.share/read-response/v2\\0\",\n holderBindingDomain: \"xyz.tinycloud.share/email-claim-holder-binding/v1\\0\",\n holderBindingName: \"holderBinding\",\n holderBindingType: \"TinyCloudEmailClaimHolderBinding\",\n holderBindingVersion: 1,\n} as const);\n\nexport async function createShareV2HolderBindingArtifact(input: {\n readonly holderDid: string;\n readonly message: Record<string, unknown>;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}): Promise<Record<string, unknown>> {\n const jcs = canonicalize(input.message);\n const signedBytes = new TextEncoder().encode(`${SHARE_V2_PROTOCOL.holderBindingDomain}${jcs}`);\n const signature = await input.sign(signedBytes);\n return {\n name: SHARE_V2_PROTOCOL.holderBindingName,\n domain: SHARE_V2_PROTOCOL.holderBindingDomain,\n signerDid: input.holderDid,\n message: input.message,\n jcs,\n messageDigest: await digestText(jcs),\n signedBytesDigest: await digestBytes(signedBytes),\n signatureDigest: await digestBytes(signature),\n signature: {\n alg: \"EdDSA\",\n kid: `${input.holderDid}#${input.holderDid.slice(\"did:key:\".length)}`,\n value: toBase64Url(signature),\n },\n };\n}\n\nasync function digestText(value: string): Promise<string> {\n return digestBytes(new TextEncoder().encode(value));\n}\n\nasync function digestBytes(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n","import type { ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\nimport { authorizeShare, type ShareAuthorizationAdapter, type ShareAuthorizationResult } from \"./authorization.js\";\nimport { normalizeShareTarget, type TargetPublishInput, type TargetPublishOutcome, type ShareTarget } from \"./targets.js\";\n\nexport interface SharePolicyPublishAdapter<TPublishOutcome = TargetPublishOutcome> {\n publishPolicy(input: TargetPublishInput & { readonly notify: boolean }): Promise<TPublishOutcome>;\n claim(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: \"email-claim\" | \"email-otp\";\n readonly resumeToken?: string;\n readonly proof?: unknown;\n }): Promise<ShareAuthorizationResult<unknown>>;\n}\n\n/** Canonical exact-email/domain publication seam shared by web and CLI. */\nexport async function publishPolicyShare<TPublishOutcome = TargetPublishOutcome>(input: {\n readonly source: Uint8Array;\n readonly filename: string;\n readonly target: Extract<ShareTarget, { readonly kind: \"email\" | \"emailDomain\" }>;\n readonly expiresAt: Date;\n readonly origin: string;\n readonly notify?: boolean;\n readonly adapter: SharePolicyPublishAdapter<TPublishOutcome>;\n}): Promise<TPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n if (target.kind !== \"email\" && target.kind !== \"emailDomain\") throw new TypeError(\"policy publication requires an email target\");\n return input.adapter.publishPolicy({\n source: input.source.slice(),\n filename: input.filename,\n target,\n expiresAt: input.expiresAt,\n origin: input.origin,\n notify: input.notify ?? false,\n });\n}\n\n/** Claim, OTP, or resume a policy share without exposing mailbox material. */\nexport async function claimShare(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly adapter: SharePolicyPublishAdapter;\n readonly method?: \"email-claim\" | \"email-otp\";\n readonly resumeToken?: string;\n readonly proof?: unknown;\n}): Promise<ShareAuthorizationResult<unknown>> {\n return input.adapter.claim({\n envelope: input.envelope,\n method: input.method ?? \"email-claim\",\n ...(input.resumeToken === undefined ? {} : { resumeToken: input.resumeToken }),\n ...(input.proof === undefined ? {} : { proof: input.proof }),\n });\n}\n\n/** Explicit name for noninteractive callers resuming a previously returned step. */\nexport async function resumeShareAuthorization<T>(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: \"openkey-device\" | \"email-claim\" | \"email-otp\";\n readonly resumeToken: string;\n readonly proof?: unknown;\n readonly adapter: ShareAuthorizationAdapter<T>;\n}): Promise<ShareAuthorizationResult<T>> {\n return authorizeShare(input);\n}\n"],"mappings":"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","names":["util","object","objectUtil","errorUtil","errorMap","base64","ctx","result","issues","elements","processed","base","result","r","ZodFirstPartyTypeKind","import_ed25519","coerce","encode","length","i","j","decode","bytes","code","digest","equals","base","cid","baseCache","digestBytes","cache","bytes","ed25519","cid","ED25519_VERIFY_OPTS","bytes","ed25519","ed25519","ED25519_VERIFY_OPTS","KEY_LENGTH","cid","record","code","bytes","base","cid","targetKind","digestBytes","text","import_ed25519","code","bytes","base","record","bytes","import_ed25519","import_sha256","empty","equals","coerce","base","encode","length","i","j","decode","src","_brrp__multiformats_scope_baseX","base_x_default","Encoder","bytes","Decoder","or","ComposedDecoder","Codec","from","encode","decode","baseX","base_x_default","coerce","createAlphabetIdx","rfc4648","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","base58btc","baseX","base58flickr","encode_1","encode","MSB","REST","MSBALL","INT","decode","read","MSB$1","REST$1","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","_brrp_varint","varint_default","decode","code","varint_default","encodeTo","encodingLength","create","code","digest","encodingLength","bytes","encodeTo","Digest","decode","coerce","equals","format","base","bytes","toStringV0","baseCache","base58btc","toStringV1","base32","cache","baseCache","cid","CID","_CID","code","bytes","DAG_PB_CODE","SHA_256_CODE","digest","create","equals","base","format","encodeCID","cidSymbol","decode","coerce","digestBytes","Digest","length","parseCIDtoBytes","base58btc","base32","base36","toStringV0","toStringV1","encodingLength","encodeTo","code","SHA256_CODE","CID","code","create","base32","didKeyFromEd25519PublicKey","base58btc","length","value","record","didKeyFromEd25519PublicKey","bytes","base58btc","sha256","import_ed25519","ENVELOPE_DOMAIN","import_sha256","digest","bytes","cid","import_ed25519","isCanonicalHttpsOrigin","assertObject","record","fromB64","base58btc","record","record","digest","targetKind","record","import_ed25519","import_sha256","object","bytes","digest","digestText","digestBytes","record"]}
1
+ {"version":3,"sources":["../src/index.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../../share-envelope/src/cid.ts","../../share-envelope/src/bearer-delegation.ts","../../../node_modules/multiformats/src/bases/base64.ts","../../share-envelope/src/bytes.ts","../../share-envelope/src/didkey.ts","../../share-envelope/src/bearer.ts","../../share-envelope/src/schema.ts","../../share-envelope/src/aead.ts","../../share-envelope/src/jcs.ts","../../share-envelope/src/compact-ucan.ts","../../share-envelope/src/sign.ts","../../share-envelope/src/link.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../src/receive.ts","../src/publish.ts","../src/addressed.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../src/authorization.ts","../src/targets.ts","../src/addressed-publish.ts","../src/policy-authority.ts","../src/cache.ts","../src/delivery.ts","../src/history.ts","../src/notify.ts","../src/lifecycle.ts","../src/legacy.ts","../src/recipient.ts","../src/protocol.ts","../src/policy.ts"],"sourcesContent":["export { DEFAULT_MAX_CONTENT_BLOB_BYTES, DEFAULT_MAX_SEALED_BLOB_BYTES, SHARE_RESULT_VERSION, inspectShare, receiveShare, ShareReceiveError, toShareErrorInfo, verifyBearerEnvelope, type ShareReceiveAuthorizationRequired, type ShareErrorCode, type ShareErrorInfo, type ShareFetchOptions, type ShareInspection, type ShareMetadata, type ShareReceiveOutcome, type ShareReceiveResult, type VerifyBearerEnvelopeOptions, type SharePolicyAuthority, type SharePolicyEvidence } from \"./receive.js\";\nexport { DEFAULT_SHARE_LIFETIME_MS, SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, SHARE_SEALED_OVERHEAD, publishShare, redactPublishedShare, SharePublishError, type PublishedShare, type PublishedShareMetadata, type SharePublishErrorCode, type SharePublishOptions, type SharePublishTarget, type ShareUpload, type ShareUploadAuthorization, type ShareUploadInput, type ShareUploadResult } from \"./publish.js\";\nexport { parseAddressedEnvelope, type ParsedAddressedEnvelope } from \"./addressed.js\";\nexport { publishAddressedShare } from \"./addressed-publish.js\";\nexport type { AddressedPublishAuthority, AddressedSharePublishOptions } from \"./addressed-publish.js\";\nexport { createRegisteredPolicyAuthority } from \"./policy-authority.js\";\nexport type { RegisteredPolicyAuthorityOptions } from \"./policy-authority.js\";\nexport { checkBearerDelegation, resourceUriCovers, requiredResourceUri, type CheckBearerDelegationOptions, type DelegationCheckResult } from \"@tinycloud/share-envelope\";\nexport { canonicalize, fromBase64Url, toBase64Url } from \"@tinycloud/share-envelope\";\nexport { MemoryShareCache } from \"./cache.js\";\nexport type { ShareCache, ShareCacheEntry, ShareCacheKey, ShareCacheMetadata } from \"./cache.js\";\nexport { createDelegatedShareKey, restoreDelegatedShareKey, createPolicyEnforcementDelegation, canonicalOwnerSharePolicy, computeOwnerShareRegistrationCid, validateOwnerSharePolicyRegistration, validateOwnerSharePolicyRegistrationBytes, OWNER_SHARE_REGISTRATION_DOMAIN, MAX_CONTENT_BYTES } from \"./owner-policy.js\";\nexport type { OwnerDelegationReceipt, OwnerDelegationPermission, CreateOwnerDelegationParams, OwnerShareAction, OwnerShareDecryption, OwnerShareMatcher, OwnerSharePolicyV2, DelegatedShareKey, SignedDelegation, RegisterOwnerSharePolicyParams, OwnerSharePolicyRegistration, OwnerSharePolicyRegistrationReceipt } from \"./owner-policy.js\";\nexport { SHARE_DELIVERY_AUTHORIZATION_DOMAIN, validateShareDeliveryAuthorizationBytes, shareDeliveryTrustedKid } from \"./delivery.js\";\nexport type { ShareDeliveryAuthorizationRequest, ShareDeliveryAuthorization, ShareDeliveryAuthorizationReceipt, ValidateShareDeliveryAuthorizationExpected } from \"./delivery.js\";\nexport { MemorySenderShareRecordStorage, MemorySenderShareKeyStorage, SenderShareStore, historyRecordForPublishedShare } from \"./history.js\";\nexport { MemoryEncryptedShareHistoryStorage, EncryptedSenderShareHistory } from \"./history.js\";\nexport type { SenderShareRecord, SenderShareRecordStorage, SenderShareKeyStorage, SenderShareRevocationScope, EncryptedShareHistoryStorage } from \"./history.js\";\nexport { authorizeShare, authorizationMethodForTarget } from \"./authorization.js\";\nexport type { ShareAuthorizationMethod, ShareAuthorizationRequired, ShareAuthorizationDenied, ShareAuthorizationReady, ShareAuthorizationResult, ShareAuthorizationAdapter, ShareAuthorizedContent } from \"./authorization.js\";\nexport { notifyShare, recipientMatchesShareRecord, ShareNotifyError } from \"./notify.js\";\nexport type { ShareNotifyState, ShareNotifyResult, ShareNotifyInput, ShareDeliveryAdapter } from \"./notify.js\";\nexport { listShares, showShare, revokeShare } from \"./lifecycle.js\";\nexport type { ShareHistoryView, ShareRevocationResult, ShareRevocationAdapter } from \"./lifecycle.js\";\nexport { isLegacyShareLink, receiveLegacyShare, migrateShare } from \"./legacy.js\";\nexport type { LegacyShareReader, LegacyMigrationResult } from \"./legacy.js\";\nexport { normalizeShareTarget, publishTargetShare, targetAuthorizationMethod } from \"./targets.js\";\nexport type { ShareTarget, TargetPublishInput, TargetPublishOutcome, TargetPublishAdapter } from \"./targets.js\";\nexport { ShareRecipientClient, createAddressedAuthorization } from \"./recipient.js\";\nexport type { ShareNodeTrust, SharePolicyChallenge, SharePresentationMaterial, ShareRecipientClientOptions, SharePolicySession } from \"./recipient.js\";\nexport { SHARE_V2_PROTOCOL, createShareV2HolderBindingArtifact } from \"./protocol.js\";\nexport { publishPolicyShare, claimShare, resumeShareAuthorization } from \"./policy.js\";\nexport type { SharePolicyPublishAdapter } from \"./policy.js\";\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\nconst SHA256_CODE = 0x12;\n\n/**\n * Compute the CID of a single raw block, per sharing-viewer-and-registry.md §6.3:\n * CIDv1, codec raw (0x55), sha2-256, canonical lowercase base32 (\"bafkr…\").\n * Hashes the exact bytes given — no chunking, no UnixFS/dag-pb wrapping.\n */\nexport async function computeCid(bytes: Uint8Array): Promise<string> {\n // Normalize cross-realm typed arrays (notably jsdom's TextEncoder output)\n // before multiformats performs its instanceof check.\n const digest = createDigest(SHA256_CODE, sha256(new Uint8Array(bytes)));\n return CID.create(1, raw.code, digest).toString();\n}\n\n/**\n * Is `cidString` a canonical CIDv1/raw/sha2-256 lowercase-base32 CID *string*\n * (no bytes check — see `verifyCid` for that)? Used by the envelope schema's\n * `content.cid` pointer so a non-canonical or non-raw CID never gets signed.\n */\nexport function isCanonicalRawCid(cidString: string): boolean {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n return (\n cid.version === 1 &&\n cid.code === raw.code &&\n cid.multihash.code === SHA256_CODE &&\n cid.toString() === cidString\n );\n}\n\n/**\n * Verify that `cidString` is the canonical CIDv1/raw/sha2-256 base32 CID of `bytes`.\n * Returns false for any mismatch: wrong hash, wrong version/codec, or a\n * non-canonical string form of the right CID.\n */\nexport async function verifyCid(\n bytes: Uint8Array,\n cidString: string,\n): Promise<boolean> {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n if (cid.version !== 1 || cid.code !== raw.code) return false;\n // Require the canonical lowercase base32 string form.\n if (cid.toString() !== cidString) return false;\n return (await computeCid(bytes)) === cidString;\n}\n","/**\n * Bearer-slice delegation: ONE module for both sides so create and verify\n * cannot drift — the CLI mints with `mintBearerDelegation`, the viewer checks\n * with `checkBearerDelegation`, and both share `bearerResourceUri` and\n * `READ_ABILITIES` (this module began life as the stage-3 viewer's\n * delegation.ts and moved here when the stage-4 create flow needed the same\n * conventions from node).\n *\n * --- The check (viewer spec §1 \"Mode detection\") -------------------------\n *\n * The UI must derive its mode from EFFECTIVE CAPABILITIES, never from the\n * envelope's unsigned hints — and never from the mere fact that the envelope\n * decrypted. `checkBearerDelegation` decodes AND cryptographically verifies\n * the envelope's embedded delegation (a UCAN/JWT-shaped token: three\n * base64url segments, header.payload.signature, capabilities in the\n * payload's `att` array) and fails closed unless ALL of the following hold:\n *\n * 1. the token parses (three non-empty base64url segments; header and\n * payload are JSON objects; the signature segment decodes),\n * 2. the header's `alg` is EdDSA and the signature VERIFIES (strict\n * RFC 8032 ed25519) over the JWS signing input against the key the\n * token's own `iss` did:key names — the token is internally\n * consistent: `iss` really signed exactly these claims,\n * 3. the token carries a REQUIRED integer `exp` (UCAN epoch-seconds\n * convention) that has not passed, and — if present — an `nbf` that\n * has (expiry-less tokens are rejected outright),\n * 4. the delegatee (`aud`) DID EQUALS the did:key derived from the\n * envelope's embedded bearer sessionJwk — otherwise the key the link\n * carries cannot use this delegation at all,\n * 5. some capability grants the read ability (`BEARER_READ_ABILITY`,\n * the SAME single constant the mint emits) on a CANONICAL resource\n * URI that covers the envelope's signed target\n * (origin + spaceId + resource.path) exactly or via a `/*` prefix on\n * a segment boundary — see `resourceUriCovers`.\n *\n * WHAT THE CHECK DOES **NOT** DO — and must never be presented as doing:\n * verification of a delegation CHAIN against an out-of-band trust root\n * (proof/`prf` chains, issuer authority over the resource, revocation).\n * In the bearer slice the delegation is SELF-ISSUED — internal consistency\n * is everything there is to verify. In the policy / recipient-DID slices\n * this becomes full chain verification against the owner/issuer roots, and\n * the NODE repeats it at read time as the real enforcement boundary. This\n * check makes the viewer honest — a link whose delegation is unsigned,\n * expired, or cannot authorize its own embedded key is rejected before any\n * \"read access\" claim is shown — it does not make the link authorized.\n *\n * --- The mint (bearer slice ONLY) ----------------------------------------\n *\n * In the bearer slice there is no owner node: possession of the link IS the\n * authority, so `mintBearerDelegation` self-issues a minimal, internally\n * consistent token — a fresh ed25519 issuer signs (real EdDSA over the JWS\n * signing input) a delegation whose `aud` is the link's embedded session\n * did:key and whose single capability grants read over the bearer resource\n * URI. It satisfies exactly the structure `checkBearerDelegation` validates.\n * In the policy / recipient-DID slices this mint is REPLACED by a real\n * owner-signed delegation chain that the node verifies at read time; nothing\n * about the check side changes.\n */\nimport { ed25519 } from \"@noble/curves/ed25519\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport {\n didKeyFromEd25519PublicKey,\n ed25519PublicKeyFromDidKey,\n} from \"./didkey.js\";\nimport { getBearerSessionJwk } from \"./bearer.js\";\nimport {\n isCanonicalHttpsOrigin,\n isCanonicalResourcePath,\n type ShareEnvelope,\n} from \"./schema.js\";\n\n/** The ONE read ability of the bearer slice — minted AND checked (no drift). */\nexport const BEARER_READ_ABILITY = \"kv/get\";\n\n/**\n * Read abilities accepted for the single-file bearer viewer (spec §1 table).\n * Derived from — never listed separately from — the single mint constant, so\n * the set the checker accepts is PROVABLY identical to what the mint emits.\n */\nexport const READ_ABILITIES: ReadonlySet<string> = new Set([BEARER_READ_ABILITY]);\n\n/**\n * Strict ed25519 verification (RFC 8032, not ZIP-215) — same interop\n * rationale as sign.ts: agree byte-for-byte with a strict Rust verifier.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\nexport type DelegationCheckResult =\n | { ok: true; delegateeDid: string }\n | { ok: false; detail: string };\n\ninterface UcanCapability {\n readonly with: string;\n readonly can: string;\n}\n\n/** Strict base64url segment → JSON value, or null on ANY failure. */\nfunction decodeJsonSegment(segment: string): unknown {\n try {\n const bytes = fromBase64Url(segment);\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n return null;\n }\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseCapability(value: unknown): UcanCapability | null {\n if (!isJsonObject(value)) return null;\n const withUri = value[\"with\"];\n const can = value[\"can\"];\n if (typeof withUri !== \"string\" || withUri.length === 0) return null;\n if (typeof can !== \"string\" || can.length === 0) return null;\n return { with: withUri, can };\n}\n\n/**\n * Parse a resource URI into a canonical https origin plus CANONICAL path\n * segments (schema.ts grammar: no `.`/`..` segments, no `//`, no backslash,\n * no percent-encoded separator aliases, no control chars). Returns null —\n * fail closed — for anything else, so a URI carrying a traversal alias can\n * never even reach the comparison below.\n */\nfunction parseCanonicalResourceUri(\n uri: string,\n): { origin: string; segments: readonly string[] } | null {\n const match = /^(https:\\/\\/[^/\\\\]+)\\/(.*)$/.exec(uri);\n if (match === null) return null;\n const [, origin, path] = match as unknown as [string, string, string];\n if (!isCanonicalHttpsOrigin(origin)) return null;\n if (!isCanonicalResourcePath(path)) return null;\n return { origin, segments: path.split(\"/\") };\n}\n\n/**\n * Does a granted resource URI cover the target resource URI? BOTH sides must\n * parse under the canonical grammar (anything non-canonical — `..` segments,\n * `//`, encoded separators — is rejected outright, never normalized-and-\n * accepted). Coverage is exact segment-wise equality, or a `<prefix>/*`\n * grant whose segments are a strict prefix of the target's segments — i.e.\n * only on canonical segment boundaries: `foo/*` covers `foo/bar`, never\n * `foobar` and never `foo/../bar`. Nothing looser (no mid-segment globs,\n * no scheme-relative tricks) — fail closed.\n */\nexport function resourceUriCovers(granted: string, target: string): boolean {\n const targetParsed = parseCanonicalResourceUri(target);\n if (targetParsed === null) return false;\n const wildcard = granted.endsWith(\"/*\");\n const grantedParsed = parseCanonicalResourceUri(\n wildcard ? granted.slice(0, -2) : granted,\n );\n if (grantedParsed === null) return false;\n if (grantedParsed.origin !== targetParsed.origin) return false;\n const grantedSegments = grantedParsed.segments;\n const targetSegments = targetParsed.segments;\n const prefixMatches = grantedSegments.every(\n (segment, index) => segment === targetSegments[index],\n );\n if (!prefixMatches) return false;\n return wildcard\n ? targetSegments.length > grantedSegments.length\n : targetSegments.length === grantedSegments.length;\n}\n\n/**\n * The canonical bearer-slice resource URI: `<origin>/<spaceId>/<path>`.\n * THE single convention shared by mint (CLI) and check (viewer) — it must be\n * aligned with the node's authoritative resource grammar before real\n * node-gated reads ship in the policy/recipient-DID slices.\n */\nexport function bearerResourceUri(\n origin: string,\n spaceId: string,\n path: string,\n): string {\n return `${origin}/${spaceId}/${path}`;\n}\n\n/** The resource URI a delegation must cover for this envelope's signed target. */\nexport function requiredResourceUri(envelope: ShareEnvelope): string {\n const { origin, spaceId, resource } = envelope.target;\n return bearerResourceUri(origin, spaceId, resource.path);\n}\n\nexport interface CheckBearerDelegationOptions {\n /** Clock override (epoch MILLISECONDS) for exp/nbf; defaults to Date.now(). */\n now?: () => number;\n}\n\n/**\n * Bearer-binding check described in the module header: structural decode +\n * cryptographic verification of the token's own EdDSA signature, expiry, and\n * not-before. Returns a failure `detail` suitable for logging/diagnostics —\n * NOT for claiming more than internal consistency (see module header for\n * what chain verification is deferred to the node in later slices).\n */\nexport function checkBearerDelegation(\n envelope: ShareEnvelope,\n options: CheckBearerDelegationOptions = {},\n): DelegationCheckResult {\n // 1. Derive the did:key the embedded bearer key actually is. Only Ed25519\n // OKP session keys are supported in this slice (the did:key helper is\n // ed25519-only); anything else fails closed rather than guessing.\n let sessionDid: string;\n try {\n const jwk = getBearerSessionJwk(envelope);\n if (jwk.kty !== \"OKP\" || jwk.crv !== \"Ed25519\") {\n return {\n ok: false,\n detail: `unsupported bearer session key family ${jwk.kty}/${jwk.crv}; this build binds Ed25519 keys only`,\n };\n }\n const publicKey = fromBase64Url(jwk.x);\n const privateKey = fromBase64Url(jwk.d);\n if (publicKey.length !== 32 || privateKey.length !== 32) {\n return { ok: false, detail: \"bearer session key must contain 32-byte Ed25519 coordinates\" };\n }\n const derivedPublicKey = ed25519.getPublicKey(privateKey);\n if (!derivedPublicKey.every((byte, index) => byte === publicKey[index])) {\n return { ok: false, detail: \"bearer session private and public keys do not match\" };\n }\n sessionDid = didKeyFromEd25519PublicKey(publicKey);\n } catch (error) {\n return {\n ok: false,\n detail: `could not derive did:key from embedded session key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n\n // 2. Structural token decode: header.payload.signature.\n const segments = envelope.delegation.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) {\n return { ok: false, detail: \"delegation is not a three-segment JWT-shaped token\" };\n }\n const [headerSegment, payloadSegment, signatureSegment] = segments as [\n string,\n string,\n string,\n ];\n const header = decodeJsonSegment(headerSegment);\n if (!isJsonObject(header)) {\n return { ok: false, detail: \"delegation header is not a base64url JSON object\" };\n }\n const payload = decodeJsonSegment(payloadSegment);\n if (!isJsonObject(payload)) {\n return { ok: false, detail: \"delegation payload is not a base64url JSON object\" };\n }\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = fromBase64Url(signatureSegment);\n if (signatureBytes.length === 0) {\n return { ok: false, detail: \"delegation signature segment is empty\" };\n }\n } catch {\n return { ok: false, detail: \"delegation signature segment is not base64url\" };\n }\n\n // 3. Cryptographic verification: the token must be EdDSA-signed by the key\n // its own `iss` did:key names (the mint signs for real — an unsigned or\n // tampered token is rejected, never waved through on shape alone).\n if (header[\"alg\"] !== \"EdDSA\") {\n return {\n ok: false,\n detail: `delegation alg must be EdDSA, got ${JSON.stringify(header[\"alg\"])}`,\n };\n }\n const issuer = payload[\"iss\"];\n if (typeof issuer !== \"string\" || issuer.length === 0) {\n return { ok: false, detail: \"delegation payload has no issuer (iss) DID\" };\n }\n let issuerPublicKey: Uint8Array;\n try {\n issuerPublicKey = ed25519PublicKeyFromDidKey(issuer);\n } catch (error) {\n return {\n ok: false,\n detail: `delegation issuer is not an ed25519 did:key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n let signatureValid: boolean;\n try {\n signatureValid = ed25519.verify(\n signatureBytes,\n utf8Bytes(`${headerSegment}.${payloadSegment}`),\n issuerPublicKey,\n ED25519_VERIFY_OPTS,\n );\n } catch {\n signatureValid = false;\n }\n if (!signatureValid) {\n return { ok: false, detail: \"delegation signature does not verify against iss\" };\n }\n\n // 4. Time bounds, fail closed: `exp` is REQUIRED (UCAN epoch seconds — an\n // expiry-less delegation is rejected outright) and `nbf` is enforced\n // when present.\n const nowMs = options.now?.() ?? Date.now();\n const exp = payload[\"exp\"];\n if (typeof exp !== \"number\" || !Number.isSafeInteger(exp) || exp <= 0) {\n return { ok: false, detail: \"delegation has no valid expiry (exp) claim\" };\n }\n if (nowMs >= exp * 1000) {\n return { ok: false, detail: \"delegation is expired\" };\n }\n const nbf = payload[\"nbf\"];\n if (nbf !== undefined) {\n if (typeof nbf !== \"number\" || !Number.isSafeInteger(nbf)) {\n return { ok: false, detail: \"delegation nbf claim is not a valid time\" };\n }\n if (nowMs < nbf * 1000) {\n return { ok: false, detail: \"delegation is not yet valid (nbf)\" };\n }\n }\n\n // 5. Delegatee binding: aud must BE the embedded key's did:key.\n const audience = payload[\"aud\"];\n if (typeof audience !== \"string\" || audience.length === 0) {\n return { ok: false, detail: \"delegation payload has no audience (aud) DID\" };\n }\n if (audience !== sessionDid) {\n return {\n ok: false,\n detail: \"delegation audience is not the link's embedded session key\",\n };\n }\n\n // 6. Capability coverage: some `att` entry must grant read on a CANONICAL\n // resource URI covering the envelope's signed target.\n const att = payload[\"att\"];\n if (!Array.isArray(att) || att.length === 0) {\n return { ok: false, detail: \"delegation payload has no capabilities (att)\" };\n }\n const required = requiredResourceUri(envelope);\n const granted = att\n .map(parseCapability)\n .some(\n (capability) =>\n capability !== null &&\n READ_ABILITIES.has(capability.can) &&\n resourceUriCovers(capability.with, required),\n );\n if (!granted) {\n return {\n ok: false,\n detail: `delegation grants no read capability covering ${required}`,\n };\n }\n\n return { ok: true, delegateeDid: audience };\n}\n\nexport interface MintBearerDelegationOptions {\n /** ed25519 private key (32-byte seed) of the self-issued bearer issuer. */\n issuerPrivateKey: Uint8Array;\n /** The link's embedded session did:key — the delegatee (`aud`). */\n audienceDid: string;\n /** Resource the capability covers — build it with `bearerResourceUri`. */\n resourceUri: string;\n /** Delegation expiry, epoch SECONDS (UCAN `exp` convention). */\n expiresAtSeconds: number;\n}\n\n/**\n * Mint the bearer slice's self-issued delegation token (see module header:\n * a stand-in for a real owner-signed chain, replaced in later slices).\n * JWT-shaped: base64url(header) \".\" base64url(payload) \".\" base64url(sig),\n * signed EdDSA (ed25519) over the UTF-8 signing input `header.payload` by\n * the issuer key, so the token is internally consistent — `iss` really did\n * sign it — even though no node verifies the chain in this slice.\n */\nexport function mintBearerDelegation(options: MintBearerDelegationOptions): string {\n const { issuerPrivateKey, audienceDid, resourceUri, expiresAtSeconds } = options;\n if (!audienceDid.startsWith(\"did:\")) {\n throw new TypeError(`audienceDid must be a DID, got ${audienceDid}`);\n }\n if (resourceUri.length === 0) {\n throw new TypeError(\"resourceUri must be non-empty\");\n }\n if (!Number.isSafeInteger(expiresAtSeconds) || expiresAtSeconds <= 0) {\n throw new TypeError(\n `expiresAtSeconds must be a positive integer (epoch seconds), got ${expiresAtSeconds}`,\n );\n }\n const issuerDid = didKeyFromEd25519PublicKey(\n ed25519.getPublicKey(issuerPrivateKey),\n );\n const header = { alg: \"EdDSA\", typ: \"JWT\", ucv: \"0.9.1\" };\n const payload = {\n iss: issuerDid,\n aud: audienceDid,\n att: [{ with: resourceUri, can: BEARER_READ_ABILITY }],\n prf: [],\n exp: expiresAtSeconds,\n };\n const signingInput = `${toBase64Url(utf8Bytes(JSON.stringify(header)))}.${toBase64Url(\n utf8Bytes(JSON.stringify(payload)),\n )}`;\n const signature = ed25519.sign(utf8Bytes(signingInput), issuerPrivateKey);\n return `${signingInput}.${toBase64Url(signature)}`;\n}\n","import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","import { base64url as mfBase64url } from \"multiformats/bases/base64\";\n\n/** Encode bytes as unpadded base64url (RFC 4648 §5, no multibase prefix). */\nexport function toBase64Url(bytes: Uint8Array): string {\n return mfBase64url.baseEncode(bytes);\n}\n\n/**\n * STRICT decode of unpadded base64url into bytes. Throws on characters\n * outside the alphabet, impossible lengths, non-zero trailing bits, and any\n * padded or otherwise non-canonical form: the input must re-encode to itself\n * byte-for-byte. (multiformats' baseDecode alone tolerates trailing `=`.)\n */\nexport function fromBase64Url(text: string): Uint8Array {\n const bytes = mfBase64url.baseDecode(text);\n if (mfBase64url.baseEncode(bytes) !== text) {\n // Deliberately does not echo the input — it may be key material.\n throw new TypeError(\"non-canonical base64url input\");\n }\n return bytes;\n}\n\nexport function utf8Bytes(text: string): Uint8Array {\n return new TextEncoder().encode(text);\n}\n","import { base58btc } from \"multiformats/bases/base58\";\n\n/** Multicodec varint prefix for an ed25519 public key (0xed → varint ed 01). */\nconst ED25519_MULTICODEC_PREFIX = Uint8Array.of(0xed, 0x01);\nconst PUBLIC_KEY_LENGTH = 32;\n\n/** Encode a 32-byte ed25519 public key as a did:key (multibase base58btc). */\nexport function didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== PUBLIC_KEY_LENGTH) {\n throw new TypeError(\n `ed25519 public key must be ${PUBLIC_KEY_LENGTH} bytes, got ${publicKey.length}`,\n );\n }\n const prefixed = new Uint8Array(ED25519_MULTICODEC_PREFIX.length + publicKey.length);\n prefixed.set(ED25519_MULTICODEC_PREFIX, 0);\n prefixed.set(publicKey, ED25519_MULTICODEC_PREFIX.length);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\n/** Decode a did:key back to the raw 32-byte ed25519 public key. Throws on any other DID. */\nexport function ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new TypeError(`not a did:key: ${did}`);\n }\n const multibase = did.slice(\"did:key:\".length);\n const prefixed = base58btc.decode(multibase);\n if (\n prefixed.length !== ED25519_MULTICODEC_PREFIX.length + PUBLIC_KEY_LENGTH ||\n prefixed[0] !== ED25519_MULTICODEC_PREFIX[0] ||\n prefixed[1] !== ED25519_MULTICODEC_PREFIX[1]\n ) {\n throw new TypeError(\"did:key does not encode an ed25519 public key\");\n }\n return prefixed.slice(ED25519_MULTICODEC_PREFIX.length);\n}\n","import type { SessionJwk, ShareEnvelope } from \"./schema.js\";\n\n/**\n * Extract the embedded session JWK from a bearer-target envelope\n * (blueprint §2.1 \"Embedded key\" row). Node invocation with this key is\n * stage 3/4 — this is only the envelope side.\n *\n * Throws if the envelope's authorizationTarget is not `bearerKey`; callers\n * must switch on the discriminated union first (viewer spec §1).\n */\nexport function getBearerSessionJwk(envelope: ShareEnvelope): SessionJwk {\n const target = envelope.authorizationTarget;\n if (target.kind !== \"bearerKey\") {\n throw new TypeError(\n `envelope authorizationTarget is \"${target.kind}\", not \"bearerKey\"`,\n );\n }\n return target.sessionJwk;\n}\n","import { z } from \"zod\";\n\nimport { fromBase64Url } from \"./bytes.js\";\nimport { isCanonicalRawCid } from \"./cid.js\";\n\n/**\n * ShareEnvelope schema per sharing-ux-blueprint.md §2.1, with the signed\n * typed resource selector and optional display.mode presentation hint from\n * sharing-viewer-and-registry.md §1. All objects are strict — unknown fields\n * are rejected everywhere.\n */\n\n/** Strictly-decodable unpadded base64url: alphabet, length, AND zero trailing bits. */\nfunction decodeBase64UrlOrNull(value: string): Uint8Array | null {\n try {\n return fromBase64Url(value);\n } catch {\n return null;\n }\n}\n\nconst base64UrlString = () =>\n z.string().refine((value) => decodeBase64UrlOrNull(value) !== null, {\n message: \"expected strictly-decodable unpadded base64url\",\n });\n\n/**\n * A canonical HTTPS web origin: `https://host[:non-default-port]` and nothing\n * else. No path, query, fragment, userinfo, trailing slash, default-port\n * alias (`:443`), or non-lowercase host — the string must round-trip exactly\n * through URL origin serialization. Rejects every non-https scheme\n * (http:, ftp:, file:, javascript:, …). This must byte-match what a Rust\n * verifier would accept, so it is exact-string, not \"URL-ish\".\n */\nexport function isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\" && url.origin === value;\n}\n\n/**\n * Session JWK carried by bearer-target envelopes. Strict discriminated union\n * over the asymmetric private-key families a session key can be (OKP / EC).\n * The private component (`d`) is REQUIRED — a bearer envelope without it is\n * useless — and cross-family members (`y` on OKP, `k` anywhere) are rejected,\n * as are unknown JWK members, rather than silently signed over.\n */\nconst sessionJwkCommonFields = {\n alg: z.string().min(1).optional(),\n use: z.string().min(1).optional(),\n key_ops: z.array(z.string().min(1)).optional(),\n kid: z.string().min(1).optional(),\n ext: z.boolean().optional(),\n};\n\nconst okpPrivateJwkSchema = z\n .object({\n kty: z.literal(\"OKP\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nconst ecPrivateJwkSchema = z\n .object({\n kty: z.literal(\"EC\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n y: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nexport const sessionJwkSchema = z.discriminatedUnion(\"kty\", [\n okpPrivateJwkSchema,\n ecPrivateJwkSchema,\n]);\n\nexport const policyTargetSchema = z\n .object({\n kind: z.literal(\"policy\"),\n policyCid: z.string().min(1),\n /** Canonical policy bytes, base64url-encoded (bytes are not JSON). */\n policyBytes: base64UrlString(),\n })\n .strict();\n\nexport const bearerKeyTargetSchema = z\n .object({\n kind: z.literal(\"bearerKey\"),\n sessionJwk: sessionJwkSchema,\n })\n .strict();\n\nexport const recipientDidTargetSchema = z\n .object({\n kind: z.literal(\"recipientDid\"),\n did: z.string().regex(/^did:[a-z0-9]+:.+$/, \"expected a DID\"),\n })\n .strict();\n\n/** Signed discriminated union — the target kind itself is signature-covered. */\nexport const authorizationTargetSchema = z.discriminatedUnion(\"kind\", [\n policyTargetSchema,\n bearerKeyTargetSchema,\n recipientDidTargetSchema,\n]);\n\n/**\n * THE canonical resource-path grammar — the ONE grammar shared by schema\n * validation here and capability coverage in bearer-delegation.ts (which\n * previously compared raw concatenated strings, so `shares/s/../victim.md`\n * aliased into a `shares/s/*` grant). A canonical path is \"/\"-joined\n * segments where every segment is non-empty (no `//`, no leading/trailing\n * slash) and none is `.` or `..`, and the whole string contains no\n * backslash, no ASCII control characters, and no percent-encoded\n * separator/dot aliases (%2f, %5c, %2e in any casing). Fail closed: anything\n * outside this grammar is rejected before any comparison happens.\n */\nexport function isCanonicalResourcePath(value: string): boolean {\n if (value.length === 0) return false;\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return false;\n if (/%2f|%5c|%2e/i.test(value)) return false;\n return value\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\n/** ONE canonical path segment: canonical-path rules, and no separator at all. */\nexport function isCanonicalPathSegment(value: string): boolean {\n return isCanonicalResourcePath(value) && !value.includes(\"/\");\n}\n\nexport const resourceSelectorSchema = z\n .object({\n kind: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n path: z.string().min(1),\n })\n .strict()\n .superRefine((selector, ctx) => {\n // Prefix selectors may carry ONE trailing \"/\" (folder convention);\n // the body must be canonical either way.\n const body =\n selector.kind === \"prefix\" && selector.path.endsWith(\"/\")\n ? selector.path.slice(0, -1)\n : selector.path;\n if (!isCanonicalResourcePath(body)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"path\"],\n message:\n \"expected a canonical resource path (non-empty segments, no . or .. segments, no //, no backslash, no %2f/%5c/%2e, no control chars)\",\n });\n }\n });\n\nexport const targetSchema = z\n .object({\n origin: z.string().refine(isCanonicalHttpsOrigin, {\n message: \"expected a canonical https origin (https://host[:port], nothing else)\",\n }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, {\n message:\n \"expected a single canonical path segment (spaceId joins the resource URI; separators/traversal would alias grants)\",\n }),\n resource: resourceSelectorSchema,\n })\n .strict();\n\nexport const displaySchema = z\n .object({\n senderName: z.string().optional(),\n filename: z.string().optional(),\n recipientHint: z.string().optional(),\n /**\n * Presentation preference only (viewer spec §1): may narrow, never widen;\n * capabilities always win.\n */\n mode: z.union([z.literal(\"document\"), z.literal(\"source\"), z.literal(\"folder\")]).optional(),\n })\n .strict();\n\n/**\n * BEARER-SLICE content pointer (stage 4). The shared file's bytes are sealed\n * as their OWN AEAD blob (same `seal` machinery as the envelope) and put in\n * the registry; this field points at it:\n *\n * - `cid` — CIDv1/raw/sha2-256 of the sealed content blob. The viewer\n * re-verifies fetched bytes against it (trustless), so a lying registry\n * cannot substitute content.\n * - `key` — the content blob's own 32-byte AES-256-GCM key, base64url. It\n * rides INSIDE the sealed envelope (confidential to link holders) and is\n * signature-covered like every other field (a tampered pointer fails the\n * envelope signature before any fetch). Carrying a distinct key — rather\n * than reusing the fragment key — preserves the viewer's key-hygiene\n * contract: the fragment key is still dead (zeroed) the moment the\n * envelope is decrypted.\n *\n * This is a bearer-slice mechanism: possession of the link IS the read\n * authority, so the content is fetched straight from the registry. In the\n * policy / recipient-DID slices this field is absent and the viewer instead\n * performs a capability-gated read from the node named in `target` — the\n * node, not the registry, is the enforcement boundary there.\n */\nexport const contentPointerSchema = z\n .object({\n cid: z.string().refine(isCanonicalRawCid, {\n message: \"expected a canonical CIDv1 raw sha2-256 base32 CID\",\n }),\n key: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 32, {\n message: \"expected base64url decoding to exactly 32 bytes\",\n }),\n })\n .strict();\n\nexport const signatureSchema = z\n .object({\n /** did:key of the sender's ed25519 signing key. */\n signerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/, \"expected a did:key\"),\n algorithm: z.literal(\"Ed25519\"),\n /** base64url-encoded ed25519 signature over the JCS bytes of all other fields. */\n value: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 64, {\n message: \"expected base64url decoding to exactly 64 bytes\",\n }),\n })\n .strict();\n\n/** Envelope body — every signature-covered field. */\nexport const unsignedShareEnvelopeSchema = z\n .object({\n version: z.literal(1),\n shareId: z.string().min(1),\n /** Full signed delegation chain, opaque serialized form. */\n delegation: z.string().min(1),\n authorizationTarget: authorizationTargetSchema,\n target: targetSchema,\n display: displaySchema,\n /** ISO 8601 UTC datetime. Advisory here; enforcement is the delegation's. */\n expiry: z.string().datetime(),\n /** Bearer-slice sealed-content pointer (see contentPointerSchema). */\n content: contentPointerSchema.optional(),\n })\n .strict();\n\nexport const shareEnvelopeSchema = unsignedShareEnvelopeSchema\n .extend({ signature: signatureSchema })\n .strict();\n\nexport type SessionJwk = z.infer<typeof sessionJwkSchema>;\nexport type ContentPointer = z.infer<typeof contentPointerSchema>;\nexport type PolicyTarget = z.infer<typeof policyTargetSchema>;\nexport type BearerKeyTarget = z.infer<typeof bearerKeyTargetSchema>;\nexport type RecipientDidTarget = z.infer<typeof recipientDidTargetSchema>;\nexport type AuthorizationTarget = z.infer<typeof authorizationTargetSchema>;\nexport type ResourceSelector = z.infer<typeof resourceSelectorSchema>;\nexport type ShareTarget = z.infer<typeof targetSchema>;\nexport type ShareDisplay = z.infer<typeof displaySchema>;\nexport type EnvelopeSignature = z.infer<typeof signatureSchema>;\nexport type UnsignedShareEnvelope = z.infer<typeof unsignedShareEnvelopeSchema>;\nexport type ShareEnvelope = z.infer<typeof shareEnvelopeSchema>;\n\n/** Version 2 additions shared by the browser composer and recipient SDK. */\nexport const recipientMatcherSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"exactEmail\"), value: z.string().min(3).regex(/^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"emailDomain\"), value: z.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"recipientDid\"), value: z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict(),\n z.object({ kind: z.literal(\"policyDigest\"), value: z.string().regex(/^[A-Za-z0-9_-]{43}$/) }).strict(),\n z.object({ kind: z.literal(\"bearer\") }).strict(),\n]);\n\nexport const shareActionSchema = z.union([z.literal(\"read\"), z.literal(\"list\"), z.literal(\"edit\")]);\n\n/** The source selector is shared byte-for-byte by the envelope, policy, and\n * native Node request. It deliberately describes a named operation, never\n * executable SQL or a browser-controlled URL. */\nconst kvContentSourceSchema = z.object({\n kind: z.literal(\"kv\"),\n space: z.string().min(1),\n path: z.string().min(1),\n action: z.literal(\"tinycloud.kv/get\"),\n}).strict();\nconst sqlContentSourceSchema = z.object({\n kind: z.literal(\"sql\"),\n space: z.string().min(1),\n database: z.string().min(1),\n path: z.string().min(1),\n statement: z.string().min(1),\n arguments: z.record(z.string(), z.number().int()),\n argumentsDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n action: z.literal(\"tinycloud.sql/read\"),\n}).strict();\nexport const contentSourceSchema = z.discriminatedUnion(\"kind\", [kvContentSourceSchema, sqlContentSourceSchema]);\n\nexport const v2TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n\nconst shareDecryptionSchema = z.object({\n networkId: z.string().min(1),\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\n\nconst ownerAuthoritySchema = z.object({\n registrationCid: z.string().min(1),\n shareCid: z.string().min(1),\n envelopeCid: z.string().min(1),\n enforcementDelegation: z.record(z.string(), z.unknown()),\n outerEnvelope: z.record(z.string(), z.unknown()),\n /** Node-signed registration evidence; required by trusted policy adapters. */\n registrationReceipt: z.object({\n registration: z.record(z.string(), z.unknown()),\n proof: z.record(z.string(), z.unknown()),\n }).strict().optional(),\n}).strict();\n\nexport const contentMetadataSchema = z.object({\n mediaType: z.string().min(1).max(128).optional(),\n byteLength: z.number().int().nonnegative().max(100 * 1024 * 1024).optional(),\n filename: z.string().min(1).max(255).optional(),\n encoding: z.literal(\"utf-8\").optional(),\n /** Encrypted presentation discriminator. The fixed entry point is index.html. */\n artifact: z.literal(\"html\").optional(),\n}).strict();\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: z.string().email().optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v2TargetSchema,\n delegationCid: z.string().min(1),\n authorityMaterialHandle: z.string().min(1),\n authorityMaterialDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n decryption: shareDecryptionSchema.optional(),\n contentSource: contentSourceSchema,\n contentSourceDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n authorizationTarget: authorizationTargetSchema,\n display: displaySchema,\n expiry: z.string().datetime(),\n encrypted: z.boolean(),\n content: contentPointerSchema.optional(),\n metadata: contentMetadataSchema,\n ownerAuthority: ownerAuthoritySchema.optional(),\n}).strict();\n\nfunction validateV2Invariants(value: z.infer<typeof unsignedShareEnvelopeV2BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique\" });\n if (actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be canonically ordered\" });\n if (!value.encrypted && value.recipientMatcher.kind !== \"policyDigest\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"recipientMatcher\"], message: \"safe plaintext must carry only a matcher digest\" });\n if (!value.encrypted && value.authorizationTarget.kind !== \"policy\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encrypted\"], message: \"unencrypted content requires a policy target\" });\n if (!value.encrypted && value.content !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"content\"], message: \"policy-only plaintext cannot carry content\" });\n if (value.encrypted && (value.metadata.mediaType === undefined || value.metadata.filename === undefined || value.metadata.byteLength === undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"encrypted shares must describe their content\" });\n if (!value.encrypted && Object.keys(value.metadata).length !== 0) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"policy-only plaintext cannot describe content\" });\n if (!value.encrypted && value.metadata.encoding !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"encoding\"], message: \"policy-only plaintext cannot carry content encoding\" });\n if (value.metadata.artifact === \"html\" && (!value.encrypted || value.resource.kind !== \"prefix\" || !value.actions.includes(\"read\") || !value.actions.includes(\"list\"))) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"artifact\"], message: \"html artifacts require an encrypted readable prefix\" });\n if (!value.encrypted && (value.display.senderName !== undefined || value.display.filename !== undefined || value.display.recipientHint !== undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"display\"], message: \"policy-only plaintext cannot carry display metadata\" });\n if (!value.encrypted && value.deliveryEmail !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"policy-only plaintext cannot carry delivery metadata\" });\n if (value.recipientMatcher.kind === \"exactEmail\" && value.deliveryEmail !== undefined && value.deliveryEmail !== value.recipientMatcher.value) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must match the exact matcher\" });\n if (value.recipientMatcher.kind === \"emailDomain\" && value.deliveryEmail !== undefined && value.deliveryEmail.toLowerCase().endsWith(`@${value.recipientMatcher.value}`) === false) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must belong to the matcher domain\" });\n if (value.contentSource.kind === \"kv\" && value.contentSource.action !== \"tinycloud.kv/get\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n if (value.contentSource.kind === \"sql\" && value.contentSource.action !== \"tinycloud.sql/read\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n}\n\nexport const unsignedShareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.superRefine(validateV2Invariants);\n\n// Extend the unsigned object instead of intersecting two strict objects. A\n// strict intersection rejects every valid signed envelope because each side\n// treats the other side's fields as unknown.\nexport const shareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV2Invariants);\nexport type RecipientMatcher = z.infer<typeof recipientMatcherSchema>;\nexport type ShareAction = z.infer<typeof shareActionSchema>;\nexport type ContentSource = z.infer<typeof contentSourceSchema>;\nexport type ContentMetadata = z.infer<typeof contentMetadataSchema>;\nexport type UnsignedShareEnvelopeV2 = z.infer<typeof unsignedShareEnvelopeV2Schema>;\nexport type ShareEnvelopeV2 = z.infer<typeof shareEnvelopeV2Schema>;\n\n/**\n * TC-405 addressed-share envelope. This is intentionally a separate\n * contract from v2: a v3 reader must never reinterpret a v2 policy/session\n * artifact as an ordinary delegation claim.\n */\nconst unifiedResourceSchema = z.string().refine((value) => {\n const match = /^tinycloud:\\/\\/([^/]+)\\/kv\\/(.+)$/.exec(value);\n if (match === null || /[:?#%]/.test(match[1]!)) return false;\n const path = match[2]!;\n return !path.startsWith(\"/\") && !path.endsWith(\"/\") && !path.includes(\"//\") && path.split(\"/\").every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}, { message: \"expected canonical TinyCloud KV resource\" });\nconst unifiedEncryptionNetworkSchema = z.string().refine((value) => {\n if (!value.startsWith(\"urn:tinycloud:encryption:\")) return false;\n const rest = value.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const owner = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n return owner.startsWith(\"did:\") && owner.length > 4 && network.length > 0 && !/[:/%?#\\s]/.test(network);\n}, { message: \"expected canonical TinyCloud encryption network\" });\nconst unifiedKvCapabilitySchema = z.object({\n kind: z.literal(\"kv\"),\n resource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n actions: z.array(z.union([\n z.literal(\"tinycloud.kv/get\"),\n z.literal(\"tinycloud.kv/list\"),\n z.literal(\"tinycloud.kv/metadata\"),\n z.literal(\"tinycloud.kv/put\"),\n ])).min(1),\n}).strict();\nconst unifiedEncryptionCapabilitySchema = z.object({\n kind: z.literal(\"encryption\"),\n resource: unifiedEncryptionNetworkSchema,\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\nconst unifiedCapabilitySchema = z.union([unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema]);\nconst unifiedContentSourceSchema = z.object({\n shareId: z.string().min(1),\n kvResource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n encryptedSymmetricKeyDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n keyVersion: z.number().int().positive(),\n mode: z.union([z.literal(\"mutable\"), z.literal(\"immutable\")]),\n initialCiphertextDigestHex: z.string().regex(/^[0-9a-f]{64}$/).optional(),\n}).strict();\nconst unifiedPolicySchema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v1\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n signature: z.object({ suite: z.string().min(1), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nconst unifiedRootSchema = z.object({\n cid: z.string().min(1),\n authorization: z.string().regex(/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/),\n role: z.union([z.literal(\"policy-authority\"), z.literal(\"policy-enforcement\")]),\n}).strict();\nconst attestedEnforcerBindingV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/attested-enforcer/v2\"),\n enforcerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/),\n nodeAudience: z.string().min(1),\n attestationBindingDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n issuedAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }),\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: base64UrlString() }).strict(),\n}).strict();\nconst v3TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: z.string().email().optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v3TargetSchema,\n policy: unifiedPolicySchema,\n policyCid: z.string().min(1),\n policyRoot: unifiedRootSchema,\n enforcementRoot: unifiedRootSchema,\n attestedEnforcerBinding: attestedEnforcerBindingV2Schema,\n contentSource: unifiedContentSourceSchema,\n contentSourceDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n expiry: z.string().datetime({ offset: true }),\n display: displaySchema,\n encrypted: z.literal(true),\n metadata: contentMetadataSchema,\n}).strict();\n\nfunction validateV3Invariants(value: z.infer<typeof unsignedShareEnvelopeV3BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length || actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique and canonically ordered\" });\n }\n if (value.policyRoot.role !== \"policy-authority\" || value.enforcementRoot.role !== \"policy-enforcement\") {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyRoot\", \"role\"], message: \"root roles are fixed\" });\n }\n if (value.policyCid.length === 0 || value.policyCid === value.policyRoot.cid || value.policyCid === value.enforcementRoot.cid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyCid\"], message: \"policy CID must be distinct from both roots\" });\n }\n if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encryptionNetwork\"], message: \"encryption network is not bound to the source\" });\n }\n if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.target.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"attestedEnforcerBinding\"], message: \"enforcer binding does not cover the target and share lifetime\" });\n }\n if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"content source is not bound to policy\" });\n }\n if (value.policy.signature.suite !== \"Ed25519\" || value.policy.signature.signerDid !== value.policy.ownerDid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"signature\"], message: \"policy must be signed by its owner\" });\n }\n const kvCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"kv\");\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === value.encryptionNetwork && capability.action === \"tinycloud.encryption/decrypt\");\n if (value.policy.capabilityCeiling.length !== 2 || kvCapabilities.length !== 1 || decryptCapabilities.length !== 1 || kvCapabilities[0]?.resource !== value.contentSource.kvResource || kvCapabilities[0]?.selector !== value.contentSource.selector) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"capabilityCeiling\"], message: \"policy ceiling must contain exact decrypt network\" });\n }\n}\n\nexport const unsignedShareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.superRefine(validateV3Invariants);\nexport const shareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV3Invariants);\nexport type UnifiedPolicyCapability = z.infer<typeof unifiedCapabilitySchema>;\nexport type UnifiedContentSource = z.infer<typeof unifiedContentSourceSchema>;\nexport type UnifiedPolicy = z.infer<typeof unifiedPolicySchema>;\nexport type UnifiedRoot = z.infer<typeof unifiedRootSchema>;\nexport type UnsignedShareEnvelopeV3 = z.infer<typeof unsignedShareEnvelopeV3Schema>;\nexport type ShareEnvelopeV3 = z.infer<typeof shareEnvelopeV3Schema>;\n","import { utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\n\n/**\n * Fixed protocol-label AAD, authenticated on every envelope\n * (blueprint §2.1: \"versioned protocol label\").\n */\nexport const ENVELOPE_AAD_LABEL = \"tinycloud-share-envelope-v1\";\n\n/**\n * Version byte of the sealed-blob wire format (see `seal`). Bump only with a\n * new format; verifiers must reject unknown versions.\n */\nexport const SEALED_BLOB_VERSION = 0x01;\n\nconst AAD = utf8Bytes(ENVELOPE_AAD_LABEL);\nconst KEY_LENGTH = 32;\nconst NONCE_LENGTH = 12; // 96-bit nonce, the AES-GCM standard size.\nconst TAG_LENGTH = 16; // AES-GCM authentication tag appended to the ciphertext.\nconst HEADER_LENGTH = 1; // the version byte\n\nexport interface EncryptedEnvelope {\n nonce: Uint8Array;\n ciphertext: Uint8Array;\n}\n\nfunction assertKey(key32: Uint8Array): void {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n}\n\nasync function importAesKey(\n key32: Uint8Array,\n usage: KeyUsage,\n): Promise<CryptoKey> {\n assertKey(key32);\n return globalThis.crypto.subtle.importKey(\n \"raw\",\n key32 as BufferSource,\n \"AES-GCM\",\n false,\n [usage],\n );\n}\n\n/** Generate a fresh random 32-byte AES-256-GCM key. */\nexport function generateKey(): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(KEY_LENGTH));\n}\n\nexport interface SealedEnvelope {\n /** The canonical stored block: `version(0x01) || nonce(12) || ciphertext+tag`. */\n blob: Uint8Array;\n /** CIDv1/raw/sha2-256 of `blob` — the CID that goes in the share link. */\n cid: string;\n}\n\n/**\n * Seal envelope plaintext into the ONE canonical stored-block format:\n *\n * blob = version byte (0x01) || nonce (12 bytes) || AES-256-GCM ciphertext\n * (which includes the trailing 16-byte auth tag)\n *\n * The returned CID is computed over the WHOLE blob, so a recipient holding\n * only the link (CID + key) can fetch the blob, verify the CID, and recover\n * the nonce from the blob itself. This is the only format the public\n * packaging path (and the share link) addresses; `encryptEnvelope` /\n * `decryptEnvelope` are the low-level pieces.\n */\nexport async function seal(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<SealedEnvelope> {\n const { nonce, ciphertext } = await encryptEnvelope(plaintextBytes, key32);\n const blob = new Uint8Array(HEADER_LENGTH + nonce.length + ciphertext.length);\n blob[0] = SEALED_BLOB_VERSION;\n blob.set(nonce, HEADER_LENGTH);\n blob.set(ciphertext, HEADER_LENGTH + nonce.length);\n return { blob, cid: await computeCid(blob) };\n}\n\n/**\n * Open a sealed blob produced by `seal`: check the version byte, split\n * `nonce || ciphertext`, and decrypt. Throws on unknown version, truncated\n * blobs, and any AEAD failure (wrong key / tampering).\n */\nexport async function open(\n blob: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (blob.length < HEADER_LENGTH + NONCE_LENGTH + TAG_LENGTH) {\n throw new TypeError(`sealed blob too short: ${blob.length} bytes`);\n }\n if (blob[0] !== SEALED_BLOB_VERSION) {\n throw new TypeError(`unknown sealed blob version: ${blob[0]}`);\n }\n const nonce = blob.subarray(HEADER_LENGTH, HEADER_LENGTH + NONCE_LENGTH);\n const ciphertext = blob.subarray(HEADER_LENGTH + NONCE_LENGTH);\n return decryptEnvelope(nonce, ciphertext, key32);\n}\n\n/**\n * Encrypt envelope plaintext with AES-256-GCM under a fresh random 96-bit\n * nonce, authenticating the fixed protocol-label AAD.\n *\n * Low-level: the nonce is NOT carried by the share link. Public packaging\n * must go through `seal`, which binds `nonce || ciphertext` into one\n * CID-addressed blob.\n */\nexport async function encryptEnvelope(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<EncryptedEnvelope> {\n const key = await importAesKey(key32, \"encrypt\");\n const nonce = globalThis.crypto.getRandomValues(new Uint8Array(NONCE_LENGTH));\n const ciphertext = new Uint8Array(\n await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n plaintextBytes as BufferSource,\n ),\n );\n return { nonce, ciphertext };\n}\n\n/**\n * Decrypt an AES-256-GCM envelope. Throws (Web Crypto `OperationError`) if the\n * key is wrong, the AAD does not match, or the ciphertext was tampered with.\n */\nexport async function decryptEnvelope(\n nonce: Uint8Array,\n ciphertext: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (nonce.length !== NONCE_LENGTH) {\n throw new TypeError(`nonce must be ${NONCE_LENGTH} bytes, got ${nonce.length}`);\n }\n const key = await importAesKey(key32, \"decrypt\");\n return new Uint8Array(\n await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n ciphertext as BufferSource,\n ),\n );\n}\n","/**\n * RFC 8785 (JCS) canonical JSON serialization — in-house implementation.\n *\n * Why no dependency: on any ECMA-262 engine, `JSON.stringify` of a primitive\n * already matches JCS exactly — RFC 8785 §3.2.2.3 defines number\n * serialization as ECMAScript's Number::toString, and §3.2.2.2 defines string\n * escaping as ECMAScript's JSON quoting (short escapes \\b \\t \\n \\f \\r \\\" \\\\,\n * lowercase \\u00xx for remaining control chars). So canonicalization reduces\n * to recursive property sorting by UTF-16 code units (the default JS string\n * comparison) plus rejecting values JSON cannot represent.\n */\n\nfunction isPlainRecord(value: object): value is Record<string, unknown> {\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * RFC 8785 §3.2.2.2 requires REJECTING strings that are not valid Unicode —\n * i.e. unpaired UTF-16 surrogates. `JSON.stringify` happily emits `\"\\ud800\"`\n * for a lone surrogate, but a conforming implementation in a language with\n * enforced-valid strings (Rust) errors instead, so we must too.\n */\nfunction assertNoLoneSurrogates(text: string): void {\n for (let i = 0; i < text.length; i++) {\n const unit = text.charCodeAt(i);\n if (unit >= 0xdc00 && unit <= 0xdfff) {\n throw new TypeError(\n `cannot canonicalize string with unpaired low surrogate at index ${i}`,\n );\n }\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = text.charCodeAt(i + 1); // NaN when past the end\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(\n `cannot canonicalize string with unpaired high surrogate at index ${i}`,\n );\n }\n i++; // well-formed pair — skip the low surrogate\n }\n }\n}\n\nfunction serializeString(text: string): string {\n assertNoLoneSurrogates(text);\n return JSON.stringify(text);\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return \"null\";\n switch (typeof value) {\n case \"boolean\":\n return JSON.stringify(value);\n case \"string\":\n return serializeString(value);\n case \"number\":\n if (!Number.isFinite(value)) {\n throw new TypeError(`cannot canonicalize non-finite number: ${value}`);\n }\n return JSON.stringify(value);\n case \"object\":\n break;\n default:\n throw new TypeError(`cannot canonicalize value of type ${typeof value}`);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n if (!isPlainRecord(value)) {\n throw new TypeError(\"cannot canonicalize non-plain object\");\n }\n const keys = Object.keys(value).sort(); // UTF-16 code unit order (RFC 8785 §3.2.3)\n const members: string[] = [];\n for (const key of keys) {\n const member = value[key];\n if (member === undefined) continue; // JSON.stringify drops undefined properties\n members.push(`${serializeString(key)}:${serialize(member)}`);\n }\n return `{${members.join(\",\")}}`;\n}\n\n/** Serialize a JSON-representable value to its RFC 8785 canonical form. */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { canonicalize } from \"./jcs.js\";\nimport { ed25519PublicKeyFromDidKey } from \"./didkey.js\";\n\nexport interface CompactUcanAuthorization {\n readonly authorization: string;\n readonly cid: string;\n readonly header: Readonly<Record<string, unknown>>;\n readonly payload: {\n readonly att: Readonly<Record<string, unknown>>;\n readonly aud: string;\n readonly exp: number;\n readonly fct: readonly [Readonly<Record<string, unknown>>];\n readonly iss: string;\n readonly nbf: number;\n readonly nnc: string;\n readonly prf: readonly string[];\n };\n}\n\nexport interface SignCompactUcanInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, unknown>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\n/** Produce the exact JCS compact-UCAN representation accepted by the Node. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanInput,\n): Promise<CompactUcanAuthorization> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60) {\n throw new TypeError(\"compact invocation lifetime must be between one and 60 seconds\");\n }\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n const header = {\n alg: \"EdDSA\",\n jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) },\n typ: \"JWT\",\n ucv: \"0.10.0\",\n };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\")\n ? input.issuerDid\n : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(canonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = await input.sign(signingInput);\n if (signature.length !== 64) throw new TypeError(\"compact Authorization signature must be Ed25519\");\n return verifyCompactUcanAuthorization(\n `${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`,\n );\n}\n\nexport function verifyCompactUcanAuthorization(\n authorization: string,\n expectedCid?: string,\n): CompactUcanAuthorization {\n if (/\\s/.test(authorization)) throw new TypeError(\"compact Authorization contains whitespace\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new TypeError(\"compact Authorization must contain three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = decodeBase64Url(headerSegment);\n const payloadBytes = decodeBase64Url(payloadSegment);\n const signature = decodeBase64Url(signatureSegment);\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const header = JSON.parse(decoder.decode(headerBytes)) as Record<string, unknown>;\n const payload = JSON.parse(decoder.decode(payloadBytes)) as Record<string, unknown>;\n if (canonicalize(header) !== decoder.decode(headerBytes) || canonicalize(payload) !== decoder.decode(payloadBytes)) throw new TypeError(\"compact Authorization JSON is not canonical\");\n assertExactKeys(header, [\"alg\", \"jwk\", \"typ\", \"ucv\"], \"protected header\");\n const jwk = object(header.jwk, \"protected JWK\");\n assertExactKeys(jwk, [\"alg\", \"crv\", \"kty\", \"x\"], \"protected JWK\");\n if (header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || jwk.alg !== \"EdDSA\" || jwk.crv !== \"Ed25519\" || jwk.kty !== \"OKP\" || typeof jwk.x !== \"string\") throw new TypeError(\"compact Authorization header is invalid\");\n assertExactKeys(payload, [\"att\", \"aud\", \"exp\", \"fct\", \"iss\", \"nbf\", \"nnc\", \"prf\"], \"UCAN payload\");\n if (typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || typeof payload.nnc !== \"string\" || !Number.isInteger(payload.nbf) || !Number.isInteger(payload.exp) || (payload.nbf as number) >= (payload.exp as number) || !Array.isArray(payload.prf) || payload.prf.some((proof) => typeof proof !== \"string\") || !Array.isArray(payload.fct) || payload.fct.length !== 1) throw new TypeError(\"compact Authorization payload is invalid\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n if (!equal(publicKey, decodeBase64Url(jwk.x))) throw new TypeError(\"compact Authorization JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new TypeError(\"compact Authorization signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid) throw new TypeError(\"compact Authorization CID mismatch\");\n return { authorization, cid, header, payload: payload as CompactUcanAuthorization[\"payload\"] };\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(`${label} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, keys: readonly string[], label: string): void {\n if (Object.keys(value).length !== keys.length || Object.keys(value).some((key) => !keys.includes(key))) throw new TypeError(`${label} has unknown or missing fields`);\n}\n\nfunction decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value) || value.length % 4 === 1) throw new TypeError(\"compact Authorization segment is not base64url\");\n const bytes = typeof Buffer !== \"undefined\"\n ? new Uint8Array(Buffer.from(value, \"base64url\"))\n : Uint8Array.from(atob(value.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(value.length / 4) * 4, \"=\")), (character) => character.charCodeAt(0));\n const encoded = typeof Buffer !== \"undefined\"\n ? Buffer.from(bytes).toString(\"base64url\")\n : btoa(String.fromCharCode(...bytes)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n if (encoded !== value) throw new TypeError(\"compact Authorization segment is not canonical\");\n return bytes;\n}\n\nfunction encodeBase64Url(value: Uint8Array): string {\n return typeof Buffer !== \"undefined\"\n ? Buffer.from(value).toString(\"base64url\")\n : btoa(String.fromCharCode(...value)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n\nfunction equal(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { didKeyFromEd25519PublicKey, ed25519PublicKeyFromDidKey } from \"./didkey.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { verifyCompactUcanAuthorization } from \"./compact-ucan.js\";\nimport {\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n unsignedShareEnvelopeSchema,\n unsignedShareEnvelopeV2Schema,\n unsignedShareEnvelopeV3Schema,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n type UnsignedShareEnvelope,\n type UnsignedShareEnvelopeV2,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"./schema.js\";\n\n/**\n * Ed25519 verification mode: strict RFC 8032, NOT ZIP-215. `zip215: false`\n * makes @noble/curves reject non-canonical point encodings (y >= p) that the\n * looser ZIP-215 rules accept, so this JS verifier and a strict Rust verifier\n * (e.g. ed25519-dalek `verify_strict`) agree on exactly the same signature\n * set. Chosen deliberately: interop determinism over batch-verification\n * compatibility.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\n/** The one canonical envelope signing domain shared by runtime and vectors. */\nexport const ENVELOPE_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v1\\0\";\nexport const ENVELOPE_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\nexport const ENVELOPE_V3_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\n/** Domain-separated JCS bytes of every envelope field except `signature`. */\nfunction signingBytes(unsigned: UnsignedShareEnvelope): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV2(unsigned: UnsignedShareEnvelopeV2): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V2_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV3(unsigned: UnsignedShareEnvelopeV3): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V3_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\n/**\n * Sign an envelope body with an ed25519 private key (32-byte seed). The\n * signature covers the domain-separated RFC 8785 canonical JSON of all other fields —\n * including `authorizationTarget.kind` and `target.origin` (blueprint §2.1).\n * Throws if the body does not validate against the strict schema.\n */\nexport function signEnvelope(\n envelopeWithoutSig: UnsignedShareEnvelope,\n ed25519PrivKey: Uint8Array,\n): ShareEnvelope {\n const unsigned = unsignedShareEnvelopeSchema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n const signature = ed25519.sign(signingBytes(unsigned), ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(signature),\n },\n };\n}\n\nexport function signEnvelopeV2(envelopeWithoutSig: UnsignedShareEnvelopeV2, ed25519PrivKey: Uint8Array): ShareEnvelopeV2 {\n const unsigned = unsignedShareEnvelopeV2Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(signingBytesV2(unsigned), ed25519PrivKey)),\n },\n };\n}\n\n/** Sign a strict v3 envelope. v3 is intentionally not accepted by v1/v2 helpers. */\nexport function signEnvelopeV3(envelopeWithoutSig: UnsignedShareEnvelopeV3, ed25519PrivKey: Uint8Array): ShareEnvelopeV3 {\n const unsigned = unsignedShareEnvelopeV3Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(sha256(signingBytesV3(unsigned)), ed25519PrivKey)),\n },\n };\n}\n\nexport interface VerifyEnvelopeOptions {\n /**\n * The did:key the caller ALREADY trusts to be the sender. REQUIRED:\n * `signature.signerDid` is self-asserted by whoever built the envelope, so\n * verifying against it alone proves nothing — an attacker signs their own\n * \"Adam\" envelope with their own key and it self-verifies. In later stages\n * the expected signer is the delegation chain's issuer DID; for now the\n * caller supplies it out-of-band.\n */\n expectedSignerDid: string;\n}\n\n/**\n * Signature-only check: strict-parse, recompute the JCS signing bytes, and\n * check the ed25519 signature against the key in `signature.signerDid`.\n *\n * WARNING: this only proves the envelope is internally consistent with its\n * OWN self-asserted signer. It binds no trust — use `verifyEnvelope` with an\n * `expectedSignerDid` unless you are doing the binding yourself.\n */\nexport function verifyEnvelopeSignatureOnly(envelope: ShareEnvelope): boolean {\n const parsed = shareEnvelopeSchema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n return ed25519.verify(\n fromBase64Url(signature.value),\n signingBytes(unsigned),\n publicKey,\n ED25519_VERIFY_OPTS,\n );\n}\n\n/**\n * Verify a signed envelope against an EXPECTED signer:\n *\n * 1. strict schema parse (throws on malformed input),\n * 2. `signature.signerDid` must equal `options.expectedSignerDid`,\n * 3. the ed25519 signature must verify (strict RFC 8032) over the domain-separated JCS bytes,\n * 4. for `authorizationTarget.kind === \"policy\"`, the decoded `policyBytes`\n * must hash to `policyCid` (CIDv1/raw/sha2-256).\n *\n * Returns false for any trust or integrity failure.\n */\nexport async function verifyEnvelope(\n envelope: ShareEnvelope,\n options: VerifyEnvelopeOptions,\n): Promise<boolean> {\n const parsed = shareEnvelopeSchema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid) return false;\n if (!verifyEnvelopeSignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") {\n const policyBytes = fromBase64Url(parsed.authorizationTarget.policyBytes);\n if ((await computeCid(policyBytes)) !== parsed.authorizationTarget.policyCid) {\n return false;\n }\n }\n return true;\n}\n\nexport function verifyEnvelopeV2SignatureOnly(envelope: ShareEnvelopeV2): boolean {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), signingBytesV2(unsigned), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV2(envelope: ShareEnvelopeV2, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || !verifyEnvelopeV2SignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") return (await computeCid(fromBase64Url(parsed.authorizationTarget.policyBytes))) === parsed.authorizationTarget.policyCid;\n return true;\n}\n\nexport function verifyEnvelopeV3SignatureOnly(envelope: ShareEnvelopeV3): boolean {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), sha256(signingBytesV3(unsigned)), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV3(envelope: ShareEnvelopeV3, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policyDigest = sha256(new TextEncoder().encode(`${POLICY_V1_SIGNATURE_DOMAIN}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = sha256(new TextEncoder().encode(`${POLICY_V1_SIGNATURE_DOMAIN}${canonicalize(unsignedPolicy)}`));\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(\"tinycloud://\".length).split(\"/\")[0], path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const resource = /^tinycloud:\\/\\/([^/]+)\\/kv\\/(.+)$/.exec(parsed.contentSource.kvResource);\n if (parsed.shareId !== parsed.contentSource.shareId || resource === null || resource[1] !== parsed.target.spaceId || resource[2] !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.enforcerDid !== parsed.target.nodeAudience || binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.enforcerDid || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > Date.now() || Date.parse(binding.expiresAt) <= Date.now() || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.enforcerDid), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== parsed.target.nodeAudience || enforcementFact.enforcerDid !== parsed.target.nodeAudience || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== parsed.target.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\n\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { isCanonicalHttpsOrigin } from \"./schema.js\";\n\n/**\n * Share link codec (blueprint §2.1):\n *\n * ${origin}/s/${cid}#k=${base64url(key32)}\n *\n * The CID addresses the SEALED BLOB (`seal` in aead.ts: version byte ||\n * nonce || ciphertext+tag), so the link plus the fetched blob is everything a\n * recipient needs — the nonce rides inside the CID-verified blob.\n *\n * The AEAD key rides in the URL FRAGMENT only. Fragments are never sent in\n * HTTP requests, so the registry, CDNs, and any server that sees the URL\n * without its fragment learn nothing that decrypts the envelope. The fragment\n * must never leave the client (no logging, no postMessage to other origins).\n */\n\nconst KEY_LENGTH = 32;\n\nexport interface ShareUrlParts {\n origin: string;\n /** CIDv1/raw/sha2-256 of the sealed blob. */\n ciphertextCid: string;\n key32: Uint8Array;\n}\n\nexport interface ParseShareUrlOptions {\n /** If given, the URL's origin must equal this canonical https origin exactly. */\n expectedOrigin?: string;\n}\n\nexport interface InlineShareUrlParts {\n readonly origin: string;\n /** The complete sealed envelope blob. It is kept in the fragment only. */\n readonly ciphertext: Uint8Array;\n /** The AES key that opens the sealed envelope. Omit only for policy-safe public envelopes. */\n readonly key32?: Uint8Array;\n}\n\nexport interface ParsedInlineShareUrl {\n readonly kind: \"inline\";\n readonly ciphertextCid: string;\n readonly ciphertext: Uint8Array;\n readonly key32?: Uint8Array;\n}\n\nconst INLINE_PREFIX = \"#v=2&p=\";\nconst MAX_INLINE_BYTES = 256 * 1024;\n\nfunction assertCanonicalCid(cidString: string): void {\n const cid = CID.parse(cidString); // throws on garbage\n if (\n cid.version !== 1 ||\n cid.code !== raw.code ||\n cid.multihash.code !== 0x12 || // sha2-256 (0x12) only, at the link layer too\n cid.toString() !== cidString\n ) {\n throw new TypeError(`not a canonical CIDv1 raw sha2-256 base32 CID: ${cidString}`);\n }\n}\n\nexport function encodeShareUrl({ origin, ciphertextCid, key32 }: ShareUrlParts): string {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n assertCanonicalCid(ciphertextCid);\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new TypeError(`origin must be a canonical https origin, got ${origin}`);\n }\n return `${origin}/s/${ciphertextCid}#k=${toBase64Url(key32)}`;\n}\n\nexport function parseShareUrl(\n url: string,\n options: ParseShareUrlOptions = {},\n): { ciphertextCid: string; key32: Uint8Array } {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") {\n throw new TypeError(`share URL must be https, got ${parsed.protocol}`);\n }\n if (parsed.username !== \"\" || parsed.password !== \"\") {\n throw new TypeError(\"share URL must not carry userinfo\");\n }\n // The key must never appear anywhere a server would see it — reject ANY\n // query string rather than guessing at intent.\n if (parsed.search !== \"\") {\n throw new TypeError(\"share URL must not have a query string\");\n }\n if (options.expectedOrigin !== undefined) {\n if (!isCanonicalHttpsOrigin(options.expectedOrigin)) {\n throw new TypeError(\n `expectedOrigin must be a canonical https origin, got ${options.expectedOrigin}`,\n );\n }\n if (parsed.origin !== options.expectedOrigin) {\n throw new TypeError(\n `share URL origin ${parsed.origin} does not match expected ${options.expectedOrigin}`,\n );\n }\n }\n const match = /^\\/s\\/([a-z2-7]+)$/.exec(parsed.pathname);\n if (!match || match[1] === undefined) {\n throw new TypeError(`not a share URL path: ${parsed.pathname}`);\n }\n const ciphertextCid = match[1];\n assertCanonicalCid(ciphertextCid);\n if (!parsed.hash.startsWith(\"#k=\")) {\n throw new TypeError(\"share URL is missing the #k= key fragment\");\n }\n // fromBase64Url is a STRICT decode: it throws on padding, characters\n // outside the base64url alphabet, impossible lengths, and non-zero\n // trailing bits — not just an alphabet regex.\n const key32 = fromBase64Url(parsed.hash.slice(\"#k=\".length));\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`fragment key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n return { ciphertextCid, key32 };\n}\n\n/**\n * Encode an explicit v2 inline fallback. The entire payload is in the\n * fragment, so it is never sent in an HTTP request. The payload is canonical\n * JSON and contains only sealed bytes, their CID, and (when encrypted) the\n * envelope key; callers must never place recipient or holder material here.\n */\nexport async function encodeInlineShareUrl(parts: InlineShareUrlParts): Promise<string> {\n if (!isCanonicalHttpsOrigin(parts.origin)) throw new TypeError(\"origin must be a canonical https origin\");\n if (parts.ciphertext.byteLength === 0 || parts.ciphertext.byteLength > MAX_INLINE_BYTES) throw new RangeError(\"inline ciphertext is outside the allowed size\");\n if (parts.key32 !== undefined && parts.key32.length !== KEY_LENGTH) throw new TypeError(\"inline key must be 32 bytes\");\n const ciphertextCid = await computeCid(parts.ciphertext);\n const payload = canonicalize({\n v: 2,\n c: toBase64Url(parts.ciphertext),\n cid: ciphertextCid,\n ...(parts.key32 === undefined ? {} : { k: toBase64Url(parts.key32) }),\n });\n const payloadBytes = new TextEncoder().encode(payload);\n if (payloadBytes.byteLength > MAX_INLINE_BYTES * 2) throw new RangeError(\"inline URL is too large\");\n return `${parts.origin}/s/inline${INLINE_PREFIX}${toBase64Url(payloadBytes)}`;\n}\n\nexport function parseInlineShareUrl(url: string, options: ParseShareUrlOptions = {}): ParsedInlineShareUrl {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\" || parsed.username !== \"\" || parsed.password !== \"\" || parsed.search !== \"\") throw new TypeError(\"inline share URL must be canonical HTTPS without query or userinfo\");\n if (!isCanonicalHttpsOrigin(parsed.origin) || (options.expectedOrigin !== undefined && parsed.origin !== options.expectedOrigin)) throw new TypeError(\"inline share URL origin is not trusted\");\n if (parsed.pathname !== \"/s/inline\" || !parsed.hash.startsWith(INLINE_PREFIX)) throw new TypeError(\"not an inline v2 share URL\");\n let payloadBytes: Uint8Array;\n try { payloadBytes = fromBase64Url(parsed.hash.slice(INLINE_PREFIX.length)); } catch { throw new TypeError(\"inline payload is not canonical base64url\"); }\n if (payloadBytes.byteLength === 0 || payloadBytes.byteLength > MAX_INLINE_BYTES * 2) throw new TypeError(\"inline payload is too large\");\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(payloadBytes)) as unknown; } catch { throw new TypeError(\"inline payload is not valid JSON\"); }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new TypeError(\"inline payload must be an object\");\n if (canonicalize(value) !== new TextDecoder(\"utf-8\").decode(payloadBytes)) throw new TypeError(\"inline payload is not canonical JSON\");\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n if (!keys.every((key) => key === \"v\" || key === \"c\" || key === \"cid\" || key === \"k\") || record.v !== 2 || typeof record.c !== \"string\" || typeof record.cid !== \"string\") throw new TypeError(\"inline payload has invalid fields\");\n let ciphertext: Uint8Array;\n try { ciphertext = fromBase64Url(record.c); } catch { throw new TypeError(\"inline ciphertext is not canonical base64url\"); }\n if (ciphertext.byteLength === 0 || ciphertext.byteLength > MAX_INLINE_BYTES) throw new TypeError(\"inline ciphertext is outside the allowed size\");\n assertCanonicalCid(record.cid);\n if (record.k !== undefined && typeof record.k !== \"string\") throw new TypeError(\"inline key must be base64url\");\n let key32: Uint8Array | undefined;\n try { key32 = record.k === undefined ? undefined : fromBase64Url(record.k); } catch { throw new TypeError(\"inline key is not canonical base64url\"); }\n if (key32 !== undefined && key32.length !== KEY_LENGTH) throw new TypeError(\"inline key must be 32 bytes\");\n return { kind: \"inline\", ciphertextCid: record.cid, ciphertext, ...(key32 === undefined ? {} : { key32 }) };\n}\n\nexport function parseCompactOrInlineShareUrl(url: string, options: ParseShareUrlOptions = {}):\n | { readonly kind: \"compact\"; readonly ciphertextCid: string; readonly key32: Uint8Array }\n | ParsedInlineShareUrl {\n if (new URL(url).pathname === \"/s/inline\") return parseInlineShareUrl(url, options);\n return { kind: \"compact\", ...parseShareUrl(url, options) };\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import {\n checkBearerDelegation,\n canonicalize,\n computeCid,\n fromBase64Url,\n open,\n parseCompactOrInlineShareUrl,\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n verifyEnvelopeV2,\n verifyEnvelope,\n toBase64Url,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n} from \"@tinycloud/share-envelope\";\nimport type { ShareAuthorizedContent, ShareAuthorizationAdapter, ShareAuthorizationMethod } from \"./authorization.js\";\n\nexport type ShareErrorCode = \"invalid-link\" | \"fetch-failed\" | \"max-bytes-exceeded\" | \"cid-mismatch\" | \"decrypt-failed\" | \"envelope-invalid\" | \"origin-mismatch\" | \"signature-invalid\" | \"capability-invalid\" | \"expired\" | \"unsupported-target\" | \"authorization-denied\" | \"content-integrity-failed\";\n\nexport const SHARE_RESULT_VERSION = 1 as const;\n\n/** Maximum stored-block size accepted by the headless verifier by default. */\nexport const DEFAULT_MAX_SEALED_BLOB_BYTES = 100 * 1024 * 1024 + 29;\n\n/** Content metadata permits at most 100 MiB of plaintext plus sealed overhead. */\nexport const DEFAULT_MAX_CONTENT_BLOB_BYTES = DEFAULT_MAX_SEALED_BLOB_BYTES;\n\nconst CONTENT_SEALED_OVERHEAD = 1 + 12 + 16;\n\nexport class ShareReceiveError extends Error {\n readonly code: ShareErrorCode;\n readonly details: { readonly expiresAt?: string; readonly stage?: \"envelope\" | \"content\"; readonly reason?: \"policy-target\" | \"recipient-did-target\" | \"prefix-resource\" } | undefined;\n constructor(code: ShareErrorCode, message: string, details?: { readonly expiresAt?: string; readonly stage?: \"envelope\" | \"content\"; readonly reason?: \"policy-target\" | \"recipient-did-target\" | \"prefix-resource\" }) {\n super(message); this.name = \"ShareReceiveError\"; this.code = code; this.details = details;\n }\n /** Machine output is deliberately code-only; diagnostics belong on stderr. */\n toJSON(): ShareErrorInfo { return { protocol: \"tinycloud-share\", version: SHARE_RESULT_VERSION, error: { code: this.code } }; }\n}\n\nexport interface ShareErrorInfo {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_RESULT_VERSION;\n readonly error: { readonly code: ShareErrorCode };\n}\n\n/** Convert unknown failures to the redacted public error schema. */\nexport function toShareErrorInfo(error: unknown): ShareErrorInfo {\n if (error instanceof ShareReceiveError) return error.toJSON();\n return { protocol: \"tinycloud-share\", version: SHARE_RESULT_VERSION, error: { code: \"fetch-failed\" } };\n}\n\nexport interface ShareFetchOptions {\n readonly registryBaseUrl?: string;\n readonly fetchBlob?: (input: { readonly origin: string; readonly cid: string }) => Promise<Uint8Array>;\n readonly fetchFn?: typeof globalThis.fetch;\n readonly expectedOrigin?: string;\n /** Out-of-band signer trust root for addressed envelopes. */\n readonly trustedSignerDid?: string;\n /**\n * Out-of-band policy authority. The policy bytes carried by an envelope\n * are only a CID-addressed integrity witness; they are never a trust root.\n */\n readonly trustedPolicyAuthority?: SharePolicyAuthority;\n readonly now?: () => number;\n readonly maxSealedBlobBytes?: number;\n readonly maxContentBlobBytes?: number;\n /** Observability-only hook; the SDK zeroes this authority-bearing buffer. */\n readonly onKeyParsed?: (key32: Uint8Array) => void;\n /** Optional node/OpenKey/email adapter for addressed v2 shares. */\n readonly authorization?: ShareAuthorizationAdapter<ShareAuthorizedContent>;\n readonly authorizationResumeToken?: string;\n readonly authorizationProof?: unknown;\n /** Addressed-only presentation hook. Bearer envelopes and their keys never cross this boundary. */\n readonly onResolvedAddressedEnvelope?: (envelope: ShareEnvelope | ShareEnvelopeV2, cid: string) => void;\n}\n\nexport interface SharePolicyEvidence {\n readonly policyCid: string;\n readonly signerDid: string;\n readonly registrationCid: string;\n readonly shareId: string;\n readonly recipientMatcher: unknown;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly contentSource: unknown;\n readonly contentSourceDigest: string;\n readonly delegationCid: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly expiresAt: string;\n}\n\nexport interface SharePolicyAuthority {\n resolve(input: { readonly policyCid: string; readonly envelope: ShareEnvelopeV2 }): Promise<SharePolicyEvidence | undefined>;\n}\n\nexport interface VerifyBearerEnvelopeOptions {\n readonly expectedOrigin?: string;\n readonly now?: () => number;\n}\n\n\n/** Redacted metadata; link keys, delegations, policy bytes, and claims never appear here. */\nexport interface ShareMetadata {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly origin: string;\n readonly target: { readonly kind: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\"; readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly expiresAt: string;\n readonly display: { readonly senderName?: string; readonly filename?: string; readonly mode?: string };\n readonly content?: { readonly cid: string };\n}\n\nexport interface ShareInspection { readonly metadata: ShareMetadata; readonly link: { readonly origin: string; readonly cid: string; readonly kind: \"compact\" | \"inline\" } }\nexport interface ShareReceiveAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n readonly continueUrl?: string;\n readonly resumeToken?: string;\n}\nexport interface ShareReceiveResult extends ShareInspection { readonly bytes: Uint8Array; readonly text?: string }\nexport type ShareReceiveOutcome = ShareReceiveResult | ShareReceiveAuthorizationRequired;\n\ninterface ResolvedShareEnvelope {\n readonly envelope: ShareEnvelope | ShareEnvelopeV2;\n readonly origin: string;\n readonly cid: string;\n readonly kind: \"compact\" | \"inline\";\n}\n\nfunction boundedBytes(value: Uint8Array, limit: number, code: ShareErrorCode): Uint8Array {\n if (!Number.isSafeInteger(limit) || limit <= 0) throw new ShareReceiveError(\"fetch-failed\", \"share byte limit is invalid\");\n if (!(value instanceof Uint8Array)) throw new ShareReceiveError(\"fetch-failed\", \"registry returned invalid bytes\");\n if (value.byteLength > limit) throw new ShareReceiveError(code, \"share blob exceeds the configured byte limit\");\n return value;\n}\n\nasync function readResponseBytes(response: Response, limit: number, tooLargeCode: ShareErrorCode): Promise<Uint8Array> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength !== null && Number.isSafeInteger(Number(contentLength)) && Number(contentLength) > limit) {\n throw new ShareReceiveError(tooLargeCode, \"share blob exceeds the configured byte limit\");\n }\n if (response.body === null) {\n return boundedBytes(new Uint8Array(await response.arrayBuffer()), limit, tooLargeCode);\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for (;;) {\n const part = await reader.read();\n if (part.done) break;\n total += part.value.byteLength;\n if (total > limit) {\n await reader.cancel();\n throw new ShareReceiveError(tooLargeCode, \"share blob exceeds the configured byte limit\");\n }\n chunks.push(part.value);\n }\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction registryFetcher(options: ShareFetchOptions, limit: number, tooLargeCode: ShareErrorCode = \"max-bytes-exceeded\", stage: \"envelope\" | \"content\" = \"envelope\"): (input: { readonly origin: string; readonly cid: string }) => Promise<Uint8Array> {\n if (options.fetchBlob !== undefined) return async (input) => {\n try {\n return boundedBytes(await options.fetchBlob!(input), limit, tooLargeCode);\n } catch (error) {\n if (error instanceof ShareReceiveError) throw error;\n throw new ShareReceiveError(\"fetch-failed\", \"registry unavailable\", { stage });\n }\n };\n if (options.registryBaseUrl === undefined) throw new ShareReceiveError(\"fetch-failed\", \"a registry fetch adapter is required\");\n const fetchFn = options.fetchFn ?? globalThis.fetch;\n const base = options.registryBaseUrl.replace(/\\/+$/, \"\");\n return async ({ cid }) => {\n try {\n const response = await fetchFn(`${base}/ipfs/${cid}?format=raw`, { headers: { accept: \"application/vnd.ipld.raw\" }, redirect: \"error\" });\n if (!response.ok) throw new ShareReceiveError(\"fetch-failed\", `registry returned ${response.status}`, { stage });\n return await readResponseBytes(response, limit, tooLargeCode);\n } catch (error) {\n if (error instanceof ShareReceiveError) throw error;\n throw new ShareReceiveError(\"fetch-failed\", \"registry unavailable\", { stage });\n }\n };\n}\n\nfunction metadataFor(envelope: ShareEnvelope | ShareEnvelopeV2, origin: string): ShareMetadata {\n if (envelope.version === 2) {\n const targetKind = envelope.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : envelope.recipientMatcher.kind === \"exactEmail\" ? \"email\" : envelope.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\";\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: envelope.shareId, origin,\n target: { ...envelope.target, kind: targetKind }, resource: envelope.resource, actions: envelope.actions, expiresAt: envelope.expiry,\n display: {\n ...(envelope.display.senderName === undefined ? {} : { senderName: envelope.display.senderName }),\n ...(envelope.display.filename === undefined ? {} : { filename: envelope.display.filename }),\n ...(envelope.display.mode === undefined ? {} : { mode: envelope.display.mode }),\n },\n ...(envelope.content === undefined ? {} : { content: { cid: envelope.content.cid } }),\n };\n }\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: envelope.shareId, origin,\n target: { ...envelope.target, kind: \"bearer\" }, resource: envelope.target.resource, actions: [\"read\"], expiresAt: envelope.expiry,\n display: {\n ...(envelope.display.senderName === undefined ? {} : { senderName: envelope.display.senderName }),\n ...(envelope.display.filename === undefined ? {} : { filename: envelope.display.filename }),\n ...(envelope.display.mode === undefined ? {} : { mode: envelope.display.mode }),\n },\n ...(envelope.content === undefined ? {} : { content: { cid: envelope.content.cid } }),\n };\n}\n\nfunction parseEnvelope(bytes: Uint8Array): ShareEnvelope | ShareEnvelopeV2 {\n try {\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n const value = JSON.parse(text) as unknown;\n if (canonicalize(value) !== text) throw new Error(\"share envelope is not canonical JSON\");\n if (typeof value === \"object\" && value !== null && !Array.isArray(value) && (value as { readonly version?: unknown }).version === 2) {\n return shareEnvelopeV2Schema.parse(value);\n }\n return shareEnvelopeSchema.parse(value);\n }\n catch { throw new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\"); }\n}\n\n/**\n * Resolve a compact or inline link through the canonical ordered pipeline:\n * origin/path parsing, bounded transport, CID verification, AEAD opening,\n * canonical JSON, and strict envelope schema validation. Cryptographic target\n * verification is intentionally separate so policy and recipient-DID callers\n * can apply their own trusted-authority checks before network effects.\n */\nasync function resolveShareEnvelope(link: string, options: ShareFetchOptions = {}): Promise<ResolvedShareEnvelope> {\n let parsed: ReturnType<typeof parseCompactOrInlineShareUrl>;\n try { parsed = parseCompactOrInlineShareUrl(link, { ...(options.expectedOrigin === undefined ? {} : { expectedOrigin: options.expectedOrigin }) }); }\n catch { throw new ShareReceiveError(\"invalid-link\", \"share link format is invalid\"); }\n try {\n if (parsed.key32 !== undefined) options.onKeyParsed?.(parsed.key32);\n const url = new URL(link);\n const sealed = parsed.kind === \"inline\"\n ? boundedBytes(parsed.ciphertext, options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES, \"max-bytes-exceeded\")\n : await registryFetcher(options, options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES)({ origin: url.origin, cid: parsed.ciphertextCid });\n if (await computeCid(sealed) !== parsed.ciphertextCid) throw new ShareReceiveError(\"cid-mismatch\", \"registry bytes do not match the link CID\");\n let plaintext: Uint8Array;\n try { plaintext = parsed.key32 === undefined ? sealed : await open(sealed, parsed.key32); }\n catch { throw new ShareReceiveError(\"decrypt-failed\", \"share envelope could not be opened\"); }\n return { envelope: parseEnvelope(plaintext), origin: url.origin, cid: parsed.ciphertextCid, kind: parsed.kind };\n } finally {\n // Fragment material is authority-bearing and must be cleared on every\n // path, including registry errors and CID mismatches before AEAD.\n parsed.key32?.fill(0);\n }\n}\n\nfunction actionName(value: string): string {\n return value === \"read\" ? \"tinycloud.kv/get\" : value === \"list\" ? \"tinycloud.kv/list\" : value === \"edit\" ? \"tinycloud.kv/put\" : value;\n}\n\nfunction resourceContains(outer: SharePolicyEvidence[\"resource\"], inner: SharePolicyEvidence[\"resource\"]): boolean {\n if (outer.kind === \"exact\") return inner.kind === \"exact\" && outer.path === inner.path;\n const prefix = outer.path.endsWith(\"/\") ? outer.path : `${outer.path}/`;\n return inner.path === outer.path || inner.path.startsWith(prefix);\n}\n\nfunction policyEvidenceMatches(envelope: ShareEnvelopeV2, evidence: SharePolicyEvidence): boolean {\n const registeredActions = new Set(evidence.actions.map(actionName));\n return evidence.policyCid === (envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\")\n && evidence.signerDid === envelope.signature.signerDid\n && evidence.registrationCid.length > 0\n && evidence.shareId === envelope.shareId\n && canonicalize(evidence.recipientMatcher) === canonicalize(envelope.recipientMatcher)\n && canonicalize(evidence.target) === canonicalize(envelope.target)\n && resourceContains(evidence.resource, envelope.resource)\n && envelope.actions.every((action) => registeredActions.has(actionName(action)))\n && canonicalize(evidence.contentSource) === canonicalize(envelope.contentSource)\n && evidence.contentSourceDigest === envelope.contentSourceDigest\n && evidence.delegationCid === envelope.delegationCid\n && evidence.authorityMaterialHandle === envelope.authorityMaterialHandle\n && evidence.authorityMaterialDigest === envelope.authorityMaterialDigest\n && evidence.expiresAt === envelope.expiry\n && Number.isFinite(Date.parse(evidence.expiresAt))\n && Date.parse(evidence.expiresAt) === Date.parse(envelope.expiry);\n}\n\nasync function verifyV2Envelope(envelope: ShareEnvelopeV2, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n // v2's signed target origin is the enforcing Node, not the Share viewer.\n // The link parser binds the separately trusted viewer origin; the external\n // policy authority below binds the Node origin/audience/enforcer tuple.\n if (options.expectedOrigin !== undefined && linkOrigin !== options.expectedOrigin) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share link origin does not match the trusted origin\");\n }\n // Verify the signed envelope before consulting any policy or registration\n // authority. This first check establishes integrity only: the signer named\n // by an untrusted envelope is not a trust root. The external authority below\n // must still bind that signer to an enrolled registration, and an explicit\n // trustedSignerDid remains an additional trust constraint when supplied.\n try {\n if (!await verifyEnvelopeV2(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\");\n } catch {\n throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\");\n }\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"share expiry is invalid\");\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"share has expired\", { expiresAt: envelope.expiry });\n\n if (envelope.authorizationTarget.kind === \"policy\") {\n if (options.trustedPolicyAuthority === undefined) throw new ShareReceiveError(\"envelope-invalid\", \"an external policy authority is required\");\n let evidence: SharePolicyEvidence | undefined;\n try { evidence = await options.trustedPolicyAuthority.resolve({ policyCid: envelope.authorizationTarget.policyCid, envelope }); } catch { evidence = undefined; }\n if (evidence === undefined || !policyEvidenceMatches(envelope, evidence)) throw new ShareReceiveError(\"capability-invalid\", \"share policy authority evidence is not bound to the envelope\");\n // The signer is a trust root only when the separately configured policy\n // authority has vouched for it. Never promote the signer or policy bytes\n // supplied by the untrusted envelope into authority.\n if (options.trustedSignerDid !== undefined && (evidence.signerDid !== options.trustedSignerDid || envelope.signature.signerDid !== options.trustedSignerDid)) {\n throw new ShareReceiveError(\"signature-invalid\", \"share signer is not trusted\");\n }\n } else if (envelope.authorizationTarget.kind === \"recipientDid\" && envelope.recipientMatcher.kind === \"recipientDid\" && envelope.authorizationTarget.did !== envelope.recipientMatcher.value) {\n throw new ShareReceiveError(\"capability-invalid\", \"recipient authorization does not match the signed recipient\");\n } else {\n if (options.trustedSignerDid === undefined || envelope.signature.signerDid !== options.trustedSignerDid) throw new ShareReceiveError(\"signature-invalid\", \"an addressed signer trust root is required\");\n }\n}\n\nasync function verifyV1PolicyEnvelope(envelope: ShareEnvelope, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n if (envelope.authorizationTarget.kind !== \"policy\") throw new ShareReceiveError(\"unsupported-target\", \"share target is not an addressed policy\", { reason: \"policy-target\" });\n if (envelope.target.origin !== linkOrigin || (options.expectedOrigin !== undefined && (linkOrigin !== options.expectedOrigin || envelope.target.origin !== options.expectedOrigin))) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share origin does not match the trusted origin\");\n }\n // v1 policy bytes are an integrity witness, never a trust root. This\n // compatibility verifier has no external v1 authority contract, so it must\n // not accept an addressed envelope as signature-valid.\n throw new ShareReceiveError(\"unsupported-target\", \"share policy target is not supported\", { reason: \"policy-target\" });\n}\n\n/** Verify a decrypted bearer envelope for browser adapters that own transport. */\nexport async function verifyBearerEnvelope(\n envelope: ShareEnvelope,\n linkOrigin: string,\n options: VerifyBearerEnvelopeOptions = {},\n): Promise<void> {\n // The registry origin is part of the signed target binding. A valid\n // envelope copied to another canonical Share origin must not become a\n // valid link there, even when the caller did not provide an allowlist.\n if (envelope.target.origin !== linkOrigin || (options.expectedOrigin !== undefined && (linkOrigin !== options.expectedOrigin || envelope.target.origin !== options.expectedOrigin))) {\n throw new ShareReceiveError(\"origin-mismatch\", \"share origin does not match the trusted origin\");\n }\n if (envelope.authorizationTarget.kind !== \"bearerKey\") throw new ShareReceiveError(\"unsupported-target\", \"this receive path only handles bearer shares\", { reason: envelope.authorizationTarget.kind === \"policy\" ? \"policy-target\" : \"recipient-did-target\" });\n if (envelope.target.resource.kind !== \"exact\") throw new ShareReceiveError(\"unsupported-target\", \"this receive path only handles exact resources\", { reason: \"prefix-resource\" });\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"share expiry is invalid\");\n try { if (!await verifyEnvelope(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\"); }\n catch { throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\"); }\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"share has expired\", { expiresAt: envelope.expiry });\n const capability = checkBearerDelegation(envelope, options.now === undefined ? {} : { now: options.now });\n if (!capability.ok) throw new ShareReceiveError(\"capability-invalid\", \"share delegation does not authorize the target\");\n}\n\nasync function verifyResolved(envelope: ShareEnvelope, linkOrigin: string, options: ShareFetchOptions): Promise<void> {\n await verifyBearerEnvelope(envelope, linkOrigin, options);\n}\n\nexport async function inspectShare(link: string, options: ShareFetchOptions = {}): Promise<ShareInspection> {\n const resolved = await resolveShareEnvelope(link, options);\n if (resolved.envelope.version === 1 && resolved.envelope.authorizationTarget.kind === \"policy\") await verifyV1PolicyEnvelope(resolved.envelope, resolved.origin, options);\n else if (resolved.envelope.version === 1) await verifyResolved(resolved.envelope, resolved.origin, options);\n else await verifyV2Envelope(resolved.envelope, resolved.origin, options);\n if (resolved.envelope.version === 2 || resolved.envelope.authorizationTarget.kind === \"policy\") options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind } };\n}\n\nexport async function receiveShare(link: string, options: ShareFetchOptions = {}): Promise<ShareReceiveOutcome> {\n const resolved = await resolveShareEnvelope(link, options);\n if (resolved.envelope.version === 2) {\n await verifyV2Envelope(resolved.envelope, resolved.origin, options);\n options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n const method: ShareAuthorizationMethod = resolved.envelope.recipientMatcher.kind === \"recipientDid\" ? \"openkey-device\" : \"email-claim\";\n if (options.authorization === undefined) return { state: \"authorization-required\", method };\n const result = options.authorizationResumeToken === undefined\n ? await options.authorization.begin({ envelope: resolved.envelope, method })\n : await options.authorization.resume({ envelope: resolved.envelope, method, resumeToken: options.authorizationResumeToken, ...(options.authorizationProof === undefined ? {} : { proof: options.authorizationProof }) });\n if (result.state === \"authorization-required\") return result;\n if (result.state === \"denied\") throw new ShareReceiveError(\"authorization-denied\", \"share authorization was denied\");\n if (result.value === null || typeof result.value !== \"object\" || !(result.value.bytes instanceof Uint8Array) || result.value.proof === undefined || options.authorization.verifyResult === undefined) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"share authorization returned an unsigned content result\");\n }\n const authorized = result.value;\n try {\n if (!await options.authorization.verifyResult({ envelope: resolved.envelope, value: authorized, proof: authorized.proof })) throw new Error(\"node proof\");\n } catch {\n throw new ShareReceiveError(\"content-integrity-failed\", \"node authorization proof is invalid\");\n }\n const bytes = authorized.bytes.slice();\n const maxBytes = options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES;\n if (bytes.byteLength > maxBytes) throw new ShareReceiveError(\"max-bytes-exceeded\", \"shared content exceeds the configured byte limit\");\n const digestBytes = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes));\n const bodyDigest = toBase64Url(digestBytes);\n if (authorized.bodyDigest !== bodyDigest) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content digest does not match\");\n if (authorized.contentSourceDigest !== resolved.envelope.contentSourceDigest) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content source does not match\");\n const binding = authorized.binding;\n if (\n binding.shareId !== resolved.envelope.shareId ||\n binding.delegationCid !== resolved.envelope.delegationCid ||\n binding.authorityMaterialHandle !== resolved.envelope.authorityMaterialHandle ||\n binding.authorityMaterialDigest !== resolved.envelope.authorityMaterialDigest ||\n binding.resource.kind !== resolved.envelope.resource.kind ||\n binding.resource.path !== resolved.envelope.resource.path ||\n (binding.action !== undefined && !resolved.envelope.actions.some((action) => action === binding.action || `tinycloud.kv/${action}` === binding.action))\n ) throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content binding does not match\");\n if (resolved.envelope.metadata.byteLength !== undefined && resolved.envelope.metadata.byteLength !== bytes.byteLength) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"authorized content length does not match\");\n }\n let text: string | undefined;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary result */ }\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind }, bytes, ...(text === undefined ? {} : { text }) };\n }\n if (resolved.envelope.authorizationTarget.kind === \"policy\") {\n await verifyV1PolicyEnvelope(resolved.envelope, resolved.origin, options);\n options.onResolvedAddressedEnvelope?.(resolved.envelope, resolved.cid);\n return { state: \"authorization-required\", method: \"email-claim\" };\n }\n await verifyResolved(resolved.envelope, resolved.origin, options);\n // Bearer envelopes are intentionally never exposed to an adapter callback.\n let bytes: Uint8Array<ArrayBufferLike> = new Uint8Array();\n if (resolved.envelope.content !== undefined) {\n bytes = await registryFetcher(\n options,\n (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES) + CONTENT_SEALED_OVERHEAD,\n \"max-bytes-exceeded\",\n \"content\",\n )({ origin: resolved.origin, cid: resolved.envelope.content.cid });\n if (await computeCid(bytes) !== resolved.envelope.content.cid) throw new ShareReceiveError(\"content-integrity-failed\", \"shared content CID does not match\");\n const key = fromBase64Url(resolved.envelope.content.key);\n try { bytes = await open(bytes, key); } catch { throw new ShareReceiveError(\"content-integrity-failed\", \"shared content could not be opened\"); } finally { key.fill(0); }\n if (bytes.byteLength > (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES)) {\n throw new ShareReceiveError(\"max-bytes-exceeded\", \"shared content exceeds the configured byte limit\");\n }\n }\n let text: string | undefined;\n if (bytes.byteLength !== 0) {\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary result */ }\n }\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: resolved.kind }, bytes, ...(text === undefined ? {} : { text }) };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport {\n bearerResourceUri,\n canonicalize,\n computeCid,\n didKeyFromEd25519PublicKey,\n encodeInlineShareUrl,\n encodeShareUrl,\n generateKey,\n isCanonicalHttpsOrigin,\n mintBearerDelegation,\n seal,\n signEnvelope,\n toBase64Url,\n type ShareEnvelope,\n type UnsignedShareEnvelope,\n} from \"@tinycloud/share-envelope\";\n\nexport const SHARE_CONTENT_LIMIT = 100 * 1024 * 1024;\nexport const SHARE_SEALED_OVERHEAD = 1 + 12 + 16;\nexport const SHARE_PUBLISH_RESULT_VERSION = 1 as const;\nexport const DEFAULT_SHARE_LIFETIME_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport type SharePublishTarget =\n | { readonly kind: \"bearer\" }\n | { readonly kind: \"recipientDid\"; readonly did: string }\n | { readonly kind: \"email\"; readonly address: string }\n | { readonly kind: \"emailDomain\"; readonly domain: string };\n\nexport interface ShareUploadInput {\n readonly blob: Uint8Array;\n readonly cid: string;\n readonly deleteAfter: string;\n readonly contentLength: number;\n}\n\nexport interface ShareUploadResult {\n readonly cid: string;\n readonly deleteAfter: string;\n}\n\nexport type ShareUpload = (input: ShareUploadInput) => Promise<ShareUploadResult>;\n\nexport type ShareUploadAuthorization =\n | string\n | HeadersInit;\n\nexport interface SharePublishOptions {\n readonly source: Uint8Array | AsyncIterable<Uint8Array>;\n readonly filename: string;\n readonly mediaType?: string;\n /** Browser Share also publishes binary files; the CLI leaves this false. */\n readonly allowBinary?: boolean;\n readonly target?: SharePublishTarget;\n readonly expiresAt?: Date;\n readonly origin: string;\n readonly nodeAudience?: string;\n readonly spaceId?: string;\n readonly inline?: boolean;\n readonly maxBytes?: number;\n readonly now?: () => number;\n readonly registryBaseUrl?: string;\n readonly fetchFn?: typeof globalThis.fetch;\n /**\n * Signs the complete upload request, including its digest, size, expiry,\n * and session binding. Production callers must provide this or explicitly\n * opt into browser cookie credentials; an unsigned public upload is never\n * attempted.\n */\n readonly authorizeUpload?: (input: ShareUploadInput) => Promise<ShareUploadAuthorization>;\n /** Origin to which any cookie-bearing upload authorization is scoped. */\n readonly authorizationOrigin?: string;\n readonly credentials?: RequestCredentials;\n /** Test/dev-only escape hatch for a local HTTP registry. */\n readonly allowInsecureRegistry?: boolean;\n /** A hermetic or service-specific uploader can own transport completely. */\n readonly uploadBlob?: ShareUpload;\n}\n\nexport interface PublishedShareMetadata {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly origin: string;\n readonly target: { readonly kind: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\"; readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly string[];\n readonly expiresAt: string;\n readonly display: { readonly filename?: string; readonly senderName?: string };\n readonly content?: { readonly cid: string };\n /** Addressed publication receipts are copied into encrypted history only. */\n readonly recipientMatcher?: { readonly kind: \"bearer\" | \"recipientDid\" | \"exactEmail\" | \"emailDomain\"; readonly value?: string };\n readonly registrationCid?: string;\n readonly policyCid?: string;\n readonly ownerDelegationCid?: string;\n readonly enforcementDelegationCid?: string;\n readonly ownerDid?: string;\n readonly shareKeyDid?: string;\n readonly enforcerDid?: string;\n readonly envelopeCid?: string;\n readonly shareCid?: string;\n}\n\nexport interface PublishedShare {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_PUBLISH_RESULT_VERSION;\n /** The only authority-bearing value returned by publish. */\n readonly url: string;\n readonly link: { readonly kind: \"compact\" | \"inline\"; readonly cid: string };\n readonly metadata: PublishedShareMetadata;\n readonly registryDeleteAfter: string;\n}\n\n/** Machine-readable output omits the complete bearer capability. */\nexport function redactPublishedShare(result: PublishedShare): Omit<PublishedShare, \"url\"> {\n return {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n link: { kind: result.link.kind, cid: result.link.cid },\n metadata: {\n protocol: \"tinycloud-share\",\n version: 1,\n shareId: result.metadata.shareId,\n origin: result.metadata.origin,\n target: { ...result.metadata.target },\n resource: { ...result.metadata.resource },\n actions: [...result.metadata.actions],\n expiresAt: result.metadata.expiresAt,\n display: { ...result.metadata.display },\n ...(result.metadata.content === undefined ? {} : { content: { cid: result.metadata.content.cid } }),\n },\n registryDeleteAfter: result.registryDeleteAfter,\n };\n}\n\nexport type SharePublishErrorCode =\n | \"invalid-argument\"\n | \"unsupported-target\"\n | \"upload-auth-required\"\n | \"upload-failed\"\n | \"max-bytes-exceeded\"\n | \"inline-too-large\";\n\nexport class SharePublishError extends Error {\n readonly code: SharePublishErrorCode;\n constructor(code: SharePublishErrorCode, message: string) {\n super(message);\n this.name = \"SharePublishError\";\n this.code = code;\n }\n}\n\nfunction assertSafeFilename(filename: string): void {\n if (\n filename.length === 0 ||\n filename === \".\" ||\n filename === \"..\" ||\n /[/\\\\\\u0000-\\u001f\\u007f]/.test(filename)\n ) {\n throw new SharePublishError(\"invalid-argument\", \"filename must be one safe path segment\");\n }\n}\n\nfunction assertOrigin(origin: string, label: string): void {\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new SharePublishError(\"invalid-argument\", `${label} must be a canonical HTTPS origin`);\n }\n}\n\nasync function snapshotSource(\n source: Uint8Array | AsyncIterable<Uint8Array>,\n limit: number,\n): Promise<Uint8Array> {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new SharePublishError(\"invalid-argument\", \"maxBytes must be a positive safe integer\");\n }\n if (source instanceof Uint8Array) {\n if (source.byteLength > limit) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the configured byte limit\");\n return source.slice();\n }\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for await (const chunk of source) {\n if (!(chunk instanceof Uint8Array)) throw new SharePublishError(\"invalid-argument\", \"share source yielded invalid bytes\");\n total += chunk.byteLength;\n if (total > limit) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the configured byte limit\");\n chunks.push(chunk);\n }\n } catch (error) {\n if (error instanceof SharePublishError) throw error;\n throw new SharePublishError(\"upload-failed\", \"share source could not be read\");\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction assertTarget(target: SharePublishTarget): asserts target is { readonly kind: \"bearer\" } {\n if (target.kind !== \"bearer\") {\n throw new SharePublishError(\"unsupported-target\", \"this release publishes bearer shares only\");\n }\n}\n\nfunction assertRegistryUrl(value: string, allowInsecure: boolean): URL {\n let url: URL;\n try { url = new URL(value); } catch { throw new SharePublishError(\"invalid-argument\", \"registry URL is invalid\"); }\n if (url.username || url.password || url.search || url.hash) throw new SharePublishError(\"invalid-argument\", \"registry URL must not contain credentials, query, or fragment\");\n if (!allowInsecure && url.protocol !== \"https:\") throw new SharePublishError(\"invalid-argument\", \"production registry uploads require HTTPS\");\n if (url.protocol !== \"https:\" && url.hostname !== \"127.0.0.1\" && url.hostname !== \"localhost\") throw new SharePublishError(\"invalid-argument\", \"insecure registry uploads are limited to localhost\");\n return url;\n}\n\nasync function defaultUpload(options: SharePublishOptions, input: ShareUploadInput): Promise<ShareUploadResult> {\n if (options.registryBaseUrl === undefined) throw new SharePublishError(\"upload-auth-required\", \"an authenticated share registry is required\");\n const base = assertRegistryUrl(options.registryBaseUrl, options.allowInsecureRegistry === true).toString().replace(/\\/$/, \"\");\n const localInsecure = options.allowInsecureRegistry === true && (new URL(base).hostname === \"127.0.0.1\" || new URL(base).hostname === \"localhost\");\n // A Node fetch implementation does not carry the browser's Share session\n // cookie. `credentials: include` is therefore never upload authority by\n // itself; callers must inject the nonce/signature-bound authorizer or an\n // explicit hermetic uploader.\n if (options.authorizeUpload === undefined && !localInsecure) {\n throw new SharePublishError(\"upload-auth-required\", \"share upload authorization is required\");\n }\n let authorization: ShareUploadAuthorization | undefined;\n if (options.authorizeUpload !== undefined) {\n try { authorization = await options.authorizeUpload(input); }\n catch { throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\"); }\n }\n if (authorization !== undefined && options.authorizationOrigin !== undefined) {\n let authorizationUrl: URL;\n try { authorizationUrl = new URL(options.authorizationOrigin); } catch { throw new SharePublishError(\"invalid-argument\", \"upload authorization origin is invalid\"); }\n if (authorizationUrl.origin !== new URL(base).origin) throw new SharePublishError(\"upload-auth-required\", \"upload authorization is scoped to another origin\");\n }\n const headers = new Headers({\n \"content-type\": \"application/vnd.ipld.raw\",\n \"if-none-match\": \"*\",\n \"x-delete-after\": input.deleteAfter,\n });\n if (typeof authorization === \"string\") {\n headers.set(\"x-tinycloud-upload-attestation\", authorization);\n try {\n const attestation = JSON.parse(authorization) as { retention?: unknown };\n if (attestation.retention === undefined) throw new Error(\"retention\");\n headers.set(\"x-tinycloud-retention\", canonicalize(attestation.retention));\n } catch {\n throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\");\n }\n } else if (authorization !== undefined) {\n new Headers(authorization).forEach((value, key) => headers.set(key, value));\n }\n let response: Response;\n try {\n response = await (options.fetchFn ?? globalThis.fetch)(`${base}/blobs`, {\n method: \"POST\",\n headers,\n body: input.blob as BodyInit,\n ...(options.credentials === undefined ? {} : { credentials: options.credentials }),\n redirect: \"error\",\n referrerPolicy: \"no-referrer\",\n });\n } catch { throw new SharePublishError(\"upload-failed\", \"share registry is unavailable\"); }\n if (response.status === 401 || response.status === 403) throw new SharePublishError(\"upload-auth-required\", \"share upload authorization was rejected\");\n if (!response.ok) throw new SharePublishError(\"upload-failed\", \"share registry rejected the encrypted blob\");\n let body: unknown;\n try { body = await response.json(); } catch { throw new SharePublishError(\"upload-failed\", \"share registry returned an invalid response\"); }\n const record = typeof body === \"object\" && body !== null ? body as Record<string, unknown> : {};\n if (record.cid !== input.cid || typeof record.deleteAfter !== \"string\") throw new SharePublishError(\"upload-failed\", \"share registry returned an unexpected CID or retention value\");\n return { cid: input.cid, deleteAfter: record.deleteAfter };\n}\n\n/** Internal transport seam shared by bearer and addressed publishers. */\nexport async function uploadShareBlob(options: SharePublishOptions, input: ShareUploadInput): Promise<ShareUploadResult> {\n const result = await (options.uploadBlob ?? ((value: ShareUploadInput) => defaultUpload(options, value)))(input);\n if (result.cid !== input.cid || typeof result.deleteAfter !== \"string\") throw new SharePublishError(\"upload-failed\", \"share uploader returned an invalid result\");\n return result;\n}\n\n/** Publish a bounded bearer Markdown artifact using the canonical envelope. */\nexport async function publishShare(options: SharePublishOptions): Promise<PublishedShare> {\n const target = options.target ?? { kind: \"bearer\" as const };\n assertTarget(target);\n assertSafeFilename(options.filename);\n assertOrigin(options.origin, \"share origin\");\n if (options.mediaType !== undefined && options.mediaType.length === 0) throw new SharePublishError(\"invalid-argument\", \"mediaType must not be empty\");\n const maxBytes = options.maxBytes ?? SHARE_CONTENT_LIMIT;\n if (maxBytes > SHARE_CONTENT_LIMIT) throw new SharePublishError(\"max-bytes-exceeded\", \"share content exceeds the maximum 100 MiB limit\");\n const content = await snapshotSource(options.source, maxBytes);\n if (content.byteLength === 0) throw new SharePublishError(\"invalid-argument\", \"share content is empty\");\n if (options.allowBinary !== true) {\n try { new TextDecoder(\"utf-8\", { fatal: true }).decode(content); }\n catch { throw new SharePublishError(\"invalid-argument\", \"Markdown input must be valid UTF-8\"); }\n }\n const nowMs = options.now?.() ?? Date.now();\n const expiresAt = options.expiresAt ?? new Date(nowMs + DEFAULT_SHARE_LIFETIME_MS);\n if (!Number.isFinite(expiresAt.getTime()) || expiresAt.getTime() <= nowMs) throw new SharePublishError(\"invalid-argument\", \"expiresAt must be a valid future time\");\n const expiry = expiresAt.toISOString();\n const nodeAudience = options.nodeAudience ?? \"did:web:node.tinycloud.xyz\";\n const spaceId = options.spaceId ?? \"bearer\";\n const shareId = toBase64Url(globalThis.crypto.getRandomValues(new Uint8Array(16)));\n const path = `shares/${shareId}/${options.filename}`;\n const sessionPrivateKey = ed25519.utils.randomPrivateKey();\n const senderPrivateKey = ed25519.utils.randomPrivateKey();\n let contentKey: Uint8Array | undefined;\n let envelopeKey: Uint8Array | undefined;\n try {\n const sessionPublicKey = ed25519.getPublicKey(sessionPrivateKey);\n const sessionDid = didKeyFromEd25519PublicKey(sessionPublicKey);\n const delegation = mintBearerDelegation({\n issuerPrivateKey: senderPrivateKey,\n audienceDid: sessionDid,\n resourceUri: bearerResourceUri(options.origin, spaceId, path),\n expiresAtSeconds: Math.ceil(expiresAt.getTime() / 1000),\n });\n contentKey = generateKey();\n const sealedContent = await seal(content, contentKey);\n const unsigned: UnsignedShareEnvelope = {\n version: 1,\n shareId,\n delegation,\n authorizationTarget: {\n kind: \"bearerKey\",\n sessionJwk: { kty: \"OKP\", crv: \"Ed25519\", x: toBase64Url(sessionPublicKey), d: toBase64Url(sessionPrivateKey) },\n },\n target: { origin: options.origin, nodeAudience, spaceId, resource: { kind: \"exact\", path } },\n display: { filename: options.filename },\n expiry,\n content: { cid: sealedContent.cid, key: toBase64Url(contentKey) },\n };\n const envelope = signEnvelope(unsigned, senderPrivateKey);\n envelopeKey = generateKey();\n const sealedEnvelope = await seal(new TextEncoder().encode(canonicalize(envelope)), envelopeKey);\n let inlineUrl: string | undefined;\n if (options.inline === true) {\n try { inlineUrl = await encodeInlineShareUrl({ origin: options.origin, ciphertext: sealedEnvelope.blob, key32: envelopeKey }); }\n catch (error) { throw new SharePublishError(\"inline-too-large\", error instanceof Error ? error.message : \"inline share is too large\"); }\n }\n const contentUpload = await uploadShareBlob(options, { blob: sealedContent.blob, cid: sealedContent.cid, deleteAfter: expiry, contentLength: sealedContent.blob.byteLength });\n let url: string;\n let kind: \"compact\" | \"inline\";\n let retention = contentUpload.deleteAfter;\n if (options.inline === true) {\n if (inlineUrl === undefined) throw new SharePublishError(\"inline-too-large\", \"inline share is too large\");\n url = inlineUrl;\n kind = \"inline\";\n } else {\n const envelopeUpload = await uploadShareBlob(options, { blob: sealedEnvelope.blob, cid: sealedEnvelope.cid, deleteAfter: expiry, contentLength: sealedEnvelope.blob.byteLength });\n url = encodeShareUrl({ origin: options.origin, ciphertextCid: envelopeUpload.cid, key32: envelopeKey });\n kind = \"compact\";\n retention = envelopeUpload.deleteAfter;\n }\n const metadata: PublishedShareMetadata = {\n protocol: \"tinycloud-share\", version: 1, shareId, origin: options.origin,\n target: { kind: \"bearer\", origin: options.origin, nodeAudience, spaceId },\n resource: { kind: \"exact\", path }, actions: [\"read\"], expiresAt: expiry,\n display: { filename: options.filename }, content: { cid: sealedContent.cid },\n };\n const result = { protocol: \"tinycloud-share\", version: SHARE_PUBLISH_RESULT_VERSION, link: { kind, cid: sealedEnvelope.cid }, metadata, registryDeleteAfter: retention } as PublishedShare;\n Object.defineProperty(result, \"toJSON\", {\n enumerable: false,\n value: () => redactPublishedShare(result),\n });\n Object.defineProperty(result, \"url\", { enumerable: false, value: url });\n return result;\n } finally {\n sessionPrivateKey.fill(0);\n senderPrivateKey.fill(0);\n contentKey?.fill(0);\n envelopeKey?.fill(0);\n }\n}\n","import { computeCid, fromBase64Url, shareEnvelopeV2Schema, type ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\n\nexport interface ParsedAddressedEnvelope {\n readonly envelope: ShareEnvelopeV2;\n readonly policy: Record<string, unknown>;\n readonly policyCid: string;\n}\n\n/** Parse and bind the signed policy bytes before any holder or node effect. */\nexport async function parseAddressedEnvelope(value: unknown): Promise<ParsedAddressedEnvelope> {\n const envelope = shareEnvelopeV2Schema.parse(value);\n if (envelope.authorizationTarget.kind !== \"policy\") throw new TypeError(\"addressed envelope target\");\n const bytes = fromBase64Url(envelope.authorizationTarget.policyBytes);\n if (await computeCid(bytes) !== envelope.authorizationTarget.policyCid) throw new TypeError(\"addressed policy CID\");\n let decoded: unknown;\n try { decoded = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)) as unknown; } catch { throw new TypeError(\"addressed policy bytes\"); }\n if (typeof decoded !== \"object\" || decoded === null || Array.isArray(decoded)) throw new TypeError(\"addressed policy object\");\n return { envelope, policy: decoded as Record<string, unknown>, policyCid: envelope.authorizationTarget.policyCid };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base32 } from \"multiformats/bases/base32\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nconst SHA256_CODE = 0x12;\nimport * as raw from \"multiformats/codecs/raw\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\nexport interface OwnerDelegationReceipt {\n readonly delegationCid: string;\n readonly signedDagCbor: Uint8Array;\n readonly delegation: { readonly delegateDID: string; readonly spaceId: string; readonly path: string; readonly actions: readonly string[]; readonly expiry: Date };\n /** Exact service-scoped capabilities encoded in the signed owner delegation. */\n readonly permissions?: readonly OwnerDelegationPermission[];\n}\n\nexport interface OwnerDelegationPermission {\n readonly service: string;\n readonly path: string;\n readonly actions: readonly string[];\n}\n\ninterface CreateOwnerDelegationBase {\n readonly delegateDid: string;\n readonly spaceId: string;\n readonly expiresAt: Date;\n}\n\nexport type CreateOwnerDelegationParams = CreateOwnerDelegationBase & (\n | {\n readonly path: string;\n readonly actions: readonly string[];\n readonly permissions?: never;\n }\n | {\n readonly permissions: readonly OwnerDelegationPermission[];\n readonly path?: never;\n readonly actions?: never;\n }\n);\n\nconst MAX_CONTENT_BYTES = 100 * 1024 * 1024;\nexport const POLICY_ENFORCEMENT_DOMAIN = \"xyz.tinycloud.share/policy-enforcement/v2\\0\";\nconst POLICY_DOMAIN = \"xyz.tinycloud.share/policy/v2\\0\";\nexport const OWNER_SHARE_REGISTRATION_DOMAIN = \"xyz.tinycloud.share/policy-registration/v2\\0\";\n\nexport type OwnerShareAction = \"tinycloud.kv/get\" | \"tinycloud.kv/list\" | \"tinycloud.kv/metadata\" | \"tinycloud.kv/put\";\nexport interface OwnerShareDecryption {\n readonly networkId: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\nexport type OwnerShareMatcher =\n | { readonly kind: \"exactEmail\"; readonly value: string }\n | { readonly kind: \"emailDomain\"; readonly value: string }\n | { readonly kind: \"recipientDid\"; readonly value: string }\n | { readonly kind: \"bearer\" };\n\nexport interface OwnerSharePolicyV2 {\n readonly type: \"TinyCloudSharePolicy\";\n readonly version: 2;\n readonly shareId: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly enforcerDid: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly decryption?: OwnerShareDecryption;\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly ownerDelegationCid: string;\n readonly expiresAt: string;\n}\n\nexport interface DelegatedShareKey {\n readonly did: string;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n /** The underlying WebCrypto private key handle; private JWK material is never returned. */\n readonly cryptoKey: CryptoKey;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n clear(): void;\n}\n\nexport interface SignedDelegation {\n readonly cid: string;\n readonly dagCbor: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly facts: Record<string, string | readonly string[]>;\n readonly signature: string;\n}\n\nexport interface RegisterOwnerSharePolicyParams {\n readonly policy: { readonly bytes: Uint8Array; readonly cid: string; readonly proof: string };\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly enforcementDelegation: SignedDelegation;\n readonly contentSourceDigest: string;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof?: { readonly kid: string; readonly publicKey: Uint8Array };\n}\n\nexport interface OwnerSharePolicyRegistration {\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly ownerDelegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly enforcerDid: string;\n readonly shareId: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly registeredAt: string;\n readonly expiresAt: string;\n}\n\nexport interface OwnerSharePolicyRegistrationReceipt {\n readonly registration: OwnerSharePolicyRegistration;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nfunction bytes(value: Uint8Array): Uint8Array { return new Uint8Array(value); }\n\nfunction b64(value: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of value) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n if (typeof Buffer !== \"undefined\") return Buffer.from(value).toString(\"base64url\");\n throw new Error(\"base64url encoding is unavailable\");\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"owner-share value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\nfunction cid(bytesValue: Uint8Array): string {\n return CID.createV1(raw.code, createDigest(SHA256_CODE, sha256(bytesValue))).toString(base32.encoder);\n}\n\nfunction digest(bytesValue: Uint8Array): string { return b64(sha256(bytesValue)); }\n\nfunction didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share key public key must be 32 bytes\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\nfunction assertCanonical(value: string, label: string): void {\n if (value !== canonicalize(JSON.parse(value))) throw new Error(`${label} is not canonical JSON`);\n}\n\nexport function dagCborEncode(value: unknown): Uint8Array {\n const output: number[] = [];\n const writeHeader = (major: number, length: number): void => {\n if (!Number.isSafeInteger(length) || length < 0) throw new Error(\"DAG-CBOR value is too large\");\n if (length < 24) output.push((major << 5) | length);\n else if (length < 0x100) output.push((major << 5) | 24, length);\n else if (length < 0x10000) output.push((major << 5) | 25, length >> 8, length & 0xff);\n else throw new Error(\"DAG-CBOR value is too large\");\n };\n const write = (item: unknown): void => {\n if (item === null) { output.push(0xf6); return; }\n if (item === false) { output.push(0xf4); return; }\n if (item === true) { output.push(0xf5); return; }\n if (typeof item === \"string\") {\n const encoded = new TextEncoder().encode(item);\n writeHeader(3, encoded.length); output.push(...encoded); return;\n }\n if (typeof item === \"number\" && Number.isSafeInteger(item)) {\n if (item >= 0) writeHeader(0, item);\n else writeHeader(1, -1 - item);\n return;\n }\n if (Array.isArray(item)) {\n writeHeader(4, item.length); item.forEach(write); return;\n }\n if (typeof item === \"object\" && item !== null) {\n const entries = Object.entries(item as Record<string, unknown>).map(([key, value]) => {\n const keyBytes = dagCborEncode(key);\n return { key, value, keyBytes };\n }).sort((left, right) => {\n if (left.keyBytes.length !== right.keyBytes.length) return left.keyBytes.length - right.keyBytes.length;\n for (let index = 0; index < left.keyBytes.length; index += 1) {\n const leftByte = left.keyBytes[index] ?? 0;\n const rightByte = right.keyBytes[index] ?? 0;\n if (leftByte !== rightByte) return leftByte - rightByte;\n }\n return 0;\n });\n writeHeader(5, entries.length);\n entries.forEach(({ key, value }) => { write(key); write(value); });\n return;\n }\n throw new Error(\"Unsupported DAG-CBOR value\");\n };\n write(value);\n return Uint8Array.from(output);\n}\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nexport async function createDelegatedShareKey(options: { readonly extractable: boolean }): Promise<DelegatedShareKey> {\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n const generated = await crypto.subtle.generateKey({ name: \"Ed25519\" }, options.extractable, [\"sign\", \"verify\"]) as CryptoKeyPair;\n const privateKey = generated.privateKey;\n const publicKey = new Uint8Array(await crypto.subtle.exportKey(\"raw\", generated.publicKey));\n let cleared = false;\n const key: DelegatedShareKey = {\n did: didKeyFromEd25519PublicKey(publicKey),\n publicKey: bytes(publicKey),\n extractable: options.extractable,\n cryptoKey: privateKey,\n async sign(input) {\n if (cleared) throw new Error(\"share key has been cleared\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, privateKey, input));\n },\n clear() { cleared = true; },\n };\n return key;\n}\n\n/**\n * Rehydrate a signer wrapper around a `DelegatedShareKey`'s private\n * `CryptoKey` handle that was persisted (e.g. via IndexedDB structured\n * clone) and recovered after a reload. `privateKey` must be the same\n * non-extractable Ed25519 `CryptoKey` originally produced by\n * {@link createDelegatedShareKey}.\n */\nexport function restoreDelegatedShareKey(input: { readonly privateKey: CryptoKey; readonly publicKey: Uint8Array; readonly extractable: boolean }): DelegatedShareKey {\n let cleared = false;\n return {\n did: didKeyFromEd25519PublicKey(input.publicKey),\n publicKey: bytes(input.publicKey),\n extractable: input.extractable,\n cryptoKey: input.privateKey,\n async sign(signBytes) {\n if (cleared) throw new Error(\"share key has been cleared\");\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, input.privateKey, signBytes));\n },\n clear() { cleared = true; },\n };\n}\n\nexport async function createPolicyEnforcementDelegation(input: {\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly shareKey: DelegatedShareKey;\n readonly enforcerDid: string;\n readonly policyCid: string;\n readonly shareId: string;\n readonly spaceId: string;\n readonly nodeAudience: string;\n readonly path: string;\n readonly actions: readonly OwnerShareAction[];\n readonly contentSourceDigest: string;\n readonly expiresAt: string;\n}): Promise<SignedDelegation> {\n if (input.shareKey.did.length === 0 || input.ownerDelegation.delegationCid.length === 0) throw new Error(\"owner delegation and share key are required\");\n const facts = {\n ownerDelegationCid: input.ownerDelegation.delegationCid,\n policyCid: input.policyCid,\n shareId: input.shareId,\n shareKeyDid: input.shareKey.did,\n enforcerDid: input.enforcerDid,\n nodeAudience: input.nodeAudience,\n spaceId: input.spaceId,\n path: input.path,\n actions: [...input.actions],\n contentSourceDigest: input.contentSourceDigest,\n expiresAt: input.expiresAt,\n } satisfies Record<string, string | readonly string[]>;\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts };\n const dagCborBytes = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n const signature = b64(await input.shareKey.sign(dagCborBytes));\n return { cid: cid(dagCborBytes), dagCbor: b64(dagCborBytes), issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts, signature };\n}\n\nexport async function canonicalOwnerSharePolicy(policy: OwnerSharePolicyV2): Promise<{ readonly bytes: Uint8Array; readonly cid: string; readonly digest: string }> {\n const text = canonicalize({ domain: POLICY_DOMAIN, policy });\n const policyBytes = new TextEncoder().encode(text);\n return { bytes: policyBytes, cid: cid(policyBytes), digest: digest(policyBytes) };\n}\n\nexport function computeOwnerShareRegistrationCid(registration: Omit<OwnerSharePolicyRegistration, \"registrationCid\">): string {\n return cid(new TextEncoder().encode(canonicalize(registration)));\n}\n\nexport function validateOwnerSharePolicyRegistration(value: unknown, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n if (cid(expected.policy.bytes) !== expected.policy.cid) throw new Error(\"submitted owner-share policy bytes do not match its CID\");\n const root = assertObject(value, [\"registration\", \"proof\"], \"owner-share registration response\");\n const registration = assertObject(root.registration, [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"], \"owner-share registration\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"owner-share registration proof\");\n if (registration.policyCid !== expected.policy.cid || registration.ownerDelegationCid !== expected.ownerDelegation.delegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegation.cid || registration.contentSourceDigest !== expected.contentSourceDigest) throw new Error(\"owner-share registration is not bound to the submitted chain\");\n let policyValue: Record<string, unknown>;\n try { policyValue = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(expected.policy.bytes)) as Record<string, unknown>; } catch { throw new Error(\"owner-share policy is not valid JSON\"); }\n const policy = policyValue.policy as Record<string, unknown> | undefined;\n if (policyValue.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || Array.isArray(policy)) throw new Error(\"owner-share policy envelope is invalid\");\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown>;\n const registrationResource = registration.resource as Record<string, unknown>;\n const enforcementFacts = expected.enforcementDelegation.facts;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\" || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource?.path !== \"string\" || !Array.isArray(policy.actions) || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId || canonicalize(policy.recipientMatcher) !== canonicalize(registration.recipientMatcher) || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path || canonicalize(policy.actions) !== canonicalize(registration.actions) || canonicalize(policy.contentSource) !== canonicalize(registration.contentSource) || policy.expiresAt !== registration.expiresAt || policy.contentSourceDigest !== registration.contentSourceDigest || enforcementFacts.ownerDelegationCid !== registration.ownerDelegationCid || enforcementFacts.policyCid !== registration.policyCid || enforcementFacts.shareKeyDid !== registration.shareKeyDid || enforcementFacts.enforcerDid !== registration.enforcerDid || enforcementFacts.nodeAudience !== registrationTarget.nodeAudience || enforcementFacts.spaceId !== registrationTarget.spaceId || enforcementFacts.path !== registrationResource.path || canonicalize(enforcementFacts.actions) !== canonicalize(registration.actions) || enforcementFacts.expiresAt !== registration.expiresAt) throw new Error(\"owner-share registration is not bound to the canonical policy\");\n if (typeof registration.registrationCid !== \"string\" || typeof registration.expiresAt !== \"string\" || typeof registration.registeredAt !== \"string\") throw new Error(\"owner-share registration timestamps are invalid\");\n if (new Date(registration.expiresAt).toISOString() !== registration.expiresAt || Date.parse(registration.expiresAt) <= Date.now()) throw new Error(\"owner-share registration is expired or non-canonical\");\n const { registrationCid: _registrationCid, ...registrationCore } = registration;\n if (computeOwnerShareRegistrationCid(registrationCore as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registration.registrationCid) throw new Error(\"owner-share registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"owner-share registration proof is invalid\");\n const proofKey = expected.nodeProof;\n if (proofKey === undefined) throw new Error(\"owner-share registration proof trust material is required\");\n if (proof.kid !== proofKey.kid) throw new Error(\"owner-share registration proof key is not trusted\");\n const encodedKid = proofKey.publicKey;\n if (encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01) {\n // did:key multicodec prefix is removed below.\n } else if (encodedKid.length !== 32) throw new Error(\"owner-share registration proof key is invalid\");\n const publicKey = encodedKid.length === 34 ? encodedKid.slice(2) : encodedKid;\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(registrationCore)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"owner-share registration proof signature is invalid\");\n return { registration: registration as unknown as OwnerSharePolicyRegistration, proof: proof as unknown as OwnerSharePolicyRegistrationReceipt[\"proof\"] };\n}\n\n/** Validate the exact UTF-8 response bytes emitted by the registration route. */\nexport function validateOwnerSharePolicyRegistrationBytes(bytesValue: Uint8Array, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"owner-share registration response is not valid UTF-8 JSON\");\n }\n return validateOwnerSharePolicyRegistration(value, expected);\n}\n\nexport { MAX_CONTENT_BYTES };\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import type { ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\n\n/** The only interactive boundary exposed by the headless SDK. */\nexport type ShareAuthorizationMethod = \"openkey-device\" | \"email-claim\" | \"email-otp\";\n\nexport interface ShareAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n /** A browser-safe continuation location. It must never contain a claim secret. */\n readonly continueUrl?: string;\n /** An opaque, short-lived, nonce-bound handle. It is not a bearer credential. */\n readonly resumeToken?: string;\n}\n\nexport interface ShareAuthorizationDenied {\n readonly state: \"denied\";\n readonly reason: \"rejected\" | \"expired\" | \"revoked\" | \"unsupported\";\n}\n\nexport interface ShareAuthorizationReady<T> {\n readonly state: \"ready\";\n readonly value: T;\n}\n\nexport type ShareAuthorizationResult<T> = ShareAuthorizationReady<T> | ShareAuthorizationRequired | ShareAuthorizationDenied;\n\nexport interface ShareAuthorizationAdapter<T> {\n begin(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n }): Promise<ShareAuthorizationResult<T>>;\n resume(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n readonly resumeToken: string;\n readonly proof?: unknown;\n }): Promise<ShareAuthorizationResult<T>>;\n /** Verify the detached node proof against a pinned authority trust bundle. */\n readonly verifyResult?: (input: { readonly envelope: ShareEnvelopeV2; readonly value: T; readonly proof: unknown }) => Promise<boolean>;\n}\n\n/**\n * A node-authorized addressed read. Returning plaintext alone is not an\n * authorization result: the caller must also return the signed response\n * binding and digest that the node produced for that exact share.\n */\nexport interface ShareAuthorizedContent {\n readonly bytes: Uint8Array;\n readonly bodyDigest: string;\n readonly contentSourceDigest: string;\n readonly binding: {\n readonly shareId: string;\n readonly delegationCid: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly action?: string;\n };\n /** A detached node proof; self-reported bytes and digests are not authorization. */\n readonly proof: unknown;\n}\n\n/**\n * Start or continue a target authorization without ever guessing a device,\n * claim, or delegation secret. Adapters own their protocol and are expected\n * to bind their resume token to a server challenge and expiry.\n */\nexport async function authorizeShare<T>(\n input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: ShareAuthorizationMethod;\n readonly adapter: ShareAuthorizationAdapter<T>;\n readonly resumeToken?: string;\n readonly proof?: unknown;\n },\n): Promise<ShareAuthorizationResult<T>> {\n if (input.resumeToken !== undefined) {\n if (input.resumeToken.length < 16 || input.resumeToken.length > 512) {\n return { state: \"denied\", reason: \"rejected\" };\n }\n return input.adapter.resume({\n envelope: input.envelope,\n method: input.method,\n resumeToken: input.resumeToken,\n ...(input.proof === undefined ? {} : { proof: input.proof }),\n });\n }\n return input.adapter.begin({ envelope: input.envelope, method: input.method });\n}\n\nexport function authorizationMethodForTarget(target: { readonly kind: string }): ShareAuthorizationMethod | undefined {\n if (target.kind === \"recipientDid\") return \"openkey-device\";\n if (target.kind === \"email\") return \"email-claim\";\n if (target.kind === \"emailDomain\") return \"email-claim\";\n return undefined;\n}\n","import type { ShareAuthorizationRequired, ShareAuthorizationMethod } from \"./authorization.js\";\nimport { authorizationMethodForTarget } from \"./authorization.js\";\nimport type { AddressedSharePublishOptions } from \"./addressed-publish.js\";\nimport { publishShare, SharePublishError, SHARE_CONTENT_LIMIT, type PublishedShare, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nimport { base58btc } from \"multiformats/bases/base58\";\n\nexport type ShareTarget = SharePublishTarget;\n\nexport interface TargetPublishInput {\n readonly source: Uint8Array;\n readonly filename: string;\n /** Additional files for a prefix resource; source remains the first file for compatibility. */\n readonly files?: readonly { readonly bytes: Uint8Array; readonly filename: string; readonly mediaType?: string }[];\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n readonly expiresAt: Date;\n readonly origin: string;\n readonly mediaType?: string;\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly inline?: boolean;\n readonly upload?: AddressedSharePublishOptions[\"upload\"];\n readonly notify?: boolean;\n}\n\nexport type TargetPublishOutcome = PublishedShare | ShareAuthorizationRequired;\n\nexport interface TargetPublishAdapter {\n publish(input: TargetPublishInput): Promise<TargetPublishOutcome>;\n}\n\nfunction validEmail(value: string): boolean {\n return /^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i.test(value);\n}\n\nfunction validDomain(value: string): boolean {\n return /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))+$/i.test(value);\n}\n\nfunction validRecipientDid(value: string): boolean {\n if (value.length === 0 || value.length > 2048 || /[\\u0000-\\u0020\\u007f]/.test(value)) return false;\n const parts = value.split(\":\");\n if (parts.length < 3 || parts[0] !== \"did\" || !/^[a-z0-9]+$/.test(parts[1] ?? \"\")) return false;\n const identifier = parts.slice(2);\n if (identifier.some((part) => part.length === 0)) return false;\n if (parts[1] === \"web\") {\n const host = identifier[0] ?? \"\";\n if (host.length > 253 || host.split(\".\").some((label) => !label || label.length > 63 || !/^[A-Za-z0-9-]+$/.test(label) || label.startsWith(\"-\") || label.endsWith(\"-\"))) return false;\n return identifier.slice(1).every((part) => /^[A-Za-z0-9._%-]+$/.test(part));\n }\n if (parts[1] === \"pkh\") return identifier.length >= 3 && identifier.every((part) => /^[A-Za-z0-9._%-]+$/.test(part));\n if (parts[1] === \"key\") {\n try {\n const bytes = base58btc.decode(identifier.join(\":\"));\n return bytes.length === 34 && bytes[0] === 0xed && bytes[1] === 0x01;\n } catch {\n return false;\n }\n }\n return false;\n}\n\nexport function normalizeShareTarget(target: ShareTarget): ShareTarget {\n if (target.kind === \"bearer\") return target;\n if (target.kind === \"recipientDid\") {\n if (!validRecipientDid(target.did)) throw new TypeError(\"recipient DID is invalid\");\n return { kind: target.kind, did: target.did };\n }\n if (target.kind === \"email\") {\n if (!validEmail(target.address)) throw new TypeError(\"recipient email is invalid\");\n const at = target.address.lastIndexOf(\"@\");\n return { kind: target.kind, address: `${target.address.slice(0, at)}@${target.address.slice(at + 1).toLowerCase()}` };\n }\n if (!validDomain(target.domain)) throw new TypeError(\"recipient email domain is invalid\");\n return { kind: target.kind, domain: target.domain.toLowerCase() };\n}\n\nexport function targetAuthorizationMethod(target: ShareTarget): ShareAuthorizationMethod | undefined {\n return authorizationMethodForTarget(target);\n}\n\n/** Publish bearer shares locally, and route addressed shares to an authority adapter. */\nexport async function publishTargetShare(input: SharePublishOptions & {\n readonly target: ShareTarget;\n readonly notify?: boolean;\n readonly targetAdapter?: TargetPublishAdapter;\n readonly files?: readonly { readonly bytes: Uint8Array; readonly filename: string; readonly mediaType?: string }[];\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n}): Promise<TargetPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n if (target.kind === \"bearer\") return publishShare(input);\n if (input.targetAdapter === undefined) {\n return {\n state: \"authorization-required\",\n method: targetAuthorizationMethod(target)!,\n };\n }\n const source = input.source instanceof Uint8Array ? input.source.slice() : await (async () => {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of input.source as AsyncIterable<Uint8Array>) {\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"addressed publication source yielded invalid bytes\");\n size += chunk.byteLength;\n if (size > (input.maxBytes ?? 100 * 1024 * 1024)) throw new TypeError(\"addressed publication exceeds maxBytes\");\n chunks.push(chunk.slice());\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n return bytes;\n })();\n const files = input.files === undefined || input.files.length === 0\n ? [{ bytes: source }]\n : input.files;\n const limit = input.maxBytes ?? SHARE_CONTENT_LIMIT;\n let totalBytes = 0;\n for (const file of files) {\n totalBytes += file.bytes.byteLength;\n if (!Number.isSafeInteger(totalBytes) || totalBytes > limit) {\n throw new SharePublishError(\"max-bytes-exceeded\", \"addressed publication exceeds the combined byte limit\");\n }\n }\n return input.targetAdapter.publish({\n source,\n filename: input.filename,\n ...(input.files === undefined ? {} : { files: input.files }),\n ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),\n ...(input.resourceKind === undefined ? {} : { resourceKind: input.resourceKind }),\n ...(input.actions === undefined ? {} : { actions: input.actions }),\n target,\n expiresAt: input.expiresAt ?? new Date((input.now?.() ?? Date.now()) + 7 * 24 * 60 * 60 * 1000),\n origin: input.origin,\n ...(input.inline === undefined ? {} : { inline: input.inline }),\n upload: {\n ...(input.registryBaseUrl === undefined ? {} : { registryBaseUrl: input.registryBaseUrl }),\n ...(input.fetchFn === undefined ? {} : { fetchFn: input.fetchFn }),\n ...(input.authorizeUpload === undefined ? {} : { authorizeUpload: input.authorizeUpload }),\n ...(input.authorizationOrigin === undefined ? {} : { authorizationOrigin: input.authorizationOrigin }),\n ...(input.credentials === undefined ? {} : { credentials: input.credentials }),\n ...(input.allowInsecureRegistry === undefined ? {} : { allowInsecureRegistry: input.allowInsecureRegistry }),\n ...(input.uploadBlob === undefined ? {} : { uploadBlob: input.uploadBlob }),\n },\n ...(input.notify === undefined ? {} : { notify: input.notify }),\n });\n}\n","import {\n canonicalize,\n computeCid,\n encodeInlineShareUrl,\n encodeShareUrl,\n fromBase64Url,\n generateKey,\n seal,\n shareEnvelopeV2Schema,\n toBase64Url,\n unsignedShareEnvelopeV2Schema,\n type ContentSource,\n type ShareAction,\n} from \"@tinycloud/share-envelope\";\nimport {\n canonicalOwnerSharePolicy,\n createDelegatedShareKey,\n createPolicyEnforcementDelegation,\n type CreateOwnerDelegationParams,\n type OwnerDelegationReceipt,\n type OwnerShareAction,\n type OwnerShareDecryption,\n type OwnerShareMatcher,\n type OwnerSharePolicyRegistrationReceipt,\n type RegisterOwnerSharePolicyParams,\n} from \"./owner-policy.js\";\nimport {\n SHARE_CONTENT_LIMIT,\n SHARE_PUBLISH_RESULT_VERSION,\n redactPublishedShare,\n uploadShareBlob,\n type PublishedShare,\n type SharePublishOptions,\n} from \"./publish.js\";\nimport { normalizeShareTarget, type ShareTarget } from \"./targets.js\";\n\nconst ENVELOPE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\n\nexport interface AddressedPublishAuthority {\n readonly ownerDid: string;\n createOwnerDelegation(input: CreateOwnerDelegationParams): Promise<OwnerDelegationReceipt>;\n registerOwnerSharePolicy(input: RegisterOwnerSharePolicyParams): Promise<OwnerSharePolicyRegistrationReceipt>;\n}\n\nexport interface AddressedSharePublishOptions {\n readonly shareId: string;\n readonly shareOrigin: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n readonly spaceId: string;\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly ShareAction[];\n readonly policyActions: readonly OwnerShareAction[];\n readonly contentSource: ContentSource;\n readonly contentSourceDigest?: string;\n readonly filename: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n readonly deliveryEmail?: string;\n readonly expiresAt: Date;\n readonly decryption?: OwnerShareDecryption;\n readonly inline?: boolean;\n readonly authority: AddressedPublishAuthority;\n readonly upload: Pick<SharePublishOptions, \"registryBaseUrl\" | \"fetchFn\" | \"authorizeUpload\" | \"authorizationOrigin\" | \"credentials\" | \"allowInsecureRegistry\" | \"uploadBlob\">;\n}\n\nfunction targetMatcher(target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>): OwnerShareMatcher {\n if (target.kind === \"recipientDid\") return { kind: \"recipientDid\", value: target.did };\n if (target.kind === \"email\") return { kind: \"exactEmail\", value: target.address };\n return { kind: \"emailDomain\", value: target.domain };\n}\n\nfunction targetKind(target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>): \"recipientDid\" | \"email\" | \"emailDomain\" {\n return target.kind;\n}\n\nfunction assertSafeInput(input: AddressedSharePublishOptions): void {\n if (!/^[A-Za-z0-9_-]{16,128}$/.test(input.shareId)) throw new TypeError(\"addressed share id is invalid\");\n if (input.filename.length === 0 || input.filename === \".\" || input.filename === \"..\" || /[/\\\\\\u0000-\\u001f\\u007f]/.test(input.filename)) throw new TypeError(\"addressed filename is invalid\");\n if (!Number.isSafeInteger(input.byteLength) || input.byteLength < 0 || input.byteLength > SHARE_CONTENT_LIMIT) throw new TypeError(\"addressed content length is invalid\");\n if (input.actions.length === 0 || input.policyActions.length === 0) throw new TypeError(\"addressed share actions are empty\");\n const expiry = input.expiresAt.getTime();\n if (!Number.isFinite(expiry) || expiry <= Date.now()) throw new TypeError(\"addressed share expiry must be in the future\");\n if (input.artifact === \"html\" && (input.resource.kind !== \"prefix\" || !input.actions.includes(\"read\") || !input.actions.includes(\"list\"))) throw new TypeError(\"html artifacts require a readable prefix\");\n if (input.contentSource.kind !== \"kv\") throw new TypeError(\"addressed policy publication requires a KV content source\");\n}\n\nasync function sha256(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n\nfunction publicationResult(input: {\n readonly options: AddressedSharePublishOptions;\n readonly url: string;\n readonly envelopeCid: string;\n readonly shareCid: string;\n readonly matcher: OwnerShareMatcher;\n readonly registration: OwnerSharePolicyRegistrationReceipt[\"registration\"];\n readonly policyCid: string;\n readonly enforcementDelegationCid: string;\n readonly shareKeyDid: string;\n readonly retention: string;\n}): PublishedShare {\n const result = {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n url: input.url,\n link: { kind: input.options.inline === true ? \"inline\" as const : \"compact\" as const, cid: input.envelopeCid },\n metadata: {\n protocol: \"tinycloud-share\" as const,\n version: 1 as const,\n shareId: input.options.shareId,\n origin: input.options.shareOrigin,\n target: {\n kind: targetKind(input.options.target),\n origin: input.options.nodeOrigin,\n nodeAudience: input.options.nodeAudience,\n spaceId: input.options.spaceId,\n },\n resource: { ...input.options.resource },\n actions: [...input.options.actions],\n expiresAt: input.options.expiresAt.toISOString(),\n display: { filename: input.options.filename },\n recipientMatcher: { ...input.matcher },\n registrationCid: input.registration.registrationCid,\n policyCid: input.policyCid,\n ownerDelegationCid: input.registration.ownerDelegationCid,\n enforcementDelegationCid: input.enforcementDelegationCid,\n ownerDid: input.registration.ownerDid,\n shareKeyDid: input.shareKeyDid,\n enforcerDid: input.registration.enforcerDid,\n envelopeCid: input.envelopeCid,\n shareCid: input.shareCid,\n },\n registryDeleteAfter: input.retention,\n } satisfies PublishedShare;\n Object.defineProperty(result, \"toJSON\", { enumerable: false, value: () => redactPublishedShare(result) });\n Object.defineProperty(result, \"url\", { enumerable: false, value: input.url });\n return result;\n}\n\n/**\n * Canonical addressed publisher shared by browser and CLI.\n *\n * Callers own authenticated KV writes and transport. This function alone owns\n * the policy, delegation, outer-authority, signed-envelope, encryption, and\n * link bytes.\n */\nexport async function publishAddressedShare(options: AddressedSharePublishOptions): Promise<PublishedShare> {\n assertSafeInput(options);\n const target = normalizeShareTarget(options.target);\n if (target.kind === \"bearer\") throw new TypeError(\"addressed target is required\");\n if (options.contentSource.kind !== \"kv\") throw new TypeError(\"addressed policy publication requires a KV content source\");\n const contentSource = options.contentSource;\n const matcher = targetMatcher(target);\n const expiresAt = options.expiresAt.toISOString();\n const contentSourceDigest = options.contentSourceDigest ?? await sha256(new TextEncoder().encode(canonicalize(contentSource)));\n const shareKey = await createDelegatedShareKey({ extractable: false });\n let envelopeKey: Uint8Array | undefined;\n try {\n const permissions = [\n {\n service: \"tinycloud.kv\",\n path: options.resource.kind === \"prefix\" ? `${options.resource.path.replace(/\\/+$/, \"\")}/` : options.resource.path,\n actions: [...options.policyActions],\n },\n ...(options.decryption === undefined ? [] : [{\n service: \"tinycloud.encryption\",\n path: options.decryption.networkId,\n actions: [options.decryption.action],\n }]),\n ];\n const ownerDelegation = await options.authority.createOwnerDelegation({\n delegateDid: shareKey.did,\n spaceId: options.spaceId,\n permissions,\n expiresAt: options.expiresAt,\n });\n const policy = {\n type: \"TinyCloudSharePolicy\" as const,\n version: 2 as const,\n shareId: options.shareId,\n ownerDid: options.authority.ownerDid,\n shareKeyDid: shareKey.did,\n recipientMatcher: matcher,\n target: {\n origin: options.nodeOrigin,\n nodeAudience: options.nodeAudience,\n enforcerDid: options.enforcerDid,\n spaceId: options.spaceId,\n },\n resource: { ...options.resource },\n actions: [...options.policyActions],\n ...(options.decryption === undefined ? {} : { decryption: options.decryption }),\n contentSource,\n contentSourceDigest,\n ownerDelegationCid: ownerDelegation.delegationCid,\n expiresAt,\n };\n const canonicalPolicy = await canonicalOwnerSharePolicy(policy);\n const policyProof = toBase64Url(await shareKey.sign(canonicalPolicy.bytes));\n const enforcementDelegation = await createPolicyEnforcementDelegation({\n ownerDelegation,\n shareKey,\n enforcerDid: options.enforcerDid,\n policyCid: canonicalPolicy.cid,\n shareId: options.shareId,\n spaceId: options.spaceId,\n nodeAudience: options.nodeAudience,\n path: options.resource.path,\n actions: options.policyActions,\n contentSourceDigest,\n expiresAt,\n });\n const registration = await options.authority.registerOwnerSharePolicy({\n policy: { bytes: canonicalPolicy.bytes, cid: canonicalPolicy.cid, proof: policyProof },\n ownerDelegation,\n enforcementDelegation,\n contentSourceDigest,\n });\n const authorityMaterialDigest = await sha256(fromBase64Url(enforcementDelegation.dagCbor));\n const authorityTarget = {\n origin: options.nodeOrigin,\n nodeAudience: options.nodeAudience,\n enforcerDid: options.enforcerDid,\n spaceId: options.spaceId,\n };\n const envelopeIdentity = {\n schema: \"xyz.tinycloud.share/envelope/v2\",\n version: 2,\n shareId: options.shareId,\n delegationCid: ownerDelegation.delegationCid,\n policyCid: canonicalPolicy.cid,\n target: authorityTarget,\n resource: options.resource,\n actions: options.policyActions,\n ...(options.decryption === undefined ? {} : { decryption: options.decryption }),\n contentSource,\n contentSourceDigest,\n expiresAt,\n };\n const envelopeCid = await computeCid(new TextEncoder().encode(canonicalize(envelopeIdentity)));\n const shareCid = await computeCid(new TextEncoder().encode(canonicalize({ version: 2, shareId: options.shareId, policyCid: canonicalPolicy.cid, envelopeCid })));\n const outerUnsigned = { ...envelopeIdentity, envelopeCid, shareCid };\n const outerSignature = toBase64Url(await shareKey.sign(new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(outerUnsigned)}`)));\n const unsigned = {\n version: 2 as const,\n shareId: options.shareId,\n recipientMatcher: matcher,\n ...(options.deliveryEmail === undefined ? {} : { deliveryEmail: options.deliveryEmail }),\n actions: [...options.actions],\n resource: { ...options.resource },\n target: { origin: options.nodeOrigin, nodeAudience: options.nodeAudience, spaceId: options.spaceId },\n delegationCid: ownerDelegation.delegationCid,\n authorityMaterialHandle: registration.registration.registrationCid,\n authorityMaterialDigest,\n contentSource,\n contentSourceDigest,\n authorizationTarget: { kind: \"policy\" as const, policyCid: canonicalPolicy.cid, policyBytes: toBase64Url(canonicalPolicy.bytes) },\n display: { filename: options.filename },\n expiry: expiresAt,\n encrypted: true,\n metadata: {\n mediaType: options.mediaType,\n byteLength: options.byteLength,\n filename: options.filename,\n ...(options.mediaType.startsWith(\"text/\") ? { encoding: \"utf-8\" as const } : {}),\n ...(options.artifact === undefined ? {} : { artifact: options.artifact }),\n },\n ownerAuthority: {\n registrationCid: registration.registration.registrationCid,\n shareCid,\n envelopeCid,\n enforcementDelegation,\n registrationReceipt: registration,\n outerEnvelope: {\n ...outerUnsigned,\n signature: { signerDid: shareKey.did, algorithm: \"Ed25519\" as const, value: outerSignature },\n },\n },\n };\n unsignedShareEnvelopeV2Schema.parse(unsigned);\n const envelopeSignature = toBase64Url(await shareKey.sign(new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(unsigned)}`)));\n const envelope = { ...unsigned, signature: { signerDid: shareKey.did, algorithm: \"Ed25519\" as const, value: envelopeSignature } };\n shareEnvelopeV2Schema.parse(envelope);\n envelopeKey = generateKey();\n const sealed = await seal(new TextEncoder().encode(canonicalize(envelope)), envelopeKey);\n let url: string;\n let retention = expiresAt;\n if (options.inline === true) {\n url = await encodeInlineShareUrl({ origin: options.shareOrigin, ciphertext: sealed.blob, key32: envelopeKey });\n } else {\n const uploaded = await uploadShareBlob({\n source: new Uint8Array([1]),\n filename: options.filename,\n origin: options.shareOrigin,\n ...options.upload,\n }, { blob: sealed.blob, cid: sealed.cid, deleteAfter: expiresAt, contentLength: sealed.blob.byteLength });\n retention = uploaded.deleteAfter;\n url = encodeShareUrl({ origin: options.shareOrigin, ciphertextCid: uploaded.cid, key32: envelopeKey });\n }\n return publicationResult({\n options,\n url,\n envelopeCid: sealed.cid,\n shareCid,\n matcher,\n registration: registration.registration,\n policyCid: canonicalPolicy.cid,\n enforcementDelegationCid: enforcementDelegation.cid,\n shareKeyDid: shareKey.did,\n retention,\n });\n } finally {\n shareKey.clear();\n envelopeKey?.fill(0);\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport {\n canonicalize,\n computeCid,\n ed25519PublicKeyFromDidKey,\n fromBase64Url,\n type ShareEnvelopeV2,\n} from \"@tinycloud/share-envelope\";\nimport {\n validateOwnerSharePolicyRegistration,\n type OwnerDelegationReceipt,\n type SignedDelegation,\n dagCborEncode,\n POLICY_ENFORCEMENT_DOMAIN,\n} from \"./owner-policy.js\";\nimport type { SharePolicyAuthority, SharePolicyEvidence } from \"./receive.js\";\n\nconst ENVELOPE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\n\nexport interface RegisteredPolicyAuthorityOptions {\n readonly nodeProof: { readonly kid: string; readonly publicKey: Uint8Array };\n readonly expectedTarget: {\n readonly origin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n };\n}\n\nfunction record(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const output = value as Record<string, unknown>;\n if (Object.keys(output).length !== keys.length || keys.some((key) => !Object.hasOwn(output, key))) throw new Error(`${label} has unknown or missing fields`);\n return output;\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw new Error(`${label} is invalid`);\n return value;\n}\n\nfunction stringArray(value: unknown, label: string): readonly string[] {\n if (!Array.isArray(value) || value.length === 0 || !value.every((item) => typeof item === \"string\" && item.length > 0)) throw new Error(`${label} is invalid`);\n return value;\n}\n\nfunction parseEnforcement(value: unknown): SignedDelegation {\n const delegation = record(value, [\"cid\", \"dagCbor\", \"issuerDid\", \"audienceDid\", \"facts\", \"signature\"], \"policy enforcement delegation\");\n const facts = record(delegation.facts, [\"ownerDelegationCid\", \"policyCid\", \"shareId\", \"shareKeyDid\", \"enforcerDid\", \"nodeAudience\", \"spaceId\", \"path\", \"actions\", \"contentSourceDigest\", \"expiresAt\"], \"policy enforcement facts\");\n return {\n cid: requiredString(delegation.cid, \"policy enforcement CID\"),\n dagCbor: requiredString(delegation.dagCbor, \"policy enforcement bytes\"),\n issuerDid: requiredString(delegation.issuerDid, \"policy enforcement issuer\"),\n audienceDid: requiredString(delegation.audienceDid, \"policy enforcement audience\"),\n facts: {\n ownerDelegationCid: requiredString(facts.ownerDelegationCid, \"owner delegation CID\"),\n policyCid: requiredString(facts.policyCid, \"policy CID\"),\n shareId: requiredString(facts.shareId, \"share id\"),\n shareKeyDid: requiredString(facts.shareKeyDid, \"share key DID\"),\n enforcerDid: requiredString(facts.enforcerDid, \"enforcer DID\"),\n nodeAudience: requiredString(facts.nodeAudience, \"node audience\"),\n spaceId: requiredString(facts.spaceId, \"space id\"),\n path: requiredString(facts.path, \"resource path\"),\n actions: stringArray(facts.actions, \"policy actions\"),\n contentSourceDigest: requiredString(facts.contentSourceDigest, \"content source digest\"),\n expiresAt: requiredString(facts.expiresAt, \"policy expiry\"),\n },\n signature: requiredString(delegation.signature, \"policy enforcement signature\"),\n };\n}\n\nasync function verifyEnforcement(delegation: SignedDelegation): Promise<boolean> {\n try {\n const dagCbor = fromBase64Url(delegation.dagCbor);\n if (await computeCid(dagCbor) !== delegation.cid) return false;\n const expectedDagCbor = dagCborEncode({\n domain: POLICY_ENFORCEMENT_DOMAIN,\n unsigned: {\n type: \"TinyCloudSharePolicyEnforcement\",\n version: 2,\n issuerDid: delegation.issuerDid,\n audienceDid: delegation.audienceDid,\n facts: delegation.facts,\n },\n });\n if (expectedDagCbor.length !== dagCbor.length || expectedDagCbor.some((byte, index) => byte !== dagCbor[index])) return false;\n const signature = fromBase64Url(delegation.signature);\n return signature.length === 64 && ed25519.verify(\n signature,\n dagCbor,\n ed25519PublicKeyFromDidKey(delegation.issuerDid),\n { zip215: false },\n );\n } catch {\n return false;\n }\n}\n\nasync function verifyOuterEnvelope(\n value: unknown,\n envelope: ShareEnvelopeV2,\n policyCid: string,\n expectedEnforcerDid: string,\n expectedActions: readonly string[],\n): Promise<{ readonly envelopeCid: string; readonly shareCid: string } | undefined> {\n try {\n const hasDecryption = typeof value === \"object\" && value !== null && Object.hasOwn(value, \"decryption\");\n const outer = record(value, [\"schema\", \"version\", \"shareId\", \"delegationCid\", \"policyCid\", \"target\", \"resource\", \"actions\", ...(hasDecryption ? [\"decryption\"] : []), \"contentSource\", \"contentSourceDigest\", \"expiresAt\", \"envelopeCid\", \"shareCid\", \"signature\"], \"outer envelope\");\n const target = record(outer.target, [\"origin\", \"nodeAudience\", \"enforcerDid\", \"spaceId\"], \"outer target\");\n const signature = record(outer.signature, [\"signerDid\", \"algorithm\", \"value\"], \"outer envelope signature\");\n const envelopeCid = requiredString(outer.envelopeCid, \"outer envelope CID\");\n const shareCid = requiredString(outer.shareCid, \"outer share CID\");\n const { signature: _signature, envelopeCid: _envelopeCid, shareCid: _shareCid, ...identity } = outer;\n if (\n outer.schema !== \"xyz.tinycloud.share/envelope/v2\"\n || outer.version !== 2\n || outer.shareId !== envelope.shareId\n || outer.delegationCid !== envelope.delegationCid\n || outer.policyCid !== policyCid\n || target.origin !== envelope.target.origin\n || target.nodeAudience !== envelope.target.nodeAudience\n || target.enforcerDid !== expectedEnforcerDid\n || target.spaceId !== envelope.target.spaceId\n || canonicalize(outer.resource) !== canonicalize(envelope.resource)\n || canonicalize(outer.actions) !== canonicalize(expectedActions)\n || (hasDecryption\n ? envelope.decryption === undefined || canonicalize(outer.decryption) !== canonicalize(envelope.decryption)\n : envelope.decryption !== undefined)\n || canonicalize(outer.contentSource) !== canonicalize(envelope.contentSource)\n || outer.contentSourceDigest !== envelope.contentSourceDigest\n || outer.expiresAt !== envelope.expiry\n || signature.signerDid !== envelope.signature.signerDid\n || signature.algorithm !== \"Ed25519\"\n ) return undefined;\n if (envelopeCid !== await computeCid(new TextEncoder().encode(canonicalize(identity)))) return undefined;\n if (shareCid !== await computeCid(new TextEncoder().encode(canonicalize({ version: 2, shareId: envelope.shareId, policyCid, envelopeCid })))) return undefined;\n const unsigned = { ...identity, envelopeCid, shareCid };\n const signatureBytes = fromBase64Url(requiredString(signature.value, \"outer signature\"));\n if (signatureBytes.length !== 64 || !ed25519.verify(\n signatureBytes,\n new TextEncoder().encode(`${ENVELOPE_DOMAIN}${canonicalize(unsigned)}`),\n ed25519PublicKeyFromDidKey(envelope.signature.signerDid),\n { zip215: false },\n )) return undefined;\n return { envelopeCid, shareCid };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Build a policy authority from an enrolled node receipt key. The encrypted\n * envelope carries the receipt as evidence, but only the separately pinned\n * key can make that evidence authoritative.\n */\nexport function createRegisteredPolicyAuthority(options: RegisteredPolicyAuthorityOptions): SharePolicyAuthority {\n const proofKey = options.nodeProof.publicKey.slice();\n return {\n async resolve({ policyCid, envelope }): Promise<SharePolicyEvidence | undefined> {\n try {\n if (envelope.authorizationTarget.kind !== \"policy\" || envelope.authorizationTarget.policyCid !== policyCid) return undefined;\n const ownerAuthority = envelope.ownerAuthority as typeof envelope.ownerAuthority & {\n readonly registrationReceipt?: unknown;\n };\n if (ownerAuthority?.registrationReceipt === undefined) return undefined;\n const enforcement = parseEnforcement(ownerAuthority.enforcementDelegation);\n if (!await verifyEnforcement(enforcement)) return undefined;\n const policyBytes = fromBase64Url(envelope.authorizationTarget.policyBytes);\n const ownerDelegation: OwnerDelegationReceipt = {\n delegationCid: envelope.delegationCid,\n signedDagCbor: new Uint8Array(),\n delegation: {\n delegateDID: envelope.signature.signerDid,\n spaceId: envelope.target.spaceId,\n path: envelope.resource.path,\n actions: envelope.actions,\n expiry: new Date(envelope.expiry),\n },\n };\n const receipt = validateOwnerSharePolicyRegistration(ownerAuthority.registrationReceipt, {\n policy: { bytes: policyBytes, cid: policyCid, proof: \"\" },\n ownerDelegation,\n enforcementDelegation: enforcement,\n contentSourceDigest: envelope.contentSourceDigest,\n nodeProof: { kid: options.nodeProof.kid, publicKey: proofKey },\n });\n const registration = receipt.registration;\n const outer = await verifyOuterEnvelope(ownerAuthority.outerEnvelope, envelope, policyCid, options.expectedTarget.enforcerDid, registration.actions);\n if (\n outer === undefined\n || ownerAuthority.registrationCid !== registration.registrationCid\n || ownerAuthority.envelopeCid !== outer.envelopeCid\n || ownerAuthority.shareCid !== outer.shareCid\n || envelope.authorityMaterialHandle !== registration.registrationCid\n || envelope.signature.signerDid !== registration.shareKeyDid\n || registration.target.origin !== options.expectedTarget.origin\n || registration.target.nodeAudience !== options.expectedTarget.nodeAudience\n || registration.enforcerDid !== options.expectedTarget.enforcerDid\n || enforcement.issuerDid !== registration.shareKeyDid\n || enforcement.audienceDid !== registration.enforcerDid\n ) return undefined;\n return {\n policyCid: registration.policyCid,\n signerDid: registration.shareKeyDid,\n registrationCid: registration.registrationCid,\n shareId: registration.shareId,\n recipientMatcher: registration.recipientMatcher,\n target: registration.target,\n resource: registration.resource,\n actions: registration.actions,\n contentSource: registration.contentSource,\n contentSourceDigest: registration.contentSourceDigest,\n delegationCid: registration.ownerDelegationCid,\n authorityMaterialHandle: registration.registrationCid,\n authorityMaterialDigest: envelope.authorityMaterialDigest,\n expiresAt: registration.expiresAt,\n };\n } catch {\n return undefined;\n }\n },\n };\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\n\nexport interface ShareCacheKey {\n readonly cid: string;\n readonly expiresAt: string;\n}\n\nexport interface ShareCacheMetadata {\n readonly contentType: string;\n readonly size: number;\n readonly encrypted: boolean;\n}\n\nexport interface ShareCacheEntry {\n readonly key: ShareCacheKey;\n readonly bytes: Uint8Array;\n readonly digest: Uint8Array;\n readonly metadata: ShareCacheMetadata;\n}\n\nexport interface ShareCache {\n get(key: ShareCacheKey, now?: Date): Promise<Uint8Array | undefined>;\n /** Retrieve a valid entry without a process-local expiry index. */\n getByCid?(cid: string, now?: Date): Promise<ShareCacheEntry | undefined>;\n set(key: ShareCacheKey, bytes: Uint8Array, metadata: ShareCacheMetadata): Promise<void>;\n delete(key: ShareCacheKey): Promise<void>;\n clear(): Promise<void>;\n}\n\nfunction cacheKey(key: ShareCacheKey): string {\n if (!key.cid || !key.expiresAt) throw new Error(\"share cache keys require CID and expiry\");\n return `${key.cid}\\0${key.expiresAt}`;\n}\n\nfunction digest(bytes: Uint8Array): Uint8Array {\n return sha256(bytes);\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n return left.every((byte, index) => byte === right[index]);\n}\n\n/**\n * A deliberately memory-only cache. It stores verified artifact bytes and\n * non-secret metadata only; fragment keys, presentations, sessions, and\n * decrypted content never cross this boundary.\n */\nexport class MemoryShareCache implements ShareCache {\n private readonly entries = new Map<string, ShareCacheEntry>();\n\n constructor(private readonly now: () => Date = () => new Date()) {}\n\n async get(key: ShareCacheKey, now = new Date()): Promise<Uint8Array | undefined> {\n const mapKey = cacheKey(key);\n const entry = this.entries.get(mapKey);\n if (entry === undefined) return undefined;\n if (Date.parse(entry.key.expiresAt) <= now.getTime() || !equalBytes(entry.digest, digest(entry.bytes))) {\n this.entries.delete(mapKey);\n return undefined;\n }\n return entry.bytes.slice();\n }\n\n async getByCid(cid: string, now = new Date()): Promise<ShareCacheEntry | undefined> {\n const entries = [...this.entries.values()].filter((entry) => entry.key.cid === cid);\n for (const entry of entries) {\n if (Date.parse(entry.key.expiresAt) <= now.getTime() || !equalBytes(entry.digest, digest(entry.bytes))) {\n this.entries.delete(cacheKey(entry.key));\n continue;\n }\n return {\n key: { ...entry.key },\n bytes: entry.bytes.slice(),\n digest: entry.digest.slice(),\n metadata: { ...entry.metadata },\n };\n }\n return undefined;\n }\n\n async set(key: ShareCacheKey, bytes: Uint8Array, metadata: ShareCacheMetadata): Promise<void> {\n if (Date.parse(key.expiresAt) <= this.now().getTime()) return;\n this.entries.set(cacheKey(key), {\n key: { cid: key.cid, expiresAt: key.expiresAt },\n bytes: bytes.slice(),\n digest: digest(bytes),\n metadata: { ...metadata },\n });\n }\n\n async delete(key: ShareCacheKey): Promise<void> {\n this.entries.delete(cacheKey(key));\n }\n\n async clear(): Promise<void> {\n this.entries.clear();\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\n/** Matches V2_DELIVERY_DOMAIN in tinycloud-node-server/src/share_v2.rs. */\nexport const SHARE_DELIVERY_AUTHORIZATION_DOMAIN = \"xyz.tinycloud.share/delivery-authorization/v2\\0\";\n\n/** Exact camelCase mirror of the Rust `V2DeliveryRequest` wire struct. */\nexport interface ShareDeliveryAuthorizationRequest {\n readonly envelopeCid: string;\n readonly shareCid: string;\n readonly shareId: string;\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly delegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly recipientEmail: string;\n readonly shareUrl: string;\n readonly documentName: string;\n readonly jti: string;\n readonly idempotencyKey: string;\n readonly expiresAt: string;\n readonly requestBodyDigest: string;\n}\n\n/** Exact mirror of the `authorization` object the Node route signs and returns. */\nexport interface ShareDeliveryAuthorization {\n readonly type: \"TinyCloudShareDeliveryAuthorization\";\n readonly version: 2;\n readonly jti: string;\n readonly shareCid: string;\n readonly shareId: string;\n readonly registrationCid: string;\n readonly delegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly envelopeCid: string;\n readonly policyCid: string;\n readonly nodeAudience: string;\n readonly targetOrigin: string;\n /**\n * The OpenCredentials witness this delivery is scoped to, sourced from\n * Node's own trusted credentials origin. Deliberately distinct from\n * `nodeAudience` (the node's own DID) and `returnOrigin` (Share's page\n * origin) — conflating any of these three would let a party impersonate\n * another's audience.\n */\n readonly openCredentialsAudience: string;\n readonly holder: string;\n readonly recipientMatcher: unknown;\n readonly deliveryEmail: string;\n readonly shareUrl: string;\n readonly returnOrigin: string;\n readonly documentName: string;\n readonly senderDid: string;\n readonly senderTrust: string;\n readonly contentSource: unknown;\n readonly contentSourceDigest: string;\n readonly shareExpiresAt: string;\n readonly issuedAt: string;\n readonly reportAbuseToken: string;\n readonly actions: readonly string[];\n readonly resource: string;\n readonly authorityMaterialHandle: string;\n readonly authorityMaterialDigest: string;\n readonly requestBodyDigest: string;\n readonly idempotencyKey: string;\n readonly expiresAt: string;\n readonly dataAuthority: false;\n}\n\nexport interface ShareDeliveryAuthorizationReceipt {\n readonly authorization: ShareDeliveryAuthorization;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nexport interface ValidateShareDeliveryAuthorizationExpected {\n readonly request: ShareDeliveryAuthorizationRequest;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof: { readonly kid: string; readonly publicKey: Uint8Array };\n /**\n * The OpenCredentials witness origin the caller trusts, from the same\n * trust bundle as `nodeProof`. Validated independently of the\n * authorization's own `nodeAudience`/`returnOrigin` fields so a Node that\n * mislabels or omits its credentials origin fails closed here rather than\n * silently inheriting one of those unrelated identities.\n */\n readonly credentialsAudience: string;\n}\n\n/** Matches `canonical_https_origin` in tinycloud-node-server/src/config.rs. */\nfunction isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\"\n && url.origin === value\n && url.pathname === \"/\"\n && url.search === \"\"\n && url.hash === \"\"\n && url.username === \"\"\n && url.password === \"\";\n}\n\nconst AUTHORIZATION_KEYS = [\n \"type\", \"version\", \"jti\", \"shareCid\", \"shareId\", \"registrationCid\", \"delegationCid\",\n \"enforcementDelegationCid\", \"envelopeCid\", \"policyCid\", \"nodeAudience\", \"targetOrigin\",\n \"openCredentialsAudience\",\n \"holder\", \"recipientMatcher\", \"deliveryEmail\", \"shareUrl\", \"returnOrigin\", \"documentName\",\n \"senderDid\", \"senderTrust\", \"contentSource\", \"contentSourceDigest\", \"shareExpiresAt\",\n \"issuedAt\", \"reportAbuseToken\", \"actions\", \"resource\", \"authorityMaterialHandle\",\n \"authorityMaterialDigest\", \"requestBodyDigest\", \"idempotencyKey\", \"expiresAt\", \"dataAuthority\",\n] as const;\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"share delivery value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\n/**\n * Validate the exact UTF-8 response bytes emitted by\n * `POST /share/v2/deliveries/authorize`, bind them to the submitted\n * request, and verify the Node's detached EdDSA proof.\n */\nexport function validateShareDeliveryAuthorizationBytes(bytesValue: Uint8Array, expected: ValidateShareDeliveryAuthorizationExpected): ShareDeliveryAuthorizationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"share delivery authorization response is not valid UTF-8 JSON\");\n }\n const root = assertObject(value, [\"authorization\", \"proof\"], \"share delivery authorization response\");\n const authorization = assertObject(root.authorization, AUTHORIZATION_KEYS, \"share delivery authorization\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"share delivery authorization proof\");\n\n const request = expected.request;\n if (\n authorization.type !== \"TinyCloudShareDeliveryAuthorization\"\n || authorization.version !== 2\n || authorization.dataAuthority !== false\n || authorization.jti !== request.jti\n || authorization.shareCid !== request.shareCid\n || authorization.shareId !== request.shareId\n || authorization.registrationCid !== request.registrationCid\n || authorization.delegationCid !== request.delegationCid\n || authorization.enforcementDelegationCid !== request.enforcementDelegationCid\n || authorization.envelopeCid !== request.envelopeCid\n || authorization.policyCid !== request.policyCid\n || authorization.deliveryEmail !== request.recipientEmail\n || authorization.shareUrl !== request.shareUrl\n || authorization.documentName !== request.documentName\n || authorization.requestBodyDigest !== request.requestBodyDigest\n || authorization.expiresAt !== request.expiresAt\n || authorization.idempotencyKey !== request.idempotencyKey\n || authorization.reportAbuseToken !== request.jti\n || authorization.authorityMaterialHandle !== request.registrationCid\n ) {\n throw new Error(\"share delivery authorization is not bound to the submitted request\");\n }\n const now = Date.now();\n const issuedAt = typeof authorization.issuedAt === \"string\" ? Date.parse(authorization.issuedAt) : Number.NaN;\n const expiresAt = typeof authorization.expiresAt === \"string\" ? Date.parse(authorization.expiresAt) : Number.NaN;\n if (!Number.isFinite(issuedAt) || issuedAt > now + 60_000 || issuedAt > expiresAt) throw new Error(\"share delivery authorization issuedAt is invalid\");\n if (!Number.isFinite(expiresAt) || expiresAt <= now) throw new Error(\"share delivery authorization is expired\");\n if (new Date(expiresAt).toISOString() !== authorization.expiresAt) throw new Error(\"share delivery authorization expiresAt is non-canonical\");\n\n // Independent audience check: the OpenCredentials witness field must be a\n // canonical https origin, must equal the caller's own trusted value (never\n // derived from the response), and must not collapse into the node's own\n // audience or Share's return origin.\n if (\n typeof authorization.openCredentialsAudience !== \"string\"\n || !isCanonicalHttpsOrigin(authorization.openCredentialsAudience)\n || authorization.openCredentialsAudience !== expected.credentialsAudience\n || authorization.openCredentialsAudience === authorization.nodeAudience\n || authorization.openCredentialsAudience === authorization.returnOrigin\n ) {\n throw new Error(\"share delivery authorization openCredentialsAudience is missing or untrusted\");\n }\n\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"share delivery authorization proof is invalid\");\n if (proof.kid !== expected.nodeProof.kid) throw new Error(\"share delivery authorization proof key is not trusted\");\n const encodedKid = expected.nodeProof.publicKey;\n const publicKey = encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01 ? encodedKid.slice(2) : encodedKid;\n if (publicKey.length !== 32) throw new Error(\"share delivery authorization proof key is invalid\");\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${SHARE_DELIVERY_AUTHORIZATION_DOMAIN}${canonicalize(authorization)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"share delivery authorization proof signature is invalid\");\n\n return { authorization: authorization as unknown as ShareDeliveryAuthorization, proof: proof as unknown as ShareDeliveryAuthorizationReceipt[\"proof\"] };\n}\n\n/** Build the trusted-signer descriptor `did:key:...#z...` expects from a raw node signing key. */\nexport function shareDeliveryTrustedKid(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share delivery node key must be a raw 32-byte Ed25519 public key\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n const did = `did:key:${base58btc.encode(prefixed)}`;\n return `${did}#${did.slice(\"did:key:\".length)}`;\n}\n","import type { DelegatedShareKey, OwnerShareAction, OwnerShareMatcher, OwnerSharePolicyRegistrationReceipt } from \"./owner-policy\";\nimport { restoreDelegatedShareKey } from \"./owner-policy\";\nimport type { PublishedShare } from \"./publish.js\";\n\nexport interface EncryptedShareHistoryStorage {\n put(value: Uint8Array): Promise<void>;\n list(): Promise<readonly Uint8Array[]>;\n clear(): Promise<void>;\n}\n\nexport class MemoryEncryptedShareHistoryStorage implements EncryptedShareHistoryStorage {\n private readonly values: Uint8Array[] = [];\n async put(value: Uint8Array): Promise<void> { this.values.push(value.slice()); }\n async list(): Promise<readonly Uint8Array[]> { return this.values.map((value) => value.slice()); }\n async clear(): Promise<void> { this.values.length = 0; }\n}\n\n/**\n * The durable record a sender needs, after a reload, to display and manage\n * a share it created. Every identity/CID here comes verbatim from the\n * Node-verified {@link OwnerSharePolicyRegistrationReceipt}; nothing is\n * re-derived or guessed.\n */\nexport interface SenderShareRecord {\n readonly shareId: string;\n readonly registrationCid?: string;\n readonly policyCid?: string;\n readonly ownerDelegationCid?: string;\n readonly enforcementDelegationCid?: string;\n readonly shareKeyDid?: string;\n readonly ownerDid?: string;\n readonly enforcerDid?: string;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly recipientMatcher: OwnerShareMatcher;\n /** The signed target discriminator, retained separately from the email matcher. */\n readonly targetKind?: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\";\n readonly registeredAt: string;\n readonly expiresAt: string;\n readonly revokedAt?: string;\n readonly envelopeCid?: string;\n readonly shareCid?: string;\n /** Complete bearer links are encrypted at rest and only revealed explicitly. */\n readonly link?: string;\n readonly filename?: string;\n}\n\n/** Create the durable encrypted-history shape from canonical publication receipts. */\nexport function historyRecordForPublishedShare(result: PublishedShare, now: Date = new Date()): SenderShareRecord {\n const target = result.metadata.target.kind;\n const supplied = result.metadata.recipientMatcher;\n let matcher: OwnerShareMatcher;\n if (supplied?.kind === \"recipientDid\" && typeof supplied.value === \"string\") matcher = { kind: \"recipientDid\", value: supplied.value };\n else if (supplied?.kind === \"exactEmail\" && typeof supplied.value === \"string\") matcher = { kind: \"exactEmail\", value: supplied.value };\n else if (supplied?.kind === \"emailDomain\" && typeof supplied.value === \"string\") matcher = { kind: \"emailDomain\", value: supplied.value };\n else if (target !== \"bearer\") throw new TypeError(\"addressed publication is missing its recipient binding\");\n else matcher = { kind: \"bearer\" };\n return {\n shareId: result.metadata.shareId,\n target: result.metadata.target,\n resource: result.metadata.resource,\n actions: result.metadata.actions.map((action) =>\n action === \"read\" ? \"tinycloud.kv/get\"\n : action === \"list\" ? \"tinycloud.kv/list\"\n : action === \"edit\" ? \"tinycloud.kv/put\"\n : action,\n ) as OwnerShareAction[],\n recipientMatcher: matcher,\n targetKind: target,\n ...(result.metadata.registrationCid === undefined ? {} : { registrationCid: result.metadata.registrationCid }),\n ...(result.metadata.policyCid === undefined ? {} : { policyCid: result.metadata.policyCid }),\n ...(result.metadata.ownerDelegationCid === undefined ? {} : { ownerDelegationCid: result.metadata.ownerDelegationCid }),\n ...(result.metadata.enforcementDelegationCid === undefined ? {} : { enforcementDelegationCid: result.metadata.enforcementDelegationCid }),\n ...(result.metadata.ownerDid === undefined ? {} : { ownerDid: result.metadata.ownerDid }),\n ...(result.metadata.shareKeyDid === undefined ? {} : { shareKeyDid: result.metadata.shareKeyDid }),\n ...(result.metadata.enforcerDid === undefined ? {} : { enforcerDid: result.metadata.enforcerDid }),\n ...(result.metadata.envelopeCid === undefined ? {} : { envelopeCid: result.metadata.envelopeCid }),\n ...(result.metadata.shareCid === undefined ? {} : { shareCid: result.metadata.shareCid }),\n registeredAt: now.toISOString(),\n expiresAt: result.metadata.expiresAt,\n link: result.url,\n ...(result.metadata.display.filename === undefined ? {} : { filename: result.metadata.display.filename }),\n };\n}\n\n/**\n * \"direct\" revokes only this share's enforcement delegation. \"ancestor\"\n * revokes the owner delegation the share descends from, which transitively\n * denies every share built on it (see `revocation_in_ancestry` in\n * `tinycloud-node-server/src/share_v2.rs`). Both are existing CIDs that a\n * caller passes to the node's generic `tinycloud.delegation/revoke`\n * invocation (`DelegationManager.revoke` / `TinyCloudNode.revokeDelegation`)\n * -- there is no share-v2-specific revoke route.\n */\nexport type SenderShareRevocationScope = \"direct\" | \"ancestor\";\n\nexport interface SenderShareRecordStorage {\n put(record: SenderShareRecord): Promise<void>;\n list(): Promise<readonly SenderShareRecord[]>;\n get(shareId: string): Promise<SenderShareRecord | undefined>;\n delete(shareId: string): Promise<void>;\n}\n\nexport interface StoredSenderShareKey {\n readonly cryptoKey: CryptoKey;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n}\n\nexport interface SenderShareKeyStorage {\n put(shareId: string, key: StoredSenderShareKey): Promise<void>;\n get(shareId: string): Promise<StoredSenderShareKey | undefined>;\n delete(shareId: string): Promise<void>;\n}\n\n/** In-memory reference implementation. Real deployments back these with IndexedDB so the non-extractable `CryptoKey` survives a reload via structured clone. */\nexport class MemorySenderShareRecordStorage implements SenderShareRecordStorage {\n private readonly records = new Map<string, SenderShareRecord>();\n\n async put(record: SenderShareRecord): Promise<void> {\n this.records.set(record.shareId, record);\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n return [...this.records.values()];\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n return this.records.get(shareId);\n }\n\n async delete(shareId: string): Promise<void> {\n this.records.delete(shareId);\n }\n}\n\nexport class MemorySenderShareKeyStorage implements SenderShareKeyStorage {\n private readonly keys = new Map<string, StoredSenderShareKey>();\n\n async put(shareId: string, key: StoredSenderShareKey): Promise<void> {\n this.keys.set(shareId, key);\n }\n\n async get(shareId: string): Promise<StoredSenderShareKey | undefined> {\n return this.keys.get(shareId);\n }\n\n async delete(shareId: string): Promise<void> {\n this.keys.delete(shareId);\n }\n}\n\nexport interface SenderShareStoreOptions {\n readonly records: SenderShareRecordStorage;\n readonly keys: SenderShareKeyStorage;\n readonly now?: () => Date;\n}\n\n/**\n * Reload-safe sender-side management for shares created through\n * {@link canonicalOwnerSharePolicy} / `registerOwnerSharePolicy`. Persists\n * the registration receipt's canonical identity tuple plus the ephemeral\n * share key's non-extractable `CryptoKey` handle, so a sender can list,\n * inspect, and revoke shares it created in an earlier session -- without\n * ever re-exporting private key material.\n */\nexport class SenderShareStore {\n private readonly records: SenderShareRecordStorage;\n private readonly keys: SenderShareKeyStorage;\n private readonly now: () => Date;\n\n constructor(options: SenderShareStoreOptions) {\n this.records = options.records;\n this.keys = options.keys;\n this.now = options.now ?? (() => new Date());\n }\n\n /** Persist a Node-verified registration receipt and its share key handle. */\n async save(receipt: OwnerSharePolicyRegistrationReceipt, key: DelegatedShareKey): Promise<SenderShareRecord> {\n const registration = receipt.registration;\n if (registration.shareKeyDid !== key.did) throw new Error(\"share key does not match the registered receipt\");\n const record: SenderShareRecord = {\n shareId: registration.shareId,\n registrationCid: registration.registrationCid,\n policyCid: registration.policyCid,\n ownerDelegationCid: registration.ownerDelegationCid,\n enforcementDelegationCid: registration.enforcementDelegationCid,\n shareKeyDid: registration.shareKeyDid,\n ownerDid: registration.ownerDid,\n enforcerDid: registration.enforcerDid,\n target: registration.target,\n resource: registration.resource,\n actions: registration.actions,\n recipientMatcher: registration.recipientMatcher,\n targetKind: registration.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : registration.recipientMatcher.kind === \"exactEmail\" ? \"email\" : registration.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\",\n registeredAt: registration.registeredAt,\n expiresAt: registration.expiresAt,\n };\n await this.records.put(record);\n await this.keys.put(record.shareId, { cryptoKey: key.cryptoKey, publicKey: key.publicKey, extractable: key.extractable });\n return record;\n }\n\n /** List shares created in any session, most recent first. */\n async list(options?: { readonly includeRevoked?: boolean; readonly includeExpired?: boolean }): Promise<readonly SenderShareRecord[]> {\n const now = this.now().getTime();\n const records = await this.records.list();\n return records\n .filter((record) => (options?.includeRevoked ?? false) || record.revokedAt === undefined)\n .filter((record) => (options?.includeExpired ?? false) || Date.parse(record.expiresAt) > now)\n .sort((left, right) => Date.parse(right.registeredAt) - Date.parse(left.registeredAt));\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n return this.records.get(shareId);\n }\n\n /** Recover a signer for the persisted share key after a reload. */\n async loadKey(shareId: string): Promise<DelegatedShareKey | undefined> {\n const stored = await this.keys.get(shareId);\n if (stored === undefined) return undefined;\n return restoreDelegatedShareKey({\n privateKey: stored.cryptoKey,\n publicKey: stored.publicKey,\n extractable: stored.extractable,\n });\n }\n\n /**\n * The delegation CID to pass to the node's existing generic\n * `tinycloud.delegation/revoke` invocation to revoke this share at the\n * requested scope. Does not itself call the node -- callers invoke\n * their own `revokeDelegation`/`DelegationManager.revoke` with the\n * returned CID, then call {@link markRevoked} once that succeeds.\n */\n async revocationTarget(shareId: string, scope: SenderShareRevocationScope): Promise<string> {\n const record = await this.records.get(shareId);\n if (record === undefined) throw new Error(`Unknown share: ${shareId}`);\n const delegationCid = scope === \"direct\" ? record.enforcementDelegationCid : record.ownerDelegationCid;\n if (delegationCid === undefined) throw new Error(\"share has no node-enforced delegation\");\n return delegationCid;\n }\n\n /** Mark a share revoked locally after the caller's node-side revoke call succeeds. */\n async markRevoked(shareId: string, revokedAt: string = this.now().toISOString()): Promise<SenderShareRecord> {\n const record = await this.records.get(shareId);\n if (record === undefined) throw new Error(`Unknown share: ${shareId}`);\n const revoked: SenderShareRecord = { ...record, revokedAt };\n await this.records.put(revoked);\n return revoked;\n }\n\n /** Forget a share and clear its persisted key handle. */\n async remove(shareId: string): Promise<void> {\n await this.records.delete(shareId);\n await this.keys.delete(shareId);\n }\n}\n\n/** WebCrypto-backed persistence adapter; links and private material are absent. */\nexport class EncryptedSenderShareHistory {\n constructor(\n private readonly storage: EncryptedShareHistoryStorage,\n private readonly key: CryptoKey,\n private readonly now: () => Date = () => new Date(),\n ) {}\n\n async put(record: SenderShareRecord): Promise<void> {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const payload = new TextEncoder().encode(JSON.stringify(record));\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: \"AES-GCM\", iv }, this.key, payload));\n const encoded = new Uint8Array(iv.length + ciphertext.length);\n encoded.set(iv); encoded.set(ciphertext, iv.length);\n await this.storage.put(encoded);\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n const records: SenderShareRecord[] = [];\n for (const encoded of await this.storage.list()) {\n if (encoded.length <= 12) continue;\n try {\n const value = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: encoded.slice(0, 12) }, this.key, encoded.slice(12));\n const parsed = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(value)) as SenderShareRecord;\n if (typeof parsed.shareId === \"string\" && typeof parsed.expiresAt === \"string\") records.push(parsed);\n } catch {\n // Ignore corrupt/foreign records rather than returning unauthenticated data.\n }\n }\n return records;\n }\n\n async clear(): Promise<void> { await this.storage.clear(); }\n}\n","import { canonicalize, toBase64Url } from \"@tinycloud/share-envelope\";\nimport type { SenderShareRecord } from \"./history.js\";\n\nexport type ShareNotifyState = \"delivered\" | \"already-delivered\" | \"partial-failure\";\n\nexport interface ShareNotifyResult {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly shareId: string;\n readonly state: ShareNotifyState;\n readonly idempotencyKey: string;\n readonly attempts: number;\n readonly retryable?: boolean;\n}\n\nexport interface ShareNotifyInput {\n readonly shareId: string;\n readonly recipient: string;\n readonly record?: SenderShareRecord;\n readonly idempotencyKey?: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface ShareDeliveryAdapter {\n /** The server must deduplicate this key before any message is sent. */\n deliver(input: ShareNotifyInput): Promise<\"delivered\" | \"already-delivered\">;\n}\n\nexport class ShareNotifyError extends Error {\n readonly code = \"delivery-failed\" as const;\n constructor(message = \"share delivery did not complete\") {\n super(message);\n this.name = \"ShareNotifyError\";\n }\n}\n\n/** Match a delivery address against the recipient constraint recorded when the share was created. */\nexport function recipientMatchesShareRecord(record: SenderShareRecord, recipient: string): boolean {\n const matcher = record.recipientMatcher;\n if (matcher.kind === \"bearer\" || matcher.kind === \"recipientDid\") return false;\n if (matcher.kind === \"exactEmail\") return matcher.value === recipient;\n const at = recipient.lastIndexOf(\"@\");\n return at > 0 && recipient.slice(at + 1).toLowerCase() === matcher.value;\n}\n\n/**\n * Delivery is deliberately separate from publication. A failed notification\n * never causes a second envelope or link to be minted.\n */\nexport async function notifyShare(input: {\n readonly shareId: string;\n readonly recipient: string;\n readonly record?: SenderShareRecord;\n readonly adapter: ShareDeliveryAdapter;\n readonly idempotencyKey?: string;\n readonly maxAttempts?: number;\n readonly signal?: AbortSignal;\n}): Promise<ShareNotifyResult> {\n if (!input.shareId || !input.recipient || !input.recipient.includes(\"@\")) throw new ShareNotifyError(\"recipient is invalid\");\n if (input.record !== undefined && !recipientMatchesShareRecord(input.record, input.recipient)) {\n throw new ShareNotifyError(\"recipient does not match the stored share target\");\n }\n const idempotencyKey = input.idempotencyKey ?? await defaultIdempotencyKey(input.shareId, input.recipient);\n const attemptsLimit = input.maxAttempts ?? 3;\n if (!Number.isSafeInteger(attemptsLimit) || attemptsLimit < 1 || attemptsLimit > 8) throw new ShareNotifyError(\"maxAttempts is invalid\");\n let attempts = 0;\n let lastError: unknown;\n while (attempts < attemptsLimit) {\n if (input.signal?.aborted) throw new ShareNotifyError(\"share delivery was cancelled\");\n attempts += 1;\n try {\n const state = await input.adapter.deliver({ shareId: input.shareId, recipient: input.recipient, idempotencyKey, ...(input.record === undefined ? {} : { record: input.record }), ...(input.signal === undefined ? {} : { signal: input.signal }) });\n return { protocol: \"tinycloud-share\", version: 1, shareId: input.shareId, state, idempotencyKey, attempts };\n } catch (error) {\n lastError = error;\n }\n }\n void lastError;\n return { protocol: \"tinycloud-share\", version: 1, shareId: input.shareId, state: \"partial-failure\", idempotencyKey, attempts, retryable: true };\n}\n\n/** Bind the default retry key to the canonical recipient as well as the share. */\nasync function defaultIdempotencyKey(shareId: string, recipient: string): Promise<string> {\n const canonicalRecipient = canonicalize(recipient.trim().toLowerCase());\n const digest = new Uint8Array(await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(canonicalRecipient),\n ));\n return `tinycloud-share:${shareId}:${toBase64Url(digest)}`;\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"./history.js\";\n\nexport type ShareRevocationResult =\n | { readonly state: \"revoked\"; readonly target: \"recipientDid\" | \"email\" | \"emailDomain\"; readonly delegationCid: string; readonly revokedAt: string }\n | { readonly state: \"retention-only\"; readonly target: \"bearer\"; readonly reason: \"bearer-capability-cannot-be-revoked\" }\n | { readonly state: \"unsupported\"; readonly target: string; readonly reason: string; readonly code: \"unsupported-target\" };\n\nexport interface ShareRevocationAdapter {\n revokeDelegation(input: { readonly delegationCid: string; readonly scope: \"direct\" | \"ancestor\" }): Promise<void>;\n}\n\nfunction targetKind(record: SenderShareRecord): string {\n if (record.targetKind !== undefined) return record.targetKind;\n return record.recipientMatcher.kind === \"exactEmail\" ? \"email\" : record.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : record.recipientMatcher.kind === \"recipientDid\" ? \"recipientDid\" : \"bearer\";\n}\n\n/** Report retention for bearer shares; only node-enforced targets are revokeable. */\nexport async function revokeShare(input: {\n readonly record: SenderShareRecord;\n /** Optional durable store; successful revocation is persisted before return. */\n readonly records?: SenderShareRecordStorage;\n readonly adapter?: ShareRevocationAdapter;\n readonly scope?: \"direct\" | \"ancestor\";\n readonly now?: () => Date;\n}): Promise<ShareRevocationResult> {\n const target = targetKind(input.record);\n if (target === \"bearer\") return { state: \"retention-only\", target, reason: \"bearer-capability-cannot-be-revoked\" };\n if (input.adapter === undefined) return { state: \"unsupported\", target, reason: \"node revocation authority is required\", code: \"unsupported-target\" };\n const scope = input.scope ?? \"direct\";\n const delegationCid = scope === \"ancestor\" ? input.record.ownerDelegationCid : input.record.enforcementDelegationCid;\n if (delegationCid === undefined) return { state: \"unsupported\", target, reason: \"share has no node-enforced delegation receipt\", code: \"unsupported-target\" };\n await input.adapter.revokeDelegation({ delegationCid, scope });\n const revokedAt = (input.now?.() ?? new Date()).toISOString();\n if (input.records !== undefined) await input.records.put({ ...input.record, revokedAt });\n return { state: \"revoked\", target: target as \"recipientDid\" | \"email\" | \"emailDomain\", delegationCid, revokedAt };\n}\n\nexport interface ShareHistoryView {\n readonly shareId: string;\n readonly target: string;\n readonly recipient?: string;\n readonly expiresAt: string;\n readonly revoked: boolean;\n readonly link?: string;\n}\n\nfunction redactRecord(record: SenderShareRecord, revealLink: boolean, link?: string): ShareHistoryView {\n const matcher = record.recipientMatcher;\n const revealedLink = revealLink ? link ?? record.link : undefined;\n return {\n shareId: record.shareId,\n target: matcher.kind === \"exactEmail\" ? \"email\" : matcher.kind === \"emailDomain\" ? \"email-domain\" : matcher.kind === \"recipientDid\" ? \"recipient-did\" : \"bearer\",\n ...(matcher.kind === \"exactEmail\" ? { recipient: matcher.value } : matcher.kind === \"emailDomain\" ? { recipient: `*@${matcher.value}` } : matcher.kind === \"recipientDid\" ? { recipient: matcher.value } : {}),\n expiresAt: record.expiresAt,\n revoked: record.revokedAt !== undefined,\n ...(revealedLink === undefined ? {} : { link: revealedLink }),\n };\n}\n\nexport async function listShares(storage: SenderShareRecordStorage): Promise<readonly ShareHistoryView[]> {\n const records = await storage.list();\n return records.map((record) => redactRecord(record, false));\n}\n\nexport async function showShare(input: { readonly storage: SenderShareRecordStorage; readonly shareId: string; readonly revealLink?: boolean; readonly link?: string }): Promise<ShareHistoryView> {\n const record = await input.storage.get(input.shareId);\n if (record === undefined) throw new Error(\"share not found\");\n return redactRecord(record, input.revealLink === true, input.link);\n}\n","import type { PublishedShare } from \"./publish.js\";\n\nexport interface LegacyShareReader<T> {\n read(link: string): Promise<T>;\n}\n\nexport interface LegacyMigrationResult<T> {\n readonly protocol: \"tinycloud-share\";\n readonly version: 1;\n readonly legacy: true;\n readonly migrated: PublishedShare;\n readonly value: T;\n}\n\nexport function isLegacyShareLink(value: string): boolean {\n return value.startsWith(\"tc1:\");\n}\n\n/** Modern commands never call this function implicitly. */\nexport async function receiveLegacyShare<T>(link: string, reader: LegacyShareReader<T>): Promise<T> {\n if (!isLegacyShareLink(link)) throw new Error(\"legacy link must use tc1:\");\n return reader.read(link);\n}\n\n/** Read tc1, then explicitly re-mint through the modern publisher. */\nexport async function migrateShare<T>(input: {\n readonly link: string;\n readonly reader: LegacyShareReader<T>;\n readonly publish: (value: T) => Promise<PublishedShare>;\n}): Promise<LegacyMigrationResult<T>> {\n const value = await receiveLegacyShare(input.link, input.reader);\n return { protocol: \"tinycloud-share\", version: 1, legacy: true, value, migrated: await input.publish(value) };\n}\n","import { ed25519, x25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport {\n canonicalize,\n ed25519PublicKeyFromDidKey,\n fromBase64Url,\n signCompactUcanAuthorization,\n toBase64Url,\n verifyCompactUcanAuthorization,\n type ShareEnvelopeV2,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport type { ShareAuthorizationAdapter, ShareAuthorizedContent, ShareAuthorizationResult } from \"./authorization.js\";\nimport { SHARE_V2_PROTOCOL } from \"./protocol.js\";\n\nexport interface ShareNodeTrust {\n readonly invitationKid: string;\n readonly invitationPublicKey: Uint8Array;\n}\n\nexport interface SharePresentationMaterial {\n readonly holderDid: string;\n readonly credential: string;\n readonly credentialDigest?: string;\n readonly holderBinding: Record<string, unknown>;\n readonly proof: Record<string, unknown>;\n readonly sign?: (bytes: Uint8Array) => Promise<Uint8Array>;\n readonly email?: string;\n /** Exact v3 credential claim returned by the verified holder ceremony. */\n readonly claim?: Record<string, unknown>;\n /** Exact v3 presentation returned by the verified holder ceremony. */\n readonly presentation?: Record<string, unknown>;\n}\n\nexport interface SharePolicyChallenge {\n readonly challengeId: string;\n readonly nonce: string;\n readonly expiresAt: string;\n readonly enforcerDid?: string;\n readonly action: string;\n readonly requestBodyDigest: string;\n readonly [key: string]: unknown;\n}\n\nexport interface ShareRecipientClientOptions {\n readonly nodeOrigin: string;\n readonly trustedNode: ShareNodeTrust;\n readonly holderDid: string;\n readonly envelope: ShareEnvelopeV2 | ShareEnvelopeV3;\n readonly fetchFn?: typeof fetch;\n readonly buildPresentation?: (input: { readonly challenge: SharePolicyChallenge; readonly envelope: ShareEnvelopeV2 | ShareEnvelopeV3; readonly policy: Record<string, unknown> }) => Promise<SharePresentationMaterial>;\n readonly sign?: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport interface SharePolicySession {\n readonly sessionId: string;\n readonly expiresAt: string;\n readonly actions: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n}\n\nconst DOMAIN = SHARE_V2_PROTOCOL.challengeDomain;\nconst PRESENTATION_DOMAIN = SHARE_V2_PROTOCOL.sessionDomain;\nconst SESSION_DOMAIN = SHARE_V2_PROTOCOL.sessionDomain;\nconst INVOCATION_DOMAIN = SHARE_V2_PROTOCOL.invocationDomain;\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n return value as Record<string, unknown>;\n}\n\nfunction bytes(value: unknown, label: string): Uint8Array {\n if (typeof value !== \"string\" || !/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(`${label} is invalid`);\n const decoded = fromBase64Url(value);\n if (decoded.length !== 64 || toBase64Url(decoded) !== value) throw new Error(`${label} is invalid`);\n return decoded;\n}\n\nconst BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction toBase64(bytes: Uint8Array): string {\n let out = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]!;\n const b1 = i + 1 < bytes.length ? bytes[i + 1]! : 0;\n const b2 = i + 2 < bytes.length ? bytes[i + 2]! : 0;\n out += BASE64_ALPHABET[(b0 >> 2) & 0x3f];\n out += BASE64_ALPHABET[((b0 << 4) | (b1 >> 4)) & 0x3f];\n out += i + 1 < bytes.length ? BASE64_ALPHABET[((b1 << 2) | (b2 >> 6)) & 0x3f] : \"=\";\n out += i + 2 < bytes.length ? BASE64_ALPHABET[b2 & 0x3f] : \"=\";\n }\n return out;\n}\n\nfunction fromBase64(value: string, label: string): Uint8Array {\n if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)) {\n throw new Error(`${label} is invalid`);\n }\n const padding = value.endsWith(\"==\") ? 2 : value.endsWith(\"=\") ? 1 : 0;\n const out = new Uint8Array((value.length / 4) * 3 - padding);\n let outIdx = 0;\n for (let i = 0; i < value.length; i += 4) {\n const v0 = BASE64_ALPHABET.indexOf(value[i]!);\n const v1 = BASE64_ALPHABET.indexOf(value[i + 1]!);\n const v2 = value[i + 2] === \"=\" ? 0 : BASE64_ALPHABET.indexOf(value[i + 2]!);\n const v3 = value[i + 3] === \"=\" ? 0 : BASE64_ALPHABET.indexOf(value[i + 3]!);\n const b0 = (v0 << 2) | (v1 >> 4);\n const b1 = ((v1 & 0x0f) << 4) | (v2 >> 2);\n const b2 = ((v2 & 0x03) << 6) | v3;\n if (outIdx < out.length) out[outIdx++] = b0;\n if (outIdx < out.length) out[outIdx++] = b1;\n if (outIdx < out.length) out[outIdx++] = b2;\n }\n if (toBase64(out) !== value) throw new Error(`${label} is invalid`);\n return out;\n}\n\nasync function digest(value: unknown): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(canonicalize(value)))));\n}\n\nasync function digestText(value: string): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value))));\n}\n\nasync function digestBytes(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n\nfunction trustedPublicKey(value: ShareNodeTrust): Uint8Array {\n if (!(value.invitationPublicKey instanceof Uint8Array) || value.invitationPublicKey.length !== 32) {\n throw new Error(\"share node trust key is invalid\");\n }\n return value.invitationPublicKey;\n}\n\nasync function verifyWrapped(value: unknown, key: \"challenge\" | \"session\", domain: string, trust: ShareNodeTrust): Promise<Record<string, unknown>> {\n const wrapper = object(value, `${key} response`);\n if (Object.keys(wrapper).length !== 2 || !Object.hasOwn(wrapper, key) || !Object.hasOwn(wrapper, \"proof\")) throw new Error(`${key} response is invalid`);\n const artifact = object(wrapper[key], `${key} artifact`);\n const proof = object(wrapper.proof, `${key} proof`);\n if (proof.alg !== \"EdDSA\" || proof.kid !== trust.invitationKid) throw new Error(`${key} proof is invalid`);\n if (!ed25519.verify(bytes(proof.signature, `${key} signature`), new TextEncoder().encode(`${domain}${canonicalize(artifact)}`), trustedPublicKey(trust))) throw new Error(`${key} proof is invalid`);\n return artifact;\n}\n\nfunction nativeAction(action: string): string {\n return action === \"list\" ? \"tinycloud.kv/list\" : action === \"edit\" ? \"tinycloud.kv/put\" : \"tinycloud.kv/get\";\n}\n\nfunction uiAction(action: unknown): \"read\" | \"list\" | \"edit\" {\n return action === \"tinycloud.kv/list\" ? \"list\" : action === \"tinycloud.kv/put\" ? \"edit\" : \"read\";\n}\n\nfunction selectedAction(envelope: ShareEnvelopeV2): string {\n return envelope.actions.includes(\"list\") ? \"tinycloud.kv/list\" : envelope.actions.includes(\"edit\") ? \"tinycloud.kv/put\" : \"tinycloud.kv/get\";\n}\n\nfunction hex(value: Uint8Array): string {\n return [...value].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction canonicalHashHex(value: string): string {\n return hex(sha256(new TextEncoder().encode(canonicalize(value))));\n}\n\nasync function aesGcmDecrypt(key: Uint8Array, blob: Uint8Array): Promise<Uint8Array> {\n if (key.length !== 32 || blob.length < 28) throw new Error(\"encrypted content is malformed\");\n const cryptoKey = await crypto.subtle.importKey(\"raw\", key as unknown as BufferSource, \"AES-GCM\", false, [\"decrypt\"]);\n return new Uint8Array(await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: blob.slice(0, 12) as unknown as BufferSource }, cryptoKey, blob.slice(12) as unknown as BufferSource));\n}\n\nasync function aesGcmEncrypt(key: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {\n if (key.length !== 32) throw new Error(\"encrypted content key is malformed\");\n const nonce = crypto.getRandomValues(new Uint8Array(12));\n const cryptoKey = await crypto.subtle.importKey(\"raw\", key as unknown as BufferSource, \"AES-GCM\", false, [\"encrypt\"]);\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: nonce as unknown as BufferSource }, cryptoKey, plaintext as unknown as BufferSource));\n const output = new Uint8Array(nonce.length + ciphertext.length);\n output.set(nonce);\n output.set(ciphertext, nonce.length);\n return output;\n}\n\ninterface V3InlineEncryptedEnvelope {\n readonly v: 1;\n readonly networkId: string;\n readonly alg: \"x25519-aes256gcm/v1\";\n readonly keyVersion: number;\n readonly encryptedSymmetricKey: string;\n readonly encryptedSymmetricKeyHash: string;\n readonly ciphertext: string;\n readonly metadata?: Readonly<Record<string, string>>;\n}\n\nfunction parseV3InlineEncryptedEnvelope(bytes: Uint8Array, expected: ShareEnvelopeV3): V3InlineEncryptedEnvelope {\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)); } catch { throw new Error(\"encrypted content envelope is malformed\"); }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"encrypted content envelope is malformed\");\n const record = value as Record<string, unknown>;\n const allowed = [\"v\", \"networkId\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"metadata\"];\n if (Object.keys(record).some((key) => !allowed.includes(key))\n || record.v !== 1 || record.networkId !== expected.encryptionNetwork\n || record.alg !== \"x25519-aes256gcm/v1\" || record.keyVersion !== expected.contentSource.keyVersion\n || typeof record.encryptedSymmetricKey !== \"string\" || typeof record.encryptedSymmetricKeyHash !== \"string\"\n || record.encryptedSymmetricKeyHash !== expected.contentSource.encryptedSymmetricKeyDigestHex\n || record.encryptedSymmetricKeyHash !== canonicalHashHex(record.encryptedSymmetricKey)\n || typeof record.ciphertext !== \"string\"\n || record.metadata !== undefined && (record.metadata === null || typeof record.metadata !== \"object\" || Array.isArray(record.metadata) || Object.values(record.metadata).some((entry) => typeof entry !== \"string\"))) {\n throw new Error(\"encrypted content envelope binding is invalid\");\n }\n return record as unknown as V3InlineEncryptedEnvelope;\n}\n\nasync function verifyDetachedResponse(response: Response, trust: ShareNodeTrust): Promise<void> {\n let value: unknown;\n try { value = await response.clone().json(); } catch { throw new Error(\"share read response is invalid\"); }\n const record = object(value, \"share read response\");\n const proof = object(record.proof, \"share read detached proof\");\n if (proof.alg !== \"EdDSA\" || proof.kid !== trust.invitationKid) throw new Error(\"share read detached proof is invalid\");\n const unsigned = { ...record };\n delete unsigned.proof;\n if (!ed25519.verify(bytes(proof.signature, \"share read signature\"), new TextEncoder().encode(`${SHARE_V2_PROTOCOL.readResponseDomain}${canonicalize(unsigned)}`), trustedPublicKey(trust))) throw new Error(\"share read detached proof is invalid\");\n}\n\nasync function post(fetchFn: typeof fetch, origin: string, path: string, body: unknown): Promise<unknown> {\n const response = await fetchFn(new URL(path, origin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(body) });\n if (!response.ok) throw new Error(\"share authority rejected the request\");\n return response.json();\n}\n\nexport class ShareRecipientClient {\n private readonly fetchFn: typeof fetch;\n private session: SharePolicySession | undefined;\n private signer: ((bytes: Uint8Array) => Promise<Uint8Array>) | undefined;\n private nativeSigner: ((bytes: Uint8Array) => Promise<Uint8Array>) | undefined;\n private holderProof: Record<string, unknown> | undefined;\n private v3Authorization: string | undefined;\n private v3ContentKey: Uint8Array | undefined;\n private v3ContentEnvelope: V3InlineEncryptedEnvelope | undefined;\n\n constructor(private readonly options: ShareRecipientClientOptions) {\n this.fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);\n this.signer = options.sign;\n }\n\n async beginChallenge(envelope: ShareEnvelopeV2): Promise<SharePolicyChallenge> {\n const authority = envelope.ownerAuthority;\n if (authority === undefined) throw new Error(\"addressed owner authority is required\");\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const target = object(outer.target, \"owner authority target\");\n const outerResource = object(outer.resource, \"owner authority resource\");\n const source = object(outer.contentSource, \"owner authority content source\");\n if (!Array.isArray(outer.actions) || outer.actions.length === 0 || outer.actions.some((value) => typeof value !== \"string\")) throw new Error(\"owner authority outer envelope actions are invalid\");\n const actions = [...outer.actions] as string[];\n const action = selectedAction(envelope);\n const challengeBody = { envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), enforcementDelegation: enforcement, outerEnvelope: outer, contentSource: source, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(target.origin), nodeAudience: String(target.nodeAudience), action, actions, resource: String(outerResource.path) };\n const requestBodyDigest = await digest(challengeBody);\n const challenge = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/challenges\", { ...challengeBody, requestBodyDigest }), \"challenge\", DOMAIN, this.options.trustedNode) as unknown as SharePolicyChallenge;\n if (challenge.type !== \"TinyCloudSharePolicyChallenge\" || challenge.version !== 2 || challenge.challengeId.length < 16 || challenge.nonce.length < 16 || challenge.shareCid !== authority.shareCid || challenge.shareId !== envelope.shareId || challenge.registrationCid !== authority.registrationCid || challenge.envelopeCid !== authority.envelopeCid || challenge.policyCid !== challengeBody.policyCid || challenge.delegationCid !== envelope.delegationCid || challenge.enforcementDelegationCid !== enforcement.cid || canonicalize(challenge.contentSource) !== canonicalize(source) || challenge.contentSourceDigest !== challengeBody.contentSourceDigest || challenge.requestBodyDigest !== requestBodyDigest || challenge.holderDid !== this.options.holderDid || challenge.targetOrigin !== challengeBody.targetOrigin || challenge.nodeAudience !== challengeBody.nodeAudience || challenge.action !== action || canonicalize(challenge.actions) !== canonicalize(actions) || challenge.resource !== challengeBody.resource || !Number.isFinite(Date.parse(challenge.expiresAt)) || Date.parse(challenge.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound challenge\");\n return challenge;\n }\n\n private async establish(envelope: ShareEnvelopeV2): Promise<SharePolicySession> {\n const authority = envelope.ownerAuthority;\n if (authority === undefined) throw new Error(\"addressed owner authority is required\");\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const target = object(outer.target, \"owner authority target\");\n const outerResource = object(outer.resource, \"owner authority resource\");\n const source = object(outer.contentSource, \"owner authority content source\");\n if (!Array.isArray(outer.actions) || outer.actions.length === 0 || outer.actions.some((value) => typeof value !== \"string\")) throw new Error(\"owner authority outer envelope actions are invalid\");\n const actions = [...outer.actions] as string[];\n const action = selectedAction(envelope);\n const challengeBody = { envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), enforcementDelegation: enforcement, outerEnvelope: outer, contentSource: source, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(target.origin), nodeAudience: String(target.nodeAudience), action, actions, resource: String(outerResource.path) };\n const requestBodyDigest = await digest(challengeBody);\n const challenge = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/challenges\", { ...challengeBody, requestBodyDigest }), \"challenge\", DOMAIN, this.options.trustedNode) as unknown as SharePolicyChallenge;\n if (challenge.type !== \"TinyCloudSharePolicyChallenge\" || challenge.version !== 2 || challenge.challengeId === undefined || challenge.nonce === undefined || challenge.shareCid !== authority.shareCid || challenge.shareId !== envelope.shareId || challenge.registrationCid !== authority.registrationCid || challenge.envelopeCid !== authority.envelopeCid || challenge.policyCid !== challengeBody.policyCid || challenge.delegationCid !== envelope.delegationCid || challenge.enforcementDelegationCid !== enforcement.cid || challenge.requestBodyDigest !== requestBodyDigest || canonicalize(challenge.contentSource) !== canonicalize(source) || challenge.contentSourceDigest !== challengeBody.contentSourceDigest || challenge.holderDid !== this.options.holderDid || challenge.targetOrigin !== challengeBody.targetOrigin || challenge.nodeAudience !== challengeBody.nodeAudience || challenge.action !== action || canonicalize(challenge.actions) !== canonicalize(actions) || challenge.resource !== challengeBody.resource || !Number.isFinite(Date.parse(challenge.expiresAt)) || Date.parse(challenge.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound challenge\");\n if (this.options.buildPresentation === undefined) throw new Error(\"share presentation builder is required\");\n const material = await this.options.buildPresentation({ challenge, envelope, policy: {} });\n this.holderProof = material.proof;\n this.signer = material.sign;\n this.nativeSigner = material.sign;\n if (this.signer === undefined) throw new Error(\"share holder signer is required\");\n const presentation = {\n type: \"TinyCloudSharePolicyPresentation\", version: 2, challengeId: challenge.challengeId, nonce: challenge.nonce,\n shareCid: authority.shareCid, shareId: envelope.shareId, delegationCid: envelope.delegationCid,\n policyCid: challengeBody.policyCid, contentSource: source, contentSourceDigest: challengeBody.contentSourceDigest,\n holderDid: material.holderDid, targetOrigin: challengeBody.targetOrigin, nodeAudience: challengeBody.nodeAudience,\n ...(challenge.enforcerDid === undefined ? {} : { enforcerDid: challenge.enforcerDid }), credentialDigest: material.credentialDigest ?? await digestText(material.credential),\n action, actions, resource: challengeBody.resource, requestBodyDigest,\n issuedAt: new Date().toISOString(), expiresAt: challenge.expiresAt, jti: toBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n };\n const presentationProof = { alg: \"EdDSA\", kid: `${material.holderDid}#${material.holderDid.slice(\"did:key:\".length)}`, signature: toBase64Url(await this.signer(new TextEncoder().encode(`${PRESENTATION_DOMAIN}${canonicalize(presentation)}`))) };\n const session = await verifyWrapped(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/session\", { challengeId: challenge.challengeId, nonce: challenge.nonce, presentation, credential: material.credential, proof: presentationProof, holderBinding: material.holderBinding, readSignerDid: material.holderDid }), \"session\", SESSION_DOMAIN, this.options.trustedNode);\n if (session.type !== \"TinyCloudSharePolicySession\" || session.version !== 2 || typeof session.sessionId !== \"string\" || session.shareCid !== authority.shareCid || session.shareId !== envelope.shareId || session.registrationCid !== authority.registrationCid || session.envelopeCid !== authority.envelopeCid || session.policyCid !== challengeBody.policyCid || session.delegationCid !== envelope.delegationCid || session.holderDid !== this.options.holderDid || session.targetOrigin !== challengeBody.targetOrigin || session.nodeAudience !== challengeBody.nodeAudience || session.action !== action || canonicalize(session.actions) !== canonicalize(actions) || canonicalize(session.contentSource) !== canonicalize(source) || session.contentSourceDigest !== challengeBody.contentSourceDigest || session.resource !== challengeBody.resource || typeof session.expiresAt !== \"string\" || !Number.isFinite(Date.parse(session.expiresAt)) || Date.parse(session.expiresAt) <= Date.now()) throw new Error(\"share authority returned an unbound session\");\n this.session = { sessionId: session.sessionId, expiresAt: session.expiresAt, actions: actions.map(uiAction), resource: { kind: envelope.resource.kind, path: String(session.resource) } };\n return this.session;\n }\n\n async authorize(envelope: ShareEnvelopeV2): Promise<ShareAuthorizedContent> {\n if (this.session === undefined) await this.establish(envelope);\n const response = await this.nativeInvoke({ action: \"get\", resource: envelope.resource });\n if (!response.ok) throw new Error(\"share recipient read was rejected\");\n const value = object(await response.json(), \"share read response\");\n const expectedAction = nativeAction(\"read\");\n if (\n value.type !== \"TinyCloudShareInvokeResponse\" ||\n value.version !== 2 ||\n value.action !== expectedAction ||\n value.resource !== envelope.resource.path ||\n typeof value.content !== \"string\" ||\n typeof value.bodyDigest !== \"string\" ||\n !/^[A-Za-z0-9_-]{43}$/.test(value.bodyDigest) ||\n !Object.hasOwn(value, \"proof\")\n ) throw new Error(\"share read response is invalid\");\n const content = fromBase64Url(value.content);\n if (await digestBytes(content) !== value.bodyDigest) throw new Error(\"share read response integrity is invalid\");\n return { bytes: content, bodyDigest: value.bodyDigest, contentSourceDigest: envelope.contentSourceDigest, binding: { shareId: envelope.shareId, delegationCid: envelope.delegationCid, authorityMaterialHandle: envelope.authorityMaterialHandle, authorityMaterialDigest: envelope.authorityMaterialDigest, resource: { kind: envelope.resource.kind, path: value.resource }, action: value.action }, proof: { response: value, detached: value.proof } };\n }\n\n async establishPolicySession(): Promise<SharePolicySession> {\n if (this.session !== undefined) return this.session;\n const envelope = this.options.envelope;\n if (envelope.version === 3) return this.establishV3(envelope);\n return this.establish(envelope);\n }\n\n private async establishV3(envelope: ShareEnvelopeV3): Promise<SharePolicySession> {\n if (this.options.buildPresentation === undefined) throw new Error(\"share presentation builder is required\");\n const challengeResponse = await this.fetchFn(new URL(\"/share/v3/policy/challenges\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: envelope.policyCid, recipientDid: this.options.holderDid, requestedCapabilities: envelope.policy.capabilityCeiling }),\n });\n if (!challengeResponse.ok) throw new Error(`v3 policy challenge rejected (${challengeResponse.status})`);\n const challenge = object(await challengeResponse.json(), \"v3 policy challenge\");\n if (typeof challenge.challengeId !== \"string\" || typeof challenge.nonce !== \"string\" || challenge.policyCid !== envelope.policyCid || challenge.recipientDid !== this.options.holderDid) throw new Error(\"v3 policy challenge binding mismatch\");\n const material = await this.options.buildPresentation({\n challenge: challenge as unknown as SharePolicyChallenge,\n envelope,\n policy: envelope.policy as unknown as Record<string, unknown>,\n });\n if (material.sign === undefined || material.claim === undefined || material.presentation === undefined) throw new Error(\"v3 ceremony requires a recipient signer, claim, and presentation\");\n const delegationResponse = await this.fetchFn(new URL(\"/share/v3/policy/delegations\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: material.claim, presentation: material.presentation }),\n });\n if (!delegationResponse.ok) throw new Error(`v3 policy delegation rejected (${delegationResponse.status})`);\n const delegation = object(await delegationResponse.json(), \"v3 policy delegation\");\n if (delegation.admitted !== true || typeof delegation.sessionCid !== \"string\" || typeof delegation.authorization !== \"string\") throw new Error(\"v3 policy delegation response is not admitted\");\n const compact = verifyCompactUcanAuthorization(delegation.authorization, delegation.sessionCid);\n const fact = compact.payload.fct[0];\n if (compact.payload.aud !== this.options.holderDid\n || fact.profile !== \"policy-session-ucan/v1\"\n || fact.policyCid !== envelope.policyCid\n || fact.recipientDid !== this.options.holderDid\n || fact.policyDelegationCid !== envelope.policyRoot.cid\n || fact.enforcementDelegationCid !== envelope.enforcementRoot.cid\n || compact.payload.prf.length !== 2\n || compact.payload.prf[0] !== envelope.policyRoot.cid\n || compact.payload.prf[1] !== envelope.enforcementRoot.cid\n || compact.payload.exp - compact.payload.nbf > 60) throw new Error(\"v3 policy delegation signed binding mismatch\");\n const imported = await this.fetchFn(new URL(\"/delegate\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { Authorization: delegation.authorization } });\n if (!imported.ok) throw new Error(`ordinary delegation import rejected (${imported.status})`);\n this.signer = material.sign;\n this.v3Authorization = delegation.authorization;\n this.session = { sessionId: delegation.sessionCid, expiresAt: new Date(compact.payload.exp * 1000).toISOString(), actions: envelope.actions, resource: envelope.resource };\n return this.session;\n }\n\n /** Decrypt a v3 KV value through a fresh recipient-signed decrypt invocation. */\n async decryptV3Content(bytes: Uint8Array): Promise<{ readonly bytes: Uint8Array; readonly mediaType: string }> {\n const envelope = this.options.envelope;\n const signer = this.nativeSigner ?? this.signer;\n if (envelope.version !== 3 || this.session === undefined || this.v3Authorization === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n const encrypted = parseV3InlineEncryptedEnvelope(bytes, envelope);\n const receiverPrivateKey = crypto.getRandomValues(new Uint8Array(32));\n const receiverPublicKey = toBase64Url(x25519.getPublicKey(receiverPrivateKey));\n const receiverPublicKeyHash = canonicalHashHex(receiverPublicKey);\n const body = { type: \"tinycloud.encryption.decrypt/v1\", targetNode: envelope.target.nodeAudience, networkId: encrypted.networkId, alg: encrypted.alg, keyVersion: encrypted.keyVersion, encryptedSymmetricKey: encrypted.encryptedSymmetricKey, encryptedSymmetricKeyHash: encrypted.encryptedSymmetricKeyHash, receiverPublicKey, receiverPublicKeyHash };\n const bodyHash = hex(sha256(new TextEncoder().encode(canonicalize(body))));\n const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);\n const now = Math.floor(Date.now() / 1000);\n const invocation = await signCompactUcanAuthorization({\n issuerDid: this.options.holderDid,\n audienceDid: envelope.target.nodeAudience,\n attenuation: { [encrypted.networkId]: { \"tinycloud.encryption/decrypt\": [{}] } },\n facts: [{ type: body.type, targetNode: body.targetNode, networkId: body.networkId, bodyHash, encryptedSymmetricKeyHash: body.encryptedSymmetricKeyHash, receiverPublicKeyHash, alg: body.alg, keyVersion: body.keyVersion }],\n proofs: [session.cid],\n notBefore: now,\n expiresAt: Math.min(now + 60, session.payload.exp),\n nonce: toBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n sign: signer,\n });\n try {\n const response = await this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/json\", \"content-type\": \"application/json\", Authorization: invocation.authorization }, body: JSON.stringify(body) });\n if (!response.ok) throw new Error(`v3 decrypt invocation rejected (${response.status})`);\n const value = object(await response.json(), \"v3 decrypt response\");\n const allowed = [\"type\", \"targetNode\", \"networkId\", \"invocationCid\", \"encryptedSymmetricKeyHash\", \"receiverPublicKeyHash\", \"wrappedKey\", \"alg\", \"keyVersion\", \"requestHash\", \"nodeId\", \"nodeSignature\"];\n if (Object.keys(value).length !== allowed.length || Object.keys(value).some((key) => !allowed.includes(key))\n || value.type !== \"tinycloud.encryption.decrypt-result/v1\" || value.targetNode !== body.targetNode || value.nodeId !== body.targetNode\n || value.networkId !== body.networkId || value.invocationCid !== invocation.cid\n || value.encryptedSymmetricKeyHash !== body.encryptedSymmetricKeyHash || value.receiverPublicKeyHash !== receiverPublicKeyHash\n || value.alg !== body.alg || value.keyVersion !== body.keyVersion\n || value.requestHash !== hex(sha256(new TextEncoder().encode(`${invocation.cid}${bodyHash}`)))\n || typeof value.wrappedKey !== \"string\" || typeof value.nodeSignature !== \"string\") throw new Error(\"v3 decrypt response binding is invalid\");\n const unsigned = { ...value };\n delete unsigned.nodeSignature;\n const signature = fromBase64(value.nodeSignature, \"v3 decrypt response signature\");\n if (signature.length !== 64 || !ed25519.verify(signature, new TextEncoder().encode(canonicalize(unsigned)), ed25519PublicKeyFromDidKey(body.targetNode), { zip215: false })) throw new Error(\"v3 decrypt response signature is invalid\");\n const wrapped = fromBase64(value.wrappedKey, \"v3 wrapped content key\");\n if (wrapped.length < 60) throw new Error(\"v3 wrapped content key is malformed\");\n const shared = x25519.getSharedSecret(receiverPrivateKey, wrapped.slice(0, 32));\n const symmetricKey = await aesGcmDecrypt(shared, wrapped.slice(32));\n shared.fill(0);\n if (symmetricKey.length !== 32) throw new Error(\"v3 content key is malformed\");\n const plaintext = await aesGcmDecrypt(symmetricKey, fromBase64Url(encrypted.ciphertext));\n this.v3ContentKey?.fill(0);\n this.v3ContentKey = symmetricKey;\n this.v3ContentEnvelope = encrypted;\n return { bytes: plaintext, mediaType: encrypted.metadata?.contentType ?? envelope.metadata.mediaType ?? \"application/octet-stream\" };\n } finally {\n receiverPrivateKey.fill(0);\n }\n }\n\n /** Re-encrypt edited v3 content with the admitted content key. */\n async encryptV3Content(bytes: Uint8Array, mediaType: string): Promise<Uint8Array> {\n if (this.options.envelope.version !== 3 || this.v3ContentKey === undefined || this.v3ContentEnvelope === undefined) throw new Error(\"v3 content must be decrypted before it can be saved\");\n return new TextEncoder().encode(canonicalize({ ...this.v3ContentEnvelope, ciphertext: toBase64Url(await aesGcmEncrypt(this.v3ContentKey, bytes)), metadata: { ...(this.v3ContentEnvelope.metadata ?? {}), contentType: mediaType } }));\n }\n\n async resumeWithProof(envelope: ShareEnvelopeV2, resumeToken: string, proof: unknown): Promise<ShareAuthorizedContent> {\n const material = object(proof, \"share authorization proof\");\n const presentation = object(material.presentation, \"share presentation\");\n const presentationProof = object(material.presentationProof, \"share presentation proof\");\n const nonce = material.nonce;\n const credential = material.credential;\n const holderDid = material.holderDid;\n const holderBinding = material.holderBinding;\n if (typeof nonce !== \"string\" || typeof credential !== \"string\" || typeof holderDid !== \"string\" || holderDid !== this.options.holderDid || typeof holderBinding !== \"object\" || holderBinding === null || presentationProof.alg !== \"EdDSA\" || typeof presentationProof.signature !== \"string\") throw new Error(\"share authorization proof is incomplete\");\n const value = object(await post(this.fetchFn, this.options.nodeOrigin, \"/share/v2/policy/session\", { challengeId: resumeToken, nonce, presentation, credential, proof: presentationProof, holderBinding, readSignerDid: holderDid }), \"share policy session\");\n const session = await verifyWrapped(value, \"session\", SESSION_DOMAIN, this.options.trustedNode);\n const authority = envelope.ownerAuthority;\n if (authority === undefined || session.type !== \"TinyCloudSharePolicySession\" || session.version !== 2 || typeof session.sessionId !== \"string\" || session.shareCid !== authority.shareCid || session.shareId !== envelope.shareId || session.registrationCid !== authority.registrationCid || session.envelopeCid !== authority.envelopeCid || session.delegationCid !== envelope.delegationCid || typeof session.resource !== \"string\" || typeof session.expiresAt !== \"string\") throw new Error(\"share authority returned an unbound session\");\n const policyCid = envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\";\n const actions = [...new Set(envelope.actions.map(nativeAction))].sort();\n if (\n session.policyCid !== policyCid ||\n session.holderDid !== this.options.holderDid ||\n session.targetOrigin !== envelope.target.origin ||\n session.nodeAudience !== envelope.target.nodeAudience ||\n session.action !== selectedAction(envelope) ||\n canonicalize(session.actions) !== canonicalize(actions) ||\n canonicalize(session.contentSource) !== canonicalize(envelope.contentSource) ||\n session.contentSourceDigest !== envelope.contentSourceDigest ||\n !Number.isFinite(Date.parse(session.expiresAt)) ||\n Date.parse(session.expiresAt) <= Date.now()\n ) throw new Error(\"share authority returned an unbound session\");\n this.session = { sessionId: session.sessionId, expiresAt: session.expiresAt, actions: actions.map(uiAction), resource: { kind: envelope.resource.kind, path: String(session.resource) } };\n this.holderProof = presentationProof;\n this.signer ??= this.options.sign;\n return this.authorize(envelope);\n }\n\n async nativeInvoke(request: { readonly action: string; readonly resource?: Record<string, unknown>; readonly body?: number[]; readonly bodyDigest?: number[]; readonly ifMatch?: string; readonly contentType?: string }): Promise<Response> {\n if (this.session === undefined) throw new Error(\"share policy session is required\");\n const envelope = this.options.envelope;\n if (envelope.version === 3) return this.nativeInvokeV3(request, envelope);\n if (envelope.ownerAuthority === undefined || this.signer === undefined || this.holderProof === undefined) throw new Error(\"share holder signer is required\");\n const authority = envelope.ownerAuthority;\n const action = request.action === \"list\" ? \"tinycloud.kv/list\" : request.action === \"put\" ? \"tinycloud.kv/put\" : request.action === \"metadata\" ? \"tinycloud.kv/metadata\" : \"tinycloud.kv/get\";\n const resource = typeof request.resource?.path === \"string\" ? request.resource.path : this.session.resource.path;\n const actions = [...new Set(this.session.actions.map(nativeAction).concat(action === \"tinycloud.kv/metadata\" ? [action] : []))].sort();\n const bodyBytes = request.body === undefined ? undefined : Uint8Array.from(request.body);\n const bodyDigest = bodyBytes === undefined ? undefined : toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bodyBytes)));\n const outer = object(authority.outerEnvelope, \"owner authority outer envelope\");\n const enforcement = object(authority.enforcementDelegation, \"owner authority enforcement delegation\");\n const invocationBase = { type: \"TinyCloudShareReadInvocation\", version: 2, sessionId: this.session.sessionId, envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), contentSource: outer.contentSource, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, targetOrigin: String(object(outer.target, \"owner authority target\").origin), nodeAudience: String(object(outer.target, \"owner authority target\").nodeAudience), action, actions, resource, ...(action === \"tinycloud.kv/list\" ? { limit: 100 } : {}), ...(bodyDigest === undefined ? {} : { bodyDigest, ifMatch: request.ifMatch, contentType: request.contentType }), issuedAt: new Date().toISOString(), expiresAt: new Date(Math.min(Date.now() + 60_000, Date.parse(this.session.expiresAt))).toISOString(), jti: toBase64Url(crypto.getRandomValues(new Uint8Array(16))) };\n const requestBodyDigest = await digest(invocationBase);\n const invocation = { ...invocationBase, requestBodyDigest };\n const proof = { ...this.holderProof, signature: toBase64Url(await this.signer(new TextEncoder().encode(`${INVOCATION_DOMAIN}${canonicalize(invocation)}`))) };\n const signedRequest = { sessionId: this.session.sessionId, envelopeCid: authority.envelopeCid, shareCid: authority.shareCid, shareId: envelope.shareId, registrationCid: authority.registrationCid, delegationCid: envelope.delegationCid, policyCid: envelope.authorizationTarget.kind === \"policy\" ? envelope.authorizationTarget.policyCid : \"\", enforcementDelegationCid: String(enforcement.cid), contentSource: outer.contentSource, contentSourceDigest: String(outer.contentSourceDigest), holderDid: this.options.holderDid, nodeAudience: String(object(outer.target, \"owner authority target\").nodeAudience), action, actions, resource, requestBodyDigest, invocation, proof };\n const response = await this.fetchFn(new URL(\"/share/v2/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { accept: \"application/vnd.tinycloud.share+json\", \"content-type\": \"application/vnd.tinycloud.share+json\" }, body: JSON.stringify({ request: signedRequest, ...(action === \"tinycloud.kv/list\" ? { limit: 100 } : {}), ...(bodyBytes === undefined ? {} : { body: toBase64Url(bodyBytes), bodyDigest, ifMatch: request.ifMatch, contentType: request.contentType }) }) });\n if (response.ok) await verifyDetachedResponse(response, this.options.trustedNode);\n return response;\n }\n\n private async nativeInvokeV3(request: { readonly action: string; readonly resource?: Record<string, unknown>; readonly body?: number[]; readonly ifMatch?: string; readonly contentType?: string }, envelope: ShareEnvelopeV3): Promise<Response> {\n const signer = this.nativeSigner ?? this.signer;\n if (this.session === undefined || this.v3Authorization === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);\n if (session.payload.aud !== this.options.holderDid) throw new Error(\"v3 session recipient mismatch\");\n const action = request.action === \"list\" ? \"tinycloud.kv/list\" : request.action === \"put\" ? \"tinycloud.kv/put\" : request.action === \"metadata\" ? \"tinycloud.kv/metadata\" : \"tinycloud.kv/get\";\n const path = typeof request.resource?.path === \"string\" ? request.resource.path.replace(/^\\//, \"\").replace(/\\/$/, \"\") : envelope.resource.path;\n const capability = envelope.policy.capabilityCeiling.find((candidate) => candidate.kind === \"kv\");\n if (capability === undefined || !capability.actions.includes(action as never)) throw new Error(\"v3 requested capability is not in the signed policy\");\n const marker = \"/kv/\";\n const split = capability.resource.indexOf(marker);\n if (split < 0) throw new Error(\"v3 KV resource is invalid\");\n const root = capability.resource.slice(split + marker.length).replace(/\\/$/, \"\");\n if (path !== root && !(capability.selector === \"prefix\" && path.startsWith(`${root}/`))) throw new Error(\"v3 KV request is outside the signed selector\");\n const resource = `${capability.resource.slice(0, split + marker.length)}${path}`;\n const now = Math.floor(Date.now() / 1000);\n const invocation = await signCompactUcanAuthorization({ issuerDid: this.options.holderDid, audienceDid: envelope.target.nodeAudience, attenuation: { [resource]: { [action]: [{ type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: resource }] } }, facts: [{ type: \"tinycloud.policy.invocation/v1\", policyCid: envelope.policyCid, sessionCid: session.cid }], proofs: [session.cid], notBefore: now, expiresAt: Math.min(now + 60, session.payload.exp), nonce: toBase64Url(crypto.getRandomValues(new Uint8Array(16))), sign: signer });\n const headers = new Headers({ accept: \"application/json\", Authorization: invocation.authorization });\n let body: BodyInit | undefined;\n if (action === \"tinycloud.kv/put\") {\n if (request.body === undefined) throw new Error(\"v3 KV put requires bytes\");\n body = Uint8Array.from(request.body) as BodyInit;\n headers.set(\"content-type\", request.contentType ?? \"application/octet-stream\");\n if (request.ifMatch !== undefined) headers.set(\"if-match\", request.ifMatch);\n }\n return this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers, ...(body === undefined ? {} : { body }) });\n }\n}\n\nexport function createAddressedAuthorization(input: Omit<ShareRecipientClientOptions, \"envelope\" | \"buildPresentation\"> & { readonly buildPresentation?: (input: { readonly challenge: SharePolicyChallenge; readonly envelope: ShareEnvelopeV2; readonly policy: Record<string, unknown> }) => Promise<SharePresentationMaterial> }): ShareAuthorizationAdapter<ShareAuthorizedContent> {\n const { buildPresentation, ...options } = input;\n const client = (envelope: ShareEnvelopeV2): ShareRecipientClient => new ShareRecipientClient({\n ...options,\n envelope,\n ...(buildPresentation === undefined ? {} : { buildPresentation: ({ challenge, envelope: candidate, policy }) => buildPresentation({ challenge, envelope: candidate as ShareEnvelopeV2, policy }) }),\n });\n return {\n async begin({ envelope, method }): Promise<ShareAuthorizationResult<ShareAuthorizedContent>> {\n const current = client(envelope);\n if (input.buildPresentation !== undefined) return { state: \"ready\", value: await current.authorize(envelope) };\n const challenge = await current.beginChallenge(envelope);\n return { state: \"authorization-required\", method, resumeToken: challenge.challengeId };\n },\n async resume({ envelope, method, resumeToken, proof }): Promise<ShareAuthorizationResult<ShareAuthorizedContent>> {\n if (proof === undefined) return { state: \"authorization-required\", method, resumeToken };\n return { state: \"ready\", value: await client(envelope).resumeWithProof(envelope, resumeToken, proof) };\n },\n async verifyResult({ envelope, value, proof }) {\n try {\n const wrapper = object(proof, \"share read proof\");\n const response = object(wrapper.response, \"share read response proof\");\n const envelopeAction = nativeAction(\"read\");\n if (\n response.type !== \"TinyCloudShareInvokeResponse\" ||\n response.version !== 2 ||\n response.action !== envelopeAction ||\n response.resource !== envelope.resource.path ||\n typeof response.bodyDigest !== \"string\" ||\n response.bodyDigest !== value.bodyDigest ||\n response.bodyDigest !== await digestBytes(value.bytes)\n ) return false;\n const detached = object(wrapper.detached, \"share read detached proof\");\n if (detached.alg !== \"EdDSA\" || detached.kid !== input.trustedNode.invitationKid) return false;\n const unsigned = { ...response };\n delete unsigned.proof;\n return ed25519.verify(bytes(detached.signature, \"share read signature\"), new TextEncoder().encode(`${SHARE_V2_PROTOCOL.readResponseDomain}${canonicalize(unsigned)}`), trustedPublicKey(input.trustedNode));\n } catch {\n return false;\n }\n },\n };\n}\n","import { canonicalize, toBase64Url } from \"@tinycloud/share-envelope\";\n\nexport const SHARE_V2_PROTOCOL = Object.freeze({\n challengeDomain: \"xyz.tinycloud.share/policy-challenge/v2\\0\",\n sessionDomain: \"xyz.tinycloud.share/policy-session/v2\\0\",\n invocationDomain: \"xyz.tinycloud.share/invocation/v2\\0\",\n readResponseDomain: \"xyz.tinycloud.share/read-response/v2\\0\",\n holderBindingDomain: \"xyz.tinycloud.share/email-claim-holder-binding/v1\\0\",\n holderBindingName: \"holderBinding\",\n holderBindingType: \"TinyCloudEmailClaimHolderBinding\",\n holderBindingVersion: 1,\n} as const);\n\nexport async function createShareV2HolderBindingArtifact(input: {\n readonly holderDid: string;\n readonly message: Record<string, unknown>;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}): Promise<Record<string, unknown>> {\n const jcs = canonicalize(input.message);\n const signedBytes = new TextEncoder().encode(`${SHARE_V2_PROTOCOL.holderBindingDomain}${jcs}`);\n const signature = await input.sign(signedBytes);\n return {\n name: SHARE_V2_PROTOCOL.holderBindingName,\n domain: SHARE_V2_PROTOCOL.holderBindingDomain,\n signerDid: input.holderDid,\n message: input.message,\n jcs,\n messageDigest: await digestText(jcs),\n signedBytesDigest: await digestBytes(signedBytes),\n signatureDigest: await digestBytes(signature),\n signature: {\n alg: \"EdDSA\",\n kid: `${input.holderDid}#${input.holderDid.slice(\"did:key:\".length)}`,\n value: toBase64Url(signature),\n },\n };\n}\n\nasync function digestText(value: string): Promise<string> {\n return digestBytes(new TextEncoder().encode(value));\n}\n\nasync function digestBytes(value: Uint8Array): Promise<string> {\n return toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", value)));\n}\n","import type { ShareEnvelopeV2 } from \"@tinycloud/share-envelope\";\nimport { authorizeShare, type ShareAuthorizationAdapter, type ShareAuthorizationResult } from \"./authorization.js\";\nimport { normalizeShareTarget, type TargetPublishInput, type TargetPublishOutcome, type ShareTarget } from \"./targets.js\";\n\nexport interface SharePolicyPublishAdapter<TPublishOutcome = TargetPublishOutcome> {\n publishPolicy(input: TargetPublishInput & { readonly notify: boolean }): Promise<TPublishOutcome>;\n claim(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: \"email-claim\" | \"email-otp\";\n readonly resumeToken?: string;\n readonly proof?: unknown;\n }): Promise<ShareAuthorizationResult<unknown>>;\n}\n\n/** Canonical exact-email/domain publication seam shared by web and CLI. */\nexport async function publishPolicyShare<TPublishOutcome = TargetPublishOutcome>(input: {\n readonly source: Uint8Array;\n readonly filename: string;\n readonly target: Extract<ShareTarget, { readonly kind: \"email\" | \"emailDomain\" }>;\n readonly expiresAt: Date;\n readonly origin: string;\n readonly notify?: boolean;\n readonly adapter: SharePolicyPublishAdapter<TPublishOutcome>;\n}): Promise<TPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n if (target.kind !== \"email\" && target.kind !== \"emailDomain\") throw new TypeError(\"policy publication requires an email target\");\n return input.adapter.publishPolicy({\n source: input.source.slice(),\n filename: input.filename,\n target,\n expiresAt: input.expiresAt,\n origin: input.origin,\n notify: input.notify ?? false,\n });\n}\n\n/** Claim, OTP, or resume a policy share without exposing mailbox material. */\nexport async function claimShare(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly adapter: SharePolicyPublishAdapter;\n readonly method?: \"email-claim\" | \"email-otp\";\n readonly resumeToken?: string;\n readonly proof?: unknown;\n}): Promise<ShareAuthorizationResult<unknown>> {\n return input.adapter.claim({\n envelope: input.envelope,\n method: input.method ?? \"email-claim\",\n ...(input.resumeToken === undefined ? {} : { resumeToken: input.resumeToken }),\n ...(input.proof === undefined ? {} : { proof: input.proof }),\n });\n}\n\n/** Explicit name for noninteractive callers resuming a previously returned step. */\nexport async function resumeShareAuthorization<T>(input: {\n readonly envelope: ShareEnvelopeV2;\n readonly method: \"openkey-device\" | \"email-claim\" | \"email-otp\";\n readonly resumeToken: string;\n readonly proof?: unknown;\n readonly adapter: ShareAuthorizationAdapter<T>;\n}): Promise<ShareAuthorizationResult<T>> {\n return authorizeShare(input);\n}\n"],"mappings":"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","names":["util","object","objectUtil","errorUtil","errorMap","base64","ctx","result","issues","elements","processed","base","result","r","ZodFirstPartyTypeKind","import_ed25519","coerce","encode","length","i","j","decode","bytes","code","digest","equals","base","cid","baseCache","digestBytes","cache","bytes","ed25519","cid","ED25519_VERIFY_OPTS","bytes","ed25519","ed25519","ED25519_VERIFY_OPTS","KEY_LENGTH","cid","record","code","bytes","base","cid","targetKind","digestBytes","text","import_ed25519","code","bytes","base","record","bytes","import_ed25519","import_sha256","empty","equals","coerce","base","encode","length","i","j","decode","src","_brrp__multiformats_scope_baseX","base_x_default","Encoder","bytes","Decoder","or","ComposedDecoder","Codec","from","encode","decode","baseX","base_x_default","coerce","createAlphabetIdx","rfc4648","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","base58btc","baseX","base58flickr","encode_1","encode","MSB","REST","MSBALL","INT","decode","read","MSB$1","REST$1","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","_brrp_varint","varint_default","decode","code","varint_default","encodeTo","encodingLength","create","code","digest","encodingLength","bytes","encodeTo","Digest","decode","coerce","equals","format","base","bytes","toStringV0","baseCache","base58btc","toStringV1","base32","cache","baseCache","cid","CID","_CID","code","bytes","DAG_PB_CODE","SHA_256_CODE","digest","create","equals","base","format","encodeCID","cidSymbol","decode","coerce","digestBytes","Digest","length","parseCIDtoBytes","base58btc","base32","base36","toStringV0","toStringV1","encodingLength","encodeTo","code","SHA256_CODE","CID","code","create","base32","didKeyFromEd25519PublicKey","base58btc","length","value","record","didKeyFromEd25519PublicKey","bytes","base58btc","sha256","import_ed25519","ENVELOPE_DOMAIN","import_sha256","digest","bytes","cid","import_ed25519","isCanonicalHttpsOrigin","assertObject","record","fromB64","base58btc","record","record","digest","targetKind","record","import_ed25519","import_sha256","object","bytes","digest","digestText","digestBytes","record"]}