@tinycloud/share-sdk 1.4.3 → 1.4.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/filename-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","../../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/email.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/artifact-core.ts","../src/artifact-pin.ts","../src/receive.ts","../src/publish.ts","../src/addressed.ts","../src/addressed-publish.ts","../src/addressed-content.ts","../src/authorization.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/base58.ts","../src/targets.ts","../src/cache.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.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/history.ts","../src/notify.ts","../src/credential-invitation.ts","../src/lifecycle.ts","../src/recipient.ts","../src/protocol.ts","../src/policy.ts","../src/native.ts"],"sourcesContent":["export { canonicalShareFilename, hasUnsafeFilenameCodePoint } from \"./filename-policy.js\";\nexport { DEFAULT_MAX_CONTENT_BLOB_BYTES, DEFAULT_MAX_SEALED_BLOB_BYTES, SHARE_RESULT_VERSION, inspectShare, receiveShare, ShareReceiveError, toShareErrorInfo, type ShareReceiveAuthorizationRequired, type ShareErrorCode, type ShareErrorInfo, type ShareFetchOptions, type ShareInspection, type ShareMetadata, type SharePolicyAuthority, type SharePolicyEvidence, type ShareReceiveOutcome, type ShareReceiveResult } from \"./receive.js\";\nexport { DEFAULT_SHARE_LIFETIME_MS, SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, redactPublishedShare, SharePublishError, type PublishedShare, type PublishedShareDeliveryMaterial, type PublishedShareMetadata, type SharePublishErrorCode, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nexport { parseAddressedEnvelope, type ParsedAddressedEnvelope } from \"./addressed.js\";\nexport { ADDRESSED_SHARE_TOO_LARGE_MESSAGE, AddressedShareOverLimitError, addressedCredentialRequirement, addressedShareBodyUpperBound, assertAddressedShareFits, prepareAddressedShare, publishAddressedShare } from \"./addressed-publish.js\";\nexport { AddressedContentSourceError, assertPathBoundContentSource, bindPathBoundContentSource, defaultEncryptionNetworkForOwner, encryptAddressedShareContent, pathBoundKeyPath, pathBoundSessionPermissions, pathBoundStoredBytes, planPathBoundShare, wrappedKeyDigestHex } from \"./addressed-content.js\";\nexport type { AddressedContentSourceErrorCode, AddressedShareKeyClient, EncryptedAddressedContent, PathBoundContentSource, PathBoundEnvelope, PathBoundPermissionEntry, PathBoundSharePlan } from \"./addressed-content.js\";\nexport type { AddressedOwnerRootInput, AddressedOwnerRootReceipt, AddressedPolicyRegistrationInput, AddressedPolicyRegistrationReceipt, AddressedPublishAuthority, AddressedShareBoundInput, AddressedShareRequest, AddressedSharePublishOptions, AddressedShareWrites, PreparedAddressedShare } from \"./addressed-publish.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 { MemorySenderShareRecordStorage, MemorySenderShareKeyStorage, SenderShareStore, historyRecordForPublishedShare } from \"./history.js\";\nexport { MemoryEncryptedShareHistoryStorage, EncryptedSenderShareHistory } from \"./history.js\";\nexport type { SenderShareRecord, SenderShareRecordProofs, 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, shareDeliveryWindowExpiresAt, ShareNotifyError } from \"./notify.js\";\nexport type { ShareNotifyState, ShareNotifyResult, ShareNotifyInput, ShareDeliveryAdapter } from \"./notify.js\";\nexport { deliverCredentialInvitation, CredentialInvitationError } from \"./credential-invitation.js\";\nexport type { CredentialInvitationErrorCode, CredentialInvitationReceipt, CredentialInvitationResult } from \"./credential-invitation.js\";\nexport { listShares, showShare, revokeShare } from \"./lifecycle.js\";\nexport type { ShareHistoryView, SharePolicyRootRevocation, ShareRevocationResult, ShareRevocationAdapter } from \"./lifecycle.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, SharePolicyDelegationLink } from \"./recipient.js\";\nexport { SHARE_V2_PROTOCOL, createShareV2HolderBindingArtifact } from \"./protocol.js\";\nexport { publishPolicyShare, claimShare, resumeShareAuthorization } from \"./policy.js\";\nexport type { SharePolicyPublishAdapter } from \"./policy.js\";\nexport { NATIVE_SHARE_FRAGMENT_PARAMETER, createNativeShare, openNativeShare, parseNativeShareUrl } from \"./native.js\";\nexport type { NativeShareResult, NativeSharingService } from \"./native.js\";\nexport { ArtifactPinError, artifactBindingView, assertArtifactBinding, verifyArtifactShare } from \"./artifact-pin.js\";\nexport type { ArtifactBindingView, ArtifactPinErrorCode, ExpectedArtifact, VerifyArtifactShareOptions } from \"./artifact-pin.js\";\n","/**\n * Characters that can hide or visually reorder a filename: every Unicode\n * control, format and surrogate code point, plus U+2028/U+2029. Matches the\n * share viewer's `src/filename-policy.ts`.\n */\nconst UNSAFE_FILENAME_CODE_POINT = /[\\p{Cc}\\p{Cf}\\p{Cs}\\u2028\\u2029]/u;\n\nexport function hasUnsafeFilenameCodePoint(value: string): boolean {\n return UNSAFE_FILENAME_CODE_POINT.test(value);\n}\n\n/** A single display/download filename, never a path. Returns the NFC form. */\nexport function canonicalShareFilename(value: string): string {\n const canonical = value.normalize(\"NFC\");\n if (\n canonical.length === 0\n || canonical === \".\"\n || canonical === \"..\"\n || canonical.includes(\"/\")\n || canonical.includes(\"\\\\\")\n || hasUnsafeFilenameCodePoint(canonical)\n ) {\n throw new TypeError(\"share filename is unsafe\");\n }\n return canonical;\n}\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 // `toString` of a parsed CID gives back the string it was parsed from; a fresh CID is encoded again.\n CID.createV1(cid.code, cid.multihash).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\n/**\n * The rule every v2/v3 envelope applies to `deliveryEmail`. Deployed viewers\n * validate with it, so senders must not sign an address it rejects; it is\n * stricter than `canonicalMailbox` (for example `a/b@example.com`).\n */\nconst deliveryEmailSchema = z.string().email();\n\n/** Whether `value` may be signed as an envelope's `deliveryEmail`. */\nexport function isEnvelopeDeliveryEmail(value: string): boolean {\n return deliveryEmailSchema.safeParse(value).success;\n}\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.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 marker = value.indexOf(\"/kv/\");\n if (marker < 1) return false;\n const space = value.slice(0, marker);\n const legacy = space.startsWith(\"tinycloud://\");\n if (legacy ? /[:/?#%]/.test(space.slice(\"tinycloud://\".length)) : !space.startsWith(\"tinycloud:\") || /[/?#%]/.test(space)) return false;\n const path = value.slice(marker + 4);\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 unifiedEncryptionResourceSchema = z.string().refine((value) => {\n const prefix = \"urn:tinycloud:encryption:\";\n if (!value.startsWith(prefix)) return false;\n const match = /^(did:.+):([^/:?#\\s]+)(?:\\/(.+))?$/.exec(value.slice(prefix.length));\n if (match === null) return false;\n const path = match[3];\n return path === undefined || path.split(\"/\").every((segment) =>\n segment.length > 0 && segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment)\n );\n}, { message: \"expected a canonical TinyCloud encryption resource\" });\nconst unifiedEncryptionKeyPathSchema = z.string().regex(/^share\\/[^/]+$/).refine(\n (value) => {\n const segment = value.slice(\"share/\".length);\n return segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment);\n },\n { message: \"expected an exact share key path\" },\n);\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: unifiedEncryptionResourceSchema,\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 encryptionKeyPath: unifiedEncryptionKeyPathSchema.optional(),\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();\nexport const unifiedPolicyV1Schema = 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();\nexport const policyCredentialRequirementV1Schema = z.object({\n type: z.literal(\"TinyCloudPolicyCredentialRequirement\"),\n version: z.literal(1),\n requirementDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n descriptorDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n issuerDid: z.string().min(1),\n issuerKid: z.string().min(1),\n profile: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n credentialType: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n}).strict();\nexport const unifiedPolicyV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v2\"),\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 credentialRequirement: policyCredentialRequirementV1Schema,\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const unifiedPolicySchema = z.discriminatedUnion(\"schema\", [\n unifiedPolicyV1Schema,\n unifiedPolicyV2Schema,\n]);\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();\n/** Artifact id as `share-sdk` mints and parses it (`assertArtifactId`); `artifact-pin.test.ts` keeps the two in step. */\nconst ARTIFACT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{2,62}$/;\nexport const artifactPinSchema = z.object({\n v: z.literal(1),\n artifactId: z.string().regex(ARTIFACT_ID_PATTERN),\n version: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),\n /** SHA-256 (lowercase hex) of the exact `manifest.json` bytes. The manifest itself stays an owner-side record. */\n manifestSha256: z.string().regex(/^[0-9a-f]{64}$/),\n /** An addressed share reads one exact file, so exactly one entry: the stored bytes (ciphertext) it will fetch. */\n files: z.array(z.object({\n path: z.string().min(1).max(255),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n bytes: z.number().int().nonnegative(),\n }).strict()).length(1),\n}).strict();\nexport type ArtifactPin = z.infer<typeof artifactPinSchema>;\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.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 /**\n * TC-1428: an owner-signed statement that this share reads one write-once artifact version. Additive: absent on\n * every other share, and covered by the envelope signature because the signature spans the whole unsigned object.\n * The shape is checked here; its binding to the content source is `verifyArtifactShare` in share-sdk.\n */\n artifactPin: artifactPinSchema.optional(),\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.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.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 const encryptionKeyPath = value.contentSource.encryptionKeyPath;\n if (encryptionKeyPath !== undefined && encryptionKeyPath !== `share/${value.contentSource.shareId}`) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\", \"encryptionKeyPath\"], message: \"share key path must name this share\" });\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.encryptionKeyPath !== encryptionKeyPath || 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 expectedEncryptionResource = encryptionKeyPath === undefined\n ? value.encryptionNetwork\n : `${value.encryptionNetwork}/${encryptionKeyPath}`;\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === expectedEncryptionResource && 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 the exact decrypt resource\" });\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 PolicyCredentialRequirementV1 = z.infer<typeof policyCredentialRequirementV1Schema>;\nexport type UnifiedPolicyV1 = z.infer<typeof unifiedPolicyV1Schema>;\nexport type UnifiedPolicyV2 = z.infer<typeof unifiedPolicyV2Schema>;\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","/**\n * Canonical email-domain rules shared by senders, receivers, and the\n * OpenCredentials `tinycloud.email-domain-proof/v1` issuer. A domain is\n * canonical only as lowercase ASCII LDH labels (two or more, no trailing dot,\n * not an IP literal). Unicode and IDNA U-labels have no canonical form here:\n * IDNA A-labels (`xn--…`) are accepted verbatim, so equality is always a\n * plain string comparison with no normalization ambiguity.\n *\n * These live at the envelope layer so the Share SDK (sender) and sdk-core\n * (receiver, which re-exports them) apply one rule without a package cycle.\n */\nconst LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nexport function isCanonicalEmailDomain(value: string): boolean {\n if (value.length === 0 || value.length > 253) return false;\n const labels = value.split(\".\");\n return labels.length >= 2 && labels.every((label) => LABEL.test(label)) && !/^[0-9]+$/.test(labels.at(-1)!);\n}\n\n/** Canonicalizes a sender-entered domain (`@Example.com` → `example.com`) or throws. */\nexport function canonicalEmailDomain(value: string): string {\n const domain = value.trim().replace(/^@/, \"\").toLowerCase();\n if (!/^[\\x21-\\x7e]+$/.test(domain) || !isCanonicalEmailDomain(domain)) throw new TypeError(\"email domain must be lowercase ASCII DNS labels (use the xn-- form for international domains)\");\n return domain;\n}\n\n/**\n * Canonical form of a recipient-entered mailbox (trimmed, lowercased), or\n * undefined when it has no canonical domain. The issuer accepts only this\n * form, so the local check agrees with what the credential will contain.\n */\nexport function canonicalMailbox(value: string): { readonly email: string; readonly domain: string } | undefined {\n const email = value.trim().toLowerCase();\n const at = email.indexOf(\"@\");\n if (at <= 0 || at !== email.lastIndexOf(\"@\")) return undefined;\n const local = email.slice(0, at);\n const domain = email.slice(at + 1);\n // Lowercase RFC 5322 dot-atom without `%` or `!`, matching the issuer:\n // legacy percent-hack or bang-path routing could deliver elsewhere.\n if (local.length > 64 || !/^[a-z0-9#$&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9#$&'*+/=?^_`{|}~-]+)*$/.test(local) || !isCanonicalEmailDomain(domain)) return undefined;\n return Object.freeze({ email, domain });\n}\n\n/** True only when the mailbox's canonical domain equals `domain` exactly (no suffix or subdomain match). */\nexport function mailboxBelongsToDomain(mailbox: string, domain: string): boolean {\n return canonicalMailbox(mailbox)?.domain === domain && isCanonicalEmailDomain(domain);\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 { fromBase64Url, toBase64Url } from \"./bytes.js\";\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: toBase64Url(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 = toBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = toBase64Url(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}.${toBase64Url(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 = fromBase64Url(headerSegment);\n const payloadBytes = fromBase64Url(payloadSegment);\n const signature = fromBase64Url(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, fromBase64Url(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 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 POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\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 policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${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 = policyDigest;\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(0, capability.resource.indexOf(\"/kv/\")), 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 marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== 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.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || 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.nodeAudience), 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 !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || 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 !== binding.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 { 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\nexport const 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 function 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","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","/**\n * The few artifact helpers the browser bundles need (the pin verifier reads a version path). Kept\n * apart from `artifact.ts`, which is CLI and agent tooling and must stay out of those bundles.\n */\nexport const ARTIFACT_ROOT = \"artifacts\";\n\n/** The artifact and version a stored KV path belongs to, if it is under a version directory. */\nexport function parseArtifactVersionPath(path: string): { readonly artifactId: string; readonly version: number; readonly file: string } | undefined {\n const match = /^artifacts\\/([a-z0-9][a-z0-9_-]{2,62})\\/versions\\/([1-9][0-9]{0,14})\\/([^/]+)$/.exec(path);\n if (match === null) return undefined;\n return { artifactId: match[1]!, version: Number(match[2]), file: match[3]! };\n}\n","/**\n * Artifact pin verification (TC-1428). Small on purpose: this is the one place that decides whether an addressed\n * share that reads an artifact version may be trusted.\n *\n * What is signed. The owner signs the whole Policy/v3 envelope (Ed25519, `verifyEnvelopeV3SignatureOnly`). `artifactPin` is a\n * field of that envelope, so the signature covers it: artifact id, version, the sha256 of the version's\n * `manifest.json`, and the sha256 and size of the one stored file the share reads. The manifest stays an owner-side\n * record; a recipient never needs to fetch it. Policy/v3 already binds the file's ciphertext digest\n * (`contentSource.initialCiphertextDigestHex`); the pin binds that digest to an artifact identity and a version, so a\n * share cannot be re-pointed at another version or another artifact's path without breaking the signature.\n *\n * Trust model (accepted, TC-1428 finding 3): the owner is the trusted signer. The node has no write-once ACL, so the\n * owner (or whoever holds the owner's session) can overwrite `versions/<n>/<file>` afterwards. A recipient then\n * detects the substitution through the pin digest and fails closed; it cannot tell a malicious owner from a node\n * serving stale or altered bytes, and does not try to.\n *\n * Fails closed: any addressed share whose content source lies under `artifacts/` must carry a valid pin that matches\n * that source. A pin on any other path is refused. `artifacts/<id>/current/...` has no pin form in v1 and is refused.\n */\nimport {\n verifyEnvelopeV3SignatureOnly,\n type ArtifactPin,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport { ARTIFACT_ROOT, parseArtifactVersionPath } from \"./artifact-core.js\";\n\nexport type ArtifactPinErrorCode =\n | \"missing-pin\"\n | \"unsupported-artifact-path\"\n | \"wrong-signer\"\n | \"bad-signature\"\n | \"pin-source-mismatch\"\n | \"pinned-share-writable\"\n | \"expectation-mismatch\"\n | \"file-digest-mismatch\"\n | \"manifest-mismatch\";\n\nexport class ArtifactPinError extends Error {\n readonly code: ArtifactPinErrorCode;\n /** The code is the message: stable, short, and what callers and tests match on. */\n constructor(code: ArtifactPinErrorCode) {\n super(code);\n this.name = \"ArtifactPinError\";\n this.code = code;\n }\n}\n\n/**\n * What the caller already knows about the share it is opening, from outside the envelope. Optional: a v1 pinned share\n * names its version in its own signed pin and nothing outside the link says which one to expect, so no production\n * caller passes it. A caller that does learn a version out of band (a listing, a \"newer version\" link) uses it to\n * refuse an older or different pin.\n */\nexport interface ExpectedArtifact {\n readonly artifactId?: string;\n readonly version?: number;\n}\n\nexport interface VerifyArtifactShareOptions {\n /** The did:key the caller trusts as the sender. `signature.signerDid` is self-asserted and proves nothing alone. */\n readonly expectedOwnerDid: string;\n readonly expected?: ExpectedArtifact;\n}\n\n/**\n * The fields of an envelope (or of a share about to be built) that the pin binds. Taking a view lets the publisher run\n * the identical check before it registers anything, and the recipient run it again where it reads.\n */\nexport interface ArtifactBindingView {\n readonly artifactPin?: ArtifactPin;\n readonly target: { readonly spaceId: string };\n readonly contentSource: {\n readonly kvResource: string;\n readonly selector: \"exact\" | \"prefix\";\n readonly mode: \"mutable\" | \"immutable\";\n readonly initialCiphertextDigestHex?: string | undefined;\n };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n /** Share actions (`read` | `list` | `edit`). */\n readonly actions: readonly string[];\n /** KV abilities the signed policy grants on the content source. */\n readonly policyKvActions: readonly string[];\n}\n\nexport function artifactBindingView(envelope: UnsignedShareEnvelopeV3 | ShareEnvelopeV3): ArtifactBindingView {\n return {\n ...(envelope.artifactPin === undefined ? {} : { artifactPin: envelope.artifactPin }),\n target: envelope.target,\n contentSource: envelope.contentSource,\n resource: envelope.resource,\n actions: envelope.actions,\n policyKvActions: envelope.policy.capabilityCeiling.flatMap((capability) => capability.kind === \"kv\" ? capability.actions : []),\n };\n}\n\nfunction sourcePath(view: ArtifactBindingView): string {\n const resource = view.contentSource.kvResource;\n const marker = \"/kv/\";\n const at = resource.indexOf(marker);\n if (at <= 0 || resource.slice(0, at) !== view.target.spaceId) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n return resource.slice(at + marker.length);\n}\n\n/**\n * The pin and the content source must say the same thing, and a pinned share must be read-only. Synchronous and\n * signature-free, so the publisher can run it before registering anything and the recipient can re-run it at the\n * point of reading. Returns the pin for an artifact share and `undefined` for any other share.\n */\nexport function assertArtifactBinding(view: ArtifactBindingView, expected: ExpectedArtifact = {}): ArtifactPin | undefined {\n const pin = view.artifactPin;\n const path = sourcePath(view);\n const inArtifacts = path === ARTIFACT_ROOT || path.startsWith(`${ARTIFACT_ROOT}/`);\n if (!inArtifacts) {\n if (pin !== undefined) throw new ArtifactPinError(\"pin-source-mismatch\");\n return undefined;\n }\n if (pin === undefined) throw new ArtifactPinError(\"missing-pin\");\n const parsed = parseArtifactVersionPath(path);\n if (parsed === undefined) throw new ArtifactPinError(\"unsupported-artifact-path\");\n const file = pin.files[0]!;\n const source = view.contentSource;\n if (\n // The stored ciphertext of one file: bounded like content (100 MiB) plus the envelope's own framing.\n file.bytes > 128 * 1024 * 1024\n || pin.artifactId !== parsed.artifactId\n || pin.version !== parsed.version\n || file.path !== parsed.file\n || view.resource.kind !== \"exact\"\n || view.resource.path !== path\n || source.selector !== \"exact\"\n || source.mode !== \"immutable\"\n || source.initialCiphertextDigestHex !== file.sha256\n ) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n // A pinned path is immutable: neither the envelope nor the signed policy may grant a write on it.\n if (view.actions.includes(\"edit\") || view.policyKvActions.includes(\"tinycloud.kv/put\")) {\n throw new ArtifactPinError(\"pinned-share-writable\");\n }\n if (\n (expected.artifactId !== undefined && expected.artifactId !== pin.artifactId)\n || (expected.version !== undefined && expected.version !== pin.version)\n ) {\n throw new ArtifactPinError(\"expectation-mismatch\");\n }\n return pin;\n}\n\n/**\n * Check that the trusted owner signed this envelope (and so its pin), then the pin binding. Throws `ArtifactPinError`;\n * never returns a partial answer. Only the owner's Ed25519 signature over the envelope is checked here, because that\n * is what authenticates the pin. The rest of the envelope (policy signature, owner roots, enforcer binding) is\n * `verifyEnvelopeV3`'s job, and `resolvePolicyShare` runs both before it trusts a link. (Folding the two into one\n * call was measured: +911 gzip bytes in the canonical ESM bundle, for a saved ed25519 verify.)\n */\nexport function verifyArtifactShare(envelope: ShareEnvelopeV3, options: VerifyArtifactShareOptions): ArtifactPin | undefined {\n if (envelope.signature.signerDid !== options.expectedOwnerDid) {\n throw new ArtifactPinError(\"wrong-signer\");\n }\n let valid: boolean;\n try { valid = verifyEnvelopeV3SignatureOnly(envelope) && envelope.policy.ownerDid === options.expectedOwnerDid; }\n catch { valid = false; }\n if (!valid) throw new ArtifactPinError(\"bad-signature\");\n return assertArtifactBinding(artifactBindingView(envelope), options.expected);\n}\n","import {\n canonicalize,\n computeCid,\n open,\n parseShareUrl,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n toBase64Url,\n verifyEnvelopeV2,\n verifyEnvelopeV3,\n type ShareEnvelopeV2,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport type { LinkError, ResolvedLink } from \"@tinycloud/share-envelope/links\";\nimport { ArtifactPinError, verifyArtifactShare } from \"./artifact-pin.js\";\nimport type { ShareAuthorizationAdapter, ShareAuthorizationMethod, ShareAuthorizedContent } 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;\nexport const DEFAULT_MAX_SEALED_BLOB_BYTES = 100 * 1024 * 1024 + 29;\nexport const DEFAULT_MAX_CONTENT_BLOB_BYTES = DEFAULT_MAX_SEALED_BLOB_BYTES;\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);\n this.name = \"ShareReceiveError\";\n this.code = code;\n this.details = details;\n }\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\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\n/**\n * A Policy/v3 link is a `v=4` link: a short link whose sealed envelope the links\n * API serves, or a full link that carries it. The key and body CID stay in the\n * fragment and are never sent.\n */\nexport interface ShareFetchOptions {\n /** The trusted viewer origin. Defaults to the link's own origin. */\n readonly expectedOrigin?: string;\n /** The links API origin a short link is read from. A link never names it. Defaults to `https://api.tinycloud.xyz`. */\n readonly apiOrigin?: string;\n readonly fetch?: typeof globalThis.fetch;\n readonly signal?: AbortSignal;\n readonly now?: () => number;\n readonly maxSealedBlobBytes?: number;\n readonly maxContentBlobBytes?: number;\n readonly onResolvedAddressedEnvelope?: (envelope: ShareEnvelopeV2 | ShareEnvelopeV3, cid: string) => void;\n /** Legacy V2 registry transport; used only for existing compact V2 links. */\n readonly registryBaseUrl?: string;\n readonly fetchBlob?: (input: { readonly origin: string; readonly cid: string; readonly signal?: AbortSignal }) => Promise<Uint8Array>;\n readonly trustedSignerDid?: string;\n readonly trustedPolicyAuthority?: SharePolicyAuthority;\n readonly authorization?: ShareAuthorizationAdapter<ShareAuthorizedContent>;\n readonly authorizationResumeToken?: string;\n readonly authorizationProof?: unknown;\n}\n\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 /** Set when the share is pinned to one artifact version; the owner's signature covers it (TC-1428). */\n readonly artifact?: { readonly id: string; readonly version: number };\n}\n\nexport interface ShareInspection {\n readonly metadata: ShareMetadata;\n readonly link: { readonly origin: string; readonly cid: string; readonly kind: \"policy\" | \"compact\" };\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 ShareReceiveAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n readonly continueUrl?: string;\n readonly resumeToken?: string;\n}\n\n/** Retained as the result consumed after the node authorization ceremony. */\nexport interface ShareReceiveResult extends ShareInspection {\n readonly bytes: Uint8Array;\n readonly text?: string;\n}\n\nexport type ShareReceiveOutcome = ShareReceiveResult | ShareReceiveAuthorizationRequired;\n\nfunction metadataFor(envelope: ShareEnvelopeV2 | ShareEnvelopeV3, origin: string): ShareMetadata {\n const kind = envelope.recipientMatcher.kind === \"recipientDid\"\n ? \"recipientDid\"\n : envelope.recipientMatcher.kind === \"exactEmail\"\n ? \"email\"\n : envelope.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\";\n return {\n protocol: \"tinycloud-share\",\n version: 1,\n shareId: envelope.shareId,\n origin,\n target: { ...envelope.target, kind },\n resource: { ...envelope.resource },\n actions: [...envelope.actions],\n 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.version === 3 && envelope.artifactPin !== undefined ? { artifact: { id: envelope.artifactPin.artifactId, version: envelope.artifactPin.version } } : {}),\n };\n}\n\nfunction receiveErrorFor(error: LinkError): ShareReceiveError {\n switch (error.code) {\n case \"origin_not_trusted\":\n return new ShareReceiveError(\"origin-mismatch\", \"share link origin is not trusted\");\n case \"body_over_cap\":\n case \"response_too_large\":\n return new ShareReceiveError(\"max-bytes-exceeded\", \"sealed policy envelope exceeds the size limit\");\n case \"body_hash_mismatch\":\n case \"link_cid_mismatch\":\n return new ShareReceiveError(\"cid-mismatch\", \"sealed envelope bytes do not match the link CID\");\n case \"body_open_failed\":\n return new ShareReceiveError(\"decrypt-failed\", \"share envelope could not be opened\");\n case \"gone\":\n case \"expired\":\n return new ShareReceiveError(\"expired\", \"share link has expired, was deleted, or never existed\");\n case \"bad_signature\":\n case \"issuer_binding_mismatch\":\n return new ShareReceiveError(\"signature-invalid\", \"share link signature is invalid\");\n case \"service_refused\":\n case \"service_unavailable\":\n case \"invalid_response\":\n return new ShareReceiveError(\"fetch-failed\", \"share link could not be fetched\");\n case \"not_a_url\":\n case \"not_https\":\n case \"userinfo\":\n case \"not_canonical\":\n case \"query_present\":\n case \"removed_version\":\n case \"path_grammar\":\n case \"fragment_grammar\":\n case \"key_noncanonical\":\n case \"cid_grammar\":\n case \"record_encoding\":\n case \"record_json\":\n case \"record_not_canonical\":\n case \"type_path_mismatch\":\n case \"full_non_share\":\n return new ShareReceiveError(\"invalid-link\", \"share link format is invalid\");\n default:\n return new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\");\n }\n}\n\nasync function resolvePolicyShare(link: string, options: ShareFetchOptions): Promise<{ readonly envelope: ShareEnvelopeV3; readonly origin: string; readonly cid: string }> {\n options.signal?.throwIfAborted();\n let url: URL;\n try {\n url = new URL(link);\n } catch {\n throw new ShareReceiveError(\"invalid-link\", \"share link format is invalid\");\n }\n // The links module is a separate file of `@tinycloud/share-envelope`, loaded when a link is first resolved.\n const links = await import(\"@tinycloud/share-envelope/links\");\n let resolved: ResolvedLink;\n try {\n resolved = await links.resolveLink(link, {\n trustedOrigins: [options.expectedOrigin ?? url.origin],\n apiOrigin: options.apiOrigin ?? links.DEFAULT_LINKS_API_ORIGIN,\n ...(options.fetch === undefined ? {} : { fetch: options.fetch }),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n now: options.now?.() ?? Date.now(),\n });\n } catch (error) {\n options.signal?.throwIfAborted();\n throw error instanceof links.LinkError ? receiveErrorFor(error) : error;\n }\n if (resolved.type !== \"share\") throw new ShareReceiveError(\"invalid-link\", \"share link is not a share\");\n const limit = options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES;\n if (!Number.isSafeInteger(limit) || limit <= 0 || resolved.body.byteLength > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed policy envelope exceeds the configured byte limit\");\n const cid = resolved.header.bodyCid;\n options.signal?.throwIfAborted();\n let envelope: ShareEnvelopeV3;\n try {\n const encoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(resolved.plaintext);\n if (canonicalize(resolved.value) !== encoded) throw new Error(\"non-canonical envelope\");\n envelope = shareEnvelopeV3Schema.parse(resolved.value);\n } catch {\n throw new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\");\n }\n try {\n if (!await verifyEnvelopeV3(envelope, { expectedSignerDid: envelope.policy.ownerDid })) throw new Error(\"signature\");\n } catch {\n throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\");\n }\n // The owner's signature (checked above) covers the artifact pin; the pin must also match what the share reads, and a\n // share that reads an artifact without a pin is refused.\n try {\n verifyArtifactShare(envelope, { expectedOwnerDid: envelope.policy.ownerDid });\n } catch (error) {\n if (!(error instanceof ArtifactPinError)) throw error;\n throw new ShareReceiveError(\"envelope-invalid\", `share artifact pin is invalid (${error.code})`);\n }\n options.signal?.throwIfAborted();\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 options.onResolvedAddressedEnvelope?.(envelope, cid);\n return { envelope, origin: url.origin, cid };\n}\n\n/** Existing V2 links keep their registry-backed read path. V3 publication never uses it. */\nasync function resolveLegacyV2(link: string, options: ShareFetchOptions): Promise<{ readonly envelope: ShareEnvelopeV2; readonly origin: string; readonly cid: string }> {\n let parsed: ReturnType<typeof parseShareUrl>;\n try { parsed = parseShareUrl(link, { ...(options.expectedOrigin === undefined ? {} : { expectedOrigin: options.expectedOrigin }) }); }\n catch { throw new ShareReceiveError(\"invalid-link\", \"legacy share link format is invalid\"); }\n try {\n options.signal?.throwIfAborted();\n const origin = new URL(link).origin;\n const limit = options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES;\n if (!Number.isSafeInteger(limit) || limit <= 0) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope limit is invalid\");\n let sealed: Uint8Array;\n if (options.fetchBlob !== undefined) {\n try { sealed = await options.fetchBlob({ origin, cid: parsed.ciphertextCid, ...(options.signal === undefined ? {} : { signal: options.signal }) }); }\n catch { throw new ShareReceiveError(\"fetch-failed\", \"legacy registry unavailable\"); }\n } else {\n if (options.registryBaseUrl === undefined) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry is required\");\n const response = await (options.fetch ?? globalThis.fetch)(`${options.registryBaseUrl.replace(/\\/+$/, \"\")}/ipfs/${parsed.ciphertextCid}?format=raw`, {\n headers: { accept: \"application/vnd.ipld.raw\" }, redirect: \"error\", ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n if (!response.ok) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry unavailable\");\n if (Number(response.headers.get(\"content-length\")) > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\");\n const reader = response.body?.getReader();\n if (reader === undefined) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry returned no body\");\n const chunks: Uint8Array[] = [];\n let length = 0;\n for (;;) {\n const part = await reader.read();\n if (part.done) break;\n length += part.value.length;\n if (length > limit) { await reader.cancel(); throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\"); }\n chunks.push(part.value);\n }\n sealed = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) { sealed.set(chunk, offset); offset += chunk.length; }\n }\n options.signal?.throwIfAborted();\n if (!(sealed instanceof Uint8Array) || sealed.length > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\");\n if (await computeCid(sealed) !== parsed.ciphertextCid) throw new ShareReceiveError(\"cid-mismatch\", \"legacy envelope CID does not match\");\n let plaintext: Uint8Array;\n try { plaintext = await open(sealed, parsed.key32); }\n catch { throw new ShareReceiveError(\"decrypt-failed\", \"legacy envelope could not be opened\"); }\n let envelope: ShareEnvelopeV2;\n try {\n const encoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext);\n const value = JSON.parse(encoded) as unknown;\n if (canonicalize(value) !== encoded) throw new Error(\"non-canonical envelope\");\n envelope = shareEnvelopeV2Schema.parse(value);\n } catch { throw new ShareReceiveError(\"envelope-invalid\", \"legacy envelope is invalid\"); }\n return { envelope, origin, cid: parsed.ciphertextCid };\n } finally { parsed.key32.fill(0); }\n}\n\nfunction evidenceMatchesV2(envelope: ShareEnvelopeV2, evidence: SharePolicyEvidence): boolean {\n const actions = new Set(evidence.actions.map((action) => action === \"read\" ? \"tinycloud.kv/get\" : action === \"list\" ? \"tinycloud.kv/list\" : action === \"edit\" ? \"tinycloud.kv/put\" : action));\n const resourceCovers = evidence.resource.kind === \"exact\"\n ? envelope.resource.kind === \"exact\" && evidence.resource.path === envelope.resource.path\n : envelope.resource.path === evidence.resource.path || envelope.resource.path.startsWith(evidence.resource.path.endsWith(\"/\") ? evidence.resource.path : `${evidence.resource.path}/`);\n return envelope.authorizationTarget.kind === \"policy\" &&\n evidence.policyCid === envelope.authorizationTarget.policyCid &&\n evidence.signerDid === envelope.signature.signerDid && evidence.registrationCid.length > 0 &&\n evidence.shareId === envelope.shareId &&\n canonicalize(evidence.recipientMatcher) === canonicalize(envelope.recipientMatcher) &&\n canonicalize(evidence.target) === canonicalize(envelope.target) && resourceCovers &&\n envelope.actions.every((action) => actions.has(action === \"read\" ? \"tinycloud.kv/get\" : action === \"list\" ? \"tinycloud.kv/list\" : \"tinycloud.kv/put\")) &&\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 && Number.isFinite(Date.parse(evidence.expiresAt)) &&\n Date.parse(evidence.expiresAt) === Date.parse(envelope.expiry);\n}\n\nasync function verifyLegacyV2(envelope: ShareEnvelopeV2, options: ShareFetchOptions): Promise<void> {\n try { if (!await verifyEnvelopeV2(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\"); }\n catch { throw new ShareReceiveError(\"signature-invalid\", \"legacy envelope signature is invalid\"); }\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"legacy share expiry is invalid\");\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"legacy share has expired\", { expiresAt: envelope.expiry });\n if (envelope.authorizationTarget.kind === \"policy\") {\n if (options.trustedPolicyAuthority === undefined) throw new ShareReceiveError(\"envelope-invalid\", \"a legacy policy authority is required\");\n let evidence: SharePolicyEvidence | undefined;\n try { evidence = await options.trustedPolicyAuthority.resolve({ policyCid: envelope.authorizationTarget.policyCid, envelope }); }\n catch { /* Treat authority transport failure as missing evidence. */ }\n if (evidence === undefined || !evidenceMatchesV2(envelope, evidence)) throw new ShareReceiveError(\"capability-invalid\", \"legacy policy evidence does not match\");\n if (options.trustedSignerDid !== undefined && options.trustedSignerDid !== evidence.signerDid) throw new ShareReceiveError(\"signature-invalid\", \"legacy signer is not trusted\");\n } else if (options.trustedSignerDid === undefined || options.trustedSignerDid !== envelope.signature.signerDid ||\n (envelope.authorizationTarget.kind === \"recipientDid\" && envelope.recipientMatcher.kind === \"recipientDid\" && envelope.authorizationTarget.did !== envelope.recipientMatcher.value)) {\n throw new ShareReceiveError(\"capability-invalid\", \"legacy recipient authority does not match\");\n }\n}\n\nexport async function inspectShare(link: string, options: ShareFetchOptions = {}): Promise<ShareInspection> {\n if (isLegacyV2Link(link)) {\n const legacy = await resolveLegacyV2(link, options);\n await verifyLegacyV2(legacy.envelope, options);\n options.onResolvedAddressedEnvelope?.(legacy.envelope, legacy.cid);\n return { metadata: metadataFor(legacy.envelope, legacy.origin), link: { origin: legacy.origin, cid: legacy.cid, kind: \"compact\" } };\n }\n const resolved = await resolvePolicyShare(link, options);\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: \"policy\" } };\n}\n\n/**\n * Resolve and verify invitation metadata only. Actual content access is an\n * invocation against the owner node and is performed by the receiver SDK.\n */\nexport async function receiveShare(link: string, options: ShareFetchOptions = {}): Promise<ShareReceiveOutcome> {\n if (isLegacyV2Link(link)) return receiveLegacyV2(link, options);\n const resolved = await resolvePolicyShare(link, options);\n return { state: \"authorization-required\", method: resolved.envelope.recipientMatcher.kind === \"recipientDid\" ? \"openkey-device\" : \"email-claim\" };\n}\n\nfunction isLegacyV2Link(link: string): boolean {\n try { const url = new URL(link); return /^\\/s\\/bafkrei[a-z2-7]{52}$/.test(url.pathname) && url.hash.startsWith(\"#k=\"); }\n catch { return false; }\n}\n\nasync function receiveLegacyV2(link: string, options: ShareFetchOptions): Promise<ShareReceiveOutcome> {\n const resolved = await resolveLegacyV2(link, options);\n const { envelope } = resolved;\n await verifyLegacyV2(envelope, options);\n options.onResolvedAddressedEnvelope?.(envelope, resolved.cid);\n const method: ShareAuthorizationMethod = 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, method })\n : await options.authorization.resume({ envelope, method, resumeToken: options.authorizationResumeToken,\n ...(options.authorizationProof === undefined ? {} : { proof: options.authorizationProof }) });\n if (result.state === \"authorization-required\") return result;\n if (result.state === \"denied\") throw new ShareReceiveError(\"authorization-denied\", \"legacy share authorization was denied\");\n if (result.value === null || typeof result.value !== \"object\" || !(result.value.bytes instanceof Uint8Array) ||\n result.value.proof === undefined || options.authorization.verifyResult === undefined) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content lacks a verifiable proof\");\n }\n const authorized = result.value;\n try { if (!await options.authorization.verifyResult({ envelope, value: authorized, proof: authorized.proof })) throw new Error(\"proof\"); }\n catch { throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content proof is invalid\"); }\n const bytes = authorized.bytes.slice();\n if (bytes.length > (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES)) throw new ShareReceiveError(\"max-bytes-exceeded\", \"legacy content exceeds the size limit\");\n const bodyDigest = toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes)));\n if (authorized.bodyDigest !== bodyDigest || authorized.contentSourceDigest !== envelope.contentSourceDigest ||\n authorized.binding.shareId !== envelope.shareId || authorized.binding.delegationCid !== envelope.delegationCid ||\n authorized.binding.authorityMaterialHandle !== envelope.authorityMaterialHandle ||\n authorized.binding.authorityMaterialDigest !== envelope.authorityMaterialDigest ||\n authorized.binding.resource.kind !== envelope.resource.kind || authorized.binding.resource.path !== envelope.resource.path ||\n (authorized.binding.action !== undefined && !envelope.actions.some((action) => action === authorized.binding.action || `tinycloud.kv/${action}` === authorized.binding.action)) ||\n (envelope.metadata.byteLength !== undefined && envelope.metadata.byteLength !== bytes.length)) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content binding does not match\");\n }\n let text: string | undefined;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary content */ }\n return { metadata: metadataFor(envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: \"compact\" }, bytes, ...(text === undefined ? {} : { text }) };\n}\n","export const SHARE_CONTENT_LIMIT = 100 * 1024 * 1024;\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\n/** Input shared by the native bearer and Policy/v3 addressed publishers. */\nexport interface SharePublishOptions {\n readonly source: Uint8Array | AsyncIterable<Uint8Array>;\n readonly filename: string;\n readonly mediaType?: string;\n readonly allowBinary?: boolean;\n readonly target?: SharePublishTarget;\n readonly expiresAt?: Date;\n readonly expiryWasExplicit?: boolean;\n readonly origin: string;\n readonly maxBytes?: number;\n readonly now?: () => number;\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 expiryClamped?: boolean;\n readonly expiresAt: string;\n readonly display: { readonly filename?: string; readonly senderName?: string };\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 /** Set when the content is a numbered artifact version (TC-1428). Pinned: the share can only ever read this version. */\n readonly artifact?: { readonly id: string; readonly version: number; readonly mode: \"pinned\" };\n}\n\n/** Sender-only Policy/v3 material retained in encrypted history for delivery retries. */\nexport interface PublishedShareDeliveryMaterial {\n /**\n * The signed plaintext policy envelope. It is retained only in encrypted\n * sender history so a delivery can be retried; it never travels in a URL.\n */\n readonly envelope: Readonly<Record<string, unknown>>;\n /** CIDv1/raw/sha2-256 of `sealedEnvelope`, and the CID in the share URL. */\n readonly shareCid: string;\n /**\n * Canonical `version || nonce || AES-256-GCM ciphertext+tag`, base64url.\n * Node reopens this exact value before authorizing email delivery.\n */\n readonly sealedEnvelope: string;\n /** 32-byte AES-GCM key for `sealedEnvelope`, base64url and fragment-only in the URL. */\n readonly envelopeKey: string;\n}\n\nexport interface PublishedShare {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_PUBLISH_RESULT_VERSION;\n /** The complete link is deliberately non-enumerable on production results. */\n readonly url: string;\n readonly link: { readonly kind: \"native\" | \"policy\"; readonly cid: string };\n readonly metadata: PublishedShareMetadata;\n /** Non-enumerable Policy/v3 delivery material; never included in command output. */\n readonly deliveryMaterial?: PublishedShareDeliveryMaterial;\n}\n\n/** Machine-readable output omits the complete bearer capability and delivery material. */\nexport function redactPublishedShare(result: PublishedShare): Omit<PublishedShare, \"url\" | \"deliveryMaterial\"> {\n return {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n link: { ...result.link },\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 ...(result.metadata.expiryClamped === undefined ? {} : { expiryClamped: result.metadata.expiryClamped }),\n expiresAt: result.metadata.expiresAt,\n display: { ...result.metadata.display },\n },\n };\n}\n\nexport type SharePublishErrorCode =\n | \"invalid-argument\"\n | \"authority-required\"\n | \"max-bytes-exceeded\";\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","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 { canonicalShareFilename } from \"./filename-policy.js\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { assertArtifactBinding } from \"./artifact-pin.js\";\nimport {\n canonicalize, computeCid, generateKey, isEnvelopeDeliveryEmail, seal,\n shareEnvelopeV3Schema, toBase64Url, unsignedShareEnvelopeV3Schema,\n type ArtifactPin, type PolicyCredentialRequirementV1, type ShareAction, type UnifiedContentSource,\n type ShareEnvelopeV3, type UnifiedPolicy, type UnifiedPolicyCapability, type UnifiedRoot, type UnsignedShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\n\nimport {\n SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, SharePublishError, redactPublishedShare,\n type PublishedShare, type PublishedShareDeliveryMaterial,\n} from \"./publish.js\";\nimport { ARTIFACT_ROOT } from \"./artifact-core.js\";\nimport { AddressedContentSourceError, assertEncryptionNetwork, assertPathBoundContentSource, pathBoundKeyPath, type PathBoundContentSource } from \"./addressed-content.js\";\nimport { normalizeShareTarget, type ShareTarget } from \"./targets.js\";\nimport type { OwnerShareAction, OwnerShareMatcher } from \"./owner-policy.js\";\n\nconst POLICY_V1_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ENVELOPE_V3_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst textEncoder = new TextEncoder();\n\nexport interface AddressedOwnerRootInput {\n readonly ownerDid: string;\n readonly role: \"policy-authority\" | \"policy-enforcement\";\n readonly audienceDid: string;\n readonly policyId: string;\n readonly policyDigestHex: string;\n readonly policyCid: string;\n readonly contentSourceDigestHex: string;\n readonly capabilityCeilingHashHex: string;\n readonly nativeProjectionHashHex: string;\n readonly notBefore: Date;\n readonly expiresAt: Date;\n readonly nodeAudience: string;\n readonly capabilities: readonly UnifiedPolicyCapability[];\n}\n\nexport interface AddressedOwnerRootReceipt {\n readonly cid: string;\n readonly delegationHeader: { readonly Authorization: string };\n}\n\nexport interface AddressedPolicyRegistrationInput {\n readonly policyCid: string;\n readonly policy: Readonly<Record<string, unknown>>;\n readonly policyRoot: { readonly cid: string; readonly authorization: string };\n readonly enforcementRoot: { readonly cid: string; readonly authorization: string };\n readonly contentSourceDigestHex: string;\n readonly nativeProjectionHashHex: string;\n readonly rootExpiresAt: string;\n readonly enforcerDid: string;\n readonly expectedNodeAudience: string;\n}\n\nexport interface AddressedPolicyRegistrationReceipt {\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly attestedEnforcerBinding: {\n readonly schema: \"xyz.tinycloud.policy/attested-enforcer/v2\";\n readonly enforcerDid: string;\n readonly nodeAudience: string;\n readonly attestationBindingDigestHex: string;\n readonly issuedAt: string;\n readonly expiresAt: string;\n readonly signature: { readonly suite: \"Ed25519\"; readonly signerDid: string; readonly value: string };\n };\n}\n\n/** App-neutral owner authority. Node SDK owns all Policy/v3 transport. */\nexport interface AddressedPublishAuthority {\n readonly ownerDid: string;\n createOwnerRoot(input: AddressedOwnerRootInput): Promise<AddressedOwnerRootReceipt>;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n registerPolicy(input: AddressedPolicyRegistrationInput): Promise<AddressedPolicyRegistrationReceipt>;\n}\n\nexport interface AddressedSharePublishOptions {\n readonly shareId: string;\n readonly shareOrigin: string;\n /** The links API origin written into the signed header as its audience. Defaults to `https://api.tinycloud.xyz`. */\n readonly apiOrigin?: 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 /** Path-bound to this share's own key (`share/<shareId>`) with the wrapped-key digest; build it with `bindPathBoundContentSource`. Anything else is refused before any signing or write. */\n readonly contentSource: PathBoundContentSource;\n readonly credentialRequirement?: PolicyCredentialRequirementV1;\n readonly filename: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n /** TC-1428: pins the share to one write-once artifact version; signed with the envelope. Required when the content source is under `artifacts/`. */\n readonly artifactPin?: ArtifactPin;\n readonly deliveryEmail?: string;\n readonly expiresAt: Date;\n /** Sender-history material required by Node's Policy/v3 delivery authorization. */\n readonly onDeliveryMaterial?: (input: PublishedShareDeliveryMaterial) => void;\n readonly authority: AddressedPublishAuthority;\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\nconst OWNER_SHARE_ACTIONS: ReadonlySet<string> = new Set<OwnerShareAction>([\"tinycloud.kv/get\", \"tinycloud.kv/list\", \"tinycloud.kv/metadata\", \"tinycloud.kv/put\"]);\n\nfunction assertSafeInput(input: AddressedSharePublishOptions): void {\n // ONE share-id grammar for the plan, the size bound and the publisher: a share id this refuses was refused before any key was created.\n pathBoundKeyPath(input.shareId);\n assertPathBoundContentSource(input.contentSource, input.shareId);\n if (!Number.isSafeInteger(input.byteLength) || input.byteLength < 0 || input.byteLength > SHARE_CONTENT_LIMIT) throw new TypeError(\"addressed content length is invalid\");\n if (!Number.isFinite(input.expiresAt.getTime()) || input.expiresAt.getTime() <= 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.shareId !== input.shareId || input.contentSource.selector !== input.resource.kind) throw new TypeError(\"addressed content source is not bound to the share\");\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction digestHex(value: unknown, domain: string): string {\n return hex(sha256(textEncoder.encode(`${domain}${canonicalize(value)}`)));\n}\n\nfunction sortCanonical<T>(values: readonly T[]): readonly T[] {\n return [...values].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\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\nfunction rfc3339Seconds(value: Date): string {\n return new Date(Math.floor(value.getTime() / 1000) * 1000).toISOString().replace(\".000Z\", \"Z\");\n}\n\nfunction nativeProjection(capabilities: readonly UnifiedPolicyCapability[]): readonly Record<string, unknown>[] {\n return sortCanonical(capabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : {\n service: \"tinycloud.kv\",\n space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")),\n path: capability.resource.slice(capability.resource.indexOf(\"/kv/\") + 4),\n actions: [...capability.actions],\n caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource },\n }));\n}\n\ntype PolicyOptions = Pick<AddressedSharePublishOptions, \"expiresAt\" | \"contentSource\" | \"credentialRequirement\"> & {\n readonly authority: Pick<AddressedPublishAuthority, \"ownerDid\" | \"sign\">;\n};\n\nasync function createPolicy(options: PolicyOptions, capabilities: readonly UnifiedPolicyCapability[]): Promise<{ readonly policy: UnifiedPolicy; readonly policyCid: string; readonly policyDigestHex: string }> {\n const fields = {\n ownerDid: options.authority.ownerDid,\n createdAt: rfc3339Seconds(new Date()),\n expiresAt: rfc3339Seconds(options.expiresAt),\n contentSource: options.contentSource,\n capabilityCeiling: [...capabilities],\n };\n const unsigned = options.credentialRequirement === undefined\n ? { schema: \"xyz.tinycloud.policy/policy/v1\" as const, ...fields }\n : { schema: \"xyz.tinycloud.policy/policy/v2\" as const, ...fields, credentialRequirement: options.credentialRequirement };\n const domain = options.credentialRequirement === undefined ? POLICY_V1_DOMAIN : POLICY_V2_DOMAIN;\n const policyDigestHex = digestHex(unsigned, domain);\n const signature = await options.authority.sign(sha256(textEncoder.encode(`${domain}${canonicalize(unsigned)}`)));\n if (signature.byteLength !== 64) throw new TypeError(\"policy signature must be Ed25519\");\n const policy = {\n ...unsigned,\n policyId: `pol_${base32Lower(Uint8Array.from(policyDigestHex.match(/../g)!, (byte) => Number.parseInt(byte, 16)))}`,\n signature: { suite: \"Ed25519\" as const, signerDid: options.authority.ownerDid, value: toBase64Url(signature) },\n } satisfies UnifiedPolicy;\n return { policy, policyCid: await computeCid(textEncoder.encode(canonicalize(policy))), policyDigestHex };\n}\n\n/** What an addressed share derives from its own inputs, before any write: the capability ceiling and the digests the owner roots commit to. */\nfunction addressedPlan(options: Pick<AddressedSharePublishOptions, \"resource\" | \"contentSource\" | \"policyActions\" | \"expiresAt\">) {\n const capabilities = sortCanonical<UnifiedPolicyCapability>([\n { kind: \"kv\", resource: options.contentSource.kvResource, selector: options.resource.kind, actions: [...options.policyActions] },\n // Only this share's one key: there is no network-scope capability.\n { kind: \"encryption\", resource: `${options.contentSource.encryptionNetwork}/${options.contentSource.encryptionKeyPath}`, action: \"tinycloud.encryption/decrypt\" },\n ]);\n return {\n expiry: rfc3339Seconds(options.expiresAt),\n capabilities,\n contentSourceDigestHex: digestHex(options.contentSource, CONTENT_SOURCE_V1_DOMAIN),\n capabilityCeilingHashHex: digestHex(capabilities, POLICY_CAPABILITY_V1_DOMAIN),\n nativeProjectionHashHex: digestHex(nativeProjection(capabilities), NATIVE_PROJECTION_V1_DOMAIN),\n };\n}\n\ntype EnvelopeInputs = Pick<AddressedSharePublishOptions, \"shareId\" | \"nodeOrigin\" | \"spaceId\" | \"actions\" | \"resource\" | \"contentSource\" | \"deliveryEmail\" | \"filename\" | \"mediaType\" | \"byteLength\" | \"artifact\" | \"artifactPin\">;\n\n/**\n * The unsigned v3 envelope. The publish and the size bound both build it here,\n * so the bound measures the serialization the publish seals.\n */\nfunction unsignedAddressedEnvelope(input: {\n readonly options: EnvelopeInputs;\n readonly matcher: OwnerShareMatcher;\n readonly policy: UnifiedPolicy;\n readonly policyCid: string;\n readonly policyRoot: UnifiedRoot;\n readonly enforcementRoot: UnifiedRoot;\n readonly attestedEnforcerBinding: AddressedPolicyRegistrationReceipt[\"attestedEnforcerBinding\"];\n readonly contentSourceDigestHex: string;\n readonly expiry: string;\n}): UnsignedShareEnvelopeV3 {\n const { options } = input;\n return {\n version: 3 as const, shareId: options.shareId, recipientMatcher: input.matcher,\n ...(options.deliveryEmail === undefined ? {} : { deliveryEmail: options.deliveryEmail }),\n actions: [...options.actions], resource: { ...options.resource },\n target: { origin: options.nodeOrigin, nodeAudience: input.attestedEnforcerBinding.enforcerDid, spaceId: options.spaceId },\n policy: input.policy, policyCid: input.policyCid, policyRoot: input.policyRoot, enforcementRoot: input.enforcementRoot,\n attestedEnforcerBinding: input.attestedEnforcerBinding, contentSource: options.contentSource,\n contentSourceDigestHex: input.contentSourceDigestHex, encryptionNetwork: options.contentSource.encryptionNetwork, expiry: input.expiry,\n display: { filename: options.filename }, encrypted: true as const,\n metadata: {\n mediaType: options.mediaType, byteLength: options.byteLength, filename: options.filename,\n ...(options.mediaType.startsWith(\"text/\") ? { encoding: \"utf-8\" as const } : {}),\n ...(options.artifact === undefined ? {} : { artifact: options.artifact }),\n },\n ...(options.artifactPin === undefined ? {} : { artifactPin: options.artifactPin }),\n };\n}\n\nfunction signedAddressedEnvelope(unsigned: UnsignedShareEnvelopeV3, signerDid: string, signature: Uint8Array): ShareEnvelopeV3 {\n return { ...unsigned, signature: { signerDid, algorithm: \"Ed25519\", value: toBase64Url(signature) } };\n}\n\nfunction publicationResult(input: {\n readonly options: AddressedSharePublishOptions;\n readonly url: string;\n readonly envelopeCid: string;\n readonly matcher: OwnerShareMatcher;\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly enforcerDid: string;\n readonly expiry: string;\n readonly deliveryMaterial: PublishedShareDeliveryMaterial;\n}): PublishedShare {\n const result = {\n protocol: \"tinycloud-share\", version: SHARE_PUBLISH_RESULT_VERSION, url: input.url,\n link: { kind: \"policy\" as const, cid: input.envelopeCid },\n metadata: {\n protocol: \"tinycloud-share\" as const, version: 1 as const, shareId: input.options.shareId,\n origin: input.options.shareOrigin,\n target: { kind: targetKind(input.options.target), origin: input.options.nodeOrigin, nodeAudience: input.enforcerDid, spaceId: input.options.spaceId },\n resource: { ...input.options.resource }, actions: [...input.options.actions], expiresAt: input.expiry,\n display: { filename: input.options.filename }, recipientMatcher: { ...input.matcher }, policyCid: input.policyCid,\n ownerDelegationCid: input.policyRootCid, enforcementDelegationCid: input.enforcementRootCid,\n ownerDid: input.options.authority.ownerDid, enforcerDid: input.enforcerDid, envelopeCid: input.envelopeCid, shareCid: input.envelopeCid,\n },\n } satisfies PublishedShare;\n Object.defineProperty(result, \"toJSON\", { enumerable: false, value: () => redactPublishedShare(result) });\n Object.defineProperty(result, \"url\", { enumerable: false, value: input.url });\n Object.defineProperty(result, \"deliveryMaterial\", { enumerable: false, value: input.deliveryMaterial });\n return result;\n}\n\n/**\n * Mailbox-addressed shares are opened by proving the mailbox to\n * OpenCredentials, so their policy must commit to that credential (Policy/v2).\n * The receiving SDK recomputes the requirement from the envelope's recipient\n * matcher and refuses any share whose commitment differs, so the commitment\n * is derived here from the same normalized target rather than trusted from\n * the caller. A domain share admits every mailbox at the domain; its access\n * and delivery are the owner's choice, as for exact-email shares.\n */\nconst EMAIL_PROFILE = { id: \"tinycloud.email-proof/v1\", version: 1 } as const;\nconst EMAIL_DOMAIN_PROFILE = { id: \"tinycloud.email-domain-proof/v1\", version: 1 } as const;\nconst EMAIL_CREDENTIAL_TYPE = { id: \"opencredentials.email/v1\", version: 1 } as const;\n/** Digests of the OpenCredentials descriptors (pinned by issuer and SDK tests). */\nconst EMAIL_DESCRIPTOR_DIGEST = \"1tg-qphmKBVtNwzVg9xyz-xxqt_xtMXAsQyXw46m8S0\";\nconst EMAIL_DOMAIN_DESCRIPTOR_DIGEST = \"33X5mAkZZgApdD3xh_T-3KS5moop0J2Nloi2nqWsdWY\";\nconst EMAIL_CREDENTIAL_ISSUER_DID = \"did:web:issuer.credentials.org\";\nconst EMAIL_CREDENTIAL_ISSUER_KID = `${EMAIL_CREDENTIAL_ISSUER_DID}#controller`;\n\ntype MailboxTarget = Extract<ShareTarget, { readonly kind: \"email\" | \"emailDomain\" }>;\n\nfunction mailboxCredentialCommitment(target: MailboxTarget): PolicyCredentialRequirementV1 {\n const profile = target.kind === \"email\" ? EMAIL_PROFILE : EMAIL_DOMAIN_PROFILE;\n // Field-for-field the requirement sdk-core's createEmail(Domain)CredentialRequirement builds on receive.\n const requirement = target.kind === \"email\"\n ? { type: \"TinyCloudCredentialRequirement\", version: 1, profile, credentialType: EMAIL_CREDENTIAL_TYPE, claims: { email: target.address }, maxAgeSeconds: 3600 }\n : { type: \"TinyCloudCredentialRequirement\", version: 1, profile, credentialType: EMAIL_CREDENTIAL_TYPE, claims: { emailDomain: target.domain }, maxAgeSeconds: 300 };\n return {\n type: \"TinyCloudPolicyCredentialRequirement\",\n version: 1,\n requirementDigest: toBase64Url(sha256(textEncoder.encode(canonicalize(requirement)))),\n descriptorDigest: target.kind === \"email\" ? EMAIL_DESCRIPTOR_DIGEST : EMAIL_DOMAIN_DESCRIPTOR_DIGEST,\n issuerDid: EMAIL_CREDENTIAL_ISSUER_DID,\n issuerKid: EMAIL_CREDENTIAL_ISSUER_KID,\n profile,\n credentialType: EMAIL_CREDENTIAL_TYPE,\n };\n}\n\n/** The Policy/v2 credential commitment a share addressed to `target` must carry. */\nexport function addressedCredentialRequirement(target: MailboxTarget): PolicyCredentialRequirementV1 {\n const normalized = normalizeShareTarget(target);\n if (normalized.kind !== \"email\" && normalized.kind !== \"emailDomain\") throw new TypeError(\"a mailbox target is required\");\n return mailboxCredentialCommitment(normalized);\n}\n\n/** Facts every addressed-share check needs, available before any side effect. */\nexport type AddressedShareRequest = Pick<AddressedSharePublishOptions, \"target\" | \"actions\" | \"policyActions\" | \"filename\" | \"deliveryEmail\">;\n\nexport interface PreparedAddressedShare {\n /** The canonical target the envelope's recipient matcher will carry. */\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n /** Present for mailbox targets: the Policy/v2 commitment to pass to `publishAddressedShare`. */\n readonly credentialRequirement?: PolicyCredentialRequirementV1;\n}\n\n/**\n * Runs every argument and target check of `publishAddressedShare` that does\n * not depend on stored content, and derives the credential commitment. It has\n * no side effects, so senders call it before uploading content or publishing\n * a location record; a refused share then leaves nothing behind.\n */\nexport function prepareAddressedShare(request: AddressedShareRequest): PreparedAddressedShare {\n try {\n canonicalShareFilename(request.filename);\n } catch {\n throw new TypeError(\"addressed filename is invalid\");\n }\n if (request.actions.length === 0 || request.policyActions.length === 0) throw new TypeError(\"addressed share actions are empty\");\n if (request.policyActions.some((action) => !OWNER_SHARE_ACTIONS.has(action))) throw new TypeError(\"addressed share action is not supported\");\n // The envelope schema signs `deliveryEmail` only in a form deployed viewers\n // accept; refuse anything else before the caller uploads or registers.\n if (request.deliveryEmail !== undefined && !isEnvelopeDeliveryEmail(request.deliveryEmail)) throw new TypeError(\"delivery email is not a valid envelope address\");\n const target = normalizeShareTarget(request.target);\n if (target.kind === \"bearer\") throw new TypeError(\"addressed target is required\");\n if (target.kind === \"recipientDid\") return { target };\n // A domain link can be emailed to any number of mailboxes at the domain, so\n // it is normally not pinned to one. If the owner pins one, it must be the\n // issuer's lowercase mailbox at exactly that domain, the form the owner's\n // Node names in its delivery admission.\n if (target.kind === \"emailDomain\" && request.deliveryEmail !== undefined\n && (request.deliveryEmail !== request.deliveryEmail.toLowerCase() || !request.deliveryEmail.endsWith(`@${target.domain}`))) {\n throw new TypeError(\"email-domain delivery address must be a lowercase mailbox at the domain\");\n }\n return { target, credentialRequirement: mailboxCredentialCommitment(target) };\n}\n\nfunction assertMailboxCommitment(commitment: PolicyCredentialRequirementV1 | undefined, target: MailboxTarget): void {\n const label = target.kind === \"email\" ? \"email\" : \"email-domain\";\n // Without a commitment the policy would be Policy/v1, which no receiver can open.\n if (commitment === undefined) throw new TypeError(`${label} shares require a credential requirement`);\n const expected = mailboxCredentialCommitment(target);\n // Pin the profile, descriptor and issuer rather than trusting the caller:\n // only these derive the claim under the canonical mailbox rules.\n if (canonicalize(commitment.profile) !== canonicalize(expected.profile)\n || canonicalize(commitment.credentialType) !== canonicalize(expected.credentialType)\n || commitment.descriptorDigest !== expected.descriptorDigest\n || commitment.issuerDid !== expected.issuerDid\n || commitment.issuerKid !== expected.issuerKid) throw new TypeError(`${label} shares require the ${label} credential profile`);\n if (commitment.requirementDigest !== expected.requirementDigest) throw new TypeError(`credential requirement is not bound to the email ${target.kind === \"email\" ? \"address\" : \"domain\"}`);\n}\n\n/** Canonical application-neutral Policy/v3 addressed publisher shared by browser and CLI. */\nexport async function publishAddressedShare(input: AddressedSharePublishOptions): Promise<PublishedShare> {\n assertSafeInput(input);\n const { target } = prepareAddressedShare(input);\n // Refuse a share whose pin and source disagree (or an artifact source with no pin) before anything is registered.\n assertArtifactBinding({\n ...(input.artifactPin === undefined ? {} : { artifactPin: input.artifactPin }),\n target: { spaceId: input.spaceId },\n contentSource: input.contentSource,\n resource: input.resource,\n actions: input.actions,\n policyKvActions: input.policyActions,\n });\n // Envelope, result metadata and history all carry the viewer's NFC form.\n const options = { ...input, filename: canonicalShareFilename(input.filename) };\n if (target.kind !== \"recipientDid\") assertMailboxCommitment(options.credentialRequirement, target);\n const matcher = targetMatcher(target);\n const { expiry, capabilities, contentSourceDigestHex, capabilityCeilingHashHex, nativeProjectionHashHex } = addressedPlan(options);\n // The policy registration below is the first write. A share whose sealed envelope cannot fit in a link is refused before it.\n await assertSealedBodyFits({ ...options, matcher, ownerDid: options.authority.ownerDid });\n const created = await createPolicy(options, capabilities);\n const commonRoot = {\n ownerDid: options.authority.ownerDid, policyId: created.policy.policyId, policyDigestHex: created.policyDigestHex,\n policyCid: created.policyCid, contentSourceDigestHex, capabilityCeilingHashHex, nativeProjectionHashHex,\n notBefore: new Date(created.policy.createdAt), expiresAt: new Date(expiry), nodeAudience: options.nodeAudience, capabilities,\n };\n const policyRootReceipt = await options.authority.createOwnerRoot({ ...commonRoot, role: \"policy-authority\", audienceDid: `did:tinycloud:policy:${created.policyDigestHex}` });\n const enforcementRootReceipt = await options.authority.createOwnerRoot({ ...commonRoot, role: \"policy-enforcement\", audienceDid: options.enforcerDid });\n const policyRoot: UnifiedRoot = { cid: policyRootReceipt.cid, authorization: policyRootReceipt.delegationHeader.Authorization.replace(/^Bearer\\s+/i, \"\"), role: \"policy-authority\" };\n const enforcementRoot: UnifiedRoot = { cid: enforcementRootReceipt.cid, authorization: enforcementRootReceipt.delegationHeader.Authorization.replace(/^Bearer\\s+/i, \"\"), role: \"policy-enforcement\" };\n const registration = await options.authority.registerPolicy({\n policyCid: created.policyCid, policy: created.policy, policyRoot, enforcementRoot, contentSourceDigestHex,\n nativeProjectionHashHex, rootExpiresAt: expiry, enforcerDid: options.enforcerDid,\n expectedNodeAudience: options.nodeAudience,\n });\n if (registration.policyCid !== created.policyCid || registration.policyRootCid !== policyRoot.cid || registration.enforcementRootCid !== enforcementRoot.cid) throw new Error(\"Policy/v3 registration receipt is not bound to the published roots\");\n const unsigned = unsignedAddressedEnvelope({\n options, matcher, policy: created.policy, policyCid: created.policyCid, policyRoot, enforcementRoot,\n attestedEnforcerBinding: registration.attestedEnforcerBinding, contentSourceDigestHex, expiry,\n });\n unsignedShareEnvelopeV3Schema.parse(unsigned);\n const envelopeSignature = await options.authority.sign(sha256(textEncoder.encode(`${ENVELOPE_V3_DOMAIN}${canonicalize(unsigned)}`)));\n if (envelopeSignature.byteLength !== 64) throw new TypeError(\"v3 envelope signature must be Ed25519\");\n const envelope = signedAddressedEnvelope(unsigned, options.authority.ownerDid, envelopeSignature);\n shareEnvelopeV3Schema.parse(envelope);\n const envelopeBytes = textEncoder.encode(canonicalize(envelope));\n // The recipient envelope carries email and policy metadata. Seal it before\n // assigning its CID or constructing a URL: neither metadata nor the key\n // may occur in a query parameter or any other loggable URL component.\n const envelopeKeyBytes = generateKey();\n const sealed = await seal(envelopeBytes, envelopeKeyBytes);\n const envelopeKey = toBase64Url(envelopeKeyBytes);\n // The real check, on the sealed body itself, before any link is built or the header is signed. The caller removes what the\n // registration above wrote (see `AddressedShareOverLimitError`).\n if (sealed.blob.length > await linkBodyLimit()) {\n throw new AddressedShareOverLimitError({ policyCid: created.policyCid, policyRootCid: policyRoot.cid, enforcementRootCid: enforcementRoot.cid });\n }\n // The link this publisher returns is the full `v=4` link: the signed record rides in the fragment, so it works\n // with no service. The header is signed by the key that signs the envelope (the envelope's signer is the issuer\n // every reader binds the record to). A caller that wants a short link posts `deliveryMaterial` with `createLink`.\n const links = await import(\"@tinycloud/share-envelope/links\");\n const { record } = await links.prepareLinkRecord({\n type: \"share\",\n sealed: { blob: sealed.blob, key: envelopeKeyBytes },\n issuerKey: { did: options.authority.ownerDid, sign: (digest) => options.authority.sign(digest) },\n apiOrigin: options.apiOrigin ?? links.DEFAULT_LINKS_API_ORIGIN,\n expiresAt: new Date(expiry),\n enforceServiceLife: false,\n });\n const url = links.buildFullLink({ origin: options.shareOrigin, key: envelopeKeyBytes, record });\n const deliveryMaterial = {\n envelope,\n shareCid: sealed.cid,\n sealedEnvelope: toBase64Url(sealed.blob),\n envelopeKey,\n };\n options.onDeliveryMaterial?.(deliveryMaterial);\n return publicationResult({\n options, url, envelopeCid: sealed.cid, matcher, policyCid: created.policyCid,\n policyRootCid: policyRoot.cid, enforcementRootCid: enforcementRoot.cid,\n enforcerDid: registration.attestedEnforcerBinding.enforcerDid,\n expiry, deliveryMaterial,\n });\n}\n\n/** The text a share gets when its sealed envelope cannot fit in a link. */\nexport const ADDRESSED_SHARE_TOO_LARGE_MESSAGE = \"This share is too large to send as a link, so nothing was shared. Use a shorter path or fewer folders.\";\n\n/** What a publish has written by the time its sealed envelope is measured. */\nexport interface AddressedShareWrites {\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n}\n\n/**\n * Thrown by `publishAddressedShare` when the sealed envelope, measured after\n * the policy registration, is over `MAX_LINK_BODY_BYTES`. The size bound makes\n * this unreachable for a correct caller; if it happens, `written` names what\n * the publish registered so the caller can remove it. No link was built.\n */\nexport class AddressedShareOverLimitError extends SharePublishError {\n constructor(readonly written: AddressedShareWrites) {\n super(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n this.name = \"AddressedShareOverLimitError\";\n }\n}\n\n/** The links module loads on demand, so the limit is read from it when a check runs. */\nasync function linkBodyLimit(): Promise<number> {\n return (await import(\"@tinycloud/share-envelope/links\")).MAX_LINK_BODY_BYTES;\n}\n\n/** Longest string an authority returns as the CID of an owner root. A blake3 CIDv1 is 59 characters; the bound leaves room for any multibase CID. */\nconst ROOT_CID_BOUND_CHARS = 128;\n/** Longest RFC 3339 timestamp a node may return: nine fractional digits and a numeric offset. */\nconst NODE_TIMESTAMP_BOUND = \"2026-01-01T00:00:00.123456789+00:00\";\n/** An Ed25519 DID key is 56 characters. */\nconst ED25519_DID_KEY_CHARS = 56;\n\n/**\n * The compact-UCAN owner root as the authority signs it (sdk-core\n * `signCompactUcanRootAuthorization`), with every value the signing writes at\n * its widest: 16-digit times, a 36-character nonce (a UUID; the node SDK uses 22), a 64-byte signature.\n */\nfunction rootAuthorizationBound(input: {\n readonly ownerDid: string;\n readonly role: UnifiedRoot[\"role\"];\n readonly audienceDid: string;\n readonly policyId: string;\n readonly policyDigestHex: string;\n readonly policyCid: string;\n readonly contentSourceDigestHex: string;\n readonly capabilityCeilingHashHex: string;\n readonly nativeProjectionHashHex: string;\n readonly nodeAudience: string;\n readonly capabilities: readonly UnifiedPolicyCapability[];\n}): string {\n const attenuation: Record<string, unknown> = {};\n for (const capability of input.capabilities) {\n attenuation[capability.resource] = capability.kind === \"encryption\"\n ? { [capability.action]: [{}] }\n : Object.fromEntries(capability.actions.map((action) => [action, [{ type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource }]]));\n }\n const facts = {\n role: input.role,\n mode: input.role === \"policy-authority\" ? \"policy-source\" : \"conditional-mint\",\n ownerDid: input.ownerDid,\n policyId: input.policyId,\n policyDigestHex: input.policyDigestHex,\n policyCid: input.policyCid,\n contentSourceDigestHex: input.contentSourceDigestHex,\n capabilityCeilingHashHex: input.capabilityCeilingHashHex,\n nativeProjectionHashHex: input.nativeProjectionHashHex,\n nodeAudience: input.nodeAudience,\n ...(input.role === \"policy-enforcement\" ? { enforcerDid: input.audienceDid } : {}),\n };\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: \"A\".repeat(43) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: attenuation,\n aud: input.audienceDid,\n exp: Number.MAX_SAFE_INTEGER,\n fct: [facts],\n iss: `${input.ownerDid}#${input.ownerDid.slice(\"did:key:\".length)}`,\n nbf: Number.MAX_SAFE_INTEGER,\n nnc: \"A\".repeat(36),\n prf: [] as string[],\n };\n return `${toBase64Url(textEncoder.encode(canonicalize(header)))}.${toBase64Url(textEncoder.encode(canonicalize(payload)))}.${\"A\".repeat(86)}`;\n}\n\ntype BoundOptions = EnvelopeInputs\n & Pick<AddressedSharePublishOptions, \"nodeAudience\" | \"enforcerDid\" | \"policyActions\" | \"credentialRequirement\" | \"expiresAt\">\n & { readonly matcher: OwnerShareMatcher; readonly ownerDid: string };\n\n/**\n * An upper bound on the sealed envelope of an addressed share, in bytes. It\n * builds the envelope through the same serializer as the publish, from the\n * share's own inputs, with every value a write returns at its maximum encoded\n * length: the root and registration identifiers, the root authorizations\n * (times, nonce, signature), the enforcer's attestation, and all signatures.\n * It seals that envelope with a throwaway key.\n */\nasync function sealedBodyUpperBound(options: BoundOptions): Promise<number> {\n const plan = addressedPlan(options);\n const signature = new Uint8Array(64);\n const created = await createPolicy({ ...options, authority: { ownerDid: options.ownerDid, sign: async () => signature } }, plan.capabilities);\n const common = {\n ownerDid: options.ownerDid, policyId: created.policy.policyId, policyDigestHex: created.policyDigestHex, policyCid: created.policyCid,\n contentSourceDigestHex: plan.contentSourceDigestHex, capabilityCeilingHashHex: plan.capabilityCeilingHashHex,\n nativeProjectionHashHex: plan.nativeProjectionHashHex, nodeAudience: options.nodeAudience, capabilities: plan.capabilities,\n };\n const policyRoot: UnifiedRoot = {\n cid: \"b\".repeat(ROOT_CID_BOUND_CHARS), role: \"policy-authority\",\n authorization: rootAuthorizationBound({ ...common, role: \"policy-authority\", audienceDid: `did:tinycloud:policy:${created.policyDigestHex}` }),\n };\n const enforcementRoot: UnifiedRoot = {\n cid: \"b\".repeat(ROOT_CID_BOUND_CHARS), role: \"policy-enforcement\",\n authorization: rootAuthorizationBound({ ...common, role: \"policy-enforcement\", audienceDid: options.enforcerDid }),\n };\n const nodeDid = options.enforcerDid.padEnd(ED25519_DID_KEY_CHARS, \"z\");\n const unsigned = unsignedAddressedEnvelope({\n options, matcher: options.matcher, policy: created.policy, policyCid: created.policyCid, policyRoot, enforcementRoot,\n attestedEnforcerBinding: {\n schema: \"xyz.tinycloud.policy/attested-enforcer/v2\", enforcerDid: nodeDid, nodeAudience: nodeDid,\n attestationBindingDigestHex: \"f\".repeat(64), issuedAt: NODE_TIMESTAMP_BOUND, expiresAt: NODE_TIMESTAMP_BOUND,\n signature: { suite: \"Ed25519\", signerDid: nodeDid, value: \"A\".repeat(86) },\n },\n contentSourceDigestHex: plan.contentSourceDigestHex, expiry: plan.expiry,\n });\n const envelope = signedAddressedEnvelope(unsigned, options.ownerDid, signature);\n return (await seal(textEncoder.encode(canonicalize(envelope)), generateKey())).blob.length;\n}\n\nasync function assertSealedBodyFits(options: BoundOptions): Promise<void> {\n if (await sealedBodyUpperBound(options) > await linkBodyLimit()) throw new SharePublishError(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n}\n\n/** What a sender knows before any write; see {@link addressedShareBodyUpperBound}. */\nexport interface AddressedShareBoundInput extends AddressedShareRequest {\n readonly shareId: string;\n readonly ownerDid: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n readonly spaceId: string;\n readonly resource: { readonly kind: \"exact\" | \"prefix\" };\n /** Where the content will be stored: a path, or the id and stored file name of an artifact (whose version number the publish assigns). */\n readonly storage: { readonly path: string } | { readonly artifactId: string; readonly storageName: string };\n /** The owner's encryption network for the space. */\n readonly encryptionNetwork: string;\n /** Optional and redundant: the path is always `share/<shareId>`. A different value is refused. */\n readonly encryptionKeyPath?: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n readonly expiresAt: Date;\n}\n\n/**\n * The largest sealed envelope a share can have, in bytes, computed before any\n * write (upload, registration, registry or KV write): the same envelope the\n * publish builds, with every value a write returns at its maximum encoded\n * length (see `sealedBodyUpperBound`). Compare it with `MAX_LINK_BODY_BYTES`.\n * For an artifact share the version, the manifest digest and the stored size\n * are taken at their largest.\n */\nexport async function addressedShareBodyUpperBound(input: AddressedShareBoundInput): Promise<number> {\n // The requirement and the delivery address are derived exactly as the publish derives them, so the bound carries\n // every field the sealed envelope can: a caller cannot leave one out, and a mailbox target always has its commitment.\n const { target, credentialRequirement } = prepareAddressedShare(input);\n const deliveryEmail = input.deliveryEmail ?? (target.kind === \"email\" && isEnvelopeDeliveryEmail(target.address) ? target.address : undefined);\n const artifactStorage = \"artifactId\" in input.storage ? input.storage : undefined;\n const path = \"path\" in input.storage\n ? input.storage.path\n : `${ARTIFACT_ROOT}/${input.storage.artifactId}/versions/${Number.MAX_SAFE_INTEGER}/${input.storage.storageName}`;\n const keyPath = pathBoundKeyPath(input.shareId);\n assertEncryptionNetwork(input.encryptionNetwork);\n if (input.encryptionKeyPath !== undefined && input.encryptionKeyPath !== keyPath) throw new AddressedContentSourceError(\"key-path-mismatch\", \"addressed content source key path must be share/<shareId> of this share\");\n const contentSource: PathBoundContentSource = {\n shareId: input.shareId, kvResource: `${input.spaceId}/kv/${path}`, selector: input.resource.kind, encryptionNetwork: input.encryptionNetwork,\n encryptionKeyPath: keyPath,\n encryptedSymmetricKeyDigestHex: \"f\".repeat(64), keyVersion: Number.MAX_SAFE_INTEGER, mode: \"immutable\", initialCiphertextDigestHex: \"f\".repeat(64),\n };\n const artifactPin: ArtifactPin | undefined = artifactStorage === undefined ? undefined : {\n v: 1, artifactId: artifactStorage.artifactId, version: Number.MAX_SAFE_INTEGER, manifestSha256: \"f\".repeat(64),\n files: [{ path: artifactStorage.storageName, sha256: \"f\".repeat(64), bytes: Number.MAX_SAFE_INTEGER }],\n };\n return sealedBodyUpperBound({\n shareId: input.shareId, nodeOrigin: input.nodeOrigin, nodeAudience: input.nodeAudience, enforcerDid: input.enforcerDid, spaceId: input.spaceId,\n actions: input.actions, policyActions: input.policyActions, resource: { kind: input.resource.kind, path },\n contentSource, ...(artifactPin === undefined ? {} : { artifactPin }),\n ...(credentialRequirement === undefined ? {} : { credentialRequirement }),\n ...(deliveryEmail === undefined ? {} : { deliveryEmail }),\n ...(input.artifact === undefined ? {} : { artifact: input.artifact }),\n filename: canonicalShareFilename(input.filename), mediaType: input.mediaType, byteLength: input.byteLength, expiresAt: input.expiresAt,\n matcher: targetMatcher(target), ownerDid: input.ownerDid,\n });\n}\n\n/** Refuses (`SharePublishError`, code `max-bytes-exceeded`, {@link ADDRESSED_SHARE_TOO_LARGE_MESSAGE}) a share whose largest sealed envelope is over `MAX_LINK_BODY_BYTES`. Call it before any write. */\nexport async function assertAddressedShareFits(input: AddressedShareBoundInput): Promise<void> {\n if (await addressedShareBodyUpperBound(input) > await linkBodyLimit()) throw new SharePublishError(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { canonicalize, fromBase64Url, type UnifiedContentSource } from \"@tinycloud/share-envelope\";\n\n/**\n * Path-bound addressed content (TC-2242). An addressed share encrypts its content under ONE named key,\n * `share/<shareId>` on the owner's default encryption network, and registers that key's wrapped-key digest. The node\n * refuses a new registration without both (`content-source-key-path-required`, `content-source-key-digest-required`) and\n * opens only that one key, never the network. This module is the single place that derives the path, validates the\n * network, serializes the stored envelope and computes the digests, so no consumer hand-writes any of them.\n *\n * Call sequence: `planPathBoundShare` (before anything is written) -> the caller holds the plan's `requiredPermissions`\n * -> `encryptAddressedShareContent` (or the caller's own `keys.createKey` + `keys.encrypt`) -> upload `storedBytes` ->\n * `bindPathBoundContentSource` -> `publishAddressedShare`.\n */\n\nexport type AddressedContentSourceErrorCode =\n | \"share-id-invalid\"\n | \"network-invalid\"\n | \"network-not-checksummed\"\n | \"key-path-required\"\n | \"key-path-mismatch\"\n | \"digest-invalid\"\n | \"key-not-authorized\"\n | \"key-receipt-mismatch\"\n | \"envelope-invalid\"\n | \"stored-bytes-mismatch\";\n\n/** A path-bound source could not be planned, built or accepted. Match on `code`, not the message or `instanceof`. */\nexport class AddressedContentSourceError extends TypeError {\n readonly code: AddressedContentSourceErrorCode;\n constructor(code: AddressedContentSourceErrorCode, message: string) {\n super(message);\n this.name = \"AddressedContentSourceError\";\n this.code = code;\n }\n}\n\n/**\n * The content source of an addressed share: a `UnifiedContentSource` that is bound to its one key. **Build it ONLY with\n * `bindPathBoundContentSource`.** The publisher can check the path, the digest's FORMAT and the network, but it cannot verify that the digest is the\n * raw-byte digest of the wrapped key (a hand-written literal that registers `encryptedSymmetricKeyHash`, the canonical hash of the base64 text, type-checks\n * and publishes, and no recipient or node will ever open it). No runtime brand is used, because two copies of this package must interoperate.\n */\nexport type PathBoundContentSource = UnifiedContentSource & {\n readonly encryptionKeyPath: string;\n readonly encryptedSymmetricKeyDigestHex: string;\n};\n\n/** The shape of a `PermissionEntry` (`@tinycloud/sdk-core`): hand it to `requestPermissions` or a manifest as is. */\nexport interface PathBoundPermissionEntry {\n service: \"tinycloud.encryption\";\n path: string;\n actions: string[];\n}\n\n// ONE share-id grammar, used by the plan, the key helper, the size bound and the publisher: the INTERSECTION of the node's key-path segment grammar\n// (key_id.rs valid_segment: first byte a lowercase letter or digit, then lowercase letters, digits, `.`, `_`, `-`; at most 64 bytes) and the\n// publisher's own id alphabet (no `.`). 16 is this SDK's minimum length. An id outside it is refused BEFORE a key is created.\nconst SHARE_ID = /^[a-z0-9][a-z0-9_-]{15,63}$/;\nconst NETWORK = /^urn:tinycloud:encryption:(.+):default$/;\nconst OWNER_PKH = /^did:pkh:eip155:([1-9][0-9]*):(0x[0-9a-fA-F]{40})$/;\nconst OWNER_KEY = /^did:key:[A-Za-z0-9]+$/;\nconst ENVELOPE_FIELDS = [\"v\", \"networkId\", \"keyPath\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"aad\", \"metadata\"];\nconst ENVELOPE_ALG = \"x25519-aes256gcm/v1\";\nconst HEX_DIGEST = /^[0-9a-f]{64}$/;\nconst BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst textEncoder = new TextEncoder();\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/** EIP-55 mixed-case form of an Ethereum address (the node's key and prefix resources require it). */\nfunction checksumAddress(address: string): string {\n const lower = address.toLowerCase().slice(2);\n const hash = keccak_256(textEncoder.encode(lower));\n let out = \"0x\";\n for (let index = 0; index < lower.length; index++) {\n const nibble = (hash[index >> 1]! >> (index % 2 === 0 ? 4 : 0)) & 0x0f;\n out += nibble >= 8 ? lower[index]!.toUpperCase() : lower[index]!;\n }\n return out;\n}\n\n/** The key path every addressed share is encrypted under: `share/<shareId>`. */\nexport function pathBoundKeyPath(shareId: string): string {\n if (typeof shareId !== \"string\" || !SHARE_ID.test(shareId)) {\n throw new AddressedContentSourceError(\"share-id-invalid\", \"addressed share id is invalid: 16 to 64 characters from lowercase letters, digits, '_' and '-', starting with a letter or digit (a lowercase UUID, hyphens included, is valid)\");\n }\n return `share/${shareId}`;\n}\n\n/**\n * The owner's default encryption network URN with the EIP-55 checksummed address, which is the only spelling the node\n * accepts for key and prefix resources. Pure. Accepts the owner DID (`did:pkh:eip155:<chain>:<address>`, any case), or just the\n * owner's address (a string `0x...`, or `{ address, chainId? }`; chain id defaults to 1), so a caller never writes the spelling.\n */\nexport function defaultEncryptionNetworkForOwner(owner: string | { readonly address: string; readonly chainId?: number }): string {\n let did: unknown = owner;\n const address = typeof owner === \"string\" ? (/^0x[0-9a-fA-F]{40}$/.test(owner) ? owner : undefined) : owner?.address;\n if (address !== undefined) {\n const chainId = typeof owner === \"string\" ? 1 : owner.chainId ?? 1;\n if (typeof address !== \"string\" || !/^0x[0-9a-fA-F]{40}$/.test(address) || !Number.isSafeInteger(chainId) || chainId < 1) {\n throw new AddressedContentSourceError(\"network-invalid\", \"owner address is not an Ethereum address\");\n }\n did = `did:pkh:eip155:${chainId}:${address}`;\n }\n const pkh = typeof did === \"string\" ? OWNER_PKH.exec(did) : null;\n const normalized = pkh === null ? did : `did:pkh:eip155:${pkh[1]}:${checksumAddress(pkh[2]!)}`;\n const network = `urn:tinycloud:encryption:${String(normalized)}:default`;\n if (typeof normalized !== \"string\" || !(pkh !== null || OWNER_KEY.test(normalized))) {\n throw new AddressedContentSourceError(\"network-invalid\", \"owner does not name an encryption network\");\n }\n return network;\n}\n\n/**\n * The strict form of the owner's default encryption network: `urn:tinycloud:encryption:<owner>:default` with `<owner>` either\n * `did:pkh:eip155:<chain, no leading zero>:<0x + 40 hex, EIP-55 checksummed>` or `did:key:<alphanumeric, no `:`>`. Anything else (another\n * network name, an extra `:` segment, a lower-cased or `0X` address, another DID method) is refused with a specific code.\n */\nexport function assertEncryptionNetwork(network: unknown): string {\n const match = typeof network === \"string\" ? NETWORK.exec(network) : null;\n if (match === null) {\n throw new AddressedContentSourceError(\"network-invalid\", \"encryption network must be the owner's default network: urn:tinycloud:encryption:<did>:default\");\n }\n const owner = match[1]!;\n const pkh = OWNER_PKH.exec(owner);\n if (pkh !== null) {\n if (pkh[2] !== checksumAddress(pkh[2]!)) {\n throw new AddressedContentSourceError(\"network-not-checksummed\", \"encryption network address must be EIP-55 checksummed; use defaultEncryptionNetworkForOwner(ownerDid)\");\n }\n } else if (!OWNER_KEY.test(owner)) {\n throw new AddressedContentSourceError(\"network-invalid\", \"encryption network owner must be a did:pkh:eip155 address or a did:key\");\n }\n return network as string;\n}\n\nconst assertNetwork = assertEncryptionNetwork;\n\nfunction decodeWrappedKey(encryptedSymmetricKey: unknown): Uint8Array {\n if (typeof encryptedSymmetricKey !== \"string\" || !BASE64.test(encryptedSymmetricKey)) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"wrapped content key is not strict base64\");\n }\n try {\n // The shared strict decoder also rejects nonzero trailing pad bits.\n return fromBase64Url(encryptedSymmetricKey.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"wrapped content key is not strict base64\");\n }\n}\n\n/** Strict base64 (padded, standard alphabet, zero trailing pad bits), as the recipient decodes; throws `envelope-invalid`. */\nfunction decodeBase64(value: string): Uint8Array {\n try {\n return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope field is not strict base64\");\n }\n}\n\n/** The digest a path-bound source registers: SHA-256 of the DECODED wrapped-key bytes (the node and the recipient compare exactly this). */\nexport function wrappedKeyDigestHex(encryptedSymmetricKey: string): string {\n return hex(sha256(decodeWrappedKey(encryptedSymmetricKey)));\n}\n\nfunction canonicalKeyHashHex(encryptedSymmetricKey: string): string {\n return hex(sha256(textEncoder.encode(canonicalize(encryptedSymmetricKey))));\n}\n\n/** What a consumer needs to encrypt, upload and bind one addressed share's content. */\nexport interface PathBoundSharePlan {\n readonly shareId: string;\n readonly encryptionNetwork: string;\n /** `share/<shareId>`: the named key the content is encrypted under. */\n readonly keyPath: string;\n /** `<network>/share/<shareId>`: the one decrypt resource the share grants. */\n readonly keyResource: string;\n /**\n * ROUTE A, per share at runtime: `key.create` on exactly this share's key, requested with `requestPermissions` before the key is created\n * (one extra consent per share). For apps that cannot use the sign-in route (for example apps whose sign-in goes through the OpenKey widget\n * `authorizeTinyCloud` route, which refuses decrypt and key.create outside `apps/`).\n */\n readonly requiredPermissions: PathBoundPermissionEntry[];\n /**\n * ROUTE B, once at sign-in (manifest entries): `key.create` and `decrypt` on the default network's `<network>/share/` prefix, so every share's\n * key can be created without a further prompt. Put these in the `permissions` of the manifest the owner signs in with.\n */\n readonly sessionPermissions: PathBoundPermissionEntry[];\n /** The owner session must hold these for the node to register the policy: decrypt under `<network>/share/` (also part of `sessionPermissions`). */\n readonly registrationPermissions: PathBoundPermissionEntry[];\n /** Options for `keys.encrypt(plan.keyPath, plaintext, plan.encryptOptions({ metadata }))`. */\n encryptOptions(extra?: { readonly metadata?: Readonly<Record<string, string>> }): { networkId: string; metadata?: Record<string, string> };\n}\n\n/**\n * The manifest entries (route B, sign-in) that let one session create every share's key: `decrypt` and `key.create` on the default network's\n * `<network>/share/` prefix. Needs no share id, so an app builds its manifest before any share exists. Put the result in `manifest.permissions`.\n */\nexport function pathBoundSessionPermissions(input: { readonly encryptionNetwork: string }): PathBoundPermissionEntry[] {\n const encryptionNetwork = assertNetwork(input.encryptionNetwork);\n return [{ service: \"tinycloud.encryption\", path: `${encryptionNetwork}/share/`, actions: [\"tinycloud.encryption/decrypt\", \"tinycloud.encryption/key.create\"] }];\n}\n\n/** Validate the share id and network and derive the key path and the permissions the share needs. Writes and signs nothing. */\nexport function planPathBoundShare(input: { readonly shareId: string; readonly encryptionNetwork: string }): PathBoundSharePlan {\n const keyPath = pathBoundKeyPath(input.shareId);\n const encryptionNetwork = assertNetwork(input.encryptionNetwork);\n const keyResource = `${encryptionNetwork}/${keyPath}`;\n return {\n shareId: input.shareId,\n encryptionNetwork,\n keyPath,\n keyResource,\n requiredPermissions: [{ service: \"tinycloud.encryption\", path: keyResource, actions: [\"tinycloud.encryption/key.create\"] }],\n sessionPermissions: pathBoundSessionPermissions({ encryptionNetwork }),\n registrationPermissions: [{ service: \"tinycloud.encryption\", path: `${encryptionNetwork}/share/`, actions: [\"tinycloud.encryption/decrypt\"] }],\n encryptOptions: (extra) => ({ networkId: encryptionNetwork, ...(extra?.metadata === undefined ? {} : { metadata: { ...extra.metadata } }) }),\n };\n}\n\n/** The v2 envelope a named key's `encrypt` returns: the fields this module reads. Every other field it returns (ciphertext, alg, aad, metadata) is kept in the stored bytes. */\nexport interface PathBoundEnvelope {\n readonly v: number;\n readonly networkId: string;\n readonly keyPath: string;\n readonly keyVersion: number;\n readonly encryptedSymmetricKey: string;\n readonly encryptedSymmetricKeyHash: string;\n}\n\n/** The exact bytes to upload: the canonical JSON of the v2 envelope. Nothing else is stored. */\nexport function pathBoundStoredBytes(envelope: PathBoundEnvelope): Uint8Array {\n return textEncoder.encode(canonicalize(envelope as unknown as Record<string, unknown>));\n}\n\nfunction assertEnvelope(plan: PathBoundSharePlan, envelope: PathBoundEnvelope): void {\n if (envelope === null || typeof envelope !== \"object\" || envelope.v !== 2) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"path-bound content must be a v2 named-key envelope (encrypt with keys.encrypt, not encryptToNetwork)\");\n }\n if (envelope.networkId !== plan.encryptionNetwork || envelope.keyPath !== plan.keyPath) {\n throw new AddressedContentSourceError(\"key-path-mismatch\", \"envelope network or key path does not match the share's plan\");\n }\n if (!Number.isSafeInteger(envelope.keyVersion) || envelope.keyVersion < 1) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope key version is invalid\");\n }\n wrappedKeyDigestHex(envelope.encryptedSymmetricKey);\n if (envelope.encryptedSymmetricKeyHash !== canonicalKeyHashHex(envelope.encryptedSymmetricKey)) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope key hash does not match its wrapped key\");\n }\n // Mirror what the recipient checks before it opens the content (recipient.ts parseV3InlineEncryptedEnvelope), so a share it would refuse is\n // refused here, before the key's slot is spent on a share nobody can open.\n const record = envelope as unknown as Record<string, unknown>;\n if (Object.keys(record).some((key) => !ENVELOPE_FIELDS.includes(key)) || record.alg !== ENVELOPE_ALG) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope has a field or algorithm the recipient does not accept\");\n }\n if (typeof record.ciphertext !== \"string\" || !BASE64.test(record.ciphertext) || decodeBase64(record.ciphertext).length < 28) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope ciphertext is not strict base64 of at least 28 bytes\");\n }\n if (record.aad !== undefined && (typeof record.aad !== \"string\" || !BASE64.test(record.aad))) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope aad is not strict base64\");\n }\n if (record.metadata !== undefined && (record.metadata === null || typeof record.metadata !== \"object\" || Array.isArray(record.metadata) ||\n Object.values(record.metadata as Record<string, unknown>).some((entry) => typeof entry !== \"string\"))) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope metadata must be an object of strings\");\n }\n}\n\n/**\n * The content source for an encrypted and uploaded share. `envelope` is what `keys.encrypt` returned, `storedBytes` the\n * exact bytes uploaded (`pathBoundStoredBytes(envelope)`), `kvResource` where they now live (`<space>/kv/<path>`).\n * Derives the path, the raw-byte wrapped-key digest, the ciphertext digest and the key version; nothing is taken on trust.\n */\nexport function bindPathBoundContentSource(input: {\n readonly plan: PathBoundSharePlan;\n readonly envelope: PathBoundEnvelope;\n readonly storedBytes: Uint8Array;\n readonly kvResource: string;\n readonly selector: \"exact\" | \"prefix\";\n}): PathBoundContentSource {\n const { plan, envelope } = input;\n assertEnvelope(plan, envelope);\n const expected = pathBoundStoredBytes(envelope);\n if (input.storedBytes.length !== expected.length || input.storedBytes.some((byte, index) => byte !== expected[index])) {\n throw new AddressedContentSourceError(\"stored-bytes-mismatch\", \"uploaded bytes are not the canonical v2 envelope; upload pathBoundStoredBytes(envelope)\");\n }\n return {\n shareId: plan.shareId,\n kvResource: input.kvResource,\n selector: input.selector,\n encryptionNetwork: plan.encryptionNetwork,\n encryptionKeyPath: plan.keyPath,\n encryptedSymmetricKeyDigestHex: wrappedKeyDigestHex(envelope.encryptedSymmetricKey),\n keyVersion: envelope.keyVersion,\n mode: \"immutable\",\n initialCiphertextDigestHex: hex(sha256(expected)),\n };\n}\n\n/** The part of a named-key client (`NamedKeyClient`, web `tcw.keys`, node `node.keys`) this module calls. */\nexport interface AddressedShareKeyClient {\n createKey(path: string, options: { networkId: string }): Promise<{ readonly networkId: string; readonly keyPath: string; readonly state?: string; readonly keyVersion?: number }>;\n encrypt(path: string, plaintext: Uint8Array, options: { networkId: string; metadata?: Record<string, string> }): Promise<PathBoundEnvelope>;\n}\n\n/** What `encryptAddressedShareContent` returns: the envelope and the exact bytes to upload. */\nexport interface EncryptedAddressedContent {\n readonly envelope: PathBoundEnvelope;\n readonly storedBytes: Uint8Array;\n readonly byteLength: number;\n}\n\nfunction isUnauthorized(error: unknown): boolean {\n const value = error as { readonly status?: unknown; readonly code?: unknown } | null;\n return value !== null && typeof value === \"object\" && (value.status === 401 || value.status === 403 || value.code === \"PERMISSION_DENIED\" || value.code === \"AUTH_UNAUTHORIZED\");\n}\n\n/**\n * Create the share's named key and encrypt the content under it. Built from the same steps a consumer may run itself\n * (`keys.createKey`, `keys.encrypt`, then `bindPathBoundContentSource`). The key-create capability in\n * `plan.requiredPermissions` must already be held; an unauthorized answer is reported as `key-not-authorized` naming it.\n */\nexport async function encryptAddressedShareContent(input: {\n readonly plan: PathBoundSharePlan;\n readonly keys: AddressedShareKeyClient;\n readonly plaintext: Uint8Array;\n readonly metadata?: Readonly<Record<string, string>>;\n}): Promise<EncryptedAddressedContent> {\n const { plan, keys } = input;\n // Read before encrypting: the caller owns the buffer and may zero it (`fill(0)`) as soon as this returns; it is never retained or transferred.\n const byteLength = input.plaintext.byteLength;\n let receipt;\n try {\n receipt = await keys.createKey(plan.keyPath, { networkId: plan.encryptionNetwork });\n } catch (error) {\n if (isUnauthorized(error)) {\n const status = (error as { readonly status?: unknown }).status;\n throw new AddressedContentSourceError(\n \"key-not-authorized\",\n `the owner session does not hold tinycloud.encryption/key.create on ${plan.keyResource} (the node answers \"Unauthorized Action: ${plan.keyResource} / tinycloud.encryption/key.create\"); hold it either at sign-in (put plan.sessionPermissions in the manifest: key.create on ${plan.encryptionNetwork}/share/) or per share (requestPermissions(plan.requiredPermissions)) before creating the key` +\n (status === 403 ? \"; if the owner signs in through OpenKey, the request must come from a first-party TinyCloud origin\" : \"\"),\n );\n }\n throw error;\n }\n if (receipt.networkId !== plan.encryptionNetwork || receipt.keyPath !== plan.keyPath || (receipt.state !== undefined && receipt.state !== \"active\")) {\n throw new AddressedContentSourceError(\"key-receipt-mismatch\", \"the created key does not match this share\");\n }\n const envelope = await keys.encrypt(plan.keyPath, input.plaintext, plan.encryptOptions(input.metadata === undefined ? undefined : { metadata: input.metadata }));\n assertEnvelope(plan, envelope);\n if (receipt.keyVersion !== undefined && envelope.keyVersion !== receipt.keyVersion) {\n throw new AddressedContentSourceError(\"key-receipt-mismatch\", \"the envelope key version does not match the created key\");\n }\n const storedBytes = pathBoundStoredBytes(envelope);\n return { envelope, storedBytes, byteLength };\n}\n\n/**\n * The publisher's gate: a content source must be bound to its own share's key, with a registered wrapped-key digest,\n * before anything is signed, registered or written. There is no network-scope fallback.\n */\nexport function assertPathBoundContentSource(source: Partial<UnifiedContentSource> | undefined, shareId: string): asserts source is PathBoundContentSource {\n if (source === undefined || source === null || typeof source !== \"object\") {\n throw new AddressedContentSourceError(\"key-path-required\", \"addressed content source is missing\");\n }\n if (source.encryptionKeyPath === undefined) {\n throw new AddressedContentSourceError(\"key-path-required\", \"addressed content source must name its key (encryptionKeyPath: share/<shareId>); a network-wide source is not accepted\");\n }\n if (source.encryptionKeyPath !== pathBoundKeyPath(shareId)) {\n throw new AddressedContentSourceError(\"key-path-mismatch\", \"addressed content source key path must be share/<shareId> of this share\");\n }\n if (typeof source.encryptedSymmetricKeyDigestHex !== \"string\" || !HEX_DIGEST.test(source.encryptedSymmetricKeyDigestHex)) {\n throw new AddressedContentSourceError(\"digest-invalid\", \"addressed content source needs encryptedSymmetricKeyDigestHex: 64 lowercase hex characters\");\n }\n assertEncryptionNetwork(source.encryptionNetwork);\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","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 { 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","import type { ShareAuthorizationRequired, ShareAuthorizationMethod } from \"./authorization.js\";\nimport { authorizationMethodForTarget } from \"./authorization.js\";\nimport { DEFAULT_SHARE_LIFETIME_MS, SharePublishError, SHARE_CONTENT_LIMIT, type PublishedShare, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalMailbox, isCanonicalEmailDomain } from \"@tinycloud/share-envelope\";\nimport { canonicalShareFilename, hasUnsafeFilenameCodePoint } from \"./filename-policy.js\";\n\nexport type ShareTarget = SharePublishTarget;\n\nexport interface TargetPublishInput {\n readonly source: Uint8Array;\n readonly filename: string;\n readonly mediaType?: 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: ShareTarget;\n readonly expiresAt: Date;\n readonly expiryWasExplicit?: boolean;\n readonly origin: string;\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly notify?: boolean;\n readonly credentialDescriptor?: unknown;\n readonly issuerDid?: string;\n readonly issuerKid?: string;\n /** Publish as the next write-once version of this artifact and pin the share to it (TC-1428). */\n readonly artifact?: { readonly id: string; readonly note?: string };\n}\n\nexport type TargetPublishOutcome = PublishedShare | ShareAuthorizationRequired;\n\nexport interface TargetPublishAdapter {\n publish(input: TargetPublishInput): Promise<TargetPublishOutcome>;\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 // The credential issuer accepts only the canonical (lowercase) mailbox and\n // domain, and receivers recompute the commitment from this matcher, so the\n // target is canonicalized here rather than kept as typed.\n if (target.kind === \"email\") {\n const mailbox = canonicalMailbox(target.address);\n if (mailbox === undefined) throw new TypeError(\"recipient email is invalid\");\n return { kind: target.kind, address: mailbox.email };\n }\n const domain = target.domain.toLowerCase();\n if (!isCanonicalEmailDomain(domain)) throw new TypeError(\"recipient email domain is invalid\");\n return { kind: target.kind, domain };\n}\n\nexport function targetAuthorizationMethod(target: ShareTarget): ShareAuthorizationMethod | undefined {\n return authorizationMethodForTarget(target);\n}\n\n/** The share viewer's filename rule, reported as a fixed `invalid-argument` reason. */\nfunction publishFilename(value: string): string {\n try {\n return canonicalShareFilename(value);\n } catch {\n throw new SharePublishError(\"invalid-argument\", hasUnsafeFilenameCodePoint(value)\n ? \"filename contains control or invisible characters\"\n : \"filename must be one safe path segment\");\n }\n}\n\n/** Route every share through the authenticated TinyCloud 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 readonly credentialDescriptor?: unknown;\n readonly issuerDid?: string;\n readonly issuerKid?: string;\n}): Promise<TargetPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n const filename = publishFilename(input.filename);\n const files = input.files?.map((file) => ({ ...file, filename: publishFilename(file.filename) }));\n if (input.targetAdapter === undefined) {\n if (target.kind === \"bearer\") throw new SharePublishError(\"authority-required\", \"native bearer publication requires an authenticated TinyCloud node\");\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(\"share publication source yielded invalid bytes\");\n size += chunk.byteLength;\n if (size > (input.maxBytes ?? SHARE_CONTENT_LIMIT)) throw new SharePublishError(\"max-bytes-exceeded\", \"share 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 if (source.byteLength === 0) throw new SharePublishError(\"invalid-argument\", \"share content is empty\");\n if (target.kind === \"bearer\" && input.allowBinary !== true) {\n try { new TextDecoder(\"utf-8\", { fatal: true }).decode(source); }\n catch { throw new SharePublishError(\"invalid-argument\", \"Markdown input must be valid UTF-8\"); }\n }\n const publishFiles = files === undefined || files.length === 0\n ? [{ bytes: source }]\n : files;\n const limit = input.maxBytes ?? SHARE_CONTENT_LIMIT;\n let totalBytes = 0;\n for (const file of publishFiles) {\n totalBytes += file.bytes.byteLength;\n if (!Number.isSafeInteger(totalBytes) || totalBytes > limit) {\n throw new SharePublishError(\"max-bytes-exceeded\", \"share publication exceeds the combined byte limit\");\n }\n }\n const nowMs = input.now?.() ?? Date.now();\n const expiresAt = input.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 return input.targetAdapter.publish({\n source,\n filename,\n ...(files === undefined ? {} : { 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,\n expiryWasExplicit: input.expiryWasExplicit ?? input.expiresAt !== undefined,\n origin: input.origin,\n ...(input.notify === undefined ? {} : { notify: input.notify }),\n ...(input.credentialDescriptor === undefined ? {} : { credentialDescriptor: input.credentialDescriptor }),\n ...(input.issuerDid === undefined ? {} : { issuerDid: input.issuerDid }),\n ...(input.issuerKid === undefined ? {} : { issuerKid: input.issuerKid }),\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 { 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","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","/* 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 { DelegatedShareKey, OwnerShareAction, OwnerShareMatcher, OwnerSharePolicyRegistrationReceipt, SignedDelegation } from \"./owner-policy\";\nimport { restoreDelegatedShareKey } from \"./owner-policy\";\nimport type { PublishedShare, PublishedShareDeliveryMaterial } 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 /** Policy/v3 delivery material. The containing history record must remain encrypted at rest. */\n readonly deliveryMaterial?: PublishedShareDeliveryMaterial;\n /** Canonical mailboxes whose invitation delivery was confirmed; history is encrypted at rest. */\n readonly deliveredRecipients?: readonly string[];\n /**\n * `migrated`: imported once from a CLI's local history by the OWNER's\n * session (slice 5), at an owner-layout key `records/<shareId>`. Such a\n * record is exempt from the ±1-day `registeredAt` window and nothing else:\n * its chain is verified like an agent record's, it never ranks as a web\n * row, and it cannot override a revocation. A record claiming `migrated`\n * inside an agent subtree is rejected.\n */\n readonly provenance?: \"migrated\";\n /**\n * The signed chain behind every CID this record claims (TC-1432 C1), as\n * exact bytes. Agent records carry it so the owner's browser can verify\n * the chain without a node lookup. Policy/v3 records prove through\n * `deliveryMaterial.envelope` plus `session`.\n */\n readonly proofs?: SenderShareRecordProofs;\n}\n\nexport interface SenderShareRecordProofs {\n /** Owner→session SIWE CACAO (base64url DAG-CBOR) of the issuing session; absent when it is gone. */\n readonly session?: string;\n /** Native bearer link delegation (compact UCAN); its CID is `enforcementDelegationCid`. */\n readonly link?: string;\n /** Policy/v2 owner-policy chain: policy bytes (base64url), owner→share-key SIWE CACAO (base64url), enforcement delegation and node registration receipt. */\n readonly ownerPolicy?: string;\n readonly ownerDelegation?: string;\n readonly enforcementDelegation?: SignedDelegation;\n readonly registration?: OwnerSharePolicyRegistrationReceipt;\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.deliveryMaterial === undefined ? {} : { deliveryMaterial: result.deliveryMaterial }),\n ...(result.metadata.display.filename === undefined ? {} : { filename: result.metadata.display.filename }),\n };\n}\n\n/**\n * \"direct\" selects the Policy/v3 enforcement root; \"ancestor\" selects its\n * policy-authority sibling. Addressed shares revoke that signed root through\n * the Node Policy/v3 endpoint, which cuts off existing sessions as well as\n * fresh admission and delivery. Bearer shares retain ordinary delegation\n * revocation.\n */\nexport type SenderShareRevocationScope = \"direct\" | \"ancestor\";\n\nexport interface SenderShareRecordStorage {\n put(record: SenderShareRecord): Promise<void>;\n /** Atomically transform the latest record, if present. Implementations that\n * provide this must serialize the read and write with every other writer. */\n update?(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined>;\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 private operation: Promise<void> = Promise.resolve();\n\n private serialize<T>(action: () => Promise<T>): Promise<T> {\n const next = this.operation.then(action, action);\n this.operation = next.then(() => undefined, () => undefined);\n return next;\n }\n\n async put(record: SenderShareRecord): Promise<void> {\n return this.serialize(async () => { this.records.set(record.shareId, record); });\n }\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n return this.serialize(async () => {\n const current = this.records.get(shareId);\n if (current === undefined) return undefined;\n const updated = await change(current);\n this.records.set(shareId, updated);\n return updated;\n });\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 return this.serialize(async () => { 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 if (this.records.update !== undefined) {\n const updated = await this.records.update(shareId, (record) => ({ ...record, revokedAt }));\n if (updated === undefined) throw new Error(`Unknown share: ${shareId}`);\n return updated;\n }\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, canonicalMailbox, 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 readonly reason?: \"delivery-window-expired\";\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(\n message = \"share delivery did not complete\",\n readonly reason?: \"delivery-window-expired\",\n ) {\n super(message);\n this.name = \"ShareNotifyError\";\n }\n}\n\n/**\n * Match a delivery address against the recipient constraint recorded when the\n * share was created. Both sides compare in canonical mailbox form, which is\n * the only form the credential issuer accepts.\n */\nexport function recipientMatchesShareRecord(record: SenderShareRecord, recipient: string): boolean {\n const matcher = record.recipientMatcher;\n const mailbox = canonicalMailbox(recipient);\n if (mailbox === undefined) return false;\n if (matcher.kind === \"exactEmail\") return canonicalMailbox(matcher.value)?.email === mailbox.email;\n if (matcher.kind === \"emailDomain\") return mailbox.domain === matcher.value;\n return false;\n}\n/** The sender can authorize a fresh invitation only until this persisted deadline. */\nexport function shareDeliveryWindowExpiresAt(record: SenderShareRecord): number {\n const expiresAt = Math.min(Date.parse(record.expiresAt), Date.parse(record.registeredAt) + 5 * 60 * 1000);\n if (!Number.isFinite(expiresAt)) throw new ShareNotifyError(\"share delivery history has invalid timestamps\");\n return expiresAt;\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 /** Check the persisted delivery window locally before calling the adapter. */\n readonly checkDeliveryWindow?: boolean;\n}): Promise<ShareNotifyResult> {\n const mailbox = canonicalMailbox(input.recipient);\n if (!input.shareId || mailbox === undefined) throw new ShareNotifyError(\"recipient is invalid\");\n // Deliver to, match and key on the canonical mailbox: a typed `Foo@x.com`\n // is the same recipient as the stored `foo@x.com`.\n const recipient = mailbox.email;\n if (input.record !== undefined && !recipientMatchesShareRecord(input.record, recipient)) {\n throw new ShareNotifyError(\"recipient does not match the stored share target\");\n }\n const idempotencyKey = input.idempotencyKey ?? await defaultIdempotencyKey(input.shareId, recipient);\n const attemptsLimit = input.maxAttempts ?? 3;\n if (!Number.isSafeInteger(attemptsLimit) || attemptsLimit < 1 || attemptsLimit > 8) throw new ShareNotifyError(\"maxAttempts is invalid\");\n if (input.signal?.aborted) throw new ShareNotifyError(\"share delivery was cancelled\");\n if (input.checkDeliveryWindow && input.record !== undefined && shareDeliveryWindowExpiresAt(input.record) <= Date.now()) {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts: 1,\n retryable: false, reason: \"delivery-window-expired\",\n };\n }\n let attempts = 0;\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, idempotencyKey, ...(input.record === undefined ? {} : { record: input.record }), ...(input.signal === undefined ? {} : { signal: input.signal }) });\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: state === \"delivered\" && input.record?.deliveredRecipients?.includes(recipient) ? \"already-delivered\" : state,\n idempotencyKey, attempts,\n };\n } catch (error) {\n if (error instanceof ShareNotifyError && error.reason === \"delivery-window-expired\") {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts,\n retryable: false, reason: \"delivery-window-expired\",\n };\n }\n // A refused authorization (the node's HTTP 400 and 422 are one refusal, carrying this code) is final, like a 401 or 403.\n const refused = error !== null && typeof error === \"object\" && \"code\" in error && error.code === \"delivery-authorization-invalid\";\n if (refused || (error !== null && typeof error === \"object\" && \"status\" in error && (error.status === 401 || error.status === 403))) {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts, retryable: false,\n };\n }\n }\n }\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","\n/** The signed, app-neutral receipt accepted by OpenCredentials' invitation endpoint. */\nexport interface CredentialInvitationReceipt {\n readonly request: {\n readonly returnLink: string;\n readonly [field: string]: unknown;\n };\n readonly admission: Record<string, unknown>;\n readonly proof: Record<string, unknown>;\n}\n\nexport interface CredentialInvitationResult {\n readonly status: \"accepted\";\n}\n\nexport type CredentialInvitationErrorCode =\n | \"invalid-origin\"\n | \"invalid-receipt\"\n | \"rejected\"\n | \"invalid-response\"\n | \"transport\";\n\n/** A detail-free boundary error; it never embeds signed invitation material. */\nexport class CredentialInvitationError extends Error {\n constructor(\n readonly code: CredentialInvitationErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"CredentialInvitationError\";\n }\n}\n\nfunction canonicalOrigin(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new CredentialInvitationError(\n \"invalid-origin\",\n \"credential invitation origin is invalid\",\n );\n }\n if (\n url.origin !== value ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.search !== \"\" ||\n url.hash !== \"\" ||\n url.protocol !== \"https:\"\n )\n throw new CredentialInvitationError(\n \"invalid-origin\",\n \"credential invitation origin is invalid\",\n );\n return url.origin;\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The longest link OpenCredentials accepts as a return link. */\nconst MAX_INVITATION_LINK_BYTES = 512;\n\nasync function validateReceipt(\n receipt: CredentialInvitationReceipt,\n shareUrl: string,\n): Promise<void> {\n if (\n !object(receipt) ||\n !object(receipt.request) ||\n !object(receipt.admission) ||\n !object(receipt.proof)\n ) {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation receipt is invalid\",\n );\n }\n if (receipt.request.returnLink !== shareUrl) {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation is not bound to the share link\",\n );\n }\n const links = await import(\"@tinycloud/share-envelope/links\");\n try {\n const origin = new URL(shareUrl).origin;\n const parsed = links.parseLink(shareUrl, { trustedOrigins: [origin] });\n // The email carries the short link only: a full link is too large to mail. The id is lowercase and the\n // fragment exactly `#v=4&k=&c=`, within the invitation size limit.\n if (\n parsed.form !== \"short\" ||\n parsed.pathType !== \"share\" ||\n shareUrl.length > MAX_INVITATION_LINK_BYTES ||\n shareUrl !== links.buildShortLink({ origin, type: \"share\", id: parsed.id, key: parsed.key, bodyCid: parsed.c })\n ) {\n throw new Error(\"not a short share link\");\n }\n } catch {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation share link must be a short share link\",\n );\n }\n}\n\n/**\n * Submit a Node-authorized credential invitation without involving the Share\n * application. Other TinyCloud applications can use this same boundary.\n */\nexport async function deliverCredentialInvitation(input: {\n readonly credentialsOrigin: string;\n readonly receipt: CredentialInvitationReceipt;\n readonly shareUrl: string;\n readonly fetchFn?: typeof globalThis.fetch;\n readonly signal?: AbortSignal;\n}): Promise<CredentialInvitationResult> {\n const credentialsOrigin = canonicalOrigin(input.credentialsOrigin);\n await validateReceipt(input.receipt, input.shareUrl);\n const fetchFn = input.fetchFn ?? globalThis.fetch;\n let response: Response;\n try {\n response = await fetchFn(`${credentialsOrigin}/v1/credential-invitations`, {\n method: \"POST\",\n credentials: \"omit\",\n redirect: \"error\",\n referrerPolicy: \"no-referrer\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(input.receipt),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n } catch {\n throw new CredentialInvitationError(\n \"transport\",\n \"credential invitation delivery is unavailable\",\n );\n }\n if (response.status !== 202) {\n throw new CredentialInvitationError(\n \"rejected\",\n \"credential invitation delivery was not accepted\",\n );\n }\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n throw new CredentialInvitationError(\n \"invalid-response\",\n \"credential invitation response is invalid\",\n );\n }\n if (\n !object(body) ||\n Object.keys(body).length !== 1 ||\n body.status !== \"accepted\"\n ) {\n throw new CredentialInvitationError(\n \"invalid-response\",\n \"credential invitation response is invalid\",\n );\n }\n return { status: \"accepted\" };\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"./history.js\";\n\nexport type ShareRevocationResult =\n | { readonly state: \"revoked\"; readonly target: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\"; readonly delegationCid: string; readonly revokedAt: string }\n | { readonly state: \"unsupported\"; readonly target: string; readonly reason: string; readonly code: \"unsupported-target\" };\n\nexport interface SharePolicyRootRevocation {\n readonly rootCid: string;\n readonly targetRole: \"policy-authority\" | \"policy-enforcement\";\n readonly ownerDid: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n}\n\nexport interface ShareRevocationAdapter {\n /**\n * Native bearer authority uses the node's ordinary revocation endpoint. The\n * record carries the stored link, whose delegation names its issuer.\n */\n revokeDelegation?(input: { readonly delegationCid: string; readonly scope: \"direct\" | \"ancestor\"; readonly record: SenderShareRecord }): Promise<void>;\n /**\n * Addressed Policy/v3 authority uses the Node's signed root-revocation\n * endpoint. The Node checks that root for active sessions, new admission,\n * and delivery; this is not a separate share authority plane.\n */\n revokePolicyRoot?(input: SharePolicyRootRevocation): 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\nfunction policyNodeAudience(record: SenderShareRecord): string {\n const envelope = record.deliveryMaterial?.envelope;\n if (typeof envelope !== \"object\" || envelope === null || Array.isArray(envelope)) return record.target.nodeAudience;\n const binding = (envelope as Record<string, unknown>).attestedEnforcerBinding;\n if (typeof binding !== \"object\" || binding === null || Array.isArray(binding)) return record.target.nodeAudience;\n const nodeAudience = (binding as Record<string, unknown>).nodeAudience;\n return typeof nodeAudience === \"string\" ? nodeAudience : record.target.nodeAudience;\n}\n\n/** Revoke the native bearer delegation or the selected signed Policy/v3 root. */\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 (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 if (target === \"bearer\") {\n if (input.adapter.revokeDelegation === undefined) return { state: \"unsupported\", target, reason: \"native delegation revocation authority is required\", code: \"unsupported-target\" };\n await input.adapter.revokeDelegation({ delegationCid, scope, record: input.record });\n } else {\n if (input.record.ownerDid === undefined) return { state: \"unsupported\", target, reason: \"share has no Policy/v3 owner receipt\", code: \"unsupported-target\" };\n if (input.adapter.revokePolicyRoot === undefined) return { state: \"unsupported\", target, reason: \"Policy/v3 root revocation authority is required\", code: \"unsupported-target\" };\n await input.adapter.revokePolicyRoot({\n rootCid: delegationCid,\n targetRole: scope === \"ancestor\" ? \"policy-authority\" : \"policy-enforcement\",\n ownerDid: input.record.ownerDid,\n nodeOrigin: input.record.target.origin,\n nodeAudience: policyNodeAudience(input.record),\n });\n }\n // Revoking again is idempotent at the node; the first revocation time stands.\n let revokedAt = input.record.revokedAt ?? (input.now?.() ?? new Date()).toISOString();\n if (input.records?.update !== undefined) {\n const updated = await input.records.update(input.record.shareId, (record) => ({ ...record, revokedAt: record.revokedAt ?? revokedAt }));\n revokedAt = updated?.revokedAt ?? revokedAt;\n } else if (input.records !== undefined) {\n // Without an atomic update, read the latest record first. A concurrent\n // writer between this read and put can still win; stores that need that\n // guarantee implement `update`.\n const latest = await input.records.get(input.record.shareId);\n revokedAt = latest?.revokedAt ?? revokedAt;\n await input.records.put({ ...(latest ?? input.record), revokedAt });\n }\n return { state: \"revoked\", target: target as \"bearer\" | \"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 { 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 { artifactBindingView, assertArtifactBinding } from \"./artifact-pin.js\";\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 /** Exact verified issuer envelope used by accountless v4 admission. */\n readonly credentialEnvelope?: Record<string, unknown>;\n /** Exact credential requirement committed by the signed policy. */\n readonly requirement?: 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 /** Required only by the retired v2 response-proof adapter. Policy/v3 trusts its signed attested binding. */\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 readonly signal?: AbortSignal;\n readonly onStage?: (stage: \"policy-admission\" | \"delegation-import\" | \"invocation\" | \"decryption\") => void;\n /**\n * A previously admitted and imported policy session (S0), optionally with\n * the descendants that re-delegate it, in order, down to this holder.\n */\n readonly policyAuthorization?: {\n readonly authorization: string;\n readonly cid: string;\n readonly descendants?: readonly SharePolicyDelegationLink[];\n };\n}\n\n/** One signed link of a policy delegation chain, as imported into the Node. */\nexport interface SharePolicyDelegationLink {\n readonly authorization: string;\n readonly cid: string;\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\nfunction toBase64(bytes: Uint8Array): string {\n return toBase64Url(bytes).replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(bytes.length / 3) * 4, \"=\");\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 try {\n // The shared strict decoder also rejects nonzero trailing pad bits.\n return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new Error(`${label} is invalid`);\n }\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 policyAttenuationForV3(envelope: ShareEnvelopeV3): Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>> {\n const policy = object(envelope.policy, \"v3 policy\");\n if (!Array.isArray(policy.capabilityCeiling)) throw new Error(\"v3 policy capability ceiling is invalid\");\n const attenuation: Record<string, Record<string, readonly unknown[]>> = {};\n for (const raw of policy.capabilityCeiling) {\n const capability = object(raw, \"v3 policy capability\");\n if (typeof capability.resource !== \"string\" || attenuation[capability.resource] !== undefined) throw new Error(\"v3 policy capability is invalid\");\n if (capability.kind === \"encryption\") {\n if (capability.action !== \"tinycloud.encryption/decrypt\") throw new Error(\"v3 policy capability is invalid\");\n attenuation[capability.resource] = { [capability.action]: [{}] };\n continue;\n }\n if (capability.kind !== \"kv\"\n || (capability.selector !== \"exact\" && capability.selector !== \"prefix\")\n || !Array.isArray(capability.actions)\n || capability.actions.length === 0\n || capability.actions.some((action) => typeof action !== \"string\")) throw new Error(\"v3 policy capability is invalid\");\n attenuation[capability.resource] = Object.fromEntries(capability.actions.map((action) => [action, [{\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n }]]));\n }\n return attenuation;\n}\n\nconst POLICY_SESSION_FACT_KEYS = [\n \"profile\", \"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\",\n \"policyDelegationCid\", \"enforcementDelegationCid\", \"contentSourceDigestHex\",\n \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"enforcerDid\",\n \"nodeAudience\", \"recipientDid\", \"challengeId\", \"claimDigestHex\", \"claimJti\",\n \"vpDigestHex\", \"credentialEvidenceDigestHex\", \"decisionContextDigestHex\",\n \"issuanceAuditDigestHex\", \"remainingRedelegationDepth\",\n] as const;\nconst POLICY_SESSION_V4_AUDIT_FACT_KEYS = [\"credentialIdAuditDigestHex\", \"presentationJtiAuditDigestHex\"] as const;\nconst POLICY_SESSION_DIGEST_FACT_KEYS = [\n \"policyDigestHex\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\",\n \"nativeProjectionHashHex\", \"claimDigestHex\", \"vpDigestHex\",\n \"credentialEvidenceDigestHex\", \"decisionContextDigestHex\", \"issuanceAuditDigestHex\",\n] as const;\nconst LOWER_SHA256_HEX = /^[0-9a-f]{64}$/;\n\nfunction verifyV3PolicyAuthorization(input: {\n readonly authorization: string;\n readonly cid: string;\n readonly envelope: ShareEnvelopeV3;\n readonly holderDid: string;\n}): ReturnType<typeof verifyCompactUcanAuthorization> {\n const compact = verifyCompactUcanAuthorization(input.authorization, input.cid);\n const fact = compact.payload.fct[0];\n const factKeys = Object.keys(fact);\n const legacyShape = factKeys.length === POLICY_SESSION_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact);\n const v4Shape = factKeys.length === POLICY_SESSION_FACT_KEYS.length + POLICY_SESSION_V4_AUDIT_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never) || POLICY_SESSION_V4_AUDIT_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact)\n && POLICY_SESSION_V4_AUDIT_FACT_KEYS.every((key) => key in fact);\n const binding = object(input.envelope.attestedEnforcerBinding, \"v3 attested enforcer binding\");\n const policy = object(input.envelope.policy, \"v3 policy\");\n const now = Math.floor(Date.now() / 1000);\n if ((!legacyShape && !v4Shape)\n || POLICY_SESSION_DIGEST_FACT_KEYS.some((key) => !LOWER_SHA256_HEX.test(fact[key] as string))\n || v4Shape && (!LOWER_SHA256_HEX.test(fact.credentialIdAuditDigestHex as string) || !LOWER_SHA256_HEX.test(fact.presentationJtiAuditDigestHex as string))\n || compact.payload.aud !== input.holderDid\n || compact.payload.iss.split(\"#\", 1)[0] !== fact.nodeAudience\n || fact.profile !== \"policy-session-ucan/v1\"\n || fact.ownerDid !== policy.ownerDid\n || fact.policyId !== policy.policyId\n || fact.policyCid !== input.envelope.policyCid\n || fact.contentSourceDigestHex !== input.envelope.contentSourceDigestHex\n || fact.enforcerDid !== binding.enforcerDid\n || fact.nodeAudience !== binding.nodeAudience\n || fact.recipientDid !== input.holderDid\n || fact.policyDelegationCid !== input.envelope.policyRoot.cid\n || fact.enforcementDelegationCid !== input.envelope.enforcementRoot.cid\n || typeof fact.remainingRedelegationDepth !== \"number\"\n || !Number.isInteger(fact.remainingRedelegationDepth)\n || fact.remainingRedelegationDepth < 0\n || fact.remainingRedelegationDepth > 8\n || compact.payload.prf.length !== 2\n || compact.payload.prf[0] !== input.envelope.policyRoot.cid\n || compact.payload.prf[1] !== input.envelope.enforcementRoot.cid\n || compact.payload.nbf > now\n || compact.payload.exp <= now\n // A session may last as long as the share, never longer (fails closed\n // when the expiry does not parse).\n || !(compact.payload.exp * 1000 <= Date.parse(input.envelope.expiry))\n || canonicalize(compact.payload.att) !== canonicalize(policyAttenuationForV3(input.envelope))) throw new Error(\"v3 policy delegation signed binding mismatch\");\n return compact;\n}\n\n/**\n * Follow re-delegations of a verified session down to this holder. Each link\n * must be signed by its parent's audience, prove exactly its parent, sit\n * strictly inside the parent's window, keep the parent's facts with one less\n * redelegation, and pass the parent's capabilities on unchanged. The Node\n * re-checks the whole chain on every request.\n */\nfunction verifyV3PolicyDescendants(\n session: ReturnType<typeof verifyCompactUcanAuthorization>,\n descendants: readonly SharePolicyDelegationLink[],\n holderDid: string,\n): ReturnType<typeof verifyCompactUcanAuthorization> {\n let parent = session;\n for (const link of descendants) {\n const child = verifyCompactUcanAuthorization(link.authorization, link.cid);\n const { remainingRedelegationDepth: parentDepth, ...parentFacts } = parent.payload.fct[0];\n const { remainingRedelegationDepth: depth, ...facts } = child.payload.fct[0];\n if (child.payload.iss.split(\"#\", 1)[0] !== parent.payload.aud\n || child.payload.prf.length !== 1\n || child.payload.prf[0] !== parent.cid\n || child.payload.nbf <= parent.payload.nbf\n || child.payload.exp >= parent.payload.exp\n || typeof parentDepth !== \"number\"\n || parentDepth <= 0\n || depth !== parentDepth - 1\n || canonicalize(facts) !== canonicalize(parentFacts)\n || canonicalize(child.payload.att) !== canonicalize(parent.payload.att)) throw new Error(\"v3 policy descendant does not extend its parent\");\n parent = child;\n }\n const now = Math.floor(Date.now() / 1000);\n if (parent.payload.aud !== holderDid) throw new Error(\"v3 policy delegation chain does not end at this holder\");\n if (parent.payload.nbf > now || parent.payload.exp <= now) throw new Error(\"v3 policy delegation chain is not currently valid\");\n return parent;\n}\n\n/** Whole-second RFC 3339, or undefined when the share ends within a minute. */\nfunction requestedSessionExpiry(expiry: string): string | undefined {\n const seconds = Math.floor(Date.parse(expiry) / 1000);\n if (!Number.isFinite(seconds) || seconds <= Math.floor(Date.now() / 1000) + 60) return undefined;\n return new Date(seconds * 1000).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nfunction hex(value: Uint8Array): string {\n return [...value].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * The signed content source commits to the literal owner-KV representation,\n * not an equivalent parsed JSON value. Compare all digest bytes before any\n * envelope parsing or key-unwrapping work.\n */\nfunction matchesInitialCiphertextDigest(bytes: Uint8Array, expected: unknown): boolean {\n if (typeof expected !== \"string\" || !LOWER_SHA256_HEX.test(expected)) return false;\n const actual = sha256(bytes);\n let mismatch = 0;\n for (let index = 0; index < actual.length; index += 1) {\n mismatch |= actual[index]! ^ Number.parseInt(expected.slice(index * 2, index * 2 + 2), 16);\n }\n return mismatch === 0;\n}\n\nfunction canonicalHashHex(value: string): string {\n return hex(sha256(new TextEncoder().encode(canonicalize(value))));\n}\n\n/**\n * The wrapped-key digest a V3 source registers. A path-bound source (`encryptionKeyPath`) registers the digest of the\n * raw wrapped-key bytes; a legacy no-path source registers the canonical hash of the base64 string, as the node accepts\n * for the no-path case. The key is validated as strict base64 either way.\n */\nfunction registeredWrappedKeyDigest(encryptedSymmetricKey: string, pathBound: boolean): string {\n const rawDigest = hex(sha256(fromBase64(encryptedSymmetricKey, \"v3 encrypted symmetric key\")));\n return pathBound ? rawDigest : canonicalHashHex(encryptedSymmetricKey);\n}\n\nasync function aesGcmDecrypt(key: Uint8Array, blob: Uint8Array, aad?: 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 // These owned bytes are valid WebCrypto inputs; its buffer type is narrower.\n return new Uint8Array(await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: blob.slice(0, 12) as unknown as BufferSource, ...(aad && { additionalData: aad as unknown as BufferSource }) }, cryptoKey, blob.slice(12) as unknown as BufferSource));\n}\n\nasync function aesGcmEncrypt(key: Uint8Array, plaintext: Uint8Array, aad?: 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, ...(aad && { additionalData: aad 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 | 2;\n readonly networkId: string;\n readonly keyPath?: 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 aad?: 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\", \"keyPath\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"aad\", \"metadata\"];\n const source = expected.contentSource;\n if (Object.keys(record).some((key) => !allowed.includes(key))\n || record.v !== (source.encryptionKeyPath === undefined ? 1 : 2) || record.networkId !== source.encryptionNetwork\n || record.networkId !== expected.encryptionNetwork\n || record.keyPath !== source.encryptionKeyPath\n || record.keyPath !== undefined && (record.keyPath !== `share/${expected.shareId}`)\n || record.alg !== \"x25519-aes256gcm/v1\" || record.keyVersion !== source.keyVersion\n || typeof record.encryptedSymmetricKey !== \"string\" || typeof record.encryptedSymmetricKeyHash !== \"string\"\n || registeredWrappedKeyDigest(record.encryptedSymmetricKey, source.encryptionKeyPath !== undefined) !== source.encryptedSymmetricKeyDigestHex\n || record.encryptedSymmetricKeyHash !== canonicalHashHex(record.encryptedSymmetricKey)\n || typeof record.ciphertext !== \"string\"\n || record.aad !== undefined && typeof record.aad !== \"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}\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\n/** A refusal must retain its HTTP status even when reading its body fails. */\nasync function recipientHttpError(response: Response, context: string): Promise<Error & { status: number }> {\n const body = (await response.text().catch(() => \"\")).trim().slice(0, 512);\n return Object.assign(new Error(`${context} (${response.status})${body ? `: ${body}` : \"\"}`), { status: response.status });\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 v3NodeAudience: 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 if (options.policyAuthorization !== undefined) {\n if (options.envelope.version !== 3) throw new Error(\"policy delegation fast path requires a v3 envelope\");\n const { authorization, cid, descendants = [] } = options.policyAuthorization;\n // S0 names the recipient it was minted for: this holder, or the first\n // delegator when the session was re-delegated.\n const sessionHolder = descendants.length === 0\n ? options.holderDid\n : verifyCompactUcanAuthorization(authorization, cid).payload.aud;\n const compact = verifyV3PolicyAuthorization({ authorization, cid, envelope: options.envelope, holderDid: sessionHolder });\n const leaf = verifyV3PolicyDescendants(compact, descendants, options.holderDid);\n const nodeAudience = compact.payload.fct[0].nodeAudience as string;\n this.v3Authorization = leaf.authorization;\n this.v3NodeAudience = nodeAudience;\n this.nativeSigner = options.sign;\n this.session = {\n sessionId: leaf.cid,\n expiresAt: new Date(leaf.payload.exp * 1000).toISOString(),\n actions: options.envelope.actions,\n resource: options.envelope.resource,\n };\n }\n }\n\n async beginChallenge(envelope: ShareEnvelopeV2): Promise<SharePolicyChallenge> {\n void envelope;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 envelope\");\n }\n\n private async establish(envelope: ShareEnvelopeV2): Promise<SharePolicySession> {\n void envelope;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 envelope\");\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 attestedEnforcer = object(envelope.attestedEnforcerBinding, \"v3 attested enforcer binding\");\n if (attestedEnforcer.enforcerDid !== envelope.target.nodeAudience || typeof attestedEnforcer.nodeAudience !== \"string\") throw new Error(\"v3 attested enforcer binding mismatch\");\n try { ed25519PublicKeyFromDidKey(attestedEnforcer.nodeAudience); } catch { throw new Error(\"v3 attested Node audience is invalid\"); }\n const challengeResponse = await this.fetchFn(new URL(\"/policy/v3/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 ...(this.options.signal === undefined ? {} : { signal: this.options.signal }),\n });\n if (!challengeResponse.ok) throw await recipientHttpError(challengeResponse, \"v3 policy challenge rejected\");\n const challenge = object(await challengeResponse.json(), \"v3 policy challenge\");\n if (\n typeof challenge.challengeId !== \"string\" ||\n typeof challenge.nonce !== \"string\" ||\n challenge.policyCid !== envelope.policyCid ||\n challenge.recipientDid !== this.options.holderDid ||\n challenge.nodeAudience !== attestedEnforcer.nodeAudience ||\n (challenge.enforcerDid !== undefined && challenge.enforcerDid !== attestedEnforcer.enforcerDid) ||\n typeof challenge.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(challenge.expiresAt)) ||\n Date.parse(challenge.expiresAt) <= Date.now()\n ) 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.presentation === undefined) throw new Error(\"v3 ceremony requires a recipient signer and presentation\");\n const accountless = material.presentation.schema === \"xyz.tinycloud.policy/presentation/v4\";\n if (accountless ? material.credentialEnvelope === undefined || material.requirement === undefined : material.claim === undefined) {\n throw new Error(accountless ? \"v4 ceremony requires a verified credential and requirement\" : \"v3 ceremony requires a claim\");\n }\n this.options.onStage?.(\"policy-admission\");\n const mintBody = accountless\n ? { policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, requirement: material.requirement, credential: material.credentialEnvelope, presentation: material.presentation }\n : { policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: material.claim, presentation: material.presentation };\n const mint = (body: Readonly<Record<string, unknown>>) => this.fetchFn(new URL(\"/policy/v3/delegations\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n ...(this.options.signal === undefined ? {} : { signal: this.options.signal }),\n });\n // Ask for a session as long as the share. Nodes before 1.17.3 reject the\n // unknown field with 422 before spending the challenge.\n const requestedExpiresAt = requestedSessionExpiry(envelope.expiry);\n let delegationResponse = await mint(requestedExpiresAt === undefined ? mintBody : { ...mintBody, requestedExpiresAt });\n if (requestedExpiresAt !== undefined && delegationResponse.status === 422) delegationResponse = await mint(mintBody);\n if (!delegationResponse.ok) throw await recipientHttpError(delegationResponse, \"v3 policy delegation rejected\");\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 = verifyV3PolicyAuthorization({ authorization: delegation.authorization, cid: delegation.sessionCid, envelope, holderDid: this.options.holderDid });\n const fact = compact.payload.fct[0];\n this.options.onStage?.(\"delegation-import\");\n const imported = await this.fetchFn(new URL(\"/delegate\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { Authorization: delegation.authorization }, ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\n if (!imported.ok) throw await recipientHttpError(imported, \"ordinary delegation import rejected\");\n this.signer = material.sign;\n this.v3Authorization = delegation.authorization;\n this.v3NodeAudience = fact.nodeAudience as string;\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 /**\n * Decrypt unscoped v1 or path-bound v2 content. The wrapped-key digest is compared by source kind: the raw-byte digest\n * when the source has `encryptionKeyPath`, the canonical hash for a no-path source. The envelope's own canonical hash\n * is checked independently either way.\n */\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 || this.v3NodeAudience === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n // An artifact share must carry a valid pin for its source. The binding makes the pinned file digest equal to\n // `initialCiphertextDigestHex`, which the next line already enforces on the fetched bytes.\n assertArtifactBinding(artifactBindingView(envelope));\n if (!matchesInitialCiphertextDigest(bytes, envelope.contentSource.initialCiphertextDigestHex)) throw new Error(\"v3 owner KV ciphertext digest mismatch\");\n const encrypted = parseV3InlineEncryptedEnvelope(bytes, envelope);\n const ciphertext = fromBase64(encrypted.ciphertext, \"v3 encrypted content\");\n if (ciphertext.length < 28) throw new Error(\"encrypted content is malformed\");\n const aad = encrypted.aad === undefined ? undefined : fromBase64(encrypted.aad, \"v3 encrypted content AAD\");\n const receiverPrivateKey = crypto.getRandomValues(new Uint8Array(32));\n const receiverPublicKey = toBase64(x25519.getPublicKey(receiverPrivateKey));\n const receiverPublicKeyHash = canonicalHashHex(receiverPublicKey);\n const body = { type: \"tinycloud.encryption.decrypt/v1\", targetNode: this.v3NodeAudience, networkId: encrypted.networkId, ...(encrypted.keyPath === undefined ? {} : { keyPath: encrypted.keyPath }), 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 decryptResource = encrypted.keyPath === undefined ? encrypted.networkId : `${encrypted.networkId}/${encrypted.keyPath}`;\n const invocation = await signCompactUcanAuthorization({\n issuerDid: this.options.holderDid,\n audienceDid: this.v3NodeAudience,\n attenuation: { [decryptResource]: { \"tinycloud.encryption/decrypt\": [{}] } },\n facts: [{ type: body.type, targetNode: body.targetNode, networkId: body.networkId, ...(encrypted.keyPath === undefined ? {} : { keyPath: encrypted.keyPath }), 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 this.options.onStage?.(\"decryption\");\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), ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\n if (!response.ok) throw await recipientHttpError(response, \"v3 decrypt invocation rejected\");\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 < 61 || wrapped[32] !== 1) 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(33));\n shared.fill(0);\n if (symmetricKey.length !== 32) throw new Error(\"v3 content key is malformed\");\n const plaintext = await aesGcmDecrypt(symmetricKey, ciphertext, aad);\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 const envelope = this.v3ContentEnvelope;\n const aad = envelope.aad === undefined ? undefined : fromBase64(envelope.aad, \"v3 encrypted content AAD\");\n return new TextEncoder().encode(canonicalize({ ...envelope, ciphertext: toBase64(await aesGcmEncrypt(this.v3ContentKey, bytes, aad)), metadata: { ...(envelope.metadata ?? {}), contentType: mediaType } }));\n }\n\n async resumeWithProof(envelope: ShareEnvelopeV2, resumeToken: string, proof: unknown): Promise<ShareAuthorizedContent> {\n void envelope;\n void resumeToken;\n void proof;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 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 throw new Error(\"v2 Share invocation transport has been removed; use the embedded policy v3 envelope\");\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 || this.v3NodeAudience === 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: this.v3NodeAudience, 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 this.options.onStage?.(\"invocation\");\n return this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers, ...(body === undefined ? {} : { body }), ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\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 (input.trustedNode === undefined || 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","/** Fragment-only adapter for TinyCloud's public SharingService. */\nexport const NATIVE_SHARE_FRAGMENT_PARAMETER = \"tc1\";\n\nexport interface NativeShareResult {\n readonly url: string;\n readonly delegationCid: string;\n readonly expiresAt: Date;\n readonly spaceId: string;\n}\n\nexport interface NativeSharingService {\n generate(params: { readonly path: string; readonly actions: string[]; readonly expiry: Date }): Promise<unknown>;\n receive(token: string, options: { readonly autoSubdelegate: false; readonly useSessionKey: false }): Promise<unknown>;\n decodeLink(token: string): { readonly spaceId: string; readonly path: string };\n}\n\n/** `https://<origin>/viewer` for a canonical HTTPS viewer origin. Also used by share-root bearer links. */\nexport function canonicalViewerUrl(viewerOrigin: string): URL {\n const url = new URL(viewerOrigin);\n if (url.protocol !== \"https:\" || url.origin !== viewerOrigin || url.pathname !== \"/\" || url.search || url.hash) throw new TypeError(\"viewer origin must be a canonical HTTPS origin\");\n url.pathname = \"/viewer\";\n return url;\n}\n\n/** Generate exactly one read-only TinyCloud delegation and put its tc1 token in the fragment. */\nexport async function createNativeShare(sharing: NativeSharingService, input: { readonly path: string; readonly expiresAt: Date; readonly viewerOrigin: string }): Promise<NativeShareResult> {\n if (!input.path || input.path.startsWith(\"/\") || input.path.endsWith(\"/\") || input.path.includes(\"..\") || input.path.includes(\"//\")) throw new TypeError(\"native share path must be one canonical TinyCloud KV key\");\n const generated = await sharing.generate({ path: input.path, actions: [\"tinycloud.kv/get\"], expiry: input.expiresAt }) as { readonly ok?: unknown; readonly data?: { readonly token?: unknown; readonly delegation?: { readonly cid?: unknown }; readonly expiresAt?: unknown }; readonly error?: { readonly code?: unknown; readonly message?: unknown } };\n if (generated.ok !== true) {\n const error = new Error(typeof generated.error?.message === \"string\" ? generated.error.message : \"TinyCloud sharing service rejected delegation generation\");\n if (typeof generated.error?.code === \"string\") Object.assign(error, { code: generated.error.code });\n throw error;\n }\n if (typeof generated.data?.token !== \"string\" || typeof generated.data.delegation?.cid !== \"string\" || !(generated.data.expiresAt instanceof Date)) throw new Error(\"TinyCloud sharing service returned incomplete delegation metadata\");\n const delegation = sharing.decodeLink(generated.data.token);\n if (typeof delegation.spaceId !== \"string\" || delegation.spaceId.length === 0 || typeof delegation.path !== \"string\" || delegation.path.length === 0) throw new Error(\"TinyCloud sharing service returned a non-canonical delegation authority\");\n const url = canonicalViewerUrl(input.viewerOrigin);\n url.hash = `${NATIVE_SHARE_FRAGMENT_PARAMETER}=${encodeURIComponent(generated.data.token)}`;\n return { url: url.toString(), delegationCid: generated.data.delegation.cid, expiresAt: generated.data.expiresAt, spaceId: delegation.spaceId };\n}\n\n/** Extract only a single tc1 fragment. Path/query/mixed legacy forms are refused. */\nexport function parseNativeShareUrl(value: string): string {\n const url = new URL(value);\n if (url.search || url.pathname !== \"/viewer\") throw new TypeError(\"native shares must carry tc1 only in the /viewer URL fragment\");\n const fragment = new URLSearchParams(url.hash.slice(1));\n const token = fragment.get(NATIVE_SHARE_FRAGMENT_PARAMETER);\n // `token` is opaque output from SharingService.generate(). `tc1` names this\n // fragment format; the opaque token may itself begin with `tc1:`.\n if (!token || fragment.size !== 1) throw new TypeError(\"missing native share fragment\");\n return token;\n}\n\n/** Receive through the public SDK without creating another transport protocol. */\nexport async function openNativeShare(sharing: NativeSharingService, link: string): Promise<unknown> {\n return sharing.receive(parseNativeShareUrl(link), { autoSubdelegate: false, useSessionKey: false });\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_VERIFY_OPTS","sha256","nativeProjection","digest","bytes","KEY_LENGTH","cid","KEY_LENGTH","code","code","cid","length","bytes","code","bytes","import_sha256","import_sha256","code","hex","bytes","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","base58btc","baseX","base58flickr","bytes","base58btc","POLICY_CAPABILITY_V1_DOMAIN","CONTENT_SOURCE_V1_DOMAIN","NATIVE_PROJECTION_V1_DOMAIN","textEncoder","hex","bytes","base32Lower","digest","import_sha256","bytes","cid","import_ed25519","import_sha256","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","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","digest","didKeyFromEd25519PublicKey","base58btc","length","value","didKeyFromEd25519PublicKey","digest","record","digest","code","object","targetKind","import_ed25519","import_sha256","object","bytes","digestBytes","object","hex","bytes","cid","object","digestBytes","bytes","hex"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/filename-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","../../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/email.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/artifact-core.ts","../src/artifact-pin.ts","../src/receive.ts","../src/publish.ts","../src/addressed.ts","../src/addressed-publish.ts","../src/addressed-content.ts","../src/authorization.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/base58.ts","../src/targets.ts","../src/cache.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.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/history.ts","../src/notify.ts","../src/credential-invitation.ts","../src/lifecycle.ts","../src/recipient.ts","../src/protocol.ts","../src/policy.ts","../src/native.ts"],"sourcesContent":["export { canonicalShareFilename, hasUnsafeFilenameCodePoint } from \"./filename-policy.js\";\nexport { DEFAULT_MAX_CONTENT_BLOB_BYTES, DEFAULT_MAX_SEALED_BLOB_BYTES, SHARE_RESULT_VERSION, inspectShare, receiveShare, ShareReceiveError, toShareErrorInfo, type ShareReceiveAuthorizationRequired, type ShareErrorCode, type ShareErrorInfo, type ShareFetchOptions, type ShareInspection, type ShareMetadata, type SharePolicyAuthority, type SharePolicyEvidence, type ShareReceiveOutcome, type ShareReceiveResult } from \"./receive.js\";\nexport { DEFAULT_SHARE_LIFETIME_MS, SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, redactPublishedShare, SharePublishError, type PublishedShare, type PublishedShareDeliveryMaterial, type PublishedShareMetadata, type SharePublishErrorCode, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nexport { parseAddressedEnvelope, type ParsedAddressedEnvelope } from \"./addressed.js\";\nexport { ADDRESSED_SHARE_TOO_LARGE_MESSAGE, AddressedShareOverLimitError, addressedCredentialRequirement, addressedShareBodyUpperBound, assertAddressedShareFits, prepareAddressedShare, publishAddressedShare } from \"./addressed-publish.js\";\nexport { AddressedContentSourceError, assertPathBoundContentSource, bindPathBoundContentSource, defaultEncryptionNetworkForOwner, encryptAddressedShareContent, pathBoundKeyPath, pathBoundSessionPermissions, pathBoundStoredBytes, planPathBoundShare, wrappedKeyDigestHex } from \"./addressed-content.js\";\nexport type { AddressedContentSourceErrorCode, AddressedShareKeyClient, EncryptedAddressedContent, PathBoundContentSource, PathBoundEnvelope, PathBoundPermissionEntry, PathBoundSharePlan } from \"./addressed-content.js\";\nexport type { AddressedOwnerRootInput, AddressedOwnerRootReceipt, AddressedPolicyRegistrationInput, AddressedPolicyRegistrationReceipt, AddressedPublishAuthority, AddressedShareBoundInput, AddressedShareRequest, AddressedSharePublishOptions, AddressedShareWrites, PreparedAddressedShare } from \"./addressed-publish.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 { MemorySenderShareRecordStorage, MemorySenderShareKeyStorage, SenderShareStore, historyRecordForPublishedShare } from \"./history.js\";\nexport { MemoryEncryptedShareHistoryStorage, EncryptedSenderShareHistory } from \"./history.js\";\nexport type { SenderShareRecord, SenderShareRecordProofs, 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, shareDeliveryWindowExpiresAt, ShareNotifyError } from \"./notify.js\";\nexport type { ShareNotifyState, ShareNotifyResult, ShareNotifyInput, ShareDeliveryAdapter } from \"./notify.js\";\nexport { deliverCredentialInvitation, CredentialInvitationError } from \"./credential-invitation.js\";\nexport type { CredentialInvitationErrorCode, CredentialInvitationReceipt, CredentialInvitationResult } from \"./credential-invitation.js\";\nexport { listShares, showShare, revokeShare, ShareRevocationIncompleteError } from \"./lifecycle.js\";\nexport type { ShareHistoryView, SharePolicyRootRevocation, ShareRevocationResult, ShareRevocationAdapter, ShareRootRevocationFailure, ShareRootRevocationState } from \"./lifecycle.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, SharePolicyDelegationLink } from \"./recipient.js\";\nexport { SHARE_V2_PROTOCOL, createShareV2HolderBindingArtifact } from \"./protocol.js\";\nexport { publishPolicyShare, claimShare, resumeShareAuthorization } from \"./policy.js\";\nexport type { SharePolicyPublishAdapter } from \"./policy.js\";\nexport { NATIVE_SHARE_FRAGMENT_PARAMETER, createNativeShare, openNativeShare, parseNativeShareUrl } from \"./native.js\";\nexport type { NativeShareResult, NativeSharingService } from \"./native.js\";\nexport { ArtifactPinError, artifactBindingView, assertArtifactBinding, verifyArtifactShare } from \"./artifact-pin.js\";\nexport type { ArtifactBindingView, ArtifactPinErrorCode, ExpectedArtifact, VerifyArtifactShareOptions } from \"./artifact-pin.js\";\n","/**\n * Characters that can hide or visually reorder a filename: every Unicode\n * control, format and surrogate code point, plus U+2028/U+2029. Matches the\n * share viewer's `src/filename-policy.ts`.\n */\nconst UNSAFE_FILENAME_CODE_POINT = /[\\p{Cc}\\p{Cf}\\p{Cs}\\u2028\\u2029]/u;\n\nexport function hasUnsafeFilenameCodePoint(value: string): boolean {\n return UNSAFE_FILENAME_CODE_POINT.test(value);\n}\n\n/** A single display/download filename, never a path. Returns the NFC form. */\nexport function canonicalShareFilename(value: string): string {\n const canonical = value.normalize(\"NFC\");\n if (\n canonical.length === 0\n || canonical === \".\"\n || canonical === \"..\"\n || canonical.includes(\"/\")\n || canonical.includes(\"\\\\\")\n || hasUnsafeFilenameCodePoint(canonical)\n ) {\n throw new TypeError(\"share filename is unsafe\");\n }\n return canonical;\n}\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 // `toString` of a parsed CID gives back the string it was parsed from; a fresh CID is encoded again.\n CID.createV1(cid.code, cid.multihash).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\n/**\n * The rule every v2/v3 envelope applies to `deliveryEmail`. Deployed viewers\n * validate with it, so senders must not sign an address it rejects; it is\n * stricter than `canonicalMailbox` (for example `a/b@example.com`).\n */\nconst deliveryEmailSchema = z.string().email();\n\n/** Whether `value` may be signed as an envelope's `deliveryEmail`. */\nexport function isEnvelopeDeliveryEmail(value: string): boolean {\n return deliveryEmailSchema.safeParse(value).success;\n}\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.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 marker = value.indexOf(\"/kv/\");\n if (marker < 1) return false;\n const space = value.slice(0, marker);\n const legacy = space.startsWith(\"tinycloud://\");\n if (legacy ? /[:/?#%]/.test(space.slice(\"tinycloud://\".length)) : !space.startsWith(\"tinycloud:\") || /[/?#%]/.test(space)) return false;\n const path = value.slice(marker + 4);\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 unifiedEncryptionResourceSchema = z.string().refine((value) => {\n const prefix = \"urn:tinycloud:encryption:\";\n if (!value.startsWith(prefix)) return false;\n const match = /^(did:.+):([^/:?#\\s]+)(?:\\/(.+))?$/.exec(value.slice(prefix.length));\n if (match === null) return false;\n const path = match[3];\n return path === undefined || path.split(\"/\").every((segment) =>\n segment.length > 0 && segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment)\n );\n}, { message: \"expected a canonical TinyCloud encryption resource\" });\nconst unifiedEncryptionKeyPathSchema = z.string().regex(/^share\\/[^/]+$/).refine(\n (value) => {\n const segment = value.slice(\"share/\".length);\n return segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment);\n },\n { message: \"expected an exact share key path\" },\n);\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: unifiedEncryptionResourceSchema,\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 encryptionKeyPath: unifiedEncryptionKeyPathSchema.optional(),\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();\nexport const unifiedPolicyV1Schema = 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();\nexport const policyCredentialRequirementV1Schema = z.object({\n type: z.literal(\"TinyCloudPolicyCredentialRequirement\"),\n version: z.literal(1),\n requirementDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n descriptorDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n issuerDid: z.string().min(1),\n issuerKid: z.string().min(1),\n profile: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n credentialType: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n}).strict();\nexport const unifiedPolicyV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v2\"),\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 credentialRequirement: policyCredentialRequirementV1Schema,\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const unifiedPolicySchema = z.discriminatedUnion(\"schema\", [\n unifiedPolicyV1Schema,\n unifiedPolicyV2Schema,\n]);\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();\n/** Artifact id as `share-sdk` mints and parses it (`assertArtifactId`); `artifact-pin.test.ts` keeps the two in step. */\nconst ARTIFACT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{2,62}$/;\nexport const artifactPinSchema = z.object({\n v: z.literal(1),\n artifactId: z.string().regex(ARTIFACT_ID_PATTERN),\n version: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),\n /** SHA-256 (lowercase hex) of the exact `manifest.json` bytes. The manifest itself stays an owner-side record. */\n manifestSha256: z.string().regex(/^[0-9a-f]{64}$/),\n /** An addressed share reads one exact file, so exactly one entry: the stored bytes (ciphertext) it will fetch. */\n files: z.array(z.object({\n path: z.string().min(1).max(255),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n bytes: z.number().int().nonnegative(),\n }).strict()).length(1),\n}).strict();\nexport type ArtifactPin = z.infer<typeof artifactPinSchema>;\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.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 /**\n * TC-1428: an owner-signed statement that this share reads one write-once artifact version. Additive: absent on\n * every other share, and covered by the envelope signature because the signature spans the whole unsigned object.\n * The shape is checked here; its binding to the content source is `verifyArtifactShare` in share-sdk.\n */\n artifactPin: artifactPinSchema.optional(),\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.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.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 const encryptionKeyPath = value.contentSource.encryptionKeyPath;\n if (encryptionKeyPath !== undefined && encryptionKeyPath !== `share/${value.contentSource.shareId}`) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\", \"encryptionKeyPath\"], message: \"share key path must name this share\" });\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.encryptionKeyPath !== encryptionKeyPath || 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 expectedEncryptionResource = encryptionKeyPath === undefined\n ? value.encryptionNetwork\n : `${value.encryptionNetwork}/${encryptionKeyPath}`;\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === expectedEncryptionResource && 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 the exact decrypt resource\" });\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 PolicyCredentialRequirementV1 = z.infer<typeof policyCredentialRequirementV1Schema>;\nexport type UnifiedPolicyV1 = z.infer<typeof unifiedPolicyV1Schema>;\nexport type UnifiedPolicyV2 = z.infer<typeof unifiedPolicyV2Schema>;\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","/**\n * Canonical email-domain rules shared by senders, receivers, and the\n * OpenCredentials `tinycloud.email-domain-proof/v1` issuer. A domain is\n * canonical only as lowercase ASCII LDH labels (two or more, no trailing dot,\n * not an IP literal). Unicode and IDNA U-labels have no canonical form here:\n * IDNA A-labels (`xn--…`) are accepted verbatim, so equality is always a\n * plain string comparison with no normalization ambiguity.\n *\n * These live at the envelope layer so the Share SDK (sender) and sdk-core\n * (receiver, which re-exports them) apply one rule without a package cycle.\n */\nconst LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nexport function isCanonicalEmailDomain(value: string): boolean {\n if (value.length === 0 || value.length > 253) return false;\n const labels = value.split(\".\");\n return labels.length >= 2 && labels.every((label) => LABEL.test(label)) && !/^[0-9]+$/.test(labels.at(-1)!);\n}\n\n/** Canonicalizes a sender-entered domain (`@Example.com` → `example.com`) or throws. */\nexport function canonicalEmailDomain(value: string): string {\n const domain = value.trim().replace(/^@/, \"\").toLowerCase();\n if (!/^[\\x21-\\x7e]+$/.test(domain) || !isCanonicalEmailDomain(domain)) throw new TypeError(\"email domain must be lowercase ASCII DNS labels (use the xn-- form for international domains)\");\n return domain;\n}\n\n/**\n * Canonical form of a recipient-entered mailbox (trimmed, lowercased), or\n * undefined when it has no canonical domain. The issuer accepts only this\n * form, so the local check agrees with what the credential will contain.\n */\nexport function canonicalMailbox(value: string): { readonly email: string; readonly domain: string } | undefined {\n const email = value.trim().toLowerCase();\n const at = email.indexOf(\"@\");\n if (at <= 0 || at !== email.lastIndexOf(\"@\")) return undefined;\n const local = email.slice(0, at);\n const domain = email.slice(at + 1);\n // Lowercase RFC 5322 dot-atom without `%` or `!`, matching the issuer:\n // legacy percent-hack or bang-path routing could deliver elsewhere.\n if (local.length > 64 || !/^[a-z0-9#$&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9#$&'*+/=?^_`{|}~-]+)*$/.test(local) || !isCanonicalEmailDomain(domain)) return undefined;\n return Object.freeze({ email, domain });\n}\n\n/** True only when the mailbox's canonical domain equals `domain` exactly (no suffix or subdomain match). */\nexport function mailboxBelongsToDomain(mailbox: string, domain: string): boolean {\n return canonicalMailbox(mailbox)?.domain === domain && isCanonicalEmailDomain(domain);\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 { fromBase64Url, toBase64Url } from \"./bytes.js\";\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: toBase64Url(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 = toBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = toBase64Url(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}.${toBase64Url(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 = fromBase64Url(headerSegment);\n const payloadBytes = fromBase64Url(payloadSegment);\n const signature = fromBase64Url(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, fromBase64Url(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 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 POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\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 policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${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 = policyDigest;\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(0, capability.resource.indexOf(\"/kv/\")), 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 marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== 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.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || 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.nodeAudience), 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 !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || 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 !== binding.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 { 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\nexport const 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 function 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","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","/**\n * The few artifact helpers the browser bundles need (the pin verifier reads a version path). Kept\n * apart from `artifact.ts`, which is CLI and agent tooling and must stay out of those bundles.\n */\nexport const ARTIFACT_ROOT = \"artifacts\";\n\n/** The artifact and version a stored KV path belongs to, if it is under a version directory. */\nexport function parseArtifactVersionPath(path: string): { readonly artifactId: string; readonly version: number; readonly file: string } | undefined {\n const match = /^artifacts\\/([a-z0-9][a-z0-9_-]{2,62})\\/versions\\/([1-9][0-9]{0,14})\\/([^/]+)$/.exec(path);\n if (match === null) return undefined;\n return { artifactId: match[1]!, version: Number(match[2]), file: match[3]! };\n}\n","/**\n * Artifact pin verification (TC-1428). Small on purpose: this is the one place that decides whether an addressed\n * share that reads an artifact version may be trusted.\n *\n * What is signed. The owner signs the whole Policy/v3 envelope (Ed25519, `verifyEnvelopeV3SignatureOnly`). `artifactPin` is a\n * field of that envelope, so the signature covers it: artifact id, version, the sha256 of the version's\n * `manifest.json`, and the sha256 and size of the one stored file the share reads. The manifest stays an owner-side\n * record; a recipient never needs to fetch it. Policy/v3 already binds the file's ciphertext digest\n * (`contentSource.initialCiphertextDigestHex`); the pin binds that digest to an artifact identity and a version, so a\n * share cannot be re-pointed at another version or another artifact's path without breaking the signature.\n *\n * Trust model (accepted, TC-1428 finding 3): the owner is the trusted signer. The node has no write-once ACL, so the\n * owner (or whoever holds the owner's session) can overwrite `versions/<n>/<file>` afterwards. A recipient then\n * detects the substitution through the pin digest and fails closed; it cannot tell a malicious owner from a node\n * serving stale or altered bytes, and does not try to.\n *\n * Fails closed: any addressed share whose content source lies under `artifacts/` must carry a valid pin that matches\n * that source. A pin on any other path is refused. `artifacts/<id>/current/...` has no pin form in v1 and is refused.\n */\nimport {\n verifyEnvelopeV3SignatureOnly,\n type ArtifactPin,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport { ARTIFACT_ROOT, parseArtifactVersionPath } from \"./artifact-core.js\";\n\nexport type ArtifactPinErrorCode =\n | \"missing-pin\"\n | \"unsupported-artifact-path\"\n | \"wrong-signer\"\n | \"bad-signature\"\n | \"pin-source-mismatch\"\n | \"pinned-share-writable\"\n | \"expectation-mismatch\"\n | \"file-digest-mismatch\"\n | \"manifest-mismatch\";\n\nexport class ArtifactPinError extends Error {\n readonly code: ArtifactPinErrorCode;\n /** The code is the message: stable, short, and what callers and tests match on. */\n constructor(code: ArtifactPinErrorCode) {\n super(code);\n this.name = \"ArtifactPinError\";\n this.code = code;\n }\n}\n\n/**\n * What the caller already knows about the share it is opening, from outside the envelope. Optional: a v1 pinned share\n * names its version in its own signed pin and nothing outside the link says which one to expect, so no production\n * caller passes it. A caller that does learn a version out of band (a listing, a \"newer version\" link) uses it to\n * refuse an older or different pin.\n */\nexport interface ExpectedArtifact {\n readonly artifactId?: string;\n readonly version?: number;\n}\n\nexport interface VerifyArtifactShareOptions {\n /** The did:key the caller trusts as the sender. `signature.signerDid` is self-asserted and proves nothing alone. */\n readonly expectedOwnerDid: string;\n readonly expected?: ExpectedArtifact;\n}\n\n/**\n * The fields of an envelope (or of a share about to be built) that the pin binds. Taking a view lets the publisher run\n * the identical check before it registers anything, and the recipient run it again where it reads.\n */\nexport interface ArtifactBindingView {\n readonly artifactPin?: ArtifactPin;\n readonly target: { readonly spaceId: string };\n readonly contentSource: {\n readonly kvResource: string;\n readonly selector: \"exact\" | \"prefix\";\n readonly mode: \"mutable\" | \"immutable\";\n readonly initialCiphertextDigestHex?: string | undefined;\n };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n /** Share actions (`read` | `list` | `edit`). */\n readonly actions: readonly string[];\n /** KV abilities the signed policy grants on the content source. */\n readonly policyKvActions: readonly string[];\n}\n\nexport function artifactBindingView(envelope: UnsignedShareEnvelopeV3 | ShareEnvelopeV3): ArtifactBindingView {\n return {\n ...(envelope.artifactPin === undefined ? {} : { artifactPin: envelope.artifactPin }),\n target: envelope.target,\n contentSource: envelope.contentSource,\n resource: envelope.resource,\n actions: envelope.actions,\n policyKvActions: envelope.policy.capabilityCeiling.flatMap((capability) => capability.kind === \"kv\" ? capability.actions : []),\n };\n}\n\nfunction sourcePath(view: ArtifactBindingView): string {\n const resource = view.contentSource.kvResource;\n const marker = \"/kv/\";\n const at = resource.indexOf(marker);\n if (at <= 0 || resource.slice(0, at) !== view.target.spaceId) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n return resource.slice(at + marker.length);\n}\n\n/**\n * The pin and the content source must say the same thing, and a pinned share must be read-only. Synchronous and\n * signature-free, so the publisher can run it before registering anything and the recipient can re-run it at the\n * point of reading. Returns the pin for an artifact share and `undefined` for any other share.\n */\nexport function assertArtifactBinding(view: ArtifactBindingView, expected: ExpectedArtifact = {}): ArtifactPin | undefined {\n const pin = view.artifactPin;\n const path = sourcePath(view);\n const inArtifacts = path === ARTIFACT_ROOT || path.startsWith(`${ARTIFACT_ROOT}/`);\n if (!inArtifacts) {\n if (pin !== undefined) throw new ArtifactPinError(\"pin-source-mismatch\");\n return undefined;\n }\n if (pin === undefined) throw new ArtifactPinError(\"missing-pin\");\n const parsed = parseArtifactVersionPath(path);\n if (parsed === undefined) throw new ArtifactPinError(\"unsupported-artifact-path\");\n const file = pin.files[0]!;\n const source = view.contentSource;\n if (\n // The stored ciphertext of one file: bounded like content (100 MiB) plus the envelope's own framing.\n file.bytes > 128 * 1024 * 1024\n || pin.artifactId !== parsed.artifactId\n || pin.version !== parsed.version\n || file.path !== parsed.file\n || view.resource.kind !== \"exact\"\n || view.resource.path !== path\n || source.selector !== \"exact\"\n || source.mode !== \"immutable\"\n || source.initialCiphertextDigestHex !== file.sha256\n ) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n // A pinned path is immutable: neither the envelope nor the signed policy may grant a write on it.\n if (view.actions.includes(\"edit\") || view.policyKvActions.includes(\"tinycloud.kv/put\")) {\n throw new ArtifactPinError(\"pinned-share-writable\");\n }\n if (\n (expected.artifactId !== undefined && expected.artifactId !== pin.artifactId)\n || (expected.version !== undefined && expected.version !== pin.version)\n ) {\n throw new ArtifactPinError(\"expectation-mismatch\");\n }\n return pin;\n}\n\n/**\n * Check that the trusted owner signed this envelope (and so its pin), then the pin binding. Throws `ArtifactPinError`;\n * never returns a partial answer. Only the owner's Ed25519 signature over the envelope is checked here, because that\n * is what authenticates the pin. The rest of the envelope (policy signature, owner roots, enforcer binding) is\n * `verifyEnvelopeV3`'s job, and `resolvePolicyShare` runs both before it trusts a link. (Folding the two into one\n * call was measured: +911 gzip bytes in the canonical ESM bundle, for a saved ed25519 verify.)\n */\nexport function verifyArtifactShare(envelope: ShareEnvelopeV3, options: VerifyArtifactShareOptions): ArtifactPin | undefined {\n if (envelope.signature.signerDid !== options.expectedOwnerDid) {\n throw new ArtifactPinError(\"wrong-signer\");\n }\n let valid: boolean;\n try { valid = verifyEnvelopeV3SignatureOnly(envelope) && envelope.policy.ownerDid === options.expectedOwnerDid; }\n catch { valid = false; }\n if (!valid) throw new ArtifactPinError(\"bad-signature\");\n return assertArtifactBinding(artifactBindingView(envelope), options.expected);\n}\n","import {\n canonicalize,\n computeCid,\n open,\n parseShareUrl,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n toBase64Url,\n verifyEnvelopeV2,\n verifyEnvelopeV3,\n type ShareEnvelopeV2,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport type { LinkError, ResolvedLink } from \"@tinycloud/share-envelope/links\";\nimport { ArtifactPinError, verifyArtifactShare } from \"./artifact-pin.js\";\nimport type { ShareAuthorizationAdapter, ShareAuthorizationMethod, ShareAuthorizedContent } 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;\nexport const DEFAULT_MAX_SEALED_BLOB_BYTES = 100 * 1024 * 1024 + 29;\nexport const DEFAULT_MAX_CONTENT_BLOB_BYTES = DEFAULT_MAX_SEALED_BLOB_BYTES;\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);\n this.name = \"ShareReceiveError\";\n this.code = code;\n this.details = details;\n }\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\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\n/**\n * A Policy/v3 link is a `v=4` link: a short link whose sealed envelope the links\n * API serves, or a full link that carries it. The key and body CID stay in the\n * fragment and are never sent.\n */\nexport interface ShareFetchOptions {\n /** The trusted viewer origin. Defaults to the link's own origin. */\n readonly expectedOrigin?: string;\n /** The links API origin a short link is read from. A link never names it. Defaults to `https://api.tinycloud.xyz`. */\n readonly apiOrigin?: string;\n readonly fetch?: typeof globalThis.fetch;\n readonly signal?: AbortSignal;\n readonly now?: () => number;\n readonly maxSealedBlobBytes?: number;\n readonly maxContentBlobBytes?: number;\n readonly onResolvedAddressedEnvelope?: (envelope: ShareEnvelopeV2 | ShareEnvelopeV3, cid: string) => void;\n /** Legacy V2 registry transport; used only for existing compact V2 links. */\n readonly registryBaseUrl?: string;\n readonly fetchBlob?: (input: { readonly origin: string; readonly cid: string; readonly signal?: AbortSignal }) => Promise<Uint8Array>;\n readonly trustedSignerDid?: string;\n readonly trustedPolicyAuthority?: SharePolicyAuthority;\n readonly authorization?: ShareAuthorizationAdapter<ShareAuthorizedContent>;\n readonly authorizationResumeToken?: string;\n readonly authorizationProof?: unknown;\n}\n\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 /** Set when the share is pinned to one artifact version; the owner's signature covers it (TC-1428). */\n readonly artifact?: { readonly id: string; readonly version: number };\n}\n\nexport interface ShareInspection {\n readonly metadata: ShareMetadata;\n readonly link: { readonly origin: string; readonly cid: string; readonly kind: \"policy\" | \"compact\" };\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 ShareReceiveAuthorizationRequired {\n readonly state: \"authorization-required\";\n readonly method: ShareAuthorizationMethod;\n readonly continueUrl?: string;\n readonly resumeToken?: string;\n}\n\n/** Retained as the result consumed after the node authorization ceremony. */\nexport interface ShareReceiveResult extends ShareInspection {\n readonly bytes: Uint8Array;\n readonly text?: string;\n}\n\nexport type ShareReceiveOutcome = ShareReceiveResult | ShareReceiveAuthorizationRequired;\n\nfunction metadataFor(envelope: ShareEnvelopeV2 | ShareEnvelopeV3, origin: string): ShareMetadata {\n const kind = envelope.recipientMatcher.kind === \"recipientDid\"\n ? \"recipientDid\"\n : envelope.recipientMatcher.kind === \"exactEmail\"\n ? \"email\"\n : envelope.recipientMatcher.kind === \"emailDomain\" ? \"emailDomain\" : \"bearer\";\n return {\n protocol: \"tinycloud-share\",\n version: 1,\n shareId: envelope.shareId,\n origin,\n target: { ...envelope.target, kind },\n resource: { ...envelope.resource },\n actions: [...envelope.actions],\n 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.version === 3 && envelope.artifactPin !== undefined ? { artifact: { id: envelope.artifactPin.artifactId, version: envelope.artifactPin.version } } : {}),\n };\n}\n\nfunction receiveErrorFor(error: LinkError): ShareReceiveError {\n switch (error.code) {\n case \"origin_not_trusted\":\n return new ShareReceiveError(\"origin-mismatch\", \"share link origin is not trusted\");\n case \"body_over_cap\":\n case \"response_too_large\":\n return new ShareReceiveError(\"max-bytes-exceeded\", \"sealed policy envelope exceeds the size limit\");\n case \"body_hash_mismatch\":\n case \"link_cid_mismatch\":\n return new ShareReceiveError(\"cid-mismatch\", \"sealed envelope bytes do not match the link CID\");\n case \"body_open_failed\":\n return new ShareReceiveError(\"decrypt-failed\", \"share envelope could not be opened\");\n case \"gone\":\n case \"expired\":\n return new ShareReceiveError(\"expired\", \"share link has expired, was deleted, or never existed\");\n case \"bad_signature\":\n case \"issuer_binding_mismatch\":\n return new ShareReceiveError(\"signature-invalid\", \"share link signature is invalid\");\n case \"service_refused\":\n case \"service_unavailable\":\n case \"invalid_response\":\n return new ShareReceiveError(\"fetch-failed\", \"share link could not be fetched\");\n case \"not_a_url\":\n case \"not_https\":\n case \"userinfo\":\n case \"not_canonical\":\n case \"query_present\":\n case \"removed_version\":\n case \"path_grammar\":\n case \"fragment_grammar\":\n case \"key_noncanonical\":\n case \"cid_grammar\":\n case \"record_encoding\":\n case \"record_json\":\n case \"record_not_canonical\":\n case \"type_path_mismatch\":\n case \"full_non_share\":\n return new ShareReceiveError(\"invalid-link\", \"share link format is invalid\");\n default:\n return new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\");\n }\n}\n\nasync function resolvePolicyShare(link: string, options: ShareFetchOptions): Promise<{ readonly envelope: ShareEnvelopeV3; readonly origin: string; readonly cid: string }> {\n options.signal?.throwIfAborted();\n let url: URL;\n try {\n url = new URL(link);\n } catch {\n throw new ShareReceiveError(\"invalid-link\", \"share link format is invalid\");\n }\n // The links module is a separate file of `@tinycloud/share-envelope`, loaded when a link is first resolved.\n const links = await import(\"@tinycloud/share-envelope/links\");\n let resolved: ResolvedLink;\n try {\n resolved = await links.resolveLink(link, {\n trustedOrigins: [options.expectedOrigin ?? url.origin],\n apiOrigin: options.apiOrigin ?? links.DEFAULT_LINKS_API_ORIGIN,\n ...(options.fetch === undefined ? {} : { fetch: options.fetch }),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n now: options.now?.() ?? Date.now(),\n });\n } catch (error) {\n options.signal?.throwIfAborted();\n throw error instanceof links.LinkError ? receiveErrorFor(error) : error;\n }\n if (resolved.type !== \"share\") throw new ShareReceiveError(\"invalid-link\", \"share link is not a share\");\n const limit = options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES;\n if (!Number.isSafeInteger(limit) || limit <= 0 || resolved.body.byteLength > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed policy envelope exceeds the configured byte limit\");\n const cid = resolved.header.bodyCid;\n options.signal?.throwIfAborted();\n let envelope: ShareEnvelopeV3;\n try {\n const encoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(resolved.plaintext);\n if (canonicalize(resolved.value) !== encoded) throw new Error(\"non-canonical envelope\");\n envelope = shareEnvelopeV3Schema.parse(resolved.value);\n } catch {\n throw new ShareReceiveError(\"envelope-invalid\", \"share envelope is invalid\");\n }\n try {\n if (!await verifyEnvelopeV3(envelope, { expectedSignerDid: envelope.policy.ownerDid })) throw new Error(\"signature\");\n } catch {\n throw new ShareReceiveError(\"signature-invalid\", \"share signature is invalid\");\n }\n // The owner's signature (checked above) covers the artifact pin; the pin must also match what the share reads, and a\n // share that reads an artifact without a pin is refused.\n try {\n verifyArtifactShare(envelope, { expectedOwnerDid: envelope.policy.ownerDid });\n } catch (error) {\n if (!(error instanceof ArtifactPinError)) throw error;\n throw new ShareReceiveError(\"envelope-invalid\", `share artifact pin is invalid (${error.code})`);\n }\n options.signal?.throwIfAborted();\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 options.onResolvedAddressedEnvelope?.(envelope, cid);\n return { envelope, origin: url.origin, cid };\n}\n\n/** Existing V2 links keep their registry-backed read path. V3 publication never uses it. */\nasync function resolveLegacyV2(link: string, options: ShareFetchOptions): Promise<{ readonly envelope: ShareEnvelopeV2; readonly origin: string; readonly cid: string }> {\n let parsed: ReturnType<typeof parseShareUrl>;\n try { parsed = parseShareUrl(link, { ...(options.expectedOrigin === undefined ? {} : { expectedOrigin: options.expectedOrigin }) }); }\n catch { throw new ShareReceiveError(\"invalid-link\", \"legacy share link format is invalid\"); }\n try {\n options.signal?.throwIfAborted();\n const origin = new URL(link).origin;\n const limit = options.maxSealedBlobBytes ?? DEFAULT_MAX_SEALED_BLOB_BYTES;\n if (!Number.isSafeInteger(limit) || limit <= 0) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope limit is invalid\");\n let sealed: Uint8Array;\n if (options.fetchBlob !== undefined) {\n try { sealed = await options.fetchBlob({ origin, cid: parsed.ciphertextCid, ...(options.signal === undefined ? {} : { signal: options.signal }) }); }\n catch { throw new ShareReceiveError(\"fetch-failed\", \"legacy registry unavailable\"); }\n } else {\n if (options.registryBaseUrl === undefined) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry is required\");\n const response = await (options.fetch ?? globalThis.fetch)(`${options.registryBaseUrl.replace(/\\/+$/, \"\")}/ipfs/${parsed.ciphertextCid}?format=raw`, {\n headers: { accept: \"application/vnd.ipld.raw\" }, redirect: \"error\", ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n if (!response.ok) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry unavailable\");\n if (Number(response.headers.get(\"content-length\")) > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\");\n const reader = response.body?.getReader();\n if (reader === undefined) throw new ShareReceiveError(\"fetch-failed\", \"legacy registry returned no body\");\n const chunks: Uint8Array[] = [];\n let length = 0;\n for (;;) {\n const part = await reader.read();\n if (part.done) break;\n length += part.value.length;\n if (length > limit) { await reader.cancel(); throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\"); }\n chunks.push(part.value);\n }\n sealed = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) { sealed.set(chunk, offset); offset += chunk.length; }\n }\n options.signal?.throwIfAborted();\n if (!(sealed instanceof Uint8Array) || sealed.length > limit) throw new ShareReceiveError(\"max-bytes-exceeded\", \"sealed envelope exceeds the size limit\");\n if (await computeCid(sealed) !== parsed.ciphertextCid) throw new ShareReceiveError(\"cid-mismatch\", \"legacy envelope CID does not match\");\n let plaintext: Uint8Array;\n try { plaintext = await open(sealed, parsed.key32); }\n catch { throw new ShareReceiveError(\"decrypt-failed\", \"legacy envelope could not be opened\"); }\n let envelope: ShareEnvelopeV2;\n try {\n const encoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext);\n const value = JSON.parse(encoded) as unknown;\n if (canonicalize(value) !== encoded) throw new Error(\"non-canonical envelope\");\n envelope = shareEnvelopeV2Schema.parse(value);\n } catch { throw new ShareReceiveError(\"envelope-invalid\", \"legacy envelope is invalid\"); }\n return { envelope, origin, cid: parsed.ciphertextCid };\n } finally { parsed.key32.fill(0); }\n}\n\nfunction evidenceMatchesV2(envelope: ShareEnvelopeV2, evidence: SharePolicyEvidence): boolean {\n const actions = new Set(evidence.actions.map((action) => action === \"read\" ? \"tinycloud.kv/get\" : action === \"list\" ? \"tinycloud.kv/list\" : action === \"edit\" ? \"tinycloud.kv/put\" : action));\n const resourceCovers = evidence.resource.kind === \"exact\"\n ? envelope.resource.kind === \"exact\" && evidence.resource.path === envelope.resource.path\n : envelope.resource.path === evidence.resource.path || envelope.resource.path.startsWith(evidence.resource.path.endsWith(\"/\") ? evidence.resource.path : `${evidence.resource.path}/`);\n return envelope.authorizationTarget.kind === \"policy\" &&\n evidence.policyCid === envelope.authorizationTarget.policyCid &&\n evidence.signerDid === envelope.signature.signerDid && evidence.registrationCid.length > 0 &&\n evidence.shareId === envelope.shareId &&\n canonicalize(evidence.recipientMatcher) === canonicalize(envelope.recipientMatcher) &&\n canonicalize(evidence.target) === canonicalize(envelope.target) && resourceCovers &&\n envelope.actions.every((action) => actions.has(action === \"read\" ? \"tinycloud.kv/get\" : action === \"list\" ? \"tinycloud.kv/list\" : \"tinycloud.kv/put\")) &&\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 && Number.isFinite(Date.parse(evidence.expiresAt)) &&\n Date.parse(evidence.expiresAt) === Date.parse(envelope.expiry);\n}\n\nasync function verifyLegacyV2(envelope: ShareEnvelopeV2, options: ShareFetchOptions): Promise<void> {\n try { if (!await verifyEnvelopeV2(envelope, { expectedSignerDid: envelope.signature.signerDid })) throw new Error(\"signature\"); }\n catch { throw new ShareReceiveError(\"signature-invalid\", \"legacy envelope signature is invalid\"); }\n const expiry = Date.parse(envelope.expiry);\n if (!Number.isFinite(expiry)) throw new ShareReceiveError(\"envelope-invalid\", \"legacy share expiry is invalid\");\n if (expiry <= (options.now?.() ?? Date.now())) throw new ShareReceiveError(\"expired\", \"legacy share has expired\", { expiresAt: envelope.expiry });\n if (envelope.authorizationTarget.kind === \"policy\") {\n if (options.trustedPolicyAuthority === undefined) throw new ShareReceiveError(\"envelope-invalid\", \"a legacy policy authority is required\");\n let evidence: SharePolicyEvidence | undefined;\n try { evidence = await options.trustedPolicyAuthority.resolve({ policyCid: envelope.authorizationTarget.policyCid, envelope }); }\n catch { /* Treat authority transport failure as missing evidence. */ }\n if (evidence === undefined || !evidenceMatchesV2(envelope, evidence)) throw new ShareReceiveError(\"capability-invalid\", \"legacy policy evidence does not match\");\n if (options.trustedSignerDid !== undefined && options.trustedSignerDid !== evidence.signerDid) throw new ShareReceiveError(\"signature-invalid\", \"legacy signer is not trusted\");\n } else if (options.trustedSignerDid === undefined || options.trustedSignerDid !== envelope.signature.signerDid ||\n (envelope.authorizationTarget.kind === \"recipientDid\" && envelope.recipientMatcher.kind === \"recipientDid\" && envelope.authorizationTarget.did !== envelope.recipientMatcher.value)) {\n throw new ShareReceiveError(\"capability-invalid\", \"legacy recipient authority does not match\");\n }\n}\n\nexport async function inspectShare(link: string, options: ShareFetchOptions = {}): Promise<ShareInspection> {\n if (isLegacyV2Link(link)) {\n const legacy = await resolveLegacyV2(link, options);\n await verifyLegacyV2(legacy.envelope, options);\n options.onResolvedAddressedEnvelope?.(legacy.envelope, legacy.cid);\n return { metadata: metadataFor(legacy.envelope, legacy.origin), link: { origin: legacy.origin, cid: legacy.cid, kind: \"compact\" } };\n }\n const resolved = await resolvePolicyShare(link, options);\n return { metadata: metadataFor(resolved.envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: \"policy\" } };\n}\n\n/**\n * Resolve and verify invitation metadata only. Actual content access is an\n * invocation against the owner node and is performed by the receiver SDK.\n */\nexport async function receiveShare(link: string, options: ShareFetchOptions = {}): Promise<ShareReceiveOutcome> {\n if (isLegacyV2Link(link)) return receiveLegacyV2(link, options);\n const resolved = await resolvePolicyShare(link, options);\n return { state: \"authorization-required\", method: resolved.envelope.recipientMatcher.kind === \"recipientDid\" ? \"openkey-device\" : \"email-claim\" };\n}\n\nfunction isLegacyV2Link(link: string): boolean {\n try { const url = new URL(link); return /^\\/s\\/bafkrei[a-z2-7]{52}$/.test(url.pathname) && url.hash.startsWith(\"#k=\"); }\n catch { return false; }\n}\n\nasync function receiveLegacyV2(link: string, options: ShareFetchOptions): Promise<ShareReceiveOutcome> {\n const resolved = await resolveLegacyV2(link, options);\n const { envelope } = resolved;\n await verifyLegacyV2(envelope, options);\n options.onResolvedAddressedEnvelope?.(envelope, resolved.cid);\n const method: ShareAuthorizationMethod = 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, method })\n : await options.authorization.resume({ envelope, method, resumeToken: options.authorizationResumeToken,\n ...(options.authorizationProof === undefined ? {} : { proof: options.authorizationProof }) });\n if (result.state === \"authorization-required\") return result;\n if (result.state === \"denied\") throw new ShareReceiveError(\"authorization-denied\", \"legacy share authorization was denied\");\n if (result.value === null || typeof result.value !== \"object\" || !(result.value.bytes instanceof Uint8Array) ||\n result.value.proof === undefined || options.authorization.verifyResult === undefined) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content lacks a verifiable proof\");\n }\n const authorized = result.value;\n try { if (!await options.authorization.verifyResult({ envelope, value: authorized, proof: authorized.proof })) throw new Error(\"proof\"); }\n catch { throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content proof is invalid\"); }\n const bytes = authorized.bytes.slice();\n if (bytes.length > (options.maxContentBlobBytes ?? DEFAULT_MAX_CONTENT_BLOB_BYTES)) throw new ShareReceiveError(\"max-bytes-exceeded\", \"legacy content exceeds the size limit\");\n const bodyDigest = toBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes)));\n if (authorized.bodyDigest !== bodyDigest || authorized.contentSourceDigest !== envelope.contentSourceDigest ||\n authorized.binding.shareId !== envelope.shareId || authorized.binding.delegationCid !== envelope.delegationCid ||\n authorized.binding.authorityMaterialHandle !== envelope.authorityMaterialHandle ||\n authorized.binding.authorityMaterialDigest !== envelope.authorityMaterialDigest ||\n authorized.binding.resource.kind !== envelope.resource.kind || authorized.binding.resource.path !== envelope.resource.path ||\n (authorized.binding.action !== undefined && !envelope.actions.some((action) => action === authorized.binding.action || `tinycloud.kv/${action}` === authorized.binding.action)) ||\n (envelope.metadata.byteLength !== undefined && envelope.metadata.byteLength !== bytes.length)) {\n throw new ShareReceiveError(\"content-integrity-failed\", \"legacy content binding does not match\");\n }\n let text: string | undefined;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); } catch { /* binary content */ }\n return { metadata: metadataFor(envelope, resolved.origin), link: { origin: resolved.origin, cid: resolved.cid, kind: \"compact\" }, bytes, ...(text === undefined ? {} : { text }) };\n}\n","export const SHARE_CONTENT_LIMIT = 100 * 1024 * 1024;\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\n/** Input shared by the native bearer and Policy/v3 addressed publishers. */\nexport interface SharePublishOptions {\n readonly source: Uint8Array | AsyncIterable<Uint8Array>;\n readonly filename: string;\n readonly mediaType?: string;\n readonly allowBinary?: boolean;\n readonly target?: SharePublishTarget;\n readonly expiresAt?: Date;\n readonly expiryWasExplicit?: boolean;\n readonly origin: string;\n readonly maxBytes?: number;\n readonly now?: () => number;\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 expiryClamped?: boolean;\n readonly expiresAt: string;\n readonly display: { readonly filename?: string; readonly senderName?: string };\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 /** Set when the content is a numbered artifact version (TC-1428). Pinned: the share can only ever read this version. */\n readonly artifact?: { readonly id: string; readonly version: number; readonly mode: \"pinned\" };\n}\n\n/** Sender-only Policy/v3 material retained in encrypted history for delivery retries. */\nexport interface PublishedShareDeliveryMaterial {\n /**\n * The signed plaintext policy envelope. It is retained only in encrypted\n * sender history so a delivery can be retried; it never travels in a URL.\n */\n readonly envelope: Readonly<Record<string, unknown>>;\n /** CIDv1/raw/sha2-256 of `sealedEnvelope`, and the CID in the share URL. */\n readonly shareCid: string;\n /**\n * Canonical `version || nonce || AES-256-GCM ciphertext+tag`, base64url.\n * Node reopens this exact value before authorizing email delivery.\n */\n readonly sealedEnvelope: string;\n /** 32-byte AES-GCM key for `sealedEnvelope`, base64url and fragment-only in the URL. */\n readonly envelopeKey: string;\n}\n\nexport interface PublishedShare {\n readonly protocol: \"tinycloud-share\";\n readonly version: typeof SHARE_PUBLISH_RESULT_VERSION;\n /** The complete link is deliberately non-enumerable on production results. */\n readonly url: string;\n readonly link: { readonly kind: \"native\" | \"policy\"; readonly cid: string };\n readonly metadata: PublishedShareMetadata;\n /** Non-enumerable Policy/v3 delivery material; never included in command output. */\n readonly deliveryMaterial?: PublishedShareDeliveryMaterial;\n}\n\n/** Machine-readable output omits the complete bearer capability and delivery material. */\nexport function redactPublishedShare(result: PublishedShare): Omit<PublishedShare, \"url\" | \"deliveryMaterial\"> {\n return {\n protocol: \"tinycloud-share\",\n version: SHARE_PUBLISH_RESULT_VERSION,\n link: { ...result.link },\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 ...(result.metadata.expiryClamped === undefined ? {} : { expiryClamped: result.metadata.expiryClamped }),\n expiresAt: result.metadata.expiresAt,\n display: { ...result.metadata.display },\n },\n };\n}\n\nexport type SharePublishErrorCode =\n | \"invalid-argument\"\n | \"authority-required\"\n | \"max-bytes-exceeded\";\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","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 { canonicalShareFilename } from \"./filename-policy.js\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { assertArtifactBinding } from \"./artifact-pin.js\";\nimport {\n canonicalize, computeCid, generateKey, isEnvelopeDeliveryEmail, seal,\n shareEnvelopeV3Schema, toBase64Url, unsignedShareEnvelopeV3Schema,\n type ArtifactPin, type PolicyCredentialRequirementV1, type ShareAction, type UnifiedContentSource,\n type ShareEnvelopeV3, type UnifiedPolicy, type UnifiedPolicyCapability, type UnifiedRoot, type UnsignedShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\n\nimport {\n SHARE_CONTENT_LIMIT, SHARE_PUBLISH_RESULT_VERSION, SharePublishError, redactPublishedShare,\n type PublishedShare, type PublishedShareDeliveryMaterial,\n} from \"./publish.js\";\nimport { ARTIFACT_ROOT } from \"./artifact-core.js\";\nimport { AddressedContentSourceError, assertEncryptionNetwork, assertPathBoundContentSource, pathBoundKeyPath, type PathBoundContentSource } from \"./addressed-content.js\";\nimport { normalizeShareTarget, type ShareTarget } from \"./targets.js\";\nimport type { OwnerShareAction, OwnerShareMatcher } from \"./owner-policy.js\";\n\nconst POLICY_V1_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ENVELOPE_V3_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst textEncoder = new TextEncoder();\n\nexport interface AddressedOwnerRootInput {\n readonly ownerDid: string;\n readonly role: \"policy-authority\" | \"policy-enforcement\";\n readonly audienceDid: string;\n readonly policyId: string;\n readonly policyDigestHex: string;\n readonly policyCid: string;\n readonly contentSourceDigestHex: string;\n readonly capabilityCeilingHashHex: string;\n readonly nativeProjectionHashHex: string;\n readonly notBefore: Date;\n readonly expiresAt: Date;\n readonly nodeAudience: string;\n readonly capabilities: readonly UnifiedPolicyCapability[];\n}\n\nexport interface AddressedOwnerRootReceipt {\n readonly cid: string;\n readonly delegationHeader: { readonly Authorization: string };\n}\n\nexport interface AddressedPolicyRegistrationInput {\n readonly policyCid: string;\n readonly policy: Readonly<Record<string, unknown>>;\n readonly policyRoot: { readonly cid: string; readonly authorization: string };\n readonly enforcementRoot: { readonly cid: string; readonly authorization: string };\n readonly contentSourceDigestHex: string;\n readonly nativeProjectionHashHex: string;\n readonly rootExpiresAt: string;\n readonly enforcerDid: string;\n readonly expectedNodeAudience: string;\n}\n\nexport interface AddressedPolicyRegistrationReceipt {\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly attestedEnforcerBinding: {\n readonly schema: \"xyz.tinycloud.policy/attested-enforcer/v2\";\n readonly enforcerDid: string;\n readonly nodeAudience: string;\n readonly attestationBindingDigestHex: string;\n readonly issuedAt: string;\n readonly expiresAt: string;\n readonly signature: { readonly suite: \"Ed25519\"; readonly signerDid: string; readonly value: string };\n };\n}\n\n/** App-neutral owner authority. Node SDK owns all Policy/v3 transport. */\nexport interface AddressedPublishAuthority {\n readonly ownerDid: string;\n createOwnerRoot(input: AddressedOwnerRootInput): Promise<AddressedOwnerRootReceipt>;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n registerPolicy(input: AddressedPolicyRegistrationInput): Promise<AddressedPolicyRegistrationReceipt>;\n}\n\nexport interface AddressedSharePublishOptions {\n readonly shareId: string;\n readonly shareOrigin: string;\n /** The links API origin written into the signed header as its audience. Defaults to `https://api.tinycloud.xyz`. */\n readonly apiOrigin?: 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 /** Path-bound to this share's own key (`share/<shareId>`) with the wrapped-key digest; build it with `bindPathBoundContentSource`. Anything else is refused before any signing or write. */\n readonly contentSource: PathBoundContentSource;\n readonly credentialRequirement?: PolicyCredentialRequirementV1;\n readonly filename: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n /** TC-1428: pins the share to one write-once artifact version; signed with the envelope. Required when the content source is under `artifacts/`. */\n readonly artifactPin?: ArtifactPin;\n readonly deliveryEmail?: string;\n readonly expiresAt: Date;\n /** Sender-history material required by Node's Policy/v3 delivery authorization. */\n readonly onDeliveryMaterial?: (input: PublishedShareDeliveryMaterial) => void;\n readonly authority: AddressedPublishAuthority;\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\nconst OWNER_SHARE_ACTIONS: ReadonlySet<string> = new Set<OwnerShareAction>([\"tinycloud.kv/get\", \"tinycloud.kv/list\", \"tinycloud.kv/metadata\", \"tinycloud.kv/put\"]);\n\nfunction assertSafeInput(input: AddressedSharePublishOptions): void {\n // ONE share-id grammar for the plan, the size bound and the publisher: a share id this refuses was refused before any key was created.\n pathBoundKeyPath(input.shareId);\n assertPathBoundContentSource(input.contentSource, input.shareId);\n if (!Number.isSafeInteger(input.byteLength) || input.byteLength < 0 || input.byteLength > SHARE_CONTENT_LIMIT) throw new TypeError(\"addressed content length is invalid\");\n if (!Number.isFinite(input.expiresAt.getTime()) || input.expiresAt.getTime() <= 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.shareId !== input.shareId || input.contentSource.selector !== input.resource.kind) throw new TypeError(\"addressed content source is not bound to the share\");\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction digestHex(value: unknown, domain: string): string {\n return hex(sha256(textEncoder.encode(`${domain}${canonicalize(value)}`)));\n}\n\nfunction sortCanonical<T>(values: readonly T[]): readonly T[] {\n return [...values].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\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\nfunction rfc3339Seconds(value: Date): string {\n return new Date(Math.floor(value.getTime() / 1000) * 1000).toISOString().replace(\".000Z\", \"Z\");\n}\n\nfunction nativeProjection(capabilities: readonly UnifiedPolicyCapability[]): readonly Record<string, unknown>[] {\n return sortCanonical(capabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : {\n service: \"tinycloud.kv\",\n space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")),\n path: capability.resource.slice(capability.resource.indexOf(\"/kv/\") + 4),\n actions: [...capability.actions],\n caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource },\n }));\n}\n\ntype PolicyOptions = Pick<AddressedSharePublishOptions, \"expiresAt\" | \"contentSource\" | \"credentialRequirement\"> & {\n readonly authority: Pick<AddressedPublishAuthority, \"ownerDid\" | \"sign\">;\n};\n\nasync function createPolicy(options: PolicyOptions, capabilities: readonly UnifiedPolicyCapability[]): Promise<{ readonly policy: UnifiedPolicy; readonly policyCid: string; readonly policyDigestHex: string }> {\n const fields = {\n ownerDid: options.authority.ownerDid,\n createdAt: rfc3339Seconds(new Date()),\n expiresAt: rfc3339Seconds(options.expiresAt),\n contentSource: options.contentSource,\n capabilityCeiling: [...capabilities],\n };\n const unsigned = options.credentialRequirement === undefined\n ? { schema: \"xyz.tinycloud.policy/policy/v1\" as const, ...fields }\n : { schema: \"xyz.tinycloud.policy/policy/v2\" as const, ...fields, credentialRequirement: options.credentialRequirement };\n const domain = options.credentialRequirement === undefined ? POLICY_V1_DOMAIN : POLICY_V2_DOMAIN;\n const policyDigestHex = digestHex(unsigned, domain);\n const signature = await options.authority.sign(sha256(textEncoder.encode(`${domain}${canonicalize(unsigned)}`)));\n if (signature.byteLength !== 64) throw new TypeError(\"policy signature must be Ed25519\");\n const policy = {\n ...unsigned,\n policyId: `pol_${base32Lower(Uint8Array.from(policyDigestHex.match(/../g)!, (byte) => Number.parseInt(byte, 16)))}`,\n signature: { suite: \"Ed25519\" as const, signerDid: options.authority.ownerDid, value: toBase64Url(signature) },\n } satisfies UnifiedPolicy;\n return { policy, policyCid: await computeCid(textEncoder.encode(canonicalize(policy))), policyDigestHex };\n}\n\n/** What an addressed share derives from its own inputs, before any write: the capability ceiling and the digests the owner roots commit to. */\nfunction addressedPlan(options: Pick<AddressedSharePublishOptions, \"resource\" | \"contentSource\" | \"policyActions\" | \"expiresAt\">) {\n const capabilities = sortCanonical<UnifiedPolicyCapability>([\n { kind: \"kv\", resource: options.contentSource.kvResource, selector: options.resource.kind, actions: [...options.policyActions] },\n // Only this share's one key: there is no network-scope capability.\n { kind: \"encryption\", resource: `${options.contentSource.encryptionNetwork}/${options.contentSource.encryptionKeyPath}`, action: \"tinycloud.encryption/decrypt\" },\n ]);\n return {\n expiry: rfc3339Seconds(options.expiresAt),\n capabilities,\n contentSourceDigestHex: digestHex(options.contentSource, CONTENT_SOURCE_V1_DOMAIN),\n capabilityCeilingHashHex: digestHex(capabilities, POLICY_CAPABILITY_V1_DOMAIN),\n nativeProjectionHashHex: digestHex(nativeProjection(capabilities), NATIVE_PROJECTION_V1_DOMAIN),\n };\n}\n\ntype EnvelopeInputs = Pick<AddressedSharePublishOptions, \"shareId\" | \"nodeOrigin\" | \"spaceId\" | \"actions\" | \"resource\" | \"contentSource\" | \"deliveryEmail\" | \"filename\" | \"mediaType\" | \"byteLength\" | \"artifact\" | \"artifactPin\">;\n\n/**\n * The unsigned v3 envelope. The publish and the size bound both build it here,\n * so the bound measures the serialization the publish seals.\n */\nfunction unsignedAddressedEnvelope(input: {\n readonly options: EnvelopeInputs;\n readonly matcher: OwnerShareMatcher;\n readonly policy: UnifiedPolicy;\n readonly policyCid: string;\n readonly policyRoot: UnifiedRoot;\n readonly enforcementRoot: UnifiedRoot;\n readonly attestedEnforcerBinding: AddressedPolicyRegistrationReceipt[\"attestedEnforcerBinding\"];\n readonly contentSourceDigestHex: string;\n readonly expiry: string;\n}): UnsignedShareEnvelopeV3 {\n const { options } = input;\n return {\n version: 3 as const, shareId: options.shareId, recipientMatcher: input.matcher,\n ...(options.deliveryEmail === undefined ? {} : { deliveryEmail: options.deliveryEmail }),\n actions: [...options.actions], resource: { ...options.resource },\n target: { origin: options.nodeOrigin, nodeAudience: input.attestedEnforcerBinding.enforcerDid, spaceId: options.spaceId },\n policy: input.policy, policyCid: input.policyCid, policyRoot: input.policyRoot, enforcementRoot: input.enforcementRoot,\n attestedEnforcerBinding: input.attestedEnforcerBinding, contentSource: options.contentSource,\n contentSourceDigestHex: input.contentSourceDigestHex, encryptionNetwork: options.contentSource.encryptionNetwork, expiry: input.expiry,\n display: { filename: options.filename }, encrypted: true as const,\n metadata: {\n mediaType: options.mediaType, byteLength: options.byteLength, filename: options.filename,\n ...(options.mediaType.startsWith(\"text/\") ? { encoding: \"utf-8\" as const } : {}),\n ...(options.artifact === undefined ? {} : { artifact: options.artifact }),\n },\n ...(options.artifactPin === undefined ? {} : { artifactPin: options.artifactPin }),\n };\n}\n\nfunction signedAddressedEnvelope(unsigned: UnsignedShareEnvelopeV3, signerDid: string, signature: Uint8Array): ShareEnvelopeV3 {\n return { ...unsigned, signature: { signerDid, algorithm: \"Ed25519\", value: toBase64Url(signature) } };\n}\n\nfunction publicationResult(input: {\n readonly options: AddressedSharePublishOptions;\n readonly url: string;\n readonly envelopeCid: string;\n readonly matcher: OwnerShareMatcher;\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly enforcerDid: string;\n readonly expiry: string;\n readonly deliveryMaterial: PublishedShareDeliveryMaterial;\n}): PublishedShare {\n const result = {\n protocol: \"tinycloud-share\", version: SHARE_PUBLISH_RESULT_VERSION, url: input.url,\n link: { kind: \"policy\" as const, cid: input.envelopeCid },\n metadata: {\n protocol: \"tinycloud-share\" as const, version: 1 as const, shareId: input.options.shareId,\n origin: input.options.shareOrigin,\n target: { kind: targetKind(input.options.target), origin: input.options.nodeOrigin, nodeAudience: input.enforcerDid, spaceId: input.options.spaceId },\n resource: { ...input.options.resource }, actions: [...input.options.actions], expiresAt: input.expiry,\n display: { filename: input.options.filename }, recipientMatcher: { ...input.matcher }, policyCid: input.policyCid,\n ownerDelegationCid: input.policyRootCid, enforcementDelegationCid: input.enforcementRootCid,\n ownerDid: input.options.authority.ownerDid, enforcerDid: input.enforcerDid, envelopeCid: input.envelopeCid, shareCid: input.envelopeCid,\n },\n } satisfies PublishedShare;\n Object.defineProperty(result, \"toJSON\", { enumerable: false, value: () => redactPublishedShare(result) });\n Object.defineProperty(result, \"url\", { enumerable: false, value: input.url });\n Object.defineProperty(result, \"deliveryMaterial\", { enumerable: false, value: input.deliveryMaterial });\n return result;\n}\n\n/**\n * Mailbox-addressed shares are opened by proving the mailbox to\n * OpenCredentials, so their policy must commit to that credential (Policy/v2).\n * The receiving SDK recomputes the requirement from the envelope's recipient\n * matcher and refuses any share whose commitment differs, so the commitment\n * is derived here from the same normalized target rather than trusted from\n * the caller. A domain share admits every mailbox at the domain; its access\n * and delivery are the owner's choice, as for exact-email shares.\n */\nconst EMAIL_PROFILE = { id: \"tinycloud.email-proof/v1\", version: 1 } as const;\nconst EMAIL_DOMAIN_PROFILE = { id: \"tinycloud.email-domain-proof/v1\", version: 1 } as const;\nconst EMAIL_CREDENTIAL_TYPE = { id: \"opencredentials.email/v1\", version: 1 } as const;\n/** Digests of the OpenCredentials descriptors (pinned by issuer and SDK tests). */\nconst EMAIL_DESCRIPTOR_DIGEST = \"1tg-qphmKBVtNwzVg9xyz-xxqt_xtMXAsQyXw46m8S0\";\nconst EMAIL_DOMAIN_DESCRIPTOR_DIGEST = \"33X5mAkZZgApdD3xh_T-3KS5moop0J2Nloi2nqWsdWY\";\nconst EMAIL_CREDENTIAL_ISSUER_DID = \"did:web:issuer.credentials.org\";\nconst EMAIL_CREDENTIAL_ISSUER_KID = `${EMAIL_CREDENTIAL_ISSUER_DID}#controller`;\n\ntype MailboxTarget = Extract<ShareTarget, { readonly kind: \"email\" | \"emailDomain\" }>;\n\nfunction mailboxCredentialCommitment(target: MailboxTarget): PolicyCredentialRequirementV1 {\n const profile = target.kind === \"email\" ? EMAIL_PROFILE : EMAIL_DOMAIN_PROFILE;\n // Field-for-field the requirement sdk-core's createEmail(Domain)CredentialRequirement builds on receive.\n const requirement = target.kind === \"email\"\n ? { type: \"TinyCloudCredentialRequirement\", version: 1, profile, credentialType: EMAIL_CREDENTIAL_TYPE, claims: { email: target.address }, maxAgeSeconds: 3600 }\n : { type: \"TinyCloudCredentialRequirement\", version: 1, profile, credentialType: EMAIL_CREDENTIAL_TYPE, claims: { emailDomain: target.domain }, maxAgeSeconds: 300 };\n return {\n type: \"TinyCloudPolicyCredentialRequirement\",\n version: 1,\n requirementDigest: toBase64Url(sha256(textEncoder.encode(canonicalize(requirement)))),\n descriptorDigest: target.kind === \"email\" ? EMAIL_DESCRIPTOR_DIGEST : EMAIL_DOMAIN_DESCRIPTOR_DIGEST,\n issuerDid: EMAIL_CREDENTIAL_ISSUER_DID,\n issuerKid: EMAIL_CREDENTIAL_ISSUER_KID,\n profile,\n credentialType: EMAIL_CREDENTIAL_TYPE,\n };\n}\n\n/** The Policy/v2 credential commitment a share addressed to `target` must carry. */\nexport function addressedCredentialRequirement(target: MailboxTarget): PolicyCredentialRequirementV1 {\n const normalized = normalizeShareTarget(target);\n if (normalized.kind !== \"email\" && normalized.kind !== \"emailDomain\") throw new TypeError(\"a mailbox target is required\");\n return mailboxCredentialCommitment(normalized);\n}\n\n/** Facts every addressed-share check needs, available before any side effect. */\nexport type AddressedShareRequest = Pick<AddressedSharePublishOptions, \"target\" | \"actions\" | \"policyActions\" | \"filename\" | \"deliveryEmail\">;\n\nexport interface PreparedAddressedShare {\n /** The canonical target the envelope's recipient matcher will carry. */\n readonly target: Exclude<ShareTarget, { readonly kind: \"bearer\" }>;\n /** Present for mailbox targets: the Policy/v2 commitment to pass to `publishAddressedShare`. */\n readonly credentialRequirement?: PolicyCredentialRequirementV1;\n}\n\n/**\n * Runs every argument and target check of `publishAddressedShare` that does\n * not depend on stored content, and derives the credential commitment. It has\n * no side effects, so senders call it before uploading content or publishing\n * a location record; a refused share then leaves nothing behind.\n */\nexport function prepareAddressedShare(request: AddressedShareRequest): PreparedAddressedShare {\n try {\n canonicalShareFilename(request.filename);\n } catch {\n throw new TypeError(\"addressed filename is invalid\");\n }\n if (request.actions.length === 0 || request.policyActions.length === 0) throw new TypeError(\"addressed share actions are empty\");\n if (request.policyActions.some((action) => !OWNER_SHARE_ACTIONS.has(action))) throw new TypeError(\"addressed share action is not supported\");\n // The envelope schema signs `deliveryEmail` only in a form deployed viewers\n // accept; refuse anything else before the caller uploads or registers.\n if (request.deliveryEmail !== undefined && !isEnvelopeDeliveryEmail(request.deliveryEmail)) throw new TypeError(\"delivery email is not a valid envelope address\");\n const target = normalizeShareTarget(request.target);\n if (target.kind === \"bearer\") throw new TypeError(\"addressed target is required\");\n if (target.kind === \"recipientDid\") return { target };\n // A domain link can be emailed to any number of mailboxes at the domain, so\n // it is normally not pinned to one. If the owner pins one, it must be the\n // issuer's lowercase mailbox at exactly that domain, the form the owner's\n // Node names in its delivery admission.\n if (target.kind === \"emailDomain\" && request.deliveryEmail !== undefined\n && (request.deliveryEmail !== request.deliveryEmail.toLowerCase() || !request.deliveryEmail.endsWith(`@${target.domain}`))) {\n throw new TypeError(\"email-domain delivery address must be a lowercase mailbox at the domain\");\n }\n return { target, credentialRequirement: mailboxCredentialCommitment(target) };\n}\n\nfunction assertMailboxCommitment(commitment: PolicyCredentialRequirementV1 | undefined, target: MailboxTarget): void {\n const label = target.kind === \"email\" ? \"email\" : \"email-domain\";\n // Without a commitment the policy would be Policy/v1, which no receiver can open.\n if (commitment === undefined) throw new TypeError(`${label} shares require a credential requirement`);\n const expected = mailboxCredentialCommitment(target);\n // Pin the profile, descriptor and issuer rather than trusting the caller:\n // only these derive the claim under the canonical mailbox rules.\n if (canonicalize(commitment.profile) !== canonicalize(expected.profile)\n || canonicalize(commitment.credentialType) !== canonicalize(expected.credentialType)\n || commitment.descriptorDigest !== expected.descriptorDigest\n || commitment.issuerDid !== expected.issuerDid\n || commitment.issuerKid !== expected.issuerKid) throw new TypeError(`${label} shares require the ${label} credential profile`);\n if (commitment.requirementDigest !== expected.requirementDigest) throw new TypeError(`credential requirement is not bound to the email ${target.kind === \"email\" ? \"address\" : \"domain\"}`);\n}\n\n/** Canonical application-neutral Policy/v3 addressed publisher shared by browser and CLI. */\nexport async function publishAddressedShare(input: AddressedSharePublishOptions): Promise<PublishedShare> {\n assertSafeInput(input);\n const { target } = prepareAddressedShare(input);\n // Refuse a share whose pin and source disagree (or an artifact source with no pin) before anything is registered.\n assertArtifactBinding({\n ...(input.artifactPin === undefined ? {} : { artifactPin: input.artifactPin }),\n target: { spaceId: input.spaceId },\n contentSource: input.contentSource,\n resource: input.resource,\n actions: input.actions,\n policyKvActions: input.policyActions,\n });\n // Envelope, result metadata and history all carry the viewer's NFC form.\n const options = { ...input, filename: canonicalShareFilename(input.filename) };\n if (target.kind !== \"recipientDid\") assertMailboxCommitment(options.credentialRequirement, target);\n const matcher = targetMatcher(target);\n const { expiry, capabilities, contentSourceDigestHex, capabilityCeilingHashHex, nativeProjectionHashHex } = addressedPlan(options);\n // The policy registration below is the first write. A share whose sealed envelope cannot fit in a link is refused before it.\n await assertSealedBodyFits({ ...options, matcher, ownerDid: options.authority.ownerDid });\n const created = await createPolicy(options, capabilities);\n const commonRoot = {\n ownerDid: options.authority.ownerDid, policyId: created.policy.policyId, policyDigestHex: created.policyDigestHex,\n policyCid: created.policyCid, contentSourceDigestHex, capabilityCeilingHashHex, nativeProjectionHashHex,\n notBefore: new Date(created.policy.createdAt), expiresAt: new Date(expiry), nodeAudience: options.nodeAudience, capabilities,\n };\n const policyRootReceipt = await options.authority.createOwnerRoot({ ...commonRoot, role: \"policy-authority\", audienceDid: `did:tinycloud:policy:${created.policyDigestHex}` });\n const enforcementRootReceipt = await options.authority.createOwnerRoot({ ...commonRoot, role: \"policy-enforcement\", audienceDid: options.enforcerDid });\n const policyRoot: UnifiedRoot = { cid: policyRootReceipt.cid, authorization: policyRootReceipt.delegationHeader.Authorization.replace(/^Bearer\\s+/i, \"\"), role: \"policy-authority\" };\n const enforcementRoot: UnifiedRoot = { cid: enforcementRootReceipt.cid, authorization: enforcementRootReceipt.delegationHeader.Authorization.replace(/^Bearer\\s+/i, \"\"), role: \"policy-enforcement\" };\n const registration = await options.authority.registerPolicy({\n policyCid: created.policyCid, policy: created.policy, policyRoot, enforcementRoot, contentSourceDigestHex,\n nativeProjectionHashHex, rootExpiresAt: expiry, enforcerDid: options.enforcerDid,\n expectedNodeAudience: options.nodeAudience,\n });\n if (registration.policyCid !== created.policyCid || registration.policyRootCid !== policyRoot.cid || registration.enforcementRootCid !== enforcementRoot.cid) throw new Error(\"Policy/v3 registration receipt is not bound to the published roots\");\n const unsigned = unsignedAddressedEnvelope({\n options, matcher, policy: created.policy, policyCid: created.policyCid, policyRoot, enforcementRoot,\n attestedEnforcerBinding: registration.attestedEnforcerBinding, contentSourceDigestHex, expiry,\n });\n unsignedShareEnvelopeV3Schema.parse(unsigned);\n const envelopeSignature = await options.authority.sign(sha256(textEncoder.encode(`${ENVELOPE_V3_DOMAIN}${canonicalize(unsigned)}`)));\n if (envelopeSignature.byteLength !== 64) throw new TypeError(\"v3 envelope signature must be Ed25519\");\n const envelope = signedAddressedEnvelope(unsigned, options.authority.ownerDid, envelopeSignature);\n shareEnvelopeV3Schema.parse(envelope);\n const envelopeBytes = textEncoder.encode(canonicalize(envelope));\n // The recipient envelope carries email and policy metadata. Seal it before\n // assigning its CID or constructing a URL: neither metadata nor the key\n // may occur in a query parameter or any other loggable URL component.\n const envelopeKeyBytes = generateKey();\n const sealed = await seal(envelopeBytes, envelopeKeyBytes);\n const envelopeKey = toBase64Url(envelopeKeyBytes);\n // The real check, on the sealed body itself, before any link is built or the header is signed. The caller removes what the\n // registration above wrote (see `AddressedShareOverLimitError`).\n if (sealed.blob.length > await linkBodyLimit()) {\n throw new AddressedShareOverLimitError({ policyCid: created.policyCid, policyRootCid: policyRoot.cid, enforcementRootCid: enforcementRoot.cid });\n }\n // The link this publisher returns is the full `v=4` link: the signed record rides in the fragment, so it works\n // with no service. The header is signed by the key that signs the envelope (the envelope's signer is the issuer\n // every reader binds the record to). A caller that wants a short link posts `deliveryMaterial` with `createLink`.\n const links = await import(\"@tinycloud/share-envelope/links\");\n const { record } = await links.prepareLinkRecord({\n type: \"share\",\n sealed: { blob: sealed.blob, key: envelopeKeyBytes },\n issuerKey: { did: options.authority.ownerDid, sign: (digest) => options.authority.sign(digest) },\n apiOrigin: options.apiOrigin ?? links.DEFAULT_LINKS_API_ORIGIN,\n expiresAt: new Date(expiry),\n enforceServiceLife: false,\n });\n const url = links.buildFullLink({ origin: options.shareOrigin, key: envelopeKeyBytes, record });\n const deliveryMaterial = {\n envelope,\n shareCid: sealed.cid,\n sealedEnvelope: toBase64Url(sealed.blob),\n envelopeKey,\n };\n options.onDeliveryMaterial?.(deliveryMaterial);\n return publicationResult({\n options, url, envelopeCid: sealed.cid, matcher, policyCid: created.policyCid,\n policyRootCid: policyRoot.cid, enforcementRootCid: enforcementRoot.cid,\n enforcerDid: registration.attestedEnforcerBinding.enforcerDid,\n expiry, deliveryMaterial,\n });\n}\n\n/** The text a share gets when its sealed envelope cannot fit in a link. */\nexport const ADDRESSED_SHARE_TOO_LARGE_MESSAGE = \"This share is too large to send as a link, so nothing was shared. Use a shorter path or fewer folders.\";\n\n/** What a publish has written by the time its sealed envelope is measured. */\nexport interface AddressedShareWrites {\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n}\n\n/**\n * Thrown by `publishAddressedShare` when the sealed envelope, measured after\n * the policy registration, is over `MAX_LINK_BODY_BYTES`. The size bound makes\n * this unreachable for a correct caller; if it happens, `written` names what\n * the publish registered so the caller can remove it. No link was built.\n */\nexport class AddressedShareOverLimitError extends SharePublishError {\n constructor(readonly written: AddressedShareWrites) {\n super(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n this.name = \"AddressedShareOverLimitError\";\n }\n}\n\n/** The links module loads on demand, so the limit is read from it when a check runs. */\nasync function linkBodyLimit(): Promise<number> {\n return (await import(\"@tinycloud/share-envelope/links\")).MAX_LINK_BODY_BYTES;\n}\n\n/** Longest string an authority returns as the CID of an owner root. A blake3 CIDv1 is 59 characters; the bound leaves room for any multibase CID. */\nconst ROOT_CID_BOUND_CHARS = 128;\n/** Longest RFC 3339 timestamp a node may return: nine fractional digits and a numeric offset. */\nconst NODE_TIMESTAMP_BOUND = \"2026-01-01T00:00:00.123456789+00:00\";\n/** An Ed25519 DID key is 56 characters. */\nconst ED25519_DID_KEY_CHARS = 56;\n\n/**\n * The compact-UCAN owner root as the authority signs it (sdk-core\n * `signCompactUcanRootAuthorization`), with every value the signing writes at\n * its widest: 16-digit times, a 36-character nonce (a UUID; the node SDK uses 22), a 64-byte signature.\n */\nfunction rootAuthorizationBound(input: {\n readonly ownerDid: string;\n readonly role: UnifiedRoot[\"role\"];\n readonly audienceDid: string;\n readonly policyId: string;\n readonly policyDigestHex: string;\n readonly policyCid: string;\n readonly contentSourceDigestHex: string;\n readonly capabilityCeilingHashHex: string;\n readonly nativeProjectionHashHex: string;\n readonly nodeAudience: string;\n readonly capabilities: readonly UnifiedPolicyCapability[];\n}): string {\n const attenuation: Record<string, unknown> = {};\n for (const capability of input.capabilities) {\n attenuation[capability.resource] = capability.kind === \"encryption\"\n ? { [capability.action]: [{}] }\n : Object.fromEntries(capability.actions.map((action) => [action, [{ type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource }]]));\n }\n const facts = {\n role: input.role,\n mode: input.role === \"policy-authority\" ? \"policy-source\" : \"conditional-mint\",\n ownerDid: input.ownerDid,\n policyId: input.policyId,\n policyDigestHex: input.policyDigestHex,\n policyCid: input.policyCid,\n contentSourceDigestHex: input.contentSourceDigestHex,\n capabilityCeilingHashHex: input.capabilityCeilingHashHex,\n nativeProjectionHashHex: input.nativeProjectionHashHex,\n nodeAudience: input.nodeAudience,\n ...(input.role === \"policy-enforcement\" ? { enforcerDid: input.audienceDid } : {}),\n };\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: \"A\".repeat(43) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: attenuation,\n aud: input.audienceDid,\n exp: Number.MAX_SAFE_INTEGER,\n fct: [facts],\n iss: `${input.ownerDid}#${input.ownerDid.slice(\"did:key:\".length)}`,\n nbf: Number.MAX_SAFE_INTEGER,\n nnc: \"A\".repeat(36),\n prf: [] as string[],\n };\n return `${toBase64Url(textEncoder.encode(canonicalize(header)))}.${toBase64Url(textEncoder.encode(canonicalize(payload)))}.${\"A\".repeat(86)}`;\n}\n\ntype BoundOptions = EnvelopeInputs\n & Pick<AddressedSharePublishOptions, \"nodeAudience\" | \"enforcerDid\" | \"policyActions\" | \"credentialRequirement\" | \"expiresAt\">\n & { readonly matcher: OwnerShareMatcher; readonly ownerDid: string };\n\n/**\n * An upper bound on the sealed envelope of an addressed share, in bytes. It\n * builds the envelope through the same serializer as the publish, from the\n * share's own inputs, with every value a write returns at its maximum encoded\n * length: the root and registration identifiers, the root authorizations\n * (times, nonce, signature), the enforcer's attestation, and all signatures.\n * It seals that envelope with a throwaway key.\n */\nasync function sealedBodyUpperBound(options: BoundOptions): Promise<number> {\n const plan = addressedPlan(options);\n const signature = new Uint8Array(64);\n const created = await createPolicy({ ...options, authority: { ownerDid: options.ownerDid, sign: async () => signature } }, plan.capabilities);\n const common = {\n ownerDid: options.ownerDid, policyId: created.policy.policyId, policyDigestHex: created.policyDigestHex, policyCid: created.policyCid,\n contentSourceDigestHex: plan.contentSourceDigestHex, capabilityCeilingHashHex: plan.capabilityCeilingHashHex,\n nativeProjectionHashHex: plan.nativeProjectionHashHex, nodeAudience: options.nodeAudience, capabilities: plan.capabilities,\n };\n const policyRoot: UnifiedRoot = {\n cid: \"b\".repeat(ROOT_CID_BOUND_CHARS), role: \"policy-authority\",\n authorization: rootAuthorizationBound({ ...common, role: \"policy-authority\", audienceDid: `did:tinycloud:policy:${created.policyDigestHex}` }),\n };\n const enforcementRoot: UnifiedRoot = {\n cid: \"b\".repeat(ROOT_CID_BOUND_CHARS), role: \"policy-enforcement\",\n authorization: rootAuthorizationBound({ ...common, role: \"policy-enforcement\", audienceDid: options.enforcerDid }),\n };\n const nodeDid = options.enforcerDid.padEnd(ED25519_DID_KEY_CHARS, \"z\");\n const unsigned = unsignedAddressedEnvelope({\n options, matcher: options.matcher, policy: created.policy, policyCid: created.policyCid, policyRoot, enforcementRoot,\n attestedEnforcerBinding: {\n schema: \"xyz.tinycloud.policy/attested-enforcer/v2\", enforcerDid: nodeDid, nodeAudience: nodeDid,\n attestationBindingDigestHex: \"f\".repeat(64), issuedAt: NODE_TIMESTAMP_BOUND, expiresAt: NODE_TIMESTAMP_BOUND,\n signature: { suite: \"Ed25519\", signerDid: nodeDid, value: \"A\".repeat(86) },\n },\n contentSourceDigestHex: plan.contentSourceDigestHex, expiry: plan.expiry,\n });\n const envelope = signedAddressedEnvelope(unsigned, options.ownerDid, signature);\n return (await seal(textEncoder.encode(canonicalize(envelope)), generateKey())).blob.length;\n}\n\nasync function assertSealedBodyFits(options: BoundOptions): Promise<void> {\n if (await sealedBodyUpperBound(options) > await linkBodyLimit()) throw new SharePublishError(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n}\n\n/** What a sender knows before any write; see {@link addressedShareBodyUpperBound}. */\nexport interface AddressedShareBoundInput extends AddressedShareRequest {\n readonly shareId: string;\n readonly ownerDid: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n readonly enforcerDid: string;\n readonly spaceId: string;\n readonly resource: { readonly kind: \"exact\" | \"prefix\" };\n /** Where the content will be stored: a path, or the id and stored file name of an artifact (whose version number the publish assigns). */\n readonly storage: { readonly path: string } | { readonly artifactId: string; readonly storageName: string };\n /** The owner's encryption network for the space. */\n readonly encryptionNetwork: string;\n /** Optional and redundant: the path is always `share/<shareId>`. A different value is refused. */\n readonly encryptionKeyPath?: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly artifact?: \"html\";\n readonly expiresAt: Date;\n}\n\n/**\n * The largest sealed envelope a share can have, in bytes, computed before any\n * write (upload, registration, registry or KV write): the same envelope the\n * publish builds, with every value a write returns at its maximum encoded\n * length (see `sealedBodyUpperBound`). Compare it with `MAX_LINK_BODY_BYTES`.\n * For an artifact share the version, the manifest digest and the stored size\n * are taken at their largest.\n */\nexport async function addressedShareBodyUpperBound(input: AddressedShareBoundInput): Promise<number> {\n // The requirement and the delivery address are derived exactly as the publish derives them, so the bound carries\n // every field the sealed envelope can: a caller cannot leave one out, and a mailbox target always has its commitment.\n const { target, credentialRequirement } = prepareAddressedShare(input);\n const deliveryEmail = input.deliveryEmail ?? (target.kind === \"email\" && isEnvelopeDeliveryEmail(target.address) ? target.address : undefined);\n const artifactStorage = \"artifactId\" in input.storage ? input.storage : undefined;\n const path = \"path\" in input.storage\n ? input.storage.path\n : `${ARTIFACT_ROOT}/${input.storage.artifactId}/versions/${Number.MAX_SAFE_INTEGER}/${input.storage.storageName}`;\n const keyPath = pathBoundKeyPath(input.shareId);\n assertEncryptionNetwork(input.encryptionNetwork);\n if (input.encryptionKeyPath !== undefined && input.encryptionKeyPath !== keyPath) throw new AddressedContentSourceError(\"key-path-mismatch\", \"addressed content source key path must be share/<shareId> of this share\");\n const contentSource: PathBoundContentSource = {\n shareId: input.shareId, kvResource: `${input.spaceId}/kv/${path}`, selector: input.resource.kind, encryptionNetwork: input.encryptionNetwork,\n encryptionKeyPath: keyPath,\n encryptedSymmetricKeyDigestHex: \"f\".repeat(64), keyVersion: Number.MAX_SAFE_INTEGER, mode: \"immutable\", initialCiphertextDigestHex: \"f\".repeat(64),\n };\n const artifactPin: ArtifactPin | undefined = artifactStorage === undefined ? undefined : {\n v: 1, artifactId: artifactStorage.artifactId, version: Number.MAX_SAFE_INTEGER, manifestSha256: \"f\".repeat(64),\n files: [{ path: artifactStorage.storageName, sha256: \"f\".repeat(64), bytes: Number.MAX_SAFE_INTEGER }],\n };\n return sealedBodyUpperBound({\n shareId: input.shareId, nodeOrigin: input.nodeOrigin, nodeAudience: input.nodeAudience, enforcerDid: input.enforcerDid, spaceId: input.spaceId,\n actions: input.actions, policyActions: input.policyActions, resource: { kind: input.resource.kind, path },\n contentSource, ...(artifactPin === undefined ? {} : { artifactPin }),\n ...(credentialRequirement === undefined ? {} : { credentialRequirement }),\n ...(deliveryEmail === undefined ? {} : { deliveryEmail }),\n ...(input.artifact === undefined ? {} : { artifact: input.artifact }),\n filename: canonicalShareFilename(input.filename), mediaType: input.mediaType, byteLength: input.byteLength, expiresAt: input.expiresAt,\n matcher: targetMatcher(target), ownerDid: input.ownerDid,\n });\n}\n\n/** Refuses (`SharePublishError`, code `max-bytes-exceeded`, {@link ADDRESSED_SHARE_TOO_LARGE_MESSAGE}) a share whose largest sealed envelope is over `MAX_LINK_BODY_BYTES`. Call it before any write. */\nexport async function assertAddressedShareFits(input: AddressedShareBoundInput): Promise<void> {\n if (await addressedShareBodyUpperBound(input) > await linkBodyLimit()) throw new SharePublishError(\"max-bytes-exceeded\", ADDRESSED_SHARE_TOO_LARGE_MESSAGE);\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { canonicalize, fromBase64Url, type UnifiedContentSource } from \"@tinycloud/share-envelope\";\n\n/**\n * Path-bound addressed content (TC-2242). An addressed share encrypts its content under ONE named key,\n * `share/<shareId>` on the owner's default encryption network, and registers that key's wrapped-key digest. The node\n * refuses a new registration without both (`content-source-key-path-required`, `content-source-key-digest-required`) and\n * opens only that one key, never the network. This module is the single place that derives the path, validates the\n * network, serializes the stored envelope and computes the digests, so no consumer hand-writes any of them.\n *\n * Call sequence: `planPathBoundShare` (before anything is written) -> the caller holds the plan's `requiredPermissions`\n * -> `encryptAddressedShareContent` (or the caller's own `keys.createKey` + `keys.encrypt`) -> upload `storedBytes` ->\n * `bindPathBoundContentSource` -> `publishAddressedShare`.\n */\n\nexport type AddressedContentSourceErrorCode =\n | \"share-id-invalid\"\n | \"network-invalid\"\n | \"network-not-checksummed\"\n | \"key-path-required\"\n | \"key-path-mismatch\"\n | \"digest-invalid\"\n | \"key-not-authorized\"\n | \"key-receipt-mismatch\"\n | \"envelope-invalid\"\n | \"stored-bytes-mismatch\";\n\n/** A path-bound source could not be planned, built or accepted. Match on `code`, not the message or `instanceof`. */\nexport class AddressedContentSourceError extends TypeError {\n readonly code: AddressedContentSourceErrorCode;\n constructor(code: AddressedContentSourceErrorCode, message: string) {\n super(message);\n this.name = \"AddressedContentSourceError\";\n this.code = code;\n }\n}\n\n/**\n * The content source of an addressed share: a `UnifiedContentSource` that is bound to its one key. **Build it ONLY with\n * `bindPathBoundContentSource`.** The publisher can check the path, the digest's FORMAT and the network, but it cannot verify that the digest is the\n * raw-byte digest of the wrapped key (a hand-written literal that registers `encryptedSymmetricKeyHash`, the canonical hash of the base64 text, type-checks\n * and publishes, and no recipient or node will ever open it). No runtime brand is used, because two copies of this package must interoperate.\n */\nexport type PathBoundContentSource = UnifiedContentSource & {\n readonly encryptionKeyPath: string;\n readonly encryptedSymmetricKeyDigestHex: string;\n};\n\n/** The shape of a `PermissionEntry` (`@tinycloud/sdk-core`): hand it to `requestPermissions` or a manifest as is. */\nexport interface PathBoundPermissionEntry {\n service: \"tinycloud.encryption\";\n path: string;\n actions: string[];\n}\n\n// ONE share-id grammar, used by the plan, the key helper, the size bound and the publisher: the INTERSECTION of the node's key-path segment grammar\n// (key_id.rs valid_segment: first byte a lowercase letter or digit, then lowercase letters, digits, `.`, `_`, `-`; at most 64 bytes) and the\n// publisher's own id alphabet (no `.`). 16 is this SDK's minimum length. An id outside it is refused BEFORE a key is created.\nconst SHARE_ID = /^[a-z0-9][a-z0-9_-]{15,63}$/;\nconst NETWORK = /^urn:tinycloud:encryption:(.+):default$/;\nconst OWNER_PKH = /^did:pkh:eip155:([1-9][0-9]*):(0x[0-9a-fA-F]{40})$/;\nconst OWNER_KEY = /^did:key:[A-Za-z0-9]+$/;\nconst ENVELOPE_FIELDS = [\"v\", \"networkId\", \"keyPath\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"aad\", \"metadata\"];\nconst ENVELOPE_ALG = \"x25519-aes256gcm/v1\";\nconst HEX_DIGEST = /^[0-9a-f]{64}$/;\nconst BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst textEncoder = new TextEncoder();\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/** EIP-55 mixed-case form of an Ethereum address (the node's key and prefix resources require it). */\nfunction checksumAddress(address: string): string {\n const lower = address.toLowerCase().slice(2);\n const hash = keccak_256(textEncoder.encode(lower));\n let out = \"0x\";\n for (let index = 0; index < lower.length; index++) {\n const nibble = (hash[index >> 1]! >> (index % 2 === 0 ? 4 : 0)) & 0x0f;\n out += nibble >= 8 ? lower[index]!.toUpperCase() : lower[index]!;\n }\n return out;\n}\n\n/** The key path every addressed share is encrypted under: `share/<shareId>`. */\nexport function pathBoundKeyPath(shareId: string): string {\n if (typeof shareId !== \"string\" || !SHARE_ID.test(shareId)) {\n throw new AddressedContentSourceError(\"share-id-invalid\", \"addressed share id is invalid: 16 to 64 characters from lowercase letters, digits, '_' and '-', starting with a letter or digit (a lowercase UUID, hyphens included, is valid)\");\n }\n return `share/${shareId}`;\n}\n\n/**\n * The owner's default encryption network URN with the EIP-55 checksummed address, which is the only spelling the node\n * accepts for key and prefix resources. Pure. Accepts the owner DID (`did:pkh:eip155:<chain>:<address>`, any case), or just the\n * owner's address (a string `0x...`, or `{ address, chainId? }`; chain id defaults to 1), so a caller never writes the spelling.\n */\nexport function defaultEncryptionNetworkForOwner(owner: string | { readonly address: string; readonly chainId?: number }): string {\n let did: unknown = owner;\n const address = typeof owner === \"string\" ? (/^0x[0-9a-fA-F]{40}$/.test(owner) ? owner : undefined) : owner?.address;\n if (address !== undefined) {\n const chainId = typeof owner === \"string\" ? 1 : owner.chainId ?? 1;\n if (typeof address !== \"string\" || !/^0x[0-9a-fA-F]{40}$/.test(address) || !Number.isSafeInteger(chainId) || chainId < 1) {\n throw new AddressedContentSourceError(\"network-invalid\", \"owner address is not an Ethereum address\");\n }\n did = `did:pkh:eip155:${chainId}:${address}`;\n }\n const pkh = typeof did === \"string\" ? OWNER_PKH.exec(did) : null;\n const normalized = pkh === null ? did : `did:pkh:eip155:${pkh[1]}:${checksumAddress(pkh[2]!)}`;\n const network = `urn:tinycloud:encryption:${String(normalized)}:default`;\n if (typeof normalized !== \"string\" || !(pkh !== null || OWNER_KEY.test(normalized))) {\n throw new AddressedContentSourceError(\"network-invalid\", \"owner does not name an encryption network\");\n }\n return network;\n}\n\n/**\n * The strict form of the owner's default encryption network: `urn:tinycloud:encryption:<owner>:default` with `<owner>` either\n * `did:pkh:eip155:<chain, no leading zero>:<0x + 40 hex, EIP-55 checksummed>` or `did:key:<alphanumeric, no `:`>`. Anything else (another\n * network name, an extra `:` segment, a lower-cased or `0X` address, another DID method) is refused with a specific code.\n */\nexport function assertEncryptionNetwork(network: unknown): string {\n const match = typeof network === \"string\" ? NETWORK.exec(network) : null;\n if (match === null) {\n throw new AddressedContentSourceError(\"network-invalid\", \"encryption network must be the owner's default network: urn:tinycloud:encryption:<did>:default\");\n }\n const owner = match[1]!;\n const pkh = OWNER_PKH.exec(owner);\n if (pkh !== null) {\n if (pkh[2] !== checksumAddress(pkh[2]!)) {\n throw new AddressedContentSourceError(\"network-not-checksummed\", \"encryption network address must be EIP-55 checksummed; use defaultEncryptionNetworkForOwner(ownerDid)\");\n }\n } else if (!OWNER_KEY.test(owner)) {\n throw new AddressedContentSourceError(\"network-invalid\", \"encryption network owner must be a did:pkh:eip155 address or a did:key\");\n }\n return network as string;\n}\n\nconst assertNetwork = assertEncryptionNetwork;\n\nfunction decodeWrappedKey(encryptedSymmetricKey: unknown): Uint8Array {\n if (typeof encryptedSymmetricKey !== \"string\" || !BASE64.test(encryptedSymmetricKey)) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"wrapped content key is not strict base64\");\n }\n try {\n // The shared strict decoder also rejects nonzero trailing pad bits.\n return fromBase64Url(encryptedSymmetricKey.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"wrapped content key is not strict base64\");\n }\n}\n\n/** Strict base64 (padded, standard alphabet, zero trailing pad bits), as the recipient decodes; throws `envelope-invalid`. */\nfunction decodeBase64(value: string): Uint8Array {\n try {\n return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope field is not strict base64\");\n }\n}\n\n/** The digest a path-bound source registers: SHA-256 of the DECODED wrapped-key bytes (the node and the recipient compare exactly this). */\nexport function wrappedKeyDigestHex(encryptedSymmetricKey: string): string {\n return hex(sha256(decodeWrappedKey(encryptedSymmetricKey)));\n}\n\nfunction canonicalKeyHashHex(encryptedSymmetricKey: string): string {\n return hex(sha256(textEncoder.encode(canonicalize(encryptedSymmetricKey))));\n}\n\n/** What a consumer needs to encrypt, upload and bind one addressed share's content. */\nexport interface PathBoundSharePlan {\n readonly shareId: string;\n readonly encryptionNetwork: string;\n /** `share/<shareId>`: the named key the content is encrypted under. */\n readonly keyPath: string;\n /** `<network>/share/<shareId>`: the one decrypt resource the share grants. */\n readonly keyResource: string;\n /**\n * ROUTE A, per share at runtime: `key.create` on exactly this share's key, requested with `requestPermissions` before the key is created\n * (one extra consent per share). For apps that cannot use the sign-in route (for example apps whose sign-in goes through the OpenKey widget\n * `authorizeTinyCloud` route, which refuses decrypt and key.create outside `apps/`).\n */\n readonly requiredPermissions: PathBoundPermissionEntry[];\n /**\n * ROUTE B, once at sign-in (manifest entries): `key.create` and `decrypt` on the default network's `<network>/share/` prefix, so every share's\n * key can be created without a further prompt. Put these in the `permissions` of the manifest the owner signs in with.\n */\n readonly sessionPermissions: PathBoundPermissionEntry[];\n /** The owner session must hold these for the node to register the policy: decrypt under `<network>/share/` (also part of `sessionPermissions`). */\n readonly registrationPermissions: PathBoundPermissionEntry[];\n /** Options for `keys.encrypt(plan.keyPath, plaintext, plan.encryptOptions({ metadata }))`. */\n encryptOptions(extra?: { readonly metadata?: Readonly<Record<string, string>> }): { networkId: string; metadata?: Record<string, string> };\n}\n\n/**\n * The manifest entries (route B, sign-in) that let one session create every share's key: `decrypt` and `key.create` on the default network's\n * `<network>/share/` prefix. Needs no share id, so an app builds its manifest before any share exists. Put the result in `manifest.permissions`.\n */\nexport function pathBoundSessionPermissions(input: { readonly encryptionNetwork: string }): PathBoundPermissionEntry[] {\n const encryptionNetwork = assertNetwork(input.encryptionNetwork);\n return [{ service: \"tinycloud.encryption\", path: `${encryptionNetwork}/share/`, actions: [\"tinycloud.encryption/decrypt\", \"tinycloud.encryption/key.create\"] }];\n}\n\n/** Validate the share id and network and derive the key path and the permissions the share needs. Writes and signs nothing. */\nexport function planPathBoundShare(input: { readonly shareId: string; readonly encryptionNetwork: string }): PathBoundSharePlan {\n const keyPath = pathBoundKeyPath(input.shareId);\n const encryptionNetwork = assertNetwork(input.encryptionNetwork);\n const keyResource = `${encryptionNetwork}/${keyPath}`;\n return {\n shareId: input.shareId,\n encryptionNetwork,\n keyPath,\n keyResource,\n requiredPermissions: [{ service: \"tinycloud.encryption\", path: keyResource, actions: [\"tinycloud.encryption/key.create\"] }],\n sessionPermissions: pathBoundSessionPermissions({ encryptionNetwork }),\n registrationPermissions: [{ service: \"tinycloud.encryption\", path: `${encryptionNetwork}/share/`, actions: [\"tinycloud.encryption/decrypt\"] }],\n encryptOptions: (extra) => ({ networkId: encryptionNetwork, ...(extra?.metadata === undefined ? {} : { metadata: { ...extra.metadata } }) }),\n };\n}\n\n/** The v2 envelope a named key's `encrypt` returns: the fields this module reads. Every other field it returns (ciphertext, alg, aad, metadata) is kept in the stored bytes. */\nexport interface PathBoundEnvelope {\n readonly v: number;\n readonly networkId: string;\n readonly keyPath: string;\n readonly keyVersion: number;\n readonly encryptedSymmetricKey: string;\n readonly encryptedSymmetricKeyHash: string;\n}\n\n/** The exact bytes to upload: the canonical JSON of the v2 envelope. Nothing else is stored. */\nexport function pathBoundStoredBytes(envelope: PathBoundEnvelope): Uint8Array {\n return textEncoder.encode(canonicalize(envelope as unknown as Record<string, unknown>));\n}\n\nfunction assertEnvelope(plan: PathBoundSharePlan, envelope: PathBoundEnvelope): void {\n if (envelope === null || typeof envelope !== \"object\" || envelope.v !== 2) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"path-bound content must be a v2 named-key envelope (encrypt with keys.encrypt, not encryptToNetwork)\");\n }\n if (envelope.networkId !== plan.encryptionNetwork || envelope.keyPath !== plan.keyPath) {\n throw new AddressedContentSourceError(\"key-path-mismatch\", \"envelope network or key path does not match the share's plan\");\n }\n if (!Number.isSafeInteger(envelope.keyVersion) || envelope.keyVersion < 1) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope key version is invalid\");\n }\n wrappedKeyDigestHex(envelope.encryptedSymmetricKey);\n if (envelope.encryptedSymmetricKeyHash !== canonicalKeyHashHex(envelope.encryptedSymmetricKey)) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope key hash does not match its wrapped key\");\n }\n // Mirror what the recipient checks before it opens the content (recipient.ts parseV3InlineEncryptedEnvelope), so a share it would refuse is\n // refused here, before the key's slot is spent on a share nobody can open.\n const record = envelope as unknown as Record<string, unknown>;\n if (Object.keys(record).some((key) => !ENVELOPE_FIELDS.includes(key)) || record.alg !== ENVELOPE_ALG) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope has a field or algorithm the recipient does not accept\");\n }\n if (typeof record.ciphertext !== \"string\" || !BASE64.test(record.ciphertext) || decodeBase64(record.ciphertext).length < 28) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope ciphertext is not strict base64 of at least 28 bytes\");\n }\n if (record.aad !== undefined && (typeof record.aad !== \"string\" || !BASE64.test(record.aad))) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope aad is not strict base64\");\n }\n if (record.metadata !== undefined && (record.metadata === null || typeof record.metadata !== \"object\" || Array.isArray(record.metadata) ||\n Object.values(record.metadata as Record<string, unknown>).some((entry) => typeof entry !== \"string\"))) {\n throw new AddressedContentSourceError(\"envelope-invalid\", \"envelope metadata must be an object of strings\");\n }\n}\n\n/**\n * The content source for an encrypted and uploaded share. `envelope` is what `keys.encrypt` returned, `storedBytes` the\n * exact bytes uploaded (`pathBoundStoredBytes(envelope)`), `kvResource` where they now live (`<space>/kv/<path>`).\n * Derives the path, the raw-byte wrapped-key digest, the ciphertext digest and the key version; nothing is taken on trust.\n */\nexport function bindPathBoundContentSource(input: {\n readonly plan: PathBoundSharePlan;\n readonly envelope: PathBoundEnvelope;\n readonly storedBytes: Uint8Array;\n readonly kvResource: string;\n readonly selector: \"exact\" | \"prefix\";\n}): PathBoundContentSource {\n const { plan, envelope } = input;\n assertEnvelope(plan, envelope);\n const expected = pathBoundStoredBytes(envelope);\n if (input.storedBytes.length !== expected.length || input.storedBytes.some((byte, index) => byte !== expected[index])) {\n throw new AddressedContentSourceError(\"stored-bytes-mismatch\", \"uploaded bytes are not the canonical v2 envelope; upload pathBoundStoredBytes(envelope)\");\n }\n return {\n shareId: plan.shareId,\n kvResource: input.kvResource,\n selector: input.selector,\n encryptionNetwork: plan.encryptionNetwork,\n encryptionKeyPath: plan.keyPath,\n encryptedSymmetricKeyDigestHex: wrappedKeyDigestHex(envelope.encryptedSymmetricKey),\n keyVersion: envelope.keyVersion,\n mode: \"immutable\",\n initialCiphertextDigestHex: hex(sha256(expected)),\n };\n}\n\n/** The part of a named-key client (`NamedKeyClient`, web `tcw.keys`, node `node.keys`) this module calls. */\nexport interface AddressedShareKeyClient {\n createKey(path: string, options: { networkId: string }): Promise<{ readonly networkId: string; readonly keyPath: string; readonly state?: string; readonly keyVersion?: number }>;\n encrypt(path: string, plaintext: Uint8Array, options: { networkId: string; metadata?: Record<string, string> }): Promise<PathBoundEnvelope>;\n}\n\n/** What `encryptAddressedShareContent` returns: the envelope and the exact bytes to upload. */\nexport interface EncryptedAddressedContent {\n readonly envelope: PathBoundEnvelope;\n readonly storedBytes: Uint8Array;\n readonly byteLength: number;\n}\n\nfunction isUnauthorized(error: unknown): boolean {\n const value = error as { readonly status?: unknown; readonly code?: unknown } | null;\n return value !== null && typeof value === \"object\" && (value.status === 401 || value.status === 403 || value.code === \"PERMISSION_DENIED\" || value.code === \"AUTH_UNAUTHORIZED\");\n}\n\n/**\n * Create the share's named key and encrypt the content under it. Built from the same steps a consumer may run itself\n * (`keys.createKey`, `keys.encrypt`, then `bindPathBoundContentSource`). The key-create capability in\n * `plan.requiredPermissions` must already be held; an unauthorized answer is reported as `key-not-authorized` naming it.\n */\nexport async function encryptAddressedShareContent(input: {\n readonly plan: PathBoundSharePlan;\n readonly keys: AddressedShareKeyClient;\n readonly plaintext: Uint8Array;\n readonly metadata?: Readonly<Record<string, string>>;\n}): Promise<EncryptedAddressedContent> {\n const { plan, keys } = input;\n // Read before encrypting: the caller owns the buffer and may zero it (`fill(0)`) as soon as this returns; it is never retained or transferred.\n const byteLength = input.plaintext.byteLength;\n let receipt;\n try {\n receipt = await keys.createKey(plan.keyPath, { networkId: plan.encryptionNetwork });\n } catch (error) {\n if (isUnauthorized(error)) {\n const status = (error as { readonly status?: unknown }).status;\n throw new AddressedContentSourceError(\n \"key-not-authorized\",\n `the owner session does not hold tinycloud.encryption/key.create on ${plan.keyResource} (the node answers \"Unauthorized Action: ${plan.keyResource} / tinycloud.encryption/key.create\"); hold it either at sign-in (put plan.sessionPermissions in the manifest: key.create on ${plan.encryptionNetwork}/share/) or per share (requestPermissions(plan.requiredPermissions)) before creating the key` +\n (status === 403 ? \"; if the owner signs in through OpenKey, the request must come from a first-party TinyCloud origin\" : \"\"),\n );\n }\n throw error;\n }\n if (receipt.networkId !== plan.encryptionNetwork || receipt.keyPath !== plan.keyPath || (receipt.state !== undefined && receipt.state !== \"active\")) {\n throw new AddressedContentSourceError(\"key-receipt-mismatch\", \"the created key does not match this share\");\n }\n const envelope = await keys.encrypt(plan.keyPath, input.plaintext, plan.encryptOptions(input.metadata === undefined ? undefined : { metadata: input.metadata }));\n assertEnvelope(plan, envelope);\n if (receipt.keyVersion !== undefined && envelope.keyVersion !== receipt.keyVersion) {\n throw new AddressedContentSourceError(\"key-receipt-mismatch\", \"the envelope key version does not match the created key\");\n }\n const storedBytes = pathBoundStoredBytes(envelope);\n return { envelope, storedBytes, byteLength };\n}\n\n/**\n * The publisher's gate: a content source must be bound to its own share's key, with a registered wrapped-key digest,\n * before anything is signed, registered or written. There is no network-scope fallback.\n */\nexport function assertPathBoundContentSource(source: Partial<UnifiedContentSource> | undefined, shareId: string): asserts source is PathBoundContentSource {\n if (source === undefined || source === null || typeof source !== \"object\") {\n throw new AddressedContentSourceError(\"key-path-required\", \"addressed content source is missing\");\n }\n if (source.encryptionKeyPath === undefined) {\n throw new AddressedContentSourceError(\"key-path-required\", \"addressed content source must name its key (encryptionKeyPath: share/<shareId>); a network-wide source is not accepted\");\n }\n if (source.encryptionKeyPath !== pathBoundKeyPath(shareId)) {\n throw new AddressedContentSourceError(\"key-path-mismatch\", \"addressed content source key path must be share/<shareId> of this share\");\n }\n if (typeof source.encryptedSymmetricKeyDigestHex !== \"string\" || !HEX_DIGEST.test(source.encryptedSymmetricKeyDigestHex)) {\n throw new AddressedContentSourceError(\"digest-invalid\", \"addressed content source needs encryptedSymmetricKeyDigestHex: 64 lowercase hex characters\");\n }\n assertEncryptionNetwork(source.encryptionNetwork);\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","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 { 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","import type { ShareAuthorizationRequired, ShareAuthorizationMethod } from \"./authorization.js\";\nimport { authorizationMethodForTarget } from \"./authorization.js\";\nimport { DEFAULT_SHARE_LIFETIME_MS, SharePublishError, SHARE_CONTENT_LIMIT, type PublishedShare, type SharePublishOptions, type SharePublishTarget } from \"./publish.js\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalMailbox, isCanonicalEmailDomain } from \"@tinycloud/share-envelope\";\nimport { canonicalShareFilename, hasUnsafeFilenameCodePoint } from \"./filename-policy.js\";\n\nexport type ShareTarget = SharePublishTarget;\n\nexport interface TargetPublishInput {\n readonly source: Uint8Array;\n readonly filename: string;\n readonly mediaType?: 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: ShareTarget;\n readonly expiresAt: Date;\n readonly expiryWasExplicit?: boolean;\n readonly origin: string;\n readonly resourceKind?: \"exact\" | \"prefix\";\n readonly actions?: readonly (\"read\" | \"list\" | \"edit\")[];\n readonly notify?: boolean;\n readonly credentialDescriptor?: unknown;\n readonly issuerDid?: string;\n readonly issuerKid?: string;\n /** Publish as the next write-once version of this artifact and pin the share to it (TC-1428). */\n readonly artifact?: { readonly id: string; readonly note?: string };\n}\n\nexport type TargetPublishOutcome = PublishedShare | ShareAuthorizationRequired;\n\nexport interface TargetPublishAdapter {\n publish(input: TargetPublishInput): Promise<TargetPublishOutcome>;\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 // The credential issuer accepts only the canonical (lowercase) mailbox and\n // domain, and receivers recompute the commitment from this matcher, so the\n // target is canonicalized here rather than kept as typed.\n if (target.kind === \"email\") {\n const mailbox = canonicalMailbox(target.address);\n if (mailbox === undefined) throw new TypeError(\"recipient email is invalid\");\n return { kind: target.kind, address: mailbox.email };\n }\n const domain = target.domain.toLowerCase();\n if (!isCanonicalEmailDomain(domain)) throw new TypeError(\"recipient email domain is invalid\");\n return { kind: target.kind, domain };\n}\n\nexport function targetAuthorizationMethod(target: ShareTarget): ShareAuthorizationMethod | undefined {\n return authorizationMethodForTarget(target);\n}\n\n/** The share viewer's filename rule, reported as a fixed `invalid-argument` reason. */\nfunction publishFilename(value: string): string {\n try {\n return canonicalShareFilename(value);\n } catch {\n throw new SharePublishError(\"invalid-argument\", hasUnsafeFilenameCodePoint(value)\n ? \"filename contains control or invisible characters\"\n : \"filename must be one safe path segment\");\n }\n}\n\n/** Route every share through the authenticated TinyCloud 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 readonly credentialDescriptor?: unknown;\n readonly issuerDid?: string;\n readonly issuerKid?: string;\n}): Promise<TargetPublishOutcome> {\n const target = normalizeShareTarget(input.target);\n const filename = publishFilename(input.filename);\n const files = input.files?.map((file) => ({ ...file, filename: publishFilename(file.filename) }));\n if (input.targetAdapter === undefined) {\n if (target.kind === \"bearer\") throw new SharePublishError(\"authority-required\", \"native bearer publication requires an authenticated TinyCloud node\");\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(\"share publication source yielded invalid bytes\");\n size += chunk.byteLength;\n if (size > (input.maxBytes ?? SHARE_CONTENT_LIMIT)) throw new SharePublishError(\"max-bytes-exceeded\", \"share 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 if (source.byteLength === 0) throw new SharePublishError(\"invalid-argument\", \"share content is empty\");\n if (target.kind === \"bearer\" && input.allowBinary !== true) {\n try { new TextDecoder(\"utf-8\", { fatal: true }).decode(source); }\n catch { throw new SharePublishError(\"invalid-argument\", \"Markdown input must be valid UTF-8\"); }\n }\n const publishFiles = files === undefined || files.length === 0\n ? [{ bytes: source }]\n : files;\n const limit = input.maxBytes ?? SHARE_CONTENT_LIMIT;\n let totalBytes = 0;\n for (const file of publishFiles) {\n totalBytes += file.bytes.byteLength;\n if (!Number.isSafeInteger(totalBytes) || totalBytes > limit) {\n throw new SharePublishError(\"max-bytes-exceeded\", \"share publication exceeds the combined byte limit\");\n }\n }\n const nowMs = input.now?.() ?? Date.now();\n const expiresAt = input.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 return input.targetAdapter.publish({\n source,\n filename,\n ...(files === undefined ? {} : { 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,\n expiryWasExplicit: input.expiryWasExplicit ?? input.expiresAt !== undefined,\n origin: input.origin,\n ...(input.notify === undefined ? {} : { notify: input.notify }),\n ...(input.credentialDescriptor === undefined ? {} : { credentialDescriptor: input.credentialDescriptor }),\n ...(input.issuerDid === undefined ? {} : { issuerDid: input.issuerDid }),\n ...(input.issuerKid === undefined ? {} : { issuerKid: input.issuerKid }),\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 { 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","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","/* 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 { DelegatedShareKey, OwnerShareAction, OwnerShareMatcher, OwnerSharePolicyRegistrationReceipt, SignedDelegation } from \"./owner-policy\";\nimport { restoreDelegatedShareKey } from \"./owner-policy\";\nimport type { PublishedShare, PublishedShareDeliveryMaterial } 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 /** Policy/v3 delivery material. The containing history record must remain encrypted at rest. */\n readonly deliveryMaterial?: PublishedShareDeliveryMaterial;\n /** Canonical mailboxes whose invitation delivery was confirmed; history is encrypted at rest. */\n readonly deliveredRecipients?: readonly string[];\n /**\n * `migrated`: imported once from a CLI's local history by the OWNER's\n * session (slice 5), at an owner-layout key `records/<shareId>`. Such a\n * record is exempt from the ±1-day `registeredAt` window and nothing else:\n * its chain is verified like an agent record's, it never ranks as a web\n * row, and it cannot override a revocation. A record claiming `migrated`\n * inside an agent subtree is rejected.\n */\n readonly provenance?: \"migrated\";\n /**\n * The signed chain behind every CID this record claims (TC-1432 C1), as\n * exact bytes. Agent records carry it so the owner's browser can verify\n * the chain without a node lookup. Policy/v3 records prove through\n * `deliveryMaterial.envelope` plus `session`.\n */\n readonly proofs?: SenderShareRecordProofs;\n}\n\nexport interface SenderShareRecordProofs {\n /** Owner→session SIWE CACAO (base64url DAG-CBOR) of the issuing session; absent when it is gone. */\n readonly session?: string;\n /** Native bearer link delegation (compact UCAN); its CID is `enforcementDelegationCid`. */\n readonly link?: string;\n /** Policy/v2 owner-policy chain: policy bytes (base64url), owner→share-key SIWE CACAO (base64url), enforcement delegation and node registration receipt. */\n readonly ownerPolicy?: string;\n readonly ownerDelegation?: string;\n readonly enforcementDelegation?: SignedDelegation;\n readonly registration?: OwnerSharePolicyRegistrationReceipt;\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.deliveryMaterial === undefined ? {} : { deliveryMaterial: result.deliveryMaterial }),\n ...(result.metadata.display.filename === undefined ? {} : { filename: result.metadata.display.filename }),\n };\n}\n\n/**\n * \"direct\" selects the Policy/v3 enforcement root; \"ancestor\" selects its\n * policy-authority sibling. Addressed shares revoke that signed root through\n * the Node Policy/v3 endpoint, which cuts off existing sessions as well as\n * fresh admission and delivery. Bearer shares retain ordinary delegation\n * revocation.\n */\nexport type SenderShareRevocationScope = \"direct\" | \"ancestor\";\n\nexport interface SenderShareRecordStorage {\n put(record: SenderShareRecord): Promise<void>;\n /** Atomically transform the latest record, if present. Implementations that\n * provide this must serialize the read and write with every other writer. */\n update?(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined>;\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 private operation: Promise<void> = Promise.resolve();\n\n private serialize<T>(action: () => Promise<T>): Promise<T> {\n const next = this.operation.then(action, action);\n this.operation = next.then(() => undefined, () => undefined);\n return next;\n }\n\n async put(record: SenderShareRecord): Promise<void> {\n return this.serialize(async () => { this.records.set(record.shareId, record); });\n }\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n return this.serialize(async () => {\n const current = this.records.get(shareId);\n if (current === undefined) return undefined;\n const updated = await change(current);\n this.records.set(shareId, updated);\n return updated;\n });\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 return this.serialize(async () => { 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 if (this.records.update !== undefined) {\n const updated = await this.records.update(shareId, (record) => ({ ...record, revokedAt }));\n if (updated === undefined) throw new Error(`Unknown share: ${shareId}`);\n return updated;\n }\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, canonicalMailbox, 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 readonly reason?: \"delivery-window-expired\";\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(\n message = \"share delivery did not complete\",\n readonly reason?: \"delivery-window-expired\",\n ) {\n super(message);\n this.name = \"ShareNotifyError\";\n }\n}\n\n/**\n * Match a delivery address against the recipient constraint recorded when the\n * share was created. Both sides compare in canonical mailbox form, which is\n * the only form the credential issuer accepts.\n */\nexport function recipientMatchesShareRecord(record: SenderShareRecord, recipient: string): boolean {\n const matcher = record.recipientMatcher;\n const mailbox = canonicalMailbox(recipient);\n if (mailbox === undefined) return false;\n if (matcher.kind === \"exactEmail\") return canonicalMailbox(matcher.value)?.email === mailbox.email;\n if (matcher.kind === \"emailDomain\") return mailbox.domain === matcher.value;\n return false;\n}\n/** The sender can authorize a fresh invitation only until this persisted deadline. */\nexport function shareDeliveryWindowExpiresAt(record: SenderShareRecord): number {\n const expiresAt = Math.min(Date.parse(record.expiresAt), Date.parse(record.registeredAt) + 5 * 60 * 1000);\n if (!Number.isFinite(expiresAt)) throw new ShareNotifyError(\"share delivery history has invalid timestamps\");\n return expiresAt;\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 /** Check the persisted delivery window locally before calling the adapter. */\n readonly checkDeliveryWindow?: boolean;\n}): Promise<ShareNotifyResult> {\n const mailbox = canonicalMailbox(input.recipient);\n if (!input.shareId || mailbox === undefined) throw new ShareNotifyError(\"recipient is invalid\");\n // Deliver to, match and key on the canonical mailbox: a typed `Foo@x.com`\n // is the same recipient as the stored `foo@x.com`.\n const recipient = mailbox.email;\n if (input.record !== undefined && !recipientMatchesShareRecord(input.record, recipient)) {\n throw new ShareNotifyError(\"recipient does not match the stored share target\");\n }\n const idempotencyKey = input.idempotencyKey ?? await defaultIdempotencyKey(input.shareId, recipient);\n const attemptsLimit = input.maxAttempts ?? 3;\n if (!Number.isSafeInteger(attemptsLimit) || attemptsLimit < 1 || attemptsLimit > 8) throw new ShareNotifyError(\"maxAttempts is invalid\");\n if (input.signal?.aborted) throw new ShareNotifyError(\"share delivery was cancelled\");\n if (input.checkDeliveryWindow && input.record !== undefined && shareDeliveryWindowExpiresAt(input.record) <= Date.now()) {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts: 1,\n retryable: false, reason: \"delivery-window-expired\",\n };\n }\n let attempts = 0;\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, idempotencyKey, ...(input.record === undefined ? {} : { record: input.record }), ...(input.signal === undefined ? {} : { signal: input.signal }) });\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: state === \"delivered\" && input.record?.deliveredRecipients?.includes(recipient) ? \"already-delivered\" : state,\n idempotencyKey, attempts,\n };\n } catch (error) {\n if (error instanceof ShareNotifyError && error.reason === \"delivery-window-expired\") {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts,\n retryable: false, reason: \"delivery-window-expired\",\n };\n }\n // A refused authorization (the node's HTTP 400 and 422 are one refusal, carrying this code) is final, like a 401 or 403.\n const refused = error !== null && typeof error === \"object\" && \"code\" in error && error.code === \"delivery-authorization-invalid\";\n if (refused || (error !== null && typeof error === \"object\" && \"status\" in error && (error.status === 401 || error.status === 403))) {\n return {\n protocol: \"tinycloud-share\", version: 1, shareId: input.shareId,\n state: \"partial-failure\", idempotencyKey, attempts, retryable: false,\n };\n }\n }\n }\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","\n/** The signed, app-neutral receipt accepted by OpenCredentials' invitation endpoint. */\nexport interface CredentialInvitationReceipt {\n readonly request: {\n readonly returnLink: string;\n readonly [field: string]: unknown;\n };\n readonly admission: Record<string, unknown>;\n readonly proof: Record<string, unknown>;\n}\n\nexport interface CredentialInvitationResult {\n readonly status: \"accepted\";\n}\n\nexport type CredentialInvitationErrorCode =\n | \"invalid-origin\"\n | \"invalid-receipt\"\n | \"rejected\"\n | \"invalid-response\"\n | \"transport\";\n\n/** A detail-free boundary error; it never embeds signed invitation material. */\nexport class CredentialInvitationError extends Error {\n constructor(\n readonly code: CredentialInvitationErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"CredentialInvitationError\";\n }\n}\n\nfunction canonicalOrigin(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new CredentialInvitationError(\n \"invalid-origin\",\n \"credential invitation origin is invalid\",\n );\n }\n if (\n url.origin !== value ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.search !== \"\" ||\n url.hash !== \"\" ||\n url.protocol !== \"https:\"\n )\n throw new CredentialInvitationError(\n \"invalid-origin\",\n \"credential invitation origin is invalid\",\n );\n return url.origin;\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The longest link OpenCredentials accepts as a return link. */\nconst MAX_INVITATION_LINK_BYTES = 512;\n\nasync function validateReceipt(\n receipt: CredentialInvitationReceipt,\n shareUrl: string,\n): Promise<void> {\n if (\n !object(receipt) ||\n !object(receipt.request) ||\n !object(receipt.admission) ||\n !object(receipt.proof)\n ) {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation receipt is invalid\",\n );\n }\n if (receipt.request.returnLink !== shareUrl) {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation is not bound to the share link\",\n );\n }\n const links = await import(\"@tinycloud/share-envelope/links\");\n try {\n const origin = new URL(shareUrl).origin;\n const parsed = links.parseLink(shareUrl, { trustedOrigins: [origin] });\n // The email carries the short link only: a full link is too large to mail. The id is lowercase and the\n // fragment exactly `#v=4&k=&c=`, within the invitation size limit.\n if (\n parsed.form !== \"short\" ||\n parsed.pathType !== \"share\" ||\n shareUrl.length > MAX_INVITATION_LINK_BYTES ||\n shareUrl !== links.buildShortLink({ origin, type: \"share\", id: parsed.id, key: parsed.key, bodyCid: parsed.c })\n ) {\n throw new Error(\"not a short share link\");\n }\n } catch {\n throw new CredentialInvitationError(\n \"invalid-receipt\",\n \"credential invitation share link must be a short share link\",\n );\n }\n}\n\n/**\n * Submit a Node-authorized credential invitation without involving the Share\n * application. Other TinyCloud applications can use this same boundary.\n */\nexport async function deliverCredentialInvitation(input: {\n readonly credentialsOrigin: string;\n readonly receipt: CredentialInvitationReceipt;\n readonly shareUrl: string;\n readonly fetchFn?: typeof globalThis.fetch;\n readonly signal?: AbortSignal;\n}): Promise<CredentialInvitationResult> {\n const credentialsOrigin = canonicalOrigin(input.credentialsOrigin);\n await validateReceipt(input.receipt, input.shareUrl);\n const fetchFn = input.fetchFn ?? globalThis.fetch;\n let response: Response;\n try {\n response = await fetchFn(`${credentialsOrigin}/v1/credential-invitations`, {\n method: \"POST\",\n credentials: \"omit\",\n redirect: \"error\",\n referrerPolicy: \"no-referrer\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(input.receipt),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n } catch {\n throw new CredentialInvitationError(\n \"transport\",\n \"credential invitation delivery is unavailable\",\n );\n }\n if (response.status !== 202) {\n throw new CredentialInvitationError(\n \"rejected\",\n \"credential invitation delivery was not accepted\",\n );\n }\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n throw new CredentialInvitationError(\n \"invalid-response\",\n \"credential invitation response is invalid\",\n );\n }\n if (\n !object(body) ||\n Object.keys(body).length !== 1 ||\n body.status !== \"accepted\"\n ) {\n throw new CredentialInvitationError(\n \"invalid-response\",\n \"credential invitation response is invalid\",\n );\n }\n return { status: \"accepted\" };\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"./history.js\";\n\n/**\n * One root of an addressed share after `revokeShare`. A `left-live` root is\n * only ever the policy-authority root, whose audience is a policy digest DID\n * with no key: it cannot authorize anything once the enforcement root is\n * revoked, and it lapses at `expiresAt`.\n */\nexport type ShareRootRevocationState =\n | { readonly rootCid: string; readonly targetRole: \"policy-authority\" | \"policy-enforcement\"; readonly state: \"revoked\" }\n | { readonly rootCid: string; readonly targetRole: \"policy-authority\"; readonly state: \"left-live\"; readonly expiresAt: string };\n\nexport type ShareRevocationResult =\n | {\n readonly state: \"revoked\";\n readonly target: \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\";\n /** The bearer delegation; for an addressed share its enforcement root (its policy root when the record has no enforcement root). */\n readonly delegationCid: string;\n /** Addressed shares: every root the share created, with what this revocation did to it. Recipient access has ended. */\n readonly roots?: readonly ShareRootRevocationState[];\n readonly revokedAt: string;\n }\n | { readonly state: \"unsupported\"; readonly target: string; readonly reason: string; readonly code: \"unsupported-target\" };\n\nexport interface SharePolicyRootRevocation {\n readonly rootCid: string;\n readonly targetRole: \"policy-authority\" | \"policy-enforcement\";\n readonly ownerDid: string;\n readonly nodeOrigin: string;\n readonly nodeAudience: string;\n}\n\nexport interface ShareRevocationAdapter {\n /**\n * Native bearer authority uses the node's ordinary revocation endpoint. The\n * record carries the stored link, whose delegation names its issuer.\n */\n revokeDelegation?(input: { readonly delegationCid: string; readonly scope: \"direct\" | \"ancestor\"; readonly record: SenderShareRecord }): Promise<void>;\n /**\n * Addressed Policy/v3 authority uses the Node's signed root-revocation\n * endpoint. The Node checks that root for active sessions, new admission,\n * and delivery; this is not a separate share authority plane. It resolves\n * when the root is revoked, including when the Node already holds a\n * revocation for it, and rejects otherwise. For the policy-authority root\n * only, it may resolve `\"left-live\"` instead of revoking it (for example\n * when revoking it would cost the owner another wallet approval).\n */\n revokePolicyRoot?(input: SharePolicyRootRevocation): Promise<void | \"left-live\">;\n}\n\n/** A root an addressed revocation did not end. */\nexport interface ShareRootRevocationFailure {\n readonly rootCid: string;\n readonly targetRole: SharePolicyRootRevocation[\"targetRole\"];\n readonly error: unknown;\n}\n\n/**\n * An addressed revocation did not finish: a root failed, or only the\n * policy-authority root was dealt with. `revoked` names the roots that were\n * revoked; if it is not empty, recipient access has ended, since every\n * recipient request needs both roots. The share record is not marked\n * revoked, so the caller can retry.\n */\nexport class ShareRevocationIncompleteError extends Error {\n constructor(readonly revoked: readonly string[], readonly failed: readonly ShareRootRevocationFailure[]) {\n super(`share revocation incomplete: ${failed.map((failure) => failure.targetRole).join(\", \")} not revoked`);\n this.name = \"ShareRevocationIncompleteError\";\n }\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\nfunction policyNodeAudience(record: SenderShareRecord): string {\n const envelope = record.deliveryMaterial?.envelope;\n if (typeof envelope !== \"object\" || envelope === null || Array.isArray(envelope)) return record.target.nodeAudience;\n const binding = (envelope as Record<string, unknown>).attestedEnforcerBinding;\n if (typeof binding !== \"object\" || binding === null || Array.isArray(binding)) return record.target.nodeAudience;\n const nodeAudience = (binding as Record<string, unknown>).nodeAudience;\n return typeof nodeAudience === \"string\" ? nodeAudience : record.target.nodeAudience;\n}\n\n/**\n * Revoke a share. A bearer share revokes the delegation `scope` selects. An\n * addressed share asks the adapter for every root it created, the\n * enforcement root and then the policy root, whatever `scope` says; the\n * adapter may leave the keyless policy-authority root live. It succeeds only\n * when no root failed and at least one was revoked (so recipient access has\n * ended); otherwise it throws {@link ShareRevocationIncompleteError} after\n * trying every root.\n */\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 /** Bearer shares only. */\n readonly scope?: \"direct\" | \"ancestor\";\n readonly now?: () => Date;\n}): Promise<ShareRevocationResult> {\n const target = targetKind(input.record);\n if (input.adapter === undefined) return { state: \"unsupported\", target, reason: \"node revocation authority is required\", code: \"unsupported-target\" };\n let delegationCid: string;\n let roots: ShareRootRevocationState[] | undefined;\n if (target === \"bearer\") {\n const scope = input.scope ?? \"direct\";\n const selected = scope === \"ancestor\" ? input.record.ownerDelegationCid : input.record.enforcementDelegationCid;\n if (selected === undefined) return { state: \"unsupported\", target, reason: \"share has no node-enforced delegation receipt\", code: \"unsupported-target\" };\n if (input.adapter.revokeDelegation === undefined) return { state: \"unsupported\", target, reason: \"native delegation revocation authority is required\", code: \"unsupported-target\" };\n await input.adapter.revokeDelegation({ delegationCid: selected, scope, record: input.record });\n delegationCid = selected;\n } else {\n const requests = ([\n [input.record.enforcementDelegationCid, \"policy-enforcement\"],\n [input.record.ownerDelegationCid, \"policy-authority\"],\n ] as const).flatMap(([rootCid, targetRole]) => rootCid === undefined ? [] : [{ rootCid, targetRole }]);\n const first = requests[0];\n if (first === undefined) return { state: \"unsupported\", target, reason: \"share has no node-enforced delegation receipt\", code: \"unsupported-target\" };\n const ownerDid = input.record.ownerDid;\n if (ownerDid === undefined) return { state: \"unsupported\", target, reason: \"share has no Policy/v3 owner receipt\", code: \"unsupported-target\" };\n const revokePolicyRoot = input.adapter.revokePolicyRoot;\n if (revokePolicyRoot === undefined) return { state: \"unsupported\", target, reason: \"Policy/v3 root revocation authority is required\", code: \"unsupported-target\" };\n const nodeAudience = policyNodeAudience(input.record);\n roots = [];\n const failed: ShareRootRevocationFailure[] = [];\n for (const request of requests) {\n try {\n // Untyped adapters: only `undefined` means revoked, and only `\"left-live\"` may skip a root.\n const outcome: unknown = await revokePolicyRoot({ ...request, ownerDid, nodeOrigin: input.record.target.origin, nodeAudience });\n if (outcome === \"left-live\") {\n // Only the keyless policy-authority root may stay; an enforcement root left live is a failure.\n if (request.targetRole !== \"policy-authority\") throw new Error(\"the enforcement root cannot be left live\");\n roots.push({ rootCid: request.rootCid, targetRole: \"policy-authority\", state: \"left-live\", expiresAt: input.record.expiresAt });\n } else if (outcome === undefined) {\n roots.push({ ...request, state: \"revoked\" });\n } else {\n throw new Error(\"root revocation returned an unknown outcome\");\n }\n } catch (error) {\n failed.push({ ...request, error });\n }\n }\n const revoked = roots.flatMap((root) => root.state === \"revoked\" ? [root.rootCid] : []);\n if (failed.length > 0 || revoked.length === 0) {\n throw new ShareRevocationIncompleteError(revoked, failed.length > 0 ? failed : roots.map((root) => ({ rootCid: root.rootCid, targetRole: root.targetRole, error: new Error(\"no root was revoked\") })));\n }\n delegationCid = first.rootCid;\n }\n // Revoking again is idempotent at the node; the first revocation time stands.\n let revokedAt = input.record.revokedAt ?? (input.now?.() ?? new Date()).toISOString();\n if (input.records?.update !== undefined) {\n const updated = await input.records.update(input.record.shareId, (record) => ({ ...record, revokedAt: record.revokedAt ?? revokedAt }));\n revokedAt = updated?.revokedAt ?? revokedAt;\n } else if (input.records !== undefined) {\n // Without an atomic update, read the latest record first. A concurrent\n // writer between this read and put can still win; stores that need that\n // guarantee implement `update`.\n const latest = await input.records.get(input.record.shareId);\n revokedAt = latest?.revokedAt ?? revokedAt;\n await input.records.put({ ...(latest ?? input.record), revokedAt });\n }\n return { state: \"revoked\", target: target as \"bearer\" | \"recipientDid\" | \"email\" | \"emailDomain\", delegationCid, ...(roots === undefined ? {} : { roots }), 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 { 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 { artifactBindingView, assertArtifactBinding } from \"./artifact-pin.js\";\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 /** Exact verified issuer envelope used by accountless v4 admission. */\n readonly credentialEnvelope?: Record<string, unknown>;\n /** Exact credential requirement committed by the signed policy. */\n readonly requirement?: 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 /** Required only by the retired v2 response-proof adapter. Policy/v3 trusts its signed attested binding. */\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 readonly signal?: AbortSignal;\n readonly onStage?: (stage: \"policy-admission\" | \"delegation-import\" | \"invocation\" | \"decryption\") => void;\n /**\n * A previously admitted and imported policy session (S0), optionally with\n * the descendants that re-delegate it, in order, down to this holder.\n */\n readonly policyAuthorization?: {\n readonly authorization: string;\n readonly cid: string;\n readonly descendants?: readonly SharePolicyDelegationLink[];\n };\n}\n\n/** One signed link of a policy delegation chain, as imported into the Node. */\nexport interface SharePolicyDelegationLink {\n readonly authorization: string;\n readonly cid: string;\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\nfunction toBase64(bytes: Uint8Array): string {\n return toBase64Url(bytes).replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(bytes.length / 3) * 4, \"=\");\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 try {\n // The shared strict decoder also rejects nonzero trailing pad bits.\n return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n } catch {\n throw new Error(`${label} is invalid`);\n }\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 policyAttenuationForV3(envelope: ShareEnvelopeV3): Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>> {\n const policy = object(envelope.policy, \"v3 policy\");\n if (!Array.isArray(policy.capabilityCeiling)) throw new Error(\"v3 policy capability ceiling is invalid\");\n const attenuation: Record<string, Record<string, readonly unknown[]>> = {};\n for (const raw of policy.capabilityCeiling) {\n const capability = object(raw, \"v3 policy capability\");\n if (typeof capability.resource !== \"string\" || attenuation[capability.resource] !== undefined) throw new Error(\"v3 policy capability is invalid\");\n if (capability.kind === \"encryption\") {\n if (capability.action !== \"tinycloud.encryption/decrypt\") throw new Error(\"v3 policy capability is invalid\");\n attenuation[capability.resource] = { [capability.action]: [{}] };\n continue;\n }\n if (capability.kind !== \"kv\"\n || (capability.selector !== \"exact\" && capability.selector !== \"prefix\")\n || !Array.isArray(capability.actions)\n || capability.actions.length === 0\n || capability.actions.some((action) => typeof action !== \"string\")) throw new Error(\"v3 policy capability is invalid\");\n attenuation[capability.resource] = Object.fromEntries(capability.actions.map((action) => [action, [{\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n }]]));\n }\n return attenuation;\n}\n\nconst POLICY_SESSION_FACT_KEYS = [\n \"profile\", \"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\",\n \"policyDelegationCid\", \"enforcementDelegationCid\", \"contentSourceDigestHex\",\n \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"enforcerDid\",\n \"nodeAudience\", \"recipientDid\", \"challengeId\", \"claimDigestHex\", \"claimJti\",\n \"vpDigestHex\", \"credentialEvidenceDigestHex\", \"decisionContextDigestHex\",\n \"issuanceAuditDigestHex\", \"remainingRedelegationDepth\",\n] as const;\nconst POLICY_SESSION_V4_AUDIT_FACT_KEYS = [\"credentialIdAuditDigestHex\", \"presentationJtiAuditDigestHex\"] as const;\nconst POLICY_SESSION_DIGEST_FACT_KEYS = [\n \"policyDigestHex\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\",\n \"nativeProjectionHashHex\", \"claimDigestHex\", \"vpDigestHex\",\n \"credentialEvidenceDigestHex\", \"decisionContextDigestHex\", \"issuanceAuditDigestHex\",\n] as const;\nconst LOWER_SHA256_HEX = /^[0-9a-f]{64}$/;\n\nfunction verifyV3PolicyAuthorization(input: {\n readonly authorization: string;\n readonly cid: string;\n readonly envelope: ShareEnvelopeV3;\n readonly holderDid: string;\n}): ReturnType<typeof verifyCompactUcanAuthorization> {\n const compact = verifyCompactUcanAuthorization(input.authorization, input.cid);\n const fact = compact.payload.fct[0];\n const factKeys = Object.keys(fact);\n const legacyShape = factKeys.length === POLICY_SESSION_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact);\n const v4Shape = factKeys.length === POLICY_SESSION_FACT_KEYS.length + POLICY_SESSION_V4_AUDIT_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never) || POLICY_SESSION_V4_AUDIT_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact)\n && POLICY_SESSION_V4_AUDIT_FACT_KEYS.every((key) => key in fact);\n const binding = object(input.envelope.attestedEnforcerBinding, \"v3 attested enforcer binding\");\n const policy = object(input.envelope.policy, \"v3 policy\");\n const now = Math.floor(Date.now() / 1000);\n if ((!legacyShape && !v4Shape)\n || POLICY_SESSION_DIGEST_FACT_KEYS.some((key) => !LOWER_SHA256_HEX.test(fact[key] as string))\n || v4Shape && (!LOWER_SHA256_HEX.test(fact.credentialIdAuditDigestHex as string) || !LOWER_SHA256_HEX.test(fact.presentationJtiAuditDigestHex as string))\n || compact.payload.aud !== input.holderDid\n || compact.payload.iss.split(\"#\", 1)[0] !== fact.nodeAudience\n || fact.profile !== \"policy-session-ucan/v1\"\n || fact.ownerDid !== policy.ownerDid\n || fact.policyId !== policy.policyId\n || fact.policyCid !== input.envelope.policyCid\n || fact.contentSourceDigestHex !== input.envelope.contentSourceDigestHex\n || fact.enforcerDid !== binding.enforcerDid\n || fact.nodeAudience !== binding.nodeAudience\n || fact.recipientDid !== input.holderDid\n || fact.policyDelegationCid !== input.envelope.policyRoot.cid\n || fact.enforcementDelegationCid !== input.envelope.enforcementRoot.cid\n || typeof fact.remainingRedelegationDepth !== \"number\"\n || !Number.isInteger(fact.remainingRedelegationDepth)\n || fact.remainingRedelegationDepth < 0\n || fact.remainingRedelegationDepth > 8\n || compact.payload.prf.length !== 2\n || compact.payload.prf[0] !== input.envelope.policyRoot.cid\n || compact.payload.prf[1] !== input.envelope.enforcementRoot.cid\n || compact.payload.nbf > now\n || compact.payload.exp <= now\n // A session may last as long as the share, never longer (fails closed\n // when the expiry does not parse).\n || !(compact.payload.exp * 1000 <= Date.parse(input.envelope.expiry))\n || canonicalize(compact.payload.att) !== canonicalize(policyAttenuationForV3(input.envelope))) throw new Error(\"v3 policy delegation signed binding mismatch\");\n return compact;\n}\n\n/**\n * Follow re-delegations of a verified session down to this holder. Each link\n * must be signed by its parent's audience, prove exactly its parent, sit\n * strictly inside the parent's window, keep the parent's facts with one less\n * redelegation, and pass the parent's capabilities on unchanged. The Node\n * re-checks the whole chain on every request.\n */\nfunction verifyV3PolicyDescendants(\n session: ReturnType<typeof verifyCompactUcanAuthorization>,\n descendants: readonly SharePolicyDelegationLink[],\n holderDid: string,\n): ReturnType<typeof verifyCompactUcanAuthorization> {\n let parent = session;\n for (const link of descendants) {\n const child = verifyCompactUcanAuthorization(link.authorization, link.cid);\n const { remainingRedelegationDepth: parentDepth, ...parentFacts } = parent.payload.fct[0];\n const { remainingRedelegationDepth: depth, ...facts } = child.payload.fct[0];\n if (child.payload.iss.split(\"#\", 1)[0] !== parent.payload.aud\n || child.payload.prf.length !== 1\n || child.payload.prf[0] !== parent.cid\n || child.payload.nbf <= parent.payload.nbf\n || child.payload.exp >= parent.payload.exp\n || typeof parentDepth !== \"number\"\n || parentDepth <= 0\n || depth !== parentDepth - 1\n || canonicalize(facts) !== canonicalize(parentFacts)\n || canonicalize(child.payload.att) !== canonicalize(parent.payload.att)) throw new Error(\"v3 policy descendant does not extend its parent\");\n parent = child;\n }\n const now = Math.floor(Date.now() / 1000);\n if (parent.payload.aud !== holderDid) throw new Error(\"v3 policy delegation chain does not end at this holder\");\n if (parent.payload.nbf > now || parent.payload.exp <= now) throw new Error(\"v3 policy delegation chain is not currently valid\");\n return parent;\n}\n\n/** Whole-second RFC 3339, or undefined when the share ends within a minute. */\nfunction requestedSessionExpiry(expiry: string): string | undefined {\n const seconds = Math.floor(Date.parse(expiry) / 1000);\n if (!Number.isFinite(seconds) || seconds <= Math.floor(Date.now() / 1000) + 60) return undefined;\n return new Date(seconds * 1000).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nfunction hex(value: Uint8Array): string {\n return [...value].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * The signed content source commits to the literal owner-KV representation,\n * not an equivalent parsed JSON value. Compare all digest bytes before any\n * envelope parsing or key-unwrapping work.\n */\nfunction matchesInitialCiphertextDigest(bytes: Uint8Array, expected: unknown): boolean {\n if (typeof expected !== \"string\" || !LOWER_SHA256_HEX.test(expected)) return false;\n const actual = sha256(bytes);\n let mismatch = 0;\n for (let index = 0; index < actual.length; index += 1) {\n mismatch |= actual[index]! ^ Number.parseInt(expected.slice(index * 2, index * 2 + 2), 16);\n }\n return mismatch === 0;\n}\n\nfunction canonicalHashHex(value: string): string {\n return hex(sha256(new TextEncoder().encode(canonicalize(value))));\n}\n\n/**\n * The wrapped-key digest a V3 source registers. A path-bound source (`encryptionKeyPath`) registers the digest of the\n * raw wrapped-key bytes; a legacy no-path source registers the canonical hash of the base64 string, as the node accepts\n * for the no-path case. The key is validated as strict base64 either way.\n */\nfunction registeredWrappedKeyDigest(encryptedSymmetricKey: string, pathBound: boolean): string {\n const rawDigest = hex(sha256(fromBase64(encryptedSymmetricKey, \"v3 encrypted symmetric key\")));\n return pathBound ? rawDigest : canonicalHashHex(encryptedSymmetricKey);\n}\n\nasync function aesGcmDecrypt(key: Uint8Array, blob: Uint8Array, aad?: 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 // These owned bytes are valid WebCrypto inputs; its buffer type is narrower.\n return new Uint8Array(await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: blob.slice(0, 12) as unknown as BufferSource, ...(aad && { additionalData: aad as unknown as BufferSource }) }, cryptoKey, blob.slice(12) as unknown as BufferSource));\n}\n\nasync function aesGcmEncrypt(key: Uint8Array, plaintext: Uint8Array, aad?: 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, ...(aad && { additionalData: aad 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 | 2;\n readonly networkId: string;\n readonly keyPath?: 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 aad?: 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\", \"keyPath\", \"alg\", \"keyVersion\", \"encryptedSymmetricKey\", \"encryptedSymmetricKeyHash\", \"ciphertext\", \"aad\", \"metadata\"];\n const source = expected.contentSource;\n if (Object.keys(record).some((key) => !allowed.includes(key))\n || record.v !== (source.encryptionKeyPath === undefined ? 1 : 2) || record.networkId !== source.encryptionNetwork\n || record.networkId !== expected.encryptionNetwork\n || record.keyPath !== source.encryptionKeyPath\n || record.keyPath !== undefined && (record.keyPath !== `share/${expected.shareId}`)\n || record.alg !== \"x25519-aes256gcm/v1\" || record.keyVersion !== source.keyVersion\n || typeof record.encryptedSymmetricKey !== \"string\" || typeof record.encryptedSymmetricKeyHash !== \"string\"\n || registeredWrappedKeyDigest(record.encryptedSymmetricKey, source.encryptionKeyPath !== undefined) !== source.encryptedSymmetricKeyDigestHex\n || record.encryptedSymmetricKeyHash !== canonicalHashHex(record.encryptedSymmetricKey)\n || typeof record.ciphertext !== \"string\"\n || record.aad !== undefined && typeof record.aad !== \"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}\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\n/** A refusal must retain its HTTP status even when reading its body fails. */\nasync function recipientHttpError(response: Response, context: string): Promise<Error & { status: number }> {\n const body = (await response.text().catch(() => \"\")).trim().slice(0, 512);\n return Object.assign(new Error(`${context} (${response.status})${body ? `: ${body}` : \"\"}`), { status: response.status });\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 v3NodeAudience: 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 if (options.policyAuthorization !== undefined) {\n if (options.envelope.version !== 3) throw new Error(\"policy delegation fast path requires a v3 envelope\");\n const { authorization, cid, descendants = [] } = options.policyAuthorization;\n // S0 names the recipient it was minted for: this holder, or the first\n // delegator when the session was re-delegated.\n const sessionHolder = descendants.length === 0\n ? options.holderDid\n : verifyCompactUcanAuthorization(authorization, cid).payload.aud;\n const compact = verifyV3PolicyAuthorization({ authorization, cid, envelope: options.envelope, holderDid: sessionHolder });\n const leaf = verifyV3PolicyDescendants(compact, descendants, options.holderDid);\n const nodeAudience = compact.payload.fct[0].nodeAudience as string;\n this.v3Authorization = leaf.authorization;\n this.v3NodeAudience = nodeAudience;\n this.nativeSigner = options.sign;\n this.session = {\n sessionId: leaf.cid,\n expiresAt: new Date(leaf.payload.exp * 1000).toISOString(),\n actions: options.envelope.actions,\n resource: options.envelope.resource,\n };\n }\n }\n\n async beginChallenge(envelope: ShareEnvelopeV2): Promise<SharePolicyChallenge> {\n void envelope;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 envelope\");\n }\n\n private async establish(envelope: ShareEnvelopeV2): Promise<SharePolicySession> {\n void envelope;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 envelope\");\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 attestedEnforcer = object(envelope.attestedEnforcerBinding, \"v3 attested enforcer binding\");\n if (attestedEnforcer.enforcerDid !== envelope.target.nodeAudience || typeof attestedEnforcer.nodeAudience !== \"string\") throw new Error(\"v3 attested enforcer binding mismatch\");\n try { ed25519PublicKeyFromDidKey(attestedEnforcer.nodeAudience); } catch { throw new Error(\"v3 attested Node audience is invalid\"); }\n const challengeResponse = await this.fetchFn(new URL(\"/policy/v3/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 ...(this.options.signal === undefined ? {} : { signal: this.options.signal }),\n });\n if (!challengeResponse.ok) throw await recipientHttpError(challengeResponse, \"v3 policy challenge rejected\");\n const challenge = object(await challengeResponse.json(), \"v3 policy challenge\");\n if (\n typeof challenge.challengeId !== \"string\" ||\n typeof challenge.nonce !== \"string\" ||\n challenge.policyCid !== envelope.policyCid ||\n challenge.recipientDid !== this.options.holderDid ||\n challenge.nodeAudience !== attestedEnforcer.nodeAudience ||\n (challenge.enforcerDid !== undefined && challenge.enforcerDid !== attestedEnforcer.enforcerDid) ||\n typeof challenge.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(challenge.expiresAt)) ||\n Date.parse(challenge.expiresAt) <= Date.now()\n ) 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.presentation === undefined) throw new Error(\"v3 ceremony requires a recipient signer and presentation\");\n const accountless = material.presentation.schema === \"xyz.tinycloud.policy/presentation/v4\";\n if (accountless ? material.credentialEnvelope === undefined || material.requirement === undefined : material.claim === undefined) {\n throw new Error(accountless ? \"v4 ceremony requires a verified credential and requirement\" : \"v3 ceremony requires a claim\");\n }\n this.options.onStage?.(\"policy-admission\");\n const mintBody = accountless\n ? { policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, requirement: material.requirement, credential: material.credentialEnvelope, presentation: material.presentation }\n : { policyCid: envelope.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: material.claim, presentation: material.presentation };\n const mint = (body: Readonly<Record<string, unknown>>) => this.fetchFn(new URL(\"/policy/v3/delegations\", this.options.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n ...(this.options.signal === undefined ? {} : { signal: this.options.signal }),\n });\n // Ask for a session as long as the share. Nodes before 1.17.3 reject the\n // unknown field with 422 before spending the challenge.\n const requestedExpiresAt = requestedSessionExpiry(envelope.expiry);\n let delegationResponse = await mint(requestedExpiresAt === undefined ? mintBody : { ...mintBody, requestedExpiresAt });\n if (requestedExpiresAt !== undefined && delegationResponse.status === 422) delegationResponse = await mint(mintBody);\n if (!delegationResponse.ok) throw await recipientHttpError(delegationResponse, \"v3 policy delegation rejected\");\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 = verifyV3PolicyAuthorization({ authorization: delegation.authorization, cid: delegation.sessionCid, envelope, holderDid: this.options.holderDid });\n const fact = compact.payload.fct[0];\n this.options.onStage?.(\"delegation-import\");\n const imported = await this.fetchFn(new URL(\"/delegate\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers: { Authorization: delegation.authorization }, ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\n if (!imported.ok) throw await recipientHttpError(imported, \"ordinary delegation import rejected\");\n this.signer = material.sign;\n this.v3Authorization = delegation.authorization;\n this.v3NodeAudience = fact.nodeAudience as string;\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 /**\n * Decrypt unscoped v1 or path-bound v2 content. The wrapped-key digest is compared by source kind: the raw-byte digest\n * when the source has `encryptionKeyPath`, the canonical hash for a no-path source. The envelope's own canonical hash\n * is checked independently either way.\n */\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 || this.v3NodeAudience === undefined || signer === undefined) throw new Error(\"v3 policy session signer is required\");\n // An artifact share must carry a valid pin for its source. The binding makes the pinned file digest equal to\n // `initialCiphertextDigestHex`, which the next line already enforces on the fetched bytes.\n assertArtifactBinding(artifactBindingView(envelope));\n if (!matchesInitialCiphertextDigest(bytes, envelope.contentSource.initialCiphertextDigestHex)) throw new Error(\"v3 owner KV ciphertext digest mismatch\");\n const encrypted = parseV3InlineEncryptedEnvelope(bytes, envelope);\n const ciphertext = fromBase64(encrypted.ciphertext, \"v3 encrypted content\");\n if (ciphertext.length < 28) throw new Error(\"encrypted content is malformed\");\n const aad = encrypted.aad === undefined ? undefined : fromBase64(encrypted.aad, \"v3 encrypted content AAD\");\n const receiverPrivateKey = crypto.getRandomValues(new Uint8Array(32));\n const receiverPublicKey = toBase64(x25519.getPublicKey(receiverPrivateKey));\n const receiverPublicKeyHash = canonicalHashHex(receiverPublicKey);\n const body = { type: \"tinycloud.encryption.decrypt/v1\", targetNode: this.v3NodeAudience, networkId: encrypted.networkId, ...(encrypted.keyPath === undefined ? {} : { keyPath: encrypted.keyPath }), 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 decryptResource = encrypted.keyPath === undefined ? encrypted.networkId : `${encrypted.networkId}/${encrypted.keyPath}`;\n const invocation = await signCompactUcanAuthorization({\n issuerDid: this.options.holderDid,\n audienceDid: this.v3NodeAudience,\n attenuation: { [decryptResource]: { \"tinycloud.encryption/decrypt\": [{}] } },\n facts: [{ type: body.type, targetNode: body.targetNode, networkId: body.networkId, ...(encrypted.keyPath === undefined ? {} : { keyPath: encrypted.keyPath }), 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 this.options.onStage?.(\"decryption\");\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), ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\n if (!response.ok) throw await recipientHttpError(response, \"v3 decrypt invocation rejected\");\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 < 61 || wrapped[32] !== 1) 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(33));\n shared.fill(0);\n if (symmetricKey.length !== 32) throw new Error(\"v3 content key is malformed\");\n const plaintext = await aesGcmDecrypt(symmetricKey, ciphertext, aad);\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 const envelope = this.v3ContentEnvelope;\n const aad = envelope.aad === undefined ? undefined : fromBase64(envelope.aad, \"v3 encrypted content AAD\");\n return new TextEncoder().encode(canonicalize({ ...envelope, ciphertext: toBase64(await aesGcmEncrypt(this.v3ContentKey, bytes, aad)), metadata: { ...(envelope.metadata ?? {}), contentType: mediaType } }));\n }\n\n async resumeWithProof(envelope: ShareEnvelopeV2, resumeToken: string, proof: unknown): Promise<ShareAuthorizedContent> {\n void envelope;\n void resumeToken;\n void proof;\n throw new Error(\"v2 Share recipient transport has been removed; use the embedded policy v3 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 throw new Error(\"v2 Share invocation transport has been removed; use the embedded policy v3 envelope\");\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 || this.v3NodeAudience === 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: this.v3NodeAudience, 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 this.options.onStage?.(\"invocation\");\n return this.fetchFn(new URL(\"/invoke\", this.options.nodeOrigin), { method: \"POST\", redirect: \"error\", headers, ...(body === undefined ? {} : { body }), ...(this.options.signal === undefined ? {} : { signal: this.options.signal }) });\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 (input.trustedNode === undefined || 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","/** Fragment-only adapter for TinyCloud's public SharingService. */\nexport const NATIVE_SHARE_FRAGMENT_PARAMETER = \"tc1\";\n\nexport interface NativeShareResult {\n readonly url: string;\n readonly delegationCid: string;\n readonly expiresAt: Date;\n readonly spaceId: string;\n}\n\nexport interface NativeSharingService {\n generate(params: { readonly path: string; readonly actions: string[]; readonly expiry: Date }): Promise<unknown>;\n receive(token: string, options: { readonly autoSubdelegate: false; readonly useSessionKey: false }): Promise<unknown>;\n decodeLink(token: string): { readonly spaceId: string; readonly path: string };\n}\n\n/** `https://<origin>/viewer` for a canonical HTTPS viewer origin. Also used by share-root bearer links. */\nexport function canonicalViewerUrl(viewerOrigin: string): URL {\n const url = new URL(viewerOrigin);\n if (url.protocol !== \"https:\" || url.origin !== viewerOrigin || url.pathname !== \"/\" || url.search || url.hash) throw new TypeError(\"viewer origin must be a canonical HTTPS origin\");\n url.pathname = \"/viewer\";\n return url;\n}\n\n/** Generate exactly one read-only TinyCloud delegation and put its tc1 token in the fragment. */\nexport async function createNativeShare(sharing: NativeSharingService, input: { readonly path: string; readonly expiresAt: Date; readonly viewerOrigin: string }): Promise<NativeShareResult> {\n if (!input.path || input.path.startsWith(\"/\") || input.path.endsWith(\"/\") || input.path.includes(\"..\") || input.path.includes(\"//\")) throw new TypeError(\"native share path must be one canonical TinyCloud KV key\");\n const generated = await sharing.generate({ path: input.path, actions: [\"tinycloud.kv/get\"], expiry: input.expiresAt }) as { readonly ok?: unknown; readonly data?: { readonly token?: unknown; readonly delegation?: { readonly cid?: unknown }; readonly expiresAt?: unknown }; readonly error?: { readonly code?: unknown; readonly message?: unknown } };\n if (generated.ok !== true) {\n const error = new Error(typeof generated.error?.message === \"string\" ? generated.error.message : \"TinyCloud sharing service rejected delegation generation\");\n if (typeof generated.error?.code === \"string\") Object.assign(error, { code: generated.error.code });\n throw error;\n }\n if (typeof generated.data?.token !== \"string\" || typeof generated.data.delegation?.cid !== \"string\" || !(generated.data.expiresAt instanceof Date)) throw new Error(\"TinyCloud sharing service returned incomplete delegation metadata\");\n const delegation = sharing.decodeLink(generated.data.token);\n if (typeof delegation.spaceId !== \"string\" || delegation.spaceId.length === 0 || typeof delegation.path !== \"string\" || delegation.path.length === 0) throw new Error(\"TinyCloud sharing service returned a non-canonical delegation authority\");\n const url = canonicalViewerUrl(input.viewerOrigin);\n url.hash = `${NATIVE_SHARE_FRAGMENT_PARAMETER}=${encodeURIComponent(generated.data.token)}`;\n return { url: url.toString(), delegationCid: generated.data.delegation.cid, expiresAt: generated.data.expiresAt, spaceId: delegation.spaceId };\n}\n\n/** Extract only a single tc1 fragment. Path/query/mixed legacy forms are refused. */\nexport function parseNativeShareUrl(value: string): string {\n const url = new URL(value);\n if (url.search || url.pathname !== \"/viewer\") throw new TypeError(\"native shares must carry tc1 only in the /viewer URL fragment\");\n const fragment = new URLSearchParams(url.hash.slice(1));\n const token = fragment.get(NATIVE_SHARE_FRAGMENT_PARAMETER);\n // `token` is opaque output from SharingService.generate(). `tc1` names this\n // fragment format; the opaque token may itself begin with `tc1:`.\n if (!token || fragment.size !== 1) throw new TypeError(\"missing native share fragment\");\n return token;\n}\n\n/** Receive through the public SDK without creating another transport protocol. */\nexport async function openNativeShare(sharing: NativeSharingService, link: string): Promise<unknown> {\n return sharing.receive(parseNativeShareUrl(link), { autoSubdelegate: false, useSessionKey: false });\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_VERIFY_OPTS","sha256","nativeProjection","digest","bytes","KEY_LENGTH","cid","KEY_LENGTH","code","code","cid","length","bytes","code","bytes","import_sha256","import_sha256","code","hex","bytes","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","base58btc","baseX","base58flickr","bytes","base58btc","POLICY_CAPABILITY_V1_DOMAIN","CONTENT_SOURCE_V1_DOMAIN","NATIVE_PROJECTION_V1_DOMAIN","textEncoder","hex","bytes","base32Lower","digest","import_sha256","bytes","cid","import_ed25519","import_sha256","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","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","digest","didKeyFromEd25519PublicKey","base58btc","length","value","didKeyFromEd25519PublicKey","digest","record","digest","code","object","targetKind","import_ed25519","import_sha256","object","bytes","digestBytes","object","hex","bytes","cid","object","digestBytes","bytes","hex"]}