@awiki/anp-typescript-sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/authentication/types.ts","../src/internal/base64.ts","../src/internal/pem.ts","../src/internal/keys.ts","../src/authentication/verification-methods.ts","../src/internal/json.ts","../src/proof/proof.ts","../src/authentication/did-wba.ts","../src/authentication/did-resolver.ts","../src/authentication/http-signatures.ts","../src/authentication/did-wba-authenticator.ts","../src/authentication/did-wba-verifier.ts","../src/authentication/federation.ts","../src/authentication/index.ts","../src/proof/im.ts","../src/proof/index.ts","../src/wns/types.ts","../src/wns/validator.ts","../src/wns/generation.ts","../src/wns/resolver.ts","../src/wns/binding.ts","../src/wns/index.ts","../src/im/errors.ts","../src/im/internal.ts","../src/im/protocol.ts","../src/im/messaging.ts","../src/im/attachments.ts","../src/im/identity.ts","../src/im/storage.ts","../src/im/client.ts"],"names":["DidProfile","AuthMode","createHash","generateKeyPairSync","createECDH","ed25519","x25519","cryptoSign","cryptoVerify","ECDH","bs58","createPrivateKey","createPublicKey","stripMultibasePrefix","canonicalize","proof","isIP","authentication","buildDidResolutionUrl","randomBytes","readFile","getHeaderCaseInsensitive","jwtVerify","SignJWT","importPKCS8","importSPKI","toBytes","isVerificationMethodAuthorized","HandleStatus","SubjectType","isRecord","randomUUID","stringValue","slot","requiredString","arrayValue","requiredWireString","dirname","mkdir","writeFile","rename","chmod","unlink"],"mappings":"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","file":"index.cjs","sourcesContent":["export class ANPError extends Error {\n constructor(message: string, public readonly code: string, cause?: Error) {\n super(message, { cause });\n this.name = 'ANPError';\n }\n}\n\nexport class CryptoError extends ANPError {\n constructor(message: string, cause?: Error) {\n super(message, 'CRYPTO_ERROR', cause);\n this.name = 'CryptoError';\n }\n}\n\nexport class AuthenticationError extends ANPError {\n constructor(message: string, cause?: Error) {\n super(message, 'AUTHENTICATION_ERROR', cause);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class ProofError extends ANPError {\n constructor(message: string, cause?: Error) {\n super(message, 'PROOF_ERROR', cause);\n this.name = 'ProofError';\n }\n}\n\nexport class NetworkError extends ANPError {\n constructor(message: string, public readonly statusCode?: number, cause?: Error) {\n super(message, 'NETWORK_ERROR', cause);\n this.name = 'NetworkError';\n }\n}\n\nexport class WnsError extends ANPError {\n constructor(message: string, code = 'WNS_ERROR', cause?: Error) {\n super(message, code, cause);\n this.name = 'WnsError';\n }\n}\n\nexport class HandleValidationError extends WnsError {\n constructor(message: string) {\n super(message, 'HANDLE_VALIDATION_ERROR');\n this.name = 'HandleValidationError';\n }\n}\n\nexport class HandleResolutionError extends WnsError {\n constructor(message: string, public readonly statusCode?: number, cause?: Error) {\n super(message, 'HANDLE_RESOLUTION_ERROR', cause);\n this.name = 'HandleResolutionError';\n }\n}\n\nexport class HandleNotFoundError extends HandleResolutionError {\n constructor(message: string) {\n super(message, 404);\n this.name = 'HandleNotFoundError';\n }\n}\n\nexport class HandleGoneError extends HandleResolutionError {\n constructor(message: string) {\n super(message, 410);\n this.name = 'HandleGoneError';\n }\n}\n\nexport class HandleMovedError extends HandleResolutionError {\n constructor(message: string, public readonly redirectUrl = '') {\n super(message, 301);\n this.name = 'HandleMovedError';\n }\n}\n\nexport class HandleBindingError extends WnsError {\n constructor(message: string) {\n super(message, 'HANDLE_BINDING_ERROR');\n this.name = 'HandleBindingError';\n }\n}\n\nexport class WbaUriParseError extends WnsError {\n constructor(message: string) {\n super(message, 'WBA_URI_PARSE_ERROR');\n this.name = 'WbaUriParseError';\n }\n}\n","import type { GeneratedKeyPairPem } from '../internal/keys.js';\nimport type { JsonObject } from '../internal/json.js';\n\nexport enum DidProfile {\n E1 = 'e1',\n K1 = 'k1',\n PlainLegacy = 'plain_legacy',\n}\n\nexport enum AuthMode {\n HttpSignatures = 'http_signatures',\n LegacyDidWba = 'legacy_didwba',\n Auto = 'auto',\n}\n\nexport interface ProofRecord {\n type: string;\n created: string;\n verificationMethod: string;\n proofPurpose: string;\n proofValue: string;\n cryptosuite?: string;\n domain?: string;\n challenge?: string;\n}\n\nexport interface VerificationMethodRecord {\n id: string;\n type: string;\n controller: string;\n publicKeyJwk?: JsonWebKey;\n publicKeyMultibase?: string;\n publicKeyBase58?: string;\n}\n\nexport interface ServiceRecord {\n id: string;\n type: string;\n serviceEndpoint: unknown;\n serviceDid?: string;\n profiles?: string[];\n securityProfiles?: string[];\n accepts?: string[];\n priority?: number | string;\n authSchemes?: string[];\n}\n\nexport interface AnpMessageServiceOptions {\n fragment?: string;\n serviceDid?: string;\n profiles?: string[];\n securityProfiles?: string[];\n accepts?: string[];\n priority?: number | string;\n authSchemes?: string[];\n}\n\nexport interface DidDocument {\n '@context': string[];\n id: string;\n verificationMethod: VerificationMethodRecord[];\n authentication: Array<string | VerificationMethodRecord>;\n assertionMethod?: Array<string | VerificationMethodRecord>;\n keyAgreement?: Array<string | VerificationMethodRecord>;\n service?: ServiceRecord[];\n proof?: ProofRecord;\n}\n\nexport interface DidDocumentOptions {\n port?: number;\n pathSegments?: string[];\n agentDescriptionUrl?: string;\n services?: Array<ServiceRecord | JsonObject>;\n proofPurpose?: string;\n verificationMethod?: string;\n domain?: string;\n challenge?: string;\n created?: string;\n enableE2ee?: boolean;\n didProfile?: DidProfile;\n}\n\nexport interface DidDocumentBundle {\n didDocument: DidDocument;\n keys: Record<string, GeneratedKeyPairPem>;\n}\n\nexport interface ParsedAuthHeader {\n did: string;\n nonce: string;\n timestamp: string;\n verificationMethod: string;\n signature: string;\n version: string;\n}\n\nexport interface LegacyAuthOptions {\n nonce?: string;\n timestamp?: string;\n}\n\nexport interface DidResolutionOptions {\n timeoutSeconds?: number;\n verifySsl?: boolean;\n baseUrlOverride?: string;\n headers?: Record<string, string>;\n}\n\nexport type DidResolver = (\n did: string\n) => DidDocument | null | undefined | Promise<DidDocument | null | undefined>;\n\nexport interface HttpSignatureOptions {\n keyid?: string;\n nonce?: string;\n created?: number;\n expires?: number;\n coveredComponents?: string[];\n}\n\nexport interface FederatedVerificationOptions {\n senderDidDocument?: DidDocument;\n serviceDidDocument?: DidDocument;\n serviceId?: string;\n serviceEndpoint?: string;\n verifySenderDidProof?: boolean;\n verifyServiceDidProof?: boolean;\n didResolutionOptions?: DidResolutionOptions;\n}\n\nexport interface SignatureMetadata {\n label: string;\n components: string[];\n keyid: string;\n nonce?: string;\n created: number;\n expires?: number;\n}\n\nexport interface FederatedVerificationResult {\n senderDid: string;\n serviceDid: string;\n serviceId: string;\n signatureMetadata: SignatureMetadata;\n}\n","export function encodeBase64Url(value: Uint8Array): string {\n return Buffer.from(value).toString('base64url');\n}\n\nexport function decodeBase64Url(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, 'base64url'));\n}\n\nexport function encodeBase64(value: Uint8Array): string {\n return Buffer.from(value).toString('base64');\n}\n\nexport function decodeBase64(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, 'base64'));\n}\n","import { decodeBase64, encodeBase64 } from './base64.js';\n\nconst PEM_LINE_LENGTH = 64;\n\nexport interface DecodedPem {\n label: string;\n bytes: Uint8Array;\n}\n\nexport function encodePem(label: string, bytes: Uint8Array): string {\n const encoded = encodeBase64(bytes);\n const lines: string[] = [];\n for (let index = 0; index < encoded.length; index += PEM_LINE_LENGTH) {\n lines.push(encoded.slice(index, index + PEM_LINE_LENGTH));\n }\n return `-----BEGIN ${label}-----\\n${lines.join('\\n')}\\n-----END ${label}-----\\n`;\n}\n\nexport function decodePem(input: string): DecodedPem {\n const lines = input.trim().split(/\\r?\\n/);\n if (lines.length < 3) {\n throw new Error('Invalid PEM structure');\n }\n const beginLine = lines[0];\n const endLine = lines.at(-1);\n if (!beginLine.startsWith('-----BEGIN ') || !beginLine.endsWith('-----')) {\n throw new Error('Invalid PEM structure');\n }\n const label = beginLine.slice('-----BEGIN '.length, -'-----'.length);\n if (endLine !== `-----END ${label}-----`) {\n throw new Error('Invalid PEM structure');\n }\n const body = lines.slice(1, -1).join('');\n return {\n label,\n bytes: decodeBase64(body),\n };\n}\n","import {\n ECDH,\n createECDH,\n createHash,\n createPrivateKey,\n createPublicKey,\n generateKeyPairSync,\n sign as cryptoSign,\n verify as cryptoVerify,\n type KeyObject,\n} from 'node:crypto';\n\nimport bs58 from 'bs58';\nimport { ed25519, x25519 } from '@noble/curves/ed25519';\n\nimport { AuthenticationError, CryptoError } from '../errors/index.js';\nimport { decodeBase64Url, encodeBase64Url } from './base64.js';\nimport { decodePem, encodePem } from './pem.js';\n\nexport type KeyType = 'secp256k1' | 'secp256r1' | 'ed25519' | 'x25519';\nexport type PrivateKeyInput = string | PrivateKeyMaterial;\nexport type PublicKeyInput = string | PublicKeyMaterial;\n\nexport interface PrivateKeyMaterial {\n type: KeyType;\n bytes: Uint8Array;\n}\n\nexport interface PublicKeyMaterial {\n type: KeyType;\n bytes: Uint8Array;\n}\n\nexport interface GeneratedKeyPairPem {\n privateKeyPem: string;\n publicKeyPem: string;\n}\n\nconst PRIVATE_LABELS: Record<KeyType, string> = {\n secp256k1: 'ANP SECP256K1 PRIVATE KEY',\n secp256r1: 'ANP SECP256R1 PRIVATE KEY',\n ed25519: 'ANP ED25519 PRIVATE KEY',\n x25519: 'ANP X25519 PRIVATE KEY',\n};\n\nconst PUBLIC_LABELS: Record<KeyType, string> = {\n secp256k1: 'ANP SECP256K1 PUBLIC KEY',\n secp256r1: 'ANP SECP256R1 PUBLIC KEY',\n ed25519: 'ANP ED25519 PUBLIC KEY',\n x25519: 'ANP X25519 PUBLIC KEY',\n};\n\nconst EC_CURVES: Record<'secp256k1' | 'secp256r1', string> = {\n secp256k1: 'secp256k1',\n secp256r1: 'prime256v1',\n};\n\nexport function sha256(value: Uint8Array): Uint8Array {\n return new Uint8Array(createHash('sha256').update(value).digest());\n}\n\nexport function normalizePrivateKeyMaterial(input: PrivateKeyInput): PrivateKeyMaterial {\n return typeof input === 'string' ? privateKeyFromPem(input) : input;\n}\n\nexport function normalizePublicKeyMaterial(input: PublicKeyInput): PublicKeyMaterial {\n return typeof input === 'string' ? publicKeyFromPem(input) : input;\n}\n\nexport function generatePrivateKeyMaterial(type: KeyType): PrivateKeyMaterial {\n switch (type) {\n case 'secp256k1': {\n const { privateKey } = generateKeyPairSync('ec', { namedCurve: 'secp256k1' });\n const jwk = privateKey.export({ format: 'jwk' }) as JsonWebKey;\n return { type, bytes: requireBase64UrlBytes(jwk.d, 'Missing secp256k1 private key') };\n }\n case 'secp256r1': {\n const { privateKey } = generateKeyPairSync('ec', { namedCurve: 'prime256v1' });\n const jwk = privateKey.export({ format: 'jwk' }) as JsonWebKey;\n return { type, bytes: requireBase64UrlBytes(jwk.d, 'Missing secp256r1 private key') };\n }\n case 'ed25519': {\n const { privateKey } = generateKeyPairSync('ed25519');\n const jwk = privateKey.export({ format: 'jwk' }) as JsonWebKey;\n return { type, bytes: requireBase64UrlBytes(jwk.d, 'Missing ed25519 private key') };\n }\n case 'x25519': {\n const { privateKey } = generateKeyPairSync('x25519');\n const jwk = privateKey.export({ format: 'jwk' }) as JsonWebKey;\n return { type, bytes: requireBase64UrlBytes(jwk.d, 'Missing x25519 private key') };\n }\n default:\n throw new CryptoError(`Unsupported key type: ${String(type)}`);\n }\n}\n\nexport function derivePublicKey(privateKey: PrivateKeyMaterial): PublicKeyMaterial {\n switch (privateKey.type) {\n case 'secp256k1':\n case 'secp256r1': {\n const ecdh = createECDH(EC_CURVES[privateKey.type]);\n ecdh.setPrivateKey(Buffer.from(privateKey.bytes));\n return {\n type: privateKey.type,\n bytes: new Uint8Array(ecdh.getPublicKey(undefined, 'compressed')),\n };\n }\n case 'ed25519':\n return { type: 'ed25519', bytes: ed25519.getPublicKey(privateKey.bytes) };\n case 'x25519':\n return { type: 'x25519', bytes: x25519.getPublicKey(privateKey.bytes) };\n default:\n throw new CryptoError(`Unsupported key type: ${String(privateKey.type)}`);\n }\n}\n\nexport function generateKeyPairPem(type: KeyType): {\n privateKey: PrivateKeyMaterial;\n publicKey: PublicKeyMaterial;\n pair: GeneratedKeyPairPem;\n} {\n const privateKey = generatePrivateKeyMaterial(type);\n const publicKey = derivePublicKey(privateKey);\n return {\n privateKey,\n publicKey,\n pair: {\n privateKeyPem: privateKeyToPem(privateKey),\n publicKeyPem: publicKeyToPem(publicKey),\n },\n };\n}\n\nexport function privateKeyToPem(privateKey: PrivateKeyMaterial): string {\n return encodePem(PRIVATE_LABELS[privateKey.type], privateKey.bytes);\n}\n\nexport function publicKeyToPem(publicKey: PublicKeyMaterial): string {\n return encodePem(PUBLIC_LABELS[publicKey.type], publicKey.bytes);\n}\n\nexport function privateKeyFromPem(input: string): PrivateKeyMaterial {\n const decoded = decodePem(input);\n return { type: keyTypeFromLabel(decoded.label, true), bytes: decoded.bytes };\n}\n\nexport function publicKeyFromPem(input: string): PublicKeyMaterial {\n const decoded = decodePem(input);\n return { type: keyTypeFromLabel(decoded.label, false), bytes: decoded.bytes };\n}\n\nexport function signMessage(privateKey: PrivateKeyMaterial, message: Uint8Array): Uint8Array {\n const keyObject = toPrivateKeyObject(privateKey);\n switch (privateKey.type) {\n case 'secp256k1':\n case 'secp256r1':\n return new Uint8Array(\n cryptoSign('sha256', Buffer.from(message), {\n key: keyObject,\n dsaEncoding: 'ieee-p1363',\n })\n );\n case 'ed25519':\n return new Uint8Array(cryptoSign(null, Buffer.from(message), keyObject));\n case 'x25519':\n throw new CryptoError('X25519 keys cannot be used for signing');\n default:\n throw new CryptoError(`Unsupported key type: ${String(privateKey.type)}`);\n }\n}\n\nexport function verifyMessage(\n publicKey: PublicKeyMaterial,\n message: Uint8Array,\n signature: Uint8Array\n): boolean {\n const keyObject = toPublicKeyObject(publicKey);\n switch (publicKey.type) {\n case 'secp256k1':\n case 'secp256r1':\n return cryptoVerify(\n 'sha256',\n Buffer.from(message),\n { key: keyObject, dsaEncoding: 'ieee-p1363' },\n Buffer.from(signature)\n );\n case 'ed25519':\n return cryptoVerify(null, Buffer.from(message), keyObject, Buffer.from(signature));\n case 'x25519':\n throw new CryptoError('X25519 keys cannot be used for signature verification');\n default:\n throw new CryptoError(`Unsupported key type: ${String(publicKey.type)}`);\n }\n}\n\nexport function publicKeyToJwk(publicKey: PublicKeyMaterial): JsonWebKey {\n switch (publicKey.type) {\n case 'secp256k1':\n case 'secp256r1': {\n const uncompressed = new Uint8Array(\n ECDH.convertKey(\n Buffer.from(publicKey.bytes),\n EC_CURVES[publicKey.type],\n undefined,\n undefined,\n 'uncompressed'\n ) as Buffer\n );\n if (uncompressed.length !== 65 || uncompressed[0] !== 0x04) {\n throw new AuthenticationError('Invalid EC public key');\n }\n return {\n kty: 'EC',\n crv: publicKey.type === 'secp256k1' ? 'secp256k1' : 'P-256',\n x: encodeBase64Url(uncompressed.slice(1, 33)),\n y: encodeBase64Url(uncompressed.slice(33, 65)),\n };\n }\n case 'ed25519':\n return { kty: 'OKP', crv: 'Ed25519', x: encodeBase64Url(publicKey.bytes) };\n case 'x25519':\n return { kty: 'OKP', crv: 'X25519', x: encodeBase64Url(publicKey.bytes) };\n default:\n throw new AuthenticationError('Unsupported public key type');\n }\n}\n\nexport function computeJwkThumbprint(jwk: JsonWebKey): string {\n const ordered = Object.keys(jwk)\n .sort()\n .reduce<Record<string, string>>((result, key) => {\n const value = jwk[key as keyof JsonWebKey];\n if (typeof value === 'string') {\n result[key] = value;\n }\n return result;\n }, {});\n return encodeBase64Url(sha256(new TextEncoder().encode(JSON.stringify(ordered))));\n}\n\nexport function ed25519PublicKeyToMultibase(publicKey: Uint8Array): string {\n return `z${bs58.encode(Buffer.concat([Buffer.from([0xed, 0x01]), Buffer.from(publicKey)]))}`;\n}\n\nexport function x25519PublicKeyToMultibase(publicKey: Uint8Array): string {\n return `z${bs58.encode(Buffer.concat([Buffer.from([0xec, 0x01]), Buffer.from(publicKey)]))}`;\n}\n\nexport function parseEd25519Multibase(value: string): PublicKeyMaterial {\n const bytes = bs58.decode(stripMultibasePrefix(value));\n const normalized =\n bytes.length === 34 && bytes[0] === 0xed && bytes[1] === 0x01 ? bytes.slice(2) : bytes;\n if (normalized.length !== 32) {\n throw new AuthenticationError('Invalid Ed25519 multibase value');\n }\n return { type: 'ed25519', bytes: new Uint8Array(normalized) };\n}\n\nexport function parseX25519Multibase(value: string): PublicKeyMaterial {\n const bytes = bs58.decode(stripMultibasePrefix(value));\n const normalized =\n bytes.length === 34 && bytes[0] === 0xec && bytes[1] === 0x01 ? bytes.slice(2) : bytes;\n if (normalized.length !== 32) {\n throw new AuthenticationError('Invalid X25519 multibase value');\n }\n return { type: 'x25519', bytes: new Uint8Array(normalized) };\n}\n\nexport function publicKeyFromJwk(jwk: JsonWebKey): PublicKeyMaterial {\n if (jwk.kty === 'EC' && jwk.x && jwk.y) {\n const curve = jwk.crv;\n if (curve !== 'secp256k1' && curve !== 'P-256') {\n throw new AuthenticationError(`Unsupported EC curve: ${curve}`);\n }\n const keySize = 32;\n const uncompressed = Buffer.concat([\n Buffer.from([0x04]),\n leftPadCoordinate(decodeBase64Url(jwk.x), keySize),\n leftPadCoordinate(decodeBase64Url(jwk.y), keySize),\n ]);\n const bytes = new Uint8Array(\n ECDH.convertKey(\n uncompressed,\n curve === 'secp256k1' ? 'secp256k1' : 'prime256v1',\n undefined,\n undefined,\n 'compressed'\n ) as Buffer\n );\n return { type: curve === 'secp256k1' ? 'secp256k1' : 'secp256r1', bytes };\n }\n if (jwk.kty === 'OKP' && jwk.x) {\n if (jwk.crv === 'Ed25519') {\n return { type: 'ed25519', bytes: decodeBase64Url(jwk.x) };\n }\n if (jwk.crv === 'X25519') {\n return { type: 'x25519', bytes: decodeBase64Url(jwk.x) };\n }\n }\n throw new AuthenticationError('Unsupported JWK key material');\n}\n\nfunction leftPadCoordinate(value: Uint8Array, size: number): Buffer {\n if (value.length > size) {\n throw new AuthenticationError('Invalid EC public key coordinate length');\n }\n if (value.length === size) {\n return Buffer.from(value);\n }\n return Buffer.concat([Buffer.alloc(size - value.length), Buffer.from(value)]);\n}\n\nexport function toPrivateKeyObject(privateKey: PrivateKeyMaterial): KeyObject {\n switch (privateKey.type) {\n case 'secp256k1':\n case 'secp256r1': {\n const ecdh = createECDH(EC_CURVES[privateKey.type]);\n ecdh.setPrivateKey(Buffer.from(privateKey.bytes));\n const publicKey = new Uint8Array(ecdh.getPublicKey(undefined, 'uncompressed'));\n return createPrivateKey({\n key: {\n kty: 'EC',\n crv: privateKey.type === 'secp256k1' ? 'secp256k1' : 'P-256',\n d: encodeBase64Url(privateKey.bytes),\n x: encodeBase64Url(publicKey.slice(1, 33)),\n y: encodeBase64Url(publicKey.slice(33, 65)),\n },\n format: 'jwk',\n });\n }\n case 'ed25519': {\n const publicKey = ed25519.getPublicKey(privateKey.bytes);\n return createPrivateKey({\n key: {\n kty: 'OKP',\n crv: 'Ed25519',\n d: encodeBase64Url(privateKey.bytes),\n x: encodeBase64Url(publicKey),\n },\n format: 'jwk',\n });\n }\n case 'x25519': {\n const publicKey = x25519.getPublicKey(privateKey.bytes);\n return createPrivateKey({\n key: {\n kty: 'OKP',\n crv: 'X25519',\n d: encodeBase64Url(privateKey.bytes),\n x: encodeBase64Url(publicKey),\n },\n format: 'jwk',\n });\n }\n default:\n throw new CryptoError(`Unsupported key type: ${String(privateKey.type)}`);\n }\n}\n\nexport function toPublicKeyObject(publicKey: PublicKeyMaterial): KeyObject {\n return createPublicKey({\n key: publicKeyToJwk(publicKey) as import('node:crypto').JsonWebKey,\n format: 'jwk',\n });\n}\n\nfunction keyTypeFromLabel(label: string, isPrivate: boolean): KeyType {\n const source = isPrivate ? PRIVATE_LABELS : PUBLIC_LABELS;\n for (const [type, candidate] of Object.entries(source)) {\n if (candidate === label) {\n return type as KeyType;\n }\n }\n throw new AuthenticationError(`Unsupported PEM label: ${label}`);\n}\n\nfunction requireBase64UrlBytes(value: string | undefined, message: string): Uint8Array {\n if (!value) {\n throw new AuthenticationError(message);\n }\n return decodeBase64Url(value);\n}\n\nfunction stripMultibasePrefix(value: string): string {\n return value.startsWith('z') ? value.slice(1) : value;\n}\n","import bs58 from 'bs58';\n\nimport { AuthenticationError } from '../errors/index.js';\nimport { decodeBase64Url, encodeBase64Url } from '../internal/base64.js';\nimport {\n parseEd25519Multibase,\n parseX25519Multibase,\n publicKeyFromJwk,\n verifyMessage,\n type PublicKeyMaterial,\n} from '../internal/keys.js';\nimport type { VerificationMethodRecord } from './types.js';\n\nexport class VerificationMethod {\n constructor(\n public readonly id: string,\n public readonly methodType: string,\n public readonly publicKey: PublicKeyMaterial\n ) {}\n\n verifySignature(content: Uint8Array, signature: string): boolean {\n return verifyMessage(this.publicKey, content, decodeBase64Url(signature));\n }\n\n encodeSignature(signatureBytes: Uint8Array): string {\n if (this.publicKey.type === 'x25519') {\n throw new AuthenticationError('X25519 cannot encode signatures');\n }\n return encodeBase64Url(signatureBytes);\n }\n}\n\nexport function createVerificationMethod(method: VerificationMethodRecord): VerificationMethod {\n if (!method.type) {\n throw new AuthenticationError('Missing verification method type');\n }\n return new VerificationMethod(method.id ?? '', method.type, extractPublicKey(method));\n}\n\nexport function extractPublicKey(method: VerificationMethodRecord): PublicKeyMaterial {\n switch (method.type) {\n case 'EcdsaSecp256k1VerificationKey2019':\n return extractEcPublicKey(method, 'secp256k1');\n case 'EcdsaSecp256r1VerificationKey2019':\n return extractEcPublicKey(method, 'P-256');\n case 'Ed25519VerificationKey2018':\n case 'Ed25519VerificationKey2020':\n case 'Multikey':\n return extractEd25519PublicKey(method);\n case 'X25519KeyAgreementKey2019':\n return extractX25519PublicKey(method);\n case 'JsonWebKey2020':\n if (!method.publicKeyJwk) {\n throw new AuthenticationError('Missing key material');\n }\n return publicKeyFromJwk(method.publicKeyJwk);\n default:\n throw new AuthenticationError(`Unsupported verification method type: ${method.type}`);\n }\n}\n\nfunction extractEcPublicKey(\n method: VerificationMethodRecord,\n expectedCurve: 'secp256k1' | 'P-256'\n): PublicKeyMaterial {\n if (method.publicKeyJwk) {\n const publicKey = publicKeyFromJwk(method.publicKeyJwk);\n const actualCurve = publicKey.type === 'secp256k1' ? 'secp256k1' : 'P-256';\n if (actualCurve !== expectedCurve) {\n throw new AuthenticationError('Invalid JWK parameters');\n }\n return publicKey;\n }\n\n if (method.publicKeyMultibase) {\n return {\n type: expectedCurve === 'secp256k1' ? 'secp256k1' : 'secp256r1',\n bytes: new Uint8Array(bs58.decode(stripMultibasePrefix(method.publicKeyMultibase))),\n };\n }\n\n throw new AuthenticationError('Missing key material');\n}\n\nfunction extractEd25519PublicKey(method: VerificationMethodRecord): PublicKeyMaterial {\n if (method.publicKeyJwk) {\n return publicKeyFromJwk(method.publicKeyJwk);\n }\n if (method.publicKeyMultibase) {\n return parseEd25519Multibase(method.publicKeyMultibase);\n }\n if (method.publicKeyBase58) {\n const bytes = bs58.decode(method.publicKeyBase58);\n if (bytes.length !== 32) {\n throw new AuthenticationError('Invalid Ed25519 publicKeyBase58');\n }\n return {\n type: 'ed25519',\n bytes: new Uint8Array(bytes),\n };\n }\n throw new AuthenticationError('Missing key material');\n}\n\nfunction extractX25519PublicKey(method: VerificationMethodRecord): PublicKeyMaterial {\n if (!method.publicKeyMultibase) {\n throw new AuthenticationError('Missing key material');\n }\n return parseX25519Multibase(method.publicKeyMultibase);\n}\n\nfunction stripMultibasePrefix(value: string): string {\n return value.startsWith('z') ? value.slice(1) : value;\n}\n","import canonicalize from 'canonicalize';\n\nexport type JsonPrimitive = null | boolean | number | string;\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\nexport interface JsonObject {\n [key: string]: JsonValue;\n}\n\nexport function canonicalizeJson(value: unknown): Uint8Array {\n const output = canonicalize(value as never);\n if (output === undefined) {\n throw new Error('Failed to canonicalize JSON value');\n }\n return new TextEncoder().encode(output);\n}\n\nexport function cloneJson<T>(value: T): T {\n return structuredClone(value);\n}\n","import { ProofError } from '../errors/index.js';\nimport {\n normalizePrivateKeyMaterial,\n normalizePublicKeyMaterial,\n sha256,\n signMessage,\n verifyMessage,\n type PrivateKeyInput,\n type PublicKeyInput,\n} from '../internal/keys.js';\nimport { canonicalizeJson, cloneJson } from '../internal/json.js';\nimport { decodeBase64Url, encodeBase64Url } from '../internal/base64.js';\n\nexport const PROOF_TYPE_SECP256K1 = 'EcdsaSecp256k1Signature2019';\nexport const PROOF_TYPE_ED25519 = 'Ed25519Signature2020';\nexport const PROOF_TYPE_DATA_INTEGRITY = 'DataIntegrityProof';\n\nexport const CRYPTOSUITE_EDDSA_JCS_2022 = 'eddsa-jcs-2022';\nexport const CRYPTOSUITE_DIDWBA_SECP256K1_2025 = 'didwba-jcs-ecdsa-secp256k1-2025';\n\nexport interface ProofGenerationOptions {\n proofPurpose?: string;\n proofType?: string;\n cryptosuite?: string;\n created?: string;\n domain?: string;\n challenge?: string;\n}\n\nexport interface ProofVerificationOptions {\n expectedPurpose?: string;\n expectedDomain?: string;\n expectedChallenge?: string;\n}\n\nexport interface ProofObject {\n type: string;\n created: string;\n verificationMethod: string;\n proofPurpose: string;\n proofValue: string;\n cryptosuite?: string;\n domain?: string;\n challenge?: string;\n}\n\nexport function generateW3cProof<T extends object>(\n document: T,\n privateKeyInput: PrivateKeyInput,\n verificationMethod: string,\n options: ProofGenerationOptions = {}\n): T & { proof: ProofObject } {\n const privateKey = normalizePrivateKeyMaterial(privateKeyInput);\n const proofType = options.proofType ?? inferProofType(privateKey.type);\n validateProofCompatibility(privateKey.type, proofType, options.cryptosuite);\n\n const proof: ProofObject = {\n type: proofType,\n created: options.created ?? new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z'),\n verificationMethod,\n proofPurpose: options.proofPurpose ?? 'assertionMethod',\n proofValue: '',\n };\n\n if (proofType === PROOF_TYPE_DATA_INTEGRITY) {\n proof.cryptosuite = options.cryptosuite ?? inferCryptosuite(privateKey.type);\n }\n if (options.domain) {\n proof.domain = options.domain;\n }\n if (options.challenge) {\n proof.challenge = options.challenge;\n }\n\n const signingDocument = cloneJson(document);\n delete (signingDocument as { proof?: unknown }).proof;\n const signingInput = computeSigningInput(signingDocument, omitProofValue(proof));\n proof.proofValue = encodeBase64Url(signMessage(privateKey, signingInput));\n\n return {\n ...cloneJson(document),\n proof,\n };\n}\n\nexport function verifyW3cProof(\n document: object,\n publicKeyInput: PublicKeyInput,\n options: ProofVerificationOptions = {}\n): boolean {\n try {\n verifyW3cProofDetailed(document, publicKeyInput, options);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function verifyW3cProofDetailed(\n document: object,\n publicKeyInput: PublicKeyInput,\n options: ProofVerificationOptions = {}\n): void {\n const publicKey = normalizePublicKeyMaterial(publicKeyInput);\n const proof = (document as { proof?: unknown }).proof;\n if (!proof || typeof proof !== 'object') {\n throw new ProofError('Missing proof object');\n }\n\n const proofObject = proof as ProofObject;\n const proofType = requireStringField(proofObject, 'type');\n const proofValue = requireStringField(proofObject, 'proofValue');\n const proofPurpose = requireStringField(proofObject, 'proofPurpose');\n requireStringField(proofObject, 'verificationMethod');\n requireStringField(proofObject, 'created');\n\n validatePublicKeyCompatibility(publicKey.type, proofType, proofObject.cryptosuite);\n if (options.expectedPurpose && options.expectedPurpose !== proofPurpose) {\n throw new ProofError('Verification failed: proofPurpose mismatch');\n }\n if (options.expectedDomain && proofObject.domain !== options.expectedDomain) {\n throw new ProofError('Verification failed: domain mismatch');\n }\n if (options.expectedChallenge && proofObject.challenge !== options.expectedChallenge) {\n throw new ProofError('Verification failed: challenge mismatch');\n }\n\n const signingDocument = cloneJson(document);\n delete (signingDocument as { proof?: unknown }).proof;\n const signingInput = computeSigningInput(signingDocument, omitProofValue(proofObject));\n const signature = decodeBase64Url(proofValue);\n if (!verifyMessage(publicKey, signingInput, signature)) {\n throw new ProofError('Verification failed');\n }\n}\n\nfunction inferProofType(keyType: string): string {\n switch (keyType) {\n case 'secp256k1':\n return PROOF_TYPE_SECP256K1;\n case 'ed25519':\n return PROOF_TYPE_ED25519;\n default:\n return PROOF_TYPE_DATA_INTEGRITY;\n }\n}\n\nfunction inferCryptosuite(keyType: string): string {\n switch (keyType) {\n case 'ed25519':\n return CRYPTOSUITE_EDDSA_JCS_2022;\n case 'secp256k1':\n return CRYPTOSUITE_DIDWBA_SECP256K1_2025;\n default:\n throw new ProofError(`Unsupported cryptosuite for key type: ${keyType}`);\n }\n}\n\nfunction validateProofCompatibility(\n keyType: string,\n proofType: string,\n cryptosuite?: string\n): void {\n if (proofType === PROOF_TYPE_SECP256K1 && keyType !== 'secp256k1') {\n throw new ProofError('Key type mismatch for secp256k1 proof generation');\n }\n if (proofType === PROOF_TYPE_ED25519 && keyType !== 'ed25519') {\n throw new ProofError('Key type mismatch for Ed25519 proof generation');\n }\n if (proofType === PROOF_TYPE_DATA_INTEGRITY && cryptosuite) {\n validateCryptosuite(keyType, cryptosuite);\n }\n}\n\nfunction validatePublicKeyCompatibility(\n keyType: string,\n proofType: string,\n cryptosuite?: string\n): void {\n if (proofType === PROOF_TYPE_SECP256K1 && keyType !== 'secp256k1') {\n throw new ProofError('Invalid public key for proof verification');\n }\n if (proofType === PROOF_TYPE_ED25519 && keyType !== 'ed25519') {\n throw new ProofError('Invalid public key for proof verification');\n }\n if (proofType === PROOF_TYPE_DATA_INTEGRITY && cryptosuite) {\n validateCryptosuite(keyType, cryptosuite);\n }\n}\n\nfunction validateCryptosuite(keyType: string, cryptosuite: string): void {\n if (cryptosuite === CRYPTOSUITE_EDDSA_JCS_2022 && keyType !== 'ed25519') {\n throw new ProofError('Unsupported cryptosuite for non-Ed25519 key');\n }\n if (cryptosuite === CRYPTOSUITE_DIDWBA_SECP256K1_2025 && keyType !== 'secp256k1') {\n throw new ProofError('Unsupported cryptosuite for non-secp256k1 key');\n }\n if (\n cryptosuite !== CRYPTOSUITE_EDDSA_JCS_2022 &&\n cryptosuite !== CRYPTOSUITE_DIDWBA_SECP256K1_2025\n ) {\n throw new ProofError(`Unsupported cryptosuite: ${cryptosuite}`);\n }\n}\n\nfunction computeSigningInput(\n document: object,\n proofOptions: Omit<ProofObject, 'proofValue'>\n): Uint8Array {\n const documentHash = sha256(canonicalizeJson(document));\n const proofHash = sha256(canonicalizeJson(proofOptions));\n const combined = new Uint8Array(documentHash.length + proofHash.length);\n combined.set(proofHash, 0);\n combined.set(documentHash, proofHash.length);\n return combined;\n}\n\nfunction omitProofValue(proof: ProofObject): Omit<ProofObject, 'proofValue'> {\n const clone = { ...proof };\n delete (clone as { proofValue?: string }).proofValue;\n return clone;\n}\n\nfunction requireStringField(proof: ProofObject, key: keyof ProofObject): string {\n const value = proof[key];\n if (typeof value !== 'string' || value.length === 0) {\n throw new ProofError(`Missing proof field: ${String(key)}`);\n }\n return value;\n}\n","import { isIP } from 'node:net';\n\nimport { AuthenticationError, NetworkError } from '../errors/index.js';\nimport {\n computeJwkThumbprint,\n ed25519PublicKeyToMultibase,\n generateKeyPairPem,\n normalizePrivateKeyMaterial,\n normalizePublicKeyMaterial,\n publicKeyToJwk,\n sha256,\n signMessage,\n x25519PublicKeyToMultibase,\n type PublicKeyInput,\n type PublicKeyMaterial,\n} from '../internal/keys.js';\nimport { canonicalizeJson, cloneJson, type JsonObject } from '../internal/json.js';\nimport { encodeBase64Url } from '../internal/base64.js';\nimport {\n CRYPTOSUITE_DIDWBA_SECP256K1_2025,\n CRYPTOSUITE_EDDSA_JCS_2022,\n PROOF_TYPE_DATA_INTEGRITY,\n PROOF_TYPE_SECP256K1,\n generateW3cProof,\n verifyW3cProof,\n type ProofGenerationOptions,\n} from '../proof/proof.js';\nimport { createVerificationMethod, extractPublicKey } from './verification-methods.js';\nimport type {\n AnpMessageServiceOptions,\n DidDocument,\n DidDocumentBundle,\n DidDocumentOptions,\n DidProfile,\n DidResolutionOptions,\n LegacyAuthOptions,\n ParsedAuthHeader,\n ServiceRecord,\n VerificationMethodRecord,\n} from './types.js';\nimport { DidProfile as DidProfileEnum } from './types.js';\n\nexport const VM_KEY_AUTH = 'key-1';\nexport const VM_KEY_E2EE_SIGNING = 'key-2';\nexport const VM_KEY_E2EE_AGREEMENT = 'key-3';\nexport const ANP_MESSAGE_SERVICE_TYPE = 'ANPMessageService';\n\nexport async function resolveDidWbaDocument(\n did: string,\n verifyProof = true,\n options: DidResolutionOptions = {}\n): Promise<DidDocument> {\n if (!did.startsWith('did:wba:')) {\n throw new AuthenticationError('Invalid DID format');\n }\n\n void options.verifySsl;\n const url = buildDidResolutionUrl(did, options.baseUrlOverride);\n const timeoutMs = Math.round((options.timeoutSeconds ?? 10) * 1000);\n const response = await fetch(url, {\n headers: {\n Accept: 'application/json',\n ...(options.headers ?? {}),\n },\n signal: AbortSignal.timeout(timeoutMs),\n }).catch((error) => {\n throw new NetworkError('Network failure during DID resolution', undefined, error as Error);\n });\n\n if (!response.ok) {\n throw new NetworkError('Network failure during DID resolution', response.status);\n }\n\n const document = (await response.json()) as DidDocument;\n if (document.id !== did) {\n throw new AuthenticationError('Invalid DID document');\n }\n if (!validateDidDocumentBinding(document, verifyProof)) {\n throw new AuthenticationError('DID binding verification failed');\n }\n\n if (verifyProof && document.proof) {\n const verificationMethodId = document.proof.verificationMethod;\n const method = findVerificationMethod(document, verificationMethodId);\n if (!method) {\n throw new AuthenticationError('Verification method not found');\n }\n const publicKey = extractPublicKey(method);\n if (!verifyW3cProof(document, publicKey)) {\n throw new AuthenticationError('Verification failed');\n }\n }\n\n return document;\n}\n\nexport function buildAnpMessageService(\n didOrServiceRef: string,\n serviceEndpoint: string,\n options: AnpMessageServiceOptions = {}\n): ServiceRecord {\n const fragment = options.fragment ?? 'message';\n const serviceId =\n didOrServiceRef.startsWith('#') || didOrServiceRef.startsWith('did:')\n ? didOrServiceRef.startsWith('#')\n ? didOrServiceRef\n : `${didOrServiceRef}#${fragment}`\n : `${didOrServiceRef}#${fragment}`;\n\n const service: ServiceRecord = {\n id: serviceId,\n type: ANP_MESSAGE_SERVICE_TYPE,\n serviceEndpoint,\n };\n if (options.serviceDid) {\n service.serviceDid = options.serviceDid;\n }\n if (options.profiles?.length) {\n service.profiles = [...options.profiles];\n }\n if (options.securityProfiles?.length) {\n service.securityProfiles = [...options.securityProfiles];\n }\n if (options.accepts?.length) {\n service.accepts = [...options.accepts];\n }\n if (options.priority !== undefined) {\n service.priority = options.priority;\n }\n if (options.authSchemes?.length) {\n service.authSchemes = [...options.authSchemes];\n }\n return service;\n}\n\nexport function buildAgentMessageService(\n didOrServiceRef: string,\n serviceEndpoint: string,\n options: AnpMessageServiceOptions = {}\n): ServiceRecord {\n return buildAnpMessageService(didOrServiceRef, serviceEndpoint, {\n profiles: options.profiles ?? ['anp.core.binding.v1', 'anp.direct.base.v1', 'anp.direct.e2ee.v1'],\n securityProfiles: options.securityProfiles ?? ['transport-protected', 'direct-e2ee'],\n ...options,\n });\n}\n\nexport function buildGroupMessageService(\n didOrServiceRef: string,\n serviceEndpoint: string,\n options: AnpMessageServiceOptions = {}\n): ServiceRecord {\n return buildAnpMessageService(didOrServiceRef, serviceEndpoint, {\n profiles: options.profiles ?? ['anp.core.binding.v1', 'anp.group.base.v1', 'anp.group.e2ee.v1'],\n securityProfiles: options.securityProfiles ?? ['transport-protected', 'group-e2ee'],\n ...options,\n });\n}\n\nexport function createDidWbaDocument(\n hostname: string,\n options: DidDocumentOptions = {}\n): DidDocumentBundle {\n if (!hostname.trim()) {\n throw new AuthenticationError('Hostname cannot be empty');\n }\n if (isIP(hostname) !== 0) {\n throw new AuthenticationError('Hostname cannot be an IP address');\n }\n\n const didProfile = options.didProfile ?? DidProfileEnum.E1;\n const didBase = buildDidBase(hostname, options.port);\n const pathSegments = [...(options.pathSegments ?? [])];\n const contexts = ['https://www.w3.org/ns/did/v1'];\n const verificationMethods: VerificationMethodRecord[] = [];\n const authentication: string[] = [];\n const assertionMethod: string[] = [];\n const keyAgreement: string[] = [];\n const keys: DidDocumentBundle['keys'] = {};\n\n const authKey = generateKeyPairPem(\n didProfile === DidProfileEnum.E1 ? 'ed25519' : 'secp256k1'\n );\n const authPublicKey = authKey.publicKey;\n\n let did = didBase;\n if (didProfile === DidProfileEnum.E1 && pathSegments.length > 0) {\n pathSegments.push(`e1_${computeMultikeyFingerprint(authPublicKey)}`);\n }\n if (didProfile === DidProfileEnum.K1 && pathSegments.length > 0) {\n pathSegments.push(`k1_${computeJwkFingerprint(authPublicKey)}`);\n }\n did = joinDid(didBase, pathSegments);\n\n const authVerificationMethodId = `${did}#${VM_KEY_AUTH}`;\n const authVerificationMethod = buildAuthVerificationMethod(did, didProfile, authPublicKey, contexts);\n verificationMethods.push(authVerificationMethod);\n authentication.push(authVerificationMethodId);\n if (didProfile === DidProfileEnum.E1 || didProfile === DidProfileEnum.K1) {\n assertionMethod.push(authVerificationMethodId);\n }\n keys[VM_KEY_AUTH] = authKey.pair;\n\n if (options.enableE2ee !== false) {\n contexts.push('https://w3id.org/security/suites/x25519-2019/v1');\n const signingKey = generateKeyPairPem('secp256r1');\n const agreementKey = generateKeyPairPem('x25519');\n verificationMethods.push({\n id: `${did}#${VM_KEY_E2EE_SIGNING}`,\n type: 'EcdsaSecp256r1VerificationKey2019',\n controller: did,\n publicKeyJwk: publicKeyToJwk(signingKey.publicKey),\n });\n verificationMethods.push({\n id: `${did}#${VM_KEY_E2EE_AGREEMENT}`,\n type: 'X25519KeyAgreementKey2019',\n controller: did,\n publicKeyMultibase: x25519PublicKeyToMultibase(agreementKey.publicKey.bytes),\n });\n keyAgreement.push(`${did}#${VM_KEY_E2EE_AGREEMENT}`);\n keys[VM_KEY_E2EE_SIGNING] = signingKey.pair;\n keys[VM_KEY_E2EE_AGREEMENT] = agreementKey.pair;\n }\n\n const document: DidDocument = {\n '@context': contexts,\n id: did,\n verificationMethod: verificationMethods,\n authentication,\n };\n if (assertionMethod.length > 0) {\n document.assertionMethod = assertionMethod;\n }\n if (keyAgreement.length > 0) {\n document.keyAgreement = keyAgreement;\n }\n\n const services = buildServiceEntries(did, options.agentDescriptionUrl, options.services);\n if (services.length > 0) {\n document.service = services;\n }\n\n const proofOptions: ProofGenerationOptions = {\n proofPurpose: options.proofPurpose ?? 'assertionMethod',\n proofType:\n didProfile === DidProfileEnum.PlainLegacy ? PROOF_TYPE_SECP256K1 : PROOF_TYPE_DATA_INTEGRITY,\n cryptosuite:\n didProfile === DidProfileEnum.E1\n ? CRYPTOSUITE_EDDSA_JCS_2022\n : didProfile === DidProfileEnum.K1\n ? CRYPTOSUITE_DIDWBA_SECP256K1_2025\n : undefined,\n created: options.created,\n domain: options.domain,\n challenge: options.challenge,\n };\n\n const signedDocument = generateW3cProof(\n document,\n authKey.privateKey,\n options.verificationMethod ?? authVerificationMethodId,\n proofOptions\n );\n\n return {\n didDocument: signedDocument as DidDocument,\n keys,\n };\n}\n\nexport function createDidWbaDocumentWithKeyBinding(\n hostname: string,\n options: DidDocumentOptions = {}\n): DidDocumentBundle {\n return createDidWbaDocument(hostname, {\n ...options,\n pathSegments: options.pathSegments?.length ? options.pathSegments : ['user'],\n didProfile: DidProfileEnum.K1,\n });\n}\n\nexport function computeJwkFingerprint(publicKeyInput: PublicKeyInput): string {\n const publicKey = normalizePublicKeyMaterial(publicKeyInput);\n if (publicKey.type !== 'secp256k1') {\n throw new AuthenticationError('Invalid DID document');\n }\n return computeJwkThumbprint(publicKeyToJwk(publicKey));\n}\n\nexport function computeMultikeyFingerprint(publicKeyInput: PublicKeyInput): string {\n const publicKey = normalizePublicKeyMaterial(publicKeyInput);\n if (publicKey.type !== 'ed25519') {\n throw new AuthenticationError('Invalid DID document');\n }\n return computeJwkThumbprint(publicKeyToJwk(publicKey));\n}\n\nexport function verifyDidKeyBinding(\n did: string,\n bindingMaterial: VerificationMethodRecord | PublicKeyMaterial | string\n): boolean {\n const lastSegment = did.split(':').at(-1) ?? '';\n const publicKey = toPublicKeyMaterial(bindingMaterial);\n if (lastSegment.startsWith('k1_')) {\n return publicKey.type === 'secp256k1' && computeJwkFingerprint(publicKey) === lastSegment.slice(3);\n }\n if (lastSegment.startsWith('e1_')) {\n return publicKey.type === 'ed25519' && computeMultikeyFingerprint(publicKey) === lastSegment.slice(3);\n }\n return true;\n}\n\nexport function validateDidDocumentBinding(didDocument: DidDocument, verifyProof = true): boolean {\n const lastSegment = didDocument.id.split(':').at(-1) ?? '';\n if (lastSegment.startsWith('e1_')) {\n return validateE1Binding(didDocument, lastSegment.slice(3));\n }\n if (lastSegment.startsWith('k1_')) {\n if (verifyProof) {\n return validateK1Binding(didDocument, lastSegment.slice(3));\n }\n return didDocument.verificationMethod.some(\n (method) => isAuthenticationAuthorized(didDocument, method.id) && verifyDidKeyBinding(didDocument.id, method)\n );\n }\n return true;\n}\n\nexport function generateAuthHeader(\n didDocument: DidDocument,\n serviceDomain: string,\n privateKeyInput: string,\n version = '1.1',\n options: LegacyAuthOptions = {}\n): string {\n const payload = generateAuthPayload(\n didDocument,\n serviceDomain,\n privateKeyInput,\n version,\n options\n );\n return `DIDWba v=\"${payload.version}\", did=\"${payload.did}\", nonce=\"${payload.nonce}\", timestamp=\"${payload.timestamp}\", verification_method=\"${payload.verificationMethod}\", signature=\"${payload.signature}\"`;\n}\n\nexport function generateAuthJson(\n didDocument: DidDocument,\n serviceDomain: string,\n privateKeyInput: string,\n version = '1.1',\n options: LegacyAuthOptions = {}\n): string {\n const payload = generateAuthPayload(\n didDocument,\n serviceDomain,\n privateKeyInput,\n version,\n options\n );\n return JSON.stringify({\n v: payload.version,\n did: payload.did,\n nonce: payload.nonce,\n timestamp: payload.timestamp,\n verification_method: payload.verificationMethod,\n signature: payload.signature,\n });\n}\n\nexport function extractAuthHeaderParts(authHeader: string): ParsedAuthHeader {\n if (!authHeader.trimStart().startsWith('DIDWba')) {\n throw new AuthenticationError('Authentication header must start with DIDWba');\n }\n\n const versionMatch = authHeader.match(/\\bv=\"([^\"]+)\"/i);\n return {\n did: requiredHeaderField(authHeader, 'did'),\n nonce: requiredHeaderField(authHeader, 'nonce'),\n timestamp: requiredHeaderField(authHeader, 'timestamp'),\n verificationMethod: requiredHeaderField(authHeader, 'verification_method'),\n signature: requiredHeaderField(authHeader, 'signature'),\n version: versionMatch?.[1] ?? '1.1',\n };\n}\n\nexport function verifyAuthHeaderSignature(\n authHeader: string,\n didDocument: DidDocument,\n serviceDomain: string\n): boolean {\n verifyAuthPayload(extractAuthHeaderParts(authHeader), didDocument, serviceDomain);\n return true;\n}\n\nexport function verifyAuthJsonSignature(\n authJson: string,\n didDocument: DidDocument,\n serviceDomain: string\n): boolean {\n const value = JSON.parse(authJson) as Record<string, unknown>;\n verifyAuthPayload(\n {\n did: String(value.did ?? ''),\n nonce: String(value.nonce ?? ''),\n timestamp: String(value.timestamp ?? ''),\n verificationMethod: String(value.verification_method ?? ''),\n signature: String(value.signature ?? ''),\n version: String(value.v ?? '1.1'),\n },\n didDocument,\n serviceDomain\n );\n return true;\n}\n\nexport function findVerificationMethod(\n didDocument: DidDocument,\n verificationMethodId: string\n): VerificationMethodRecord | undefined {\n const directMethod = didDocument.verificationMethod.find(\n (method) => method.id === verificationMethodId\n );\n if (directMethod) {\n return directMethod;\n }\n for (const entry of didDocument.authentication) {\n if (typeof entry !== 'string' && entry.id === verificationMethodId) {\n return entry;\n }\n }\n for (const entry of didDocument.assertionMethod ?? []) {\n if (typeof entry !== 'string' && entry.id === verificationMethodId) {\n return entry;\n }\n }\n return undefined;\n}\n\nexport function isAuthenticationAuthorized(\n didDocument: DidDocument,\n verificationMethodId: string\n): boolean {\n return isVerificationMethodAuthorized(didDocument.authentication, verificationMethodId);\n}\n\nexport function isAssertionMethodAuthorized(\n didDocument: DidDocument,\n verificationMethodId: string\n): boolean {\n return isVerificationMethodAuthorized(didDocument.assertionMethod ?? [], verificationMethodId);\n}\n\nfunction validateE1Binding(didDocument: DidDocument, expectedFingerprint: string): boolean {\n const proof = didDocument.proof;\n if (!proof) {\n return false;\n }\n if (proof.type !== PROOF_TYPE_DATA_INTEGRITY || proof.cryptosuite !== CRYPTOSUITE_EDDSA_JCS_2022) {\n return false;\n }\n if (!isAssertionMethodAuthorized(didDocument, proof.verificationMethod)) {\n return false;\n }\n const method = findVerificationMethod(didDocument, proof.verificationMethod);\n if (!method) {\n return false;\n }\n const publicKey = extractPublicKey(method);\n return (\n publicKey.type === 'ed25519' &&\n verifyW3cProof(didDocument, publicKey, { expectedPurpose: 'assertionMethod' }) &&\n computeMultikeyFingerprint(publicKey) === expectedFingerprint\n );\n}\n\nfunction validateK1Binding(didDocument: DidDocument, expectedFingerprint: string): boolean {\n const proof = didDocument.proof;\n if (!proof) {\n return false;\n }\n if (!isAssertionMethodAuthorized(didDocument, proof.verificationMethod)) {\n return false;\n }\n const method = findVerificationMethod(didDocument, proof.verificationMethod);\n if (!method) {\n return false;\n }\n const publicKey = extractPublicKey(method);\n return (\n publicKey.type === 'secp256k1' &&\n verifyW3cProof(didDocument, publicKey, { expectedPurpose: 'assertionMethod' }) &&\n computeJwkFingerprint(publicKey) === expectedFingerprint\n );\n}\n\nfunction generateAuthPayload(\n didDocument: DidDocument,\n serviceDomain: string,\n privateKeyInput: string,\n version: string,\n options: LegacyAuthOptions = {}\n): ParsedAuthHeader {\n const did = didDocument.id;\n const [method, fragment] = selectAuthenticationMethod(didDocument);\n const nonce = options.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16)));\n const timestamp = options.timestamp ?? new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n const payload = {\n nonce,\n timestamp,\n [domainFieldForVersion(version)]: serviceDomain,\n did,\n };\n const contentHash = sha256(canonicalizeJson(payload));\n const signatureBytes = signMessage(normalizePrivateKeyMaterial(privateKeyInput), contentHash);\n const verifier = createVerificationMethod(method);\n return {\n did,\n nonce,\n timestamp,\n verificationMethod: fragment,\n signature: verifier.encodeSignature(signatureBytes),\n version,\n };\n}\n\nfunction verifyAuthPayload(\n parsed: ParsedAuthHeader,\n didDocument: DidDocument,\n serviceDomain: string\n): void {\n if (didDocument.id.toLowerCase() !== parsed.did.toLowerCase()) {\n throw new AuthenticationError('Verification failed');\n }\n\n const payload = {\n nonce: parsed.nonce,\n timestamp: parsed.timestamp,\n [domainFieldForVersion(parsed.version)]: serviceDomain,\n did: parsed.did,\n };\n const contentHash = sha256(canonicalizeJson(payload));\n const verificationMethodId = `${parsed.did}#${parsed.verificationMethod}`;\n const method = findVerificationMethod(didDocument, verificationMethodId);\n if (!method) {\n throw new AuthenticationError('Verification method not found');\n }\n const verifier = createVerificationMethod(method);\n if (!verifier.verifySignature(contentHash, parsed.signature)) {\n throw new AuthenticationError('Verification failed');\n }\n}\n\nfunction selectAuthenticationMethod(\n didDocument: DidDocument\n): [VerificationMethodRecord, string] {\n const first = didDocument.authentication[0];\n if (!first) {\n throw new AuthenticationError('Invalid DID document');\n }\n if (typeof first === 'string') {\n const method = findVerificationMethod(didDocument, first);\n if (!method) {\n throw new AuthenticationError('Verification method not found');\n }\n return [method, first.split('#').at(-1) ?? ''];\n }\n return [first, first.id.split('#').at(-1) ?? ''];\n}\n\nfunction buildAuthVerificationMethod(\n did: string,\n didProfile: DidProfile,\n authPublicKey: PublicKeyMaterial,\n contexts: string[]\n): VerificationMethodRecord {\n if (didProfile === DidProfileEnum.E1) {\n contexts.push('https://w3id.org/security/data-integrity/v2');\n contexts.push('https://w3id.org/security/multikey/v1');\n return {\n id: `${did}#${VM_KEY_AUTH}`,\n type: 'Multikey',\n controller: did,\n publicKeyMultibase: ed25519PublicKeyToMultibase(authPublicKey.bytes),\n };\n }\n\n contexts.push('https://w3id.org/security/suites/jws-2020/v1');\n contexts.push('https://w3id.org/security/suites/secp256k1-2019/v1');\n if (didProfile === DidProfileEnum.K1) {\n contexts.push('https://w3id.org/security/data-integrity/v2');\n }\n return {\n id: `${did}#${VM_KEY_AUTH}`,\n type: 'EcdsaSecp256k1VerificationKey2019',\n controller: did,\n publicKeyJwk: publicKeyToJwk(authPublicKey),\n };\n}\n\nfunction buildServiceEntries(\n did: string,\n agentDescriptionUrl?: string,\n services?: Array<ServiceRecord | JsonObject>\n): ServiceRecord[] {\n const output: ServiceRecord[] = [];\n if (agentDescriptionUrl) {\n output.push({\n id: `${did}#ad`,\n type: 'AgentDescription',\n serviceEndpoint: agentDescriptionUrl,\n });\n }\n for (const service of services ?? []) {\n const copy = cloneJson(service) as unknown as ServiceRecord;\n if (typeof copy.id === 'string' && copy.id.startsWith('#')) {\n copy.id = `${did}${copy.id}`;\n }\n output.push(copy);\n }\n return output;\n}\n\nfunction buildDidBase(hostname: string, port?: number): string {\n return port === undefined ? `did:wba:${hostname}` : `did:wba:${hostname}%3A${port}`;\n}\n\nfunction joinDid(base: string, pathSegments: string[]): string {\n return pathSegments.length === 0 ? base : `${base}:${pathSegments.join(':')}`;\n}\n\nfunction buildDidResolutionUrl(did: string, baseUrlOverride?: string): string {\n const parts = did.split(':');\n if (parts.length < 3) {\n throw new AuthenticationError('Invalid DID format');\n }\n const domain = decodeURIComponent(parts[2]);\n const pathSegments = parts.slice(3);\n const baseUrl = (baseUrlOverride ?? `https://${domain}`).replace(/\\/$/, '');\n if (pathSegments.length === 0) {\n return `${baseUrl}/.well-known/did.json`;\n }\n return `${baseUrl}/${pathSegments.join('/')}/did.json`;\n}\n\nfunction domainFieldForVersion(version: string): 'aud' | 'service' {\n return Number.parseFloat(version) >= 1.1 ? 'aud' : 'service';\n}\n\nfunction requiredHeaderField(authHeader: string, field: string): string {\n const match = authHeader.match(new RegExp(`${field}=\"([^\"]+)\"`, 'i'));\n if (!match?.[1]) {\n throw new AuthenticationError(`Missing field in authorization header: ${field}`);\n }\n return match[1];\n}\n\nfunction toPublicKeyMaterial(\n bindingMaterial: VerificationMethodRecord | PublicKeyMaterial | string\n): PublicKeyMaterial {\n if (typeof bindingMaterial === 'string') {\n return normalizePublicKeyMaterial(bindingMaterial);\n }\n if ('bytes' in bindingMaterial) {\n return bindingMaterial;\n }\n return extractPublicKey(bindingMaterial);\n}\n\nfunction isVerificationMethodAuthorized(\n entries: Array<string | VerificationMethodRecord>,\n verificationMethodId: string\n): boolean {\n return entries.some((entry) =>\n typeof entry === 'string' ? entry === verificationMethodId : entry.id === verificationMethodId\n );\n}\n","import { AuthenticationError, NetworkError } from '../errors/index.js';\nimport { verifyW3cProof } from '../proof/proof.js';\nimport type { DidDocument, DidResolutionOptions } from './types.js';\nimport {\n findVerificationMethod,\n resolveDidWbaDocument,\n} from './did-wba.js';\nimport { extractPublicKey } from './verification-methods.js';\n\nexport async function resolveDidDocument(\n did: string,\n verifyProof = true,\n options: DidResolutionOptions = {}\n): Promise<DidDocument> {\n if (did.startsWith('did:wba:')) {\n return resolveDidWbaDocument(did, verifyProof, options);\n }\n if (!did.startsWith('did:web:')) {\n throw new AuthenticationError('Unsupported DID method');\n }\n\n void options.verifySsl;\n const url = buildDidResolutionUrl(did, options.baseUrlOverride);\n const timeoutMs = Math.round((options.timeoutSeconds ?? 10) * 1000);\n const response = await fetch(url, {\n headers: {\n Accept: 'application/json',\n ...(options.headers ?? {}),\n },\n signal: AbortSignal.timeout(timeoutMs),\n }).catch((error) => {\n throw new NetworkError('Network failure during DID resolution', undefined, error as Error);\n });\n\n if (!response.ok) {\n throw new NetworkError('Network failure during DID resolution', response.status);\n }\n\n const document = (await response.json()) as DidDocument;\n if (document.id !== did) {\n throw new AuthenticationError('Invalid DID document');\n }\n if (verifyProof && document.proof) {\n const verificationMethodId = document.proof.verificationMethod;\n const method = findVerificationMethod(document, verificationMethodId);\n if (!method) {\n throw new AuthenticationError('Verification method not found');\n }\n const publicKey = extractPublicKey(method);\n if (!verifyW3cProof(document, publicKey)) {\n throw new AuthenticationError('Verification failed');\n }\n }\n return document;\n}\n\nfunction buildDidResolutionUrl(did: string, baseUrlOverride?: string): string {\n const parts = did.split(':');\n if (parts.length < 3) {\n throw new AuthenticationError('Invalid DID format');\n }\n const domain = decodeURIComponent(parts[2]);\n const pathSegments = parts.slice(3).map((segment) => decodeURIComponent(segment));\n const baseUrl = (baseUrlOverride ?? `https://${domain}`).replace(/\\/$/, '');\n if (pathSegments.length === 0) {\n return `${baseUrl}/.well-known/did.json`;\n }\n return `${baseUrl}/${pathSegments.join('/')}/did.json`;\n}\n","import { randomBytes } from 'node:crypto';\n\nimport { AuthenticationError } from '../errors/index.js';\nimport { encodeBase64, encodeBase64Url } from '../internal/base64.js';\nimport {\n normalizePrivateKeyMaterial,\n sha256,\n signMessage,\n verifyMessage,\n type PrivateKeyInput,\n} from '../internal/keys.js';\nimport type { DidDocument, HttpSignatureOptions, SignatureMetadata } from './types.js';\nimport { findVerificationMethod } from './did-wba.js';\nimport { extractPublicKey } from './verification-methods.js';\n\nexport function buildContentDigest(body: Uint8Array | string): string {\n const digest = sha256(toBytes(body));\n return `sha-256=:${encodeBase64(digest)}:`;\n}\n\nexport function verifyContentDigest(body: Uint8Array | string, contentDigest: string): boolean {\n return buildContentDigest(body) === contentDigest.trim();\n}\n\nexport function generateHttpSignatureHeaders(\n didDocument: DidDocument,\n requestUrl: string,\n requestMethod: string,\n privateKeyInput: PrivateKeyInput,\n headers: Record<string, string> = {},\n body?: Uint8Array | string,\n options: HttpSignatureOptions = {}\n): Record<string, string> {\n const keyid = options.keyid ?? selectDefaultKeyid(didDocument);\n const coveredComponents = options.coveredComponents ?? ['@method', '@target-uri', '@authority'];\n const headersToSign = { ...headers };\n const bodyBytes = body ? toBytes(body) : new Uint8Array(0);\n const covered = [...coveredComponents];\n\n if (bodyBytes.length > 0) {\n headersToSign['Content-Digest'] ??= buildContentDigest(bodyBytes);\n headersToSign['Content-Length'] ??= String(bodyBytes.length);\n if (!covered.some((component) => component.toLowerCase() === 'content-digest')) {\n covered.push('content-digest');\n }\n }\n\n const created = options.created ?? Math.floor(Date.now() / 1000);\n const expires = options.expires ?? created + 300;\n const nonce = options.nonce ?? encodeBase64Url(randomBytes(16));\n const signatureBase = buildSignatureBase(\n covered,\n requestMethod,\n requestUrl,\n headersToSign,\n created,\n expires,\n nonce,\n keyid\n );\n\n const signature = signMessage(\n normalizePrivateKeyMaterial(privateKeyInput),\n new TextEncoder().encode(signatureBase)\n );\n\n const result: Record<string, string> = {\n 'Signature-Input': `sig1=${serializeSignatureParams(covered, created, expires, nonce, keyid)}`,\n Signature: `sig1=:${Buffer.from(signature).toString('base64')}:`,\n };\n\n if (headersToSign['Content-Digest']) {\n result['Content-Digest'] = headersToSign['Content-Digest'];\n }\n return result;\n}\n\nexport function extractSignatureMetadata(headers: Record<string, string>): SignatureMetadata {\n const signatureInput = getHeaderCaseInsensitive(headers, 'Signature-Input');\n const signatureHeader = getHeaderCaseInsensitive(headers, 'Signature');\n if (!signatureInput || !signatureHeader) {\n throw new AuthenticationError('Missing Signature-Input or Signature header');\n }\n\n const [labelInput, components, params] = parseSignatureInput(signatureInput);\n const [labelSignature] = parseSignatureHeader(signatureHeader);\n if (labelInput !== labelSignature) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n const keyid = params.keyid;\n const created = Number(params.created);\n if (!keyid || Number.isNaN(created)) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n return {\n label: labelInput,\n components,\n keyid,\n nonce: params.nonce,\n created,\n expires: params.expires ? Number(params.expires) : undefined,\n };\n}\n\nexport function verifyHttpMessageSignature(\n didDocument: DidDocument,\n requestMethod: string,\n requestUrl: string,\n headers: Record<string, string>,\n body?: Uint8Array | string\n): SignatureMetadata {\n const signatureInput = getHeaderCaseInsensitive(headers, 'Signature-Input');\n const signatureHeader = getHeaderCaseInsensitive(headers, 'Signature');\n if (!signatureInput || !signatureHeader) {\n throw new AuthenticationError('Missing Signature-Input or Signature header');\n }\n\n const [labelInput, components, params] = parseSignatureInput(signatureInput);\n const [labelSignature, signatureBytes] = parseSignatureHeader(signatureHeader);\n if (labelInput !== labelSignature) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n const keyid = params.keyid;\n const created = Number(params.created);\n if (!keyid || Number.isNaN(created)) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n const bodyBytes = body ? toBytes(body) : new Uint8Array(0);\n if (\n bodyBytes.length > 0 ||\n components.some((component) => component.toLowerCase() === 'content-digest')\n ) {\n const contentDigest = getHeaderCaseInsensitive(headers, 'Content-Digest');\n if (!contentDigest) {\n throw new AuthenticationError('Missing Content-Digest header');\n }\n if (!verifyContentDigest(bodyBytes, contentDigest)) {\n throw new AuthenticationError('Content-Digest verification failed');\n }\n }\n\n const method = findVerificationMethod(didDocument, keyid);\n if (!method) {\n throw new AuthenticationError('Verification method not found');\n }\n\n const publicKey = extractPublicKey(method);\n const signatureBase = buildSignatureBase(\n components,\n requestMethod,\n requestUrl,\n headers,\n created,\n params.expires ? Number(params.expires) : undefined,\n params.nonce,\n keyid\n );\n if (!verifyMessage(publicKey, new TextEncoder().encode(signatureBase), signatureBytes)) {\n throw new AuthenticationError('Signature verification failed');\n }\n\n return {\n label: labelInput,\n components,\n keyid,\n nonce: params.nonce,\n created,\n expires: params.expires ? Number(params.expires) : undefined,\n };\n}\n\nfunction buildSignatureBase(\n components: string[],\n method: string,\n url: string,\n headers: Record<string, string>,\n created: number,\n expires: number | undefined,\n nonce: string | undefined,\n keyid: string\n): string {\n const lines = components.map(\n (component) => `\"${component}\": ${componentValue(component, method, url, headers)}`\n );\n lines.push(\n `\"@signature-params\": ${serializeSignatureParams(components, created, expires, nonce, keyid)}`\n );\n return lines.join('\\n');\n}\n\nfunction componentValue(\n component: string,\n method: string,\n url: string,\n headers: Record<string, string>\n): string {\n switch (component) {\n case '@method':\n return method.toUpperCase();\n case '@target-uri':\n return url;\n case '@authority': {\n const parsed = new URL(url);\n return parsed.port ? `${parsed.hostname}:${parsed.port}` : parsed.hostname;\n }\n default: {\n const value = getHeaderCaseInsensitive(headers, component);\n if (!value) {\n throw new AuthenticationError('Invalid signature input');\n }\n return value;\n }\n }\n}\n\nfunction serializeSignatureParams(\n components: string[],\n created: number,\n expires: number | undefined,\n nonce: string | undefined,\n keyid: string\n): string {\n const quotedComponents = components.map((component) => `\"${component}\"`).join(' ');\n const parts = [`created=${created}`];\n if (expires !== undefined) {\n parts.push(`expires=${expires}`);\n }\n if (nonce) {\n parts.push(`nonce=\"${nonce}\"`);\n }\n parts.push(`keyid=\"${keyid}\"`);\n return `(${quotedComponents});${parts.join(';')}`;\n}\n\nfunction parseSignatureInput(value: string): [string, string[], Record<string, string>] {\n const separator = value.indexOf('=');\n if (separator < 0) {\n throw new AuthenticationError('Invalid signature input');\n }\n const label = value.slice(0, separator);\n const remainder = value.slice(separator + 1);\n const openIndex = remainder.indexOf('(');\n const closeIndex = remainder.indexOf(')');\n if (openIndex < 0 || closeIndex < 0 || closeIndex <= openIndex) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n const components = remainder\n .slice(openIndex + 1, closeIndex)\n .split(/\\s+/)\n .map((component) => component.replaceAll('\"', ''))\n .filter(Boolean);\n if (components.length === 0) {\n throw new AuthenticationError('Invalid signature input');\n }\n\n const params = remainder\n .slice(closeIndex + 1)\n .replace(/^;/, '')\n .split(';')\n .filter(Boolean)\n .reduce<Record<string, string>>((result, part) => {\n const [name, rawValue] = part.split('=', 2);\n if (!name || rawValue === undefined) {\n throw new AuthenticationError('Invalid signature input');\n }\n result[name] = rawValue.replace(/^\"|\"$/g, '');\n return result;\n }, {});\n\n return [label, components, params];\n}\n\nfunction parseSignatureHeader(value: string): [string, Uint8Array] {\n const separator = value.indexOf('=');\n if (separator < 0) {\n throw new AuthenticationError('Invalid signature header format');\n }\n const label = value.slice(0, separator);\n const raw = value.slice(separator + 1);\n if (!raw.startsWith(':') || !raw.endsWith(':')) {\n throw new AuthenticationError('Invalid signature header format');\n }\n return [label, new Uint8Array(Buffer.from(raw.slice(1, -1), 'base64'))];\n}\n\nfunction selectDefaultKeyid(didDocument: DidDocument): string {\n const first = didDocument.authentication[0];\n if (typeof first === 'string') {\n return first;\n }\n if (first?.id) {\n return first.id;\n }\n throw new AuthenticationError('Verification method not found');\n}\n\nfunction getHeaderCaseInsensitive(headers: Record<string, string>, name: string): string | undefined {\n const target = name.toLowerCase();\n return Object.entries(headers).find(([key]) => key.toLowerCase() === target)?.[1];\n}\n\nfunction toBytes(value: Uint8Array | string): Uint8Array {\n return typeof value === 'string' ? new TextEncoder().encode(value) : value;\n}\n","import { readFile } from 'node:fs/promises';\n\nimport { generateAuthHeader } from './did-wba.js';\nimport { generateHttpSignatureHeaders } from './http-signatures.js';\nimport { AuthMode, type DidDocument } from './types.js';\n\nexport class DIDWbaAuthHeader {\n private didDocumentCache?: DidDocument;\n\n private readonly tokens = new Map<string, string>();\n\n constructor(\n private readonly didDocumentPath: string,\n private readonly privateKeyPath: string,\n private readonly authMode: AuthMode = AuthMode.HttpSignatures\n ) {}\n\n async getAuthHeaders(\n serverUrl: string,\n forceNew = false,\n method = 'GET',\n headers?: Record<string, string>,\n body?: Uint8Array | string\n ): Promise<Record<string, string>> {\n const domain = extractDomain(serverUrl);\n if (!forceNew) {\n const token = this.tokens.get(domain);\n if (token) {\n return { Authorization: `Bearer ${token}` };\n }\n }\n\n const [didDocument, privateKeyPem] = await Promise.all([\n this.loadDidDocument(),\n readFile(this.privateKeyPath, 'utf8'),\n ]);\n\n if (this.authMode === AuthMode.LegacyDidWba) {\n return {\n Authorization: generateAuthHeader(didDocument, domain, privateKeyPem, '1.1'),\n };\n }\n\n return generateHttpSignatureHeaders(\n didDocument,\n serverUrl,\n method,\n privateKeyPem,\n headers,\n body\n );\n }\n\n async getAuthHeader(\n serverUrl: string,\n forceNew = false,\n method = 'GET',\n headers?: Record<string, string>,\n body?: Uint8Array | string\n ): Promise<Record<string, string>> {\n return this.getAuthHeaders(serverUrl, forceNew, method, headers, body);\n }\n\n updateToken(serverUrl: string, headers: Record<string, string>): string | undefined {\n const domain = extractDomain(serverUrl);\n const authenticationInfo = getHeaderCaseInsensitive(headers, 'Authentication-Info');\n if (authenticationInfo) {\n const parsed = parseAuthenticationInfo(authenticationInfo);\n const accessToken = parsed.access_token;\n const tokenType = parsed.token_type ?? 'Bearer';\n if (accessToken && tokenType.toLowerCase() === 'bearer') {\n this.tokens.set(domain, accessToken);\n return accessToken;\n }\n }\n const authorization = getHeaderCaseInsensitive(headers, 'Authorization');\n if (authorization?.startsWith('Bearer ')) {\n const token = authorization.slice(7);\n this.tokens.set(domain, token);\n return token;\n }\n return undefined;\n }\n\n clearToken(serverUrl: string): void {\n this.tokens.delete(extractDomain(serverUrl));\n }\n\n clearAllTokens(): void {\n this.tokens.clear();\n }\n\n shouldRetryAfter401(responseHeaders: Record<string, string>): boolean {\n const wwwAuthenticate = getHeaderCaseInsensitive(responseHeaders, 'WWW-Authenticate');\n if (!wwwAuthenticate) {\n return false;\n }\n const challenge = parseWwwAuthenticate(wwwAuthenticate);\n if (challenge.nonce) {\n return true;\n }\n return !['invalid_did', 'invalid_verification_method', 'forbidden_did'].includes(\n challenge.error ?? ''\n );\n }\n\n async getChallengeAuthHeaders(\n serverUrl: string,\n responseHeaders: Record<string, string>,\n method = 'GET',\n headers?: Record<string, string>,\n body?: Uint8Array | string\n ): Promise<Record<string, string>> {\n const wwwAuthenticate = getHeaderCaseInsensitive(responseHeaders, 'WWW-Authenticate');\n const acceptSignature = getHeaderCaseInsensitive(responseHeaders, 'Accept-Signature');\n const challenge = wwwAuthenticate ? parseWwwAuthenticate(wwwAuthenticate) : {};\n const coveredComponents = normalizeCoveredComponents(\n acceptSignature ? parseAcceptSignature(acceptSignature) : undefined,\n headers,\n body\n );\n\n const [didDocument, privateKeyPem] = await Promise.all([\n this.loadDidDocument(),\n readFile(this.privateKeyPath, 'utf8'),\n ]);\n\n if (this.authMode === AuthMode.LegacyDidWba) {\n return {\n Authorization: generateAuthHeader(\n didDocument,\n extractDomain(serverUrl),\n privateKeyPem,\n '1.1',\n {\n nonce: challenge.nonce,\n }\n ),\n };\n }\n\n return generateHttpSignatureHeaders(\n didDocument,\n serverUrl,\n method,\n privateKeyPem,\n headers,\n body,\n {\n nonce: challenge.nonce,\n coveredComponents,\n }\n );\n }\n\n async getChallengeAuthHeader(\n serverUrl: string,\n responseHeaders: Record<string, string>,\n method = 'GET',\n headers?: Record<string, string>,\n body?: Uint8Array | string\n ): Promise<Record<string, string>> {\n return this.getChallengeAuthHeaders(serverUrl, responseHeaders, method, headers, body);\n }\n\n private async loadDidDocument(): Promise<DidDocument> {\n if (!this.didDocumentCache) {\n this.didDocumentCache = JSON.parse(\n await readFile(this.didDocumentPath, 'utf8')\n ) as DidDocument;\n }\n return this.didDocumentCache;\n }\n}\n\nfunction extractDomain(serverUrl: string): string {\n try {\n return new URL(serverUrl).hostname;\n } catch {\n return serverUrl;\n }\n}\n\nfunction getHeaderCaseInsensitive(\n headers: Record<string, string>,\n name: string\n): string | undefined {\n const target = name.toLowerCase();\n return Object.entries(headers).find(([key]) => key.toLowerCase() === target)?.[1];\n}\n\nfunction parseAuthenticationInfo(value: string): Record<string, string> {\n return value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean)\n .reduce<Record<string, string>>((result, item) => {\n const [key, rawValue] = item.split('=', 2);\n if (key && rawValue) {\n result[key.trim()] = rawValue.trim().replace(/^\"|\"$/g, '');\n }\n return result;\n }, {});\n}\n\nfunction parseWwwAuthenticate(value: string): Record<string, string> {\n const normalized = value.replace(/^DIDWba\\s+/i, '').trim();\n const matches = [...normalized.matchAll(/([\\w-]+)=(\"[^\"]*\"|[^,]+)/g)];\n return matches.reduce<Record<string, string>>((result, match) => {\n result[match[1]] = match[2].trim().replace(/^\"|\"$/g, '');\n return result;\n }, {});\n}\n\nfunction parseAcceptSignature(value: string): string[] {\n return [...value.matchAll(/\"([^\"]+)\"/g)].map((match) => match[1]);\n}\n\nfunction normalizeCoveredComponents(\n coveredComponents: string[] | undefined,\n headers: Record<string, string> | undefined,\n body: Uint8Array | string | undefined\n): string[] | undefined {\n if (!coveredComponents) {\n return undefined;\n }\n const normalizedHeaders = Object.fromEntries(\n Object.entries(headers ?? {}).map(([key, value]) => [key.toLowerCase(), value])\n );\n const bodyPresent =\n body !== undefined &&\n !(\n (typeof body === 'string' && body.length === 0) ||\n (body instanceof Uint8Array && body.byteLength === 0)\n );\n\n return coveredComponents.filter((component) => {\n const normalized = component.toLowerCase();\n if (normalized === 'content-digest' && !bodyPresent) {\n return false;\n }\n if (\n normalized === 'content-length' &&\n !bodyPresent &&\n !('content-length' in normalizedHeaders)\n ) {\n return false;\n }\n if (normalized === 'content-type' && !('content-type' in normalizedHeaders)) {\n return false;\n }\n if (\n !normalized.startsWith('@') &&\n normalized !== 'content-length' &&\n normalized !== 'content-digest' &&\n !(normalized in normalizedHeaders)\n ) {\n return false;\n }\n return true;\n });\n}\n","import { SignJWT, importPKCS8, importSPKI, jwtVerify } from 'jose';\nimport {\n extractAuthHeaderParts,\n isAuthenticationAuthorized,\n resolveDidWbaDocument,\n validateDidDocumentBinding,\n verifyAuthHeaderSignature,\n} from './did-wba.js';\nimport { extractSignatureMetadata, verifyHttpMessageSignature } from './http-signatures.js';\nimport type { DidDocument, DidResolutionOptions, DidResolver } from './types.js';\n\nexport interface DidWbaVerifierConfig {\n jwtPrivateKey?: string;\n jwtPublicKey?: string;\n jwtAlgorithm?: string;\n accessTokenExpireMinutes?: number;\n nonceExpirationMinutes?: number;\n timestampExpirationMinutes?: number;\n allowedDomains?: string[];\n allowHttpSignatures?: boolean;\n allowLegacyDidwba?: boolean;\n emitAuthenticationInfoHeader?: boolean;\n emitLegacyAuthorizationHeader?: boolean;\n requireNonceForHttpSignatures?: boolean;\n didResolutionOptions?: DidResolutionOptions;\n didResolver?: DidResolver;\n externalNonceValidator?: (did: string, nonce: string) => boolean | Promise<boolean>;\n}\n\nexport interface VerificationSuccess {\n did: string;\n authScheme: string;\n responseHeaders: Record<string, string>;\n accessToken?: string;\n tokenType?: 'bearer';\n}\n\nexport class DidWbaVerifierError extends Error {\n constructor(\n message: string,\n public readonly statusCode = 400,\n public readonly headers: Record<string, string> = {}\n ) {\n super(message);\n this.name = 'DidWbaVerifierError';\n }\n}\n\nconst DEFAULT_CONFIG: Required<\n Omit<\n DidWbaVerifierConfig,\n | 'jwtPrivateKey'\n | 'jwtPublicKey'\n | 'allowedDomains'\n | 'externalNonceValidator'\n | 'didResolutionOptions'\n | 'didResolver'\n >\n> = {\n jwtAlgorithm: 'RS256',\n accessTokenExpireMinutes: 60,\n nonceExpirationMinutes: 6,\n timestampExpirationMinutes: 5,\n allowHttpSignatures: true,\n allowLegacyDidwba: true,\n emitAuthenticationInfoHeader: true,\n emitLegacyAuthorizationHeader: true,\n requireNonceForHttpSignatures: true,\n};\n\nexport class DidWbaVerifier {\n private readonly config: DidWbaVerifierConfig;\n\n private readonly usedNonces = new Map<string, Date>();\n\n constructor(config: DidWbaVerifierConfig = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n }\n\n async verifyRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Uint8Array | string | null,\n domain?: string\n ): Promise<VerificationSuccess> {\n return this.verifyRequestWithOptionalDidDocument(method, url, headers, body, domain);\n }\n\n async verifyRequestWithDidDocument(\n method: string,\n url: string,\n headers: Record<string, string>,\n didDocument: DidDocument,\n body?: Uint8Array | string | null,\n domain?: string\n ): Promise<VerificationSuccess> {\n return this.verifyRequestWithOptionalDidDocument(\n method,\n url,\n headers,\n body,\n domain,\n didDocument\n );\n }\n\n private async verifyRequestWithOptionalDidDocument(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Uint8Array | string | null,\n domain?: string,\n didDocument?: DidDocument\n ): Promise<VerificationSuccess> {\n const requestDomain = domain ?? extractDomainFromUrl(url);\n this.validateAllowedDomain(requestDomain);\n const authHeader = getHeaderCaseInsensitive(headers, 'Authorization');\n\n if (authHeader?.startsWith('Bearer ')) {\n return this.handleBearerAuth(authHeader);\n }\n\n if (\n getHeaderCaseInsensitive(headers, 'Signature-Input') ||\n getHeaderCaseInsensitive(headers, 'Signature')\n ) {\n if (!this.config.allowHttpSignatures) {\n throw this.challengeError(\n 'HTTP Message Signatures authentication is disabled',\n 401,\n requestDomain,\n 'invalid_request'\n );\n }\n return this.handleHttpSignatureAuth(method, url, headers, body, requestDomain, didDocument);\n }\n\n if (authHeader) {\n if (!this.config.allowLegacyDidwba) {\n throw this.challengeError(\n 'Legacy DIDWba authentication is disabled',\n 401,\n requestDomain,\n 'invalid_request'\n );\n }\n return this.handleLegacyDidAuth(authHeader, requestDomain, didDocument);\n }\n\n throw this.challengeError(\n 'Missing authentication headers',\n 401,\n requestDomain,\n 'invalid_request'\n );\n }\n\n private async handleHttpSignatureAuth(\n method: string,\n url: string,\n headers: Record<string, string>,\n body: Uint8Array | string | null | undefined,\n domain: string,\n providedDidDocument?: DidDocument\n ): Promise<VerificationSuccess> {\n let metadata: ReturnType<typeof extractSignatureMetadata>;\n try {\n metadata = extractSignatureMetadata(headers);\n } catch (error) {\n throw this.challengeError(\n `Invalid signature metadata: ${(error as Error).message}`,\n 401,\n domain,\n 'invalid_request'\n );\n }\n if (!metadata.keyid.includes('#')) {\n throw this.challengeError(\n 'Invalid Signature-Input keyid',\n 401,\n domain,\n 'invalid_verification_method'\n );\n }\n\n const did = metadata.keyid.split('#', 1)[0];\n const didDocument = providedDidDocument ?? (await this.resolveDidDocument(did, domain));\n\n if (!validateDidDocumentBinding(didDocument, true)) {\n throw this.challengeError('DID binding verification failed', 401, domain, 'invalid_did');\n }\n if (!isAuthenticationAuthorized(didDocument, metadata.keyid)) {\n throw new DidWbaVerifierError(\n 'Verification method is not authorized for authentication',\n 403\n );\n }\n\n let verification: ReturnType<typeof verifyHttpMessageSignature>;\n try {\n verification = verifyHttpMessageSignature(\n didDocument,\n method,\n url,\n headers,\n body ?? undefined\n );\n } catch (error) {\n throw this.challengeError((error as Error).message, 401, domain, 'invalid_signature');\n }\n if (!this.verifyHttpSignatureTimeWindow(verification.created, verification.expires)) {\n throw this.challengeError(\n 'HTTP signature timestamp is expired or invalid',\n 401,\n domain,\n 'invalid_timestamp'\n );\n }\n if (this.config.requireNonceForHttpSignatures && !verification.nonce) {\n throw this.challengeError('HTTP signature nonce is required', 401, domain, 'invalid_nonce');\n }\n if (verification.nonce && !(await this.isValidServerNonce(did, verification.nonce))) {\n throw this.challengeError('Invalid or expired nonce', 401, domain, 'invalid_nonce');\n }\n\n const accessToken = await this.createAccessToken(did);\n return this.buildSuccessResult(did, 'http_signatures', accessToken);\n }\n\n private async handleLegacyDidAuth(\n authorization: string,\n domain: string,\n providedDidDocument?: DidDocument\n ): Promise<VerificationSuccess> {\n let parsed: ReturnType<typeof extractAuthHeaderParts>;\n try {\n parsed = extractAuthHeaderParts(authorization);\n } catch (error) {\n throw this.challengeError(\n `Invalid authorization header format: ${(error as Error).message}`,\n 401,\n domain,\n 'invalid_request'\n );\n }\n if (!this.verifyLegacyTimestamp(parsed.timestamp)) {\n throw this.challengeError('Timestamp expired or invalid', 401, domain, 'invalid_timestamp');\n }\n if (!(await this.isValidServerNonce(parsed.did, parsed.nonce))) {\n throw this.challengeError('Invalid or expired nonce', 401, domain, 'invalid_nonce');\n }\n\n const didDocument = providedDidDocument ?? (await this.resolveDidDocument(parsed.did, domain));\n\n if (!validateDidDocumentBinding(didDocument, true)) {\n throw this.challengeError('DID binding verification failed', 401, domain, 'invalid_did');\n }\n\n const keyid = `${parsed.did}#${parsed.verificationMethod}`;\n if (!isAuthenticationAuthorized(didDocument, keyid)) {\n throw new DidWbaVerifierError(\n 'Verification method is not authorized for authentication',\n 403\n );\n }\n\n try {\n verifyAuthHeaderSignature(authorization, didDocument, domain);\n } catch (error) {\n throw this.challengeError(\n `Error verifying signature: ${(error as Error).message}`,\n 401,\n domain,\n 'invalid_signature'\n );\n }\n\n const accessToken = await this.createAccessToken(parsed.did);\n return this.buildSuccessResult(parsed.did, 'legacy_didwba', accessToken);\n }\n\n private async handleBearerAuth(authorization: string): Promise<VerificationSuccess> {\n if (!this.config.jwtPublicKey) {\n throw new DidWbaVerifierError('Internal server error during token verification', 500);\n }\n\n const token = authorization.startsWith('Bearer ') ? authorization.slice(7) : authorization;\n const verifyKey = await importVerifyKey(\n this.config.jwtPublicKey,\n this.config.jwtAlgorithm ?? 'RS256'\n );\n const result = await jwtVerify(token, verifyKey, {\n algorithms: [this.config.jwtAlgorithm ?? 'RS256'],\n }).catch(() => {\n throw new DidWbaVerifierError('Invalid token', 401);\n });\n\n const did = result.payload.sub;\n if (!did || !did.startsWith('did:wba:')) {\n throw new DidWbaVerifierError('Invalid DID format', 401);\n }\n\n return {\n did,\n authScheme: 'bearer',\n responseHeaders: {},\n accessToken: token,\n tokenType: 'bearer',\n };\n }\n\n private async createAccessToken(did: string): Promise<string | undefined> {\n if (!this.config.jwtPrivateKey) {\n return undefined;\n }\n\n const algorithm = this.config.jwtAlgorithm ?? 'RS256';\n const signingKey = await importSigningKey(this.config.jwtPrivateKey, algorithm);\n return new SignJWT({})\n .setProtectedHeader({ alg: algorithm })\n .setSubject(did)\n .setIssuedAt()\n .setExpirationTime(`${this.config.accessTokenExpireMinutes ?? 60}m`)\n .sign(signingKey);\n }\n\n private buildSuccessResult(\n did: string,\n authScheme: string,\n accessToken?: string\n ): VerificationSuccess {\n const responseHeaders: Record<string, string> = {};\n if (accessToken) {\n const expiresInSeconds = (this.config.accessTokenExpireMinutes ?? 60) * 60;\n if (this.config.emitAuthenticationInfoHeader !== false) {\n responseHeaders['Authentication-Info'] =\n `access_token=\"${accessToken}\", token_type=\"Bearer\", expires_in=${expiresInSeconds}`;\n }\n if (this.config.emitLegacyAuthorizationHeader !== false) {\n responseHeaders.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n return {\n did,\n authScheme,\n responseHeaders,\n accessToken,\n tokenType: accessToken ? 'bearer' : undefined,\n };\n }\n\n private verifyLegacyTimestamp(timestamp: string): boolean {\n const requestTime = new Date(timestamp);\n if (Number.isNaN(requestTime.getTime())) {\n return false;\n }\n const now = Date.now();\n if (requestTime.getTime() - now > 60_000) {\n return false;\n }\n return now - requestTime.getTime() <= (this.config.timestampExpirationMinutes ?? 5) * 60_000;\n }\n\n private verifyHttpSignatureTimeWindow(created: number, expires?: number): boolean {\n const now = Math.floor(Date.now() / 1000);\n if (created > now + 60) {\n return false;\n }\n if (now - created > (this.config.timestampExpirationMinutes ?? 5) * 60) {\n return false;\n }\n return expires === undefined || expires >= now;\n }\n\n private async isValidServerNonce(did: string, nonce: string): Promise<boolean> {\n if (this.config.externalNonceValidator) {\n return Boolean(await this.config.externalNonceValidator(did, nonce));\n }\n\n const expirationMs = (this.config.nonceExpirationMinutes ?? 6) * 60_000;\n const now = Date.now();\n for (const [key, createdAt] of this.usedNonces.entries()) {\n if (now - createdAt.getTime() > expirationMs) {\n this.usedNonces.delete(key);\n }\n }\n\n const cacheKey = `${did}:${nonce}`;\n if (this.usedNonces.has(cacheKey)) {\n return false;\n }\n this.usedNonces.set(cacheKey, new Date(now));\n return true;\n }\n\n private async resolveDidDocument(did: string, domain: string): Promise<DidDocument> {\n try {\n const resolved = this.config.didResolver\n ? await this.config.didResolver(did)\n : await resolveDidWbaDocument(did, false, this.config.didResolutionOptions);\n if (!resolved) {\n throw this.challengeError('Failed to resolve DID document', 401, domain, 'invalid_did');\n }\n return resolved;\n } catch (error) {\n if (error instanceof DidWbaVerifierError) {\n throw error;\n }\n throw this.challengeError(\n `Failed to resolve DID document: ${(error as Error).message}`,\n 401,\n domain,\n 'invalid_did'\n );\n }\n }\n\n private validateAllowedDomain(domain: string): void {\n if (this.config.allowedDomains && !this.config.allowedDomains.includes(domain)) {\n throw new DidWbaVerifierError('Domain is not allowed', 403);\n }\n }\n\n private challengeError(\n message: string,\n statusCode: number,\n domain: string,\n error: string\n ): DidWbaVerifierError {\n const headers: Record<string, string> = {\n 'WWW-Authenticate': `DIDWba realm=\"${domain}\", error=\"${error}\", error_description=\"${message}\"`,\n };\n if (this.config.allowHttpSignatures !== false) {\n headers['Accept-Signature'] =\n 'sig1=(\"@method\" \"@target-uri\" \"@authority\" \"content-digest\");created;expires;nonce;keyid';\n }\n return new DidWbaVerifierError(message, statusCode, headers);\n }\n}\n\nfunction getHeaderCaseInsensitive(\n headers: Record<string, string>,\n name: string\n): string | undefined {\n const target = name.toLowerCase();\n return Object.entries(headers).find(([key]) => key.toLowerCase() === target)?.[1];\n}\n\nfunction extractDomainFromUrl(url: string): string {\n return new URL(url).hostname;\n}\n\nasync function importSigningKey(key: string, algorithm: string) {\n if (algorithm.startsWith('HS')) {\n return new TextEncoder().encode(key);\n }\n return importPKCS8(key, algorithm);\n}\n\nasync function importVerifyKey(key: string, algorithm: string) {\n if (algorithm.startsWith('HS')) {\n return new TextEncoder().encode(key);\n }\n return importSPKI(key, algorithm);\n}\n","import { AuthenticationError } from '../errors/index.js';\nimport { ANP_MESSAGE_SERVICE_TYPE, isAuthenticationAuthorized } from './did-wba.js';\nimport { resolveDidDocument } from './did-resolver.js';\nimport { extractSignatureMetadata, verifyHttpMessageSignature } from './http-signatures.js';\nimport type {\n DidDocument,\n FederatedVerificationOptions,\n FederatedVerificationResult,\n ServiceRecord,\n} from './types.js';\n\nexport async function verifyFederatedHttpRequest(\n senderDid: string,\n requestMethod: string,\n requestUrl: string,\n headers: Record<string, string>,\n body?: Uint8Array | string,\n options: FederatedVerificationOptions = {}\n): Promise<FederatedVerificationResult> {\n const senderDidDocument =\n options.senderDidDocument ??\n (await resolveDidDocument(\n senderDid,\n options.verifySenderDidProof ?? false,\n options.didResolutionOptions ?? {}\n ));\n if (senderDidDocument.id !== senderDid) {\n throw new AuthenticationError('Sender DID document ID mismatch');\n }\n\n const service = selectAnpMessageService(senderDidDocument, options.serviceId, options.serviceEndpoint);\n if (!service.serviceDid) {\n throw new AuthenticationError('Selected ANPMessageService is missing serviceDid');\n }\n\n const signatureMetadata = extractSignatureMetadata(headers);\n const keyidDid = signatureMetadata.keyid.split('#', 1)[0];\n if (keyidDid !== service.serviceDid) {\n throw new AuthenticationError('Signature keyid DID does not match serviceDid');\n }\n\n const serviceDidDocument =\n options.serviceDidDocument ??\n (await resolveDidDocument(\n service.serviceDid,\n options.verifyServiceDidProof ?? false,\n options.didResolutionOptions ?? {}\n ));\n if (serviceDidDocument.id !== service.serviceDid) {\n throw new AuthenticationError('serviceDid document ID mismatch');\n }\n if (!isAuthenticationAuthorized(serviceDidDocument, signatureMetadata.keyid)) {\n throw new AuthenticationError('Verification method is not authorized for authentication');\n }\n\n const verifiedMetadata = verifyHttpMessageSignature(\n serviceDidDocument,\n requestMethod,\n requestUrl,\n headers,\n body\n );\n return {\n senderDid,\n serviceDid: service.serviceDid,\n serviceId: service.id,\n signatureMetadata: verifiedMetadata,\n };\n}\n\nfunction selectAnpMessageService(\n didDocument: DidDocument,\n serviceId?: string,\n serviceEndpoint?: string\n): ServiceRecord {\n const candidates = (didDocument.service ?? []).filter(\n (service) => service.type === ANP_MESSAGE_SERVICE_TYPE\n );\n if (candidates.length === 0) {\n throw new AuthenticationError('No ANPMessageService found in DID document');\n }\n\n if (serviceId) {\n const matched = candidates.find((service) => service.id === serviceId);\n if (!matched) {\n throw new AuthenticationError(`ANPMessageService not found for serviceId=${serviceId}`);\n }\n return matched;\n }\n\n if (serviceEndpoint) {\n const matched = candidates.find((service) => service.serviceEndpoint === serviceEndpoint);\n if (!matched) {\n throw new AuthenticationError('ANPMessageService not found for serviceEndpoint');\n }\n return matched;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n throw new AuthenticationError(\n 'Multiple ANPMessageService entries found; serviceId or serviceEndpoint is required'\n );\n}\n","export * from './types.js';\nexport * from './verification-methods.js';\nexport * from './did-wba.js';\nexport * from './did-resolver.js';\nexport * from './http-signatures.js';\nexport * from './did-wba-authenticator.js';\nexport * from './did-wba-verifier.js';\nexport * from './federation.js';\n\nexport {\n createDidWbaDocument as createDidDocument,\n createDidWbaDocumentWithKeyBinding as createDidDocumentWithKeyBinding,\n validateDidDocumentBinding as validateDidBinding,\n verifyDidKeyBinding as verifyDidBinding,\n generateAuthHeader as createLegacyAuthHeader,\n generateAuthJson as createLegacyAuthPayload,\n extractAuthHeaderParts as parseLegacyAuthHeader,\n verifyAuthHeaderSignature as verifyLegacyAuthHeader,\n verifyAuthJsonSignature as verifyLegacyAuthPayload,\n} from './did-wba.js';\n\nexport {\n generateHttpSignatureHeaders as createSignatureHeaders,\n verifyHttpMessageSignature as verifySignatureHeaders,\n extractSignatureMetadata as parseSignatureMetadata,\n} from './http-signatures.js';\n\nexport {\n DIDWbaAuthHeader as DidAuthHeaders,\n} from './did-wba-authenticator.js';\n\nexport {\n DidWbaVerifier as RequestVerifier,\n DidWbaVerifierError as RequestVerifierError,\n} from './did-wba-verifier.js';\n\nimport {\n ANP_MESSAGE_SERVICE_TYPE,\n buildAgentMessageService,\n buildAnpMessageService,\n buildGroupMessageService,\n createDidWbaDocument,\n createDidWbaDocumentWithKeyBinding,\n validateDidDocumentBinding,\n verifyDidKeyBinding,\n generateAuthHeader,\n generateAuthJson,\n extractAuthHeaderParts,\n verifyAuthHeaderSignature,\n verifyAuthJsonSignature,\n} from './did-wba.js';\nimport { resolveDidDocument } from './did-resolver.js';\nimport {\n buildContentDigest,\n verifyContentDigest,\n generateHttpSignatureHeaders,\n verifyHttpMessageSignature,\n extractSignatureMetadata,\n} from './http-signatures.js';\nimport { DIDWbaAuthHeader } from './did-wba-authenticator.js';\nimport { DidWbaVerifier } from './did-wba-verifier.js';\nimport { verifyFederatedHttpRequest } from './federation.js';\n\nexport const didDocuments = {\n ANP_MESSAGE_SERVICE_TYPE,\n buildAnpMessageService,\n buildAgentMessageService,\n buildGroupMessageService,\n create: createDidWbaDocument,\n createWithKeyBinding: createDidWbaDocumentWithKeyBinding,\n resolve: resolveDidDocument,\n validateBinding: validateDidDocumentBinding,\n verifyKeyBinding: verifyDidKeyBinding,\n};\n\nexport const legacyAuth = {\n createHeader: generateAuthHeader,\n createPayload: generateAuthJson,\n parseHeader: extractAuthHeaderParts,\n verifyHeader: verifyAuthHeaderSignature,\n verifyPayload: verifyAuthJsonSignature,\n};\n\nexport const httpSignatures = {\n buildContentDigest,\n verifyContentDigest,\n createHeaders: generateHttpSignatureHeaders,\n verifyMessage: verifyHttpMessageSignature,\n parseMetadata: extractSignatureMetadata,\n};\n\nexport const authentication = {\n didDocuments,\n legacyAuth,\n httpSignatures,\n federation: {\n verifyRequest: verifyFederatedHttpRequest,\n },\n DidAuthHeaders: DIDWbaAuthHeader,\n RequestVerifier: DidWbaVerifier,\n};\n","import { randomBytes } from 'node:crypto';\n\nimport {\n findVerificationMethod,\n isAssertionMethodAuthorized,\n isAuthenticationAuthorized,\n} from '../authentication/did-wba.js';\nimport type { DidDocument, VerificationMethodRecord } from '../authentication/types.js';\nimport { extractPublicKey } from '../authentication/verification-methods.js';\nimport { ProofError } from '../errors/index.js';\nimport {\n decodeBase64,\n decodeBase64Url,\n encodeBase64,\n encodeBase64Url,\n} from '../internal/base64.js';\nimport {\n normalizePrivateKeyMaterial,\n signMessage,\n verifyMessage,\n type PrivateKeyInput,\n} from '../internal/keys.js';\nimport { buildContentDigest } from '../authentication/http-signatures.js';\n\nexport const IM_PROOF_DEFAULT_COMPONENTS = ['@method', '@target-uri', 'content-digest'] as const;\nexport const IM_PROOF_RELATION_AUTHENTICATION = 'authentication' as const;\nexport const IM_PROOF_RELATION_ASSERTION_METHOD = 'assertionMethod' as const;\nexport type ImProofVerificationRelationship =\n | typeof IM_PROOF_RELATION_AUTHENTICATION\n | typeof IM_PROOF_RELATION_ASSERTION_METHOD;\n\nexport interface ImProof {\n contentDigest: string;\n signatureInput: string;\n signature: string;\n}\n\nexport interface ParsedImSignatureInput {\n label: string;\n components: string[];\n signatureParams: string;\n keyid: string;\n nonce?: string;\n created?: number;\n expires?: number;\n}\n\nexport interface ImProofGenerationOptions {\n label?: string;\n components?: string[];\n created?: number;\n expires?: number;\n nonce?: string;\n}\n\nexport interface ImProofVerificationResult {\n parsedSignatureInput: ParsedImSignatureInput;\n verificationMethod: VerificationMethodRecord;\n}\n\nexport interface ImProofVerificationTarget {\n didDocument?: DidDocument;\n verificationMethod?: VerificationMethodRecord;\n verificationRelationship?: ImProofVerificationRelationship;\n}\n\nexport function buildImContentDigest(payload: Uint8Array | string): string {\n return buildContentDigest(payload);\n}\n\nexport function verifyImContentDigest(\n payload: Uint8Array | string,\n contentDigest: string\n): boolean {\n return buildImContentDigest(payload) === contentDigest.trim();\n}\n\nexport function buildImSignatureInput(\n keyid: string,\n options: ImProofGenerationOptions = {}\n): string {\n const label = options.label ?? 'sig1';\n const components = options.components ?? [...IM_PROOF_DEFAULT_COMPONENTS];\n if (components.length === 0) {\n throw new ProofError('signatureInput must include covered components');\n }\n const created = options.created ?? Math.floor(Date.now() / 1000);\n const nonce = options.nonce ?? encodeBase64Url(randomBytes(16));\n const quotedComponents = components.map((component) => `\"${component}\"`).join(' ');\n const params = [`created=${created}`];\n if (options.expires !== undefined) {\n params.push(`expires=${options.expires}`);\n }\n params.push(`nonce=\"${nonce}\"`);\n params.push(`keyid=\"${keyid}\"`);\n return `${label}=(${quotedComponents});${params.join(';')}`;\n}\n\nexport function parseImSignatureInput(value: string): ParsedImSignatureInput {\n const separator = value.indexOf('=');\n if (separator < 0) {\n throw new ProofError('invalid proof.signatureInput format');\n }\n const label = value.slice(0, separator).trim();\n const remainder = value.slice(separator + 1).trim();\n const openIndex = remainder.indexOf('(');\n const closeIndex = remainder.indexOf(')');\n if (openIndex < 0 || closeIndex < 0 || closeIndex <= openIndex) {\n throw new ProofError('invalid proof.signatureInput format');\n }\n\n const components = remainder\n .slice(openIndex + 1, closeIndex)\n .split(/\\s+/)\n .map((component) => component.replaceAll('\"', ''))\n .filter(Boolean);\n if (components.length === 0) {\n throw new ProofError('proof.signatureInput must include covered components');\n }\n\n const params: Record<string, string> = {};\n const paramsRaw = remainder.slice(closeIndex + 1).replace(/^;/, '');\n for (const part of paramsRaw.split(';')) {\n const trimmed = part.trim();\n if (!trimmed) {\n continue;\n }\n const [name, rawValue] = trimmed.split('=', 2);\n if (!name || rawValue === undefined) {\n throw new ProofError('invalid proof.signatureInput format');\n }\n params[name.trim()] = rawValue.trim().replace(/^\"|\"$/g, '');\n }\n\n if (!params.keyid) {\n throw new ProofError('proof.signatureInput must include keyid');\n }\n\n return {\n label,\n components,\n signatureParams: remainder,\n keyid: params.keyid,\n nonce: params.nonce,\n created: params.created ? Number(params.created) : undefined,\n expires: params.expires ? Number(params.expires) : undefined,\n };\n}\n\nexport function encodeImSignature(signatureBytes: Uint8Array, label = 'sig1'): string {\n return `${label}=:${encodeBase64(signatureBytes)}:`;\n}\n\nexport function decodeImSignature(signature: string): {\n label?: string;\n signatureBytes: Uint8Array;\n} {\n const trimmed = signature.trim();\n const labeled = trimmed.match(/^\\s*([a-zA-Z0-9_-]+)=:(.+):\\s*$/);\n const unlabeled = trimmed.match(/^\\s*:(.+):\\s*$/);\n const label = labeled?.[1];\n const encoded = labeled?.[2] ?? unlabeled?.[1];\n if (!encoded) {\n throw new ProofError('invalid proof.signature encoding');\n }\n try {\n return { label, signatureBytes: decodeBase64(encoded) };\n } catch {\n try {\n return { label, signatureBytes: decodeBase64Url(encoded) };\n } catch {\n throw new ProofError('invalid proof.signature encoding');\n }\n }\n}\n\nexport function generateImProof(\n payload: Uint8Array | string,\n signatureBase: Uint8Array | string,\n privateKeyInput: PrivateKeyInput,\n keyid: string,\n options: ImProofGenerationOptions = {}\n): ImProof {\n const payloadBytes = toBytes(payload);\n const signatureInput = buildImSignatureInput(keyid, options);\n const privateKey = normalizePrivateKeyMaterial(privateKeyInput);\n const signatureBytes = signMessage(privateKey, toBytes(signatureBase));\n return {\n contentDigest: buildImContentDigest(payloadBytes),\n signatureInput,\n signature: encodeImSignature(signatureBytes, options.label ?? 'sig1'),\n };\n}\n\nexport function verifyImProof(\n proof: ImProof,\n payload: Uint8Array | string,\n signatureBase: Uint8Array | string,\n verificationTarget: ImProofVerificationTarget,\n expectedSignerDid?: string\n): ImProofVerificationResult {\n if (!verifyImContentDigest(payload, proof.contentDigest)) {\n throw new ProofError('proof contentDigest does not match request payload');\n }\n const parsed = parseImSignatureInput(proof.signatureInput);\n if (expectedSignerDid && !keyidBelongsToExpectedDid(parsed.keyid, expectedSignerDid)) {\n throw new ProofError('proof keyid must belong to expected signer DID');\n }\n if (verificationTarget.didDocument) {\n const verificationRelationship =\n verificationTarget.verificationRelationship ?? IM_PROOF_RELATION_AUTHENTICATION;\n if (\n !isVerificationMethodAuthorized(\n verificationTarget.didDocument,\n parsed.keyid,\n verificationRelationship\n )\n ) {\n throw new ProofError(`verification method is not authorized for ${verificationRelationship}`);\n }\n }\n\n const verificationMethod =\n verificationTarget.verificationMethod ??\n resolveVerificationMethod(verificationTarget.didDocument, parsed.keyid);\n const publicKey = extractPublicKey(verificationMethod);\n const { signatureBytes } = decodeImSignature(proof.signature);\n if (!verifyMessage(publicKey, toBytes(signatureBase), signatureBytes)) {\n throw new ProofError('signature verification failed');\n }\n\n return {\n parsedSignatureInput: parsed,\n verificationMethod,\n };\n}\n\nfunction resolveVerificationMethod(\n didDocument: DidDocument | undefined,\n verificationMethodId: string\n): VerificationMethodRecord {\n if (!didDocument) {\n throw new ProofError('didDocument or verificationMethod is required');\n }\n const method = findVerificationMethod(didDocument, verificationMethodId);\n if (!method) {\n throw new ProofError('verification method not found in DID document');\n }\n return method;\n}\n\nfunction toBytes(value: Uint8Array | string): Uint8Array {\n return typeof value === 'string' ? new TextEncoder().encode(value) : value;\n}\n\nfunction keyidBelongsToExpectedDid(keyid: string, expectedSignerDid: string): boolean {\n return keyid.split('#', 1)[0] === expectedSignerDid;\n}\n\nfunction isVerificationMethodAuthorized(\n didDocument: DidDocument,\n verificationMethodId: string,\n verificationRelationship: ImProofVerificationRelationship\n): boolean {\n if (verificationRelationship === IM_PROOF_RELATION_AUTHENTICATION) {\n return isAuthenticationAuthorized(didDocument, verificationMethodId);\n }\n if (verificationRelationship === IM_PROOF_RELATION_ASSERTION_METHOD) {\n return isAssertionMethodAuthorized(didDocument, verificationMethodId);\n }\n throw new ProofError(`unsupported verification relationship: ${verificationRelationship}`);\n}\n","export * from './proof.js';\nexport * from './im.js';\n\nexport {\n generateW3cProof as createProof,\n verifyW3cProof as verifyProof,\n verifyW3cProofDetailed as verifyProofDetailed,\n} from './proof.js';\n\nimport {\n generateW3cProof,\n verifyW3cProof,\n verifyW3cProofDetailed,\n} from './proof.js';\nimport * as imProof from './im.js';\n\nexport const proof = {\n create: generateW3cProof,\n verify: verifyW3cProof,\n verifyDetailed: verifyW3cProofDetailed,\n im: imProof,\n};\n","import type { DidResolutionOptions } from '../authentication/types.js';\nimport type { DidDocument } from '../authentication/types.js';\nimport type { BindingGeneration } from './generation.js';\n\nexport const ANP_HANDLE_SERVICE_TYPE = 'ANPHandleService';\n\nexport enum HandleStatus {\n Active = 'active',\n Suspended = 'suspended',\n Revoked = 'revoked',\n}\n\nexport enum SubjectType {\n Person = 'person',\n Agent = 'agent',\n Group = 'group',\n Organization = 'organization',\n Service = 'service',\n Application = 'application',\n Unknown = 'unknown',\n}\n\nexport interface DIDSubjectProfile {\n type?: string;\n subject_did: string;\n subject_type?: SubjectType;\n handle?: string;\n display_name?: string;\n description?: string;\n avatar_uri?: string;\n profile_uri?: string;\n discoverability?: string;\n labels?: Record<string, unknown>;\n updated?: string;\n versionId?: string;\n ttl?: number;\n proof?: Record<string, unknown>;\n}\n\nexport interface HandleResolutionDocument {\n handle: string;\n did: string;\n status: HandleStatus;\n binding_generation: BindingGeneration;\n updated?: string;\n versionId?: string;\n ttl?: number;\n profile?: DIDSubjectProfile;\n}\n\nexport interface HandleServiceEntry {\n id: string;\n type: string;\n serviceEndpoint: string;\n}\n\nexport interface ParsedWbaUri {\n localPart: string;\n domain: string;\n handle: string;\n originalUri: string;\n}\n\nexport interface ResolveHandleOptions {\n timeoutSeconds?: number;\n verifySsl?: boolean;\n baseUrlOverride?: string;\n}\n\nexport interface BindingVerificationOptions {\n didDocument?: DidDocument;\n resolutionOptions?: ResolveHandleOptions;\n didResolutionOptions?: DidResolutionOptions;\n}\n\nexport interface BindingVerificationResult {\n isValid: boolean;\n handle: string;\n did: string;\n bindingGeneration?: BindingGeneration;\n forwardVerified: boolean;\n reverseVerified: boolean;\n errorMessage?: string;\n}\n","import { HandleValidationError, WbaUriParseError } from '../errors/index.js';\nimport type { ParsedWbaUri } from './types.js';\n\nconst DOMAIN_LABEL_RE = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nexport function validateLocalPart(localPart: string): boolean {\n const normalized = localPart.toLowerCase();\n if (!normalized || normalized.length > 63) {\n return false;\n }\n if (normalized.startsWith('-') || normalized.endsWith('-') || normalized.includes('--')) {\n return false;\n }\n return /^[a-z0-9-]+$/.test(normalized);\n}\n\nexport function validateHandle(handle: string): [string, string] {\n const normalized = handle.trim().toLowerCase();\n if (!normalized) {\n throw new HandleValidationError('Handle must not be empty');\n }\n const dotIndex = normalized.indexOf('.');\n if (dotIndex < 0) {\n throw new HandleValidationError(`Handle must contain at least one dot: '${handle}'`);\n }\n const localPart = normalized.slice(0, dotIndex);\n const domain = normalized.slice(dotIndex + 1);\n if (!localPart) {\n throw new HandleValidationError(`Handle local-part is empty: '${handle}'`);\n }\n if (!domain) {\n throw new HandleValidationError(`Handle domain is empty: '${handle}'`);\n }\n if (!validateLocalPart(localPart)) {\n throw new HandleValidationError(\n `Invalid local-part '${localPart}': must be 1-63 chars of a-z, 0-9, hyphen; must start/end with alnum; no consecutive hyphens`\n );\n }\n if (!isValidDomain(domain)) {\n throw new HandleValidationError(`Invalid domain '${domain}'`);\n }\n return [localPart, domain];\n}\n\nexport function normalizeHandle(handle: string): string {\n const [localPart, domain] = validateHandle(handle);\n return `${localPart}.${domain}`;\n}\n\nexport function parseWbaUri(uri: string): ParsedWbaUri {\n if (!uri.startsWith('wba://')) {\n throw new WbaUriParseError(`URI must start with 'wba://': '${uri}'`);\n }\n const handlePart = uri.slice('wba://'.length);\n if (!handlePart) {\n throw new WbaUriParseError(`URI contains no handle after 'wba://': '${uri}'`);\n }\n try {\n const [localPart, domain] = validateHandle(handlePart);\n return {\n localPart,\n domain,\n handle: `${localPart}.${domain}`,\n originalUri: uri,\n };\n } catch (error) {\n throw new WbaUriParseError(`Invalid handle in URI '${uri}': ${(error as Error).message}`);\n }\n}\n\nexport function buildResolutionUrl(localPart: string, domain: string): string {\n return `https://${domain}/.well-known/handle/${localPart}`;\n}\n\nexport function buildWbaUri(localPart: string, domain: string): string {\n return `wba://${localPart}.${domain}`;\n}\n\nfunction isValidDomain(domain: string): boolean {\n const labels = domain.split('.');\n return labels.length >= 2 && labels.every((label) => DOMAIN_LABEL_RE.test(label));\n}\n","export type BindingGeneration = string & { readonly __bindingGeneration: unique symbol };\n\nexport function canonicalizeBindingGeneration(value: unknown): BindingGeneration {\n if (typeof value !== 'string' || !/^[1-9][0-9]*$/.test(value)) {\n throw new TypeError('binding_generation must be a canonical positive decimal string');\n }\n return value as BindingGeneration;\n}\n\nexport function compareBindingGenerations(\n current: BindingGeneration | string,\n previous: BindingGeneration | string\n): number {\n const left = canonicalizeBindingGeneration(current);\n const right = canonicalizeBindingGeneration(previous);\n if (left.length !== right.length) return left.length < right.length ? -1 : 1;\n return left === right ? 0 : left < right ? -1 : 1;\n}\n","import {\n HandleGoneError,\n HandleMovedError,\n HandleNotFoundError,\n HandleResolutionError,\n} from '../errors/index.js';\nimport type { DIDSubjectProfile, HandleResolutionDocument, ResolveHandleOptions } from './types.js';\nimport { HandleStatus, SubjectType } from './types.js';\nimport { buildResolutionUrl, parseWbaUri, validateHandle } from './validator.js';\nimport { canonicalizeBindingGeneration } from './generation.js';\n\nexport async function resolveHandle(\n handle: string,\n options: ResolveHandleOptions = {}\n): Promise<HandleResolutionDocument> {\n const bareHandle = stripWbaScheme(handle);\n const [localPart, domain] = validateHandle(bareHandle);\n const normalized = `${localPart}.${domain}`;\n const baseUrl = options.baseUrlOverride?.replace(/\\/$/, '');\n const url = baseUrl\n ? `${baseUrl}/.well-known/handle/${localPart}`\n : buildResolutionUrl(localPart, domain);\n\n void options.verifySsl;\n const timeoutMs = Math.round((options.timeoutSeconds ?? 10) * 1000);\n const response = await fetch(url, {\n headers: { Accept: 'application/json' },\n redirect: 'manual',\n signal: AbortSignal.timeout(timeoutMs),\n }).catch((error) => {\n throw new HandleResolutionError(\n `Network error resolving handle '${normalized}': ${(error as Error).message}`,\n 502,\n error as Error\n );\n });\n\n if (response.status === 301) {\n throw new HandleMovedError(\n `Handle '${normalized}' has been migrated`,\n response.headers.get('Location') ?? ''\n );\n }\n if (response.status === 404) {\n throw new HandleNotFoundError(`Handle '${normalized}' does not exist`);\n }\n if (response.status === 410) {\n throw new HandleGoneError(`Handle '${normalized}' has been permanently revoked`);\n }\n if (!response.ok) {\n throw new HandleResolutionError(\n `Unexpected status ${response.status} resolving '${normalized}'`,\n 502\n );\n }\n\n const payload = (await response.json()) as Record<string, unknown>;\n const document: HandleResolutionDocument = {\n handle: String(payload.handle ?? ''),\n did: String(payload.did ?? ''),\n status: normalizeStatus(String(payload.status ?? '')),\n binding_generation: canonicalizeBindingGeneration(payload.binding_generation),\n updated: payload.updated ? String(payload.updated) : undefined,\n versionId: payload.versionId ? String(payload.versionId) : undefined,\n ttl: typeof payload.ttl === 'number' ? payload.ttl : undefined,\n profile: normalizeProfile(payload.profile),\n };\n if (document.handle.toLowerCase() !== normalized) {\n throw new HandleResolutionError(\n `Handle mismatch: requested '${normalized}', got '${document.handle}'`,\n 502\n );\n }\n dropInvalidProfileProjection(document);\n return document;\n}\n\nexport async function resolveHandleFromUri(\n wbaUri: string,\n options: ResolveHandleOptions = {}\n): Promise<HandleResolutionDocument> {\n const parsed = parseWbaUri(wbaUri);\n return resolveHandle(parsed.handle, options);\n}\n\nfunction stripWbaScheme(handleOrUri: string): string {\n return handleOrUri.startsWith('wba://') ? handleOrUri.slice('wba://'.length) : handleOrUri;\n}\n\nfunction normalizeStatus(value: string): HandleStatus {\n switch (value.toLowerCase()) {\n case HandleStatus.Active:\n return HandleStatus.Active;\n case HandleStatus.Suspended:\n return HandleStatus.Suspended;\n case HandleStatus.Revoked:\n return HandleStatus.Revoked;\n default:\n throw new HandleResolutionError(`Unexpected handle status '${value}'`, 502);\n }\n}\n\nfunction normalizeProfile(value: unknown): DIDSubjectProfile | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return {\n type: value.type ? String(value.type) : undefined,\n subject_did: String(value.subject_did ?? ''),\n subject_type: normalizeSubjectType(value.subject_type),\n handle: value.handle ? String(value.handle) : undefined,\n display_name: value.display_name ? String(value.display_name) : undefined,\n description: value.description ? String(value.description) : undefined,\n avatar_uri: value.avatar_uri ? String(value.avatar_uri) : undefined,\n profile_uri: value.profile_uri ? String(value.profile_uri) : undefined,\n discoverability: value.discoverability ? String(value.discoverability) : undefined,\n labels: isRecord(value.labels) ? value.labels : undefined,\n updated: value.updated ? String(value.updated) : undefined,\n versionId: value.versionId ? String(value.versionId) : undefined,\n ttl: typeof value.ttl === 'number' ? value.ttl : undefined,\n proof: isRecord(value.proof) ? value.proof : undefined,\n };\n}\n\nfunction dropInvalidProfileProjection(document: HandleResolutionDocument): void {\n if (!document.profile) {\n return;\n }\n if (document.profile.subject_did !== document.did) {\n document.profile = undefined;\n return;\n }\n if (document.profile.handle && document.profile.handle !== document.handle) {\n document.profile = undefined;\n }\n}\n\nfunction normalizeSubjectType(value: unknown): SubjectType {\n if (!value) {\n return SubjectType.Unknown;\n }\n const normalized = String(value).toLowerCase();\n return Object.values(SubjectType).includes(normalized as SubjectType)\n ? (normalized as SubjectType)\n : SubjectType.Unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { resolveDidWbaDocument } from '../authentication/did-wba.js';\nimport type { DidDocument } from '../authentication/types.js';\nimport { HandleBindingError } from '../errors/index.js';\nimport type {\n BindingVerificationOptions,\n BindingVerificationResult,\n HandleServiceEntry,\n} from './types.js';\nimport { HandleStatus } from './types.js';\nimport { resolveHandle } from './resolver.js';\nimport { buildResolutionUrl, validateHandle } from './validator.js';\nimport { ANP_HANDLE_SERVICE_TYPE as ANP_HANDLE_SERVICE_TYPE_VALUE } from './types.js';\n\nexport async function verifyHandleBinding(\n handle: string,\n options: BindingVerificationOptions = {}\n): Promise<BindingVerificationResult> {\n const bareHandle = handle.startsWith('wba://') ? handle.slice('wba://'.length) : handle;\n let localPart: string;\n let domain: string;\n try {\n [localPart, domain] = validateHandle(bareHandle);\n } catch (error) {\n return {\n isValid: false,\n handle: bareHandle,\n did: '',\n forwardVerified: false,\n reverseVerified: false,\n errorMessage: (error as Error).message,\n };\n }\n\n const normalizedHandle = `${localPart}.${domain}`;\n\n try {\n const resolution = await resolveHandle(normalizedHandle, options.resolutionOptions);\n if (resolution.status !== HandleStatus.Active) {\n return {\n isValid: false,\n handle: normalizedHandle,\n did: resolution.did,\n forwardVerified: false,\n reverseVerified: false,\n errorMessage: `Handle status is '${resolution.status}', expected 'active'`,\n };\n }\n\n if (!resolution.did.startsWith('did:wba:')) {\n return {\n isValid: false,\n handle: normalizedHandle,\n did: resolution.did,\n forwardVerified: true,\n reverseVerified: false,\n errorMessage: 'DID does not use did:wba method',\n };\n }\n\n const didDomain = resolution.did.split(':')[2] ?? '';\n if (didDomain.toLowerCase() !== domain) {\n return {\n isValid: false,\n handle: normalizedHandle,\n did: resolution.did,\n forwardVerified: true,\n reverseVerified: false,\n errorMessage: `Domain mismatch: handle domain '${domain}' != DID domain '${didDomain}'`,\n };\n }\n\n const didDocument =\n options.didDocument ??\n (await resolveDidWbaDocument(resolution.did, false, options.didResolutionOptions));\n const handleServices = extractHandleServiceFromDidDocument(didDocument);\n const reverseVerified = handleServices.some(\n (service) => matchesHandleServiceDomain(service.serviceEndpoint, domain)\n );\n if (!reverseVerified) {\n return {\n isValid: false,\n handle: normalizedHandle,\n did: resolution.did,\n forwardVerified: true,\n reverseVerified: false,\n errorMessage:\n `DID Document does not contain an ${ANP_HANDLE_SERVICE_TYPE_VALUE} entry ` +\n `whose HTTPS domain matches '${domain}'`,\n };\n }\n\n return {\n isValid: true,\n handle: normalizedHandle,\n did: resolution.did,\n bindingGeneration: resolution.binding_generation,\n forwardVerified: true,\n reverseVerified: true,\n };\n } catch (error) {\n if (error instanceof HandleBindingError) {\n throw error;\n }\n return {\n isValid: false,\n handle: normalizedHandle,\n did: '',\n forwardVerified: false,\n reverseVerified: false,\n errorMessage: (error as Error).message,\n };\n }\n}\n\nexport function buildHandleServiceEntry(\n did: string,\n localPart: string,\n domain: string\n): HandleServiceEntry {\n return {\n id: `${did}#handle`,\n type: ANP_HANDLE_SERVICE_TYPE_VALUE,\n serviceEndpoint: buildResolutionUrl(localPart, domain),\n };\n}\n\nexport function extractHandleServiceFromDidDocument(didDocument: DidDocument): HandleServiceEntry[] {\n return (didDocument.service ?? [])\n .filter((service) => service.type === ANP_HANDLE_SERVICE_TYPE_VALUE)\n .map((service) => ({\n id: String(service.id),\n type: String(service.type),\n serviceEndpoint: String(service.serviceEndpoint),\n }));\n}\n\nfunction matchesHandleServiceDomain(serviceEndpoint: string, expectedDomain: string): boolean {\n try {\n const parsed = new URL(serviceEndpoint);\n return (\n parsed.protocol === 'https:' && parsed.hostname.toLowerCase() === expectedDomain.toLowerCase()\n );\n } catch {\n return false;\n }\n}\n","export * from './types.js';\nexport * from './validator.js';\nexport * from './resolver.js';\nexport * from './binding.js';\nexport * from './generation.js';\n\nexport {\n parseWbaUri as parseUri,\n buildWbaUri as buildUri,\n} from './validator.js';\nexport { resolveHandleFromUri as resolveUri } from './resolver.js';\nexport {\n verifyHandleBinding as verifyBinding,\n buildHandleServiceEntry as createHandleServiceEntry,\n extractHandleServiceFromDidDocument as extractHandleServices,\n} from './binding.js';\n\nimport {\n validateLocalPart,\n validateHandle,\n normalizeHandle,\n parseWbaUri,\n buildResolutionUrl,\n buildWbaUri,\n} from './validator.js';\nimport { resolveHandle, resolveHandleFromUri } from './resolver.js';\nimport {\n verifyHandleBinding,\n buildHandleServiceEntry,\n extractHandleServiceFromDidDocument,\n} from './binding.js';\nimport {\n canonicalizeBindingGeneration,\n compareBindingGenerations,\n} from './generation.js';\n\nexport const wns = {\n validateLocalPart,\n validateHandle,\n normalizeHandle,\n parseUri: parseWbaUri,\n buildResolutionUrl,\n buildUri: buildWbaUri,\n resolveHandle,\n resolveUri: resolveHandleFromUri,\n verifyBinding: verifyHandleBinding,\n createHandleServiceEntry: buildHandleServiceEntry,\n extractHandleServices: extractHandleServiceFromDidDocument,\n canonicalizeBindingGeneration,\n compareBindingGenerations,\n};\n","import type { AwikiImErrorCode } from './types.js';\n\n/** A stable AWiki IM failure that does not expose credentials or private protocol fields. */\nexport class AwikiImError extends Error {\n /**\n * Create a normalized AWiki IM error.\n *\n * @param code Stable category for callers.\n * @param message Public diagnostic message.\n * @param options Optional transport status and underlying cause.\n */\n constructor(\n public readonly code: AwikiImErrorCode,\n message: string,\n public readonly status?: number,\n options?: { cause?: unknown }\n ) {\n super(message, options?.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'AwikiImError';\n }\n}\n\n/** Return an existing normalized error or convert an unknown failure to one. */\nexport function normalizeAwikiImError(error: unknown): AwikiImError {\n if (error instanceof AwikiImError) {\n return error;\n }\n if (error instanceof TypeError) {\n return new AwikiImError('network', 'AWiki service is unavailable', undefined, {\n cause: error,\n });\n }\n return new AwikiImError('remote', 'AWiki operation failed', undefined, { cause: error });\n}\n\n/** Convert a JSON-RPC or HTTP response failure to the stable public taxonomy. */\nexport function awikiImRemoteError(input: {\n readonly status?: number;\n readonly rpcCode?: number;\n readonly serviceCode?: string;\n readonly message?: string;\n}): AwikiImError {\n const code = classifyRemoteError(input);\n return new AwikiImError(code, publicMessage(code), input.status);\n}\n\nfunction classifyRemoteError(input: {\n readonly status?: number;\n readonly rpcCode?: number;\n readonly serviceCode?: string;\n readonly message?: string;\n}): AwikiImErrorCode {\n const serviceCode = input.serviceCode?.toLowerCase() ?? '';\n const message = input.message?.toLowerCase() ?? '';\n const combined = `${serviceCode} ${message}`;\n\n if (input.rpcCode === 1003) {\n return 'invalid-request';\n }\n if (input.rpcCode === 1403 || serviceCode === 'anp.forbidden') {\n return 'forbidden';\n }\n if (\n input.rpcCode === 1404 ||\n serviceCode === 'anp.target_not_found' ||\n serviceCode === 'target_not_found'\n ) {\n return 'not-found';\n }\n if (\n input.rpcCode === 1409 ||\n serviceCode === 'anp.idempotency_conflict' ||\n serviceCode === 'idempotency_conflict'\n ) {\n return 'conflict';\n }\n if (combined.includes('otp_rate_limited') || input.status === 429 || input.rpcCode === -32005) {\n return 'rate-limited';\n }\n if (combined.includes('invalid_otp') || combined.includes('otp_invalid')) {\n return 'invalid-otp';\n }\n if (combined.includes('otp_expired') || combined.includes('challenge_expired')) {\n return 'challenge-expired';\n }\n if (\n combined.includes('handle_unavailable') ||\n combined.includes('handle_exists') ||\n combined.includes('handle already')\n ) {\n return 'handle-unavailable';\n }\n if (combined.includes('already_registered') || combined.includes('did already')) {\n return 'already-registered';\n }\n if (input.status === 404 || input.rpcCode === -32002) {\n return 'not-found';\n }\n if (input.status === 401 || input.status === 403 || input.rpcCode === -32001) {\n return 'forbidden';\n }\n if (input.status === 409 || input.rpcCode === -32003) {\n return 'conflict';\n }\n if (input.rpcCode === -32600 || input.rpcCode === -32602 || input.rpcCode === -32004) {\n return combined.includes('otp') ? 'invalid-otp' : 'invalid-request';\n }\n if (input.status !== undefined && input.status >= 400 && input.status < 500) {\n return 'invalid-request';\n }\n return 'remote';\n}\n\nfunction publicMessage(code: AwikiImErrorCode): string {\n switch (code) {\n case 'not-registered':\n return 'AWiki identity is not registered';\n case 'already-registered':\n return 'AWiki identity is already registered';\n case 'invalid-request':\n return 'AWiki rejected the request';\n case 'invalid-otp':\n return 'AWiki verification code is invalid';\n case 'challenge-expired':\n return 'AWiki registration challenge has expired';\n case 'handle-unavailable':\n return 'AWiki handle is unavailable';\n case 'not-found':\n return 'AWiki resource was not found';\n case 'forbidden':\n return 'AWiki operation is not permitted';\n case 'conflict':\n return 'AWiki operation conflicts with existing state';\n case 'rate-limited':\n return 'AWiki request was rate limited';\n case 'network':\n return 'AWiki service is unavailable';\n case 'remote':\n return 'AWiki service returned an error';\n }\n}\n","import type { DidDocument } from '../authentication/types.js';\nimport type {\n AwikiAttachment,\n AwikiConversation,\n AwikiConversationId,\n AwikiIdentity,\n AwikiMessage,\n} from './types.js';\n\nexport const STATE_VERSION = 2;\nexport const DEFAULT_PAGE_LIMIT = 50;\nexport const MAX_PAGE_LIMIT = 100;\n\nexport interface RegistrationOtpState {\n readonly handle: string;\n readonly phone: string;\n readonly retryAt: string;\n}\n\nexport interface PersistedIdentitySecrets {\n readonly public: AwikiIdentity;\n readonly didDocument: DidDocument;\n readonly rootPrivateKeyPem: string;\n readonly signingPrivateKeyPem: string;\n readonly signingKeyId: string;\n readonly accessToken: string;\n readonly messageServiceDid: string;\n}\n\nexport interface PendingRegistrationState {\n readonly handle: string;\n readonly phone: string;\n readonly didDocument: DidDocument;\n readonly rootPrivateKeyPem: string;\n readonly signingPrivateKeyPem: string;\n readonly signingKeyId: string;\n readonly messageServiceDid: string;\n}\n\nexport interface PersistedConversation {\n readonly conversation: AwikiConversation;\n readonly peerDid?: string;\n readonly groupDid?: string;\n}\n\nexport interface PersistedAttachmentReference {\n readonly attachment: AwikiAttachment;\n readonly objectUri: string;\n readonly senderDid: string;\n readonly messageId: string;\n readonly messageTargetDid?: string;\n readonly groupDid?: string;\n readonly messageServiceDid: string;\n}\n\nexport interface PersistedSendTarget {\n readonly kind: 'direct' | 'group';\n readonly did: string;\n readonly handle?: string;\n readonly conversationId: AwikiConversationId;\n}\n\nexport interface PersistedTextSendOperation {\n readonly kind: 'text';\n readonly fingerprint: string;\n readonly target: PersistedSendTarget;\n readonly createdAt: string;\n readonly operationId: string;\n readonly messageId: string;\n readonly text: string;\n readonly stage: 'prepared' | 'completed';\n readonly result?: AwikiMessage;\n}\n\nexport interface PersistedAttachmentSlot {\n readonly attachmentId: string;\n readonly slotId: string;\n readonly uploadUri: string;\n readonly uploadHeaders: Record<string, string>;\n readonly objectUri: string;\n readonly commitToken: string;\n}\n\nexport interface PersistedAttachmentSendOperation {\n readonly kind: 'attachment';\n readonly fingerprint: string;\n readonly target: PersistedSendTarget;\n readonly attachment: AwikiAttachment;\n readonly digestB64u: string;\n readonly caption?: string;\n readonly createOperationId: string;\n readonly commitOperationId: string;\n readonly messageOperationId: string;\n readonly messageId: string;\n readonly createCreatedAt: string;\n readonly commitCreatedAt: string;\n readonly messageCreatedAt: string;\n readonly stage: 'prepared' | 'slot-created' | 'uploaded' | 'committed' | 'completed';\n readonly slot?: PersistedAttachmentSlot;\n readonly result?: AwikiMessage;\n}\n\nexport type PersistedSendOperation = PersistedTextSendOperation | PersistedAttachmentSendOperation;\n\nexport interface PersistedImState {\n readonly version: typeof STATE_VERSION;\n registrationOtp?: RegistrationOtpState;\n pendingRegistration?: PendingRegistrationState;\n identity?: PersistedIdentitySecrets;\n conversations: Record<string, PersistedConversation>;\n attachments: Record<string, PersistedAttachmentReference>;\n sendOperations: Record<string, PersistedSendOperation>;\n}\n\nexport interface JsonRpcErrorValue {\n readonly code?: number;\n readonly message?: string;\n readonly data?: unknown;\n}\n\nexport interface MessageWireValue {\n readonly [key: string]: unknown;\n}\n\nexport function emptyState(): PersistedImState {\n return {\n version: STATE_VERSION,\n conversations: {},\n attachments: {},\n sendOperations: {},\n };\n}\n\nexport function conversationKey(id: AwikiConversationId): string {\n return id as string;\n}\n","import { randomBytes, randomUUID } from 'node:crypto';\n\nimport { generateHttpSignatureHeaders } from '../authentication/http-signatures.js';\nimport type { DidDocument } from '../authentication/types.js';\nimport { buildImContentDigest, buildImSignatureInput, encodeImSignature } from '../proof/im.js';\nimport { canonicalizeJson } from '../internal/json.js';\nimport { normalizePrivateKeyMaterial, signMessage } from '../internal/keys.js';\nimport { AwikiImError, awikiImRemoteError, normalizeAwikiImError } from './errors.js';\nimport type { JsonRpcErrorValue } from './internal.js';\n\n/** User Service handle RPC path used by the AWiki Core client. */\nexport const HANDLE_RPC_PATH = '/user-service/v1/handle/rpc';\n/** User Service DID authentication RPC path used by the AWiki Core client. */\nexport const DID_AUTH_RPC_PATH = '/user-service/v1/did-auth/rpc';\n/** Local Message Service RPC path used by the AWiki Core client. */\nexport const MESSAGE_RPC_PATH = '/im/rpc';\n\nexport interface RpcAuthentication {\n readonly accessToken?: string;\n readonly didDocument: DidDocument;\n readonly signingPrivateKeyPem: string;\n readonly signingKeyId: string;\n}\n\nexport interface RpcResult {\n readonly value: Record<string, unknown>;\n readonly accessToken?: string;\n}\n\ninterface AwikiImTransportOptions {\n readonly allowedAttachmentOrigins: readonly string[];\n readonly allowInsecureLoopback: boolean;\n readonly attachmentMaxBytes: number;\n}\n\nconst MAX_RPC_RESPONSE_BYTES = 1024 * 1024;\nconst MAX_DID_DOCUMENT_BYTES = 512 * 1024;\nconst REQUEST_TIMEOUT_MS = 30_000;\n\n/** Fetch transport with JSON-RPC validation, signed authentication, and disposal. */\nexport class AwikiImTransport {\n private readonly controllers = new Set<AbortController>();\n private readonly allowedAttachmentOrigins: ReadonlySet<string>;\n private disposed = false;\n\n public constructor(\n private readonly fetchImpl: typeof globalThis.fetch,\n private readonly options: AwikiImTransportOptions\n ) {\n this.allowedAttachmentOrigins = new Set(\n options.allowedAttachmentOrigins.map((value) =>\n normalizeAllowedOrigin(value, options.allowInsecureLoopback)\n )\n );\n }\n\n /** Execute an unsigned or bearer-authenticated JSON-RPC request. */\n public async rpc(\n baseUrl: string,\n path: string,\n method: string,\n params: Record<string, unknown>,\n accessToken?: string\n ): Promise<RpcResult> {\n const url = joinServiceUrl(baseUrl, path, this.options.allowInsecureLoopback);\n const request = encodeJsonRpc(method, params);\n const body = request.body;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n return this.executeRpc(url, body, headers, request.id);\n }\n\n /** Execute a DID HTTP-Signature-authenticated JSON-RPC request. */\n public async signedRpc(\n baseUrl: string,\n path: string,\n method: string,\n params: Record<string, unknown>,\n authentication: RpcAuthentication\n ): Promise<RpcResult> {\n const url = joinServiceUrl(baseUrl, path, this.options.allowInsecureLoopback);\n const request = encodeJsonRpc(method, params);\n const body = request.body;\n const baseHeaders = { 'Content-Type': 'application/json' };\n let headers = {\n ...baseHeaders,\n ...generateHttpSignatureHeaders(\n authentication.didDocument,\n url,\n 'POST',\n authentication.signingPrivateKeyPem,\n baseHeaders,\n body,\n { keyid: authentication.signingKeyId }\n ),\n };\n const result = await this.withResponse(\n url,\n {\n method: 'POST',\n headers,\n body,\n redirect: 'error',\n },\n async (response) => {\n if (response.status !== 401) {\n return {\n kind: 'result' as const,\n value: await decodeRpcResponse(response, request.id),\n };\n }\n const nonce = parseAuthenticationParameter(\n response.headers.get('www-authenticate') ?? '',\n 'nonce'\n );\n await response.body?.cancel();\n return { kind: 'challenge' as const, nonce };\n }\n );\n if (result.kind === 'challenge' && result.nonce) {\n headers = {\n ...baseHeaders,\n ...generateHttpSignatureHeaders(\n authentication.didDocument,\n url,\n 'POST',\n authentication.signingPrivateKeyPem,\n baseHeaders,\n body,\n { keyid: authentication.signingKeyId, nonce: result.nonce }\n ),\n };\n return this.withResponse(\n url,\n {\n method: 'POST',\n headers,\n body,\n redirect: 'error',\n },\n (response) => decodeRpcResponse(response, request.id)\n );\n }\n if (result.kind === 'challenge') {\n throw awikiImRemoteError({ status: 401 });\n }\n return result.value;\n }\n\n /** Upload one object without following redirects. */\n public async putBytes(\n url: string,\n headers: Readonly<Record<string, string>>,\n bytes: Uint8Array\n ): Promise<void> {\n this.validateAttachmentUrl(url);\n await this.withResponse(\n url,\n {\n method: 'PUT',\n headers: { ...headers },\n body: Buffer.from(bytes),\n redirect: 'error',\n },\n async (response) => {\n if (!response.ok) {\n await response.body?.cancel();\n throw awikiImRemoteError({ status: response.status });\n }\n await response.body?.cancel();\n }\n );\n }\n\n /** Read one public JSON document without following redirects. */\n public async getJson(url: string): Promise<Record<string, unknown>> {\n this.validateAttachmentUrl(url);\n return this.withResponse(\n url,\n {\n method: 'GET',\n headers: { Accept: 'application/json' },\n redirect: 'error',\n },\n async (response) => {\n if (!response.ok) {\n await response.body?.cancel();\n throw awikiImRemoteError({ status: response.status });\n }\n const value = parseJson(await readCappedBody(response, MAX_DID_DOCUMENT_BYTES));\n if (!isRecord(value)) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n return value;\n }\n );\n }\n\n /** Download one object without following redirects. */\n public async getBytes(\n url: string,\n bearerToken: string,\n expectedSize: number\n ): Promise<Uint8Array> {\n if (\n !Number.isSafeInteger(expectedSize) ||\n expectedSize < 0 ||\n expectedSize > this.options.attachmentMaxBytes\n ) {\n throw new AwikiImError('invalid-request', 'AWiki attachment size is invalid');\n }\n this.validateAttachmentUrl(url);\n return this.withResponse(\n url,\n {\n method: 'GET',\n headers: { Authorization: `Bearer ${bearerToken}` },\n redirect: 'error',\n },\n async (response) => {\n if (!response.ok) {\n await response.body?.cancel();\n throw awikiImRemoteError({ status: response.status });\n }\n const declaredLength = contentLength(response.headers);\n if (declaredLength !== undefined && declaredLength !== expectedSize) {\n await response.body?.cancel();\n throw new AwikiImError('remote', 'AWiki attachment verification failed');\n }\n return readCappedBody(response, expectedSize);\n }\n );\n }\n\n /** Validate an untrusted DID, service, upload, or object URL against the operator allowlist. */\n public validateAttachmentUrl(value: string): URL {\n const url = validateServiceBaseUrl(value, this.options.allowInsecureLoopback);\n if (!this.allowedAttachmentOrigins.has(url.origin)) {\n throw new AwikiImError('forbidden', 'AWiki attachment origin is not permitted');\n }\n return url;\n }\n\n /** Abort every owned request and reject future work. */\n public dispose(): void {\n this.disposed = true;\n for (const controller of this.controllers) {\n controller.abort();\n }\n this.controllers.clear();\n }\n\n private async executeRpc(\n url: string,\n body: string,\n headers: Record<string, string>,\n requestId: string\n ): Promise<RpcResult> {\n return this.withResponse(\n url,\n {\n method: 'POST',\n headers,\n body,\n redirect: 'error',\n },\n (response) => decodeRpcResponse(response, requestId)\n );\n }\n\n private async withResponse<T>(\n input: string,\n init: RequestInit,\n consume: (response: Response) => Promise<T>\n ): Promise<T> {\n if (this.disposed) {\n throw new AwikiImError('remote', 'AWiki IM client has been disposed');\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n this.controllers.add(controller);\n try {\n const response = await this.fetchImpl(input, { ...init, signal: controller.signal });\n return await consume(response);\n } catch (error) {\n if (this.disposed) {\n throw new AwikiImError('remote', 'AWiki IM client has been disposed');\n }\n throw normalizeAwikiImError(error);\n } finally {\n clearTimeout(timeout);\n this.controllers.delete(controller);\n }\n }\n}\n\n/** Build the origin proof required by Direct and Group send operations. */\nexport function buildOriginAuthentication(input: {\n readonly method: string;\n readonly meta: Record<string, unknown>;\n readonly body: Record<string, unknown>;\n readonly signingPrivateKeyPem: string;\n readonly signingKeyId: string;\n}): Record<string, unknown> {\n const target = input.meta.target;\n if (!isRecord(target)) {\n throw new AwikiImError('invalid-request', 'AWiki message target is invalid');\n }\n const kind = requiredString(target.kind, 'target kind');\n const did = requiredString(target.did, 'target DID');\n if (kind !== 'agent' && kind !== 'group' && kind !== 'service') {\n throw new AwikiImError('invalid-request', 'AWiki message target is invalid');\n }\n const canonicalRequest = canonicalizeJson({\n method: input.method,\n meta: input.meta,\n body: input.body,\n });\n const signatureInput = buildImSignatureInput(input.signingKeyId, {\n label: 'sig1',\n components: ['@method', '@target-uri', 'content-digest'],\n });\n const contentDigest = buildImContentDigest(canonicalRequest);\n const targetUri = `anp://${kind}/${encodeRfc3986(did)}`;\n const signatureParams = signatureInput.slice(signatureInput.indexOf('=') + 1);\n const signatureBase = [\n `\"@method\": ${input.method}`,\n `\"@target-uri\": ${targetUri}`,\n `\"content-digest\": ${contentDigest}`,\n `\"@signature-params\": ${signatureParams}`,\n ].join('\\n');\n const signature = signMessage(\n normalizePrivateKeyMaterial(input.signingPrivateKeyPem),\n new TextEncoder().encode(signatureBase)\n );\n return {\n scheme: 'anp-rfc9421-origin-proof-v1',\n origin_proof: {\n contentDigest,\n signatureInput,\n signature: encodeImSignature(signature, 'sig1'),\n },\n };\n}\n\nexport function joinServiceUrl(\n baseUrl: string,\n path: string,\n allowInsecureLoopback = false\n): string {\n const base = validateServiceBaseUrl(baseUrl, allowInsecureLoopback);\n return new URL(`/${path.replace(/^\\/+/, '')}`, base).toString();\n}\n\nexport function validateServiceBaseUrl(value: string, allowInsecureLoopback = false): URL {\n let url: URL;\n try {\n url = new URL(value);\n } catch (error) {\n throw new AwikiImError('invalid-request', 'AWiki service URL is invalid', undefined, {\n cause: error,\n });\n }\n if (\n url.username ||\n url.password ||\n (url.protocol !== 'https:' &&\n !(allowInsecureLoopback && url.protocol === 'http:' && isLoopback(url.hostname)))\n ) {\n throw new AwikiImError('invalid-request', 'AWiki service URL is invalid');\n }\n return url;\n}\n\nexport function operationId(prefix: 'op' | 'msg' | 'att'): string {\n return `${prefix}-${randomUUID()}`;\n}\n\nexport function randomChallenge(): string {\n return randomBytes(16).toString('hex');\n}\n\nfunction encodeJsonRpc(\n method: string,\n params: Record<string, unknown>\n): { readonly id: string; readonly body: string } {\n const id = randomUUID();\n return { id, body: JSON.stringify({ jsonrpc: '2.0', id, method, params }) };\n}\n\nasync function decodeRpcResponse(response: Response, expectedId: string): Promise<RpcResult> {\n let decoded: unknown;\n try {\n decoded = parseJson(await readCappedBody(response, MAX_RPC_RESPONSE_BYTES));\n } catch (error) {\n if (!response.ok) {\n throw awikiImRemoteError({ status: response.status });\n }\n throw new AwikiImError(\n 'remote',\n 'AWiki service returned an invalid response',\n response.status,\n {\n cause: error,\n }\n );\n }\n if (!isRecord(decoded)) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response', response.status);\n }\n const hasResult = Object.hasOwn(decoded, 'result') && decoded.result !== null;\n const hasError = Object.hasOwn(decoded, 'error') && decoded.error !== null;\n if (decoded.jsonrpc !== '2.0' || decoded.id !== expectedId || hasResult === hasError) {\n throw new AwikiImError(\n 'remote',\n 'AWiki JSON-RPC response envelope is invalid',\n response.status\n );\n }\n if (hasError && !isRecord(decoded.error)) {\n throw new AwikiImError(\n 'remote',\n 'AWiki JSON-RPC response envelope is invalid',\n response.status\n );\n }\n const rpcError = hasError ? (decoded.error as JsonRpcErrorValue) : undefined;\n if (!response.ok || rpcError !== undefined) {\n throw awikiImRemoteError({\n status: response.status,\n rpcCode: numberValue(rpcError?.code),\n serviceCode: serviceErrorCode(rpcError?.data),\n message: stringValue(rpcError?.message),\n });\n }\n if (!isRecord(decoded.result)) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response', response.status);\n }\n return {\n value: decoded.result,\n accessToken: responseAccessToken(response.headers) ?? stringValue(decoded.result.access_token),\n };\n}\n\nfunction responseAccessToken(headers: Headers): string | undefined {\n const authenticationInfo = headers.get('authentication-info') ?? '';\n return parseAuthenticationParameter(authenticationInfo, 'access_token');\n}\n\nfunction parseAuthenticationParameter(value: string, key: string): string | undefined {\n const match = value.match(new RegExp(`(?:^|[,\\\\s])${key}=(?:\"([^\"]+)\"|([^,\\\\s]+))`, 'i'));\n return (match?.[1] ?? match?.[2])?.trim() || undefined;\n}\n\nfunction serviceErrorCode(data: unknown): string | undefined {\n if (!isRecord(data)) {\n return undefined;\n }\n for (const key of ['awiki_code', 'anp_code', 'code']) {\n const value = stringValue(data[key]);\n if (value) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction requiredString(value: unknown, label: string): string {\n const result = stringValue(value);\n if (!result) {\n throw new AwikiImError('invalid-request', `AWiki ${label} is required`);\n }\n return result;\n}\n\nfunction normalizeAllowedOrigin(value: string, allowInsecureLoopback: boolean): string {\n const url = validateServiceBaseUrl(value, allowInsecureLoopback);\n if (url.pathname !== '/' || url.search || url.hash) {\n throw new AwikiImError('invalid-request', 'AWiki attachment origin is invalid');\n }\n return url.origin;\n}\n\nfunction isLoopback(hostname: string): boolean {\n return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]';\n}\n\nasync function readCappedBody(response: Response, maximumBytes: number): Promise<Uint8Array> {\n const declaredLength = contentLength(response.headers);\n if (declaredLength !== undefined && declaredLength > maximumBytes) {\n await response.body?.cancel();\n throw new AwikiImError('remote', 'AWiki response exceeds the permitted size');\n }\n if (!response.body) {\n return new Uint8Array();\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n let part = await reader.read();\n while (!part.done) {\n total += part.value.byteLength;\n if (total > maximumBytes) {\n await reader.cancel();\n throw new AwikiImError('remote', 'AWiki response exceeds the permitted size');\n }\n chunks.push(part.value);\n part = await reader.read();\n }\n } finally {\n reader.releaseLock();\n }\n const output = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n output.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return output;\n}\n\nfunction contentLength(headers: Headers): number | undefined {\n const raw = headers.get('content-length');\n if (raw === null) {\n return undefined;\n }\n const value = Number(raw);\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new AwikiImError('remote', 'AWiki response has an invalid Content-Length');\n }\n return value;\n}\n\nfunction parseJson(bytes: Uint8Array): unknown {\n try {\n return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)) as unknown;\n } catch (error) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response', undefined, {\n cause: error,\n });\n }\n}\n\nfunction encodeRfc3986(value: string): string {\n return encodeURIComponent(value).replace(\n /[!'()*]/g,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n","import { createHash } from 'node:crypto';\n\nimport { canonicalizeJson } from '../internal/json.js';\nimport { AwikiImError, normalizeAwikiImError } from './errors.js';\nimport {\n DEFAULT_PAGE_LIMIT,\n MAX_PAGE_LIMIT,\n conversationKey,\n type MessageWireValue,\n type PersistedAttachmentReference,\n type PersistedConversation,\n type PersistedTextSendOperation,\n} from './internal.js';\nimport {\n buildOriginAuthentication,\n HANDLE_RPC_PATH,\n MESSAGE_RPC_PATH,\n operationId,\n} from './protocol.js';\nimport type { AwikiIdentityRuntime } from './identity.js';\nimport type { AwikiImStateStore } from './storage.js';\nimport type { AwikiImTransport } from './protocol.js';\nimport type {\n AwikiAttachment,\n AwikiAttachmentId,\n AwikiConversation,\n AwikiConversationId,\n AwikiCursor,\n AwikiDid,\n AwikiHandle,\n AwikiMessage,\n AwikiMessageContent,\n AwikiMessageId,\n AwikiMessageTarget,\n AwikiPage,\n AwikiPageRequest,\n GetAwikiHistoryRequest,\n SendAwikiTextRequest,\n} from './types.js';\n\ninterface MessagingRuntimeOptions {\n readonly userServiceUrl: string;\n readonly messageServiceUrl: string;\n readonly transport: AwikiImTransport;\n readonly store: AwikiImStateStore;\n readonly identity: AwikiIdentityRuntime;\n readonly attachmentMaxBytes: number;\n}\n\nconst MAX_REFRESH_PAGES = 1_000;\n\nexport interface ResolvedMessageTarget {\n readonly kind: 'direct' | 'group';\n readonly did: string;\n readonly handle?: string;\n readonly conversationId: AwikiConversationId;\n}\n\n/** Direct/group conversation, history, and plain-message operations. */\nexport class AwikiMessagingRuntime {\n private sendTail: Promise<void> = Promise.resolve();\n\n public constructor(private readonly options: MessagingRuntimeOptions) {}\n\n /** Refresh conversation records and return one local page. */\n public async listConversations(\n request: AwikiPageRequest = {}\n ): Promise<AwikiPage<AwikiConversation>> {\n this.options.identity.requireSecrets();\n const limit = pageLimit(request.limit);\n await this.refreshConversations();\n const conversations = Object.values(this.options.store.snapshot().conversations)\n .map((record) => record.conversation)\n .sort(compareConversationRecency);\n const offset = decodeOffsetCursor(request.cursor);\n const items = conversations.slice(offset, offset + limit);\n const nextOffset = offset + items.length;\n return {\n items,\n hasMore: nextOffset < conversations.length,\n ...(nextOffset < conversations.length ? { nextCursor: encodeOffsetCursor(nextOffset) } : {}),\n };\n }\n\n /** Read and normalize one direct/group history page using the service's offset support. */\n public async getHistory(request: GetAwikiHistoryRequest): Promise<AwikiPage<AwikiMessage>> {\n const record =\n this.options.store.snapshot().conversations[conversationKey(request.conversationId)];\n if (!record) {\n throw new AwikiImError('not-found', 'AWiki conversation was not found');\n }\n const identity = this.options.identity.requireSecrets();\n const limit = pageLimit(request.limit);\n const kind = record.conversation.kind;\n const skip = decodeHistoryCursor(request.cursor, kind, request.conversationId);\n const result =\n kind === 'direct'\n ? await this.authenticatedRpc('direct.get_history', {\n meta: localMeta(identity.public.did as string, 'anp.direct.local.v1'),\n body: compactRecord({\n user_did: identity.public.did as string,\n peer_did: requiredConversationValue(record.peerDid),\n limit,\n skip: skip || undefined,\n }),\n })\n : await this.authenticatedRpc('group.list_messages', {\n meta: groupLocalMeta(\n identity.public.did as string,\n requiredConversationValue(record.groupDid)\n ),\n body: compactRecord({\n group_did: requiredConversationValue(record.groupDid),\n limit,\n skip: skip || undefined,\n }),\n });\n const wires = arrayValue(result.messages);\n validateHistoryWires(wires, record, identity.public.did as string);\n const mapped = wires\n .map((wire) =>\n isRecord(wire)\n ? this.mapWireMessage(wire, record.conversation, identity.public.did as string)\n : null\n )\n .filter((message): message is MappedMessage => message !== null);\n await this.persistMappedMessages(mapped);\n const items = mapped.map((entry) => entry.message).sort(compareMessageTime);\n const consumed = wires.length;\n if (result.has_more === true && consumed === 0) {\n throw new AwikiImError('remote', 'AWiki history pagination did not advance');\n }\n const hasMore = result.has_more === true;\n return {\n items,\n hasMore,\n ...(hasMore\n ? { nextCursor: encodeHistoryCursor(kind, request.conversationId, skip + consumed) }\n : {}),\n };\n }\n\n /** Resolve and send one idempotent text message. */\n public async sendText(request: SendAwikiTextRequest): Promise<AwikiMessage> {\n return this.exclusiveSend(async () => {\n const text = request.text.trim();\n if (!text) {\n throw new AwikiImError('invalid-request', 'AWiki message text is required');\n }\n const key = sendOperationKey(request.idempotencyKey);\n const fingerprint = sendFingerprint({ kind: 'text', target: request.target, text });\n const existing = this.options.store.snapshot().sendOperations[key];\n if (existing) {\n assertOperationFingerprint(existing.kind, existing.fingerprint, 'text', fingerprint);\n if (existing.kind !== 'text') {\n throw new AwikiImError('conflict', 'AWiki idempotency key is already in use');\n }\n if (existing.stage === 'completed' && existing.result) {\n return structuredClone(existing.result);\n }\n return this.resumeTextSend(key, existing);\n }\n const target = await this.resolveTarget(request.target);\n const stable = stableIdentifiers(request.idempotencyKey);\n const operation: PersistedTextSendOperation = {\n kind: 'text',\n fingerprint,\n target,\n createdAt: new Date().toISOString(),\n operationId: stable.operationId,\n messageId: stable.messageId,\n text,\n stage: 'prepared',\n };\n await this.options.store.mutate((state) => {\n if (state.sendOperations[key]) {\n throw new AwikiImError('conflict', 'AWiki idempotency key is already in use');\n }\n state.sendOperations[key] = operation;\n });\n return this.resumeTextSend(key, operation);\n });\n }\n\n /** Serialize persistent send state machines across text and attachment operations. */\n public async exclusiveSend<T>(operation: () => Promise<T>): Promise<T> {\n let release: () => void = () => undefined;\n const previous = this.sendTail;\n this.sendTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n await previous;\n try {\n return await operation();\n } finally {\n release();\n }\n }\n\n /** Resolve a direct Handle/DID or an existing group conversation. */\n public async resolveTarget(target: AwikiMessageTarget): Promise<ResolvedMessageTarget> {\n if (target.kind === 'direct') {\n const peer = target.peer.trim();\n if (!peer) {\n throw new AwikiImError('invalid-request', 'AWiki direct target is required');\n }\n const resolved = peer.startsWith('did:')\n ? { did: peer }\n : await this.resolveHandle(peer.replace(/^wba:\\/\\//, ''));\n const conversationId = directConversationId(resolved.did);\n await this.upsertConversation({\n conversation: {\n kind: 'direct',\n id: conversationId,\n peerDid: resolved.did as AwikiDid,\n ...(resolved.handle ? { peerHandle: resolved.handle as AwikiHandle } : {}),\n title: resolved.handle ?? resolved.did,\n },\n peerDid: resolved.did,\n });\n return {\n kind: 'direct',\n did: resolved.did,\n ...(resolved.handle ? { handle: resolved.handle } : {}),\n conversationId,\n };\n }\n\n const group = target.group.trim();\n if (!group) {\n throw new AwikiImError('invalid-request', 'AWiki group target is required');\n }\n let record = this.groupConversation(group);\n if (!record) {\n await this.refreshGroups();\n record = this.groupConversation(group);\n }\n if (!record?.groupDid) {\n throw new AwikiImError('not-found', 'AWiki group conversation was not found');\n }\n return {\n kind: 'group',\n did: record.groupDid,\n conversationId: record.conversation.id,\n };\n }\n\n /** Submit one already-encoded Direct/Group message and persist its projection. */\n public async sendPayload(\n target: ResolvedMessageTarget,\n contentType: string,\n body: Record<string, unknown>,\n wire: { readonly operationId: string; readonly messageId: string; readonly createdAt: string },\n content: AwikiMessageContent,\n attachmentReference?: Omit<PersistedAttachmentReference, 'messageId'>\n ): Promise<AwikiMessage> {\n const identity = this.options.identity.requireSecrets();\n const method = target.kind === 'direct' ? 'direct.send' : 'group.send';\n const meta: Record<string, unknown> = {\n profile: target.kind === 'direct' ? 'anp.direct.base.v1' : 'anp.group.base.v1',\n security_profile: 'transport-protected',\n sender_did: identity.public.did as string,\n target: { kind: target.kind === 'direct' ? 'agent' : 'group', did: target.did },\n operation_id: wire.operationId,\n message_id: wire.messageId,\n created_at: wire.createdAt,\n content_type: contentType,\n };\n const auth = buildOriginAuthentication({\n method,\n meta,\n body,\n signingPrivateKeyPem: identity.signingPrivateKeyPem,\n signingKeyId: identity.signingKeyId,\n });\n const result = await this.authenticatedRpc(method, { meta, auth, body });\n validateSendResult(result, wire, target);\n const messageId = wire.messageId;\n const sentAt = timestampValue(result.accepted_at) ?? Date.now();\n const message: AwikiMessage = {\n id: messageId as AwikiMessageId,\n conversationId: target.conversationId,\n conversationKind: target.kind,\n senderDid: identity.public.did,\n senderHandle: identity.public.handle,\n sentAt,\n outgoing: true,\n content,\n };\n const conversation =\n this.options.store.snapshot().conversations[conversationKey(target.conversationId)];\n await this.options.store.mutate((state) => {\n if (conversation) {\n state.conversations[conversationKey(target.conversationId)] = {\n ...conversation,\n conversation: { ...conversation.conversation, lastMessageAt: sentAt },\n };\n }\n if (attachmentReference) {\n const persistedReference = {\n ...attachmentReference,\n messageId,\n };\n state.attachments[attachmentReferenceKey(persistedReference)] = persistedReference;\n }\n });\n return message;\n }\n\n private async resumeTextSend(\n key: string,\n operation: PersistedTextSendOperation\n ): Promise<AwikiMessage> {\n const message = await this.sendPayload(\n operation.target,\n 'text/plain',\n { text: operation.text },\n {\n operationId: operation.operationId,\n messageId: operation.messageId,\n createdAt: operation.createdAt,\n },\n { kind: 'text', text: operation.text }\n );\n await this.options.store.mutate((state) => {\n const current = state.sendOperations[key];\n if (!current || current.kind !== 'text' || current.fingerprint !== operation.fingerprint) {\n throw new AwikiImError('conflict', 'AWiki send operation state changed');\n }\n state.sendOperations[key] = { ...current, stage: 'completed', result: message };\n });\n return message;\n }\n\n /** Execute a Message Service RPC, refreshing the bearer once on 401/403. */\n public async authenticatedRpc(\n method: string,\n params: Record<string, unknown>\n ): Promise<Record<string, unknown>> {\n let identity = this.options.identity.requireSecrets();\n try {\n const result = await this.options.transport.rpc(\n this.options.messageServiceUrl,\n MESSAGE_RPC_PATH,\n method,\n params,\n identity.accessToken\n );\n await this.persistReturnedToken(result.accessToken);\n return result.value;\n } catch (error) {\n const normalized = normalizeAwikiImError(error);\n if (normalized.code !== 'forbidden') {\n throw normalized;\n }\n const accessToken = await this.options.identity.refreshAccessToken();\n identity = this.options.identity.requireSecrets();\n const result = await this.options.transport.rpc(\n this.options.messageServiceUrl,\n MESSAGE_RPC_PATH,\n method,\n params,\n accessToken || identity.accessToken\n );\n await this.persistReturnedToken(result.accessToken);\n return result.value;\n }\n }\n\n private async refreshConversations(): Promise<void> {\n await this.refreshGroups();\n const identity = this.options.identity.requireSecrets();\n let skip = 0;\n for (let page = 0; page < MAX_REFRESH_PAGES; page += 1) {\n const result = await this.authenticatedRpc('inbox.get', {\n meta: localMeta(identity.public.did as string, 'anp.inbox.local.v1'),\n body: compactRecord({\n user_did: identity.public.did as string,\n limit: MAX_PAGE_LIMIT,\n skip: skip || undefined,\n }),\n });\n const wires = arrayValue(result.messages);\n const mapped = wires\n .map((wire) =>\n isRecord(wire)\n ? this.mapWireMessage(wire, undefined, identity.public.did as string)\n : null\n )\n .filter((message): message is MappedMessage => message !== null);\n await this.persistMappedMessages(mapped);\n if (result.has_more !== true) {\n return;\n }\n if (wires.length === 0) {\n throw new AwikiImError('remote', 'AWiki inbox pagination did not advance');\n }\n skip += wires.length;\n }\n throw new AwikiImError('remote', 'AWiki inbox pagination exceeded the safety limit');\n }\n\n private async refreshGroups(): Promise<void> {\n const identity = this.options.identity.requireSecrets();\n let cursor: string | undefined;\n for (let page = 0; page < MAX_REFRESH_PAGES; page += 1) {\n const result = await this.authenticatedRpc('group.list', {\n meta: groupLocalMeta(identity.public.did as string),\n body: compactRecord({ limit: MAX_PAGE_LIMIT, cursor }),\n });\n const groups = arrayValue(result.groups)\n .map(groupConversationFromWire)\n .filter((group): group is PersistedConversation => group !== null);\n if (groups.length > 0) {\n await this.options.store.mutate((state) => {\n for (const group of groups) {\n state.conversations[conversationKey(group.conversation.id)] = mergeConversation(\n state.conversations[conversationKey(group.conversation.id)],\n group\n );\n }\n });\n }\n const nextCursor = cursorValue(result.next_cursor);\n if (result.has_more === true && !nextCursor) {\n throw new AwikiImError('remote', 'AWiki group pagination omitted its cursor');\n }\n if (!nextCursor) {\n return;\n }\n if (nextCursor === cursor) {\n throw new AwikiImError('remote', 'AWiki group pagination did not advance');\n }\n cursor = nextCursor;\n }\n throw new AwikiImError('remote', 'AWiki group pagination exceeded the safety limit');\n }\n\n private async resolveHandle(peer: string): Promise<{ did: string; handle?: string }> {\n const result = await this.options.transport.rpc(\n this.options.userServiceUrl,\n HANDLE_RPC_PATH,\n 'lookup',\n { handle: peer }\n );\n const did = requiredWireString(result.value.did, 'resolved DID');\n const handle = stringValue(result.value.full_handle) ?? stringValue(result.value.handle);\n return { did, ...(handle ? { handle } : {}) };\n }\n\n private mapWireMessage(\n wire: MessageWireValue,\n fallbackConversation: AwikiConversation | undefined,\n ownerDid: string\n ): MappedMessage | null {\n // Group `id` is a local projection (`group_did:event_seq`); message_id is the\n // protocol identity used by attachment authorization and message references.\n const messageId =\n stringValue(wire.message_id) ?? stringValue(wire.id) ?? stringValue(wire.client_msg_id);\n const senderDid = stringValue(wire.sender_did);\n if (!messageId || !senderDid) {\n return null;\n }\n const receiverDid = stringValue(wire.receiver_did);\n const groupDid =\n stringValue(wire.group_did) ??\n (fallbackConversation?.kind === 'group'\n ? (fallbackConversation.groupDid as string)\n : undefined);\n const kind = groupDid ? 'group' : 'direct';\n const peerDid =\n kind === 'direct' ? (senderDid !== ownerDid ? senderDid : receiverDid) : undefined;\n if (kind === 'direct' && !peerDid) {\n return null;\n }\n const conversationId =\n fallbackConversation?.id ??\n (kind === 'group'\n ? groupConversationId(groupDid as string)\n : directConversationId(peerDid as string));\n const sentAt =\n timestampValue(wire.sent_at) ??\n timestampValue(wire.accepted_at) ??\n timestampValue(wire.created_at) ??\n 0;\n const contentType = stringValue(wire.content_type) ?? 'text/plain';\n const attachment = parseAttachmentMessage(\n wire.content,\n contentType,\n this.options.attachmentMaxBytes\n );\n const content: AwikiMessageContent = attachment\n ? {\n kind: 'attachment',\n attachment: attachment.attachment,\n ...(attachment.caption ? { caption: attachment.caption } : {}),\n }\n : { kind: 'text', text: textContent(wire) };\n const peerHandle =\n stringValue(wire.peer_full_handle) ??\n (senderDid !== ownerDid ? stringValue(wire.sender_handle) : undefined);\n const conversation: AwikiConversation =\n kind === 'group'\n ? {\n kind: 'group',\n id: conversationId,\n groupDid: groupDid as AwikiDid,\n title:\n stringValue(wire.group_name) ??\n (fallbackConversation?.kind === 'group'\n ? fallbackConversation.title\n : (groupDid as string)),\n ...(sentAt ? { lastMessageAt: sentAt } : {}),\n }\n : {\n kind: 'direct',\n id: conversationId,\n peerDid: peerDid as AwikiDid,\n ...(peerHandle ? { peerHandle: peerHandle as AwikiHandle } : {}),\n title:\n peerHandle ??\n (fallbackConversation?.kind === 'direct'\n ? fallbackConversation.title\n : (peerDid as string)),\n ...(sentAt ? { lastMessageAt: sentAt } : {}),\n };\n const message: AwikiMessage = {\n id: messageId as AwikiMessageId,\n conversationId,\n conversationKind: kind,\n senderDid: senderDid as AwikiDid,\n ...(stringValue(wire.sender_handle)\n ? { senderHandle: stringValue(wire.sender_handle) as AwikiHandle }\n : {}),\n sentAt,\n outgoing: senderDid === ownerDid,\n content,\n };\n const attachmentReference = attachment\n ? {\n attachment: attachment.attachment,\n objectUri: attachment.objectUri,\n senderDid,\n messageId,\n ...(kind === 'group' ? { groupDid } : { messageTargetDid: receiverDid ?? peerDid }),\n messageServiceDid: this.options.identity.requireSecrets().messageServiceDid,\n }\n : undefined;\n return {\n message,\n conversation: {\n conversation,\n ...(peerDid ? { peerDid } : {}),\n ...(groupDid ? { groupDid } : {}),\n },\n attachmentReference,\n };\n }\n\n private async persistMappedMessages(mapped: readonly MappedMessage[]): Promise<void> {\n if (mapped.length === 0) {\n return;\n }\n await this.options.store.mutate((state) => {\n for (const entry of mapped) {\n const key = conversationKey(entry.conversation.conversation.id);\n state.conversations[key] = mergeConversation(state.conversations[key], entry.conversation);\n if (entry.attachmentReference) {\n state.attachments[attachmentReferenceKey(entry.attachmentReference)] =\n entry.attachmentReference;\n }\n }\n });\n }\n\n private async upsertConversation(record: PersistedConversation): Promise<void> {\n await this.options.store.mutate((state) => {\n const key = conversationKey(record.conversation.id);\n state.conversations[key] = mergeConversation(state.conversations[key], record);\n });\n }\n\n private groupConversation(value: string): PersistedConversation | undefined {\n return Object.values(this.options.store.snapshot().conversations).find(\n (record) =>\n record.conversation.kind === 'group' &&\n ((record.conversation.id as string) === value || record.groupDid === value)\n );\n }\n\n private async persistReturnedToken(token: string | undefined): Promise<void> {\n if (!token || token === this.options.store.snapshot().identity?.accessToken) {\n return;\n }\n await this.options.store.mutate((state) => {\n if (state.identity) {\n state.identity = { ...state.identity, accessToken: token };\n }\n });\n }\n}\n\nfunction validateHistoryWires(\n wires: readonly unknown[],\n conversation: PersistedConversation,\n ownerDid: string\n): void {\n for (const wire of wires) {\n if (!isRecord(wire)) {\n throw new AwikiImError('remote', 'AWiki history response contains an invalid message');\n }\n if (conversation.conversation.kind === 'group') {\n if (stringValue(wire.group_did) !== conversation.groupDid) {\n throw new AwikiImError('remote', 'AWiki history message does not belong to the group');\n }\n continue;\n }\n const senderDid = stringValue(wire.sender_did);\n const receiverDid = stringValue(wire.receiver_did);\n const peerDid = conversation.peerDid;\n if (\n !peerDid ||\n !senderDid ||\n !receiverDid ||\n !(\n (senderDid === ownerDid && receiverDid === peerDid) ||\n (senderDid === peerDid && receiverDid === ownerDid)\n )\n ) {\n throw new AwikiImError('remote', 'AWiki history message does not belong to the direct peer');\n }\n }\n}\n\nfunction validateSendResult(\n result: Record<string, unknown>,\n wire: { readonly operationId: string; readonly messageId: string },\n target: ResolvedMessageTarget\n): void {\n if (\n result.accepted !== true ||\n result.operation_id !== wire.operationId ||\n result.message_id !== wire.messageId ||\n (target.kind === 'direct' ? result.target_did !== target.did : result.group_did !== target.did)\n ) {\n throw new AwikiImError('remote', 'AWiki send acknowledgement is invalid');\n }\n}\n\ninterface MappedMessage {\n readonly message: AwikiMessage;\n readonly conversation: PersistedConversation;\n readonly attachmentReference?: PersistedAttachmentReference;\n}\n\nfunction localMeta(senderDid: string, profile: string): Record<string, unknown> {\n return {\n profile,\n security_profile: 'transport-protected',\n sender_did: senderDid,\n operation_id: operationId('op'),\n created_at: new Date().toISOString(),\n };\n}\n\nfunction groupLocalMeta(senderDid: string, groupDid?: string): Record<string, unknown> {\n return {\n profile: 'anp.group.local.v1',\n security_profile: 'transport-protected',\n sender_did: senderDid,\n ...(groupDid ? { target: { kind: 'group', did: groupDid } } : {}),\n };\n}\n\nfunction groupConversationFromWire(value: unknown): PersistedConversation | null {\n if (!isRecord(value)) {\n return null;\n }\n const groupDid = stringValue(value.group_did) ?? stringValue(value.did) ?? stringValue(value.id);\n if (!groupDid) {\n return null;\n }\n const profile = isRecord(value.profile) ? value.profile : undefined;\n const title =\n stringValue(value.title) ??\n stringValue(value.name) ??\n stringValue(value.display_name) ??\n stringValue(profile?.display_name) ??\n groupDid;\n const lastMessageAt = timestampValue(value.last_message_at);\n return {\n conversation: {\n kind: 'group',\n id: groupConversationId(groupDid),\n groupDid: groupDid as AwikiDid,\n title,\n ...(lastMessageAt ? { lastMessageAt } : {}),\n },\n groupDid,\n };\n}\n\nfunction parseAttachmentMessage(\n rawContent: unknown,\n contentType: string,\n maximumBytes: number\n): {\n readonly attachment: AwikiAttachment;\n readonly objectUri: string;\n readonly caption?: string;\n} | null {\n if (contentType !== 'application/anp-attachment-manifest+json') {\n return null;\n }\n const decoded =\n typeof rawContent === 'string'\n ? parseJsonRecord(rawContent)\n : isRecord(rawContent)\n ? rawContent\n : undefined;\n if (!decoded) {\n throw new AwikiImError('remote', 'AWiki attachment manifest is invalid');\n }\n const attachments = arrayValue(decoded.attachments);\n if (attachments.length !== 1 || !isRecord(attachments[0])) {\n throw new AwikiImError('remote', 'AWiki attachment manifest is invalid');\n }\n const selected = attachments[0];\n const digest = isRecord(selected.digest) ? selected.digest : undefined;\n const access = isRecord(selected.access_info) ? selected.access_info : undefined;\n const encryption = isRecord(selected.encryption_info) ? selected.encryption_info : undefined;\n const id = stringValue(selected.attachment_id);\n const mimeType = stringValue(selected.mime_type);\n const size = integerValue(selected.size);\n const digestB64u = stringValue(digest?.value_b64u);\n const objectUri = stringValue(access?.object_uri);\n if (\n !id ||\n !mimeType ||\n size === undefined ||\n size > maximumBytes ||\n !digestB64u ||\n !objectUri ||\n digest?.alg !== 'sha-256' ||\n encryption?.mode !== 'none' ||\n (decoded.primary_attachment_id !== undefined && decoded.primary_attachment_id !== id)\n ) {\n throw new AwikiImError('remote', 'AWiki attachment manifest is invalid');\n }\n return {\n attachment: {\n id: id as AwikiAttachmentId,\n fileName: stringValue(selected.filename) ?? id,\n mimeType,\n size,\n sha256: Buffer.from(digestB64u, 'base64url').toString('hex'),\n },\n objectUri,\n ...(stringValue(decoded.caption) ? { caption: stringValue(decoded.caption) } : {}),\n };\n}\n\nfunction textContent(wire: MessageWireValue): string {\n const content = wire.content;\n if (typeof content === 'string') {\n return content;\n }\n if (isRecord(content) && typeof content.text === 'string') {\n return content.text;\n }\n if (isRecord(wire.body) && typeof wire.body.text === 'string') {\n return wire.body.text;\n }\n return '';\n}\n\nfunction stableIdentifiers(idempotencyKey: string): {\n readonly operationId: string;\n readonly messageId: string;\n} {\n const key = idempotencyKey.trim();\n if (!key || key.length > 256) {\n throw new AwikiImError('invalid-request', 'AWiki idempotency key is invalid');\n }\n const digest = createHash('sha256').update(key).digest('hex').slice(0, 32);\n return { operationId: `op-${digest}`, messageId: `msg-${digest}` };\n}\n\nexport function sendOperationKey(idempotencyKey: string): string {\n const key = idempotencyKey.trim();\n if (!key || key.length > 256) {\n throw new AwikiImError('invalid-request', 'AWiki idempotency key is invalid');\n }\n return createHash('sha256').update(`send-operation:${key}`).digest('hex');\n}\n\nexport function sendFingerprint(value: Record<string, unknown>): string {\n return createHash('sha256').update(canonicalizeJson(value)).digest('hex');\n}\n\nexport function assertOperationFingerprint(\n actualKind: string,\n actualFingerprint: string,\n expectedKind: string,\n expectedFingerprint: string\n): void {\n if (actualKind !== expectedKind || actualFingerprint !== expectedFingerprint) {\n throw new AwikiImError('conflict', 'AWiki idempotency key is already in use');\n }\n}\n\nfunction attachmentReferenceKey(reference: PersistedAttachmentReference): string {\n return [reference.senderDid, reference.messageId, reference.attachment.id as string]\n .map((value) => Buffer.from(value).toString('base64url'))\n .join('.');\n}\n\nfunction directConversationId(peerDid: string): AwikiConversationId {\n return `direct:${Buffer.from(peerDid).toString('base64url')}` as AwikiConversationId;\n}\n\nfunction groupConversationId(groupDid: string): AwikiConversationId {\n return `group:${Buffer.from(groupDid).toString('base64url')}` as AwikiConversationId;\n}\n\nfunction mergeConversation(\n current: PersistedConversation | undefined,\n next: PersistedConversation\n): PersistedConversation {\n if (!current) {\n return next;\n }\n const currentTime = current.conversation.lastMessageAt ?? 0;\n const nextTime = next.conversation.lastMessageAt ?? 0;\n return {\n ...current,\n ...next,\n conversation: {\n ...current.conversation,\n ...next.conversation,\n ...(Math.max(currentTime, nextTime) > 0\n ? { lastMessageAt: Math.max(currentTime, nextTime) }\n : {}),\n } as AwikiConversation,\n };\n}\n\nfunction compareConversationRecency(left: AwikiConversation, right: AwikiConversation): number {\n return (\n (right.lastMessageAt ?? 0) - (left.lastMessageAt ?? 0) || left.title.localeCompare(right.title)\n );\n}\n\nfunction compareMessageTime(left: AwikiMessage, right: AwikiMessage): number {\n return left.sentAt - right.sentAt || (left.id as string).localeCompare(right.id as string);\n}\n\nfunction pageLimit(value: number | undefined): number {\n if (value === undefined) {\n return DEFAULT_PAGE_LIMIT;\n }\n if (!Number.isSafeInteger(value) || value < 1 || value > MAX_PAGE_LIMIT) {\n throw new AwikiImError('invalid-request', 'AWiki page limit is invalid');\n }\n return value;\n}\n\nfunction encodeOffsetCursor(offset: number): AwikiCursor {\n return Buffer.from(JSON.stringify({ v: 1, offset })).toString('base64url') as AwikiCursor;\n}\n\nfunction decodeOffsetCursor(cursor: AwikiCursor | undefined): number {\n if (!cursor) {\n return 0;\n }\n try {\n const decoded: unknown = JSON.parse(\n Buffer.from(cursor as string, 'base64url').toString('utf8')\n );\n if (\n isRecord(decoded) &&\n decoded.v === 1 &&\n typeof decoded.offset === 'number' &&\n Number.isSafeInteger(decoded.offset) &&\n decoded.offset >= 0\n ) {\n return decoded.offset;\n }\n } catch {\n // Invalid opaque cursors share one stable public error below.\n }\n throw new AwikiImError('invalid-request', 'AWiki page cursor is invalid');\n}\n\nfunction encodeHistoryCursor(\n kind: 'direct' | 'group',\n conversationId: AwikiConversationId,\n skip: number\n): AwikiCursor {\n return Buffer.from(\n JSON.stringify({ v: 1, kind, conversationId: conversationId as string, skip }),\n 'utf8'\n ).toString('base64url') as AwikiCursor;\n}\n\nfunction decodeHistoryCursor(\n cursor: AwikiCursor | undefined,\n expectedKind: 'direct' | 'group',\n expectedConversationId: AwikiConversationId\n): number {\n if (!cursor) {\n return 0;\n }\n try {\n const decoded: unknown = JSON.parse(\n Buffer.from(cursor as string, 'base64url').toString('utf8')\n );\n if (\n isRecord(decoded) &&\n decoded.v === 1 &&\n decoded.kind === expectedKind &&\n decoded.conversationId === (expectedConversationId as string) &&\n typeof decoded.skip === 'number' &&\n Number.isSafeInteger(decoded.skip) &&\n decoded.skip >= 0\n ) {\n return decoded.skip;\n }\n } catch {\n // Invalid opaque cursors share one stable public error below.\n }\n throw new AwikiImError('invalid-request', 'AWiki history cursor is invalid');\n}\n\nfunction compactRecord(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));\n}\n\nfunction requiredConversationValue(value: string | undefined): string {\n if (!value) {\n throw new AwikiImError('not-found', 'AWiki conversation was not found');\n }\n return value;\n}\n\nfunction requiredWireString(value: unknown, label: string): string {\n const result = stringValue(value);\n if (!result) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n return result;\n}\n\nfunction cursorValue(value: unknown): string | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return stringValue(value);\n}\n\nfunction timestampValue(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value > 10_000_000_000 ? value : value * 1000;\n }\n if (typeof value === 'string' && value.trim()) {\n const numeric = Number(value);\n if (Number.isFinite(numeric)) {\n return numeric > 10_000_000_000 ? numeric : numeric * 1000;\n }\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n return undefined;\n}\n\nfunction integerValue(value: unknown): number | undefined {\n const numeric =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n return Number.isSafeInteger(numeric) && numeric >= 0 ? numeric : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction arrayValue(value: unknown): readonly unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | undefined {\n try {\n const decoded: unknown = JSON.parse(value);\n return isRecord(decoded) ? decoded : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n","import { createHash } from 'node:crypto';\n\nimport { validateDidDocumentBinding } from '../authentication/did-wba.js';\nimport type { DidDocument } from '../authentication/types.js';\nimport { AwikiImError } from './errors.js';\nimport type { AwikiIdentityRuntime } from './identity.js';\nimport type {\n PersistedAttachmentReference,\n PersistedAttachmentSendOperation,\n PersistedAttachmentSlot,\n} from './internal.js';\nimport {\n assertOperationFingerprint,\n sendFingerprint,\n sendOperationKey,\n type AwikiMessagingRuntime,\n} from './messaging.js';\nimport type { AwikiImStateStore } from './storage.js';\nimport { operationId, type AwikiImTransport } from './protocol.js';\nimport type {\n AwikiAttachmentId,\n DownloadAwikiAttachmentRequest,\n DownloadedAwikiAttachment,\n SendAwikiAttachmentRequest,\n AwikiMessage,\n} from './types.js';\n\nconst ATTACHMENT_PROFILE = 'anp.attachment.v1';\nconst ATTACHMENT_CONTENT_TYPE = 'application/anp-attachment-manifest+json';\n\ninterface AttachmentRuntimeOptions {\n readonly transport: AwikiImTransport;\n readonly store: AwikiImStateStore;\n readonly identity: AwikiIdentityRuntime;\n readonly messaging: AwikiMessagingRuntime;\n readonly attachmentMaxBytes: number;\n}\n\n/** Single-object P7 upload, attachment message, ticket, and verified download operations. */\nexport class AwikiAttachmentRuntime {\n public constructor(private readonly options: AttachmentRuntimeOptions) {}\n\n /** Upload, commit, and send one attachment manifest. */\n public async sendAttachment(request: SendAwikiAttachmentRequest): Promise<AwikiMessage> {\n return this.options.messaging.exclusiveSend(async () => {\n validateUpload(request.attachment, this.options.attachmentMaxBytes);\n const prepared = prepareAttachment(request.attachment.bytes);\n const caption = request.caption?.trim() || undefined;\n const fingerprint = sendFingerprint({\n kind: 'attachment',\n target: request.target,\n fileName: request.attachment.fileName,\n mimeType: request.attachment.mimeType,\n size: request.attachment.bytes.byteLength,\n digest: prepared.digestHex,\n caption,\n });\n const key = sendOperationKey(request.idempotencyKey);\n const existing = this.options.store.snapshot().sendOperations[key];\n if (existing) {\n assertOperationFingerprint(existing.kind, existing.fingerprint, 'attachment', fingerprint);\n if (existing.kind !== 'attachment') {\n throw new AwikiImError('conflict', 'AWiki idempotency key is already in use');\n }\n if (existing.stage === 'completed' && existing.result) {\n return structuredClone(existing.result);\n }\n return this.resumeAttachmentSend(key, existing, request.attachment.bytes);\n }\n\n const target = await this.options.messaging.resolveTarget(request.target);\n const identifiers = attachmentIdentifiers(request.idempotencyKey);\n const now = new Date().toISOString();\n const operation: PersistedAttachmentSendOperation = {\n kind: 'attachment',\n fingerprint,\n target,\n attachment: {\n id: identifiers.attachmentId as AwikiAttachmentId,\n fileName: request.attachment.fileName,\n mimeType: request.attachment.mimeType,\n size: request.attachment.bytes.byteLength,\n sha256: prepared.digestHex,\n },\n digestB64u: prepared.digestB64u,\n ...(caption ? { caption } : {}),\n createOperationId: identifiers.createOperationId,\n commitOperationId: identifiers.commitOperationId,\n messageOperationId: identifiers.messageOperationId,\n messageId: identifiers.messageId,\n createCreatedAt: now,\n commitCreatedAt: now,\n messageCreatedAt: now,\n stage: 'prepared',\n };\n await this.options.store.mutate((state) => {\n if (state.sendOperations[key]) {\n throw new AwikiImError('conflict', 'AWiki idempotency key is already in use');\n }\n state.sendOperations[key] = operation;\n });\n return this.resumeAttachmentSend(key, operation, request.attachment.bytes);\n });\n }\n\n private async resumeAttachmentSend(\n key: string,\n initial: PersistedAttachmentSendOperation,\n bytes: Uint8Array\n ): Promise<AwikiMessage> {\n const identity = this.options.identity.requireSecrets();\n let operation = initial;\n if (operation.stage === 'prepared') {\n const slotResult = await this.options.messaging.authenticatedRpc('attachment.create_slot', {\n meta: attachmentMeta(\n identity.public.did as string,\n identity.messageServiceDid,\n operation.createOperationId,\n operation.createCreatedAt\n ),\n body: {\n attachment_id: operation.attachment.id as string,\n expected_size: String(operation.attachment.size),\n expected_digest: { alg: 'sha-256', value_b64u: operation.digestB64u },\n mime_type: operation.attachment.mimeType,\n filename: operation.attachment.fileName,\n intended_message_security_profile: 'transport-protected',\n intended_target: {\n kind: operation.target.kind === 'direct' ? 'agent' : 'group',\n did: operation.target.did,\n },\n object_encryption_mode: 'none',\n },\n });\n const slot = parseSlot(slotResult, operation.attachment.id as string);\n this.options.transport.validateAttachmentUrl(slot.uploadUri);\n this.options.transport.validateAttachmentUrl(slot.objectUri);\n operation = await this.advanceOperation(key, operation, { stage: 'slot-created', slot });\n }\n const slot = requiredSlot(operation);\n if (operation.stage === 'slot-created') {\n await this.options.transport.putBytes(slot.uploadUri, slot.uploadHeaders, bytes);\n operation = await this.advanceOperation(key, operation, { stage: 'uploaded' });\n }\n if (operation.stage === 'uploaded') {\n const commit = await this.options.messaging.authenticatedRpc('attachment.commit_object', {\n meta: attachmentMeta(\n identity.public.did as string,\n identity.messageServiceDid,\n operation.commitOperationId,\n operation.commitCreatedAt\n ),\n body: {\n attachment_id: operation.attachment.id as string,\n slot_id: slot.slotId,\n commit_token: slot.commitToken,\n size: String(operation.attachment.size),\n digest: { alg: 'sha-256', value_b64u: operation.digestB64u },\n object_encryption_mode: 'none',\n },\n });\n if (\n commit.committed !== true ||\n commit.attachment_id !== operation.attachment.id ||\n commit.object_uri !== slot.objectUri\n ) {\n throw new AwikiImError('remote', 'AWiki attachment commit acknowledgement is invalid');\n }\n operation = await this.advanceOperation(key, operation, { stage: 'committed' });\n }\n if (operation.stage !== 'committed') {\n if (operation.stage === 'completed' && operation.result) return operation.result;\n throw new AwikiImError('remote', 'AWiki attachment send state is invalid');\n }\n const manifest = {\n attachments: [\n {\n attachment_id: operation.attachment.id as string,\n filename: operation.attachment.fileName,\n mime_type: operation.attachment.mimeType,\n size: String(operation.attachment.size),\n digest: { alg: 'sha-256', value_b64u: operation.digestB64u },\n access_info: { object_uri: slot.objectUri },\n encryption_info: { mode: 'none' },\n },\n ],\n ...(operation.caption ? { caption: operation.caption } : {}),\n primary_attachment_id: operation.attachment.id as string,\n };\n const reference: Omit<PersistedAttachmentReference, 'messageId'> = {\n attachment: operation.attachment,\n objectUri: slot.objectUri,\n senderDid: identity.public.did as string,\n ...(operation.target.kind === 'group'\n ? { groupDid: operation.target.did }\n : { messageTargetDid: operation.target.did }),\n messageServiceDid: identity.messageServiceDid,\n };\n const message = await this.options.messaging.sendPayload(\n operation.target,\n ATTACHMENT_CONTENT_TYPE,\n { payload: manifest },\n {\n operationId: operation.messageOperationId,\n messageId: operation.messageId,\n createdAt: operation.messageCreatedAt,\n },\n {\n kind: 'attachment',\n attachment: operation.attachment,\n ...(operation.caption ? { caption: operation.caption } : {}),\n },\n reference\n );\n await this.advanceOperation(key, operation, { stage: 'completed', result: message });\n return message;\n }\n\n private async advanceOperation(\n key: string,\n expected: PersistedAttachmentSendOperation,\n patch: Partial<PersistedAttachmentSendOperation>\n ): Promise<PersistedAttachmentSendOperation> {\n let updated: PersistedAttachmentSendOperation | undefined;\n await this.options.store.mutate((state) => {\n const current = state.sendOperations[key];\n if (\n !current ||\n current.kind !== 'attachment' ||\n current.fingerprint !== expected.fingerprint ||\n current.stage !== expected.stage\n ) {\n throw new AwikiImError('conflict', 'AWiki attachment send operation state changed');\n }\n updated = { ...current, ...patch } as PersistedAttachmentSendOperation;\n state.sendOperations[key] = updated;\n });\n if (!updated) {\n throw new AwikiImError('remote', 'AWiki attachment send state was not persisted');\n }\n return updated;\n }\n\n /** Issue a ticket, download the object, and verify exact size and SHA-256. */\n public async downloadAttachment(\n request: DownloadAwikiAttachmentRequest\n ): Promise<DownloadedAwikiAttachment> {\n const identity = this.options.identity.requireSecrets();\n const references = Object.values(this.options.store.snapshot().attachments).filter(\n (candidate) =>\n candidate.attachment.id === request.attachmentId &&\n candidate.messageId === request.messageId\n );\n if (references.length === 0) {\n throw new AwikiImError('not-found', 'AWiki attachment was not found');\n }\n if (references.length > 1) {\n throw new AwikiImError('conflict', 'AWiki attachment message reference is ambiguous');\n }\n const reference = references[0];\n if (!reference) {\n throw new AwikiImError('not-found', 'AWiki attachment was not found');\n }\n this.options.transport.validateAttachmentUrl(reference.objectUri);\n const operation = operationId('op');\n const messageServiceDid = await this.resolveAttachmentServiceDid(reference.senderDid);\n const ticket = await this.options.messaging.authenticatedRpc('attachment.get_download_ticket', {\n meta: attachmentMeta(\n identity.public.did as string,\n messageServiceDid,\n operation,\n new Date().toISOString()\n ),\n body: {\n attachment_id: reference.attachment.id as string,\n object_uri: reference.objectUri,\n requester_did: identity.public.did as string,\n message_security_profile: 'transport-protected',\n message_id: reference.messageId,\n one_time: true,\n ...(reference.groupDid\n ? { group_did: reference.groupDid }\n : { message_target_did: requiredDirectTarget(reference) }),\n },\n });\n validateTicketBinding(ticket.ticket_binding, reference, identity.public.did as string);\n const ticketValue = requiredString(ticket.download_ticket_b64u, 'download ticket');\n const bytes = await this.options.transport.getBytes(\n reference.objectUri,\n ticketValue,\n reference.attachment.size\n );\n const digestHex = createHash('sha256').update(bytes).digest('hex');\n if (\n bytes.byteLength !== reference.attachment.size ||\n digestHex !== reference.attachment.sha256\n ) {\n throw new AwikiImError('remote', 'AWiki attachment verification failed');\n }\n return { attachment: reference.attachment, bytes };\n }\n\n private async resolveAttachmentServiceDid(senderDid: string): Promise<string> {\n const identity = this.options.identity.requireSecrets();\n const document =\n senderDid === identity.public.did\n ? (identity.didDocument as unknown as Record<string, unknown>)\n : await this.options.transport.getJson(didResolutionUrl(senderDid));\n if (document.id !== senderDid) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n if (!isValidAttachmentDidDocument(document)) {\n throw new AwikiImError('remote', 'AWiki attachment sender DID document is invalid');\n }\n const matching = arrayValue(document.service)\n .filter(isRecord)\n .filter(\n (service) =>\n service.type === 'ANPMessageService' &&\n arrayValue(service.profiles).includes(ATTACHMENT_PROFILE) &&\n arrayValue(service.securityProfiles ?? service.security_profiles).includes(\n 'transport-protected'\n ) &&\n typeof service.serviceDid === 'string' &&\n service.serviceDid.trim() &&\n typeof service.serviceEndpoint === 'string' &&\n service.serviceEndpoint.trim()\n )\n .map((service, index) => ({\n service,\n index,\n priority: priorityValue(service.priority),\n }))\n .sort((left, right) => {\n if (left.priority !== undefined && right.priority !== undefined) {\n return left.priority - right.priority || left.index - right.index;\n }\n if (left.priority !== undefined) return -1;\n if (right.priority !== undefined) return 1;\n return left.index - right.index;\n });\n const selected = matching[0]?.service;\n if (!selected) {\n throw new AwikiImError('remote', 'AWiki attachment service was not found');\n }\n this.options.transport.validateAttachmentUrl(\n requiredString(selected.serviceEndpoint, 'attachment service endpoint')\n );\n return requiredString(selected.serviceDid, 'attachment service DID');\n }\n}\n\ntype AttachmentSlot = PersistedAttachmentSlot;\n\nfunction requiredSlot(operation: PersistedAttachmentSendOperation): PersistedAttachmentSlot {\n if (!operation.slot) {\n throw new AwikiImError('remote', 'AWiki attachment slot state is missing');\n }\n return operation.slot;\n}\n\nfunction parseSlot(result: Record<string, unknown>, expectedAttachmentId: string): AttachmentSlot {\n const attachmentId = requiredString(result.attachment_id, 'attachment ID');\n if (attachmentId !== expectedAttachmentId) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n return {\n attachmentId,\n slotId: requiredString(result.slot_id, 'attachment slot ID'),\n uploadUri: requiredString(result.upload_uri, 'attachment upload URI'),\n uploadHeaders: stringRecord(result.upload_headers, 'attachment upload headers'),\n objectUri: requiredString(result.object_uri, 'attachment object URI'),\n commitToken: requiredString(result.commit_token, 'attachment commit token'),\n };\n}\n\nfunction attachmentMeta(\n senderDid: string,\n serviceDid: string,\n operation: string,\n createdAt: string\n): Record<string, unknown> {\n return {\n profile: ATTACHMENT_PROFILE,\n security_profile: 'transport-protected',\n sender_did: senderDid,\n target: { kind: 'service', did: serviceDid },\n operation_id: operation,\n created_at: createdAt,\n };\n}\n\nfunction attachmentIdentifiers(idempotencyKey: string): {\n readonly attachmentId: string;\n readonly createOperationId: string;\n readonly commitOperationId: string;\n readonly messageOperationId: string;\n readonly messageId: string;\n} {\n const key = idempotencyKey.trim();\n if (!key || key.length > 256) {\n throw new AwikiImError('invalid-request', 'AWiki idempotency key is invalid');\n }\n return {\n attachmentId: `att-${digestPrefix(`attachment:${key}`)}`,\n createOperationId: `op-${digestPrefix(`create:${key}`)}`,\n commitOperationId: `op-${digestPrefix(`commit:${key}`)}`,\n messageOperationId: `op-${digestPrefix(`message:${key}`)}`,\n messageId: `msg-${digestPrefix(`message:${key}`)}`,\n };\n}\n\nfunction digestPrefix(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 32);\n}\n\nfunction prepareAttachment(bytes: Uint8Array): {\n readonly digestHex: string;\n readonly digestB64u: string;\n} {\n const digest = createHash('sha256').update(bytes).digest();\n return { digestHex: digest.toString('hex'), digestB64u: digest.toString('base64url') };\n}\n\nfunction validateUpload(\n upload: {\n readonly fileName: string;\n readonly mimeType: string;\n readonly bytes: Uint8Array;\n },\n maximumBytes: number\n): void {\n if (!upload.fileName.trim() || upload.fileName.includes('/') || upload.fileName.includes('\\\\')) {\n throw new AwikiImError('invalid-request', 'AWiki attachment file name is invalid');\n }\n if (!/^[\\w.+-]+\\/[\\w.+-]+$/.test(upload.mimeType.trim())) {\n throw new AwikiImError('invalid-request', 'AWiki attachment MIME type is invalid');\n }\n if (!(upload.bytes instanceof Uint8Array)) {\n throw new AwikiImError('invalid-request', 'AWiki attachment bytes are invalid');\n }\n if (upload.bytes.byteLength > maximumBytes) {\n throw new AwikiImError('invalid-request', 'AWiki attachment exceeds the configured limit');\n }\n}\n\nfunction validateTicketBinding(\n value: unknown,\n reference: PersistedAttachmentReference,\n requesterDid: string\n): void {\n if (!isRecord(value)) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n const expected = {\n attachment_id: reference.attachment.id as string,\n object_uri: reference.objectUri,\n requester_did: requesterDid,\n message_id: reference.messageId,\n message_security_profile: 'transport-protected',\n };\n if (\n Object.entries(expected).some(([key, expectedValue]) => value[key] !== expectedValue) ||\n (reference.groupDid\n ? value.group_did !== reference.groupDid\n : value.message_target_did !== reference.messageTargetDid)\n ) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n}\n\nfunction requiredDirectTarget(reference: PersistedAttachmentReference): string {\n if (!reference.messageTargetDid) {\n throw new AwikiImError('not-found', 'AWiki attachment message context was not found');\n }\n return reference.messageTargetDid;\n}\n\nfunction didResolutionUrl(did: string): string {\n if (!did.startsWith('did:wba:')) {\n throw new AwikiImError('remote', 'AWiki attachment sender DID is invalid');\n }\n const parts = did.split(':');\n const authority = parts[2];\n if (!authority) {\n throw new AwikiImError('remote', 'AWiki attachment sender DID is invalid');\n }\n const host = decodeURIComponent(authority);\n const path = parts\n .slice(3)\n .map((segment) => encodeURIComponent(segment))\n .join('/');\n return path ? `https://${host}/${path}/did.json` : `https://${host}/.well-known/did.json`;\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n return value.trim();\n}\n\nfunction stringRecord(value: unknown, label: string): Record<string, string> {\n if (!isRecord(value)) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n const output: Record<string, string> = {};\n for (const [key, headerValue] of Object.entries(value)) {\n if (typeof headerValue !== 'string' || !key.trim()) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n output[key] = headerValue;\n }\n return output;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction arrayValue(value: unknown): readonly unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction priorityValue(value: unknown): number | undefined {\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n return Number.isFinite(parsed) ? Math.trunc(parsed) : undefined;\n}\n\nfunction isValidAttachmentDidDocument(document: Record<string, unknown>): boolean {\n try {\n return validateDidDocumentBinding(document as unknown as DidDocument, true);\n } catch {\n return false;\n }\n}\n","import { buildAnpMessageService, createDidWbaDocument } from '../authentication/did-wba.js';\nimport { DidProfile, type ServiceRecord } from '../authentication/types.js';\nimport {\n generateW3cProof,\n CRYPTOSUITE_EDDSA_JCS_2022,\n PROOF_TYPE_DATA_INTEGRITY,\n} from '../proof/proof.js';\nimport { validateLocalPart } from '../wns/validator.js';\nimport { AwikiImError, normalizeAwikiImError } from './errors.js';\nimport { type PendingRegistrationState, type PersistedIdentitySecrets } from './internal.js';\nimport {\n DID_AUTH_RPC_PATH,\n HANDLE_RPC_PATH,\n randomChallenge,\n type AwikiImTransport,\n} from './protocol.js';\nimport type { AwikiImStateStore } from './storage.js';\nimport type {\n AwikiDid,\n AwikiHandle,\n AwikiIdentity,\n RegisterIdentityRequest,\n SendRegistrationOtpRequest,\n SendRegistrationOtpResult,\n} from './types.js';\n\ninterface IdentityRuntimeOptions {\n readonly userServiceUrl: string;\n readonly userServiceDomain: string;\n readonly messageServicePublicUrl: string;\n readonly messageServiceDid: string;\n readonly transport: AwikiImTransport;\n readonly store: AwikiImStateStore;\n}\n\n/** Identity registration and token refresh operations for the high-level client. */\nexport class AwikiIdentityRuntime {\n private registrationTail: Promise<void> = Promise.resolve();\n\n public constructor(private readonly options: IdentityRuntimeOptions) {}\n\n /** Return the public identity projection. */\n public getIdentity(): AwikiIdentity | null {\n return this.options.store.snapshot().identity?.public ?? null;\n }\n\n /** Reject persisted identity material that belongs to a different configured deployment. */\n public validateConfiguredIdentity(): void {\n const snapshot = this.options.store.snapshot();\n const material = snapshot.identity ?? snapshot.pendingRegistration;\n if (material && material.messageServiceDid !== this.options.messageServiceDid) {\n throw new AwikiImError('conflict', 'AWiki state belongs to a different Message Service');\n }\n const handle = snapshot.identity?.public.handle ?? snapshot.pendingRegistration?.handle;\n if (handle && !handle.endsWith(`.${this.options.userServiceDomain}`)) {\n throw new AwikiImError('conflict', 'AWiki state belongs to a different User Service domain');\n }\n }\n\n /** Send the phone-only registration OTP supported by the frozen MVP API. */\n public async sendRegistrationOtp(\n request: SendRegistrationOtpRequest\n ): Promise<SendRegistrationOtpResult> {\n if (this.getIdentity()) {\n throw new AwikiImError('already-registered', 'AWiki identity is already registered');\n }\n const phone = normalizePhone(request.phone);\n const handle = normalizeRegistrationHandle(request.handle, this.options.userServiceDomain);\n const result = await this.options.transport.rpc(\n this.options.userServiceUrl,\n HANDLE_RPC_PATH,\n 'send_otp',\n { phone }\n );\n const retryAfterSeconds = requiredWireNumber(\n result.value.retry_after_seconds,\n 'retry_after_seconds'\n );\n const retryAt = requiredWireString(result.value.retry_at, 'retry_at');\n const registrationOtp = {\n handle: handle.full,\n phone,\n retryAt,\n };\n await this.options.store.mutate((state) => {\n state.registrationOtp = registrationOtp;\n });\n return { retryAfterSeconds, retryAt };\n }\n\n /** Register and persist the one deployment identity. */\n public async registerIdentity(request: RegisterIdentityRequest): Promise<AwikiIdentity> {\n return this.exclusiveRegistration(async () => {\n if (this.getIdentity()) {\n throw new AwikiImError('already-registered', 'AWiki identity is already registered');\n }\n const registrationOtp = this.options.store.snapshot().registrationOtp;\n const phone = normalizePhone(request.phone);\n const otp = normalizeOtp(request.otp);\n const handle = normalizeRegistrationHandle(request.handle, this.options.userServiceDomain);\n if (\n !registrationOtp ||\n registrationOtp.phone !== phone ||\n registrationOtp.handle !== handle.full\n ) {\n throw new AwikiImError('invalid-request', 'AWiki registration OTP target does not match');\n }\n let pending = this.options.store.snapshot().pendingRegistration;\n if (pending) {\n if (pending.handle !== handle.full || pending.phone !== phone) {\n throw new AwikiImError('conflict', 'AWiki registration is already pending');\n }\n pending = refreshPendingProof(pending, handle.domain);\n } else {\n pending = createPendingRegistration(\n phone,\n handle,\n this.options.messageServicePublicUrl,\n this.options.messageServiceDid\n );\n }\n await this.options.store.mutate((state) => {\n state.pendingRegistration = pending;\n });\n\n try {\n const result = await this.options.transport.rpc(\n this.options.userServiceUrl,\n DID_AUTH_RPC_PATH,\n 'register',\n {\n did_document: pending.didDocument as unknown as Record<string, unknown>,\n handle: handle.local,\n phone,\n otp_code: otp,\n }\n );\n return this.commitRegistration(pending, result.value, result.accessToken);\n } catch (error) {\n const normalized = normalizeAwikiImError(error);\n if (normalized.code === 'conflict') {\n const reconciled = await this.tryReconcilePending(pending);\n if (reconciled) {\n return reconciled;\n }\n }\n throw normalized;\n }\n });\n }\n\n /** Require secret identity material for a message operation. */\n public requireSecrets(): PersistedIdentitySecrets {\n const identity = this.options.store.snapshot().identity;\n if (!identity) {\n throw new AwikiImError('not-registered', 'AWiki identity is not registered');\n }\n return identity;\n }\n\n /** Refresh an expired bearer by authenticating the persisted DID. */\n public async refreshAccessToken(): Promise<string> {\n const identity = this.requireSecrets();\n const result = await this.options.transport.signedRpc(\n this.options.userServiceUrl,\n DID_AUTH_RPC_PATH,\n 'get_me',\n {},\n {\n didDocument: identity.didDocument,\n signingPrivateKeyPem: identity.signingPrivateKeyPem,\n signingKeyId: identity.signingKeyId,\n }\n );\n const token =\n result.accessToken ?? requiredWireString(result.value.access_token, 'access token');\n await this.options.store.mutate((state) => {\n if (state.identity) {\n state.identity = { ...state.identity, accessToken: token };\n }\n });\n return token;\n }\n\n private async commitRegistration(\n pending: PendingRegistrationState,\n result: Record<string, unknown>,\n headerToken?: string\n ): Promise<AwikiIdentity> {\n const state = requiredWireString(result.state, 'registration state');\n if (state === 'join_required') {\n throw new AwikiImError('already-registered', 'AWiki identity is already registered');\n }\n if (state !== 'registered') {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n const did = requiredWireString(result.did, 'registered DID');\n if (did !== pending.didDocument.id) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n const fullHandle = stringValue(result.full_handle) ?? pending.handle;\n if (fullHandle !== pending.handle) {\n throw new AwikiImError('remote', 'AWiki service returned an invalid response');\n }\n const accessToken = headerToken ?? requiredWireString(result.access_token, 'access token');\n return this.persistRegisteredIdentity(pending, did, fullHandle, accessToken);\n }\n\n private async tryReconcilePending(\n pending: PendingRegistrationState\n ): Promise<AwikiIdentity | null> {\n try {\n const result = await this.options.transport.signedRpc(\n this.options.userServiceUrl,\n DID_AUTH_RPC_PATH,\n 'get_me',\n {},\n {\n didDocument: pending.didDocument,\n signingPrivateKeyPem: pending.signingPrivateKeyPem,\n signingKeyId: pending.signingKeyId,\n }\n );\n const did = requiredWireString(result.value.did, 'registered DID');\n if (did !== pending.didDocument.id) {\n return null;\n }\n const token =\n result.accessToken ?? requiredWireString(result.value.access_token, 'access token');\n return this.persistRegisteredIdentity(pending, did, pending.handle, token);\n } catch {\n return null;\n }\n }\n\n private async persistRegisteredIdentity(\n pending: PendingRegistrationState,\n did: string,\n handle: string,\n accessToken: string\n ): Promise<AwikiIdentity> {\n const publicIdentity: AwikiIdentity = {\n did: did as AwikiDid,\n handle: handle as AwikiHandle,\n registeredAt: Date.now(),\n };\n await this.options.store.mutate((state) => {\n state.identity = {\n public: publicIdentity,\n didDocument: pending.didDocument,\n rootPrivateKeyPem: pending.rootPrivateKeyPem,\n signingPrivateKeyPem: pending.signingPrivateKeyPem,\n signingKeyId: pending.signingKeyId,\n accessToken,\n messageServiceDid: pending.messageServiceDid,\n };\n delete state.registrationOtp;\n delete state.pendingRegistration;\n });\n return publicIdentity;\n }\n\n private async exclusiveRegistration<T>(operation: () => Promise<T>): Promise<T> {\n let release: () => void = () => undefined;\n const previous = this.registrationTail;\n this.registrationTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n await previous;\n try {\n return await operation();\n } finally {\n release();\n }\n }\n}\n\nfunction createPendingRegistration(\n phone: string,\n handle: { readonly local: string; readonly domain: string; readonly full: string },\n messageServicePublicUrl: string,\n messageServiceDid: string\n): PendingRegistrationState {\n const messageEndpoint = new URL('/anp-im/rpc', messageServicePublicUrl).toString();\n const services: ServiceRecord[] = [\n buildAnpMessageService('#message', messageEndpoint, {\n serviceDid: messageServiceDid,\n profiles: [\n 'anp.core.binding.v1',\n 'anp.direct.base.v1',\n 'anp.group.base.v1',\n 'anp.attachment.v1',\n ],\n securityProfiles: ['transport-protected'],\n }),\n {\n id: '#handle',\n type: 'ANPHandleService',\n serviceEndpoint: `https://${handle.domain}/.well-known/handle/${handle.local}`,\n },\n ];\n const bundle = createDidWbaDocument(handle.domain, {\n pathSegments: [handle.local],\n services,\n domain: handle.domain,\n challenge: randomChallenge(),\n didProfile: DidProfile.E1,\n enableE2ee: false,\n });\n const signingKey = bundle.keys['key-1'];\n if (!signingKey) {\n throw new AwikiImError('remote', 'AWiki identity generation failed');\n }\n return {\n handle: handle.full,\n phone,\n didDocument: bundle.didDocument,\n rootPrivateKeyPem: signingKey.privateKeyPem,\n signingPrivateKeyPem: signingKey.privateKeyPem,\n signingKeyId: `${bundle.didDocument.id}#key-1`,\n messageServiceDid,\n };\n}\n\nfunction refreshPendingProof(\n pending: PendingRegistrationState,\n domain: string\n): PendingRegistrationState {\n const unsigned = structuredClone(pending.didDocument);\n delete unsigned.proof;\n const didDocument = generateW3cProof(\n unsigned,\n pending.rootPrivateKeyPem,\n `${unsigned.id}#key-1`,\n {\n proofPurpose: 'assertionMethod',\n proofType: PROOF_TYPE_DATA_INTEGRITY,\n cryptosuite: CRYPTOSUITE_EDDSA_JCS_2022,\n domain,\n challenge: randomChallenge(),\n }\n );\n return { ...pending, didDocument };\n}\n\nfunction normalizeRegistrationHandle(\n input: string,\n userServiceDomain: string\n): { readonly local: string; readonly domain: string; readonly full: string } {\n const value = input\n .trim()\n .toLowerCase()\n .replace(/^wba:\\/\\//, '');\n const configuredDomain = userServiceDomain.toLowerCase();\n const dot = value.indexOf('.');\n const local = dot < 0 ? value : value.slice(0, dot);\n const domain = dot < 0 ? configuredDomain : value.slice(dot + 1);\n if (!validateLocalPart(local) || !domain.includes('.') || domain !== configuredDomain) {\n throw new AwikiImError('invalid-request', 'AWiki handle is invalid');\n }\n return { local, domain, full: `${local}.${domain}` };\n}\n\nfunction normalizePhone(value: string): string {\n const phone = value.trim().replace(/[\\s()-]/g, '');\n if (!/^\\+?[0-9]{6,20}$/.test(phone)) {\n throw new AwikiImError('invalid-request', 'AWiki phone number is invalid');\n }\n return phone;\n}\n\nfunction normalizeOtp(value: string): string {\n const otp = value.trim();\n if (!/^[0-9]{4,12}$/.test(otp)) {\n throw new AwikiImError('invalid-otp', 'AWiki verification code is invalid');\n }\n return otp;\n}\n\nfunction requiredWireString(value: unknown, label: string): string {\n const result = stringValue(value);\n if (!result) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n return result;\n}\n\nfunction requiredWireNumber(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new AwikiImError('remote', `AWiki response is missing ${label}`);\n }\n return value;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n","import { chmod, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { randomUUID } from 'node:crypto';\n\nimport { AwikiImError } from './errors.js';\nimport { emptyState, STATE_VERSION, type PersistedImState } from './internal.js';\n\n/** Atomic, process-local owner of the confidential AWiki identity state file. */\nexport class AwikiImStateStore {\n private state: PersistedImState = emptyState();\n private mutationTail: Promise<void> = Promise.resolve();\n\n public constructor(private readonly path: string) {}\n\n /** Load and minimally validate state from disk. */\n public async load(): Promise<void> {\n if (!this.path.trim()) {\n throw new AwikiImError('invalid-request', 'AWiki statePath is required');\n }\n try {\n const decoded: unknown = JSON.parse(await readFile(this.path, 'utf8'));\n if (!isPersistedState(decoded)) {\n throw new AwikiImError('invalid-request', 'AWiki identity state is invalid');\n }\n this.state = decoded;\n } catch (error) {\n if (isMissingFile(error)) {\n this.state = emptyState();\n return;\n }\n if (error instanceof AwikiImError) {\n throw error;\n }\n throw new AwikiImError('invalid-request', 'AWiki identity state cannot be read', undefined, {\n cause: error,\n });\n }\n }\n\n /** Return the current in-memory state. Callers must not mutate it directly. */\n public snapshot(): Readonly<PersistedImState> {\n return this.state;\n }\n\n /** Serialize one mutation and persist its complete result atomically. */\n public async mutate(mutator: (state: PersistedImState) => void): Promise<void> {\n const operation = this.mutationTail.then(async () => {\n const next = structuredClone(this.state);\n mutator(next);\n await this.persist(next);\n this.state = next;\n });\n this.mutationTail = operation.catch(() => undefined);\n await operation;\n }\n\n private async persist(state: PersistedImState): Promise<void> {\n const parent = dirname(this.path);\n await mkdir(parent, { recursive: true, mode: 0o700 });\n const temporaryPath = `${this.path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n await writeFile(temporaryPath, `${JSON.stringify(state)}\\n`, {\n encoding: 'utf8',\n mode: 0o600,\n flag: 'wx',\n });\n await rename(temporaryPath, this.path);\n await chmod(this.path, 0o600);\n } catch (error) {\n await unlink(temporaryPath).catch((unlinkError: unknown) => {\n if (!isMissingFile(unlinkError)) {\n throw unlinkError;\n }\n });\n throw new AwikiImError('remote', 'AWiki identity state cannot be persisted', undefined, {\n cause: error,\n });\n }\n }\n}\n\nfunction isPersistedState(value: unknown): value is PersistedImState {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const record = value as Record<string, unknown>;\n return (\n record.version === STATE_VERSION &&\n isRecord(record.conversations) &&\n isRecord(record.attachments) &&\n isRecord(record.sendOperations)\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return (\n !!error &&\n typeof error === 'object' &&\n 'code' in error &&\n (error as { code?: unknown }).code === 'ENOENT'\n );\n}\n","import { AwikiAttachmentRuntime } from './attachments.js';\nimport { normalizeAwikiImError, AwikiImError } from './errors.js';\nimport { AwikiIdentityRuntime } from './identity.js';\nimport { AwikiMessagingRuntime } from './messaging.js';\nimport { AwikiImTransport, validateServiceBaseUrl } from './protocol.js';\nimport { AwikiImStateStore } from './storage.js';\nimport type {\n AwikiIdentity,\n AwikiImClient,\n AwikiImClientOptions,\n AwikiPageRequest,\n AwikiPage,\n AwikiConversation,\n GetAwikiHistoryRequest,\n AwikiMessage,\n SendAwikiTextRequest,\n SendAwikiAttachmentRequest,\n DownloadAwikiAttachmentRequest,\n DownloadedAwikiAttachment,\n RegisterIdentityRequest,\n SendRegistrationOtpRequest,\n SendRegistrationOtpResult,\n} from './types.js';\n\n/** Create one high-level Node.js AWiki IM client. */\nexport function createAwikiImClient(options: AwikiImClientOptions): AwikiImClient {\n return new DefaultAwikiImClient(options);\n}\n\nclass DefaultAwikiImClient implements AwikiImClient {\n private readonly store: AwikiImStateStore;\n private readonly transport: AwikiImTransport;\n private readonly identity: AwikiIdentityRuntime;\n private readonly messaging: AwikiMessagingRuntime;\n private readonly attachments: AwikiAttachmentRuntime;\n private readonly ready: Promise<void>;\n private readonly inFlight = new Set<Promise<unknown>>();\n private disposal: Promise<void> | undefined;\n private disposed = false;\n\n public constructor(options: AwikiImClientOptions) {\n const allowInsecureLoopback = options.allowInsecureLoopbackForTesting === true;\n validateServiceBaseUrl(options.userServiceUrl, allowInsecureLoopback);\n validateServiceBaseUrl(options.messageServiceUrl, allowInsecureLoopback);\n validateServiceBaseUrl(options.messageServicePublicUrl, allowInsecureLoopback);\n if (!isDomainName(options.userServiceDomain)) {\n throw new AwikiImError('invalid-request', 'AWiki userServiceDomain is invalid');\n }\n if (!isBareDomainDidWba(options.messageServiceDid)) {\n throw new AwikiImError('invalid-request', 'AWiki messageServiceDid is invalid');\n }\n if (\n !Array.isArray(options.allowedAttachmentOrigins) ||\n options.allowedAttachmentOrigins.length === 0\n ) {\n throw new AwikiImError('invalid-request', 'AWiki allowedAttachmentOrigins is required');\n }\n if (!Number.isSafeInteger(options.attachmentMaxBytes) || options.attachmentMaxBytes < 1) {\n throw new AwikiImError('invalid-request', 'AWiki attachmentMaxBytes is invalid');\n }\n if (!options.statePath.trim()) {\n throw new AwikiImError('invalid-request', 'AWiki statePath is required');\n }\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new AwikiImError('invalid-request', 'AWiki fetch implementation is required');\n }\n this.store = new AwikiImStateStore(options.statePath);\n this.transport = new AwikiImTransport(fetchImpl, {\n allowedAttachmentOrigins: options.allowedAttachmentOrigins,\n allowInsecureLoopback,\n attachmentMaxBytes: options.attachmentMaxBytes,\n });\n this.identity = new AwikiIdentityRuntime({\n userServiceUrl: options.userServiceUrl,\n userServiceDomain: options.userServiceDomain.toLowerCase(),\n messageServicePublicUrl: options.messageServicePublicUrl,\n messageServiceDid: options.messageServiceDid,\n transport: this.transport,\n store: this.store,\n });\n this.messaging = new AwikiMessagingRuntime({\n userServiceUrl: options.userServiceUrl,\n messageServiceUrl: options.messageServiceUrl,\n transport: this.transport,\n store: this.store,\n identity: this.identity,\n attachmentMaxBytes: options.attachmentMaxBytes,\n });\n this.attachments = new AwikiAttachmentRuntime({\n transport: this.transport,\n store: this.store,\n identity: this.identity,\n messaging: this.messaging,\n attachmentMaxBytes: options.attachmentMaxBytes,\n });\n this.ready = this.store.load().then(() => this.identity.validateConfiguredIdentity());\n }\n\n public async getIdentity(): Promise<AwikiIdentity | null> {\n return this.run(() => Promise.resolve(structuredClone(this.identity.getIdentity())));\n }\n\n public async sendRegistrationOtp(\n request: SendRegistrationOtpRequest\n ): Promise<SendRegistrationOtpResult> {\n return this.run(() => this.identity.sendRegistrationOtp(request));\n }\n\n public async registerIdentity(request: RegisterIdentityRequest): Promise<AwikiIdentity> {\n return this.run(() => this.identity.registerIdentity(request));\n }\n\n public async listConversations(\n request?: AwikiPageRequest\n ): Promise<AwikiPage<AwikiConversation>> {\n return this.run(() => this.messaging.listConversations(request));\n }\n\n public async getHistory(request: GetAwikiHistoryRequest): Promise<AwikiPage<AwikiMessage>> {\n return this.run(() => this.messaging.getHistory(request));\n }\n\n public async sendText(request: SendAwikiTextRequest): Promise<AwikiMessage> {\n return this.run(() => this.messaging.sendText(request));\n }\n\n public async sendAttachment(request: SendAwikiAttachmentRequest): Promise<AwikiMessage> {\n return this.run(() => this.attachments.sendAttachment(request));\n }\n\n public async downloadAttachment(\n request: DownloadAwikiAttachmentRequest\n ): Promise<DownloadedAwikiAttachment> {\n return this.run(() => this.attachments.downloadAttachment(request));\n }\n\n public async dispose(): Promise<void> {\n this.disposal ??= this.disposeOnce();\n return this.disposal;\n }\n\n private run<T>(operation: () => Promise<T>): Promise<T> {\n if (this.disposed) {\n return Promise.reject(new AwikiImError('remote', 'AWiki IM client has been disposed'));\n }\n const pending = (async () => {\n try {\n await this.ready;\n return await operation();\n } catch (error) {\n throw normalizeAwikiImError(error);\n }\n })();\n this.inFlight.add(pending);\n void pending.then(\n () => this.inFlight.delete(pending),\n () => this.inFlight.delete(pending)\n );\n return pending;\n }\n\n private async disposeOnce(): Promise<void> {\n this.disposed = true;\n this.transport.dispose();\n const ready = this.ready.catch((error: unknown) => {\n throw normalizeAwikiImError(error);\n });\n await Promise.allSettled([...this.inFlight]);\n await ready;\n }\n}\n\nfunction isDomainName(value: string): boolean {\n const domain = value.trim().toLowerCase();\n if (!domain || domain.length > 253 || domain.includes('/') || domain.includes(':')) {\n return false;\n }\n try {\n return new URL(`https://${domain}`).hostname === domain;\n } catch {\n return false;\n }\n}\n\nfunction isBareDomainDidWba(value: string): boolean {\n const prefix = 'did:wba:';\n const normalized = value.trim().toLowerCase();\n return normalized.startsWith(prefix) && isDomainName(normalized.slice(prefix.length));\n}\n"]}