{"version":3,"file":"parsing.mjs","names":[],"sources":["../../../../src/modules/w3c-di/proof-processing/parsing.ts"],"sourcesContent":["import { TypedArrayEncoder } from '../../../utils'\nimport { isObject } from '../../../utils/object'\nimport type { W3cDataIntegrityVerifyFailure } from '../W3cDataIntegrityError'\nimport { createInvalidResult, createIssue, W3cDataIntegrityProcessingErrorCode } from '../W3cDataIntegrityError'\nimport type { W3cDataIntegritySecuredDocument } from '../W3cDataIntegrityProof'\nimport type {\n  W3cDataIntegrityVerifyProofDocumentOptions,\n  W3cDataIntegrityVerifyProofOptions,\n} from '../W3cDataIntegrityProofService'\n\nexport interface ParsedW3cDataIntegrityProofDocument {\n  normalizedMediaType: string\n  securedDocument: W3cDataIntegritySecuredDocument\n  verifyOptions: W3cDataIntegrityVerifyProofOptions\n}\n\nexport type ParseW3cDataIntegrityProofDocumentResult =\n  | { ok: true; value: ParsedW3cDataIntegrityProofDocument }\n  | { ok: false; result: W3cDataIntegrityVerifyFailure }\n\n/**\n * Implements VC Data Integrity v1.0 §4.4 steps 1-2 document parsing preflight.\n *\n * Validates media type support, parses document bytes as JSON, and ensures\n * a proof container is present before verification dispatch.\n */\nexport function parseW3cDataIntegrityProofDocument(\n  options: W3cDataIntegrityVerifyProofDocumentOptions,\n  supportedMediaTypes: string[]\n): ParseW3cDataIntegrityProofDocumentResult {\n  const normalizedMediaType = options.mediaType.split(';')[0]?.trim().toLowerCase()\n  if (!normalizedMediaType || !supportedMediaTypes.includes(normalizedMediaType)) {\n    return {\n      ok: false,\n      result: createInvalidResult(\n        createIssue(\n          W3cDataIntegrityProcessingErrorCode.ParsingError,\n          'Unsupported media type for Data Integrity verification',\n          `Received media type '${options.mediaType}'. Supported media types: ${supportedMediaTypes.join(', ')}`\n        )\n      ),\n    }\n  }\n\n  let parsedDocument: unknown\n  try {\n    parsedDocument = JSON.parse(TypedArrayEncoder.toUtf8String(options.documentBytes))\n  } catch (error) {\n    return {\n      ok: false,\n      result: createInvalidResult(\n        createIssue(\n          W3cDataIntegrityProcessingErrorCode.ParsingError,\n          'Document bytes could not be parsed as JSON',\n          error instanceof Error ? error.message : String(error)\n        )\n      ),\n    }\n  }\n\n  if (!isObject(parsedDocument)) {\n    return {\n      ok: false,\n      result: createInvalidResult(\n        createIssue(\n          W3cDataIntegrityProcessingErrorCode.ParsingError,\n          'Parsed Data Integrity document must be a JSON object'\n        )\n      ),\n    }\n  }\n\n  const securedDocument = parsedDocument as W3cDataIntegritySecuredDocument\n  if (!('proof' in securedDocument)) {\n    return {\n      ok: false,\n      result: createInvalidResult(\n        createIssue(W3cDataIntegrityProcessingErrorCode.ParsingError, 'Parsed Data Integrity document has no proof')\n      ),\n    }\n  }\n\n  return {\n    ok: true,\n    value: {\n      normalizedMediaType,\n      securedDocument,\n      verifyOptions: {\n        expectedProofPurpose: options.expectedProofPurpose,\n        domain: options.domain,\n        challenge: options.challenge,\n      },\n    },\n  }\n}\n"],"mappings":";;;;;;;;;;;AA0BA,SAAgB,mCACd,SACA,qBAC0C;CAC1C,MAAM,sBAAsB,QAAQ,UAAU,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY;CAChF,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,SAAS,mBAAmB,GAC3E,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAEE,0DACA,wBAAwB,QAAQ,UAAU,4BAA4B,oBAAoB,KAAK,IAAI,GACrG,CACF;CACF;CAGF,IAAI;CACJ,IAAI;EACF,iBAAiB,KAAK,MAAM,kBAAkB,aAAa,QAAQ,aAAa,CAAC;CACnF,SAAS,OAAO;EACd,OAAO;GACL,IAAI;GACJ,QAAQ,oBACN,YAAA,mDAEE,8CACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD,CACF;EACF;CACF;CAEA,IAAI,CAAC,SAAS,cAAc,GAC1B,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAEE,sDACF,CACF;CACF;CAGF,MAAM,kBAAkB;CACxB,IAAI,EAAE,WAAW,kBACf,OAAO;EACL,IAAI;EACJ,QAAQ,oBACN,YAAA,mDAA8D,6CAA6C,CAC7G;CACF;CAGF,OAAO;EACL,IAAI;EACJ,OAAO;GACL;GACA;GACA,eAAe;IACb,sBAAsB,QAAQ;IAC9B,QAAQ,QAAQ;IAChB,WAAW,QAAQ;GACrB;EACF;CACF;AACF"}