@probemesh/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/chunk-257Y7LN2.js +827 -0
  4. package/dist/chunk-257Y7LN2.js.map +1 -0
  5. package/dist/chunk-2ASMVLG4.js +56 -0
  6. package/dist/chunk-2ASMVLG4.js.map +1 -0
  7. package/dist/chunk-2KWGHJYP.js +285 -0
  8. package/dist/chunk-2KWGHJYP.js.map +1 -0
  9. package/dist/chunk-3H7UGVI6.js +1117 -0
  10. package/dist/chunk-3H7UGVI6.js.map +1 -0
  11. package/dist/chunk-5Q3PDYIA.js +657 -0
  12. package/dist/chunk-5Q3PDYIA.js.map +1 -0
  13. package/dist/chunk-CXZOO3U4.js +550 -0
  14. package/dist/chunk-CXZOO3U4.js.map +1 -0
  15. package/dist/chunk-FRFBK4SY.js +270 -0
  16. package/dist/chunk-FRFBK4SY.js.map +1 -0
  17. package/dist/chunk-HJK52QJF.js +994 -0
  18. package/dist/chunk-HJK52QJF.js.map +1 -0
  19. package/dist/chunk-HNBDX7IU.js +705 -0
  20. package/dist/chunk-HNBDX7IU.js.map +1 -0
  21. package/dist/chunk-NYTV263W.js +116 -0
  22. package/dist/chunk-NYTV263W.js.map +1 -0
  23. package/dist/chunk-PXG54XOG.js +595 -0
  24. package/dist/chunk-PXG54XOG.js.map +1 -0
  25. package/dist/chunk-TDOBAMYM.js +607 -0
  26. package/dist/chunk-TDOBAMYM.js.map +1 -0
  27. package/dist/chunk-TV42EZSI.js +2157 -0
  28. package/dist/chunk-TV42EZSI.js.map +1 -0
  29. package/dist/chunk-UU2ZG7P7.js +408 -0
  30. package/dist/chunk-UU2ZG7P7.js.map +1 -0
  31. package/dist/chunk-WKN7QOCA.js +977 -0
  32. package/dist/chunk-WKN7QOCA.js.map +1 -0
  33. package/dist/chunk-ZJOLPBJJ.js +1091 -0
  34. package/dist/chunk-ZJOLPBJJ.js.map +1 -0
  35. package/dist/cli/audit-trail-export.cjs +1193 -0
  36. package/dist/cli/audit-trail-export.cjs.map +1 -0
  37. package/dist/cli/audit-trail-export.d.cts +1 -0
  38. package/dist/cli/audit-trail-export.d.ts +1 -0
  39. package/dist/cli/audit-trail-export.js +24 -0
  40. package/dist/cli/audit-trail-export.js.map +1 -0
  41. package/dist/cli/catalog-check.cjs +2687 -0
  42. package/dist/cli/catalog-check.cjs.map +1 -0
  43. package/dist/cli/catalog-check.d.cts +1 -0
  44. package/dist/cli/catalog-check.d.ts +1 -0
  45. package/dist/cli/catalog-check.js +26 -0
  46. package/dist/cli/catalog-check.js.map +1 -0
  47. package/dist/cli/probemesh-init.cjs +1049 -0
  48. package/dist/cli/probemesh-init.cjs.map +1 -0
  49. package/dist/cli/probemesh-init.d.cts +1 -0
  50. package/dist/cli/probemesh-init.d.ts +1 -0
  51. package/dist/cli/probemesh-init.js +22 -0
  52. package/dist/cli/probemesh-init.js.map +1 -0
  53. package/dist/cli/provider-conformance.cjs +6180 -0
  54. package/dist/cli/provider-conformance.cjs.map +1 -0
  55. package/dist/cli/provider-conformance.d.cts +1 -0
  56. package/dist/cli/provider-conformance.d.ts +1 -0
  57. package/dist/cli/provider-conformance.js +29 -0
  58. package/dist/cli/provider-conformance.js.map +1 -0
  59. package/dist/cli/provider-dossier-check.cjs +2978 -0
  60. package/dist/cli/provider-dossier-check.cjs.map +1 -0
  61. package/dist/cli/provider-dossier-check.d.cts +1 -0
  62. package/dist/cli/provider-dossier-check.d.ts +1 -0
  63. package/dist/cli/provider-dossier-check.js +27 -0
  64. package/dist/cli/provider-dossier-check.js.map +1 -0
  65. package/dist/cli/provider-dossier.cjs +1753 -0
  66. package/dist/cli/provider-dossier.cjs.map +1 -0
  67. package/dist/cli/provider-dossier.d.cts +1 -0
  68. package/dist/cli/provider-dossier.d.ts +1 -0
  69. package/dist/cli/provider-dossier.js +26 -0
  70. package/dist/cli/provider-dossier.js.map +1 -0
  71. package/dist/cli/x402-accept.cjs +6009 -0
  72. package/dist/cli/x402-accept.cjs.map +1 -0
  73. package/dist/cli/x402-accept.d.cts +1 -0
  74. package/dist/cli/x402-accept.d.ts +1 -0
  75. package/dist/cli/x402-accept.js +28 -0
  76. package/dist/cli/x402-accept.js.map +1 -0
  77. package/dist/index.cjs +13671 -0
  78. package/dist/index.cjs.map +1 -0
  79. package/dist/index.d.cts +2026 -0
  80. package/dist/index.d.ts +2026 -0
  81. package/dist/index.js +2560 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providerOnboardingDossier.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { ProbeMeshError } from \"./errors\";\nimport {\n validateProviderCatalogArtifact,\n type ProviderCatalogArtifact,\n type ProviderCatalogArtifactStatus,\n} from \"./providerCatalogArtifact\";\nimport {\n validateProviderConformanceArtifact,\n type ProviderConformanceArtifact,\n type ProviderConformanceArtifactReceiptSummary,\n type ProviderConformanceArtifactStatus,\n} from \"./providerConformanceArtifact\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n Cost,\n ProbeMeshCallSafety,\n ProbeMeshRetrySafety,\n ProbeMeshTimelineEventType,\n ProviderPaymentOption,\n ReceiptType,\n} from \"./types\";\n\nexport const PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION =\n \"probemesh.provider-onboarding-dossier.v1\" as const;\n\nexport type ProviderOnboardingDossierStatus = \"ready\" | \"failed\";\n\nexport type ProviderOnboardingDossierFormat = \"json\" | \"markdown\";\n\nexport interface ProviderOnboardingDossierOptions {\n catalogArtifact: ProviderCatalogArtifact;\n conformanceArtifact: ProviderConformanceArtifact;\n generatedAt?: string;\n dossierId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderOnboardingDossierProviderSummary {\n id: string;\n displayName: string;\n capabilities: string[];\n protocolMode: string;\n pricing?: Cost | Record<string, Cost>;\n paymentOptions?: ProviderPaymentOption[];\n}\n\nexport interface ProviderOnboardingDossierReadiness {\n ready: boolean;\n status: ProviderOnboardingDossierStatus;\n reasons: string[];\n failedChecks: string[];\n}\n\nexport interface ProviderOnboardingDossierReceiptSummary\n extends ProviderConformanceArtifactReceiptSummary {}\n\nexport interface ProviderOnboardingDossierEvidence {\n catalog: {\n artifactId: string;\n status: ProviderCatalogArtifactStatus;\n acceptanceStatus: ProviderCatalogArtifact[\"acceptance\"][\"status\"];\n gateStatus: ProviderCatalogArtifact[\"acceptance\"][\"gate\"][\"status\"];\n accepted: boolean;\n failedChecks: string[];\n };\n conformance: {\n artifactId: string;\n status: ProviderConformanceArtifactStatus;\n conformanceStatus: ProviderConformanceArtifact[\"conformance\"][\"status\"];\n failedChecks: string[];\n };\n receipts: ProviderOnboardingDossierReceiptSummary;\n safety: {\n acceptance?: ProbeMeshCallSafety;\n conformance?: ProbeMeshCallSafety;\n };\n retrySafety: {\n acceptance?: ProbeMeshRetrySafety;\n conformance?: ProbeMeshRetrySafety;\n };\n route: {\n acceptance?: ProviderCatalogArtifact[\"acceptance\"][\"route\"];\n conformance?: ProviderConformanceArtifact[\"conformance\"][\"route\"];\n };\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n}\n\nexport interface ProviderOnboardingDossierHashes {\n catalogArtifact: string;\n conformanceArtifact: string;\n readiness: string;\n dossier: string;\n}\n\nexport interface ProviderOnboardingDossier {\n schemaVersion: typeof PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION;\n dossierId: string;\n generatedAt: string;\n status: ProviderOnboardingDossierStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProviderOnboardingDossierHashes;\n provider: ProviderOnboardingDossierProviderSummary;\n readiness: ProviderOnboardingDossierReadiness;\n evidence: ProviderOnboardingDossierEvidence;\n artifacts: {\n catalog: ProviderCatalogArtifact;\n conformance: ProviderConformanceArtifact;\n };\n}\n\nexport interface ProviderOnboardingDossierValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProviderOnboardingDossierValidationResult {\n valid: boolean;\n errors: ProviderOnboardingDossierValidationError[];\n}\n\nexport function createProviderOnboardingDossier(\n options: ProviderOnboardingDossierOptions,\n): ProviderOnboardingDossier {\n assertProviderOnboardingDossierOptions(options);\n\n const status: ProviderOnboardingDossierStatus =\n options.catalogArtifact.status === \"ready\" &&\n options.conformanceArtifact.status === \"verified\"\n ? \"ready\"\n : \"failed\";\n const readiness = summarizeReadiness(\n options.catalogArtifact,\n options.conformanceArtifact,\n status,\n );\n const baseContent = sanitizeDossierOutput(\n {\n schemaVersion: PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION,\n dossierId:\n options.dossierId ??\n `${options.catalogArtifact.provider.id}:${options.catalogArtifact.artifactId}:${options.conformanceArtifact.artifactId}:dossier`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status,\n hashAlgorithm: \"sha256\" as const,\n provider: summarizeProvider(options.catalogArtifact),\n readiness,\n evidence: summarizeEvidence(\n options.catalogArtifact,\n options.conformanceArtifact,\n ),\n artifacts: {\n catalog: cloneSerializable(options.catalogArtifact),\n conformance: cloneSerializable(options.conformanceArtifact),\n },\n },\n options.forbiddenOutputValues ?? [],\n );\n const hashesWithoutDossier: ProviderOnboardingDossierHashes = {\n catalogArtifact: hashStableJson(baseContent.artifacts.catalog),\n conformanceArtifact: hashStableJson(baseContent.artifacts.conformance),\n readiness: hashStableJson(baseContent.readiness),\n dossier: \"\",\n };\n const dossier: ProviderOnboardingDossier = {\n ...baseContent,\n hashes: {\n ...hashesWithoutDossier,\n dossier: hashDossierContent({\n ...baseContent,\n hashes: hashesWithoutDossier,\n }),\n },\n };\n\n assertProviderOnboardingDossier(dossier);\n\n return dossier;\n}\n\nexport function validateProviderOnboardingDossier(\n dossier: unknown,\n): ProviderOnboardingDossierValidationResult {\n const errors: ProviderOnboardingDossierValidationError[] = [];\n\n if (!isRecord(dossier)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider onboarding dossier must be an object.\",\n },\n ],\n };\n }\n\n if (dossier.schemaVersion !== PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(dossier.dossierId, \"dossierId\", errors);\n validateIsoTimestamp(dossier.generatedAt, \"generatedAt\", errors);\n\n if (dossier.status !== \"ready\" && dossier.status !== \"failed\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"ready\" or \"failed\".',\n });\n }\n\n if (dossier.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateProviderSummary(dossier.provider, errors);\n validateReadiness(dossier.readiness, errors);\n validateEvidence(dossier.evidence, errors);\n validateNestedArtifacts(dossier.artifacts, errors);\n validateHashes(dossier, errors);\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderOnboardingDossier(\n dossier: unknown,\n): asserts dossier is ProviderOnboardingDossier {\n const result = validateProviderOnboardingDossier(dossier);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider onboarding dossier: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProviderOnboardingDossier(\n dossier: ProviderOnboardingDossier,\n options: {\n format?: ProviderOnboardingDossierFormat;\n title?: string;\n } = {},\n) {\n assertProviderOnboardingDossier(dossier);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatDossierMarkdown(dossier, options.title);\n }\n\n return JSON.stringify(dossier, null, 2);\n}\n\nfunction assertProviderOnboardingDossierOptions(\n options: ProviderOnboardingDossierOptions,\n): asserts options is ProviderOnboardingDossierOptions {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier options must be an object.\",\n });\n }\n\n const catalogValidation = validateProviderCatalogArtifact(\n options.catalogArtifact,\n );\n\n if (!catalogValidation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider onboarding catalog artifact: ${formatValidationErrors(\n catalogValidation.errors,\n )}`,\n });\n }\n\n const conformanceValidation = validateProviderConformanceArtifact(\n options.conformanceArtifact,\n );\n\n if (!conformanceValidation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider onboarding conformance artifact: ${formatValidationErrors(\n conformanceValidation.errors,\n )}`,\n });\n }\n\n if (\n options.catalogArtifact.provider.id !== options.conformanceArtifact.provider.id\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Provider onboarding dossier requires catalog and conformance artifacts for the same provider id.\",\n });\n }\n\n if (\n options.generatedAt !== undefined &&\n (typeof options.generatedAt !== \"string\" ||\n Number.isNaN(Date.parse(options.generatedAt)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.dossierId !== undefined &&\n (typeof options.dossierId !== \"string\" || options.dossierId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier dossierId must be a non-empty string.\",\n });\n }\n\n if (\n options.forbiddenOutputValues !== undefined &&\n (!Array.isArray(options.forbiddenOutputValues) ||\n options.forbiddenOutputValues.some((value) => typeof value !== \"string\"))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Provider onboarding dossier forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeProvider(\n catalogArtifact: ProviderCatalogArtifact,\n): ProviderOnboardingDossierProviderSummary {\n return {\n id: catalogArtifact.provider.id,\n displayName: catalogArtifact.provider.displayName,\n capabilities: [...catalogArtifact.provider.capabilities],\n protocolMode: catalogArtifact.provider.protocolMode,\n pricing: cloneSerializable(catalogArtifact.provider.pricing),\n paymentOptions: cloneSerializable(catalogArtifact.provider.paymentOptions),\n };\n}\n\nfunction summarizeReadiness(\n catalogArtifact: ProviderCatalogArtifact,\n conformanceArtifact: ProviderConformanceArtifact,\n status: ProviderOnboardingDossierStatus,\n): ProviderOnboardingDossierReadiness {\n const reasons: string[] = [];\n const failedChecks: string[] = [];\n\n if (catalogArtifact.status === \"ready\") {\n reasons.push(\"Catalog artifact is ready.\");\n } else {\n reasons.push(\"Catalog artifact is rejected.\");\n failedChecks.push(\"catalog_not_ready\");\n }\n\n if (conformanceArtifact.status === \"verified\") {\n reasons.push(\"Conformance artifact is verified.\");\n } else {\n reasons.push(\"Conformance artifact failed.\");\n failedChecks.push(\"conformance_not_verified\");\n }\n\n for (const check of catalogArtifact.acceptance.failedChecks) {\n failedChecks.push(`catalog:${check}`);\n }\n\n for (const check of conformanceArtifact.conformance.failedChecks) {\n failedChecks.push(`conformance:${check}`);\n }\n\n return {\n ready: status === \"ready\",\n status,\n reasons,\n failedChecks: uniqueStrings(failedChecks),\n };\n}\n\nfunction summarizeEvidence(\n catalogArtifact: ProviderCatalogArtifact,\n conformanceArtifact: ProviderConformanceArtifact,\n): ProviderOnboardingDossierEvidence {\n return {\n catalog: {\n artifactId: catalogArtifact.artifactId,\n status: catalogArtifact.status,\n acceptanceStatus: catalogArtifact.acceptance.status,\n gateStatus: catalogArtifact.acceptance.gate.status,\n accepted: catalogArtifact.acceptance.gate.accepted,\n failedChecks: [...catalogArtifact.acceptance.failedChecks],\n },\n conformance: {\n artifactId: conformanceArtifact.artifactId,\n status: conformanceArtifact.status,\n conformanceStatus: conformanceArtifact.conformance.status,\n failedChecks: [...conformanceArtifact.conformance.failedChecks],\n },\n receipts: combineReceiptSummaries(\n catalogArtifact.acceptance.receipts,\n conformanceArtifact.conformance.receipts,\n ),\n safety: {\n acceptance: cloneSerializable(catalogArtifact.acceptance.safety),\n conformance: cloneSerializable(conformanceArtifact.conformance.safety),\n },\n retrySafety: {\n acceptance: cloneSerializable(catalogArtifact.acceptance.retrySafety),\n conformance: cloneSerializable(conformanceArtifact.conformance.retrySafety),\n },\n route: {\n acceptance: cloneSerializable(catalogArtifact.acceptance.route),\n conformance: cloneSerializable(conformanceArtifact.conformance.route),\n },\n timelineEventTypes: uniqueStrings([\n ...catalogArtifact.acceptance.timelineEventTypes,\n ...conformanceArtifact.conformance.timelineEventTypes,\n ]) as ProbeMeshTimelineEventType[],\n telemetryEventTypes: uniqueStrings([\n ...catalogArtifact.acceptance.telemetryEventTypes,\n ...conformanceArtifact.conformance.telemetryEventTypes,\n ]) as ProbeMeshTimelineEventType[],\n };\n}\n\nfunction combineReceiptSummaries(\n left: ProviderCatalogArtifact[\"acceptance\"][\"receipts\"],\n right: ProviderConformanceArtifactReceiptSummary,\n): ProviderOnboardingDossierReceiptSummary {\n const byType: Partial<Record<ReceiptType, number>> = {};\n\n for (const [type, count] of Object.entries(left.byType)) {\n byType[type as ReceiptType] = (byType[type as ReceiptType] ?? 0) + Number(count);\n }\n\n for (const [type, count] of Object.entries(right.byType)) {\n byType[type as ReceiptType] = (byType[type as ReceiptType] ?? 0) + Number(count);\n }\n\n return {\n total: left.total + right.total,\n types: uniqueStrings([...left.types, ...right.types]) as ReceiptType[],\n providers: uniqueStrings([...left.providers, ...right.providers]),\n byType,\n hasPaymentProof: left.hasPaymentProof || right.hasPaymentProof,\n hasSettlementConfirmation:\n left.hasSettlementConfirmation || right.hasSettlementConfirmation,\n hasProviderDelivery: left.hasProviderDelivery || right.hasProviderDelivery,\n };\n}\n\nfunction formatDossierMarkdown(\n dossier: ProviderOnboardingDossier,\n title?: string,\n) {\n const lines = [\n `# ${title ?? `${dossier.provider.displayName} Onboarding Dossier`}`,\n \"\",\n `Status: ${dossier.status}`,\n `Schema: ${dossier.schemaVersion}`,\n `Dossier ID: ${dossier.dossierId}`,\n `Generated: ${dossier.generatedAt}`,\n `Provider: ${dossier.provider.id}`,\n `Capabilities: ${formatInlineList(dossier.provider.capabilities)}`,\n \"\",\n \"## Readiness\",\n `- Ready: ${String(dossier.readiness.ready)}`,\n `- Reasons: ${formatInlineList(dossier.readiness.reasons)}`,\n `- Failed checks: ${formatInlineList(dossier.readiness.failedChecks)}`,\n \"\",\n \"## Evidence\",\n `- Catalog artifact: ${dossier.evidence.catalog.artifactId} (${dossier.evidence.catalog.status})`,\n `- Conformance artifact: ${dossier.evidence.conformance.artifactId} (${dossier.evidence.conformance.status})`,\n `- Receipts: ${formatInlineList(dossier.evidence.receipts.types)}`,\n `- Timeline: ${formatInlineList(dossier.evidence.timelineEventTypes)}`,\n \"\",\n \"## Safety\",\n `- Acceptance payment: ${\n dossier.evidence.safety.acceptance?.paymentStatus ?? \"unknown\"\n }`,\n `- Conformance payment: ${\n dossier.evidence.safety.conformance?.paymentStatus ?? \"unknown\"\n }`,\n `- Acceptance delivery: ${\n dossier.evidence.safety.acceptance?.deliveryStatus ?? \"unknown\"\n }`,\n `- Conformance delivery: ${\n dossier.evidence.safety.conformance?.deliveryStatus ?? \"unknown\"\n }`,\n \"\",\n \"## Hashes\",\n `- Catalog artifact: ${dossier.hashes.catalogArtifact}`,\n `- Conformance artifact: ${dossier.hashes.conformanceArtifact}`,\n `- Readiness: ${dossier.hashes.readiness}`,\n `- Dossier: ${dossier.hashes.dossier}`,\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction validateProviderSummary(\n provider: unknown,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (!isRecord(provider)) {\n errors.push({\n path: \"provider\",\n message: \"provider must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(provider.id, \"provider.id\", errors);\n validateNonEmptyString(provider.displayName, \"provider.displayName\", errors);\n validateNonEmptyString(provider.protocolMode, \"provider.protocolMode\", errors);\n\n if (\n !Array.isArray(provider.capabilities) ||\n provider.capabilities.some((capability) => typeof capability !== \"string\")\n ) {\n errors.push({\n path: \"provider.capabilities\",\n message: \"provider.capabilities must be an array of strings.\",\n });\n }\n}\n\nfunction validateReadiness(\n readiness: unknown,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (!isRecord(readiness)) {\n errors.push({\n path: \"readiness\",\n message: \"readiness must be an object.\",\n });\n return;\n }\n\n if (typeof readiness.ready !== \"boolean\") {\n errors.push({\n path: \"readiness.ready\",\n message: \"readiness.ready must be a boolean.\",\n });\n }\n\n if (readiness.status !== \"ready\" && readiness.status !== \"failed\") {\n errors.push({\n path: \"readiness.status\",\n message: 'readiness.status must be \"ready\" or \"failed\".',\n });\n }\n\n if (\n !Array.isArray(readiness.reasons) ||\n readiness.reasons.some((reason) => typeof reason !== \"string\")\n ) {\n errors.push({\n path: \"readiness.reasons\",\n message: \"readiness.reasons must be an array of strings.\",\n });\n }\n\n if (\n !Array.isArray(readiness.failedChecks) ||\n readiness.failedChecks.some((check) => typeof check !== \"string\")\n ) {\n errors.push({\n path: \"readiness.failedChecks\",\n message: \"readiness.failedChecks must be an array of strings.\",\n });\n }\n}\n\nfunction validateEvidence(\n evidence: unknown,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (!isRecord(evidence)) {\n errors.push({\n path: \"evidence\",\n message: \"evidence must be an object.\",\n });\n return;\n }\n\n if (!isRecord(evidence.catalog)) {\n errors.push({\n path: \"evidence.catalog\",\n message: \"evidence.catalog must be an object.\",\n });\n } else {\n validateNonEmptyString(\n evidence.catalog.artifactId,\n \"evidence.catalog.artifactId\",\n errors,\n );\n\n if (\n evidence.catalog.status !== \"ready\" &&\n evidence.catalog.status !== \"rejected\"\n ) {\n errors.push({\n path: \"evidence.catalog.status\",\n message: 'evidence.catalog.status must be \"ready\" or \"rejected\".',\n });\n }\n\n if (typeof evidence.catalog.accepted !== \"boolean\") {\n errors.push({\n path: \"evidence.catalog.accepted\",\n message: \"evidence.catalog.accepted must be a boolean.\",\n });\n }\n }\n\n if (!isRecord(evidence.conformance)) {\n errors.push({\n path: \"evidence.conformance\",\n message: \"evidence.conformance must be an object.\",\n });\n } else {\n validateNonEmptyString(\n evidence.conformance.artifactId,\n \"evidence.conformance.artifactId\",\n errors,\n );\n\n if (\n evidence.conformance.status !== \"verified\" &&\n evidence.conformance.status !== \"failed\"\n ) {\n errors.push({\n path: \"evidence.conformance.status\",\n message: 'evidence.conformance.status must be \"verified\" or \"failed\".',\n });\n }\n }\n\n if (!isRecord(evidence.receipts)) {\n errors.push({\n path: \"evidence.receipts\",\n message: \"evidence.receipts must be an object.\",\n });\n }\n\n if (\n !Array.isArray(evidence.timelineEventTypes) ||\n evidence.timelineEventTypes.some((type) => typeof type !== \"string\")\n ) {\n errors.push({\n path: \"evidence.timelineEventTypes\",\n message: \"evidence.timelineEventTypes must be an array of strings.\",\n });\n }\n\n if (\n !Array.isArray(evidence.telemetryEventTypes) ||\n evidence.telemetryEventTypes.some((type) => typeof type !== \"string\")\n ) {\n errors.push({\n path: \"evidence.telemetryEventTypes\",\n message: \"evidence.telemetryEventTypes must be an array of strings.\",\n });\n }\n}\n\nfunction validateNestedArtifacts(\n artifacts: unknown,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (!isRecord(artifacts)) {\n errors.push({\n path: \"artifacts\",\n message: \"artifacts must be an object.\",\n });\n return;\n }\n\n const catalogValidation = validateProviderCatalogArtifact(artifacts.catalog);\n\n for (const error of catalogValidation.errors) {\n errors.push({\n path: `artifacts.catalog.${error.path}`,\n message: error.message,\n });\n }\n\n const conformanceValidation = validateProviderConformanceArtifact(\n artifacts.conformance,\n );\n\n for (const error of conformanceValidation.errors) {\n errors.push({\n path: `artifacts.conformance.${error.path}`,\n message: error.message,\n });\n }\n\n if (\n isRecord(artifacts.catalog) &&\n isRecord(artifacts.conformance) &&\n isRecord(artifacts.catalog.provider) &&\n isRecord(artifacts.conformance.provider) &&\n artifacts.catalog.provider.id !== artifacts.conformance.provider.id\n ) {\n errors.push({\n path: \"artifacts\",\n message: \"catalog and conformance artifacts must reference the same provider id.\",\n });\n }\n}\n\nfunction validateHashes(\n dossier: Record<string, unknown>,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (!isRecord(dossier.hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const field of [\n \"catalogArtifact\",\n \"conformanceArtifact\",\n \"readiness\",\n \"dossier\",\n ]) {\n const value = dossier.hashes[field];\n\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path: `hashes.${field}`,\n message: `${field} hash must be a sha256 hex string.`,\n });\n }\n }\n\n if (\n !isRecord(dossier.artifacts) ||\n !isRecord(dossier.readiness) ||\n errors.some((error) => error.path.startsWith(\"hashes.\"))\n ) {\n return;\n }\n\n const expectedHashes: ProviderOnboardingDossierHashes = {\n catalogArtifact: hashStableJson(dossier.artifacts.catalog),\n conformanceArtifact: hashStableJson(dossier.artifacts.conformance),\n readiness: hashStableJson(dossier.readiness),\n dossier: \"\",\n };\n const expectedDossierHash = hashDossierContent({\n ...(dossier as Omit<ProviderOnboardingDossier, \"hashes\">),\n hashes: expectedHashes,\n });\n\n for (const [field, expected] of Object.entries({\n ...expectedHashes,\n dossier: expectedDossierHash,\n })) {\n if (dossier.hashes[field] !== expected) {\n errors.push({\n path: `hashes.${field}`,\n message: `${field} hash does not match dossier content.`,\n });\n }\n }\n}\n\nfunction sanitizeDossierOutput<T>(\n value: T,\n forbiddenOutputValues: string[],\n): T {\n const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);\n\n return redactX402Secrets(\n replaceForbiddenValues(value, forbiddenValues, new WeakSet<object>()),\n ) as T;\n}\n\nfunction replaceForbiddenValues(\n value: unknown,\n forbiddenValues: string[],\n seen: WeakSet<object>,\n): unknown {\n if (typeof value === \"string\") {\n return forbiddenValues.reduce(\n (current, forbidden) => current.split(forbidden).join(\"[REDACTED]\"),\n value,\n );\n }\n\n if (value === null || typeof value !== \"object\" || value instanceof Date) {\n return value;\n }\n\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n\n seen.add(value);\n\n if (Array.isArray(value)) {\n const entries = value.map((entry) =>\n replaceForbiddenValues(entry, forbiddenValues, seen),\n );\n\n seen.delete(value);\n return entries;\n }\n\n const entries = Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues, seen),\n ]),\n );\n\n seen.delete(value);\n return entries;\n}\n\nfunction cloneSerializable<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction hashDossierContent(\n dossier: Omit<ProviderOnboardingDossier, \"hashes\"> & {\n hashes: ProviderOnboardingDossierHashes;\n },\n) {\n return hashStableJson(dossier);\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stableStringify(entry)).join(\",\")}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right));\n\n return `{${entries\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`)\n .join(\",\")}}`;\n}\n\nfunction uniqueStrings(values: string[]) {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction formatInlineList(values: readonly string[]) {\n return values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (typeof value !== \"string\" || value.length === 0) {\n errors.push({\n path,\n message: `${path} must be a non-empty string.`,\n });\n }\n}\n\nfunction validateIsoTimestamp(\n value: unknown,\n path: string,\n errors: ProviderOnboardingDossierValidationError[],\n) {\n if (typeof value !== \"string\" || Number.isNaN(Date.parse(value))) {\n errors.push({\n path,\n message: `${path} must be an ISO timestamp.`,\n });\n }\n}\n\nfunction formatValidationErrors(\n errors: { path: string; message: string }[],\n) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAwBpB,IAAM,6CACX;AAkGK,SAAS,gCACd,SAC2B;AAC3B,yCAAuC,OAAO;AAE9C,QAAM,SACJ,QAAQ,gBAAgB,WAAW,WACnC,QAAQ,oBAAoB,WAAW,aACnC,UACA;AACN,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,eAAe;AAAA,MACf,WACE,QAAQ,aACR,GAAG,QAAQ,gBAAgB,SAAS,EAAE,IAAI,QAAQ,gBAAgB,UAAU,IAAI,QAAQ,oBAAoB,UAAU;AAAA,MACxH,aAAa,QAAQ,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAAA,MAC3D;AAAA,MACA,eAAe;AAAA,MACf,UAAU,kBAAkB,QAAQ,eAAe;AAAA,MACnD;AAAA,MACA,UAAU;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT,SAAS,kBAAkB,QAAQ,eAAe;AAAA,QAClD,aAAa,kBAAkB,QAAQ,mBAAmB;AAAA,MAC5D;AAAA,IACF;AAAA,IACA,QAAQ,yBAAyB,CAAC;AAAA,EACpC;AACA,QAAM,uBAAwD;AAAA,IAC5D,iBAAiB,eAAe,YAAY,UAAU,OAAO;AAAA,IAC7D,qBAAqB,eAAe,YAAY,UAAU,WAAW;AAAA,IACrE,WAAW,eAAe,YAAY,SAAS;AAAA,IAC/C,SAAS;AAAA,EACX;AACA,QAAM,UAAqC;AAAA,IACzC,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,SAAS,mBAAmB;AAAA,QAC1B,GAAG;AAAA,QACH,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAEA,kCAAgC,OAAO;AAEvC,SAAO;AACT;AAEO,SAAS,kCACd,SAC2C;AAC3C,QAAM,SAAqD,CAAC;AAE5D,MAAI,CAAC,SAAS,OAAO,GAAG;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,kBAAkB,4CAA4C;AACxE,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,0BAA0B,0CAA0C;AAAA,IAC/E,CAAC;AAAA,EACH;AAEA,yBAAuB,QAAQ,WAAW,aAAa,MAAM;AAC7D,uBAAqB,QAAQ,aAAa,eAAe,MAAM;AAE/D,MAAI,QAAQ,WAAW,WAAW,QAAQ,WAAW,UAAU;AAC7D,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,kBAAkB,UAAU;AACtC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,0BAAwB,QAAQ,UAAU,MAAM;AAChD,oBAAkB,QAAQ,WAAW,MAAM;AAC3C,mBAAiB,QAAQ,UAAU,MAAM;AACzC,0BAAwB,QAAQ,WAAW,MAAM;AACjD,iBAAe,SAAS,MAAM;AAE9B,SAAO;AAAA,IACL,OAAO,OAAO,WAAW;AAAA,IACzB;AAAA,EACF;AACF;AAEO,SAAS,gCACd,SAC8C;AAC9C,QAAM,SAAS,kCAAkC,OAAO;AAExD,MAAI,OAAO,OAAO;AAChB;AAAA,EACF;AAEA,QAAM,IAAI,eAAe;AAAA,IACvB,MAAM;AAAA,IACN,SAAS,wCAAwC;AAAA,MAC/C,OAAO;AAAA,IACT,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,gCACd,SACA,UAGI,CAAC,GACL;AACA,kCAAgC,OAAO;AAEvC,OAAK,QAAQ,UAAU,YAAY,YAAY;AAC7C,WAAO,sBAAsB,SAAS,QAAQ,KAAK;AAAA,EACrD;AAEA,SAAO,KAAK,UAAU,SAAS,MAAM,CAAC;AACxC;AAEA,SAAS,uCACP,SACqD;AACrD,MAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACrE,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB;AAAA,IACxB,QAAQ;AAAA,EACV;AAEA,MAAI,CAAC,kBAAkB,OAAO;AAC5B,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS,iDAAiD;AAAA,QACxD,kBAAkB;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB;AAAA,IAC5B,QAAQ;AAAA,EACV;AAEA,MAAI,CAAC,sBAAsB,OAAO;AAChC,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS,qDAAqD;AAAA,QAC5D,sBAAsB;AAAA,MACxB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MACE,QAAQ,gBAAgB,SAAS,OAAO,QAAQ,oBAAoB,SAAS,IAC7E;AACA,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MACE,QAAQ,gBAAgB,WACvB,OAAO,QAAQ,gBAAgB,YAC9B,OAAO,MAAM,KAAK,MAAM,QAAQ,WAAW,CAAC,IAC9C;AACA,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,QAAQ,cAAc,WACrB,OAAO,QAAQ,cAAc,YAAY,QAAQ,UAAU,WAAW,IACvE;AACA,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,QAAQ,0BAA0B,WACjC,CAAC,MAAM,QAAQ,QAAQ,qBAAqB,KAC3C,QAAQ,sBAAsB,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,IACzE;AACA,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACF;AAEA,SAAS,kBACP,iBAC0C;AAC1C,SAAO;AAAA,IACL,IAAI,gBAAgB,SAAS;AAAA,IAC7B,aAAa,gBAAgB,SAAS;AAAA,IACtC,cAAc,CAAC,GAAG,gBAAgB,SAAS,YAAY;AAAA,IACvD,cAAc,gBAAgB,SAAS;AAAA,IACvC,SAAS,kBAAkB,gBAAgB,SAAS,OAAO;AAAA,IAC3D,gBAAgB,kBAAkB,gBAAgB,SAAS,cAAc;AAAA,EAC3E;AACF;AAEA,SAAS,mBACP,iBACA,qBACA,QACoC;AACpC,QAAM,UAAoB,CAAC;AAC3B,QAAM,eAAyB,CAAC;AAEhC,MAAI,gBAAgB,WAAW,SAAS;AACtC,YAAQ,KAAK,4BAA4B;AAAA,EAC3C,OAAO;AACL,YAAQ,KAAK,+BAA+B;AAC5C,iBAAa,KAAK,mBAAmB;AAAA,EACvC;AAEA,MAAI,oBAAoB,WAAW,YAAY;AAC7C,YAAQ,KAAK,mCAAmC;AAAA,EAClD,OAAO;AACL,YAAQ,KAAK,8BAA8B;AAC3C,iBAAa,KAAK,0BAA0B;AAAA,EAC9C;AAEA,aAAW,SAAS,gBAAgB,WAAW,cAAc;AAC3D,iBAAa,KAAK,WAAW,KAAK,EAAE;AAAA,EACtC;AAEA,aAAW,SAAS,oBAAoB,YAAY,cAAc;AAChE,iBAAa,KAAK,eAAe,KAAK,EAAE;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,OAAO,WAAW;AAAA,IAClB;AAAA,IACA;AAAA,IACA,cAAc,cAAc,YAAY;AAAA,EAC1C;AACF;AAEA,SAAS,kBACP,iBACA,qBACmC;AACnC,SAAO;AAAA,IACL,SAAS;AAAA,MACP,YAAY,gBAAgB;AAAA,MAC5B,QAAQ,gBAAgB;AAAA,MACxB,kBAAkB,gBAAgB,WAAW;AAAA,MAC7C,YAAY,gBAAgB,WAAW,KAAK;AAAA,MAC5C,UAAU,gBAAgB,WAAW,KAAK;AAAA,MAC1C,cAAc,CAAC,GAAG,gBAAgB,WAAW,YAAY;AAAA,IAC3D;AAAA,IACA,aAAa;AAAA,MACX,YAAY,oBAAoB;AAAA,MAChC,QAAQ,oBAAoB;AAAA,MAC5B,mBAAmB,oBAAoB,YAAY;AAAA,MACnD,cAAc,CAAC,GAAG,oBAAoB,YAAY,YAAY;AAAA,IAChE;AAAA,IACA,UAAU;AAAA,MACR,gBAAgB,WAAW;AAAA,MAC3B,oBAAoB,YAAY;AAAA,IAClC;AAAA,IACA,QAAQ;AAAA,MACN,YAAY,kBAAkB,gBAAgB,WAAW,MAAM;AAAA,MAC/D,aAAa,kBAAkB,oBAAoB,YAAY,MAAM;AAAA,IACvE;AAAA,IACA,aAAa;AAAA,MACX,YAAY,kBAAkB,gBAAgB,WAAW,WAAW;AAAA,MACpE,aAAa,kBAAkB,oBAAoB,YAAY,WAAW;AAAA,IAC5E;AAAA,IACA,OAAO;AAAA,MACL,YAAY,kBAAkB,gBAAgB,WAAW,KAAK;AAAA,MAC9D,aAAa,kBAAkB,oBAAoB,YAAY,KAAK;AAAA,IACtE;AAAA,IACA,oBAAoB,cAAc;AAAA,MAChC,GAAG,gBAAgB,WAAW;AAAA,MAC9B,GAAG,oBAAoB,YAAY;AAAA,IACrC,CAAC;AAAA,IACD,qBAAqB,cAAc;AAAA,MACjC,GAAG,gBAAgB,WAAW;AAAA,MAC9B,GAAG,oBAAoB,YAAY;AAAA,IACrC,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBACP,MACA,OACyC;AACzC,QAAM,SAA+C,CAAC;AAEtD,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM,GAAG;AACvD,WAAO,IAAmB,KAAK,OAAO,IAAmB,KAAK,KAAK,OAAO,KAAK;AAAA,EACjF;AAEA,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AACxD,WAAO,IAAmB,KAAK,OAAO,IAAmB,KAAK,KAAK,OAAO,KAAK;AAAA,EACjF;AAEA,SAAO;AAAA,IACL,OAAO,KAAK,QAAQ,MAAM;AAAA,IAC1B,OAAO,cAAc,CAAC,GAAG,KAAK,OAAO,GAAG,MAAM,KAAK,CAAC;AAAA,IACpD,WAAW,cAAc,CAAC,GAAG,KAAK,WAAW,GAAG,MAAM,SAAS,CAAC;AAAA,IAChE;AAAA,IACA,iBAAiB,KAAK,mBAAmB,MAAM;AAAA,IAC/C,2BACE,KAAK,6BAA6B,MAAM;AAAA,IAC1C,qBAAqB,KAAK,uBAAuB,MAAM;AAAA,EACzD;AACF;AAEA,SAAS,sBACP,SACA,OACA;AACA,QAAM,QAAQ;AAAA,IACZ,KAAK,SAAS,GAAG,QAAQ,SAAS,WAAW,qBAAqB;AAAA,IAClE;AAAA,IACA,WAAW,QAAQ,MAAM;AAAA,IACzB,WAAW,QAAQ,aAAa;AAAA,IAChC,eAAe,QAAQ,SAAS;AAAA,IAChC,cAAc,QAAQ,WAAW;AAAA,IACjC,aAAa,QAAQ,SAAS,EAAE;AAAA,IAChC,iBAAiB,iBAAiB,QAAQ,SAAS,YAAY,CAAC;AAAA,IAChE;AAAA,IACA;AAAA,IACA,YAAY,OAAO,QAAQ,UAAU,KAAK,CAAC;AAAA,IAC3C,cAAc,iBAAiB,QAAQ,UAAU,OAAO,CAAC;AAAA,IACzD,oBAAoB,iBAAiB,QAAQ,UAAU,YAAY,CAAC;AAAA,IACpE;AAAA,IACA;AAAA,IACA,uBAAuB,QAAQ,SAAS,QAAQ,UAAU,KAAK,QAAQ,SAAS,QAAQ,MAAM;AAAA,IAC9F,2BAA2B,QAAQ,SAAS,YAAY,UAAU,KAAK,QAAQ,SAAS,YAAY,MAAM;AAAA,IAC1G,eAAe,iBAAiB,QAAQ,SAAS,SAAS,KAAK,CAAC;AAAA,IAChE,eAAe,iBAAiB,QAAQ,SAAS,kBAAkB,CAAC;AAAA,IACpE;AAAA,IACA;AAAA,IACA,yBACE,QAAQ,SAAS,OAAO,YAAY,iBAAiB,SACvD;AAAA,IACA,0BACE,QAAQ,SAAS,OAAO,aAAa,iBAAiB,SACxD;AAAA,IACA,0BACE,QAAQ,SAAS,OAAO,YAAY,kBAAkB,SACxD;AAAA,IACA,2BACE,QAAQ,SAAS,OAAO,aAAa,kBAAkB,SACzD;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,QAAQ,OAAO,eAAe;AAAA,IACrD,2BAA2B,QAAQ,OAAO,mBAAmB;AAAA,IAC7D,gBAAgB,QAAQ,OAAO,SAAS;AAAA,IACxC,cAAc,QAAQ,OAAO,OAAO;AAAA,EACtC;AAEA,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;AAEA,SAAS,wBACP,UACA,QACA;AACA,MAAI,CAAC,SAAS,QAAQ,GAAG;AACvB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,yBAAuB,SAAS,IAAI,eAAe,MAAM;AACzD,yBAAuB,SAAS,aAAa,wBAAwB,MAAM;AAC3E,yBAAuB,SAAS,cAAc,yBAAyB,MAAM;AAE7E,MACE,CAAC,MAAM,QAAQ,SAAS,YAAY,KACpC,SAAS,aAAa,KAAK,CAAC,eAAe,OAAO,eAAe,QAAQ,GACzE;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,kBACP,WACA,QACA;AACA,MAAI,CAAC,SAAS,SAAS,GAAG;AACxB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,MAAI,OAAO,UAAU,UAAU,WAAW;AACxC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,UAAU,WAAW,WAAW,UAAU,WAAW,UAAU;AACjE,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,CAAC,MAAM,QAAQ,UAAU,OAAO,KAChC,UAAU,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,QAAQ,GAC7D;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,CAAC,MAAM,QAAQ,UAAU,YAAY,KACrC,UAAU,aAAa,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,GAChE;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,iBACP,UACA,QACA;AACA,MAAI,CAAC,SAAS,QAAQ,GAAG;AACvB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,SAAS,OAAO,GAAG;AAC/B,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL;AAAA,MACE,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAEA,QACE,SAAS,QAAQ,WAAW,WAC5B,SAAS,QAAQ,WAAW,YAC5B;AACA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,SAAS,QAAQ,aAAa,WAAW;AAClD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,SAAS,WAAW,GAAG;AACnC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL;AAAA,MACE,SAAS,YAAY;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAEA,QACE,SAAS,YAAY,WAAW,cAChC,SAAS,YAAY,WAAW,UAChC;AACA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,SAAS,QAAQ,GAAG;AAChC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,CAAC,MAAM,QAAQ,SAAS,kBAAkB,KAC1C,SAAS,mBAAmB,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GACnE;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MACE,CAAC,MAAM,QAAQ,SAAS,mBAAmB,KAC3C,SAAS,oBAAoB,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GACpE;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBACP,WACA,QACA;AACA,MAAI,CAAC,SAAS,SAAS,GAAG;AACxB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,QAAM,oBAAoB,gCAAgC,UAAU,OAAO;AAE3E,aAAW,SAAS,kBAAkB,QAAQ;AAC5C,WAAO,KAAK;AAAA,MACV,MAAM,qBAAqB,MAAM,IAAI;AAAA,MACrC,SAAS,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB;AAAA,IAC5B,UAAU;AAAA,EACZ;AAEA,aAAW,SAAS,sBAAsB,QAAQ;AAChD,WAAO,KAAK;AAAA,MACV,MAAM,yBAAyB,MAAM,IAAI;AAAA,MACzC,SAAS,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,MACE,SAAS,UAAU,OAAO,KAC1B,SAAS,UAAU,WAAW,KAC9B,SAAS,UAAU,QAAQ,QAAQ,KACnC,SAAS,UAAU,YAAY,QAAQ,KACvC,UAAU,QAAQ,SAAS,OAAO,UAAU,YAAY,SAAS,IACjE;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eACP,SACA,QACA;AACA,MAAI,CAAC,SAAS,QAAQ,MAAM,GAAG;AAC7B,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,aAAW,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG;AACD,UAAM,QAAQ,QAAQ,OAAO,KAAK;AAElC,QAAI,OAAO,UAAU,YAAY,CAAC,iBAAiB,KAAK,KAAK,GAAG;AAC9D,aAAO,KAAK;AAAA,QACV,MAAM,UAAU,KAAK;AAAA,QACrB,SAAS,GAAG,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MACE,CAAC,SAAS,QAAQ,SAAS,KAC3B,CAAC,SAAS,QAAQ,SAAS,KAC3B,OAAO,KAAK,CAAC,UAAU,MAAM,KAAK,WAAW,SAAS,CAAC,GACvD;AACA;AAAA,EACF;AAEA,QAAM,iBAAkD;AAAA,IACtD,iBAAiB,eAAe,QAAQ,UAAU,OAAO;AAAA,IACzD,qBAAqB,eAAe,QAAQ,UAAU,WAAW;AAAA,IACjE,WAAW,eAAe,QAAQ,SAAS;AAAA,IAC3C,SAAS;AAAA,EACX;AACA,QAAM,sBAAsB,mBAAmB;AAAA,IAC7C,GAAI;AAAA,IACJ,QAAQ;AAAA,EACV,CAAC;AAED,aAAW,CAAC,OAAO,QAAQ,KAAK,OAAO,QAAQ;AAAA,IAC7C,GAAG;AAAA,IACH,SAAS;AAAA,EACX,CAAC,GAAG;AACF,QAAI,QAAQ,OAAO,KAAK,MAAM,UAAU;AACtC,aAAO,KAAK;AAAA,QACV,MAAM,UAAU,KAAK;AAAA,QACrB,SAAS,GAAG,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,sBACP,OACA,uBACG;AACH,QAAM,kBAAkB,sBAAsB,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAEhF,SAAO;AAAA,IACL,uBAAuB,OAAO,iBAAiB,oBAAI,QAAgB,CAAC;AAAA,EACtE;AACF;AAEA,SAAS,uBACP,OACA,iBACA,MACS;AACT,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,gBAAgB;AAAA,MACrB,CAAC,SAAS,cAAc,QAAQ,MAAM,SAAS,EAAE,KAAK,YAAY;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,iBAAiB,MAAM;AACxE,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,IAAI,KAAK,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,OAAK,IAAI,KAAK;AAEd,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAMA,WAAU,MAAM;AAAA,MAAI,CAAC,UACzB,uBAAuB,OAAO,iBAAiB,IAAI;AAAA,IACrD;AAEA,SAAK,OAAO,KAAK;AACjB,WAAOA;AAAA,EACT;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC1C;AAAA,MACA,uBAAuB,OAAO,iBAAiB,IAAI;AAAA,IACrD,CAAC;AAAA,EACH;AAEA,OAAK,OAAO,KAAK;AACjB,SAAO;AACT;AAEA,SAAS,kBAAqB,OAAa;AACzC,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAEA,SAAS,eAAe,OAAgB;AACtC,SAAO,WAAW,QAAQ,EAAE,OAAO,gBAAgB,KAAK,CAAC,EAAE,OAAO,KAAK;AACzE;AAEA,SAAS,mBACP,SAGA;AACA,SAAO,eAAe,OAAO;AAC/B;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,MAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,IAAI,MAAM,IAAI,CAAC,UAAU,gBAAgB,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACnE;AAEA,QAAM,UAAU,OAAO,QAAQ,KAAgC,EAC5D,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAEtD,SAAO,IAAI,QACR,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,gBAAgB,KAAK,CAAC,EAAE,EACxE,KAAK,GAAG,CAAC;AACd;AAEA,SAAS,cAAc,QAAkB;AACvC,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAC7E;AAEA,SAAS,iBAAiB,QAA2B;AACnD,SAAO,OAAO,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI;AACjD;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,uBACP,OACA,MACA,QACA;AACA,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,GAAG,IAAI;AAAA,IAClB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,qBACP,OACA,MACA,QACA;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG;AAChE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,GAAG,IAAI;AAAA,IAClB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBACP,QACA;AACA,SAAO,OAAO,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,EAAE,KAAK,IAAI;AAC3E;","names":["entries"]}