@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.
- package/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/chunk-257Y7LN2.js +827 -0
- package/dist/chunk-257Y7LN2.js.map +1 -0
- package/dist/chunk-2ASMVLG4.js +56 -0
- package/dist/chunk-2ASMVLG4.js.map +1 -0
- package/dist/chunk-2KWGHJYP.js +285 -0
- package/dist/chunk-2KWGHJYP.js.map +1 -0
- package/dist/chunk-3H7UGVI6.js +1117 -0
- package/dist/chunk-3H7UGVI6.js.map +1 -0
- package/dist/chunk-5Q3PDYIA.js +657 -0
- package/dist/chunk-5Q3PDYIA.js.map +1 -0
- package/dist/chunk-CXZOO3U4.js +550 -0
- package/dist/chunk-CXZOO3U4.js.map +1 -0
- package/dist/chunk-FRFBK4SY.js +270 -0
- package/dist/chunk-FRFBK4SY.js.map +1 -0
- package/dist/chunk-HJK52QJF.js +994 -0
- package/dist/chunk-HJK52QJF.js.map +1 -0
- package/dist/chunk-HNBDX7IU.js +705 -0
- package/dist/chunk-HNBDX7IU.js.map +1 -0
- package/dist/chunk-NYTV263W.js +116 -0
- package/dist/chunk-NYTV263W.js.map +1 -0
- package/dist/chunk-PXG54XOG.js +595 -0
- package/dist/chunk-PXG54XOG.js.map +1 -0
- package/dist/chunk-TDOBAMYM.js +607 -0
- package/dist/chunk-TDOBAMYM.js.map +1 -0
- package/dist/chunk-TV42EZSI.js +2157 -0
- package/dist/chunk-TV42EZSI.js.map +1 -0
- package/dist/chunk-UU2ZG7P7.js +408 -0
- package/dist/chunk-UU2ZG7P7.js.map +1 -0
- package/dist/chunk-WKN7QOCA.js +977 -0
- package/dist/chunk-WKN7QOCA.js.map +1 -0
- package/dist/chunk-ZJOLPBJJ.js +1091 -0
- package/dist/chunk-ZJOLPBJJ.js.map +1 -0
- package/dist/cli/audit-trail-export.cjs +1193 -0
- package/dist/cli/audit-trail-export.cjs.map +1 -0
- package/dist/cli/audit-trail-export.d.cts +1 -0
- package/dist/cli/audit-trail-export.d.ts +1 -0
- package/dist/cli/audit-trail-export.js +24 -0
- package/dist/cli/audit-trail-export.js.map +1 -0
- package/dist/cli/catalog-check.cjs +2687 -0
- package/dist/cli/catalog-check.cjs.map +1 -0
- package/dist/cli/catalog-check.d.cts +1 -0
- package/dist/cli/catalog-check.d.ts +1 -0
- package/dist/cli/catalog-check.js +26 -0
- package/dist/cli/catalog-check.js.map +1 -0
- package/dist/cli/probemesh-init.cjs +1049 -0
- package/dist/cli/probemesh-init.cjs.map +1 -0
- package/dist/cli/probemesh-init.d.cts +1 -0
- package/dist/cli/probemesh-init.d.ts +1 -0
- package/dist/cli/probemesh-init.js +22 -0
- package/dist/cli/probemesh-init.js.map +1 -0
- package/dist/cli/provider-conformance.cjs +6180 -0
- package/dist/cli/provider-conformance.cjs.map +1 -0
- package/dist/cli/provider-conformance.d.cts +1 -0
- package/dist/cli/provider-conformance.d.ts +1 -0
- package/dist/cli/provider-conformance.js +29 -0
- package/dist/cli/provider-conformance.js.map +1 -0
- package/dist/cli/provider-dossier-check.cjs +2978 -0
- package/dist/cli/provider-dossier-check.cjs.map +1 -0
- package/dist/cli/provider-dossier-check.d.cts +1 -0
- package/dist/cli/provider-dossier-check.d.ts +1 -0
- package/dist/cli/provider-dossier-check.js +27 -0
- package/dist/cli/provider-dossier-check.js.map +1 -0
- package/dist/cli/provider-dossier.cjs +1753 -0
- package/dist/cli/provider-dossier.cjs.map +1 -0
- package/dist/cli/provider-dossier.d.cts +1 -0
- package/dist/cli/provider-dossier.d.ts +1 -0
- package/dist/cli/provider-dossier.js +26 -0
- package/dist/cli/provider-dossier.js.map +1 -0
- package/dist/cli/x402-accept.cjs +6009 -0
- package/dist/cli/x402-accept.cjs.map +1 -0
- package/dist/cli/x402-accept.d.cts +1 -0
- package/dist/cli/x402-accept.d.ts +1 -0
- package/dist/cli/x402-accept.js +28 -0
- package/dist/cli/x402-accept.js.map +1 -0
- package/dist/index.cjs +13671 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2026 -0
- package/dist/index.d.ts +2026 -0
- package/dist/index.js +2560 -0
- package/dist/index.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/adapters/priceLookup.ts","../src/client.ts","../src/paymentOptions.ts","../src/demo/mockPaymentProtocol.ts","../src/providerKit/manifest.ts","../src/providerKit/adapter.ts","../src/demo/paidPriceLookupProvider.ts","../src/hostedRouter.ts","../src/callAuditArtifact.ts","../src/protocols/x402Redaction.ts","../src/providerCatalogArtifact.ts","../src/providerCatalog.ts","../src/providerCatalogPolicyBundle.ts","../src/providerCatalogPolicy.ts","../src/auditTrailBundle.ts","../src/cli/auditTrailExportCli.ts","../src/cli/configLoader.ts","../src/cli/providerCatalogPolicyCli.ts","../src/cli/providerConformanceCli.ts","../src/providerConformanceArtifact.ts","../src/schemaValidation.ts","../src/providerConformance.ts","../src/cli/providerDossierCheckCli.ts","../src/providerOnboardingDossier.ts","../src/providerOnboardingDossierImport.ts","../src/cli/providerOnboardingDossierCli.ts","../src/cli/probemeshInitCli.ts","../src/integrationTemplates.ts","../src/protocols/apiKeyProtocol.ts","../src/protocols/x402Evm.ts","../src/protocols/x402Protocol.ts","../src/protocols/x402Acceptance.ts","../src/cli/x402AcceptanceCli.ts","../src/protocols/x402SandboxProtocol.ts","../src/receipts.ts"],"sourcesContent":["export { createPriceLookupAdapter } from \"./adapters/priceLookup\";\nexport { createProbeMesh } from \"./client\";\nexport { createMockPaymentProtocol } from \"./demo/mockPaymentProtocol\";\nexport { createPaidPriceLookupProvider } from \"./demo/paidPriceLookupProvider\";\nexport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nexport { createHostedRouter, startHostedRouter } from \"./hostedRouter\";\nexport {\n PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION,\n assertProbeMeshAuditTrailBundle,\n createProbeMeshAuditTrailBundle,\n createProbeMeshAuditTrailCollector,\n formatProbeMeshAuditTrailBundle,\n summarizeProbeMeshAuditTrailBundle,\n validateProbeMeshAuditTrailBundle,\n} from \"./auditTrailBundle\";\nexport {\n PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION,\n assertProbeMeshCallAuditArtifact,\n createProbeMeshCallAuditArtifact,\n formatProbeMeshCallAuditArtifact,\n validateProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\nexport {\n assertProviderManifest,\n validateProviderManifest,\n} from \"./providerKit/manifest\";\nexport {\n PROVIDER_CATALOG_SCHEMA_VERSION,\n assertProviderCatalog,\n createProviderCatalog,\n findProviderCatalogMatches,\n parseProviderCatalogArtifactJson,\n summarizeProviderCatalog,\n validateProviderCatalog,\n} from \"./providerCatalog\";\nexport {\n createProviderCatalogPolicyReport,\n evaluateProviderCatalogPolicy,\n formatProviderCatalogPolicyReport,\n} from \"./providerCatalogPolicy\";\nexport {\n PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION,\n assertProviderCatalogPolicyBundle,\n createProviderCatalogPolicyBundle,\n formatProviderCatalogPolicyBundle,\n validateProviderCatalogPolicyBundle,\n verifyProviderCatalogPolicyBundleRuntime,\n} from \"./providerCatalogPolicyBundle\";\nexport { runProbeMeshAuditTrailExportCli } from \"./cli/auditTrailExportCli\";\nexport { runProviderCatalogPolicyCli } from \"./cli/providerCatalogPolicyCli\";\nexport { runProviderConformanceCli } from \"./cli/providerConformanceCli\";\nexport { runProviderDossierCheckCli } from \"./cli/providerDossierCheckCli\";\nexport { runProviderOnboardingDossierCli } from \"./cli/providerOnboardingDossierCli\";\nexport { runProbeMeshInitCli } from \"./cli/probemeshInitCli\";\nexport {\n PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION,\n assertProviderCatalogArtifact,\n createProviderCatalogArtifact,\n formatProviderCatalogArtifact,\n validateProviderCatalogArtifact,\n} from \"./providerCatalogArtifact\";\nexport { createAdapterFromManifest } from \"./providerKit/adapter\";\nexport { createApiKeyProtocol } from \"./protocols/apiKeyProtocol\";\nexport {\n resolveX402EvmTestnetConfig,\n createX402EvmSigner,\n createX402HttpFacilitator,\n} from \"./protocols/x402Evm\";\nexport {\n createX402Protocol,\n createX402LocalFacilitator,\n createX402LocalSigner,\n} from \"./protocols/x402Protocol\";\nexport {\n createX402ProviderAcceptanceReport,\n evaluateX402ProviderAcceptanceGate,\n formatX402ProviderAcceptanceReport,\n runX402ProviderAcceptance,\n summarizeX402AcceptanceResult,\n} from \"./protocols/x402Acceptance\";\nexport { runX402ProviderAcceptanceCli } from \"./cli/x402AcceptanceCli\";\nexport { redactX402Secrets } from \"./protocols/x402Redaction\";\nexport { createX402SandboxProtocol } from \"./protocols/x402SandboxProtocol\";\nexport {\n findReceiptRef,\n getReceiptRefs,\n hasReceipt,\n summarizeReceipts,\n} from \"./receipts\";\nexport {\n getProviderPaymentOptions,\n mergePaymentPreferences,\n resolveProviderPaymentOption,\n validatePaymentStrategy,\n} from \"./paymentOptions\";\nexport {\n getProbeMeshIntegrationTemplate,\n listProbeMeshIntegrationTemplates,\n renderProbeMeshIntegrationTemplate,\n} from \"./integrationTemplates\";\nexport {\n createProviderConformanceReport,\n formatProviderConformanceReport,\n runProviderConformance,\n} from \"./providerConformance\";\nexport {\n PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION,\n assertProviderConformanceArtifact,\n createProviderConformanceArtifact,\n formatProviderConformanceArtifact,\n validateProviderConformanceArtifact,\n} from \"./providerConformanceArtifact\";\nexport {\n PROVIDER_ONBOARDING_DOSSIER_SCHEMA_VERSION,\n assertProviderOnboardingDossier,\n createProviderOnboardingDossier,\n formatProviderOnboardingDossier,\n validateProviderOnboardingDossier,\n} from \"./providerOnboardingDossier\";\nexport {\n createHostedCatalogPolicyFromOnboardingDossiers,\n createProviderCatalogFromOnboardingDossiers,\n createProviderOnboardingDossierImportReport,\n evaluateProviderOnboardingDossiers,\n formatProviderOnboardingDossierImportReport,\n parseProviderOnboardingDossierJson,\n} from \"./providerOnboardingDossierImport\";\nexport {\n assertJsonSchemaLikeValue,\n validateJsonSchemaLikeValue,\n} from \"./schemaValidation\";\nexport type {\n ProbeMeshAuditTrailBundle,\n ProbeMeshAuditTrailBundleFormat,\n ProbeMeshAuditTrailBundleHashes,\n ProbeMeshAuditTrailBundleOptions,\n ProbeMeshAuditTrailBundleStatus,\n ProbeMeshAuditTrailBundleSummary,\n ProbeMeshAuditTrailBundleValidationError,\n ProbeMeshAuditTrailBundleValidationResult,\n ProbeMeshAuditTrailCollector,\n} from \"./auditTrailBundle\";\nexport type {\n ProbeMeshCallAuditArtifact,\n ProbeMeshCallAuditArtifactCallSummary,\n ProbeMeshCallAuditArtifactEvidence,\n ProbeMeshCallAuditArtifactFormat,\n ProbeMeshCallAuditArtifactHashes,\n ProbeMeshCallAuditArtifactOptions,\n ProbeMeshCallAuditArtifactReceiptSummary,\n ProbeMeshCallAuditArtifactRequestProof,\n ProbeMeshCallAuditArtifactStatus,\n ProbeMeshCallAuditArtifactTimelineEvent,\n ProbeMeshCallAuditArtifactTimelineSummary,\n ProbeMeshCallAuditArtifactValidationError,\n ProbeMeshCallAuditArtifactValidationResult,\n} from \"./callAuditArtifact\";\nexport type {\n MockPaymentProtocolOptions,\n} from \"./demo/mockPaymentProtocol\";\nexport type {\n PaidPriceLookupData,\n PaidPriceLookupFailureMode,\n PaidPriceLookupProviderOptions,\n} from \"./demo/paidPriceLookupProvider\";\nexport type {\n CallStatus,\n Cost,\n DeliveryStatus,\n PaymentStatus,\n ProbeMeshAttemptMetadata,\n ProviderMetadata,\n ProviderMode,\n ProviderPreferences,\n ProbeMeshAdapter,\n ProbeMeshAdapterCallResult,\n ProbeMeshAdapterContext,\n ProbeMeshCallTimeline,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshClient,\n ProbeMeshClientOptions,\n ProbeMeshConstraints,\n ProbeMeshHostedClientOptions,\n ProbeMeshLocalClientOptions,\n ProbeMeshErrorCode,\n ProbeMeshPricing,\n ProbeMeshPaymentPreferences,\n ProbeMeshPaymentSelection,\n ProbeMeshPaymentStrategy,\n ProbeMeshPaymentStrategyMode,\n ProbeMeshProviderHealthStatus,\n ProbeMeshProviderRouteAttempt,\n ProbeMeshProviderRouteAttemptStatus,\n ProbeMeshRetryRequest,\n ProbeMeshRetrySafety,\n ProbeMeshRetrySafetyReason,\n ProbeMeshRouteDecisionReason,\n ProbeMeshRouteExplanation,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEvent,\n ProbeMeshTimelineEventType,\n ProviderCatalogPolicyBundleAttestation,\n ProviderPaymentOption,\n ReceiptRef,\n ReceiptStatus,\n ReceiptType,\n SettlementStatus,\n} from \"./types\";\nexport type {\n HostedAuditArtifactOptions,\n HostedProviderHealthOptions,\n HostedRouter,\n HostedRouterOptions,\n HostedTelemetryEvent,\n HostedTelemetryEventType,\n StartedHostedRouter,\n StartHostedRouterOptions,\n} from \"./hostedRouter\";\nexport type {\n ProviderManifestCapabilityHandler,\n ProviderManifestHandlers,\n} from \"./providerKit/adapter\";\nexport type {\n ApiKeyPlacement,\n ApiKeyProtocolOptions,\n ApiKeyResolver,\n} from \"./protocols/apiKeyProtocol\";\nexport type {\n ProbeMeshAuditTrailExportCliBundle,\n ProbeMeshAuditTrailExportCliConfig,\n ProbeMeshAuditTrailExportCliConfigContext,\n ProbeMeshAuditTrailExportCliConfigExport,\n ProbeMeshAuditTrailExportCliConfigFactory,\n ProbeMeshAuditTrailExportCliOptions,\n ProbeMeshAuditTrailExportCliOutputs,\n ProbeMeshAuditTrailExportCliResult,\n ProbeMeshAuditTrailExportCliSkip,\n} from \"./cli/auditTrailExportCli\";\nexport type {\n X402ProviderAcceptanceCliCatalog,\n X402ProviderAcceptanceCliConfig,\n X402ProviderAcceptanceCliConfigExport,\n X402ProviderAcceptanceCliConfigContext,\n X402ProviderAcceptanceCliConfigFactory,\n X402ProviderAcceptanceCliOutputs,\n X402ProviderAcceptanceCliOptions,\n X402ProviderAcceptanceCliResult,\n X402ProviderAcceptanceCliSkip,\n} from \"./cli/x402AcceptanceCli\";\nexport type {\n ProviderCatalogPolicyCliBundle,\n ProviderCatalogPolicyCliConfig,\n ProviderCatalogPolicyCliConfigContext,\n ProviderCatalogPolicyCliConfigExport,\n ProviderCatalogPolicyCliConfigFactory,\n ProviderCatalogPolicyCliOptions,\n ProviderCatalogPolicyCliOutputs,\n ProviderCatalogPolicyCliResult,\n ProviderCatalogPolicyCliSkip,\n} from \"./cli/providerCatalogPolicyCli\";\nexport type {\n ProviderDossierCheckCliCatalog,\n ProviderDossierCheckCliConfig,\n ProviderDossierCheckCliConfigContext,\n ProviderDossierCheckCliConfigExport,\n ProviderDossierCheckCliConfigFactory,\n ProviderDossierCheckCliOptions,\n ProviderDossierCheckCliOutputs,\n ProviderDossierCheckCliResult,\n ProviderDossierCheckCliSkip,\n} from \"./cli/providerDossierCheckCli\";\nexport type {\n ProviderConformanceCliArtifact,\n ProviderConformanceCliConfig,\n ProviderConformanceCliConfigContext,\n ProviderConformanceCliConfigExport,\n ProviderConformanceCliConfigFactory,\n ProviderConformanceCliOptions,\n ProviderConformanceCliOutputs,\n ProviderConformanceCliResult,\n ProviderConformanceCliSkip,\n} from \"./cli/providerConformanceCli\";\nexport type {\n ProviderOnboardingDossierCliConfig,\n ProviderOnboardingDossierCliConfigContext,\n ProviderOnboardingDossierCliConfigExport,\n ProviderOnboardingDossierCliConfigFactory,\n ProviderOnboardingDossierCliDossier,\n ProviderOnboardingDossierCliOptions,\n ProviderOnboardingDossierCliOutputs,\n ProviderOnboardingDossierCliResult,\n ProviderOnboardingDossierCliSkip,\n} from \"./cli/providerOnboardingDossierCli\";\nexport type {\n ProbeMeshInitCliOptions,\n ProbeMeshInitCliResult,\n} from \"./cli/probemeshInitCli\";\nexport type {\n X402ProviderAcceptanceCheck,\n X402ProviderAcceptanceError,\n X402ProviderAcceptanceGate,\n X402ProviderAcceptanceGateOptions,\n X402ProviderAcceptanceGateStatus,\n X402ProviderAcceptanceOptions,\n X402ProviderAcceptanceReport,\n X402ProviderAcceptanceReportFormat,\n X402ProviderAcceptanceReportOptions,\n X402ProviderAcceptanceResult,\n X402ProviderAcceptanceStatus,\n X402ProviderAcceptanceSummary,\n} from \"./protocols/x402Acceptance\";\nexport type {\n X402EvmAddress,\n X402EvmClientSigner,\n X402EvmNetworkConfig,\n X402EvmPrivateKey,\n X402EvmSignerMetadata,\n X402EvmSignerOptions,\n X402EvmTestnetConfig,\n X402EvmTestnetConfigOptions,\n X402EvmTestnetConfigResult,\n X402EvmTestnetConfigSkip,\n X402EvmTestnetConfigSummary,\n X402EvmTestnetEnv,\n X402HttpFacilitatorAuthHeaderResolver,\n X402HttpFacilitatorAuthHeaders,\n X402HttpFacilitatorOptions,\n} from \"./protocols/x402Evm\";\nexport type {\n X402Facilitator,\n X402FacilitatorSettleInput,\n X402FacilitatorSettleResult,\n X402FacilitatorVerifyInput,\n X402FacilitatorVerifyResult,\n X402LocalFacilitatorOptions,\n X402LocalSignerOptions,\n X402PaymentPayload,\n X402PaymentRequired,\n X402PaymentRequiredConfig,\n X402PaymentRequiredResolver,\n X402PaymentRequiredResolverInput,\n X402PaymentRequirements,\n X402ProtocolOptions,\n X402ResourceInfo,\n X402SettlementResponse,\n X402Signer,\n X402SignerInput,\n X402SignerResult,\n X402VerifyResponse,\n} from \"./protocols/x402Protocol\";\nexport type { X402SecretRedactionOptions } from \"./protocols/x402Redaction\";\nexport type {\n X402SandboxPaymentPayload,\n X402SandboxPaymentRequirement,\n X402SandboxProtocolOptions,\n X402SandboxSettlementResponse,\n} from \"./protocols/x402SandboxProtocol\";\nexport type {\n CreateAdapterFromManifestOptions,\n ProviderManifestHandlerContext,\n ProviderProtocolAdapter,\n ProviderProtocolExecution,\n ProviderProtocolPreparation,\n ProviderProtocolPrepareInput,\n ProviderProtocolSettlement,\n ProviderProtocolSettleInput,\n} from \"./providerKit/protocol\";\nexport type {\n JsonSchemaLike,\n ProviderLimits,\n ProviderManifest,\n ProviderManifestValidationError,\n ProviderManifestValidationResult,\n ProviderProtocolMode,\n ProviderReceiptSupport,\n} from \"./providerKit/types\";\nexport type {\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderCatalogMatch,\n ProviderCatalogOptions,\n ProviderCatalogQuery,\n ProviderCatalogSummary,\n ProviderCatalogValidationError,\n ProviderCatalogValidationResult,\n} from \"./providerCatalog\";\nexport type {\n ProviderCatalogPolicyAdapterInventory,\n ProviderCatalogPolicyAdapterInventoryEntry,\n ProviderCatalogPolicyCheck,\n ProviderCatalogPolicyCheckStatus,\n ProviderCatalogPolicyEvaluationOptions,\n ProviderCatalogPolicyEvaluationResult,\n ProviderCatalogPolicyEvaluationStatus,\n ProviderCatalogPolicyExpectedQuery,\n ProviderCatalogPolicyMissingAdapterMatch,\n ProviderCatalogPolicyOptions,\n ProviderCatalogPolicyQueryResult,\n ProviderCatalogPolicyReport,\n ProviderCatalogPolicyReportFormat,\n ProviderCatalogPolicyReportOptions,\n ProviderCatalogPolicySkippedProvider,\n} from \"./providerCatalogPolicy\";\nexport type {\n ProviderCatalogPolicyBundle,\n ProviderCatalogPolicyBundleFormat,\n ProviderCatalogPolicyBundleHashes,\n ProviderCatalogPolicyBundleOptions,\n ProviderCatalogPolicyBundleQueryCoverage,\n ProviderCatalogPolicyBundleRuntimeVerificationOptions,\n ProviderCatalogPolicyBundleRuntimeVerificationResult,\n ProviderCatalogPolicyBundleStatus,\n ProviderCatalogPolicyBundleValidationError,\n ProviderCatalogPolicyBundleValidationResult,\n} from \"./providerCatalogPolicyBundle\";\nexport type {\n ProviderCatalogArtifact,\n ProviderCatalogArtifactFormat,\n ProviderCatalogArtifactOptions,\n ProviderCatalogArtifactStatus,\n ProviderCatalogArtifactValidationError,\n ProviderCatalogArtifactValidationResult,\n} from \"./providerCatalogArtifact\";\nexport type {\n ProviderConformanceCheck,\n ProviderConformanceError,\n ProviderConformanceOptions,\n ProviderConformanceReport,\n ProviderConformanceReportFormat,\n ProviderConformanceReportOptions,\n ProviderConformanceResult,\n ProviderConformanceSchemaValidationMode,\n ProviderConformanceStatus,\n ProviderConformanceSummary,\n} from \"./providerConformance\";\nexport type {\n ProviderConformanceArtifact,\n ProviderConformanceArtifactFormat,\n ProviderConformanceArtifactHashes,\n ProviderConformanceArtifactManifestSummary,\n ProviderConformanceArtifactOptions,\n ProviderConformanceArtifactReceiptSummary,\n ProviderConformanceArtifactStatus,\n ProviderConformanceArtifactValidationError,\n ProviderConformanceArtifactValidationResult,\n} from \"./providerConformanceArtifact\";\nexport type {\n ProviderOnboardingDossier,\n ProviderOnboardingDossierEvidence,\n ProviderOnboardingDossierFormat,\n ProviderOnboardingDossierHashes,\n ProviderOnboardingDossierOptions,\n ProviderOnboardingDossierProviderSummary,\n ProviderOnboardingDossierReadiness,\n ProviderOnboardingDossierReceiptSummary,\n ProviderOnboardingDossierStatus,\n ProviderOnboardingDossierValidationError,\n ProviderOnboardingDossierValidationResult,\n} from \"./providerOnboardingDossier\";\nexport type {\n HostedCatalogPolicyFromOnboardingDossiersOptions,\n HostedCatalogPolicyFromOnboardingDossiersResult,\n ProviderCatalogFromOnboardingDossiersOptions,\n ProviderOnboardingDossierEvaluationOptions,\n ProviderOnboardingDossierEvaluationResult,\n ProviderOnboardingDossierImportCheck,\n ProviderOnboardingDossierImportCheckStatus,\n ProviderOnboardingDossierImportDossierResult,\n ProviderOnboardingDossierImportReport,\n ProviderOnboardingDossierImportReportFormat,\n ProviderOnboardingDossierImportReportOptions,\n ProviderOnboardingDossierImportStatus,\n ProviderOnboardingDossierPolicyEvaluationOptions,\n} from \"./providerOnboardingDossierImport\";\nexport type {\n ReceiptSource,\n ReceiptSummary,\n} from \"./receipts\";\nexport type {\n ProbeMeshIntegrationTemplate,\n ProbeMeshIntegrationTemplateFile,\n ProbeMeshIntegrationTemplateId,\n ProbeMeshIntegrationTemplateRenderOptions,\n ProbeMeshIntegrationTemplateRenderResult,\n} from \"./integrationTemplates\";\nexport type {\n PriceLookupData,\n PriceLookupInput,\n PriceLookupAdapterOptions,\n} from \"./adapters/priceLookup\";\nexport type {\n JsonSchemaLikeValidationError,\n JsonSchemaLikeValidationOptions,\n JsonSchemaLikeValidationResult,\n} from \"./schemaValidation\";\n","import type {\n CallStatus,\n ProbeMeshAttemptMetadata,\n ProbeMeshCallTimeline,\n ProbeMeshCallSafety,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteMetadata,\n ReceiptRef,\n} from \"./types\";\n\nexport interface ProbeMeshErrorOptions {\n code: ProbeMeshErrorCode;\n message: string;\n capability?: string;\n provider?: string;\n callId?: string;\n receiptRefs?: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n attempt?: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n cause?: unknown;\n}\n\nexport class ProbeMeshError extends Error {\n readonly code: ProbeMeshErrorCode;\n readonly status: CallStatus = \"failed\";\n readonly capability?: string;\n readonly provider?: string;\n readonly callId?: string;\n readonly receiptRefs?: ReceiptRef[];\n readonly safety?: ProbeMeshCallSafety;\n readonly timeline?: ProbeMeshCallTimeline;\n readonly retrySafety?: ProbeMeshRetrySafety;\n readonly attempt?: ProbeMeshAttemptMetadata;\n readonly route?: ProbeMeshRouteMetadata;\n readonly cause?: unknown;\n\n constructor(options: ProbeMeshErrorOptions) {\n super(options.message);\n this.name = \"ProbeMeshError\";\n this.code = options.code;\n this.capability = options.capability;\n this.provider = options.provider;\n this.callId = options.callId;\n this.receiptRefs = options.receiptRefs;\n this.safety = options.safety;\n this.timeline = options.timeline;\n this.retrySafety = options.retrySafety;\n this.attempt = options.attempt;\n this.route = options.route;\n this.cause = options.cause;\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n capability: this.capability,\n provider: this.provider,\n callId: this.callId,\n receiptRefs: this.receiptRefs,\n safety: this.safety,\n timeline: this.timeline,\n retrySafety: this.retrySafety,\n attempt: this.attempt,\n route: this.route,\n };\n }\n}\n\nexport function isProbeMeshError(error: unknown): error is ProbeMeshError {\n return error instanceof ProbeMeshError;\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type { ProbeMeshAdapter } from \"../types\";\n\nexport interface PriceLookupInput {\n symbol: string;\n currency?: string;\n}\n\nexport interface PriceLookupData {\n symbol: string;\n currency: string;\n price: number;\n asOf: string;\n source: string;\n}\n\nexport interface PriceLookupAdapterOptions {\n id?: string;\n displayName?: string;\n prices?: Record<string, number>;\n}\n\nconst DEFAULT_PRICES_USD: Record<string, number> = {\n BTC: 64000.25,\n ETH: 3200.12,\n SOL: 145.33,\n};\n\nexport function createPriceLookupAdapter(\n options: PriceLookupAdapterOptions = {},\n): ProbeMeshAdapter<PriceLookupInput, PriceLookupData> {\n const id = options.id ?? \"demo-price-provider\";\n const displayName = options.displayName ?? \"Demo Price Provider\";\n const prices = options.prices ?? DEFAULT_PRICES_USD;\n\n return {\n id,\n displayName,\n mode: \"local\",\n capabilities: [\"price-lookup\"],\n pricing: {\n unit: \"call\",\n amountUsd: 0.01,\n currency: \"USD\",\n },\n call(request, context) {\n const input = parsePriceLookupInput(request.input, request.capability, id);\n const symbol = input.symbol.toUpperCase();\n const currency = (input.currency ?? \"USD\").toUpperCase();\n\n if (currency !== \"USD\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: `Demo price adapter only supports USD prices, received \"${currency}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n const price = prices[symbol];\n\n if (price === undefined) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Demo price adapter has no mock price for \"${symbol}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n return {\n data: {\n symbol,\n currency,\n price,\n asOf: context.startedAt.toISOString(),\n source: id,\n },\n cost: {\n amountUsd: 0.01,\n currency: \"USD\",\n unit: \"call\",\n },\n receiptRefs: [\n {\n type: \"provider_delivery\",\n provider: id,\n status: \"recorded\",\n ref: `${context.callId}:provider_delivery`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n };\n },\n };\n}\n\nfunction parsePriceLookupInput(\n input: unknown,\n capability: string,\n provider: string,\n): PriceLookupInput {\n if (!input || typeof input !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input must be an object.\",\n capability,\n provider,\n });\n }\n\n const candidate = input as Partial<PriceLookupInput>;\n\n if (!candidate.symbol || typeof candidate.symbol !== \"string\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input requires a string symbol.\",\n capability,\n provider,\n });\n }\n\n if (\n candidate.currency !== undefined &&\n typeof candidate.currency !== \"string\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup currency must be a string when provided.\",\n capability,\n provider,\n });\n }\n\n return {\n symbol: candidate.symbol,\n currency: candidate.currency,\n };\n}\n\n","import { randomUUID } from \"node:crypto\";\n\nimport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nimport {\n paymentSelectionToCost,\n resolveProviderPaymentOption,\n validatePaymentPreferences,\n validatePaymentStrategy,\n} from \"./paymentOptions\";\nimport type {\n Cost,\n ProbeMeshAttemptMetadata,\n ProbeMeshAdapter,\n ProbeMeshAdapterCallResult,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshCallTimeline,\n ProbeMeshClient,\n ProbeMeshClientOptions,\n ProbeMeshConstraints,\n ProbeMeshErrorCode,\n ProbeMeshHostedClientOptions,\n ProbeMeshPricing,\n ProbeMeshRetryRequest,\n ProbeMeshRetrySafety,\n ProbeMeshRouteMetadata,\n ProbeMeshPaymentSelection,\n ReceiptRef,\n} from \"./types\";\n\nexport function createProbeMesh(options: ProbeMeshClientOptions): ProbeMeshClient {\n validateClientOptions(options);\n\n if (options.hosted) {\n return createHostedProbeMeshClient(options.hosted);\n }\n\n const adapters = [...options.adapters];\n\n return {\n async call<Input = unknown, Data = unknown>(\n request: ProbeMeshCallRequest<Input>,\n ): Promise<ProbeMeshCallResponse<Data>> {\n validateCallRequest(request);\n\n const callId = request.idempotencyKey ?? generateCallId();\n const startedAt = new Date();\n const startTimeMs = Date.now();\n const adapterSelection = selectAdapter(adapters, request);\n const adapter = adapterSelection?.adapter;\n const paymentSelection = adapterSelection?.paymentSelection;\n const abortController = new AbortController();\n\n if (!adapter) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `No adapter is available for capability \"${request.capability}\".`,\n capability: request.capability,\n callId,\n });\n }\n\n enforceBudget(\n request.constraints,\n adapter,\n request.capability,\n callId,\n paymentSelection,\n );\n\n try {\n const result = await withLatencyLimit(\n adapter.call(\n {\n ...request,\n callId,\n },\n {\n callId,\n startedAt,\n signal: abortController.signal,\n constraints: request.constraints,\n providerPreferences: request.providerPreferences,\n paymentPreferences: request.paymentPreferences,\n paymentStrategy: request.paymentStrategy,\n paymentSelection,\n },\n ),\n request,\n adapter,\n callId,\n abortController,\n );\n\n const normalizedResult = validateAdapterResult(\n result,\n adapter,\n request.capability,\n callId,\n );\n const receiptRefs = normalizedResult.receiptRefs ?? [];\n\n if (request.constraints?.requireReceipt && receiptRefs.length === 0) {\n throw new ProbeMeshError({\n code: \"receipt_missing\",\n message: `Adapter \"${adapter.id}\" did not return a receipt for capability \"${request.capability}\".`,\n capability: request.capability,\n provider: adapter.id,\n callId,\n });\n }\n\n return {\n callId,\n capability: request.capability,\n data: normalizedResult.data as Data,\n provider: {\n id: normalizedResult.provider?.id ?? adapter.id,\n mode: normalizedResult.provider?.mode ?? adapter.mode ?? \"local\",\n displayName:\n normalizedResult.provider?.displayName ?? adapter.displayName,\n },\n cost:\n normalizedResult.cost ??\n paymentSelectionToCost(paymentSelection) ??\n pricingToCost(getPricing(adapter, request.capability)),\n latencyMs: Date.now() - startTimeMs,\n receiptRefs,\n safety: normalizedResult.safety,\n status: \"completed\",\n };\n } catch (error) {\n if (isProbeMeshError(error)) {\n throw error;\n }\n\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Adapter \"${adapter.id}\" failed while handling capability \"${request.capability}\".`,\n capability: request.capability,\n provider: adapter.id,\n callId,\n cause: error,\n });\n }\n },\n async retry() {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh retry is only available for hosted clients.\",\n });\n },\n };\n}\n\nfunction createHostedProbeMeshClient(\n options: ProbeMeshHostedClientOptions,\n): ProbeMeshClient {\n const endpoint = new URL(\"/v1/calls\", ensureTrailingSlash(options.baseUrl));\n\n return {\n async call<Input = unknown, Data = unknown>(\n request: ProbeMeshCallRequest<Input>,\n ): Promise<ProbeMeshCallResponse<Data>> {\n validateCallRequest(request);\n\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(options.apiKey\n ? {\n authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n },\n body: JSON.stringify(request),\n });\n const body = await readHostedJson(response);\n\n if (!response.ok) {\n throw hostedErrorToProbeMeshError(body, response.status);\n }\n\n return validateHostedResponse(body);\n },\n async retry<Data = unknown>(\n request: ProbeMeshRetryRequest,\n ): Promise<ProbeMeshCallResponse<Data>> {\n validateRetryRequest(request);\n\n const retryEndpoint = new URL(\n `/v1/calls/${encodeURIComponent(request.callId)}/retry`,\n ensureTrailingSlash(options.baseUrl),\n );\n const response = await fetch(retryEndpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(options.apiKey\n ? {\n authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n },\n body: JSON.stringify({\n idempotencyKey: request.idempotencyKey,\n }),\n });\n const body = await readHostedJson(response);\n\n if (!response.ok) {\n throw hostedErrorToProbeMeshError(body, response.status);\n }\n\n return validateHostedResponse(body);\n },\n };\n}\n\nfunction validateClientOptions(\n options: ProbeMeshClientOptions,\n): asserts options is\n | (ProbeMeshClientOptions & { adapters: ProbeMeshAdapter[]; hosted?: never })\n | (ProbeMeshClientOptions & { adapters?: never; hosted: ProbeMeshHostedClientOptions }) {\n if (!options || typeof options !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh client options must be an object.\",\n });\n }\n\n const hasAdapters = options.adapters !== undefined;\n const hasHosted = options.hosted !== undefined;\n\n if (hasAdapters && hasHosted) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Use either adapters or hosted options, not both.\",\n });\n }\n\n if (!hasAdapters && !hasHosted) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh client requires adapters or hosted options.\",\n });\n }\n\n if (hasAdapters && !Array.isArray(options.adapters)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"adapters must be an array when provided.\",\n });\n }\n\n if (hasHosted) {\n validateHostedOptions(options.hosted);\n }\n}\n\nfunction validateHostedOptions(\n hosted: ProbeMeshHostedClientOptions | undefined,\n): asserts hosted is ProbeMeshHostedClientOptions {\n if (!hosted || typeof hosted !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"hosted options must be an object.\",\n });\n }\n\n if (typeof hosted.baseUrl !== \"string\" || hosted.baseUrl.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"hosted.baseUrl must be a non-empty string.\",\n });\n }\n\n if (hosted.apiKey !== undefined && typeof hosted.apiKey !== \"string\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"hosted.apiKey must be a string when provided.\",\n });\n }\n}\n\nasync function readHostedJson(response: Response) {\n const text = await response.text();\n\n if (text.length === 0) {\n return undefined;\n }\n\n try {\n return JSON.parse(text) as unknown;\n } catch (error) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: `Hosted router returned invalid JSON with status ${response.status}.`,\n cause: error,\n });\n }\n}\n\nfunction validateHostedResponse<Data = unknown>(\n body: unknown,\n): ProbeMeshCallResponse<Data> {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router response must be an object.\",\n });\n }\n\n const response = body as Partial<ProbeMeshCallResponse<Data>>;\n\n if (\n typeof response.callId !== \"string\" ||\n typeof response.capability !== \"string\" ||\n !(\"data\" in response) ||\n !response.provider ||\n typeof response.provider !== \"object\" ||\n typeof response.latencyMs !== \"number\" ||\n !Array.isArray(response.receiptRefs) ||\n response.status !== \"completed\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router response does not match ProbeMesh call response shape.\",\n });\n }\n\n if (response.safety !== undefined) {\n validateHostedSafety(response.safety);\n }\n\n if (response.attempt !== undefined) {\n validateHostedAttempt(response.attempt);\n }\n\n if (response.route !== undefined) {\n validateHostedRoute(response.route);\n }\n\n return response as ProbeMeshCallResponse<Data>;\n}\n\nfunction hostedErrorToProbeMeshError(body: unknown, statusCode: number) {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n return new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Hosted router returned HTTP ${statusCode}.`,\n });\n }\n\n const error = body as {\n code?: string;\n message?: string;\n capability?: string;\n provider?: string;\n callId?: string;\n receiptRefs?: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n attempt?: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n };\n\n return new ProbeMeshError({\n code: normalizeHostedErrorCode(error.code),\n message: error.message ?? `Hosted router returned HTTP ${statusCode}.`,\n capability: error.capability,\n provider: error.provider,\n callId: error.callId,\n receiptRefs: validateHostedReceiptRefs(error.receiptRefs),\n safety: validateHostedSafety(error.safety),\n timeline: validateHostedTimeline(error.timeline),\n retrySafety: validateHostedRetrySafety(error.retrySafety),\n attempt: validateHostedAttempt(error.attempt),\n route: validateHostedRoute(error.route),\n });\n}\n\nfunction normalizeHostedErrorCode(code: string | undefined): ProbeMeshErrorCode {\n const knownCodes = new Set<ProbeMeshErrorCode>([\n \"unauthorized\",\n \"invalid_request\",\n \"budget_exceeded\",\n \"provider_unavailable\",\n \"retry_not_available\",\n \"payment_failed\",\n \"receipt_missing\",\n \"timeout_after_payment\",\n \"charged_but_no_result\",\n \"provider_timeout\",\n \"invalid_provider_response\",\n ]);\n\n return code && knownCodes.has(code as ProbeMeshErrorCode)\n ? (code as ProbeMeshErrorCode)\n : \"provider_unavailable\";\n}\n\nfunction ensureTrailingSlash(value: string) {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nfunction validateAdapterResult(\n result: unknown,\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n): ProbeMeshAdapterCallResult {\n if (!result || typeof result !== \"object\") {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter result must be an object.\",\n );\n }\n\n const candidate = result as Partial<ProbeMeshAdapterCallResult>;\n\n if (!(\"data\" in candidate)) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter result requires data.\",\n );\n }\n\n if (candidate.cost !== undefined) {\n validateCost(candidate.cost, adapter, capability, callId);\n }\n\n if (candidate.receiptRefs !== undefined) {\n validateReceiptRefs(candidate.receiptRefs, adapter, capability, callId);\n }\n\n if (candidate.safety !== undefined) {\n validateAdapterSafety(candidate.safety, adapter, capability, callId);\n }\n\n if (\n candidate.provider !== undefined &&\n (!candidate.provider || typeof candidate.provider !== \"object\")\n ) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter provider metadata must be an object when provided.\",\n );\n }\n\n return {\n data: candidate.data,\n cost: candidate.cost,\n receiptRefs: candidate.receiptRefs,\n safety: candidate.safety,\n provider: candidate.provider,\n };\n}\n\nfunction validateCost(\n cost: Cost,\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n) {\n if (!cost || typeof cost !== \"object\") {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter cost must be an object when provided.\",\n );\n }\n\n if (!Number.isFinite(cost.amountUsd) || cost.amountUsd < 0) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter cost.amountUsd must be a non-negative number.\",\n );\n }\n}\n\nfunction validateAdapterSafety(\n safety: ProbeMeshCallSafety,\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n) {\n if (!isValidSafety(safety)) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter safety metadata must match ProbeMeshCallSafety.\",\n );\n }\n}\n\nfunction validateHostedSafety(\n safety: unknown,\n): ProbeMeshCallSafety | undefined {\n if (safety === undefined) {\n return undefined;\n }\n\n if (!isValidSafety(safety)) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router safety metadata does not match ProbeMeshCallSafety.\",\n });\n }\n\n return safety;\n}\n\nfunction validateHostedReceiptRefs(\n receiptRefs: unknown,\n): ReceiptRef[] | undefined {\n if (receiptRefs === undefined) {\n return undefined;\n }\n\n if (!isValidReceiptRefs(receiptRefs)) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router error receiptRefs do not match ReceiptRef[].\",\n });\n }\n\n return receiptRefs;\n}\n\nfunction validateHostedTimeline(\n timeline: unknown,\n): ProbeMeshCallTimeline | undefined {\n if (timeline === undefined) {\n return undefined;\n }\n\n if (\n !timeline ||\n typeof timeline !== \"object\" ||\n Array.isArray(timeline) ||\n typeof (timeline as Partial<ProbeMeshCallTimeline>).routeId !== \"string\" ||\n !Array.isArray((timeline as Partial<ProbeMeshCallTimeline>).events)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router timeline does not match ProbeMeshCallTimeline.\",\n });\n }\n\n return timeline as ProbeMeshCallTimeline;\n}\n\nfunction validateHostedRetrySafety(\n retrySafety: unknown,\n): ProbeMeshRetrySafety | undefined {\n if (retrySafety === undefined) {\n return undefined;\n }\n\n if (\n !retrySafety ||\n typeof retrySafety !== \"object\" ||\n Array.isArray(retrySafety) ||\n typeof (retrySafety as Partial<ProbeMeshRetrySafety>).retryable !==\n \"boolean\" ||\n typeof (retrySafety as Partial<ProbeMeshRetrySafety>).safeToAutoRetry !==\n \"boolean\" ||\n !isRetrySafetyReason(\n (retrySafety as Partial<ProbeMeshRetrySafety>).reason,\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router retrySafety does not match ProbeMeshRetrySafety.\",\n });\n }\n\n return retrySafety as ProbeMeshRetrySafety;\n}\n\nfunction validateHostedAttempt(\n attempt: unknown,\n): ProbeMeshAttemptMetadata | undefined {\n if (attempt === undefined) {\n return undefined;\n }\n\n if (!isValidAttempt(attempt)) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router attempt metadata does not match ProbeMeshAttemptMetadata.\",\n });\n }\n\n return attempt;\n}\n\nfunction validateHostedRoute(\n route: unknown,\n): ProbeMeshRouteMetadata | undefined {\n if (route === undefined) {\n return undefined;\n }\n\n if (\n !route ||\n typeof route !== \"object\" ||\n Array.isArray(route) ||\n typeof (route as Partial<ProbeMeshRouteMetadata>).routeId !== \"string\" ||\n typeof (route as Partial<ProbeMeshRouteMetadata>).mode !== \"string\" ||\n ((route as Partial<ProbeMeshRouteMetadata>).selectedProviderId !== undefined &&\n typeof (route as Partial<ProbeMeshRouteMetadata>).selectedProviderId !==\n \"string\") ||\n ((route as Partial<ProbeMeshRouteMetadata>).explanation !== undefined &&\n !isValidRouteExplanation(\n (route as Partial<ProbeMeshRouteMetadata>).explanation,\n ))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"Hosted router route metadata does not match ProbeMeshRouteMetadata.\",\n });\n }\n\n return route as ProbeMeshRouteMetadata;\n}\n\nfunction isValidRouteExplanation(explanation: unknown) {\n if (\n !explanation ||\n typeof explanation !== \"object\" ||\n Array.isArray(explanation)\n ) {\n return false;\n }\n\n const candidate = explanation as Partial<\n NonNullable<ProbeMeshRouteMetadata[\"explanation\"]>\n >;\n\n return (\n Array.isArray(candidate.consideredProviders) &&\n candidate.consideredProviders.every((provider) => typeof provider === \"string\") &&\n (candidate.selectedProviderId === undefined ||\n typeof candidate.selectedProviderId === \"string\") &&\n typeof candidate.fallbackUsed === \"boolean\" &&\n typeof candidate.fallbackCount === \"number\" &&\n typeof candidate.stopReason === \"string\" &&\n Array.isArray(candidate.attempts) &&\n candidate.attempts.every(\n (attempt) =>\n attempt &&\n typeof attempt === \"object\" &&\n !Array.isArray(attempt) &&\n typeof attempt.providerId === \"string\" &&\n typeof attempt.status === \"string\" &&\n typeof attempt.reason === \"string\",\n )\n );\n}\n\nfunction isValidAttempt(attempt: unknown): attempt is ProbeMeshAttemptMetadata {\n if (!attempt || typeof attempt !== \"object\" || Array.isArray(attempt)) {\n return false;\n }\n\n const candidate = attempt as Partial<ProbeMeshAttemptMetadata>;\n\n return (\n typeof candidate.originalCallId === \"string\" &&\n candidate.originalCallId.length > 0 &&\n typeof candidate.attemptId === \"string\" &&\n candidate.attemptId.length > 0 &&\n typeof candidate.attemptNumber === \"number\" &&\n Number.isInteger(candidate.attemptNumber) &&\n candidate.attemptNumber > 0 &&\n typeof candidate.isRetry === \"boolean\" &&\n (candidate.previousAttemptId === undefined ||\n typeof candidate.previousAttemptId === \"string\")\n );\n}\n\nfunction isValidSafety(safety: unknown): safety is ProbeMeshCallSafety {\n if (!safety || typeof safety !== \"object\" || Array.isArray(safety)) {\n return false;\n }\n\n const candidate = safety as Partial<ProbeMeshCallSafety>;\n\n return (\n (candidate.paymentAttemptId === undefined ||\n typeof candidate.paymentAttemptId === \"string\") &&\n isPaymentStatus(candidate.paymentStatus) &&\n isSettlementStatus(candidate.settlementStatus) &&\n isDeliveryStatus(candidate.deliveryStatus) &&\n typeof candidate.moneyMayHaveMoved === \"boolean\"\n );\n}\n\nfunction isValidReceiptRefs(receiptRefs: unknown): receiptRefs is ReceiptRef[] {\n return (\n Array.isArray(receiptRefs) &&\n receiptRefs.every(\n (receiptRef) =>\n receiptRef &&\n typeof receiptRef === \"object\" &&\n !Array.isArray(receiptRef) &&\n typeof receiptRef.type === \"string\" &&\n typeof receiptRef.provider === \"string\" &&\n typeof receiptRef.status === \"string\" &&\n typeof receiptRef.ref === \"string\" &&\n typeof receiptRef.timestamp === \"string\",\n )\n );\n}\n\nfunction isRetrySafetyReason(value: unknown) {\n return (\n value === \"completed\" ||\n value === \"not_retryable\" ||\n value === \"money_may_have_moved\" ||\n value === \"payment_failed_no_charge\" ||\n value === \"no_payment_attempted\" ||\n value === \"unknown_payment_state\"\n );\n}\n\nfunction isPaymentStatus(value: unknown) {\n return (\n value === \"not_attempted\" || value === \"authorized\" || value === \"failed\"\n );\n}\n\nfunction isSettlementStatus(value: unknown) {\n return (\n value === \"not_attempted\" || value === \"settled\" || value === \"failed\"\n );\n}\n\nfunction isDeliveryStatus(value: unknown) {\n return (\n value === \"not_attempted\" ||\n value === \"delivered\" ||\n value === \"failed\" ||\n value === \"missing\"\n );\n}\n\nfunction validateReceiptRefs(\n receiptRefs: ReceiptRef[],\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n) {\n if (!Array.isArray(receiptRefs)) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter receiptRefs must be an array when provided.\",\n );\n }\n\n for (const receiptRef of receiptRefs) {\n if (!receiptRef || typeof receiptRef !== \"object\") {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter receiptRefs entries must be objects.\",\n );\n }\n\n if (\n typeof receiptRef.type !== \"string\" ||\n typeof receiptRef.provider !== \"string\" ||\n typeof receiptRef.status !== \"string\" ||\n typeof receiptRef.ref !== \"string\" ||\n typeof receiptRef.timestamp !== \"string\"\n ) {\n throw invalidProviderResponse(\n adapter,\n capability,\n callId,\n \"Adapter receiptRefs entries require type, provider, status, ref, and timestamp strings.\",\n );\n }\n }\n}\n\nfunction invalidProviderResponse(\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n message: string,\n) {\n return new ProbeMeshError({\n code: \"invalid_provider_response\",\n message,\n capability,\n provider: adapter.id,\n callId,\n });\n}\n\nasync function withLatencyLimit<Data>(\n operation: Data | Promise<Data>,\n request: ProbeMeshCallRequest,\n adapter: ProbeMeshAdapter,\n callId: string,\n abortController: AbortController,\n): Promise<Data> {\n const maxLatencyMs = request.constraints?.maxLatencyMs;\n\n if (maxLatencyMs === undefined) {\n return operation;\n }\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n try {\n return await Promise.race([\n operation,\n new Promise<never>((_, reject) => {\n timeout = setTimeout(() => {\n abortController.abort();\n reject(\n new ProbeMeshError({\n code: \"provider_timeout\",\n message: `Adapter \"${adapter.id}\" exceeded maxLatencyMs ${maxLatencyMs} for capability \"${request.capability}\".`,\n capability: request.capability,\n provider: adapter.id,\n callId,\n }),\n );\n }, maxLatencyMs);\n }),\n ]);\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction validateCallRequest(\n request: unknown,\n): asserts request is ProbeMeshCallRequest<unknown> {\n if (!request || typeof request !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call request must be an object.\",\n });\n }\n\n const candidate = request as Partial<ProbeMeshCallRequest<unknown>>;\n\n if (\n typeof candidate.capability !== \"string\" ||\n candidate.capability.trim().length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call request requires a non-empty capability.\",\n });\n }\n\n if (!(\"input\" in candidate)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `ProbeMesh call request for capability \"${candidate.capability}\" requires input.`,\n capability: candidate.capability,\n });\n }\n\n validateConstraints(candidate.constraints, candidate.capability);\n validateProviderPreferences(\n candidate.providerPreferences,\n candidate.capability,\n );\n validatePaymentPreferences(candidate.paymentPreferences, candidate.capability);\n validatePaymentStrategy(candidate.paymentStrategy, candidate.capability);\n}\n\nfunction validateRetryRequest(\n request: unknown,\n): asserts request is ProbeMeshRetryRequest {\n if (!request || typeof request !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh retry request must be an object.\",\n });\n }\n\n const candidate = request as Partial<ProbeMeshRetryRequest>;\n\n if (typeof candidate.callId !== \"string\" || candidate.callId.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh retry request requires a non-empty callId.\",\n });\n }\n\n if (\n candidate.idempotencyKey !== undefined &&\n (typeof candidate.idempotencyKey !== \"string\" ||\n candidate.idempotencyKey.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh retry idempotencyKey must be a non-empty string when provided.\",\n callId: candidate.callId,\n });\n }\n}\n\nfunction validateConstraints(\n constraints: ProbeMeshConstraints | undefined,\n capability: string,\n) {\n if (constraints === undefined) {\n return;\n }\n\n if (!constraints || typeof constraints !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"constraints must be an object when provided.\",\n capability,\n });\n }\n\n validatePositiveNumber(constraints.maxCostUsd, \"maxCostUsd\", capability);\n validatePositiveNumber(constraints.maxLatencyMs, \"maxLatencyMs\", capability);\n\n if (\n constraints.minConfidence !== undefined &&\n (!Number.isFinite(constraints.minConfidence) ||\n constraints.minConfidence < 0 ||\n constraints.minConfidence > 1)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"minConfidence must be a number between 0 and 1 when provided.\",\n capability,\n });\n }\n}\n\nfunction validateProviderPreferences(\n providerPreferences: ProbeMeshCallRequest[\"providerPreferences\"],\n capability: string,\n) {\n if (providerPreferences === undefined) {\n return;\n }\n\n if (!providerPreferences || typeof providerPreferences !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"providerPreferences must be an object when provided.\",\n capability,\n });\n }\n\n validateStringArray(\n providerPreferences.allowedProviders,\n \"allowedProviders\",\n capability,\n );\n validateStringArray(\n providerPreferences.blockedProviders,\n \"blockedProviders\",\n capability,\n );\n}\n\nfunction validatePositiveNumber(\n value: number | undefined,\n field: string,\n capability: string,\n) {\n if (value === undefined) {\n return;\n }\n\n if (!Number.isFinite(value) || value <= 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a positive number when provided.`,\n capability,\n });\n }\n}\n\nfunction validateStringArray(\n value: string[] | undefined,\n field: string,\n capability: string,\n) {\n if (value === undefined) {\n return;\n }\n\n if (\n !Array.isArray(value) ||\n value.some((provider) => typeof provider !== \"string\" || provider.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be an array of non-empty provider ids when provided.`,\n capability,\n });\n }\n}\n\nfunction selectAdapter(\n adapters: ProbeMeshAdapter[],\n request: ProbeMeshCallRequest,\n): { adapter: ProbeMeshAdapter; paymentSelection: ProbeMeshPaymentSelection } | undefined {\n const allowedProviders = request.providerPreferences?.allowedProviders;\n const blockedProviders = request.providerPreferences?.blockedProviders ?? [];\n\n for (const adapter of adapters) {\n if (!adapter.capabilities.includes(request.capability)) {\n continue;\n }\n\n if (allowedProviders && !allowedProviders.includes(adapter.id)) {\n continue;\n }\n\n if (blockedProviders.includes(adapter.id)) {\n continue;\n }\n\n const resolution = resolveProviderPaymentOption({\n providerId: adapter.id,\n providerMode: adapter.mode ?? \"local\",\n capabilities: adapter.capabilities,\n capability: request.capability,\n pricing: adapter.pricing,\n paymentOptions: adapter.paymentOptions,\n paymentPreferences: request.paymentPreferences,\n paymentStrategy: request.paymentStrategy,\n });\n\n if (resolution.selection) {\n return {\n adapter,\n paymentSelection: resolution.selection,\n };\n }\n }\n\n return undefined;\n}\n\nfunction enforceBudget(\n constraints: ProbeMeshConstraints | undefined,\n adapter: ProbeMeshAdapter,\n capability: string,\n callId: string,\n paymentSelection?: ProbeMeshPaymentSelection,\n) {\n if (constraints?.maxCostUsd === undefined) {\n return;\n }\n\n const paymentCost = paymentSelectionToCost(paymentSelection);\n\n if (paymentCost) {\n if (paymentCost.amountUsd <= constraints.maxCostUsd) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"budget_exceeded\",\n message: `Capability \"${capability}\" payment option \"${paymentSelection?.optionId}\" costs $${paymentCost.amountUsd.toFixed(\n 2,\n )}, which exceeds maxCostUsd $${constraints.maxCostUsd.toFixed(2)}.`,\n capability,\n provider: adapter.id,\n callId,\n });\n }\n\n const pricing = getPricing(adapter, capability);\n\n if (!pricing || pricing.amountUsd <= constraints.maxCostUsd) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"budget_exceeded\",\n message: `Capability \"${capability}\" costs $${pricing.amountUsd.toFixed(\n 2,\n )}, which exceeds maxCostUsd $${constraints.maxCostUsd.toFixed(2)}.`,\n capability,\n provider: adapter.id,\n callId,\n });\n}\n\nfunction getPricing(\n adapter: ProbeMeshAdapter,\n capability: string,\n): ProbeMeshPricing | undefined {\n if (!adapter.pricing) {\n return undefined;\n }\n\n if (isSinglePricing(adapter.pricing)) {\n return adapter.pricing;\n }\n\n return adapter.pricing[capability];\n}\n\nfunction isSinglePricing(\n pricing: ProbeMeshAdapter[\"pricing\"],\n): pricing is ProbeMeshPricing {\n return (\n typeof (pricing as ProbeMeshPricing | undefined)?.amountUsd === \"number\" &&\n typeof (pricing as ProbeMeshPricing | undefined)?.unit === \"string\"\n );\n}\n\nfunction pricingToCost(pricing: ProbeMeshPricing | undefined): Cost | undefined {\n if (!pricing) {\n return undefined;\n }\n\n return {\n amountUsd: pricing.amountUsd,\n currency: pricing.currency ?? \"USD\",\n unit: pricing.unit,\n };\n}\n\nfunction generateCallId(): string {\n return `call_${randomUUID()}`;\n}\n","import { ProbeMeshError } from \"./errors\";\nimport type {\n Cost,\n ProbeMeshPaymentPreferences,\n ProbeMeshPaymentSelection,\n ProbeMeshPaymentStrategy,\n ProbeMeshPaymentStrategyMode,\n ProbeMeshPricing,\n ProviderPaymentOption,\n ReceiptType,\n} from \"./types\";\n\nexport interface PaymentOptionResolutionInput {\n providerId: string;\n providerMode?: string;\n capabilities: string[];\n capability: string;\n pricing?: ProbeMeshPricing | Record<string, ProbeMeshPricing>;\n paymentOptions?: ProviderPaymentOption[];\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n defaultReceiptTypes?: ReceiptType[];\n}\n\nexport interface PaymentOptionResolution {\n selection?: ProbeMeshPaymentSelection;\n reason?: string;\n options: ProviderPaymentOption[];\n}\n\ninterface PaymentOptionCandidate {\n option: ProviderPaymentOption;\n index: number;\n cost?: Cost;\n receiptTypes: ReceiptType[];\n}\n\ninterface RankedPaymentOptionCandidate extends PaymentOptionCandidate {\n score: number;\n scoreReasons: string[];\n}\n\nexport function resolveProviderPaymentOption(\n input: PaymentOptionResolutionInput,\n): PaymentOptionResolution {\n const options = getProviderPaymentOptions(input);\n const candidates = options\n .filter((option) => optionSupportsCapability(option, input.capability))\n .map((option, index) => ({\n option,\n index,\n cost: pricingToCost(resolvePaymentOptionPricing(option, input.capability) ?? resolvePricing(input.pricing, input.capability)),\n receiptTypes: option.receiptTypes ?? [],\n }));\n const filtered = candidates.filter(({ option, receiptTypes }) =>\n optionMatchesPaymentPreferences(option, receiptTypes, input.paymentPreferences),\n );\n\n if (filtered.length === 0) {\n return {\n options,\n reason: createNoPaymentOptionReason(input, candidates.length),\n };\n }\n\n const selected = choosePaymentOption(\n filtered,\n input.paymentPreferences,\n input.paymentStrategy,\n );\n\n return {\n options,\n selection: {\n providerId: input.providerId,\n optionId: selected.option.id,\n protocolMode: selected.option.protocolMode,\n cost: selected.cost,\n receiptTypes: [...selected.receiptTypes],\n score: selected.score,\n scoreReasons: [...selected.scoreReasons],\n metadata: cloneSerializable(selected.option.metadata),\n },\n };\n}\n\nexport function getProviderPaymentOptions(\n input: Omit<PaymentOptionResolutionInput, \"capability\" | \"paymentPreferences\">,\n): ProviderPaymentOption[] {\n if (input.paymentOptions && input.paymentOptions.length > 0) {\n return cloneSerializable(input.paymentOptions);\n }\n\n return [\n {\n id: \"default\",\n protocolMode: input.providerMode ?? \"local\",\n capabilities: [...input.capabilities],\n ...(input.pricing !== undefined ? { pricing: cloneSerializable(input.pricing) } : {}),\n receiptTypes: [...(input.defaultReceiptTypes ?? [])],\n },\n ];\n}\n\nexport function validateProviderPaymentOptions(\n paymentOptions: unknown,\n path: string,\n capabilities: readonly string[],\n errors: Array<{ path: string; message: string }>,\n) {\n if (paymentOptions === undefined) {\n return;\n }\n\n if (!Array.isArray(paymentOptions) || paymentOptions.length === 0) {\n errors.push({\n path,\n message: \"paymentOptions must be a non-empty array when provided.\",\n });\n return;\n }\n\n const seen = new Set<string>();\n\n paymentOptions.forEach((option, index) => {\n const optionPath = `${path}.${index}`;\n\n if (!isRecord(option)) {\n errors.push({\n path: optionPath,\n message: \"payment option must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(option.id, `${optionPath}.id`, errors);\n validateNonEmptyString(option.protocolMode, `${optionPath}.protocolMode`, errors);\n\n if (typeof option.id === \"string\") {\n if (seen.has(option.id)) {\n errors.push({\n path: `${optionPath}.id`,\n message: `duplicate payment option \"${option.id}\".`,\n });\n }\n\n seen.add(option.id);\n }\n\n if (option.capabilities !== undefined) {\n validateStringArray(option.capabilities, `${optionPath}.capabilities`, errors);\n\n if (Array.isArray(option.capabilities)) {\n for (const capability of option.capabilities) {\n if (\n typeof capability === \"string\" &&\n capability.length > 0 &&\n !capabilities.includes(capability)\n ) {\n errors.push({\n path: `${optionPath}.capabilities`,\n message: `payment option capability \"${capability}\" is not declared by the provider.`,\n });\n }\n }\n }\n }\n\n if (option.pricing !== undefined) {\n validatePricingDeclaration(option.pricing, `${optionPath}.pricing`, errors);\n }\n\n if (option.receiptTypes !== undefined) {\n if (\n !Array.isArray(option.receiptTypes) ||\n option.receiptTypes.some((receiptType) => !isReceiptType(receiptType))\n ) {\n errors.push({\n path: `${optionPath}.receiptTypes`,\n message: \"payment option receiptTypes must contain known receipt types.\",\n });\n }\n }\n\n if (option.metadata !== undefined && !isRecord(option.metadata)) {\n errors.push({\n path: `${optionPath}.metadata`,\n message: \"payment option metadata must be an object when provided.\",\n });\n }\n });\n}\n\nexport function validatePaymentPreferences(\n paymentPreferences: unknown,\n capability: string,\n) {\n if (paymentPreferences === undefined) {\n return;\n }\n\n if (!isRecord(paymentPreferences)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"paymentPreferences must be an object when provided.\",\n capability,\n });\n }\n\n validatePreferenceStringArray(\n paymentPreferences.allowedProtocols,\n \"allowedProtocols\",\n capability,\n );\n validatePreferenceStringArray(\n paymentPreferences.preferredProtocols,\n \"preferredProtocols\",\n capability,\n );\n validatePreferenceStringArray(\n paymentPreferences.blockedProtocols,\n \"blockedProtocols\",\n capability,\n );\n validatePreferenceStringArray(\n paymentPreferences.allowedPaymentOptions,\n \"allowedPaymentOptions\",\n capability,\n );\n validatePreferenceStringArray(\n paymentPreferences.preferredPaymentOptions,\n \"preferredPaymentOptions\",\n capability,\n );\n validatePreferenceStringArray(\n paymentPreferences.blockedPaymentOptions,\n \"blockedPaymentOptions\",\n capability,\n );\n\n if (\n paymentPreferences.requiredReceiptTypes !== undefined &&\n (!Array.isArray(paymentPreferences.requiredReceiptTypes) ||\n paymentPreferences.requiredReceiptTypes.some((receiptType) => !isReceiptType(receiptType)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"paymentPreferences.requiredReceiptTypes must contain known receipt types.\",\n capability,\n });\n }\n}\n\nexport function validatePaymentStrategy(\n paymentStrategy: unknown,\n capability: string,\n) {\n if (paymentStrategy === undefined) {\n return;\n }\n\n if (!isRecord(paymentStrategy)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"paymentStrategy must be an object when provided.\",\n capability,\n });\n }\n\n if (!isPaymentStrategyMode(paymentStrategy.mode)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n 'paymentStrategy.mode must be one of \"provider_order\", \"lowest_cost\", \"preferred_protocol\", or \"receipt_coverage\".',\n capability,\n });\n }\n\n if (\n paymentStrategy.preferredReceiptTypes !== undefined &&\n (!Array.isArray(paymentStrategy.preferredReceiptTypes) ||\n paymentStrategy.preferredReceiptTypes.some(\n (receiptType) => !isReceiptType(receiptType),\n ))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"paymentStrategy.preferredReceiptTypes must contain known receipt types.\",\n capability,\n });\n }\n}\n\nexport function mergePaymentPreferences(\n first?: ProbeMeshPaymentPreferences,\n second?: ProbeMeshPaymentPreferences,\n): ProbeMeshPaymentPreferences | undefined {\n if (!first && !second) {\n return undefined;\n }\n\n return compactPaymentPreferences({\n allowedProtocols: intersectArrays(first?.allowedProtocols, second?.allowedProtocols),\n preferredProtocols: second?.preferredProtocols ?? first?.preferredProtocols,\n blockedProtocols: unionArrays(first?.blockedProtocols, second?.blockedProtocols),\n allowedPaymentOptions: intersectArrays(\n first?.allowedPaymentOptions,\n second?.allowedPaymentOptions,\n ),\n preferredPaymentOptions:\n second?.preferredPaymentOptions ?? first?.preferredPaymentOptions,\n blockedPaymentOptions: unionArrays(\n first?.blockedPaymentOptions,\n second?.blockedPaymentOptions,\n ),\n requiredReceiptTypes: unionArrays(\n first?.requiredReceiptTypes,\n second?.requiredReceiptTypes,\n ) as ReceiptType[] | undefined,\n });\n}\n\nexport function paymentSelectionToCost(\n selection: ProbeMeshPaymentSelection | undefined,\n): Cost | undefined {\n return selection?.cost;\n}\n\nfunction optionSupportsCapability(\n option: ProviderPaymentOption,\n capability: string,\n) {\n return !option.capabilities || option.capabilities.includes(capability);\n}\n\nfunction optionMatchesPaymentPreferences(\n option: ProviderPaymentOption,\n receiptTypes: ReceiptType[],\n preferences: ProbeMeshPaymentPreferences | undefined,\n) {\n if (!preferences) {\n return true;\n }\n\n if (\n preferences.allowedProtocols &&\n !preferences.allowedProtocols.includes(option.protocolMode)\n ) {\n return false;\n }\n\n if (preferences.blockedProtocols?.includes(option.protocolMode)) {\n return false;\n }\n\n if (\n preferences.allowedPaymentOptions &&\n !preferences.allowedPaymentOptions.includes(option.id)\n ) {\n return false;\n }\n\n if (preferences.blockedPaymentOptions?.includes(option.id)) {\n return false;\n }\n\n const receiptSet = new Set(receiptTypes);\n\n return (preferences.requiredReceiptTypes ?? []).every((receiptType) =>\n receiptSet.has(receiptType),\n );\n}\n\nfunction choosePaymentOption(\n candidates: PaymentOptionCandidate[],\n preferences: ProbeMeshPaymentPreferences | undefined,\n strategy: ProbeMeshPaymentStrategy | undefined,\n) {\n const mode = strategy?.mode ?? \"provider_order\";\n const ranked = [...candidates].sort((left, right) =>\n comparePaymentOptions(left, right, preferences, strategy),\n );\n\n return ranked.map((candidate, rank) => ({\n ...candidate,\n score: rank,\n scoreReasons: createScoreReasons(candidate, preferences, strategy, mode),\n }))[0];\n}\n\nfunction preferenceIndex(preferences: string[], value: string) {\n const index = preferences.indexOf(value);\n return index === -1 ? Number.MAX_SAFE_INTEGER : index;\n}\n\nfunction comparePaymentOptions(\n left: PaymentOptionCandidate,\n right: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n strategy: ProbeMeshPaymentStrategy | undefined,\n) {\n switch (strategy?.mode ?? \"provider_order\") {\n case \"lowest_cost\":\n return compareCost(left, right) || left.index - right.index;\n\n case \"preferred_protocol\":\n return (\n comparePreferredProtocol(left, right, preferences) ||\n compareCost(left, right) ||\n left.index - right.index\n );\n\n case \"receipt_coverage\":\n return (\n compareReceiptCoverage(left, right, preferences, strategy) ||\n comparePreferredProtocol(left, right, preferences) ||\n compareCost(left, right) ||\n left.index - right.index\n );\n\n case \"provider_order\":\n return compareProviderOrder(left, right, preferences);\n }\n}\n\nfunction compareProviderOrder(\n left: PaymentOptionCandidate,\n right: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n) {\n const optionPreference = preferences?.preferredPaymentOptions ?? [];\n const protocolPreference = preferences?.preferredProtocols ?? [];\n const optionPreferenceDelta =\n preferenceIndex(optionPreference, left.option.id) -\n preferenceIndex(optionPreference, right.option.id);\n\n if (optionPreferenceDelta !== 0) {\n return optionPreferenceDelta;\n }\n\n const protocolPreferenceDelta =\n preferenceIndex(protocolPreference, left.option.protocolMode) -\n preferenceIndex(protocolPreference, right.option.protocolMode);\n\n if (protocolPreferenceDelta !== 0) {\n return protocolPreferenceDelta;\n }\n\n return left.index - right.index;\n}\n\nfunction comparePreferredProtocol(\n left: PaymentOptionCandidate,\n right: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n) {\n const protocolPreference = preferences?.preferredProtocols ?? [];\n\n return (\n preferenceIndex(protocolPreference, left.option.protocolMode) -\n preferenceIndex(protocolPreference, right.option.protocolMode)\n );\n}\n\nfunction compareCost(\n left: PaymentOptionCandidate,\n right: PaymentOptionCandidate,\n) {\n const leftCost = costSortValue(left.cost);\n const rightCost = costSortValue(right.cost);\n\n if (leftCost === rightCost) {\n return 0;\n }\n\n return leftCost < rightCost ? -1 : 1;\n}\n\nfunction compareReceiptCoverage(\n left: PaymentOptionCandidate,\n right: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n strategy: ProbeMeshPaymentStrategy | undefined,\n) {\n return (\n receiptCoverage(right, preferences, strategy) -\n receiptCoverage(left, preferences, strategy)\n );\n}\n\nfunction receiptCoverage(\n candidate: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n strategy: ProbeMeshPaymentStrategy | undefined,\n) {\n const desiredReceiptTypes =\n strategy?.preferredReceiptTypes ?? preferences?.requiredReceiptTypes ?? [];\n const receiptSet = new Set(candidate.receiptTypes);\n\n if (desiredReceiptTypes.length > 0) {\n return desiredReceiptTypes.filter((receiptType) => receiptSet.has(receiptType))\n .length;\n }\n\n return receiptSet.size;\n}\n\nfunction costSortValue(cost: Cost | undefined) {\n return cost?.amountUsd ?? Number.POSITIVE_INFINITY;\n}\n\nfunction createScoreReasons(\n candidate: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n strategy: ProbeMeshPaymentStrategy | undefined,\n mode: ProbeMeshPaymentStrategy[\"mode\"],\n) {\n const reasons = [`strategy:${mode}`];\n\n if (mode === \"provider_order\") {\n const preferredOptionIndex = preferenceIndex(\n preferences?.preferredPaymentOptions ?? [],\n candidate.option.id,\n );\n const preferredProtocolIndex = preferenceIndex(\n preferences?.preferredProtocols ?? [],\n candidate.option.protocolMode,\n );\n\n if (preferredOptionIndex !== Number.MAX_SAFE_INTEGER) {\n reasons.push(`preferred_option:${candidate.option.id}`);\n } else if (preferredProtocolIndex !== Number.MAX_SAFE_INTEGER) {\n reasons.push(`preferred_protocol:${candidate.option.protocolMode}`);\n } else {\n reasons.push(`provider_order:${candidate.index}`);\n }\n }\n\n if (mode === \"lowest_cost\" || mode === \"preferred_protocol\" || mode === \"receipt_coverage\") {\n reasons.push(\n candidate.cost\n ? `cost:${candidate.cost.amountUsd}`\n : \"cost:unknown\",\n );\n }\n\n if (mode === \"preferred_protocol\") {\n reasons.push(\n isPreferredProtocol(candidate, preferences)\n ? `preferred_protocol:${candidate.option.protocolMode}`\n : `protocol:${candidate.option.protocolMode}`,\n );\n }\n\n if (mode === \"receipt_coverage\") {\n const desiredReceiptTypes =\n strategy?.preferredReceiptTypes ?? preferences?.requiredReceiptTypes ?? [];\n reasons.push(\n desiredReceiptTypes.length > 0\n ? `receipt_coverage:${receiptCoverage(candidate, preferences, strategy)}/${desiredReceiptTypes.length}`\n : `receipt_coverage:${candidate.receiptTypes.length}`,\n );\n\n if (isPreferredProtocol(candidate, preferences)) {\n reasons.push(`preferred_protocol:${candidate.option.protocolMode}`);\n }\n }\n\n return reasons;\n}\n\nfunction isPreferredProtocol(\n candidate: PaymentOptionCandidate,\n preferences: ProbeMeshPaymentPreferences | undefined,\n) {\n return (\n preferences?.preferredProtocols?.includes(candidate.option.protocolMode) ??\n false\n );\n}\n\nfunction createNoPaymentOptionReason(\n input: PaymentOptionResolutionInput,\n capabilityCandidateCount: number,\n) {\n if (capabilityCandidateCount === 0) {\n return `Provider \"${input.providerId}\" has no payment option for capability \"${input.capability}\".`;\n }\n\n return `Provider \"${input.providerId}\" has no payment option matching paymentPreferences for capability \"${input.capability}\".`;\n}\n\nfunction resolvePaymentOptionPricing(\n option: ProviderPaymentOption,\n capability: string,\n) {\n return resolvePricing(option.pricing, capability);\n}\n\nfunction resolvePricing(\n pricing: ProbeMeshPricing | Record<string, ProbeMeshPricing> | undefined,\n capability: string,\n): ProbeMeshPricing | undefined {\n if (!pricing) {\n return undefined;\n }\n\n if (isPricing(pricing)) {\n return pricing;\n }\n\n const capabilityPricing = pricing[capability];\n return isPricing(capabilityPricing) ? capabilityPricing : undefined;\n}\n\nfunction pricingToCost(pricing: ProbeMeshPricing | undefined): Cost | undefined {\n if (!pricing) {\n return undefined;\n }\n\n return {\n amountUsd: pricing.amountUsd,\n currency: pricing.currency ?? \"USD\",\n unit: pricing.unit,\n };\n}\n\nfunction validatePreferenceStringArray(\n value: unknown,\n field: string,\n capability: string,\n) {\n if (\n value !== undefined &&\n (!Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `paymentPreferences.${field} must be an array of non-empty strings when provided.`,\n capability,\n });\n }\n}\n\nfunction validatePricingDeclaration(\n pricing: unknown,\n path: string,\n errors: Array<{ path: string; message: string }>,\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"payment option pricing must be an object.\",\n });\n return;\n }\n\n if (isPricing(pricing)) {\n validatePricing(pricing, path, errors);\n return;\n }\n\n for (const [capability, capabilityPricing] of Object.entries(pricing)) {\n validatePricing(capabilityPricing, `${path}.${capability}`, errors);\n }\n}\n\nfunction validatePricing(\n pricing: unknown,\n path: string,\n errors: Array<{ path: string; message: string }>,\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"payment option pricing entry must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(pricing.unit, `${path}.unit`, errors);\n\n if (\n typeof pricing.amountUsd !== \"number\" ||\n !Number.isFinite(pricing.amountUsd) ||\n pricing.amountUsd < 0\n ) {\n errors.push({\n path: `${path}.amountUsd`,\n message: \"amountUsd must be a non-negative number.\",\n });\n }\n\n if (pricing.currency !== undefined && typeof pricing.currency !== \"string\") {\n errors.push({\n path: `${path}.currency`,\n message: \"currency must be a string when provided.\",\n });\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n errors: Array<{ path: string; message: string }>,\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: Array<{ path: string; message: string }>,\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 isPricing(value: unknown): value is ProbeMeshPricing {\n return (\n isRecord(value) &&\n typeof value.unit === \"string\" &&\n value.unit.length > 0 &&\n typeof value.amountUsd === \"number\" &&\n Number.isFinite(value.amountUsd) &&\n value.amountUsd >= 0 &&\n (value.currency === undefined || typeof value.currency === \"string\")\n );\n}\n\nfunction isReceiptType(value: unknown): value is ReceiptType {\n return (\n value === \"payment_proof\" ||\n value === \"settlement_confirmation\" ||\n value === \"provider_delivery\" ||\n value === \"provider_response_evidence\" ||\n value === \"authorization_decision\"\n );\n}\n\nfunction isPaymentStrategyMode(\n value: unknown,\n): value is ProbeMeshPaymentStrategyMode {\n return (\n value === \"provider_order\" ||\n value === \"lowest_cost\" ||\n value === \"preferred_protocol\" ||\n value === \"receipt_coverage\"\n );\n}\n\nfunction compactPaymentPreferences(\n preferences: ProbeMeshPaymentPreferences,\n): ProbeMeshPaymentPreferences | undefined {\n const entries = Object.entries(preferences).filter(\n ([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0),\n );\n\n return entries.length > 0\n ? (Object.fromEntries(entries) as ProbeMeshPaymentPreferences)\n : undefined;\n}\n\nfunction intersectArrays<T>(first?: T[], second?: T[]) {\n if (first === undefined) {\n return second === undefined ? undefined : [...second];\n }\n\n if (second === undefined) {\n return [...first];\n }\n\n const secondValues = new Set(second);\n return first.filter((value) => secondValues.has(value));\n}\n\nfunction unionArrays<T>(first?: T[], second?: T[]) {\n const values = [...(first ?? []), ...(second ?? [])];\n return values.length > 0 ? [...new Set(values)] : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\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","import { ProbeMeshError } from \"../errors\";\nimport type { ProviderProtocolAdapter } from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\n\nexport interface MockPaymentProtocolOptions {\n mode?: ProviderProtocolMode;\n failPrepare?: boolean;\n failPrepareOnce?: boolean;\n failSettle?: boolean;\n omitDeliveryReceipt?: boolean;\n paymentAttemptId?: string;\n}\n\nexport function createMockPaymentProtocol(\n options: MockPaymentProtocolOptions = {},\n): ProviderProtocolAdapter {\n const mode = options.mode ?? \"mock-payment\";\n let prepareAttempts = 0;\n\n return {\n mode,\n prepare({ manifest, request, context }) {\n prepareAttempts += 1;\n\n if (\n options.failPrepare ||\n (options.failPrepareOnce && prepareAttempts === 1)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Mock payment authorization failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n const paymentAttemptId =\n options.paymentAttemptId ?? `${context.callId}:mock_payment_attempt`;\n\n return {\n mode: manifest.protocolMode,\n headers: {\n \"x-mock-payment-intent\": context.callId,\n },\n metadata: {\n authorized: true,\n paymentAttemptId,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:mock_payment_authorized`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n moneyMayHaveMoved: true,\n },\n };\n },\n settle({ manifest, request, context }) {\n if (options.failSettle) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Mock payment settlement failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n return {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n },\n receiptRefs: options.omitDeliveryReceipt\n ? []\n : [\n {\n type: \"provider_delivery\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:mock_delivery_recorded`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n settlementStatus: \"settled\",\n deliveryStatus: options.omitDeliveryReceipt ? \"missing\" : \"delivered\",\n moneyMayHaveMoved: true,\n },\n };\n },\n };\n}\n","import { ProbeMeshError } from \"../errors\";\nimport { validateProviderPaymentOptions } from \"../paymentOptions\";\nimport type { ProbeMeshPricing } from \"../types\";\nimport type {\n JsonSchemaLike,\n ProviderLimits,\n ProviderManifest,\n ProviderManifestValidationError,\n ProviderManifestValidationResult,\n ProviderReceiptSupport,\n} from \"./types\";\n\nconst JSON_SCHEMA_HINT_KEYS = new Set([\n \"$schema\",\n \"$id\",\n \"type\",\n \"properties\",\n \"required\",\n \"items\",\n \"enum\",\n \"description\",\n \"additionalProperties\",\n \"oneOf\",\n \"anyOf\",\n \"allOf\",\n]);\n\nexport function validateProviderManifest(\n manifest: unknown,\n): ProviderManifestValidationResult {\n const errors: ProviderManifestValidationError[] = [];\n\n if (!isRecord(manifest)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider manifest must be an object.\",\n },\n ],\n };\n }\n\n validateNonEmptyString(manifest.id, \"id\", errors);\n validateNonEmptyString(manifest.displayName, \"displayName\", errors);\n validateCapabilityList(manifest.capabilities, errors);\n validateNonEmptyString(manifest.protocolMode, \"protocolMode\", errors);\n validateProviderPaymentOptions(\n manifest.paymentOptions,\n \"paymentOptions\",\n Array.isArray(manifest.capabilities) ? manifest.capabilities : [],\n errors,\n );\n validatePricingDeclaration(\n manifest.pricing,\n \"pricing\",\n manifest.capabilities,\n errors,\n );\n validateSchemaDeclaration(\n manifest.inputSchema,\n \"inputSchema\",\n manifest.capabilities,\n errors,\n );\n validateSchemaDeclaration(\n manifest.outputSchema,\n \"outputSchema\",\n manifest.capabilities,\n errors,\n );\n validateReceipts(manifest.receipts, errors);\n\n if (manifest.limits !== undefined) {\n validateLimits(manifest.limits, errors);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderManifest(\n manifest: unknown,\n): asserts manifest is ProviderManifest {\n const result = validateProviderManifest(manifest);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider manifest: ${formatValidationErrors(result.errors)}`,\n });\n}\n\nexport function isSharedJsonSchemaLike(value: unknown): value is JsonSchemaLike {\n if (!isRecord(value)) {\n return false;\n }\n\n return Object.keys(value).some((key) => JSON_SCHEMA_HINT_KEYS.has(key));\n}\n\nexport function isSharedPricing(value: unknown): value is ProbeMeshPricing {\n return (\n isRecord(value) &&\n typeof value.unit === \"string\" &&\n value.unit.length > 0 &&\n typeof value.amountUsd === \"number\"\n );\n}\n\nfunction validateCapabilityList(\n capabilities: unknown,\n errors: ProviderManifestValidationError[],\n) {\n if (!Array.isArray(capabilities) || capabilities.length === 0) {\n errors.push({\n path: \"capabilities\",\n message: \"capabilities must be a non-empty array.\",\n });\n return;\n }\n\n const seen = new Set<string>();\n\n capabilities.forEach((capability, index) => {\n if (typeof capability !== \"string\" || capability.length === 0) {\n errors.push({\n path: `capabilities.${index}`,\n message: \"capability ids must be non-empty strings.\",\n });\n return;\n }\n\n if (seen.has(capability)) {\n errors.push({\n path: `capabilities.${index}`,\n message: `duplicate capability \"${capability}\".`,\n });\n }\n\n seen.add(capability);\n });\n}\n\nfunction validatePricingDeclaration(\n pricing: unknown,\n path: string,\n capabilities: unknown,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"pricing must be an object.\",\n });\n return;\n }\n\n if (isSharedPricing(pricing)) {\n validatePricing(pricing, path, errors);\n return;\n }\n\n if (!Array.isArray(capabilities)) {\n return;\n }\n\n for (const capability of capabilities) {\n if (typeof capability !== \"string\" || capability.length === 0) {\n continue;\n }\n\n validatePricing(pricing[capability], `${path}.${capability}`, errors);\n }\n}\n\nfunction validatePricing(\n pricing: unknown,\n path: string,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"pricing entry must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(pricing.unit, `${path}.unit`, errors);\n\n if (\n typeof pricing.amountUsd !== \"number\" ||\n !Number.isFinite(pricing.amountUsd) ||\n pricing.amountUsd < 0\n ) {\n errors.push({\n path: `${path}.amountUsd`,\n message: \"amountUsd must be a non-negative number.\",\n });\n }\n\n if (pricing.currency !== undefined && typeof pricing.currency !== \"string\") {\n errors.push({\n path: `${path}.currency`,\n message: \"currency must be a string when provided.\",\n });\n }\n}\n\nfunction validateSchemaDeclaration(\n schema: unknown,\n path: string,\n capabilities: unknown,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(schema)) {\n errors.push({\n path,\n message: `${path} must be an object.`,\n });\n return;\n }\n\n if (isSharedJsonSchemaLike(schema)) {\n validateSchemaLike(schema, path, errors);\n return;\n }\n\n if (!Array.isArray(capabilities)) {\n return;\n }\n\n for (const capability of capabilities) {\n if (typeof capability !== \"string\" || capability.length === 0) {\n continue;\n }\n\n validateSchemaLike(schema[capability], `${path}.${capability}`, errors);\n }\n}\n\nfunction validateSchemaLike(\n schema: unknown,\n path: string,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(schema)) {\n errors.push({\n path,\n message: \"schema entry must be an object.\",\n });\n return;\n }\n\n if (schema.type !== undefined && typeof schema.type !== \"string\") {\n errors.push({\n path: `${path}.type`,\n message: \"schema type must be a string when provided.\",\n });\n }\n\n if (\n schema.properties !== undefined &&\n !isRecord(schema.properties)\n ) {\n errors.push({\n path: `${path}.properties`,\n message: \"schema properties must be an object when provided.\",\n });\n }\n\n if (\n schema.required !== undefined &&\n (!Array.isArray(schema.required) ||\n schema.required.some((field) => typeof field !== \"string\"))\n ) {\n errors.push({\n path: `${path}.required`,\n message: \"schema required must be an array of strings when provided.\",\n });\n }\n}\n\nfunction validateReceipts(\n receipts: unknown,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(receipts)) {\n errors.push({\n path: \"receipts\",\n message: \"receipts must be an object.\",\n });\n return;\n }\n\n validateBoolean(receipts.payment, \"receipts.payment\", errors);\n validateBoolean(receipts.delivery, \"receipts.delivery\", errors);\n validateBoolean(\n receipts.responseEvidence,\n \"receipts.responseEvidence\",\n errors,\n );\n}\n\nfunction validateLimits(\n limits: unknown,\n errors: ProviderManifestValidationError[],\n) {\n if (!isRecord(limits)) {\n errors.push({\n path: \"limits\",\n message: \"limits must be an object when provided.\",\n });\n return;\n }\n\n const typedLimits = limits as ProviderLimits;\n\n if (\n typedLimits.maxRequestsPerMinute !== undefined &&\n (!Number.isFinite(typedLimits.maxRequestsPerMinute) ||\n typedLimits.maxRequestsPerMinute <= 0)\n ) {\n errors.push({\n path: \"limits.maxRequestsPerMinute\",\n message: \"maxRequestsPerMinute must be a positive number when provided.\",\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderManifestValidationError[],\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 validateBoolean(\n value: unknown,\n path: string,\n errors: ProviderManifestValidationError[],\n) {\n if (typeof value !== \"boolean\") {\n errors.push({\n path,\n message: `${path} must be a boolean.`,\n });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatValidationErrors(errors: ProviderManifestValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","import { ProbeMeshError, isProbeMeshError } from \"../errors\";\nimport type {\n ProbeMeshAdapter,\n ProbeMeshAdapterCallRequest,\n ProbeMeshAdapterCallResult,\n ProbeMeshAdapterContext,\n ProbeMeshCallSafety,\n ReceiptRef,\n} from \"../types\";\nimport { assertProviderManifest } from \"./manifest\";\nimport type {\n CreateAdapterFromManifestOptions,\n ProviderManifestHandlerContext,\n ProviderProtocolAdapter,\n ProviderProtocolExecution,\n ProviderProtocolPreparation,\n} from \"./protocol\";\nimport type { ProviderManifest } from \"./types\";\n\nexport type ProviderManifestCapabilityHandler<Input = unknown, Data = unknown> = (\n request: ProbeMeshAdapterCallRequest<Input>,\n context: ProviderManifestHandlerContext,\n) => ProbeMeshAdapterCallResult<Data> | Promise<ProbeMeshAdapterCallResult<Data>>;\n\nexport type ProviderManifestHandlers = Record<\n string,\n ProviderManifestCapabilityHandler\n>;\n\nexport function createAdapterFromManifest(\n manifest: ProviderManifest,\n handlers: ProviderManifestHandlers,\n options: CreateAdapterFromManifestOptions = {},\n): ProbeMeshAdapter {\n assertProviderManifest(manifest);\n assertHandlers(manifest, handlers);\n assertProtocolAdapters(options.protocolAdapters, manifest);\n\n return {\n id: manifest.id,\n displayName: manifest.displayName,\n mode: manifest.protocolMode,\n capabilities: [...manifest.capabilities],\n pricing: manifest.pricing,\n ...(manifest.paymentOptions !== undefined\n ? { paymentOptions: [...manifest.paymentOptions] }\n : {}),\n async call(request, context) {\n const handler = handlers[request.capability];\n\n if (!handler) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Provider manifest \"${manifest.id}\" does not expose handler for capability \"${request.capability}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n const protocolMode = context.paymentSelection?.protocolMode ?? manifest.protocolMode;\n const protocolAdapter = findProtocolAdapter(\n manifest,\n options.protocolAdapters,\n protocolMode,\n );\n const preparation = protocolAdapter?.prepare\n ? await prepareProtocol(protocolAdapter, manifest, request, context, protocolMode)\n : undefined;\n const preparationReceiptRefs = preparation?.receiptRefs ?? [];\n const preparationSafety = protocolAdapter\n ? mergeSafety(preparationReceiptRefs, preparation?.safety)\n : undefined;\n const protocolExecution: ProviderProtocolExecution | undefined =\n protocolAdapter\n ? {\n mode: protocolMode,\n preparation,\n receiptRefs: [...preparationReceiptRefs],\n safety: preparationSafety,\n }\n : undefined;\n const handlerContext: ProviderManifestHandlerContext = protocolExecution\n ? {\n ...context,\n protocol: protocolExecution,\n }\n : context;\n const result = await callHandler({\n handler,\n manifest,\n request,\n handlerContext,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n });\n const settlement = protocolAdapter?.settle\n ? await settleProtocol({\n protocolAdapter,\n manifest,\n request,\n handlerContext,\n result,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n protocolMode,\n })\n : undefined;\n const protocolReceiptRefs = [\n ...preparationReceiptRefs,\n ...(settlement?.receiptRefs ?? []),\n ];\n const mergedReceiptRefs = [\n ...(result.receiptRefs ?? []),\n ...protocolReceiptRefs,\n ];\n const safety = protocolAdapter\n ? mergeSafety(\n mergedReceiptRefs,\n preparation?.safety,\n result.safety,\n settlement?.safety,\n )\n : result.safety;\n\n if (protocolExecution) {\n protocolExecution.settlement = settlement;\n protocolExecution.receiptRefs = protocolReceiptRefs;\n protocolExecution.safety = safety;\n }\n\n if (\n !result ||\n typeof result !== \"object\" ||\n Array.isArray(result) ||\n (result.receiptRefs !== undefined && !Array.isArray(result.receiptRefs))\n ) {\n return result;\n }\n\n return {\n ...result,\n receiptRefs: mergedReceiptRefs,\n safety,\n };\n },\n };\n}\n\nasync function prepareProtocol<Input>(\n protocolAdapter: ProviderProtocolAdapter,\n manifest: ProviderManifest,\n request: ProbeMeshAdapterCallRequest<Input>,\n context: ProbeMeshAdapterContext,\n protocolMode = manifest.protocolMode,\n) {\n try {\n return await protocolAdapter.prepare?.({\n manifest: manifestForProtocol(manifest, protocolMode),\n request,\n context,\n });\n } catch (error) {\n if (isProbeMeshError(error) && error.code !== \"payment_failed\") {\n throw error;\n }\n\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Protocol \"${protocolAdapter.mode}\" failed while preparing payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: mergeSafety([], {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n }),\n cause: error,\n });\n }\n}\n\nasync function callHandler<Input>({\n handler,\n manifest,\n request,\n handlerContext,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n}: {\n handler: ProviderManifestCapabilityHandler<Input>;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest<Input>;\n handlerContext: ProviderManifestHandlerContext;\n preparation?: ProviderProtocolPreparation;\n preparationSafety?: ProbeMeshCallSafety;\n preparationReceiptRefs: ReceiptRef[];\n}) {\n try {\n return await handler(request, handlerContext);\n } catch (error) {\n const errorReceiptRefs = isProbeMeshError(error)\n ? (error.receiptRefs ?? [])\n : [];\n const receiptRefs = [...preparationReceiptRefs, ...errorReceiptRefs];\n const safety = mergeSafety(\n receiptRefs,\n preparation?.safety,\n preparationSafety,\n isProbeMeshError(error) ? error.safety : undefined,\n {\n deliveryStatus: \"failed\",\n },\n );\n\n if (!paymentWasAttempted(safety, receiptRefs)) {\n if (\n isProbeMeshError(error) &&\n (receiptRefs.length > 0 || preparationSafety)\n ) {\n throw new ProbeMeshError({\n code: error.code,\n message: error.message,\n capability: error.capability,\n provider: error.provider,\n callId: error.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n\n throw error;\n }\n\n throw new ProbeMeshError({\n code:\n isProbeMeshError(error) && error.code === \"timeout_after_payment\"\n ? \"timeout_after_payment\"\n : \"charged_but_no_result\",\n message:\n error instanceof Error\n ? error.message\n : `Provider \"${manifest.id}\" failed after payment was prepared.`,\n capability: request.capability,\n provider: manifest.id,\n callId: handlerContext.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n}\n\nasync function settleProtocol<Input, Data>({\n protocolAdapter,\n manifest,\n request,\n handlerContext,\n result,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n protocolMode,\n}: {\n protocolAdapter: ProviderProtocolAdapter;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest<Input>;\n handlerContext: ProviderManifestHandlerContext;\n result: ProbeMeshAdapterCallResult<Data>;\n preparation?: ProviderProtocolPreparation;\n preparationSafety?: ProbeMeshCallSafety;\n preparationReceiptRefs: ReceiptRef[];\n protocolMode?: string;\n}) {\n try {\n return await protocolAdapter.settle?.({\n manifest: manifestForProtocol(manifest, protocolMode ?? manifest.protocolMode),\n request,\n context: handlerContext,\n result,\n preparation,\n });\n } catch (error) {\n const resultReceiptRefs = Array.isArray(result.receiptRefs)\n ? result.receiptRefs\n : [];\n const receiptRefs = [...resultReceiptRefs, ...preparationReceiptRefs];\n const hasDeliveryEvidence = receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n const safety = mergeSafety(\n receiptRefs,\n preparation?.safety,\n preparationSafety,\n result.safety,\n {\n settlementStatus: \"failed\",\n deliveryStatus: hasDeliveryEvidence ? \"delivered\" : \"missing\",\n },\n );\n\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Protocol \"${protocolAdapter.mode}\" failed while settling payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: handlerContext.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n}\n\nfunction mergeSafety(\n receiptRefs: ReceiptRef[],\n ...partials: Array<Partial<ProbeMeshCallSafety> | undefined>\n): ProbeMeshCallSafety {\n const safety: ProbeMeshCallSafety = {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n\n applyReceiptDerivedSafety(safety, receiptRefs);\n\n for (const partial of partials) {\n if (!partial) {\n continue;\n }\n\n Object.assign(safety, partial);\n }\n\n if (\n safety.paymentStatus === \"authorized\" ||\n safety.settlementStatus === \"settled\"\n ) {\n safety.moneyMayHaveMoved = true;\n }\n\n return safety;\n}\n\nfunction applyReceiptDerivedSafety(\n safety: ProbeMeshCallSafety,\n receiptRefs: ReceiptRef[],\n) {\n if (receiptRefs.some((receiptRef) => receiptRef.type === \"payment_proof\")) {\n safety.paymentStatus = \"authorized\";\n safety.moneyMayHaveMoved = true;\n }\n\n if (\n receiptRefs.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n )\n ) {\n safety.settlementStatus = \"settled\";\n }\n\n if (receiptRefs.some((receiptRef) => receiptRef.type === \"provider_delivery\")) {\n safety.deliveryStatus = \"delivered\";\n }\n}\n\nfunction paymentWasAttempted(\n safety: ProbeMeshCallSafety,\n receiptRefs: ReceiptRef[],\n) {\n return (\n safety.paymentStatus !== \"not_attempted\" ||\n safety.moneyMayHaveMoved ||\n receiptRefs.some((receiptRef) => receiptRef.type === \"payment_proof\")\n );\n}\n\nfunction findProtocolAdapter(\n manifest: ProviderManifest,\n protocolAdapters: ProviderProtocolAdapter[] | undefined,\n protocolMode = manifest.protocolMode,\n) {\n return protocolAdapters?.find(\n (protocolAdapter) => protocolAdapter.mode === protocolMode,\n );\n}\n\nfunction manifestForProtocol(\n manifest: ProviderManifest,\n protocolMode: string,\n): ProviderManifest {\n return protocolMode === manifest.protocolMode\n ? manifest\n : {\n ...manifest,\n protocolMode,\n };\n}\n\nfunction assertProtocolAdapters(\n protocolAdapters: ProviderProtocolAdapter[] | undefined,\n manifest: ProviderManifest,\n) {\n if (protocolAdapters === undefined) {\n return;\n }\n\n if (\n !Array.isArray(protocolAdapters) ||\n protocolAdapters.some(\n (protocolAdapter) =>\n !protocolAdapter ||\n typeof protocolAdapter !== \"object\" ||\n typeof protocolAdapter.mode !== \"string\" ||\n protocolAdapter.mode.length === 0,\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" requires protocolAdapters to be an array of protocol adapter objects.`,\n provider: manifest.id,\n });\n }\n}\n\nfunction assertHandlers(\n manifest: ProviderManifest,\n handlers: ProviderManifestHandlers,\n) {\n if (!handlers || typeof handlers !== \"object\" || Array.isArray(handlers)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" requires a handlers object.`,\n provider: manifest.id,\n });\n }\n\n const missingCapabilities = manifest.capabilities.filter(\n (capability) => typeof handlers[capability] !== \"function\",\n );\n\n if (missingCapabilities.length > 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" is missing handlers for capabilities: ${missingCapabilities.join(\n \", \",\n )}.`,\n provider: manifest.id,\n });\n }\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type { ProbeMeshAdapter } from \"../types\";\nimport { createAdapterFromManifest } from \"../providerKit/adapter\";\nimport type { ProviderManifest } from \"../providerKit/types\";\nimport {\n createMockPaymentProtocol,\n type MockPaymentProtocolOptions,\n} from \"./mockPaymentProtocol\";\n\nexport type PaidPriceLookupFailureMode =\n | \"none\"\n | \"timeout_after_payment\"\n | \"missing_delivery_receipt\";\n\nexport interface PaidPriceLookupProviderOptions {\n id?: string;\n displayName?: string;\n amountUsd?: number;\n prices?: Record<string, number>;\n mockPayment?: MockPaymentProtocolOptions;\n failureMode?: PaidPriceLookupFailureMode;\n}\n\nexport interface PaidPriceLookupData {\n symbol: string;\n currency: string;\n price: number;\n asOf: string;\n source: string;\n protocolMode?: string;\n paymentAuthorized: boolean;\n}\n\nconst DEFAULT_PAID_PRICES_USD: Record<string, number> = {\n BTC: 64000.25,\n ETH: 3200.12,\n SOL: 145.33,\n};\n\nexport function createPaidPriceLookupProvider(\n options: PaidPriceLookupProviderOptions = {},\n): ProbeMeshAdapter {\n const id = options.id ?? \"paid-price-provider\";\n const displayName = options.displayName ?? \"Paid Price Provider\";\n const amountUsd = options.amountUsd ?? 0.01;\n const prices = options.prices ?? DEFAULT_PAID_PRICES_USD;\n const failureMode = options.failureMode ?? \"none\";\n const mockPaymentOptions: MockPaymentProtocolOptions = {\n ...options.mockPayment,\n omitDeliveryReceipt:\n options.mockPayment?.omitDeliveryReceipt ||\n failureMode === \"missing_delivery_receipt\",\n };\n const manifest = createPaidPriceLookupManifest({\n id,\n displayName,\n amountUsd,\n });\n\n return createAdapterFromManifest(\n manifest,\n {\n \"price-lookup\": (request, context) => {\n const input = parsePriceLookupInput(request.input, id, context.callId);\n const symbol = input.symbol.toUpperCase();\n const currency = (input.currency ?? \"USD\").toUpperCase();\n\n if (failureMode === \"timeout_after_payment\") {\n throw new ProbeMeshError({\n code: \"timeout_after_payment\",\n message: `Paid price lookup demo timed out after payment authorization for provider \"${id}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n if (currency !== \"USD\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: `Paid price lookup demo only supports USD prices, received \"${currency}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n const price = prices[symbol];\n\n if (price === undefined) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Paid price lookup demo has no mock price for \"${symbol}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n return {\n data: {\n symbol,\n currency,\n price,\n asOf: context.startedAt.toISOString(),\n source: id,\n protocolMode: context.protocol?.mode,\n paymentAuthorized:\n context.protocol?.preparation?.metadata?.authorized === true,\n } satisfies PaidPriceLookupData,\n };\n },\n },\n {\n protocolAdapters: [createMockPaymentProtocol(mockPaymentOptions)],\n },\n );\n}\n\nfunction createPaidPriceLookupManifest(options: {\n id: string;\n displayName: string;\n amountUsd: number;\n}): ProviderManifest {\n return {\n id: options.id,\n displayName: options.displayName,\n capabilities: [\"price-lookup\"],\n protocolMode: \"mock-payment\",\n pricing: {\n unit: \"call\",\n amountUsd: options.amountUsd,\n currency: \"USD\",\n },\n inputSchema: {\n type: \"object\",\n properties: {\n symbol: {\n type: \"string\",\n },\n currency: {\n type: \"string\",\n },\n },\n required: [\"symbol\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n symbol: {\n type: \"string\",\n },\n currency: {\n type: \"string\",\n },\n price: {\n type: \"number\",\n },\n paymentAuthorized: {\n type: \"boolean\",\n },\n },\n required: [\"symbol\", \"currency\", \"price\", \"paymentAuthorized\"],\n },\n receipts: {\n payment: true,\n delivery: true,\n responseEvidence: false,\n },\n limits: {\n maxRequestsPerMinute: 60,\n },\n };\n}\n\nfunction parsePriceLookupInput(\n input: unknown,\n provider: string,\n callId: string,\n): {\n symbol: string;\n currency?: string;\n} {\n if (!input || typeof input !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input must be an object.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n const candidate = input as {\n symbol?: unknown;\n currency?: unknown;\n };\n\n if (typeof candidate.symbol !== \"string\" || candidate.symbol.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input requires a string symbol.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n if (\n candidate.currency !== undefined &&\n typeof candidate.currency !== \"string\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup currency must be a string when provided.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n return {\n symbol: candidate.symbol,\n currency: candidate.currency,\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\n\nimport {\n createProbeMeshCallAuditArtifact,\n type ProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\nimport { createProbeMesh } from \"./client\";\nimport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nimport {\n mergePaymentPreferences,\n paymentSelectionToCost,\n resolveProviderPaymentOption,\n validatePaymentPreferences,\n validatePaymentStrategy,\n} from \"./paymentOptions\";\nimport {\n assertProviderCatalog,\n findProviderCatalogMatches,\n type ProviderCatalog,\n type ProviderCatalogEntry,\n type ProviderCatalogMatch,\n} from \"./providerCatalog\";\nimport {\n verifyProviderCatalogPolicyBundleRuntime,\n type ProviderCatalogPolicyBundle,\n} from \"./providerCatalogPolicyBundle\";\nimport type {\n ProviderCatalogPolicyAdapterInventory,\n ProviderCatalogPolicyExpectedQuery,\n ProviderCatalogPolicyOptions,\n} from \"./providerCatalogPolicy\";\nimport type { ProviderCatalogArtifactStatus } from \"./providerCatalogArtifact\";\nimport type { ProviderProtocolMode } from \"./providerKit/types\";\nimport type {\n Cost,\n ProbeMeshAdapter,\n ProbeMeshAdapterCallRequest,\n ProbeMeshAdapterContext,\n ProbeMeshAttemptMetadata,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshCallTimeline,\n ProbeMeshErrorCode,\n ProbeMeshPricing,\n ProbeMeshPaymentPreferences,\n ProbeMeshPaymentSelection,\n ProbeMeshPaymentStrategy,\n ProbeMeshProviderHealthStatus,\n ProbeMeshProviderRouteAttempt,\n ProbeMeshRetryRequest,\n ProbeMeshRetrySafety,\n ProbeMeshRouteDecisionReason,\n ProbeMeshRouteExplanation,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEvent,\n ProbeMeshTimelineEventType,\n ProviderCatalogPolicyBundleAttestation,\n ReceiptRef,\n ReceiptType,\n} from \"./types\";\n\nexport type HostedTelemetryEventType = ProbeMeshTimelineEventType;\n\nexport interface HostedTelemetryEvent extends ProbeMeshTimelineEvent {}\n\nexport interface HostedProviderHealthOptions {\n enabled?: boolean;\n cooldownMs?: number;\n}\n\nexport interface HostedProviderCatalogPolicyOptions {\n catalog: ProviderCatalog;\n bundle?: ProviderCatalogPolicyBundle;\n enabled?: boolean;\n status?: ProviderCatalogArtifactStatus;\n protocolMode?: ProviderProtocolMode;\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n maxCostUsd?: number;\n requiredReceiptTypes?: ReceiptType[];\n providerIds?: string[];\n blockedProviderIds?: string[];\n}\n\nexport interface HostedAuditArtifactOptions {\n enabled?: boolean;\n onArtifact?: (\n artifact: ProbeMeshCallAuditArtifact,\n ) => void | Promise<void>;\n}\n\nexport interface HostedRouterOptions {\n adapters: ProbeMeshAdapter[];\n apiKeys?: string[];\n providerHealth?: HostedProviderHealthOptions;\n catalogPolicy?: HostedProviderCatalogPolicyOptions;\n auditArtifacts?: HostedAuditArtifactOptions;\n onTelemetryEvent?: (event: HostedTelemetryEvent) => void;\n}\n\nexport interface HostedRouter {\n handle(request: IncomingMessage, response: ServerResponse): Promise<void>;\n}\n\nexport interface StartHostedRouterOptions extends HostedRouterOptions {\n port: number;\n host?: string;\n}\n\nexport interface StartedHostedRouter {\n server: Server;\n url: string;\n close(): Promise<void>;\n}\n\ninterface HostedAttemptRecord {\n originalRequest: ProbeMeshCallRequest;\n attempt: ProbeMeshAttemptMetadata;\n outcome: \"completed\" | \"failed\";\n safety?: ProbeMeshCallSafety;\n receiptRefs?: ReceiptRef[];\n retrySafety: ProbeMeshRetrySafety;\n timeline: ProbeMeshCallTimeline;\n}\n\ninterface HostedAttemptStore {\n attempts: Map<string, HostedAttemptRecord>;\n attemptCounts: Map<string, number>;\n}\n\ninterface ResolvedHostedProviderHealthOptions {\n enabled: boolean;\n cooldownMs: number;\n}\n\ninterface ResolvedHostedProviderCatalogPolicyOptions {\n enabled: boolean;\n catalog?: ProviderCatalog;\n status: ProviderCatalogArtifactStatus;\n protocolMode?: ProviderProtocolMode;\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n maxCostUsd?: number;\n requiredReceiptTypes?: ReceiptType[];\n providerIds?: string[];\n blockedProviderIds?: string[];\n bundle?: ProviderCatalogPolicyBundle;\n bundlePolicy?: ProviderCatalogPolicyOptions;\n bundleQueries?: ProviderCatalogPolicyExpectedQuery[];\n bundleAdapterInventory?: ProviderCatalogPolicyAdapterInventory;\n bundleAttestation?: ProviderCatalogPolicyBundleAttestation;\n}\n\ninterface HostedCatalogPolicyPlan {\n enabled: boolean;\n effectiveMaxCostUsd?: number;\n matchesByProviderId: Map<string, ProviderCatalogMatch>;\n missingAdapterMatches: ProviderCatalogMatch[];\n catalogEntryByProviderId: Map<string, ProviderCatalogEntry>;\n}\n\ninterface ProviderHealthRecord {\n healthStatus: Extract<ProbeMeshProviderHealthStatus, \"unhealthy\">;\n lastFailureAt: string;\n cooldownUntil: string;\n consecutiveFailures: number;\n}\n\ninterface ProviderHealthStore {\n records: Map<string, ProviderHealthRecord>;\n}\n\nconst DEFAULT_PROVIDER_HEALTH_COOLDOWN_MS = 60_000;\n\nexport function createHostedRouter(options: HostedRouterOptions): HostedRouter {\n const attemptStore = createAttemptStore();\n const providerHealthStore = createProviderHealthStore();\n const providerHealthOptions = resolveProviderHealthOptions(\n options.providerHealth,\n );\n const catalogPolicyOptions = resolveProviderCatalogPolicyOptions(\n options.catalogPolicy,\n options.adapters,\n );\n\n return {\n async handle(request, response) {\n const route = parseHostedRoute(request);\n\n if (!route) {\n writeJson(response, 404, {\n code: \"provider_unavailable\",\n message: \"Route not found.\",\n status: \"failed\",\n });\n return;\n }\n\n const routeId = `route_${randomUUID()}`;\n const timeline = createTimeline(routeId);\n\n try {\n assertAuthorized(request, options.apiKeys);\n\n if (route.kind === \"call\") {\n const body = await readJsonBody(request);\n const callRequest = body as ProbeMeshCallRequest;\n const attempt = createInitialAttempt(callRequest);\n\n await executeHostedCall({\n options,\n response,\n timeline,\n attemptStore,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n originalRequest: callRequest,\n callRequest,\n attempt,\n });\n return;\n }\n\n const body = await readOptionalJsonBody(request);\n const retryRequest = validateRetryBody(route.callId, body);\n\n await executeHostedRetry({\n options,\n response,\n timeline,\n attemptStore,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n retryRequest,\n });\n } catch (error) {\n emitPaymentAndReceiptTelemetry(options, timeline, {\n callId: isProbeMeshError(error) ? error.callId : undefined,\n capability: isProbeMeshError(error) ? error.capability : undefined,\n provider: isProbeMeshError(error) ? error.provider : undefined,\n safety: isProbeMeshError(error) ? error.safety : undefined,\n receiptRefs: isProbeMeshError(error) ? error.receiptRefs : undefined,\n attempt: isProbeMeshError(error) ? error.attempt : undefined,\n });\n emitFailureTelemetry(options, timeline, error);\n writeHostedError(response, error, timeline, retrySafetyForError(error));\n }\n },\n };\n}\n\nfunction createAttemptStore(): HostedAttemptStore {\n return {\n attempts: new Map(),\n attemptCounts: new Map(),\n };\n}\n\nfunction createProviderHealthStore(): ProviderHealthStore {\n return {\n records: new Map(),\n };\n}\n\nfunction resolveProviderHealthOptions(\n options: HostedProviderHealthOptions | undefined,\n): ResolvedHostedProviderHealthOptions {\n const requestedCooldownMs = options?.cooldownMs;\n const cooldownMs =\n typeof requestedCooldownMs === \"number\" &&\n Number.isFinite(requestedCooldownMs) &&\n requestedCooldownMs >= 0\n ? requestedCooldownMs\n : DEFAULT_PROVIDER_HEALTH_COOLDOWN_MS;\n\n return {\n enabled: options?.enabled ?? true,\n cooldownMs,\n };\n}\n\nfunction resolveProviderCatalogPolicyOptions(\n options: HostedProviderCatalogPolicyOptions | undefined,\n adapters: ProbeMeshAdapter[],\n): ResolvedHostedProviderCatalogPolicyOptions {\n if (!options || options.enabled === false) {\n return {\n enabled: false,\n status: options?.status ?? \"ready\",\n };\n }\n\n assertProviderCatalog(options.catalog);\n\n if (\n options.maxCostUsd !== undefined &&\n (typeof options.maxCostUsd !== \"number\" ||\n !Number.isFinite(options.maxCostUsd) ||\n options.maxCostUsd < 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Hosted provider catalog policy maxCostUsd must be a non-negative finite number.\",\n });\n }\n\n validateStringArrayOption(\n options.providerIds,\n \"Hosted provider catalog policy providerIds\",\n );\n validateStringArrayOption(\n options.blockedProviderIds,\n \"Hosted provider catalog policy blockedProviderIds\",\n );\n\n if (\n options.requiredReceiptTypes !== undefined &&\n (!Array.isArray(options.requiredReceiptTypes) ||\n options.requiredReceiptTypes.some((receiptType) => !isReceiptType(receiptType)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Hosted provider catalog policy requiredReceiptTypes must contain known receipt types.\",\n });\n }\n\n if (\n options.status !== undefined &&\n options.status !== \"ready\" &&\n options.status !== \"rejected\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n 'Hosted provider catalog policy status must be \"ready\" or \"rejected\".',\n });\n }\n\n if (\n options.protocolMode !== undefined &&\n (typeof options.protocolMode !== \"string\" || options.protocolMode.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Hosted provider catalog policy protocolMode must be a non-empty string.\",\n });\n }\n\n validatePaymentPreferences(options.paymentPreferences, \"hosted catalog policy\");\n validatePaymentStrategy(options.paymentStrategy, \"hosted catalog policy\");\n\n const bundlePolicy = createBundlePolicyOptions(options);\n const bundleAdapterInventory = createAdapterInventory(adapters);\n const bundleQueries = options.bundle?.queries;\n const bundleVerification = options.bundle\n ? verifyProviderCatalogPolicyBundleRuntime({\n bundle: options.bundle,\n catalog: options.catalog,\n catalogPolicy: bundlePolicy,\n adapterInventory: bundleAdapterInventory,\n queries: bundleQueries,\n })\n : undefined;\n\n if (bundleVerification && !bundleVerification.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Hosted provider catalog policy bundle does not match runtime inputs: ${formatBundleVerificationErrors(\n bundleVerification.errors,\n )}`,\n });\n }\n\n return {\n enabled: true,\n catalog: options.catalog,\n status: options.status ?? \"ready\",\n protocolMode: options.protocolMode,\n paymentPreferences: options.paymentPreferences,\n paymentStrategy: options.paymentStrategy,\n maxCostUsd: options.maxCostUsd,\n requiredReceiptTypes: options.requiredReceiptTypes,\n providerIds: options.providerIds,\n blockedProviderIds: options.blockedProviderIds,\n bundle: options.bundle,\n bundlePolicy,\n bundleQueries,\n bundleAdapterInventory,\n bundleAttestation: bundleVerification?.attestation,\n };\n}\n\nfunction createBundlePolicyOptions(\n options: HostedProviderCatalogPolicyOptions,\n): ProviderCatalogPolicyOptions | undefined {\n const policy: ProviderCatalogPolicyOptions = {};\n\n if (options.enabled !== undefined) {\n policy.enabled = options.enabled;\n }\n\n if (options.status !== undefined) {\n policy.status = options.status;\n }\n\n if (options.protocolMode !== undefined) {\n policy.protocolMode = options.protocolMode;\n }\n\n if (options.paymentPreferences !== undefined) {\n policy.paymentPreferences = options.paymentPreferences;\n }\n\n if (options.paymentStrategy !== undefined) {\n policy.paymentStrategy = options.paymentStrategy;\n }\n\n if (options.maxCostUsd !== undefined) {\n policy.maxCostUsd = options.maxCostUsd;\n }\n\n if (options.requiredReceiptTypes !== undefined) {\n policy.requiredReceiptTypes = options.requiredReceiptTypes;\n }\n\n if (options.providerIds !== undefined) {\n policy.providerIds = options.providerIds;\n }\n\n if (options.blockedProviderIds !== undefined) {\n policy.blockedProviderIds = options.blockedProviderIds;\n }\n\n return Object.keys(policy).length > 0 ? policy : undefined;\n}\n\nfunction createAdapterInventory(\n adapters: ProbeMeshAdapter[],\n): ProviderCatalogPolicyAdapterInventory {\n return adapters.map((adapter) => ({\n id: adapter.id,\n capabilities: [...adapter.capabilities],\n ...(adapter.pricing !== undefined ? { pricing: adapter.pricing } : {}),\n ...(adapter.paymentOptions !== undefined\n ? { paymentOptions: adapter.paymentOptions }\n : {}),\n }));\n}\n\nfunction formatBundleVerificationErrors(\n errors: Array<{ path: string; message: string }>,\n) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n\nfunction validateStringArrayOption(value: unknown, label: string) {\n if (\n value !== undefined &&\n (!Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${label} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isReceiptType(value: unknown): value is ReceiptType {\n return (\n value === \"payment_proof\" ||\n value === \"settlement_confirmation\" ||\n value === \"provider_delivery\" ||\n value === \"provider_response_evidence\" ||\n value === \"authorization_decision\"\n );\n}\n\ntype HostedRoute =\n | {\n kind: \"call\";\n }\n | {\n kind: \"retry\";\n callId: string;\n };\n\nfunction parseHostedRoute(request: IncomingMessage): HostedRoute | undefined {\n if (request.method !== \"POST\" || !request.url) {\n return undefined;\n }\n\n const url = new URL(request.url, \"http://localhost\");\n\n if (url.pathname === \"/v1/calls\") {\n return {\n kind: \"call\",\n };\n }\n\n const retryMatch = url.pathname.match(/^\\/v1\\/calls\\/(.+)\\/retry$/);\n\n if (retryMatch) {\n return {\n kind: \"retry\",\n callId: decodeURIComponent(retryMatch[1]),\n };\n }\n\n return undefined;\n}\n\nasync function executeHostedCall(options: {\n options: HostedRouterOptions;\n response: ServerResponse;\n timeline: ProbeMeshCallTimeline;\n attemptStore: HostedAttemptStore;\n providerHealthStore: ProviderHealthStore;\n providerHealthOptions: ResolvedHostedProviderHealthOptions;\n catalogPolicyOptions: ResolvedHostedProviderCatalogPolicyOptions;\n originalRequest: ProbeMeshCallRequest;\n callRequest: ProbeMeshCallRequest;\n attempt: ProbeMeshAttemptMetadata;\n}) {\n const {\n options: routerOptions,\n response,\n timeline,\n attemptStore,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n originalRequest,\n callRequest,\n attempt,\n } = options;\n const executableRequest: ProbeMeshCallRequest = {\n ...callRequest,\n idempotencyKey: attempt.attemptId,\n };\n const routePlan = createRoutePlan(\n routerOptions.adapters,\n executableRequest,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n );\n\n emitTelemetry(routerOptions, timeline, {\n type: \"call.requested\",\n callId: attempt.attemptId,\n capability: executableRequest.capability,\n attempt,\n attestation: routePlan.attestation,\n });\n\n if (routePlan.eligibleAdapters.length === 0) {\n const error = createNoEligibleProviderError(executableRequest, routePlan);\n const retrySafety = retrySafetyForError(error);\n\n emitFailureTelemetry(\n routerOptions,\n timeline,\n error,\n attempt,\n routePlan.attestation,\n );\n await emitCallAuditArtifact(routerOptions, {\n request: executableRequest,\n error,\n timeline,\n retrySafety,\n attempt,\n route: createRouteMetadata(\n timeline.routeId,\n routePlan.explanation,\n undefined,\n routePlan.attestation,\n undefined,\n routePlan.paymentStrategy,\n ),\n });\n storeAttempt(attemptStore, {\n originalRequest,\n attempt,\n outcome: \"failed\",\n retrySafety,\n timeline,\n });\n writeHostedError(\n response,\n error,\n timeline,\n retrySafety,\n attempt,\n createRouteMetadata(\n timeline.routeId,\n routePlan.explanation,\n undefined,\n routePlan.attestation,\n undefined,\n routePlan.paymentStrategy,\n ),\n );\n return;\n }\n\n let lastError: ProbeMeshError | undefined;\n\n for (const [index, candidate] of routePlan.eligibleAdapters.entries()) {\n const { adapter, paymentSelection } = candidate;\n\n markRouteAttempt(routePlan.explanation, adapter.id, {\n status: \"attempted\",\n reason: \"eligible\",\n paymentSelection,\n paymentStrategy: routePlan.paymentStrategy,\n paymentOptionScore: paymentSelection.score,\n paymentOptionScoreReasons: paymentSelection.scoreReasons,\n });\n\n try {\n const client = createProbeMesh({\n adapters: createTimelineAdapters(\n {\n ...routerOptions,\n adapters: [adapter],\n },\n timeline,\n attempt,\n routePlan.attestation,\n ),\n });\n const result = await client.call({\n ...executableRequest,\n providerPreferences: {\n allowedProviders: [adapter.id],\n },\n });\n const selectedPayment =\n result.route?.paymentSelection ?? paymentSelection;\n\n clearProviderHealth(\n providerHealthStore,\n providerHealthOptions,\n result.capability,\n adapter.id,\n );\n markRouteAttempt(routePlan.explanation, adapter.id, {\n status: \"succeeded\",\n reason: \"selected\",\n paymentEvidence: hasPaymentEvidence(result.safety, result.receiptRefs),\n healthStatus: providerHealthOptions.enabled ? \"healthy\" : undefined,\n paymentSelection: selectedPayment,\n paymentStrategy: routePlan.paymentStrategy,\n paymentOptionScore: selectedPayment?.score,\n paymentOptionScoreReasons: selectedPayment?.scoreReasons,\n });\n routePlan.explanation.selectedProviderId = result.provider.id;\n routePlan.explanation.stopReason = \"stopped_completed\";\n routePlan.explanation.fallbackUsed =\n routePlan.explanation.fallbackCount > 0;\n\n emitTelemetry(routerOptions, timeline, {\n type: \"provider.selected\",\n callId: result.callId,\n capability: result.capability,\n provider: result.provider.id,\n attempt,\n attestation: routePlan.attestation,\n });\n emitPaymentAndReceiptTelemetry(routerOptions, timeline, {\n callId: result.callId,\n capability: result.capability,\n provider: result.provider.id,\n safety: result.safety,\n receiptRefs: result.receiptRefs,\n attempt,\n attestation: routePlan.attestation,\n });\n emitTelemetry(routerOptions, timeline, {\n type: \"call.completed\",\n callId: result.callId,\n capability: result.capability,\n provider: result.provider.id,\n status: \"completed\",\n safety: result.safety,\n attempt,\n attestation: routePlan.attestation,\n });\n\n const retrySafety = retrySafetyForCompletedCall();\n const hostedResult = addHostedRouteMetadata(\n result,\n timeline.routeId,\n timeline,\n retrySafety,\n attempt,\n routePlan.explanation,\n routePlan.attestation,\n selectedPayment,\n routePlan.paymentStrategy,\n );\n\n storeAttempt(attemptStore, {\n originalRequest,\n attempt,\n outcome: \"completed\",\n safety: hostedResult.safety,\n receiptRefs: hostedResult.receiptRefs,\n retrySafety,\n timeline,\n });\n await emitCallAuditArtifact(routerOptions, {\n request: executableRequest,\n response: hostedResult,\n timeline,\n retrySafety,\n attempt,\n route: hostedResult.route,\n });\n writeJson(response, 200, hostedResult);\n return;\n } catch (error) {\n const normalizedError = toHostedProbeMeshError(error);\n const paymentEvidence = moneyMayHaveMoved(\n normalizedError.safety,\n normalizedError.receiptRefs,\n );\n const retrySafety = retrySafetyForError(normalizedError);\n const healthRecord =\n shouldRememberProviderHealthFailure(\n normalizedError,\n paymentEvidence,\n retrySafety,\n )\n ? markProviderUnhealthy(\n providerHealthStore,\n providerHealthOptions,\n executableRequest.capability,\n adapter.id,\n )\n : undefined;\n\n lastError = normalizedError;\n markRouteAttempt(routePlan.explanation, adapter.id, {\n status: \"failed\",\n reason: paymentEvidence\n ? \"stopped_payment_evidence\"\n : \"fallback_after_failure\",\n errorCode: normalizedError.code,\n paymentEvidence,\n ...(healthRecord ?? {}),\n message: normalizedError.message,\n });\n\n const canFallback =\n !paymentEvidence &&\n retrySafety.safeToAutoRetry &&\n index < routePlan.eligibleAdapters.length - 1;\n\n if (canFallback) {\n routePlan.explanation.fallbackCount += 1;\n routePlan.explanation.fallbackUsed = true;\n continue;\n }\n\n routePlan.explanation.stopReason = paymentEvidence\n ? \"stopped_payment_evidence\"\n : retrySafety.safeToAutoRetry\n ? \"no_eligible_provider\"\n : \"stopped_not_retryable\";\n routePlan.explanation.fallbackUsed =\n routePlan.explanation.fallbackCount > 0;\n break;\n }\n }\n\n const normalizedError =\n lastError ??\n createNoEligibleProviderError(executableRequest, routePlan);\n const retrySafety = retrySafetyForError(normalizedError);\n\n emitPaymentAndReceiptTelemetry(routerOptions, timeline, {\n callId: normalizedError.callId,\n capability: normalizedError.capability,\n provider: normalizedError.provider,\n safety: normalizedError.safety,\n receiptRefs: normalizedError.receiptRefs,\n attempt,\n attestation: routePlan.attestation,\n });\n emitFailureTelemetry(\n routerOptions,\n timeline,\n normalizedError,\n attempt,\n routePlan.attestation,\n );\n await emitCallAuditArtifact(routerOptions, {\n request: executableRequest,\n error: normalizedError,\n timeline,\n retrySafety,\n attempt,\n route: createRouteMetadata(\n timeline.routeId,\n routePlan.explanation,\n undefined,\n routePlan.attestation,\n undefined,\n routePlan.paymentStrategy,\n ),\n });\n storeAttempt(attemptStore, {\n originalRequest,\n attempt,\n outcome: \"failed\",\n safety: normalizedError.safety,\n receiptRefs: normalizedError.receiptRefs,\n retrySafety,\n timeline,\n });\n writeHostedError(\n response,\n normalizedError,\n timeline,\n retrySafety,\n attempt,\n createRouteMetadata(\n timeline.routeId,\n routePlan.explanation,\n undefined,\n routePlan.attestation,\n undefined,\n routePlan.paymentStrategy,\n ),\n );\n}\n\ninterface HostedRoutePlan {\n eligibleAdapters: HostedRouteCandidate[];\n explanation: ProbeMeshRouteExplanation;\n catalogPolicyPlan: HostedCatalogPolicyPlan;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n attestation?: ProviderCatalogPolicyBundleAttestation;\n}\n\ninterface HostedRouteCandidate {\n adapter: ProbeMeshAdapter;\n paymentSelection: ProbeMeshPaymentSelection;\n}\n\nfunction createRoutePlan(\n adapters: ProbeMeshAdapter[],\n request: ProbeMeshCallRequest,\n providerHealthStore: ProviderHealthStore,\n providerHealthOptions: ResolvedHostedProviderHealthOptions,\n catalogPolicyOptions: ResolvedHostedProviderCatalogPolicyOptions,\n): HostedRoutePlan {\n const allowedProviders = request.providerPreferences?.allowedProviders;\n const blockedProviders = request.providerPreferences?.blockedProviders ?? [];\n const attempts: ProbeMeshProviderRouteAttempt[] = [];\n const eligibleAdapters: HostedRouteCandidate[] = [];\n const plannedAt = new Date();\n const effectiveMaxCostUsd = strictestMaxCostUsd(\n request.constraints?.maxCostUsd,\n catalogPolicyOptions.maxCostUsd,\n );\n const catalogPolicyPlan = createCatalogPolicyPlan(\n adapters,\n request,\n catalogPolicyOptions,\n effectiveMaxCostUsd,\n );\n const paymentStrategy =\n request.paymentStrategy ?? catalogPolicyOptions.paymentStrategy;\n const bundleVerification = verifyPolicyBundleCapability(\n catalogPolicyOptions,\n request.capability,\n );\n const attestation = bundleVerification?.attestation;\n const bundleBlocksCapability =\n attestation !== undefined && !bundleVerification?.valid;\n\n for (const adapter of adapters) {\n const pricing = getPricing(adapter, request.capability);\n const paymentPreferences = mergePaymentPreferences(\n catalogPolicyOptions.paymentPreferences,\n request.paymentPreferences,\n );\n const paymentResolution = resolveProviderPaymentOption({\n providerId: adapter.id,\n providerMode: adapter.mode ?? \"hosted\",\n capabilities: adapter.capabilities,\n capability: request.capability,\n pricing: adapter.pricing,\n paymentOptions: adapter.paymentOptions,\n paymentPreferences,\n paymentStrategy,\n });\n const paymentSelection = paymentResolution.selection;\n const cost = paymentSelectionToCost(paymentSelection) ?? pricingToCost(pricing);\n const catalogMatch = catalogPolicyPlan.matchesByProviderId.get(adapter.id);\n const catalogEntry = catalogPolicyPlan.catalogEntryByProviderId.get(adapter.id);\n const baseAttempt = {\n providerId: adapter.id,\n cost,\n paymentSelection,\n paymentStrategy,\n paymentOptionScore: paymentSelection?.score,\n paymentOptionScoreReasons: paymentSelection?.scoreReasons,\n ...catalogRouteMetadata(catalogMatch, catalogEntry),\n };\n const healthMetadata = getProviderHealthMetadata(\n providerHealthStore,\n providerHealthOptions,\n request.capability,\n adapter.id,\n plannedAt,\n );\n\n if (!adapter.capabilities.includes(request.capability)) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_capability_mismatch\",\n });\n continue;\n }\n\n if (bundleBlocksCapability) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_policy_bundle_uncovered\",\n attestation,\n catalogPolicyReason:\n attestation?.reason ??\n `Capability \"${request.capability}\" is not covered by the policy bundle.`,\n });\n continue;\n }\n\n if (allowedProviders && !allowedProviders.includes(adapter.id)) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_allowed_provider\",\n });\n continue;\n }\n\n if (blockedProviders.includes(adapter.id)) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_blocked_provider\",\n });\n continue;\n }\n\n if (!paymentSelection) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_payment_preferences\",\n paymentOptionReason: paymentResolution.reason,\n message: paymentResolution.reason,\n });\n continue;\n }\n\n if (\n effectiveMaxCostUsd !== undefined &&\n cost &&\n cost.amountUsd > effectiveMaxCostUsd\n ) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_budget_exceeded\",\n budgetExceeded: true,\n message: `Capability \"${request.capability}\" costs $${cost.amountUsd.toFixed(\n 2,\n )}, which exceeds maxCostUsd $${effectiveMaxCostUsd.toFixed(\n 2,\n )}.`,\n });\n continue;\n }\n\n if (catalogPolicyPlan.enabled && !catalogMatch) {\n attempts.push({\n ...baseAttempt,\n status: \"skipped\",\n reason: \"skipped_catalog_policy\",\n catalogPolicyReason: `Provider \"${adapter.id}\" does not match the hosted catalog policy for capability \"${request.capability}\".`,\n });\n continue;\n }\n\n if (healthMetadata.healthStatus === \"unhealthy\") {\n attempts.push({\n ...baseAttempt,\n ...healthMetadata,\n status: \"skipped\",\n reason: \"skipped_unhealthy_provider\",\n message: `Provider \"${adapter.id}\" is cooling down after a recent safe pre-payment failure.`,\n });\n continue;\n }\n\n attempts.push({\n ...baseAttempt,\n ...healthMetadata,\n status: \"considered\",\n reason: \"eligible\",\n });\n eligibleAdapters.push({\n adapter,\n paymentSelection,\n });\n }\n\n for (const match of bundleBlocksCapability\n ? []\n : catalogPolicyPlan.missingAdapterMatches) {\n attempts.push({\n providerId: match.providerId,\n cost: match.cost,\n status: \"skipped\",\n reason: \"skipped_catalog_adapter_missing\",\n catalogArtifactId: match.entry.artifactId,\n catalogStatus: match.entry.status,\n catalogMatchReasons: match.reasons,\n catalogPolicyReason: `Catalog provider \"${match.providerId}\" matched policy but has no registered adapter.`,\n });\n }\n\n return {\n eligibleAdapters,\n catalogPolicyPlan,\n paymentStrategy,\n attestation,\n explanation: {\n consideredProviders: attempts.map((attempt) => attempt.providerId),\n fallbackUsed: false,\n fallbackCount: 0,\n stopReason: eligibleAdapters.length > 0 ? \"eligible\" : \"no_eligible_provider\",\n attempts,\n },\n };\n}\n\nfunction verifyPolicyBundleCapability(\n catalogPolicyOptions: ResolvedHostedProviderCatalogPolicyOptions,\n capability: string,\n) {\n if (\n !catalogPolicyOptions.bundle ||\n !catalogPolicyOptions.catalog ||\n !catalogPolicyOptions.bundleAdapterInventory\n ) {\n return undefined;\n }\n\n return verifyProviderCatalogPolicyBundleRuntime({\n bundle: catalogPolicyOptions.bundle,\n catalog: catalogPolicyOptions.catalog,\n catalogPolicy: catalogPolicyOptions.bundlePolicy,\n adapterInventory: catalogPolicyOptions.bundleAdapterInventory,\n queries: catalogPolicyOptions.bundleQueries,\n capability,\n });\n}\n\nfunction createCatalogPolicyPlan(\n adapters: ProbeMeshAdapter[],\n request: ProbeMeshCallRequest,\n catalogPolicyOptions: ResolvedHostedProviderCatalogPolicyOptions,\n effectiveMaxCostUsd: number | undefined,\n): HostedCatalogPolicyPlan {\n const emptyPlan = {\n enabled: false,\n effectiveMaxCostUsd,\n matchesByProviderId: new Map<string, ProviderCatalogMatch>(),\n missingAdapterMatches: [],\n catalogEntryByProviderId: new Map<string, ProviderCatalogEntry>(),\n };\n\n if (!catalogPolicyOptions.enabled || !catalogPolicyOptions.catalog) {\n return emptyPlan;\n }\n\n const matches = findProviderCatalogMatches(catalogPolicyOptions.catalog, {\n capability: request.capability,\n protocolMode: catalogPolicyOptions.protocolMode,\n paymentPreferences: mergePaymentPreferences(\n catalogPolicyOptions.paymentPreferences,\n request.paymentPreferences,\n ),\n paymentStrategy:\n request.paymentStrategy ?? catalogPolicyOptions.paymentStrategy,\n maxCostUsd: effectiveMaxCostUsd,\n requiredReceiptTypes: catalogPolicyOptions.requiredReceiptTypes,\n providerIds: catalogPolicyOptions.providerIds,\n blockedProviderIds: catalogPolicyOptions.blockedProviderIds,\n status: catalogPolicyOptions.status,\n });\n const registeredAdapterIds = new Set(adapters.map((adapter) => adapter.id));\n const matchesByProviderId = new Map<string, ProviderCatalogMatch>();\n const missingAdapterMatches: ProviderCatalogMatch[] = [];\n\n for (const match of matches) {\n if (!matchesByProviderId.has(match.providerId)) {\n matchesByProviderId.set(match.providerId, match);\n }\n\n if (\n !registeredAdapterIds.has(match.providerId) &&\n requestAllowsProvider(request, match.providerId)\n ) {\n missingAdapterMatches.push(match);\n }\n }\n\n return {\n enabled: true,\n effectiveMaxCostUsd,\n matchesByProviderId,\n missingAdapterMatches,\n catalogEntryByProviderId: createCatalogEntryIndex(catalogPolicyOptions.catalog),\n };\n}\n\nfunction createCatalogEntryIndex(catalog: ProviderCatalog) {\n const entries = new Map<string, ProviderCatalogEntry>();\n\n for (const entry of catalog.entries) {\n if (!entries.has(entry.provider.id)) {\n entries.set(entry.provider.id, entry);\n }\n }\n\n return entries;\n}\n\nfunction requestAllowsProvider(\n request: ProbeMeshCallRequest,\n providerId: string,\n) {\n const allowedProviders = request.providerPreferences?.allowedProviders;\n const blockedProviders = request.providerPreferences?.blockedProviders ?? [];\n\n return (\n (!allowedProviders || allowedProviders.includes(providerId)) &&\n !blockedProviders.includes(providerId)\n );\n}\n\nfunction catalogRouteMetadata(\n match: ProviderCatalogMatch | undefined,\n entry: ProviderCatalogEntry | undefined,\n): Pick<\n ProbeMeshProviderRouteAttempt,\n | \"catalogArtifactId\"\n | \"catalogStatus\"\n | \"catalogMatchReasons\"\n | \"catalogPolicyReason\"\n> {\n if (match) {\n return {\n catalogArtifactId: match.entry.artifactId,\n catalogStatus: match.entry.status,\n catalogMatchReasons: match.reasons,\n };\n }\n\n if (entry) {\n return {\n catalogArtifactId: entry.artifactId,\n catalogStatus: entry.status,\n };\n }\n\n return {};\n}\n\nfunction strictestMaxCostUsd(\n requestMaxCostUsd: number | undefined,\n policyMaxCostUsd: number | undefined,\n) {\n if (requestMaxCostUsd === undefined) {\n return policyMaxCostUsd;\n }\n\n if (policyMaxCostUsd === undefined) {\n return requestMaxCostUsd;\n }\n\n return Math.min(requestMaxCostUsd, policyMaxCostUsd);\n}\n\nfunction createNoEligibleProviderError(\n request: ProbeMeshCallRequest,\n routePlan: HostedRoutePlan,\n) {\n const budgetAttempt = routePlan.explanation.attempts.find(\n (attempt) => attempt.reason === \"skipped_budget_exceeded\",\n );\n\n if (budgetAttempt) {\n return new ProbeMeshError({\n code: \"budget_exceeded\",\n message:\n budgetAttempt.message ??\n `No provider for capability \"${request.capability}\" fits maxCostUsd.`,\n capability: request.capability,\n provider: budgetAttempt.providerId,\n callId: request.idempotencyKey,\n });\n }\n\n const uncoveredAttempt = routePlan.explanation.attempts.find(\n (attempt) => attempt.reason === \"skipped_policy_bundle_uncovered\",\n );\n\n if (uncoveredAttempt) {\n return new ProbeMeshError({\n code: \"provider_unavailable\",\n message:\n uncoveredAttempt.catalogPolicyReason ??\n `Capability \"${request.capability}\" is not covered by the policy bundle.`,\n capability: request.capability,\n callId: request.idempotencyKey,\n });\n }\n\n const paymentAttempt = routePlan.explanation.attempts.find(\n (attempt) => attempt.reason === \"skipped_payment_preferences\",\n );\n\n if (paymentAttempt) {\n return new ProbeMeshError({\n code: \"provider_unavailable\",\n message:\n paymentAttempt.message ??\n `No provider for capability \"${request.capability}\" matches paymentPreferences.`,\n capability: request.capability,\n provider: paymentAttempt.providerId,\n callId: request.idempotencyKey,\n });\n }\n\n return new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `No adapter is available for capability \"${request.capability}\".`,\n capability: request.capability,\n callId: request.idempotencyKey,\n });\n}\n\nfunction providerHealthKey(capability: string, providerId: string) {\n return `${capability}\\u0000${providerId}`;\n}\n\nfunction getProviderHealthMetadata(\n store: ProviderHealthStore,\n options: ResolvedHostedProviderHealthOptions,\n capability: string,\n providerId: string,\n now: Date,\n): Pick<\n ProbeMeshProviderRouteAttempt,\n \"healthStatus\" | \"lastFailureAt\" | \"cooldownUntil\" | \"consecutiveFailures\"\n> {\n if (!options.enabled) {\n return {};\n }\n\n const key = providerHealthKey(capability, providerId);\n const record = store.records.get(key);\n\n if (!record) {\n return {\n healthStatus: \"healthy\",\n };\n }\n\n if (Date.parse(record.cooldownUntil) <= now.getTime()) {\n store.records.delete(key);\n return {\n healthStatus: \"healthy\",\n };\n }\n\n return record;\n}\n\nfunction markProviderUnhealthy(\n store: ProviderHealthStore,\n options: ResolvedHostedProviderHealthOptions,\n capability: string,\n providerId: string,\n): ProviderHealthRecord | undefined {\n if (!options.enabled) {\n return undefined;\n }\n\n const key = providerHealthKey(capability, providerId);\n const previousRecord = store.records.get(key);\n const failedAt = new Date();\n const record: ProviderHealthRecord = {\n healthStatus: \"unhealthy\",\n lastFailureAt: failedAt.toISOString(),\n cooldownUntil: new Date(\n failedAt.getTime() + options.cooldownMs,\n ).toISOString(),\n consecutiveFailures: (previousRecord?.consecutiveFailures ?? 0) + 1,\n };\n\n store.records.set(key, record);\n return record;\n}\n\nfunction clearProviderHealth(\n store: ProviderHealthStore,\n options: ResolvedHostedProviderHealthOptions,\n capability: string,\n providerId: string,\n) {\n if (!options.enabled) {\n return;\n }\n\n store.records.delete(providerHealthKey(capability, providerId));\n}\n\nfunction shouldRememberProviderHealthFailure(\n error: ProbeMeshError,\n paymentEvidence: boolean,\n retrySafety: ProbeMeshRetrySafety,\n) {\n return (\n !paymentEvidence &&\n retrySafety.safeToAutoRetry &&\n (error.code === \"provider_unavailable\" ||\n error.code === \"provider_timeout\")\n );\n}\n\nfunction markRouteAttempt(\n explanation: ProbeMeshRouteExplanation,\n providerId: string,\n updates: Partial<ProbeMeshProviderRouteAttempt>,\n) {\n const routeAttempt = explanation.attempts.find(\n (attempt) => attempt.providerId === providerId,\n );\n\n if (!routeAttempt) {\n return;\n }\n\n Object.assign(routeAttempt, updates);\n}\n\nfunction createRouteMetadata(\n routeId: string,\n explanation: ProbeMeshRouteExplanation,\n selectedProviderId?: string,\n attestation?: ProviderCatalogPolicyBundleAttestation,\n paymentSelection?: ProbeMeshPaymentSelection,\n paymentStrategy?: ProbeMeshPaymentStrategy,\n): ProbeMeshRouteMetadata {\n return {\n routeId,\n mode: \"hosted\",\n selectedProviderId,\n paymentStrategy,\n paymentSelection,\n explanation,\n attestation,\n };\n}\n\nasync function executeHostedRetry(options: {\n options: HostedRouterOptions;\n response: ServerResponse;\n timeline: ProbeMeshCallTimeline;\n attemptStore: HostedAttemptStore;\n providerHealthStore: ProviderHealthStore;\n providerHealthOptions: ResolvedHostedProviderHealthOptions;\n catalogPolicyOptions: ResolvedHostedProviderCatalogPolicyOptions;\n retryRequest: ProbeMeshRetryRequest;\n}) {\n const {\n options: routerOptions,\n response,\n timeline,\n attemptStore,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n retryRequest,\n } = options;\n\n emitTelemetry(routerOptions, timeline, {\n type: \"retry.requested\",\n callId: retryRequest.callId,\n });\n\n const sourceAttempt = attemptStore.attempts.get(retryRequest.callId);\n\n if (!sourceAttempt) {\n const retrySafety = notRetryableSafety();\n const error = new ProbeMeshError({\n code: \"retry_not_available\",\n message: `No hosted attempt is available for callId \"${retryRequest.callId}\".`,\n callId: retryRequest.callId,\n retrySafety,\n });\n\n emitBlockedRetry(routerOptions, timeline, error);\n writeHostedError(response, error, timeline, retrySafety);\n return;\n }\n\n if (!sourceAttempt.retrySafety.safeToAutoRetry) {\n const error = new ProbeMeshError({\n code: \"retry_not_available\",\n message: `Hosted attempt \"${retryRequest.callId}\" is not safe to retry.`,\n callId: sourceAttempt.attempt.attemptId,\n receiptRefs: sourceAttempt.receiptRefs,\n safety: sourceAttempt.safety,\n retrySafety: sourceAttempt.retrySafety,\n attempt: sourceAttempt.attempt,\n });\n\n emitBlockedRetry(routerOptions, timeline, error);\n writeHostedError(\n response,\n error,\n timeline,\n sourceAttempt.retrySafety,\n sourceAttempt.attempt,\n );\n return;\n }\n\n const retryAttempt = createRetryAttempt(\n attemptStore,\n sourceAttempt,\n retryRequest.idempotencyKey,\n );\n const retryCallRequest: ProbeMeshCallRequest = {\n ...sourceAttempt.originalRequest,\n idempotencyKey: retryAttempt.attemptId,\n };\n\n await executeHostedCall({\n options: routerOptions,\n response,\n timeline,\n attemptStore,\n providerHealthStore,\n providerHealthOptions,\n catalogPolicyOptions,\n originalRequest: sourceAttempt.originalRequest,\n callRequest: retryCallRequest,\n attempt: retryAttempt,\n });\n}\n\nfunction emitBlockedRetry(\n options: HostedRouterOptions,\n timeline: ProbeMeshCallTimeline,\n error: ProbeMeshError,\n) {\n emitTelemetry(options, timeline, {\n type: \"retry.blocked\",\n callId: error.callId,\n errorCode: error.code,\n safety: error.safety,\n attempt: error.attempt,\n });\n emitFailureTelemetry(options, timeline, error, error.attempt);\n}\n\nfunction createInitialAttempt(\n callRequest: ProbeMeshCallRequest,\n): ProbeMeshAttemptMetadata {\n const attemptId = callRequest.idempotencyKey ?? generateCallId();\n\n return {\n originalCallId: attemptId,\n attemptId,\n attemptNumber: 1,\n isRetry: false,\n };\n}\n\nfunction createRetryAttempt(\n attemptStore: HostedAttemptStore,\n sourceAttempt: HostedAttemptRecord,\n idempotencyKey: string | undefined,\n): ProbeMeshAttemptMetadata {\n const originalCallId = sourceAttempt.attempt.originalCallId;\n const attemptNumber = (attemptStore.attemptCounts.get(originalCallId) ?? 1) + 1;\n const attemptId = idempotencyKey ?? `${originalCallId}:retry:${attemptNumber}`;\n\n return {\n originalCallId,\n attemptId,\n attemptNumber,\n isRetry: true,\n previousAttemptId: sourceAttempt.attempt.attemptId,\n };\n}\n\nfunction storeAttempt(\n attemptStore: HostedAttemptStore,\n record: HostedAttemptRecord,\n) {\n attemptStore.attempts.set(record.attempt.attemptId, record);\n attemptStore.attemptCounts.set(\n record.attempt.originalCallId,\n Math.max(\n attemptStore.attemptCounts.get(record.attempt.originalCallId) ?? 0,\n record.attempt.attemptNumber,\n ),\n );\n}\n\nfunction generateCallId() {\n return `call_${randomUUID()}`;\n}\n\nfunction createTimeline(routeId: string): ProbeMeshCallTimeline {\n return {\n routeId,\n events: [],\n };\n}\n\nfunction createTimelineAdapters(\n options: HostedRouterOptions,\n timeline: ProbeMeshCallTimeline,\n attempt: ProbeMeshAttemptMetadata,\n attestation?: ProviderCatalogPolicyBundleAttestation,\n): ProbeMeshAdapter[] {\n return options.adapters.map((adapter) => ({\n ...adapter,\n call(request: ProbeMeshAdapterCallRequest, context: ProbeMeshAdapterContext) {\n emitTelemetry(options, timeline, {\n type: \"provider.attempted\",\n callId: context.callId,\n capability: request.capability,\n provider: adapter.id,\n attempt,\n attestation,\n });\n\n return adapter.call(request, context);\n },\n }));\n}\n\nfunction assertAuthorized(request: IncomingMessage, apiKeys: string[] | undefined) {\n if (!apiKeys || apiKeys.length === 0) {\n return;\n }\n\n const authorization = request.headers.authorization;\n const token = authorization?.startsWith(\"Bearer \")\n ? authorization.slice(\"Bearer \".length)\n : undefined;\n\n if (!token || !apiKeys.includes(token)) {\n throw new ProbeMeshError({\n code: \"unauthorized\",\n message: \"Hosted router request requires a valid bearer token.\",\n });\n }\n}\n\nexport async function startHostedRouter(\n options: StartHostedRouterOptions,\n): Promise<StartedHostedRouter> {\n const router = createHostedRouter(options);\n const server = createServer((request, response) => {\n void router.handle(request, response);\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(options.port, options.host ?? \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : options.port;\n const host = options.host ?? \"127.0.0.1\";\n\n return {\n server,\n url: `http://${host}:${port}`,\n close() {\n return new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n\n resolve();\n });\n });\n },\n };\n}\n\nasync function readJsonBody(request: IncomingMessage): Promise<unknown> {\n const body = await readRawJsonBody(request);\n\n if (body === undefined) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Hosted call request body is required.\",\n });\n }\n\n return body;\n}\n\nasync function readOptionalJsonBody(request: IncomingMessage): Promise<unknown> {\n return (await readRawJsonBody(request)) ?? {};\n}\n\nasync function readRawJsonBody(request: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n\n const rawBody = Buffer.concat(chunks).toString(\"utf8\");\n\n if (rawBody.length === 0) {\n return undefined;\n }\n\n try {\n return JSON.parse(rawBody) as unknown;\n } catch (error) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Hosted call request body must be valid JSON.\",\n cause: error,\n });\n }\n}\n\nfunction validateRetryBody(\n callId: string,\n body: unknown,\n): ProbeMeshRetryRequest {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Hosted retry request body must be an object when provided.\",\n callId,\n });\n }\n\n const candidate = body as Partial<ProbeMeshRetryRequest>;\n\n if (\n candidate.idempotencyKey !== undefined &&\n (typeof candidate.idempotencyKey !== \"string\" ||\n candidate.idempotencyKey.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Hosted retry idempotencyKey must be a non-empty string when provided.\",\n callId,\n });\n }\n\n return {\n callId,\n idempotencyKey: candidate.idempotencyKey,\n };\n}\n\nfunction addHostedRouteMetadata<Data>(\n response: ProbeMeshCallResponse<Data>,\n routeId: string,\n timeline: ProbeMeshCallTimeline,\n retrySafety: ProbeMeshRetrySafety,\n attempt: ProbeMeshAttemptMetadata,\n explanation?: ProbeMeshRouteExplanation,\n attestation?: ProviderCatalogPolicyBundleAttestation,\n paymentSelection?: ProbeMeshPaymentSelection,\n paymentStrategy?: ProbeMeshPaymentStrategy,\n): ProbeMeshCallResponse<Data> {\n return {\n ...response,\n timeline,\n retrySafety,\n attempt,\n route: createRouteMetadata(\n routeId,\n explanation ?? {\n consideredProviders: [response.provider.id],\n selectedProviderId: response.provider.id,\n fallbackUsed: false,\n fallbackCount: 0,\n stopReason: \"stopped_completed\",\n attempts: [\n {\n providerId: response.provider.id,\n status: \"succeeded\",\n reason: \"selected\",\n paymentEvidence: hasPaymentEvidence(\n response.safety,\n response.receiptRefs,\n ),\n },\n ],\n },\n response.provider.id,\n attestation,\n paymentSelection ?? response.route?.paymentSelection,\n paymentStrategy,\n ),\n };\n}\n\nfunction writeHostedError(\n response: ServerResponse,\n error: unknown,\n timeline: ProbeMeshCallTimeline,\n retrySafety: ProbeMeshRetrySafety,\n attempt?: ProbeMeshAttemptMetadata,\n route?: ProbeMeshRouteMetadata,\n) {\n const normalizedError = toHostedProbeMeshError(error);\n\n writeJson(response, statusCodeForError(normalizedError.code), {\n ...normalizedError.toJSON(),\n timeline,\n retrySafety,\n attempt: normalizedError.attempt ?? attempt,\n route: normalizedError.route ?? route,\n });\n}\n\nfunction toHostedProbeMeshError(error: unknown) {\n if (isProbeMeshError(error)) {\n return error;\n }\n\n return new ProbeMeshError({\n code: \"provider_unavailable\",\n message: \"Hosted router failed while handling the call.\",\n cause: error,\n });\n}\n\nfunction retrySafetyForCompletedCall(): ProbeMeshRetrySafety {\n return {\n retryable: false,\n safeToAutoRetry: false,\n reason: \"completed\",\n };\n}\n\nfunction notRetryableSafety(): ProbeMeshRetrySafety {\n return {\n retryable: false,\n safeToAutoRetry: false,\n reason: \"not_retryable\",\n };\n}\n\nfunction retrySafetyForError(error: unknown): ProbeMeshRetrySafety {\n if (!isProbeMeshError(error)) {\n return {\n retryable: true,\n safeToAutoRetry: true,\n reason: \"no_payment_attempted\",\n };\n }\n\n if (\n error.code === \"budget_exceeded\" ||\n error.code === \"unauthorized\" ||\n error.code === \"invalid_request\" ||\n error.code === \"retry_not_available\"\n ) {\n return {\n retryable: false,\n safeToAutoRetry: false,\n reason: \"not_retryable\",\n };\n }\n\n if (moneyMayHaveMoved(error.safety, error.receiptRefs)) {\n return {\n retryable: false,\n safeToAutoRetry: false,\n reason: \"money_may_have_moved\",\n };\n }\n\n if (\n error.code === \"payment_failed\" &&\n error.safety?.moneyMayHaveMoved === false\n ) {\n return {\n retryable: true,\n safeToAutoRetry: true,\n reason: \"payment_failed_no_charge\",\n };\n }\n\n if (\n (error.code === \"provider_unavailable\" ||\n error.code === \"provider_timeout\") &&\n !hasPaymentEvidence(error.safety, error.receiptRefs)\n ) {\n return {\n retryable: true,\n safeToAutoRetry: true,\n reason: \"no_payment_attempted\",\n };\n }\n\n return {\n retryable: true,\n safeToAutoRetry: false,\n reason: \"unknown_payment_state\",\n };\n}\n\nfunction moneyMayHaveMoved(\n safety: ProbeMeshCallSafety | undefined,\n receiptRefs: ReceiptRef[] | undefined,\n) {\n return (\n safety?.moneyMayHaveMoved === true ||\n receiptRefs?.some((receiptRef) => receiptRef.type === \"payment_proof\") ===\n true\n );\n}\n\nfunction hasPaymentEvidence(\n safety: ProbeMeshCallSafety | undefined,\n receiptRefs: ReceiptRef[] | undefined,\n) {\n return moneyMayHaveMoved(safety, receiptRefs);\n}\n\nfunction getPricing(adapter: ProbeMeshAdapter, capability: string) {\n if (!adapter.pricing) {\n return undefined;\n }\n\n const pricing = adapter.pricing as Partial<ProbeMeshPricing>;\n\n if (\n typeof pricing.amountUsd === \"number\" &&\n typeof pricing.unit === \"string\"\n ) {\n return pricing as ProbeMeshPricing;\n }\n\n return (adapter.pricing as Record<string, ProbeMeshPricing>)[capability];\n}\n\nfunction pricingToCost(pricing: ProbeMeshPricing | undefined): Cost | undefined {\n if (!pricing) {\n return undefined;\n }\n\n return {\n amountUsd: pricing.amountUsd,\n currency: pricing.currency ?? \"USD\",\n unit: pricing.unit,\n };\n}\n\nfunction emitFailureTelemetry(\n options: HostedRouterOptions,\n timeline: ProbeMeshCallTimeline,\n error: unknown,\n attempt?: ProbeMeshAttemptMetadata,\n attestation?: ProviderCatalogPolicyBundleAttestation,\n) {\n if (!isProbeMeshError(error)) {\n emitTelemetry(options, timeline, {\n type: \"call.failed\",\n status: \"failed\",\n errorCode: \"provider_unavailable\",\n attempt,\n attestation,\n });\n return;\n }\n\n emitTelemetry(options, timeline, {\n type: \"call.failed\",\n callId: error.callId,\n capability: error.capability,\n provider: error.provider,\n status: \"failed\",\n errorCode: error.code,\n safety: error.safety,\n attempt: error.attempt ?? attempt,\n attestation,\n });\n}\n\nasync function emitCallAuditArtifact(\n options: HostedRouterOptions,\n details: {\n request: ProbeMeshCallRequest;\n response?: ProbeMeshCallResponse;\n error?: ProbeMeshError;\n timeline: ProbeMeshCallTimeline;\n retrySafety: ProbeMeshRetrySafety;\n attempt: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n },\n) {\n if (\n !options.auditArtifacts ||\n options.auditArtifacts.enabled === false ||\n !options.auditArtifacts.onArtifact\n ) {\n return;\n }\n\n try {\n const artifact = createProbeMeshCallAuditArtifact({\n request: details.request,\n response: details.response,\n error: details.error,\n timeline: details.timeline,\n retrySafety: details.retrySafety,\n attempt: details.attempt,\n route: details.route,\n });\n\n await options.auditArtifacts.onArtifact(artifact);\n } catch {\n // Audit callbacks must never alter the hosted call result.\n }\n}\n\nfunction emitPaymentAndReceiptTelemetry(\n options: HostedRouterOptions,\n timeline: ProbeMeshCallTimeline,\n details: {\n callId?: string;\n capability?: string;\n provider?: string;\n safety?: ProbeMeshCallSafety;\n receiptRefs?: ReceiptRef[];\n attempt?: ProbeMeshAttemptMetadata;\n attestation?: ProviderCatalogPolicyBundleAttestation;\n },\n) {\n if (shouldEmitPaymentAttempted(details.safety, details.receiptRefs)) {\n emitTelemetry(options, timeline, {\n type: \"payment.attempted\",\n callId: details.callId,\n capability: details.capability,\n provider: details.provider,\n safety: details.safety,\n attempt: details.attempt,\n attestation: details.attestation,\n });\n }\n\n for (const receiptRef of details.receiptRefs ?? []) {\n emitTelemetry(options, timeline, {\n type: \"receipt.recorded\",\n callId: details.callId,\n capability: details.capability,\n provider: receiptRef.provider,\n receiptRef,\n safety: details.safety,\n attempt: details.attempt,\n attestation: details.attestation,\n });\n }\n}\n\nfunction shouldEmitPaymentAttempted(\n safety: ProbeMeshCallSafety | undefined,\n receiptRefs: ReceiptRef[] | undefined,\n) {\n return (\n safety?.paymentStatus === \"authorized\" ||\n safety?.paymentStatus === \"failed\" ||\n safety?.moneyMayHaveMoved === true ||\n receiptRefs?.some((receiptRef) => receiptRef.type === \"payment_proof\") ===\n true\n );\n}\n\nfunction emitTelemetry(\n options: HostedRouterOptions,\n timeline: ProbeMeshCallTimeline,\n event: Omit<HostedTelemetryEvent, \"routeId\" | \"timestamp\">,\n) {\n const timelineEvent: HostedTelemetryEvent = {\n ...event,\n routeId: timeline.routeId,\n timestamp: new Date().toISOString(),\n };\n\n timeline.events.push(timelineEvent);\n options.onTelemetryEvent?.(timelineEvent);\n}\n\nfunction statusCodeForError(code: ProbeMeshErrorCode) {\n switch (code) {\n case \"unauthorized\":\n return 401;\n case \"invalid_request\":\n return 400;\n case \"retry_not_available\":\n return 409;\n case \"budget_exceeded\":\n case \"receipt_missing\":\n case \"invalid_provider_response\":\n return 422;\n case \"provider_timeout\":\n case \"timeout_after_payment\":\n return 504;\n case \"provider_unavailable\":\n default:\n return 503;\n }\n}\n\nfunction writeJson(response: ServerResponse, statusCode: number, body: unknown) {\n response.statusCode = statusCode;\n response.setHeader(\"content-type\", \"application/json\");\n response.end(JSON.stringify(body));\n}\n","import { createHash } from \"node:crypto\";\n\nimport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n CallStatus,\n Cost,\n ProbeMeshAttemptMetadata,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshCallTimeline,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEventType,\n ReceiptRef,\n} from \"./types\";\n\nexport const PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION =\n \"probemesh.call-audit.v1\" as const;\n\nexport type ProbeMeshCallAuditArtifactStatus = \"completed\" | \"failed\";\n\nexport type ProbeMeshCallAuditArtifactFormat = \"json\" | \"markdown\";\n\nexport interface ProbeMeshCallAuditArtifactOptions {\n request: ProbeMeshCallRequest;\n response?: ProbeMeshCallResponse;\n error?: ProbeMeshError;\n generatedAt?: string;\n artifactId?: string;\n forbiddenOutputValues?: string[];\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n attempt?: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n}\n\nexport interface ProbeMeshCallAuditArtifactHashes {\n request: string;\n route: string;\n timeline: string;\n receipts: string;\n safety: string;\n retrySafety: string;\n artifact: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactReceiptSummary {\n total: number;\n types: string[];\n providers: string[];\n byType: Record<string, number>;\n hasPaymentProof: boolean;\n hasSettlementConfirmation: boolean;\n hasProviderDelivery: boolean;\n}\n\nexport interface ProbeMeshCallAuditArtifactTimelineEvent {\n type: ProbeMeshTimelineEventType;\n timestamp: string;\n provider?: string;\n status?: CallStatus;\n errorCode?: ProbeMeshErrorCode;\n receiptType?: string;\n attestationBundleId?: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactTimelineSummary {\n routeId?: string;\n eventTypes: ProbeMeshTimelineEventType[];\n events: ProbeMeshCallAuditArtifactTimelineEvent[];\n}\n\nexport interface ProbeMeshCallAuditArtifactCallSummary {\n callId?: string;\n capability: string;\n status: ProbeMeshCallAuditArtifactStatus;\n providerId?: string;\n errorCode?: ProbeMeshErrorCode;\n cost?: Cost;\n latencyMs?: number;\n attempt?: ProbeMeshAttemptMetadata;\n}\n\nexport interface ProbeMeshCallAuditArtifactRequestProof {\n requestHash: string;\n idempotencyKey?: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactEvidence {\n receiptSummary: ProbeMeshCallAuditArtifactReceiptSummary;\n receiptRefs: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProbeMeshRouteMetadata;\n timeline: ProbeMeshCallAuditArtifactTimelineSummary;\n}\n\nexport interface ProbeMeshCallAuditArtifact {\n schemaVersion: typeof PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION;\n artifactId: string;\n generatedAt: string;\n status: ProbeMeshCallAuditArtifactStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProbeMeshCallAuditArtifactHashes;\n call: ProbeMeshCallAuditArtifactCallSummary;\n request: ProbeMeshCallAuditArtifactRequestProof;\n evidence: ProbeMeshCallAuditArtifactEvidence;\n}\n\nexport interface ProbeMeshCallAuditArtifactValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactValidationResult {\n valid: boolean;\n errors: ProbeMeshCallAuditArtifactValidationError[];\n}\n\nexport function createProbeMeshCallAuditArtifact(\n options: ProbeMeshCallAuditArtifactOptions,\n): ProbeMeshCallAuditArtifact {\n assertAuditArtifactOptions(options);\n\n const requestHash = hashStableJson(options.request);\n const status: ProbeMeshCallAuditArtifactStatus = options.response\n ? \"completed\"\n : \"failed\";\n const callId = options.response?.callId ?? options.error?.callId;\n const capability =\n options.response?.capability ?? options.error?.capability ?? options.request.capability;\n const receiptRefs = cloneSerializable(\n options.response?.receiptRefs ?? options.error?.receiptRefs ?? [],\n );\n const safety = cloneSerializable(\n options.response?.safety ?? options.error?.safety,\n );\n const retrySafety = cloneSerializable(\n options.retrySafety ??\n options.response?.retrySafety ??\n options.error?.retrySafety,\n );\n const attempt = cloneSerializable(\n options.attempt ?? options.response?.attempt ?? options.error?.attempt,\n );\n const route = cloneSerializable(\n options.route ?? options.response?.route ?? options.error?.route,\n );\n const timeline = cloneSerializable(\n options.timeline ?? options.response?.timeline ?? options.error?.timeline,\n );\n const timelineSummary = summarizeTimeline(timeline);\n const baseContent = sanitizeAuditOutput(\n {\n schemaVersion: PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION,\n artifactId:\n options.artifactId ??\n `call_audit_${callId ?? requestHash.slice(0, 16)}`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status,\n hashAlgorithm: \"sha256\" as const,\n call: {\n callId,\n capability,\n status,\n providerId: options.response?.provider.id ?? options.error?.provider,\n errorCode: options.error?.code,\n cost: cloneSerializable(options.response?.cost),\n latencyMs: options.response?.latencyMs,\n attempt,\n },\n request: {\n requestHash,\n idempotencyKey: options.request.idempotencyKey,\n },\n evidence: {\n receiptSummary: summarizeAuditReceipts(receiptRefs),\n receiptRefs,\n safety,\n retrySafety,\n route,\n timeline: timelineSummary,\n },\n },\n options.forbiddenOutputValues ?? [],\n );\n const hashesWithoutArtifact: ProbeMeshCallAuditArtifactHashes = {\n request: requestHash,\n route: hashStableJson(baseContent.evidence.route ?? null),\n timeline: hashStableJson(baseContent.evidence.timeline),\n receipts: hashStableJson(baseContent.evidence.receiptRefs),\n safety: hashStableJson(baseContent.evidence.safety ?? null),\n retrySafety: hashStableJson(baseContent.evidence.retrySafety ?? null),\n artifact: \"\",\n };\n const artifact: ProbeMeshCallAuditArtifact = {\n ...baseContent,\n hashes: {\n ...hashesWithoutArtifact,\n artifact: hashArtifactContent({\n ...baseContent,\n hashes: hashesWithoutArtifact,\n }),\n },\n };\n\n assertProbeMeshCallAuditArtifact(artifact);\n\n return artifact;\n}\n\nexport function validateProbeMeshCallAuditArtifact(\n artifact: unknown,\n): ProbeMeshCallAuditArtifactValidationResult {\n const errors: ProbeMeshCallAuditArtifactValidationError[] = [];\n\n if (!isRecord(artifact)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"ProbeMesh call audit artifact must be an object.\",\n },\n ],\n };\n }\n\n if (artifact.schemaVersion !== PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(artifact.artifactId, \"artifactId\", errors);\n validateIsoTimestamp(artifact.generatedAt, \"generatedAt\", errors);\n\n if (artifact.status !== \"completed\" && artifact.status !== \"failed\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"completed\" or \"failed\".',\n });\n }\n\n if (artifact.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(artifact.hashes, errors);\n validateCallSummary(artifact.call, artifact.status, errors);\n validateRequestProof(artifact.request, artifact.hashes, errors);\n validateEvidence(artifact.evidence, errors);\n\n if (errors.length === 0) {\n const typedArtifact = artifact as unknown as ProbeMeshCallAuditArtifact;\n\n pushHashMismatch(\n errors,\n \"hashes.route\",\n typedArtifact.hashes.route,\n hashStableJson(typedArtifact.evidence.route ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.timeline\",\n typedArtifact.hashes.timeline,\n hashStableJson(typedArtifact.evidence.timeline),\n );\n pushHashMismatch(\n errors,\n \"hashes.receipts\",\n typedArtifact.hashes.receipts,\n hashStableJson(typedArtifact.evidence.receiptRefs),\n );\n pushHashMismatch(\n errors,\n \"hashes.safety\",\n typedArtifact.hashes.safety,\n hashStableJson(typedArtifact.evidence.safety ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.retrySafety\",\n typedArtifact.hashes.retrySafety,\n hashStableJson(typedArtifact.evidence.retrySafety ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.artifact\",\n typedArtifact.hashes.artifact,\n hashArtifactContent(typedArtifact),\n );\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProbeMeshCallAuditArtifact(\n artifact: unknown,\n): asserts artifact is ProbeMeshCallAuditArtifact {\n const result = validateProbeMeshCallAuditArtifact(artifact);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh call audit artifact: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProbeMeshCallAuditArtifact(\n artifact: ProbeMeshCallAuditArtifact,\n options: {\n format?: ProbeMeshCallAuditArtifactFormat;\n } = {},\n) {\n assertProbeMeshCallAuditArtifact(artifact);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatAuditArtifactMarkdown(artifact);\n }\n\n return JSON.stringify(artifact, null, 2);\n}\n\nfunction assertAuditArtifactOptions(\n options: ProbeMeshCallAuditArtifactOptions,\n): asserts options is ProbeMeshCallAuditArtifactOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact options must be an object.\",\n });\n }\n\n if (!isRecord(options.request)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request must be an object.\",\n });\n }\n\n if (\n typeof options.request.capability !== \"string\" ||\n options.request.capability.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request capability is required.\",\n });\n }\n\n if (!(\"input\" in options.request)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request input is required for hashing.\",\n });\n }\n\n if (\n (options.response === undefined && options.error === undefined) ||\n (options.response !== undefined && options.error !== undefined)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"ProbeMesh call audit artifact requires exactly one response or error.\",\n });\n }\n\n if (options.error !== undefined && !isProbeMeshError(options.error)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact error must be a ProbeMeshError.\",\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: \"ProbeMesh call audit artifact generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.artifactId !== undefined &&\n (typeof options.artifactId !== \"string\" || options.artifactId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact artifactId 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 \"ProbeMesh call audit artifact forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeAuditReceipts(\n receiptRefs: ReceiptRef[],\n): ProbeMeshCallAuditArtifactReceiptSummary {\n const types: string[] = [];\n const providers: string[] = [];\n const byType: Record<string, number> = {};\n\n for (const receiptRef of receiptRefs) {\n if (!types.includes(receiptRef.type)) {\n types.push(receiptRef.type);\n }\n\n if (!providers.includes(receiptRef.provider)) {\n providers.push(receiptRef.provider);\n }\n\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receiptRefs.length,\n types,\n providers,\n byType,\n hasPaymentProof: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"payment_proof\",\n ),\n hasSettlementConfirmation: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n ),\n hasProviderDelivery: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n ),\n };\n}\n\nfunction summarizeTimeline(\n timeline: ProbeMeshCallTimeline | undefined,\n): ProbeMeshCallAuditArtifactTimelineSummary {\n if (!timeline) {\n return {\n eventTypes: [],\n events: [],\n };\n }\n\n return {\n routeId: timeline.routeId,\n eventTypes: timeline.events.map((event) => event.type),\n events: timeline.events.map((event) => ({\n type: event.type,\n timestamp: event.timestamp,\n provider: event.provider,\n status: event.status,\n errorCode: event.errorCode,\n receiptType: event.receiptRef?.type,\n attestationBundleId: event.attestation?.bundleId,\n })),\n };\n}\n\nfunction validateHashes(\n hashes: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const key of [\n \"request\",\n \"route\",\n \"timeline\",\n \"receipts\",\n \"safety\",\n \"retrySafety\",\n \"artifact\",\n ]) {\n validateSha256String(hashes[key], `hashes.${key}`, errors);\n }\n}\n\nfunction validateCallSummary(\n call: unknown,\n status: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(call)) {\n errors.push({\n path: \"call\",\n message: \"call must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(call.capability, \"call.capability\", errors);\n\n if (call.status !== status) {\n errors.push({\n path: \"call.status\",\n message: \"call.status must match artifact status.\",\n });\n }\n\n if (call.callId !== undefined) {\n validateNonEmptyString(call.callId, \"call.callId\", errors);\n }\n\n if (call.providerId !== undefined) {\n validateNonEmptyString(call.providerId, \"call.providerId\", errors);\n }\n\n if (\n call.errorCode !== undefined &&\n (typeof call.errorCode !== \"string\" || call.errorCode.length === 0)\n ) {\n errors.push({\n path: \"call.errorCode\",\n message: \"call.errorCode must be a non-empty string when provided.\",\n });\n }\n\n if (\n call.latencyMs !== undefined &&\n (typeof call.latencyMs !== \"number\" ||\n !Number.isFinite(call.latencyMs) ||\n call.latencyMs < 0)\n ) {\n errors.push({\n path: \"call.latencyMs\",\n message: \"call.latencyMs must be a non-negative finite number.\",\n });\n }\n}\n\nfunction validateRequestProof(\n request: unknown,\n hashes: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(request)) {\n errors.push({\n path: \"request\",\n message: \"request must be an object.\",\n });\n return;\n }\n\n validateSha256String(request.requestHash, \"request.requestHash\", errors);\n\n if (isRecord(hashes) && hashes.request !== request.requestHash) {\n errors.push({\n path: \"hashes.request\",\n message: \"hashes.request must equal request.requestHash.\",\n });\n }\n\n if (request.idempotencyKey !== undefined) {\n validateNonEmptyString(\n request.idempotencyKey,\n \"request.idempotencyKey\",\n errors,\n );\n }\n}\n\nfunction validateEvidence(\n evidence: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(evidence)) {\n errors.push({\n path: \"evidence\",\n message: \"evidence must be an object.\",\n });\n return;\n }\n\n validateReceiptSummary(evidence.receiptSummary, errors);\n validateReceiptRefs(evidence.receiptRefs, errors);\n validateTimelineSummary(evidence.timeline, errors);\n}\n\nfunction validateReceiptSummary(\n summary: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(summary)) {\n errors.push({\n path: \"evidence.receiptSummary\",\n message: \"evidence.receiptSummary must be an object.\",\n });\n return;\n }\n\n if (typeof summary.total !== \"number\" || !Number.isFinite(summary.total)) {\n errors.push({\n path: \"evidence.receiptSummary.total\",\n message: \"evidence.receiptSummary.total must be a number.\",\n });\n }\n\n validateStringArray(summary.types, \"evidence.receiptSummary.types\", errors);\n validateStringArray(\n summary.providers,\n \"evidence.receiptSummary.providers\",\n errors,\n );\n\n if (!isRecord(summary.byType)) {\n errors.push({\n path: \"evidence.receiptSummary.byType\",\n message: \"evidence.receiptSummary.byType must be an object.\",\n });\n }\n\n for (const key of [\n \"hasPaymentProof\",\n \"hasSettlementConfirmation\",\n \"hasProviderDelivery\",\n ]) {\n if (typeof summary[key] !== \"boolean\") {\n errors.push({\n path: `evidence.receiptSummary.${key}`,\n message: `evidence.receiptSummary.${key} must be a boolean.`,\n });\n }\n }\n}\n\nfunction validateReceiptRefs(\n receiptRefs: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!Array.isArray(receiptRefs)) {\n errors.push({\n path: \"evidence.receiptRefs\",\n message: \"evidence.receiptRefs must be an array.\",\n });\n return;\n }\n\n receiptRefs.forEach((receiptRef, index) => {\n if (!isRecord(receiptRef)) {\n errors.push({\n path: `evidence.receiptRefs.${index}`,\n message: \"receipt ref must be an object.\",\n });\n return;\n }\n\n for (const key of [\"type\", \"provider\", \"status\", \"ref\", \"timestamp\"]) {\n validateNonEmptyString(\n receiptRef[key],\n `evidence.receiptRefs.${index}.${key}`,\n errors,\n );\n }\n });\n}\n\nfunction validateTimelineSummary(\n timeline: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(timeline)) {\n errors.push({\n path: \"evidence.timeline\",\n message: \"evidence.timeline must be an object.\",\n });\n return;\n }\n\n if (timeline.routeId !== undefined) {\n validateNonEmptyString(timeline.routeId, \"evidence.timeline.routeId\", errors);\n }\n\n validateStringArray(\n timeline.eventTypes,\n \"evidence.timeline.eventTypes\",\n errors,\n );\n\n if (!Array.isArray(timeline.events)) {\n errors.push({\n path: \"evidence.timeline.events\",\n message: \"evidence.timeline.events must be an array.\",\n });\n return;\n }\n\n timeline.events.forEach((event, index) => {\n if (!isRecord(event)) {\n errors.push({\n path: `evidence.timeline.events.${index}`,\n message: \"timeline event must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(\n event.type,\n `evidence.timeline.events.${index}.type`,\n errors,\n );\n validateIsoTimestamp(\n event.timestamp,\n `evidence.timeline.events.${index}.timestamp`,\n errors,\n );\n });\n}\n\nfunction hashArtifactContent(artifact: ProbeMeshCallAuditArtifact) {\n return hashStableJson({\n ...artifact,\n hashes: {\n ...artifact.hashes,\n artifact: \"\",\n },\n });\n}\n\nfunction pushHashMismatch(\n errors: ProbeMeshCallAuditArtifactValidationError[],\n path: string,\n expected: string,\n actual: string,\n) {\n if (expected === actual) {\n return;\n }\n\n errors.push({\n path,\n message: `${path} does not match artifact content.`,\n });\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(sortSerializable(value));\n}\n\nfunction sortSerializable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortSerializable);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .filter((key) => value[key] !== undefined)\n .map((key) => [key, sortSerializable(value[key])]),\n );\n}\n\nfunction sanitizeAuditOutput<T>(value: T, forbiddenOutputValues: string[]) {\n const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);\n\n return redactX402Secrets(\n replaceForbiddenValues(cloneSerializable(value), forbiddenValues),\n ) as T;\n}\n\nfunction replaceForbiddenValues(\n value: unknown,\n forbiddenValues: string[],\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 (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\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 formatAuditArtifactMarkdown(artifact: ProbeMeshCallAuditArtifact) {\n const attestation = artifact.evidence.route?.attestation;\n\n return [\n `# ProbeMesh Call Audit Artifact`,\n ``,\n `Status: ${artifact.status}`,\n `Schema: ${artifact.schemaVersion}`,\n `Artifact ID: ${artifact.artifactId}`,\n `Generated: ${artifact.generatedAt}`,\n ``,\n `## Call`,\n `- Call ID: ${artifact.call.callId ?? \"none\"}`,\n `- Capability: ${artifact.call.capability}`,\n `- Provider: ${artifact.call.providerId ?? \"none\"}`,\n `- Error code: ${artifact.call.errorCode ?? \"none\"}`,\n `- Cost USD: ${artifact.call.cost?.amountUsd ?? \"none\"}`,\n `- Request hash: ${artifact.request.requestHash}`,\n ``,\n `## Evidence`,\n `- Receipts: ${artifact.evidence.receiptSummary.total}`,\n `- Receipt types: ${formatInlineList(artifact.evidence.receiptSummary.types)}`,\n `- Payment proof: ${String(artifact.evidence.receiptSummary.hasPaymentProof)}`,\n `- Settlement confirmation: ${String(\n artifact.evidence.receiptSummary.hasSettlementConfirmation,\n )}`,\n `- Provider delivery: ${String(\n artifact.evidence.receiptSummary.hasProviderDelivery,\n )}`,\n `- Money may have moved: ${String(\n artifact.evidence.safety?.moneyMayHaveMoved ?? false,\n )}`,\n `- Retry safe: ${String(\n artifact.evidence.retrySafety?.safeToAutoRetry ?? false,\n )}`,\n `- Route stop: ${\n artifact.evidence.route?.explanation?.stopReason ?? \"none\"\n }`,\n `- Bundle: ${attestation?.bundleId ?? \"none\"}`,\n `- Bundle verified: ${String(attestation?.runtimeVerified ?? false)}`,\n `- Timeline events: ${formatInlineList(\n artifact.evidence.timeline.eventTypes,\n )}`,\n ``,\n `## Hashes`,\n `- Artifact: ${artifact.hashes.artifact}`,\n `- Route: ${artifact.hashes.route}`,\n `- Timeline: ${artifact.hashes.timeline}`,\n `- Receipts: ${artifact.hashes.receipts}`,\n ].join(\"\\n\");\n}\n\nfunction formatInlineList(values: string[]) {\n return values.length === 0 ? \"none\" : values.join(\", \");\n}\n\nfunction validateSha256String(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path,\n message: `${path} must be a sha256 hex string.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\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: ProbeMeshCallAuditArtifactValidationError[],\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 validateStringArray(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatValidationErrors(errors: ProbeMeshCallAuditArtifactValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","export interface X402SecretRedactionOptions {\n replacement?: string;\n maxDepth?: number;\n}\n\nconst DEFAULT_REPLACEMENT = \"[REDACTED]\";\nconst DEFAULT_MAX_DEPTH = 12;\nconst PRIVATE_KEY_PATTERN = /\\b0x[a-fA-F0-9]{64}\\b/g;\nconst HEX_SIGNATURE_PATTERN = /\\b0x[a-fA-F0-9]{130}\\b/g;\nconst SECRET_FIELD_NAMES = new Set([\n \"api-key\",\n \"apikey\",\n \"authorization\",\n \"bearer\",\n \"payment-required\",\n \"payment-response\",\n \"payment-signature\",\n \"privatekey\",\n \"signature\",\n \"x-api-key\",\n]);\n\nexport function redactX402Secrets<T>(\n value: T,\n options: X402SecretRedactionOptions = {},\n): T {\n const replacement = options.replacement ?? DEFAULT_REPLACEMENT;\n const maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;\n const seen = new WeakSet<object>();\n\n return redactValue(value, {\n replacement,\n maxDepth,\n depth: 0,\n seen,\n key: undefined,\n }) as T;\n}\n\nfunction redactValue(\n value: unknown,\n context: {\n replacement: string;\n maxDepth: number;\n depth: number;\n seen: WeakSet<object>;\n key: string | undefined;\n },\n): unknown {\n if (context.key && shouldRedactKey(context.key)) {\n return context.replacement;\n }\n\n if (typeof value === \"string\") {\n return redactString(value, context.replacement);\n }\n\n if (\n value === null ||\n typeof value !== \"object\" ||\n value instanceof Date\n ) {\n return value;\n }\n\n if (context.depth >= context.maxDepth) {\n return \"[MaxDepth]\";\n }\n\n if (context.seen.has(value)) {\n return \"[Circular]\";\n }\n\n context.seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map((entry) =>\n redactValue(entry, {\n ...context,\n depth: context.depth + 1,\n key: undefined,\n }),\n );\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactValue(entry, {\n ...context,\n depth: context.depth + 1,\n key,\n }),\n ]),\n );\n}\n\nfunction shouldRedactKey(key: string) {\n const normalized = key.toLowerCase().replace(/_/g, \"-\");\n\n return (\n SECRET_FIELD_NAMES.has(normalized) ||\n normalized.includes(\"private-key\") ||\n normalized.includes(\"privatekey\") ||\n normalized.includes(\"payment-signature\") ||\n normalized.includes(\"payment-response\") ||\n normalized.includes(\"payment-required\") ||\n normalized.includes(\"api-key\")\n );\n}\n\nfunction redactString(value: string, replacement: string) {\n return value\n .replace(PRIVATE_KEY_PATTERN, replacement)\n .replace(HEX_SIGNATURE_PATTERN, replacement);\n}\n","import { ProbeMeshError } from \"./errors\";\nimport { validateProviderManifest } from \"./providerKit/manifest\";\nimport type { ProviderManifest } from \"./providerKit/types\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n ProbeMeshCallSafety,\n ProbeMeshRetrySafety,\n ProbeMeshTimelineEventType,\n} from \"./types\";\nimport type {\n X402ProviderAcceptanceGate,\n X402ProviderAcceptanceReport,\n X402ProviderAcceptanceStatus,\n X402ProviderAcceptanceSummary,\n} from \"./protocols/x402Acceptance\";\n\nexport const PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION =\n \"probemesh.provider-catalog.v1\" as const;\n\nexport type ProviderCatalogArtifactStatus = \"ready\" | \"rejected\";\n\nexport type ProviderCatalogArtifactFormat = \"json\" | \"markdown\";\n\nexport interface ProviderCatalogArtifactOptions {\n manifest: ProviderManifest;\n acceptanceReport: X402ProviderAcceptanceReport;\n generatedAt?: string;\n artifactId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderCatalogArtifact {\n schemaVersion: typeof PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION;\n artifactId: string;\n generatedAt: string;\n status: ProviderCatalogArtifactStatus;\n provider: ProviderManifest;\n acceptance: {\n title: string;\n status: X402ProviderAcceptanceStatus;\n gate: X402ProviderAcceptanceGate;\n failedChecks: string[];\n receipts: X402ProviderAcceptanceReport[\"receipts\"];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: X402ProviderAcceptanceSummary[\"route\"];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n errorCode?: string;\n };\n}\n\nexport interface ProviderCatalogArtifactValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProviderCatalogArtifactValidationResult {\n valid: boolean;\n errors: ProviderCatalogArtifactValidationError[];\n}\n\nexport function createProviderCatalogArtifact(\n options: ProviderCatalogArtifactOptions,\n): ProviderCatalogArtifact {\n assertProviderCatalogArtifactOptions(options);\n\n const artifact: ProviderCatalogArtifact = {\n schemaVersion: PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION,\n artifactId:\n options.artifactId ??\n `${options.manifest.id}:${options.acceptanceReport.summary.callId ?? \"unknown\"}:catalog`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: options.acceptanceReport.gate.accepted ? \"ready\" : \"rejected\",\n provider: cloneSerializable(options.manifest),\n acceptance: {\n title: options.acceptanceReport.title,\n status: options.acceptanceReport.status,\n gate: cloneSerializable(options.acceptanceReport.gate),\n failedChecks: [\n ...options.acceptanceReport.summary.failedCheckNames,\n ],\n receipts: cloneSerializable(options.acceptanceReport.receipts),\n safety: cloneSerializable(options.acceptanceReport.safety),\n retrySafety: cloneSerializable(options.acceptanceReport.retrySafety),\n route: cloneSerializable(options.acceptanceReport.route),\n timelineEventTypes: [\n ...options.acceptanceReport.timelineEventTypes,\n ],\n telemetryEventTypes: [\n ...options.acceptanceReport.telemetryEventTypes,\n ],\n errorCode: options.acceptanceReport.summary.errorCode,\n },\n };\n const sanitizedArtifact = sanitizeCatalogOutput(\n artifact,\n options.forbiddenOutputValues ?? [],\n );\n\n assertProviderCatalogArtifact(sanitizedArtifact);\n\n return sanitizedArtifact;\n}\n\nexport function formatProviderCatalogArtifact(\n artifact: ProviderCatalogArtifact,\n options: {\n format?: ProviderCatalogArtifactFormat;\n } = {},\n) {\n assertProviderCatalogArtifact(artifact);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatCatalogArtifactMarkdown(artifact);\n }\n\n return JSON.stringify(artifact, null, 2);\n}\n\nexport function validateProviderCatalogArtifact(\n artifact: unknown,\n): ProviderCatalogArtifactValidationResult {\n const errors: ProviderCatalogArtifactValidationError[] = [];\n\n if (!isRecord(artifact)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider catalog artifact must be an object.\",\n },\n ],\n };\n }\n\n if (artifact.schemaVersion !== PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROVIDER_CATALOG_ARTIFACT_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(artifact.artifactId, \"artifactId\", errors);\n validateIsoTimestamp(artifact.generatedAt, \"generatedAt\", errors);\n\n if (artifact.status !== \"ready\" && artifact.status !== \"rejected\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"ready\" or \"rejected\".',\n });\n }\n\n const manifestValidation = validateProviderManifest(artifact.provider);\n\n for (const manifestError of manifestValidation.errors) {\n errors.push({\n path: `provider.${manifestError.path}`,\n message: manifestError.message,\n });\n }\n\n validateAcceptanceArtifact(artifact.acceptance, errors);\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderCatalogArtifact(\n artifact: unknown,\n): asserts artifact is ProviderCatalogArtifact {\n const result = validateProviderCatalogArtifact(artifact);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider catalog artifact: ${formatValidationErrors(result.errors)}`,\n });\n}\n\nfunction assertProviderCatalogArtifactOptions(\n options: ProviderCatalogArtifactOptions,\n): asserts options is ProviderCatalogArtifactOptions {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog artifact options must be an object.\",\n });\n }\n\n const manifestValidation = validateProviderManifest(options.manifest);\n\n if (!manifestValidation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider catalog artifact manifest: ${formatValidationErrors(\n manifestValidation.errors,\n )}`,\n });\n }\n\n if (\n !options.acceptanceReport ||\n typeof options.acceptanceReport !== \"object\" ||\n Array.isArray(options.acceptanceReport)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog artifact requires an acceptance report.\",\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 catalog artifact generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.artifactId !== undefined &&\n (typeof options.artifactId !== \"string\" || options.artifactId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog artifact artifactId 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 catalog artifact forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction formatCatalogArtifactMarkdown(artifact: ProviderCatalogArtifact) {\n const lines = [\n `# ${artifact.provider.displayName} Provider Catalog Artifact`,\n \"\",\n `Status: ${artifact.status}`,\n `Schema: ${artifact.schemaVersion}`,\n `Artifact ID: ${artifact.artifactId}`,\n `Generated: ${artifact.generatedAt}`,\n \"\",\n \"## Provider\",\n `- ID: ${artifact.provider.id}`,\n `- Display name: ${artifact.provider.displayName}`,\n `- Protocol: ${artifact.provider.protocolMode}`,\n `- Capabilities: ${formatInlineList(artifact.provider.capabilities)}`,\n \"\",\n \"## Acceptance\",\n `- Gate: ${artifact.acceptance.gate.status}`,\n `- Result: ${artifact.acceptance.status}`,\n `- Failed checks: ${formatInlineList(artifact.acceptance.failedChecks)}`,\n `- Gate reasons: ${formatInlineList(artifact.acceptance.gate.reasons)}`,\n \"\",\n \"## Receipts\",\n `- Total: ${artifact.acceptance.receipts.total}`,\n `- Types: ${formatInlineList(artifact.acceptance.receipts.types)}`,\n `- Providers: ${formatInlineList(artifact.acceptance.receipts.providers)}`,\n `- Payment proof: ${String(artifact.acceptance.receipts.hasPaymentProof)}`,\n `- Settlement confirmation: ${String(\n artifact.acceptance.receipts.hasSettlementConfirmation,\n )}`,\n `- Provider delivery: ${String(\n artifact.acceptance.receipts.hasProviderDelivery,\n )}`,\n \"\",\n \"## Safety\",\n `- Payment: ${artifact.acceptance.safety?.paymentStatus ?? \"unknown\"}`,\n `- Settlement: ${artifact.acceptance.safety?.settlementStatus ?? \"unknown\"}`,\n `- Delivery: ${artifact.acceptance.safety?.deliveryStatus ?? \"unknown\"}`,\n `- Money may have moved: ${String(\n artifact.acceptance.safety?.moneyMayHaveMoved ?? false,\n )}`,\n \"\",\n \"## Retry Safety\",\n `- Retryable: ${String(artifact.acceptance.retrySafety?.retryable ?? false)}`,\n `- Safe to auto retry: ${String(\n artifact.acceptance.retrySafety?.safeToAutoRetry ?? false,\n )}`,\n `- Reason: ${artifact.acceptance.retrySafety?.reason ?? \"unknown\"}`,\n \"\",\n \"## Route And Timeline\",\n `- Selected provider: ${artifact.acceptance.route?.selectedProviderId ?? \"none\"}`,\n `- Stop reason: ${artifact.acceptance.route?.stopReason ?? \"none\"}`,\n `- Timeline events: ${formatInlineList(artifact.acceptance.timelineEventTypes)}`,\n `- Telemetry events: ${formatInlineList(artifact.acceptance.telemetryEventTypes)}`,\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction formatInlineList(values: readonly string[] | undefined) {\n return values && values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction sanitizeCatalogOutput<T>(value: T, forbiddenOutputValues: string[]) {\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 validateAcceptanceArtifact(\n acceptance: unknown,\n errors: ProviderCatalogArtifactValidationError[],\n) {\n if (!isRecord(acceptance)) {\n errors.push({\n path: \"acceptance\",\n message: \"acceptance must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(acceptance.title, \"acceptance.title\", errors);\n\n if (acceptance.status !== \"passed\" && acceptance.status !== \"failed\") {\n errors.push({\n path: \"acceptance.status\",\n message: 'acceptance.status must be \"passed\" or \"failed\".',\n });\n }\n\n if (!isRecord(acceptance.gate)) {\n errors.push({\n path: \"acceptance.gate\",\n message: \"acceptance.gate must be an object.\",\n });\n } else {\n if (typeof acceptance.gate.accepted !== \"boolean\") {\n errors.push({\n path: \"acceptance.gate.accepted\",\n message: \"acceptance.gate.accepted must be a boolean.\",\n });\n }\n\n if (\n acceptance.gate.status !== \"accepted\" &&\n acceptance.gate.status !== \"rejected\"\n ) {\n errors.push({\n path: \"acceptance.gate.status\",\n message: 'acceptance.gate.status must be \"accepted\" or \"rejected\".',\n });\n }\n }\n\n validateStringArray(\n acceptance.failedChecks,\n \"acceptance.failedChecks\",\n errors,\n );\n validateReceiptSummary(acceptance.receipts, errors);\n validateStringArray(\n acceptance.timelineEventTypes,\n \"acceptance.timelineEventTypes\",\n errors,\n );\n validateStringArray(\n acceptance.telemetryEventTypes,\n \"acceptance.telemetryEventTypes\",\n errors,\n );\n}\n\nfunction validateReceiptSummary(\n receipts: unknown,\n errors: ProviderCatalogArtifactValidationError[],\n) {\n if (!isRecord(receipts)) {\n errors.push({\n path: \"acceptance.receipts\",\n message: \"acceptance.receipts must be an object.\",\n });\n return;\n }\n\n if (typeof receipts.total !== \"number\" || !Number.isFinite(receipts.total)) {\n errors.push({\n path: \"acceptance.receipts.total\",\n message: \"acceptance.receipts.total must be a number.\",\n });\n }\n\n validateStringArray(receipts.types, \"acceptance.receipts.types\", errors);\n validateStringArray(\n receipts.providers,\n \"acceptance.receipts.providers\",\n errors,\n );\n\n for (const key of [\n \"hasPaymentProof\",\n \"hasSettlementConfirmation\",\n \"hasProviderDelivery\",\n ]) {\n if (typeof receipts[key] !== \"boolean\") {\n errors.push({\n path: `acceptance.receipts.${key}`,\n message: `acceptance.receipts.${key} must be a boolean.`,\n });\n }\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n errors: ProviderCatalogArtifactValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\")\n ) {\n errors.push({\n path,\n message: `${path} must be an array of strings.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderCatalogArtifactValidationError[],\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: ProviderCatalogArtifactValidationError[],\n) {\n if (typeof value !== \"string\" || Number.isNaN(Date.parse(value))) {\n errors.push({\n path,\n message: `${path} must be an ISO timestamp string.`,\n });\n }\n}\n\nfunction formatValidationErrors(\n errors: ProviderCatalogArtifactValidationError[],\n) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n","import { ProbeMeshError } from \"./errors\";\nimport {\n mergePaymentPreferences,\n resolveProviderPaymentOption,\n validatePaymentPreferences,\n validatePaymentStrategy,\n validateProviderPaymentOptions,\n} from \"./paymentOptions\";\nimport {\n assertProviderCatalogArtifact,\n validateProviderCatalogArtifact,\n} from \"./providerCatalogArtifact\";\nimport type {\n ProviderCatalogArtifact,\n ProviderCatalogArtifactStatus,\n} from \"./providerCatalogArtifact\";\nimport type {\n ProviderLimits,\n ProviderManifest,\n ProviderProtocolMode,\n ProviderReceiptSupport,\n} from \"./providerKit/types\";\nimport type {\n Cost,\n ProbeMeshCallSafety,\n ProbeMeshPaymentPreferences,\n ProbeMeshPaymentSelection,\n ProbeMeshPaymentStrategy,\n ProbeMeshRetrySafety,\n ProbeMeshTimelineEventType,\n ProbeMeshPricing,\n ProviderPaymentOption,\n ReceiptType,\n} from \"./types\";\nimport type { X402ProviderAcceptanceGate } from \"./protocols/x402Acceptance\";\n\nexport const PROVIDER_CATALOG_SCHEMA_VERSION =\n \"probemesh.provider-catalog.index.v1\" as const;\n\nexport interface ProviderCatalogOptions {\n artifacts: ProviderCatalogArtifact[];\n generatedAt?: string;\n}\n\nexport interface ProviderCatalog {\n schemaVersion: typeof PROVIDER_CATALOG_SCHEMA_VERSION;\n generatedAt: string;\n entries: ProviderCatalogEntry[];\n}\n\nexport interface ProviderCatalogEntry {\n artifactId: string;\n generatedAt: string;\n status: ProviderCatalogArtifactStatus;\n provider: {\n id: string;\n displayName: string;\n capabilities: string[];\n protocolMode: ProviderProtocolMode;\n paymentOptions?: ProviderPaymentOption[];\n pricing: ProviderManifest[\"pricing\"];\n receipts: ProviderReceiptSupport;\n limits?: ProviderLimits;\n };\n acceptance: {\n gate: X402ProviderAcceptanceGate;\n failedChecks: string[];\n receipts: ProviderCatalogArtifact[\"acceptance\"][\"receipts\"];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProviderCatalogArtifact[\"acceptance\"][\"route\"];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n errorCode?: string;\n };\n}\n\nexport interface ProviderCatalogQuery {\n capability: string;\n protocolMode?: ProviderProtocolMode;\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n maxCostUsd?: number;\n requiredReceiptTypes?: ReceiptType[];\n providerIds?: string[];\n blockedProviderIds?: string[];\n status?: ProviderCatalogArtifactStatus;\n}\n\nexport interface ProviderCatalogMatch {\n entry: ProviderCatalogEntry;\n providerId: string;\n capability: string;\n status: ProviderCatalogArtifactStatus;\n cost?: Cost;\n paymentSelection?: ProbeMeshPaymentSelection;\n reasons: string[];\n}\n\nexport interface ProviderCatalogSummary {\n schemaVersion: typeof PROVIDER_CATALOG_SCHEMA_VERSION;\n generatedAt: string;\n totalEntries: number;\n readyEntries: number;\n rejectedEntries: number;\n providers: string[];\n capabilities: string[];\n protocolModes: string[];\n}\n\nexport interface ProviderCatalogValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProviderCatalogValidationResult {\n valid: boolean;\n errors: ProviderCatalogValidationError[];\n}\n\nexport function validateProviderCatalog(\n catalog: unknown,\n): ProviderCatalogValidationResult {\n const errors: ProviderCatalogValidationError[] = [];\n\n if (!isRecord(catalog)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider catalog must be an object.\",\n },\n ],\n };\n }\n\n if (catalog.schemaVersion !== PROVIDER_CATALOG_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROVIDER_CATALOG_SCHEMA_VERSION}\".`,\n });\n }\n\n validateIsoTimestamp(catalog.generatedAt, \"generatedAt\", errors);\n\n if (!Array.isArray(catalog.entries)) {\n errors.push({\n path: \"entries\",\n message: \"entries must be an array.\",\n });\n } else {\n catalog.entries.forEach((entry, index) =>\n validateProviderCatalogEntry(entry, `entries.${index}`, errors),\n );\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderCatalog(\n catalog: unknown,\n): asserts catalog is ProviderCatalog {\n const result = validateProviderCatalog(catalog);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider catalog: ${formatValidationErrors(result.errors)}`,\n });\n}\n\nexport function parseProviderCatalogArtifactJson(\n json: string,\n): ProviderCatalogArtifact {\n if (typeof json !== \"string\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog artifact JSON must be a string.\",\n });\n }\n\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(json);\n } catch (cause) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog artifact JSON must be valid JSON.\",\n cause,\n });\n }\n\n assertProviderCatalogArtifact(parsed);\n\n return parsed;\n}\n\nexport function createProviderCatalog(\n options: ProviderCatalogOptions,\n): ProviderCatalog {\n assertProviderCatalogOptions(options);\n\n const entries = options.artifacts.map((artifact, index) => {\n const validation = validateProviderCatalogArtifact(artifact);\n\n if (!validation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider catalog artifact at index ${index}: ${formatValidationErrors(\n validation.errors,\n )}`,\n });\n }\n\n return createCatalogEntryFromArtifact(artifact);\n });\n\n const catalog: ProviderCatalog = {\n schemaVersion: PROVIDER_CATALOG_SCHEMA_VERSION,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n entries,\n };\n\n assertProviderCatalog(catalog);\n\n return catalog;\n}\n\nexport function findProviderCatalogMatches(\n catalog: ProviderCatalog,\n query: ProviderCatalogQuery,\n): ProviderCatalogMatch[] {\n assertProviderCatalog(catalog);\n assertProviderCatalogQuery(query);\n\n const requiredStatus = query.status ?? \"ready\";\n const requiredReceiptTypes = query.requiredReceiptTypes ?? [];\n const providerIds = query.providerIds;\n const blockedProviderIds = new Set(query.blockedProviderIds ?? []);\n\n return catalog.entries.flatMap((entry) => {\n const providerId = entry.provider.id;\n\n if (entry.status !== requiredStatus) {\n return [];\n }\n\n if (!entry.provider.capabilities.includes(query.capability)) {\n return [];\n }\n\n if (query.protocolMode !== undefined && entry.provider.protocolMode !== query.protocolMode) {\n return [];\n }\n\n if (providerIds !== undefined && !providerIds.includes(providerId)) {\n return [];\n }\n\n if (blockedProviderIds.has(providerId)) {\n return [];\n }\n\n const paymentPreferences = mergePaymentPreferences(\n query.protocolMode\n ? {\n allowedProtocols: [query.protocolMode],\n }\n : undefined,\n query.paymentPreferences,\n );\n const paymentResolution = resolveProviderPaymentOption({\n providerId,\n providerMode: entry.provider.protocolMode,\n capabilities: entry.provider.capabilities,\n capability: query.capability,\n pricing: entry.provider.pricing,\n paymentOptions: entry.provider.paymentOptions,\n paymentPreferences,\n paymentStrategy: query.paymentStrategy,\n defaultReceiptTypes: entry.acceptance.receipts.types,\n });\n const cost =\n paymentSelectionCost(paymentResolution.selection) ??\n resolveCatalogCost(entry, query.capability);\n\n if (\n query.maxCostUsd !== undefined &&\n (cost === undefined || cost.amountUsd > query.maxCostUsd)\n ) {\n return [];\n }\n\n if (!hasRequiredReceiptTypes(entry, requiredReceiptTypes)) {\n return [];\n }\n\n if (!paymentResolution.selection) {\n return [];\n }\n\n return [\n {\n entry,\n providerId,\n capability: query.capability,\n status: entry.status,\n cost,\n paymentSelection: paymentResolution.selection,\n reasons: createMatchReasons(\n entry,\n query,\n cost,\n paymentResolution.selection,\n ),\n },\n ];\n });\n}\n\nexport function summarizeProviderCatalog(\n catalog: ProviderCatalog,\n): ProviderCatalogSummary {\n assertProviderCatalog(catalog);\n\n const providers = new Set<string>();\n const capabilities = new Set<string>();\n const protocolModes = new Set<string>();\n let readyEntries = 0;\n let rejectedEntries = 0;\n\n for (const entry of catalog.entries) {\n providers.add(entry.provider.id);\n protocolModes.add(entry.provider.protocolMode);\n\n for (const capability of entry.provider.capabilities) {\n capabilities.add(capability);\n }\n\n if (entry.status === \"ready\") {\n readyEntries += 1;\n } else {\n rejectedEntries += 1;\n }\n }\n\n return {\n schemaVersion: catalog.schemaVersion,\n generatedAt: catalog.generatedAt,\n totalEntries: catalog.entries.length,\n readyEntries,\n rejectedEntries,\n providers: [...providers],\n capabilities: [...capabilities],\n protocolModes: [...protocolModes],\n };\n}\n\nfunction assertProviderCatalogOptions(\n options: ProviderCatalogOptions,\n): asserts options is ProviderCatalogOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.artifacts)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog options require an artifacts array.\",\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 catalog generatedAt must be an ISO timestamp.\",\n });\n }\n}\n\nfunction assertProviderCatalogQuery(\n query: ProviderCatalogQuery,\n): asserts query is ProviderCatalogQuery {\n if (!isRecord(query)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog query must be an object.\",\n });\n }\n\n if (typeof query.capability !== \"string\" || query.capability.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog query capability must be a non-empty string.\",\n });\n }\n\n if (\n query.protocolMode !== undefined &&\n (typeof query.protocolMode !== \"string\" || query.protocolMode.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog query protocolMode must be a non-empty string.\",\n });\n }\n\n validatePaymentPreferences(query.paymentPreferences, query.capability);\n validatePaymentStrategy(query.paymentStrategy, query.capability);\n\n if (\n query.maxCostUsd !== undefined &&\n (typeof query.maxCostUsd !== \"number\" ||\n !Number.isFinite(query.maxCostUsd) ||\n query.maxCostUsd < 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog query maxCostUsd must be a non-negative finite number.\",\n });\n }\n\n if (query.status !== undefined && query.status !== \"ready\" && query.status !== \"rejected\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: 'Provider catalog query status must be \"ready\" or \"rejected\".',\n });\n }\n\n validateQueryStringArray(query.providerIds, \"providerIds\");\n validateQueryStringArray(query.blockedProviderIds, \"blockedProviderIds\");\n\n if (\n query.requiredReceiptTypes !== undefined &&\n (!Array.isArray(query.requiredReceiptTypes) ||\n query.requiredReceiptTypes.some((receiptType) => !isReceiptType(receiptType)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog query requiredReceiptTypes must contain known receipt types.\",\n });\n }\n}\n\nfunction createCatalogEntryFromArtifact(\n artifact: ProviderCatalogArtifact,\n): ProviderCatalogEntry {\n return {\n artifactId: artifact.artifactId,\n generatedAt: artifact.generatedAt,\n status: artifact.status,\n provider: {\n id: artifact.provider.id,\n displayName: artifact.provider.displayName,\n capabilities: [...artifact.provider.capabilities],\n protocolMode: artifact.provider.protocolMode,\n paymentOptions: cloneSerializable(artifact.provider.paymentOptions),\n pricing: cloneSerializable(artifact.provider.pricing),\n receipts: cloneSerializable(artifact.provider.receipts),\n limits: cloneSerializable(artifact.provider.limits),\n },\n acceptance: {\n gate: cloneSerializable(artifact.acceptance.gate),\n failedChecks: [...artifact.acceptance.failedChecks],\n receipts: cloneSerializable(artifact.acceptance.receipts),\n safety: cloneSerializable(artifact.acceptance.safety),\n retrySafety: cloneSerializable(artifact.acceptance.retrySafety),\n route: cloneSerializable(artifact.acceptance.route),\n timelineEventTypes: [...artifact.acceptance.timelineEventTypes],\n telemetryEventTypes: [...artifact.acceptance.telemetryEventTypes],\n errorCode: artifact.acceptance.errorCode,\n },\n };\n}\n\nfunction resolveCatalogCost(\n entry: ProviderCatalogEntry,\n capability: string,\n): Cost | undefined {\n const pricing = entry.provider.pricing;\n\n if (isProbeMeshPricing(pricing)) {\n return pricingToCost(pricing);\n }\n\n const capabilityPricing = pricing[capability];\n\n if (!isProbeMeshPricing(capabilityPricing)) {\n return undefined;\n }\n\n return pricingToCost(capabilityPricing);\n}\n\nfunction pricingToCost(pricing: ProbeMeshPricing): Cost {\n return {\n amountUsd: pricing.amountUsd,\n currency: pricing.currency,\n unit: pricing.unit,\n };\n}\n\nfunction hasRequiredReceiptTypes(\n entry: ProviderCatalogEntry,\n requiredReceiptTypes: ReceiptType[],\n) {\n const receiptTypes = new Set(entry.acceptance.receipts.types);\n\n return requiredReceiptTypes.every((receiptType) =>\n receiptTypes.has(receiptType),\n );\n}\n\nfunction createMatchReasons(\n entry: ProviderCatalogEntry,\n query: ProviderCatalogQuery,\n cost: Cost | undefined,\n paymentSelection: ProbeMeshPaymentSelection | undefined,\n) {\n const reasons = [\n `status:${entry.status}`,\n `capability:${query.capability}`,\n `protocol:${entry.provider.protocolMode}`,\n ];\n\n if (query.paymentPreferences !== undefined) {\n reasons.push(\"payment_preferences:matched\");\n }\n\n if (query.paymentStrategy !== undefined) {\n reasons.push(`payment_strategy:${query.paymentStrategy.mode}`);\n }\n\n if (paymentSelection?.score !== undefined) {\n reasons.push(`payment_score:${paymentSelection.score}`);\n }\n\n for (const scoreReason of paymentSelection?.scoreReasons ?? []) {\n reasons.push(`payment_score_reason:${scoreReason}`);\n }\n\n if (query.providerIds !== undefined) {\n reasons.push(\"provider:allowed\");\n }\n\n if (query.maxCostUsd !== undefined && cost !== undefined) {\n reasons.push(`cost:${cost.amountUsd}<=${query.maxCostUsd}`);\n }\n\n if ((query.requiredReceiptTypes ?? []).length > 0) {\n reasons.push(`receipts:${query.requiredReceiptTypes?.join(\",\")}`);\n }\n\n return reasons;\n}\n\nfunction paymentSelectionCost(\n selection: ProbeMeshPaymentSelection | undefined,\n): Cost | undefined {\n return selection?.cost;\n}\n\nfunction validateQueryStringArray(value: unknown, name: string) {\n if (\n value !== undefined &&\n (!Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider catalog query ${name} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isProbeMeshPricing(value: unknown): value is ProbeMeshPricing {\n return (\n isRecord(value) &&\n typeof value.unit === \"string\" &&\n typeof value.amountUsd === \"number\" &&\n Number.isFinite(value.amountUsd) &&\n value.amountUsd >= 0 &&\n (value.currency === undefined || typeof value.currency === \"string\")\n );\n}\n\nfunction isReceiptType(value: unknown): value is ReceiptType {\n return (\n value === \"payment_proof\" ||\n value === \"settlement_confirmation\" ||\n value === \"provider_delivery\" ||\n value === \"provider_response_evidence\" ||\n value === \"authorization_decision\"\n );\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 validateProviderCatalogEntry(\n entry: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(entry)) {\n errors.push({\n path,\n message: \"catalog entry must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(entry.artifactId, `${path}.artifactId`, errors);\n validateIsoTimestamp(entry.generatedAt, `${path}.generatedAt`, errors);\n\n if (entry.status !== \"ready\" && entry.status !== \"rejected\") {\n errors.push({\n path: `${path}.status`,\n message: 'status must be \"ready\" or \"rejected\".',\n });\n }\n\n validateEntryProvider(entry.provider, `${path}.provider`, errors);\n validateEntryAcceptance(entry.acceptance, `${path}.acceptance`, errors);\n}\n\nfunction validateEntryProvider(\n provider: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(provider)) {\n errors.push({\n path,\n message: \"provider must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(provider.id, `${path}.id`, errors);\n validateNonEmptyString(provider.displayName, `${path}.displayName`, errors);\n validateStringArray(provider.capabilities, `${path}.capabilities`, errors);\n validateNonEmptyString(provider.protocolMode, `${path}.protocolMode`, errors);\n validateProviderPaymentOptions(\n provider.paymentOptions,\n `${path}.paymentOptions`,\n Array.isArray(provider.capabilities) ? provider.capabilities : [],\n errors,\n );\n validatePricingDeclaration(provider.pricing, `${path}.pricing`, errors);\n validateReceiptSupport(provider.receipts, `${path}.receipts`, errors);\n\n if (provider.limits !== undefined && !isRecord(provider.limits)) {\n errors.push({\n path: `${path}.limits`,\n message: \"limits must be an object when provided.\",\n });\n }\n}\n\nfunction validateEntryAcceptance(\n acceptance: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(acceptance)) {\n errors.push({\n path,\n message: \"acceptance must be an object.\",\n });\n return;\n }\n\n if (!isRecord(acceptance.gate)) {\n errors.push({\n path: `${path}.gate`,\n message: \"gate must be an object.\",\n });\n } else {\n if (typeof acceptance.gate.accepted !== \"boolean\") {\n errors.push({\n path: `${path}.gate.accepted`,\n message: \"gate.accepted must be a boolean.\",\n });\n }\n\n if (\n acceptance.gate.status !== \"accepted\" &&\n acceptance.gate.status !== \"rejected\"\n ) {\n errors.push({\n path: `${path}.gate.status`,\n message: 'gate.status must be \"accepted\" or \"rejected\".',\n });\n }\n }\n\n validateStringArray(acceptance.failedChecks, `${path}.failedChecks`, errors);\n validateReceiptSummary(acceptance.receipts, `${path}.receipts`, errors);\n validateStringArray(\n acceptance.timelineEventTypes,\n `${path}.timelineEventTypes`,\n errors,\n );\n validateStringArray(\n acceptance.telemetryEventTypes,\n `${path}.telemetryEventTypes`,\n errors,\n );\n}\n\nfunction validatePricingDeclaration(\n pricing: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"pricing must be an object.\",\n });\n return;\n }\n\n if (isPricingObject(pricing)) {\n validatePricingObject(pricing, path, errors);\n return;\n }\n\n for (const [capability, capabilityPricing] of Object.entries(pricing)) {\n validateNonEmptyString(capability, `${path}.${capability}`, errors);\n validatePricingObject(capabilityPricing, `${path}.${capability}`, errors);\n }\n}\n\nfunction validatePricingObject(\n pricing: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(pricing)) {\n errors.push({\n path,\n message: \"pricing entry must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(pricing.unit, `${path}.unit`, errors);\n\n if (\n typeof pricing.amountUsd !== \"number\" ||\n !Number.isFinite(pricing.amountUsd) ||\n pricing.amountUsd < 0\n ) {\n errors.push({\n path: `${path}.amountUsd`,\n message: \"amountUsd must be a non-negative finite number.\",\n });\n }\n\n if (pricing.currency !== undefined && typeof pricing.currency !== \"string\") {\n errors.push({\n path: `${path}.currency`,\n message: \"currency must be a string when provided.\",\n });\n }\n}\n\nfunction validateReceiptSupport(\n receipts: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(receipts)) {\n errors.push({\n path,\n message: \"receipts must be an object.\",\n });\n return;\n }\n\n for (const key of [\"payment\", \"delivery\", \"responseEvidence\"]) {\n if (typeof receipts[key] !== \"boolean\") {\n errors.push({\n path: `${path}.${key}`,\n message: `${key} must be a boolean.`,\n });\n }\n }\n}\n\nfunction validateReceiptSummary(\n receipts: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (!isRecord(receipts)) {\n errors.push({\n path,\n message: \"receipts must be an object.\",\n });\n return;\n }\n\n if (typeof receipts.total !== \"number\" || !Number.isFinite(receipts.total)) {\n errors.push({\n path: `${path}.total`,\n message: \"total must be a finite number.\",\n });\n }\n\n validateStringArray(receipts.types, `${path}.types`, errors);\n validateStringArray(receipts.providers, `${path}.providers`, errors);\n\n for (const key of [\n \"hasPaymentProof\",\n \"hasSettlementConfirmation\",\n \"hasProviderDelivery\",\n ]) {\n if (typeof receipts[key] !== \"boolean\") {\n errors.push({\n path: `${path}.${key}`,\n message: `${key} must be a boolean.`,\n });\n }\n }\n}\n\nfunction isPricingObject(value: Record<string, unknown>) {\n return \"unit\" in value || \"amountUsd\" in value || \"currency\" in value;\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderCatalogValidationError[],\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: ProviderCatalogValidationError[],\n) {\n if (typeof value !== \"string\" || Number.isNaN(Date.parse(value))) {\n errors.push({\n path,\n message: `${path} must be an ISO timestamp string.`,\n });\n }\n}\n\nfunction formatValidationErrors(errors: ProviderCatalogValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\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 { ProbeMeshError } from \"./errors\";\nimport {\n assertProviderCatalog,\n summarizeProviderCatalog,\n type ProviderCatalog,\n type ProviderCatalogSummary,\n} from \"./providerCatalog\";\nimport {\n evaluateProviderCatalogPolicy,\n} from \"./providerCatalogPolicy\";\nimport type {\n ProviderCatalogPolicyAdapterInventory,\n ProviderCatalogPolicyCheck,\n ProviderCatalogPolicyEvaluationResult,\n ProviderCatalogPolicyExpectedQuery,\n ProviderCatalogPolicyOptions,\n ProviderCatalogPolicyQueryResult,\n} from \"./providerCatalogPolicy\";\nimport type {\n ProviderCatalogPolicyBundleAttestation,\n} from \"./types\";\n\nexport const PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION =\n \"probemesh.catalog-policy-bundle.v1\" as const;\n\nexport type ProviderCatalogPolicyBundleStatus = \"passed\" | \"failed\";\n\nexport type ProviderCatalogPolicyBundleFormat = \"json\" | \"markdown\";\n\nexport interface ProviderCatalogPolicyBundleOptions {\n catalog: ProviderCatalog;\n catalogPolicy?: ProviderCatalogPolicyOptions;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries: ProviderCatalogPolicyExpectedQuery[];\n evaluation?: ProviderCatalogPolicyEvaluationResult;\n generatedAt?: string;\n bundleId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderCatalogPolicyBundleHashes {\n catalog: string;\n catalogPolicy: string;\n adapterInventory: string;\n queries: string;\n evaluation: string;\n bundle: string;\n}\n\nexport interface ProviderCatalogPolicyBundleQueryCoverage {\n capability: string;\n minMatches: number;\n matches: number;\n routeableMatches: number;\n missingAdapterMatches: number;\n providerIds: string[];\n}\n\nexport interface ProviderCatalogPolicyBundle {\n schemaVersion: typeof PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION;\n bundleId: string;\n generatedAt: string;\n status: ProviderCatalogPolicyBundleStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProviderCatalogPolicyBundleHashes;\n catalogSummary: ProviderCatalogSummary;\n evaluationSummary: ProviderCatalogPolicyEvaluationResult[\"summary\"];\n queryCoverage: ProviderCatalogPolicyBundleQueryCoverage[];\n checks: ProviderCatalogPolicyCheck[];\n failedChecks: string[];\n queries: ProviderCatalogPolicyExpectedQuery[];\n}\n\nexport interface ProviderCatalogPolicyBundleValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProviderCatalogPolicyBundleValidationResult {\n valid: boolean;\n errors: ProviderCatalogPolicyBundleValidationError[];\n}\n\nexport interface ProviderCatalogPolicyBundleRuntimeVerificationOptions {\n bundle: ProviderCatalogPolicyBundle;\n catalog: ProviderCatalog;\n catalogPolicy?: ProviderCatalogPolicyOptions;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries?: ProviderCatalogPolicyExpectedQuery[];\n capability?: string;\n}\n\nexport interface ProviderCatalogPolicyBundleRuntimeVerificationResult {\n valid: boolean;\n attestation: ProviderCatalogPolicyBundleAttestation;\n errors: ProviderCatalogPolicyBundleValidationError[];\n coveredQuery?: ProviderCatalogPolicyExpectedQuery;\n}\n\nexport function createProviderCatalogPolicyBundle(\n options: ProviderCatalogPolicyBundleOptions,\n): ProviderCatalogPolicyBundle {\n assertBundleOptions(options);\n\n const evaluation =\n options.evaluation ??\n evaluateProviderCatalogPolicy({\n catalog: options.catalog,\n catalogPolicy: options.catalogPolicy,\n adapterInventory: options.adapterInventory,\n queries: options.queries,\n });\n const hashesWithoutBundle = {\n catalog: hashStableJson(options.catalog),\n catalogPolicy: hashStableJson(options.catalogPolicy ?? null),\n adapterInventory: hashStableJson(options.adapterInventory),\n queries: hashStableJson(options.queries),\n evaluation: hashStableJson(evaluation),\n bundle: \"\",\n };\n const bundleBase: ProviderCatalogPolicyBundle = {\n schemaVersion: PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION,\n bundleId:\n options.bundleId ??\n `catalog_policy_bundle_${hashStableJson({\n catalog: hashesWithoutBundle.catalog,\n catalogPolicy: hashesWithoutBundle.catalogPolicy,\n adapterInventory: hashesWithoutBundle.adapterInventory,\n queries: hashesWithoutBundle.queries,\n }).slice(0, 16)}`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: evaluation.status,\n hashAlgorithm: \"sha256\",\n hashes: hashesWithoutBundle,\n catalogSummary: summarizeProviderCatalog(options.catalog),\n evaluationSummary: cloneSerializable(evaluation.summary),\n queryCoverage: evaluation.queryResults.map(createQueryCoverage),\n checks: cloneSerializable(evaluation.checks),\n failedChecks: evaluation.checks\n .filter((check) => check.status === \"failed\")\n .map((check) => check.name),\n queries: cloneSerializable(options.queries),\n };\n const bundle: ProviderCatalogPolicyBundle = {\n ...bundleBase,\n hashes: {\n ...hashesWithoutBundle,\n bundle: hashBundleContent(bundleBase),\n },\n };\n const sanitizedBundle = sanitizeBundleOutput(\n bundle,\n options.forbiddenOutputValues ?? [],\n );\n\n assertProviderCatalogPolicyBundle(sanitizedBundle);\n\n return sanitizedBundle;\n}\n\nexport function validateProviderCatalogPolicyBundle(\n bundle: unknown,\n): ProviderCatalogPolicyBundleValidationResult {\n const errors: ProviderCatalogPolicyBundleValidationError[] = [];\n\n if (!isRecord(bundle)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider catalog policy bundle must be an object.\",\n },\n ],\n };\n }\n\n if (bundle.schemaVersion !== PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(bundle.bundleId, \"bundleId\", errors);\n validateIsoTimestamp(bundle.generatedAt, \"generatedAt\", errors);\n\n if (bundle.status !== \"passed\" && bundle.status !== \"failed\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"passed\" or \"failed\".',\n });\n }\n\n if (bundle.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(bundle.hashes, errors);\n validateObject(bundle.catalogSummary, \"catalogSummary\", errors);\n validateObject(bundle.evaluationSummary, \"evaluationSummary\", errors);\n validateQueryCoverage(bundle.queryCoverage, errors);\n validateCheckArray(bundle.checks, \"checks\", errors);\n validateStringArray(bundle.failedChecks, \"failedChecks\", errors);\n\n if (!Array.isArray(bundle.queries) || bundle.queries.length === 0) {\n errors.push({\n path: \"queries\",\n message: \"queries must be a non-empty array.\",\n });\n }\n\n if (errors.length === 0) {\n const expectedBundleHash = hashBundleContent(\n bundle as unknown as ProviderCatalogPolicyBundle,\n );\n\n if (\n (bundle.hashes as ProviderCatalogPolicyBundleHashes).bundle !==\n expectedBundleHash\n ) {\n errors.push({\n path: \"hashes.bundle\",\n message: \"bundle hash does not match bundle content.\",\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderCatalogPolicyBundle(\n bundle: unknown,\n): asserts bundle is ProviderCatalogPolicyBundle {\n const result = validateProviderCatalogPolicyBundle(bundle);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider catalog policy bundle: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProviderCatalogPolicyBundle(\n bundle: ProviderCatalogPolicyBundle,\n options: {\n format?: ProviderCatalogPolicyBundleFormat;\n } = {},\n) {\n assertProviderCatalogPolicyBundle(bundle);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatBundleMarkdown(bundle);\n }\n\n return JSON.stringify(bundle, null, 2);\n}\n\nexport function verifyProviderCatalogPolicyBundleRuntime(\n options: ProviderCatalogPolicyBundleRuntimeVerificationOptions,\n): ProviderCatalogPolicyBundleRuntimeVerificationResult {\n assertRuntimeVerificationOptions(options);\n\n const errors: ProviderCatalogPolicyBundleValidationError[] = [];\n const bundleValidation = validateProviderCatalogPolicyBundle(options.bundle);\n\n errors.push(...bundleValidation.errors);\n\n if (options.bundle.status !== \"passed\") {\n errors.push({\n path: \"status\",\n message: \"Provider catalog policy bundle must have passed evaluation.\",\n });\n }\n\n const queries = options.queries ?? options.bundle.queries;\n const evaluation = evaluateProviderCatalogPolicy({\n catalog: options.catalog,\n catalogPolicy: options.catalogPolicy,\n adapterInventory: options.adapterInventory,\n queries,\n });\n const runtimeHashes = {\n catalog: hashStableJson(options.catalog),\n catalogPolicy: hashStableJson(options.catalogPolicy ?? null),\n adapterInventory: hashStableJson(options.adapterInventory),\n queries: hashStableJson(queries),\n evaluation: hashStableJson(evaluation),\n };\n\n pushHashMismatch(\n errors,\n \"catalog\",\n options.bundle.hashes.catalog,\n runtimeHashes.catalog,\n );\n pushHashMismatch(\n errors,\n \"catalogPolicy\",\n options.bundle.hashes.catalogPolicy,\n runtimeHashes.catalogPolicy,\n );\n pushHashMismatch(\n errors,\n \"adapterInventory\",\n options.bundle.hashes.adapterInventory,\n runtimeHashes.adapterInventory,\n );\n pushHashMismatch(\n errors,\n \"queries\",\n options.bundle.hashes.queries,\n runtimeHashes.queries,\n );\n pushHashMismatch(\n errors,\n \"evaluation\",\n options.bundle.hashes.evaluation,\n runtimeHashes.evaluation,\n );\n\n const queryIndex =\n options.capability === undefined\n ? undefined\n : options.bundle.queries.findIndex(\n (query) => query.capability === options.capability,\n );\n const covered =\n options.capability === undefined ? true : queryIndex !== undefined && queryIndex >= 0;\n\n if (!covered) {\n errors.push({\n path: \"queries\",\n message: `Capability \"${options.capability}\" is not covered by the policy bundle queries.`,\n });\n }\n\n const valid = errors.length === 0;\n const attestation: ProviderCatalogPolicyBundleAttestation = {\n schemaVersion: PROVIDER_CATALOG_POLICY_BUNDLE_SCHEMA_VERSION,\n bundleId: options.bundle.bundleId,\n status: options.bundle.status,\n hashAlgorithm: options.bundle.hashAlgorithm,\n bundleHash: options.bundle.hashes.bundle,\n catalogHash: options.bundle.hashes.catalog,\n catalogPolicyHash: options.bundle.hashes.catalogPolicy,\n adapterInventoryHash: options.bundle.hashes.adapterInventory,\n queriesHash: options.bundle.hashes.queries,\n evaluationHash: options.bundle.hashes.evaluation,\n runtimeVerified: valid,\n covered,\n capability: options.capability,\n queryIndex: queryIndex !== undefined && queryIndex >= 0 ? queryIndex : undefined,\n reason: valid ? \"runtime_verified\" : errors[0]?.message,\n };\n\n return {\n valid,\n attestation,\n errors,\n coveredQuery:\n queryIndex !== undefined && queryIndex >= 0\n ? options.bundle.queries[queryIndex]\n : undefined,\n };\n}\n\nfunction assertBundleOptions(\n options: ProviderCatalogPolicyBundleOptions,\n): asserts options is ProviderCatalogPolicyBundleOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle options must be an object.\",\n });\n }\n\n assertProviderCatalog(options.catalog);\n\n if (!Array.isArray(options.adapterInventory)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle adapterInventory must be an array.\",\n });\n }\n\n if (!Array.isArray(options.queries) || options.queries.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle requires at least one query.\",\n });\n }\n\n if (\n options.bundleId !== undefined &&\n (typeof options.bundleId !== \"string\" || options.bundleId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundleId must be a non-empty string.\",\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 catalog policy bundle generatedAt must be an ISO timestamp.\",\n });\n }\n}\n\nfunction assertRuntimeVerificationOptions(\n options: ProviderCatalogPolicyBundleRuntimeVerificationOptions,\n): asserts options is ProviderCatalogPolicyBundleRuntimeVerificationOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle runtime options must be an object.\",\n });\n }\n\n assertProviderCatalogPolicyBundle(options.bundle);\n assertProviderCatalog(options.catalog);\n\n if (!Array.isArray(options.adapterInventory)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"Provider catalog policy bundle runtime adapterInventory must be an array.\",\n });\n }\n\n if (options.queries !== undefined && !Array.isArray(options.queries)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle runtime queries must be an array.\",\n });\n }\n\n if (\n options.capability !== undefined &&\n (typeof options.capability !== \"string\" || options.capability.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy bundle runtime capability must be a string.\",\n });\n }\n}\n\nfunction createQueryCoverage(\n result: ProviderCatalogPolicyQueryResult,\n): ProviderCatalogPolicyBundleQueryCoverage {\n return {\n capability: result.query.capability,\n minMatches: result.query.minMatches ?? 1,\n matches: result.matches.length,\n routeableMatches: result.routeableMatches.length,\n missingAdapterMatches: result.missingAdapterMatches.length,\n providerIds: result.routeableMatches.map((match) => match.providerId),\n };\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction hashBundleContent(bundle: ProviderCatalogPolicyBundle) {\n return hashStableJson({\n ...bundle,\n hashes: {\n ...bundle.hashes,\n bundle: \"\",\n },\n });\n}\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(sortSerializable(value));\n}\n\nfunction sortSerializable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortSerializable);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .filter((key) => value[key] !== undefined)\n .map((key) => [key, sortSerializable(value[key])]),\n );\n}\n\nfunction pushHashMismatch(\n errors: ProviderCatalogPolicyBundleValidationError[],\n name: keyof Omit<ProviderCatalogPolicyBundleHashes, \"bundle\">,\n expected: string,\n actual: string,\n) {\n if (expected !== actual) {\n errors.push({\n path: `hashes.${name}`,\n message: `${name} hash does not match runtime input.`,\n });\n }\n}\n\nfunction formatBundleMarkdown(bundle: ProviderCatalogPolicyBundle) {\n const lines = [\n `# Provider Catalog Policy Bundle ${bundle.bundleId}`,\n \"\",\n `Status: ${bundle.status}`,\n `Generated: ${bundle.generatedAt}`,\n `Bundle hash: ${bundle.hashes.bundle}`,\n \"\",\n \"## Summary\",\n `- Catalog entries: ${bundle.catalogSummary.totalEntries}`,\n `- Ready entries: ${bundle.catalogSummary.readyEntries}`,\n `- Queries: ${bundle.queryCoverage.length}`,\n `- Routeable matches: ${bundle.evaluationSummary.routeableMatches}`,\n `- Failed checks: ${bundle.evaluationSummary.failedChecks}`,\n \"\",\n \"## Query Coverage\",\n ...bundle.queryCoverage.map(\n (coverage) =>\n `- ${coverage.capability}: ${coverage.routeableMatches}/${coverage.minMatches} routeable (${formatInlineList(\n coverage.providerIds,\n )})`,\n ),\n \"\",\n \"## Checks\",\n ...bundle.checks.map(\n (check) =>\n `- ${check.status === \"passed\" ? \"[x]\" : \"[ ]\"} ${check.name}: ${check.message}`,\n ),\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction validateHashes(\n value: unknown,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (!isRecord(value)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const key of [\n \"catalog\",\n \"catalogPolicy\",\n \"adapterInventory\",\n \"queries\",\n \"evaluation\",\n \"bundle\",\n ]) {\n validateSha256(value[key], `hashes.${key}`, errors);\n }\n}\n\nfunction validateQueryCoverage(\n value: unknown,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (!Array.isArray(value)) {\n errors.push({\n path: \"queryCoverage\",\n message: \"queryCoverage must be an array.\",\n });\n return;\n }\n\n value.forEach((coverage, index) => {\n if (!isRecord(coverage)) {\n errors.push({\n path: `queryCoverage.${index}`,\n message: \"query coverage entry must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(coverage.capability, `queryCoverage.${index}.capability`, errors);\n validateNonNegativeInteger(\n coverage.minMatches,\n `queryCoverage.${index}.minMatches`,\n errors,\n );\n validateNonNegativeInteger(\n coverage.matches,\n `queryCoverage.${index}.matches`,\n errors,\n );\n validateNonNegativeInteger(\n coverage.routeableMatches,\n `queryCoverage.${index}.routeableMatches`,\n errors,\n );\n validateNonNegativeInteger(\n coverage.missingAdapterMatches,\n `queryCoverage.${index}.missingAdapterMatches`,\n errors,\n );\n validateStringArray(coverage.providerIds, `queryCoverage.${index}.providerIds`, errors);\n });\n}\n\nfunction validateCheckArray(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (!Array.isArray(value)) {\n errors.push({\n path,\n message: `${path} must be an array.`,\n });\n return;\n }\n\n value.forEach((check, index) => {\n if (!isRecord(check)) {\n errors.push({\n path: `${path}.${index}`,\n message: \"check must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(check.name, `${path}.${index}.name`, errors);\n\n if (check.status !== \"passed\" && check.status !== \"failed\") {\n errors.push({\n path: `${path}.${index}.status`,\n message: 'check status must be \"passed\" or \"failed\".',\n });\n }\n\n validateNonEmptyString(check.message, `${path}.${index}.message`, errors);\n });\n}\n\nfunction validateObject(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (!isRecord(value)) {\n errors.push({\n path,\n message: `${path} must be an object.`,\n });\n }\n}\n\nfunction validateSha256(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path,\n message: `${path} must be a sha256 hex string.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\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 validateStringArray(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction validateNonNegativeInteger(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\n) {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n errors.push({\n path,\n message: `${path} must be a non-negative integer.`,\n });\n }\n}\n\nfunction validateIsoTimestamp(\n value: unknown,\n path: string,\n errors: ProviderCatalogPolicyBundleValidationError[],\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 sanitizeBundleOutput<T>(value: T, forbiddenOutputValues: string[]) {\n return replaceForbiddenValues(\n cloneSerializable(value),\n forbiddenOutputValues.filter((entry) => entry.length > 0),\n ) as T;\n}\n\nfunction replaceForbiddenValues(value: unknown, forbiddenValues: string[]): 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 (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\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 formatValidationErrors(errors: ProviderCatalogPolicyBundleValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n\nfunction formatInlineList(values: string[]) {\n return values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n","import { ProbeMeshError } from \"./errors\";\nimport {\n mergePaymentPreferences,\n validatePaymentPreferences,\n validatePaymentStrategy,\n} from \"./paymentOptions\";\nimport {\n assertProviderCatalog,\n findProviderCatalogMatches,\n summarizeProviderCatalog,\n} from \"./providerCatalog\";\nimport type {\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderCatalogMatch,\n ProviderCatalogQuery,\n ProviderCatalogSummary,\n} from \"./providerCatalog\";\nimport type { ProviderCatalogArtifactStatus } from \"./providerCatalogArtifact\";\nimport type { ProviderProtocolMode } from \"./providerKit/types\";\nimport type {\n ProbeMeshPaymentPreferences,\n ProbeMeshPaymentStrategy,\n ProbeMeshPricing,\n ProviderPaymentOption,\n ReceiptType,\n} from \"./types\";\n\nexport type ProviderCatalogPolicyEvaluationStatus = \"passed\" | \"failed\";\n\nexport type ProviderCatalogPolicyCheckStatus = \"passed\" | \"failed\";\n\nexport type ProviderCatalogPolicyReportFormat = \"json\" | \"markdown\";\n\nexport interface ProviderCatalogPolicyAdapterInventoryEntry {\n id: string;\n capabilities: string[];\n pricing?: ProbeMeshPricing | Record<string, ProbeMeshPricing>;\n paymentOptions?: ProviderPaymentOption[];\n}\n\nexport type ProviderCatalogPolicyAdapterInventory =\n ProviderCatalogPolicyAdapterInventoryEntry[];\n\nexport interface ProviderCatalogPolicyOptions {\n enabled?: boolean;\n status?: ProviderCatalogArtifactStatus;\n protocolMode?: ProviderProtocolMode;\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n maxCostUsd?: number;\n requiredReceiptTypes?: ReceiptType[];\n providerIds?: string[];\n blockedProviderIds?: string[];\n}\n\nexport interface ProviderCatalogPolicyExpectedQuery\n extends ProviderCatalogPolicyOptions {\n capability: string;\n minMatches?: number;\n}\n\nexport interface ProviderCatalogPolicyEvaluationOptions {\n catalog: ProviderCatalog;\n catalogPolicy?: ProviderCatalogPolicyOptions;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries: ProviderCatalogPolicyExpectedQuery[];\n}\n\nexport interface ProviderCatalogPolicyCheck {\n name: string;\n status: ProviderCatalogPolicyCheckStatus;\n message: string;\n capability?: string;\n providerId?: string;\n}\n\nexport interface ProviderCatalogPolicySkippedProvider {\n providerId: string;\n capability: string;\n reasons: string[];\n catalogArtifactId?: string;\n catalogStatus?: ProviderCatalogArtifactStatus;\n inventoryOnly?: boolean;\n}\n\nexport interface ProviderCatalogPolicyMissingAdapterMatch {\n providerId: string;\n capability: string;\n catalogArtifactId: string;\n catalogStatus: ProviderCatalogArtifactStatus;\n reasons: string[];\n}\n\nexport interface ProviderCatalogPolicyQueryResult {\n query: ProviderCatalogPolicyExpectedQuery;\n matches: ProviderCatalogMatch[];\n routeableMatches: ProviderCatalogMatch[];\n missingAdapterMatches: ProviderCatalogPolicyMissingAdapterMatch[];\n skippedProviders: ProviderCatalogPolicySkippedProvider[];\n}\n\nexport interface ProviderCatalogPolicyEvaluationResult {\n status: ProviderCatalogPolicyEvaluationStatus;\n checks: ProviderCatalogPolicyCheck[];\n summary: ProviderCatalogSummary & {\n totalQueries: number;\n passedChecks: number;\n failedChecks: number;\n routeableMatches: number;\n missingAdapterMatches: number;\n };\n queryResults: ProviderCatalogPolicyQueryResult[];\n}\n\nexport interface ProviderCatalogPolicyReportOptions {\n title?: string;\n generatedAt?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderCatalogPolicyReport {\n title: string;\n generatedAt: string;\n status: ProviderCatalogPolicyEvaluationStatus;\n summary: ProviderCatalogPolicyEvaluationResult[\"summary\"];\n checks: ProviderCatalogPolicyCheck[];\n queryResults: ProviderCatalogPolicyQueryResult[];\n}\n\nexport function evaluateProviderCatalogPolicy(\n options: ProviderCatalogPolicyEvaluationOptions,\n): ProviderCatalogPolicyEvaluationResult {\n assertEvaluationOptions(options);\n\n const catalogPolicy = resolveCatalogPolicy(options.catalogPolicy);\n const adapterInventory = options.adapterInventory;\n const adapterIds = new Set(adapterInventory.map((adapter) => adapter.id));\n const catalogSummary = summarizeProviderCatalog(options.catalog);\n const checks: ProviderCatalogPolicyCheck[] = [\n {\n name: \"catalog_valid\",\n status: \"passed\",\n message: \"Provider catalog is valid.\",\n },\n {\n name: \"adapter_inventory_valid\",\n status: \"passed\",\n message: \"Adapter inventory is valid.\",\n },\n ];\n const queryResults = options.queries.map((query) =>\n evaluateQuery({\n catalog: options.catalog,\n catalogPolicy,\n query,\n adapterInventory,\n adapterIds,\n checks,\n }),\n );\n\n const failedChecks = checks.filter((check) => check.status === \"failed\").length;\n const routeableMatches = queryResults.reduce(\n (total, result) => total + result.routeableMatches.length,\n 0,\n );\n const missingAdapterMatches = queryResults.reduce(\n (total, result) => total + result.missingAdapterMatches.length,\n 0,\n );\n\n return {\n status: failedChecks === 0 ? \"passed\" : \"failed\",\n checks,\n summary: {\n ...catalogSummary,\n totalQueries: options.queries.length,\n passedChecks: checks.length - failedChecks,\n failedChecks,\n routeableMatches,\n missingAdapterMatches,\n },\n queryResults,\n };\n}\n\nexport function createProviderCatalogPolicyReport(\n result: ProviderCatalogPolicyEvaluationResult,\n options: ProviderCatalogPolicyReportOptions = {},\n): ProviderCatalogPolicyReport {\n const report: ProviderCatalogPolicyReport = {\n title: options.title ?? \"ProbeMesh Catalog Policy Report\",\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: result.status,\n summary: cloneSerializable(result.summary),\n checks: cloneSerializable(result.checks),\n queryResults: cloneSerializable(result.queryResults),\n };\n\n return sanitizeReport(report, options.forbiddenOutputValues ?? []);\n}\n\nexport function formatProviderCatalogPolicyReport(\n report: ProviderCatalogPolicyReport,\n options: {\n format?: ProviderCatalogPolicyReportFormat;\n } = {},\n) {\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatMarkdownReport(report);\n }\n\n return JSON.stringify(report, null, 2);\n}\n\nfunction assertEvaluationOptions(\n options: ProviderCatalogPolicyEvaluationOptions,\n): asserts options is ProviderCatalogPolicyEvaluationOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy evaluation options must be an object.\",\n });\n }\n\n assertProviderCatalog(options.catalog);\n assertAdapterInventory(options.adapterInventory);\n\n if (!Array.isArray(options.queries) || options.queries.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy evaluation requires at least one query.\",\n });\n }\n\n options.queries.forEach((query, index) =>\n assertExpectedQuery(query, `queries.${index}`),\n );\n assertCatalogPolicyOptions(options.catalogPolicy, \"catalogPolicy\");\n}\n\nfunction assertAdapterInventory(\n adapterInventory: unknown,\n): asserts adapterInventory is ProviderCatalogPolicyAdapterInventory {\n if (!Array.isArray(adapterInventory)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider catalog policy adapterInventory must be an array.\",\n });\n }\n\n const seen = new Set<string>();\n\n adapterInventory.forEach((adapter, index) => {\n const path = `adapterInventory.${index}`;\n\n if (!isRecord(adapter)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path} must be an object.`,\n });\n }\n\n if (typeof adapter.id !== \"string\" || adapter.id.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.id must be a non-empty string.`,\n });\n }\n\n if (seen.has(adapter.id)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.id duplicates adapter \"${adapter.id}\".`,\n });\n }\n\n seen.add(adapter.id);\n\n if (\n !Array.isArray(adapter.capabilities) ||\n adapter.capabilities.some(\n (capability) => typeof capability !== \"string\" || capability.length === 0,\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.capabilities must be an array of non-empty strings.`,\n });\n }\n\n if (\n adapter.paymentOptions !== undefined &&\n (!Array.isArray(adapter.paymentOptions) ||\n adapter.paymentOptions.some(\n (option) =>\n !isRecord(option) ||\n typeof option.id !== \"string\" ||\n option.id.length === 0 ||\n typeof option.protocolMode !== \"string\" ||\n option.protocolMode.length === 0,\n ))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.paymentOptions must be an array of payment option objects when provided.`,\n });\n }\n });\n}\n\nfunction assertExpectedQuery(\n query: unknown,\n path: string,\n): asserts query is ProviderCatalogPolicyExpectedQuery {\n if (!isRecord(query)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path} must be an object.`,\n });\n }\n\n if (typeof query.capability !== \"string\" || query.capability.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.capability must be a non-empty string.`,\n });\n }\n\n const minMatches = query.minMatches;\n\n if (\n minMatches !== undefined &&\n (typeof minMatches !== \"number\" ||\n !Number.isInteger(minMatches) ||\n minMatches < 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.minMatches must be a non-negative integer.`,\n });\n }\n\n assertCatalogPolicyOptions(query, path);\n}\n\nfunction assertCatalogPolicyOptions(\n policy: unknown,\n path: string,\n): asserts policy is ProviderCatalogPolicyOptions | undefined {\n if (policy === undefined) {\n return;\n }\n\n if (!isRecord(policy)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path} must be an object when provided.`,\n });\n }\n\n if (\n policy.status !== undefined &&\n policy.status !== \"ready\" &&\n policy.status !== \"rejected\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.status must be \"ready\" or \"rejected\".`,\n });\n }\n\n if (\n policy.protocolMode !== undefined &&\n (typeof policy.protocolMode !== \"string\" || policy.protocolMode.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.protocolMode must be a non-empty string.`,\n });\n }\n\n validatePaymentPreferences(policy.paymentPreferences, `${path}.paymentPreferences`);\n validatePaymentStrategy(policy.paymentStrategy, `${path}.paymentStrategy`);\n\n if (\n policy.maxCostUsd !== undefined &&\n (typeof policy.maxCostUsd !== \"number\" ||\n !Number.isFinite(policy.maxCostUsd) ||\n policy.maxCostUsd < 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.maxCostUsd must be a non-negative finite number.`,\n });\n }\n\n validateStringArray(policy.providerIds, `${path}.providerIds`);\n validateStringArray(policy.blockedProviderIds, `${path}.blockedProviderIds`);\n\n if (\n policy.requiredReceiptTypes !== undefined &&\n (!Array.isArray(policy.requiredReceiptTypes) ||\n policy.requiredReceiptTypes.some((receiptType) => !isReceiptType(receiptType)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path}.requiredReceiptTypes must contain known receipt types.`,\n });\n }\n}\n\nfunction evaluateQuery(options: {\n catalog: ProviderCatalog;\n catalogPolicy: ResolvedPolicy;\n query: ProviderCatalogPolicyExpectedQuery;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n adapterIds: Set<string>;\n checks: ProviderCatalogPolicyCheck[];\n}): ProviderCatalogPolicyQueryResult {\n const resolvedQuery = resolveQuery(options.catalogPolicy, options.query);\n const matches = findProviderCatalogMatches(options.catalog, resolvedQuery);\n const routeableMatches = matches.filter((match) =>\n hasRouteableAdapter(match, options.adapterInventory),\n );\n const missingAdapterMatches = matches\n .filter((match) => !options.adapterIds.has(match.providerId))\n .map((match) => ({\n providerId: match.providerId,\n capability: match.capability,\n catalogArtifactId: match.entry.artifactId,\n catalogStatus: match.entry.status,\n reasons: [\n ...match.reasons,\n `missing_adapter:${match.providerId}`,\n ],\n }));\n const skippedProviders = createSkippedProviders(\n options.catalog.entries,\n options.query.capability,\n matches,\n resolvedQuery,\n options.adapterInventory,\n );\n const minMatches = options.query.minMatches ?? 1;\n\n pushCheck(options.checks, {\n name: \"ready_matches\",\n status: matches.length >= minMatches ? \"passed\" : \"failed\",\n capability: options.query.capability,\n message:\n matches.length >= minMatches\n ? `Found ${matches.length} catalog match(es) for \"${options.query.capability}\".`\n : `Expected at least ${minMatches} catalog match(es) for \"${options.query.capability}\", found ${matches.length}.`,\n });\n pushCheck(options.checks, {\n name: \"routeable_matches\",\n status: routeableMatches.length >= minMatches ? \"passed\" : \"failed\",\n capability: options.query.capability,\n message:\n routeableMatches.length >= minMatches\n ? `Found ${routeableMatches.length} routeable adapter-backed match(es) for \"${options.query.capability}\".`\n : `Expected at least ${minMatches} routeable adapter-backed match(es) for \"${options.query.capability}\", found ${routeableMatches.length}.`,\n });\n\n for (const missingMatch of missingAdapterMatches) {\n pushCheck(options.checks, {\n name: \"missing_adapter\",\n status: routeableMatches.length >= minMatches ? \"passed\" : \"failed\",\n capability: missingMatch.capability,\n providerId: missingMatch.providerId,\n message:\n routeableMatches.length >= minMatches\n ? `Catalog provider \"${missingMatch.providerId}\" matches policy but is missing from adapter inventory; minimum routeable matches are still satisfied.`\n : `Catalog provider \"${missingMatch.providerId}\" matches policy but is missing from adapter inventory.`,\n });\n }\n\n return {\n query: options.query,\n matches,\n routeableMatches,\n missingAdapterMatches,\n skippedProviders,\n };\n}\n\ninterface ResolvedPolicy {\n enabled: boolean;\n status: ProviderCatalogArtifactStatus;\n protocolMode?: ProviderProtocolMode;\n paymentPreferences?: ProbeMeshPaymentPreferences;\n paymentStrategy?: ProbeMeshPaymentStrategy;\n maxCostUsd?: number;\n requiredReceiptTypes?: ReceiptType[];\n providerIds?: string[];\n blockedProviderIds?: string[];\n}\n\nfunction resolveCatalogPolicy(\n policy: ProviderCatalogPolicyOptions | undefined,\n): ResolvedPolicy {\n return {\n enabled: policy?.enabled ?? true,\n status: policy?.status ?? \"ready\",\n protocolMode: policy?.protocolMode,\n paymentPreferences: policy?.paymentPreferences,\n paymentStrategy: policy?.paymentStrategy,\n maxCostUsd: policy?.maxCostUsd,\n requiredReceiptTypes: policy?.requiredReceiptTypes,\n providerIds: policy?.providerIds,\n blockedProviderIds: policy?.blockedProviderIds,\n };\n}\n\nfunction resolveQuery(\n policy: ResolvedPolicy,\n query: ProviderCatalogPolicyExpectedQuery,\n): ProviderCatalogQuery {\n const queryPolicy = resolveCatalogPolicy(query);\n const activePolicy = policy.enabled ? policy : resolveCatalogPolicy(undefined);\n\n return {\n capability: query.capability,\n protocolMode: queryPolicy.protocolMode ?? activePolicy.protocolMode,\n paymentPreferences: mergePaymentPreferences(\n activePolicy.paymentPreferences,\n queryPolicy.paymentPreferences,\n ),\n paymentStrategy: queryPolicy.paymentStrategy ?? activePolicy.paymentStrategy,\n maxCostUsd: strictestMaxCostUsd(\n queryPolicy.maxCostUsd,\n activePolicy.maxCostUsd,\n ),\n requiredReceiptTypes: unionProviderIds(\n queryPolicy.requiredReceiptTypes,\n activePolicy.requiredReceiptTypes,\n ) as ReceiptType[],\n providerIds: intersectProviderIds(\n queryPolicy.providerIds,\n activePolicy.providerIds,\n ),\n blockedProviderIds: unionProviderIds(\n queryPolicy.blockedProviderIds,\n activePolicy.blockedProviderIds,\n ),\n status: queryPolicy.status ?? activePolicy.status,\n };\n}\n\nfunction hasRouteableAdapter(\n match: ProviderCatalogMatch,\n adapterInventory: ProviderCatalogPolicyAdapterInventory,\n) {\n return adapterInventory.some(\n (adapter) =>\n adapter.id === match.providerId &&\n adapter.capabilities.includes(match.capability) &&\n (adapter.paymentOptions === undefined ||\n match.paymentSelection === undefined ||\n adapter.paymentOptions.some(\n (option) => option.id === match.paymentSelection?.optionId,\n )),\n );\n}\n\nfunction createSkippedProviders(\n entries: ProviderCatalogEntry[],\n capability: string,\n matches: ProviderCatalogMatch[],\n query: ProviderCatalogQuery,\n adapterInventory: ProviderCatalogPolicyAdapterInventory,\n) {\n const matchIds = new Set(matches.map((match) => match.providerId));\n const adapterIds = new Set(adapterInventory.map((adapter) => adapter.id));\n const catalogProviderIds = new Set(entries.map((entry) => entry.provider.id));\n const skippedCatalogEntries = entries\n .filter((entry) => entry.provider.capabilities.includes(capability))\n .filter((entry) => !matchIds.has(entry.provider.id))\n .map((entry) => ({\n providerId: entry.provider.id,\n capability,\n catalogArtifactId: entry.artifactId,\n catalogStatus: entry.status,\n reasons: explainSkippedEntry(entry, query, adapterIds),\n }));\n const inventoryOnlyAdapters = adapterInventory\n .filter((adapter) => adapter.capabilities.includes(capability))\n .filter((adapter) => !catalogProviderIds.has(adapter.id))\n .map((adapter) => ({\n providerId: adapter.id,\n capability,\n inventoryOnly: true,\n reasons: [\"adapter:not_in_catalog\"],\n }));\n\n return [...skippedCatalogEntries, ...inventoryOnlyAdapters];\n}\n\nfunction explainSkippedEntry(\n entry: ProviderCatalogEntry,\n query: ProviderCatalogQuery,\n adapterIds: Set<string>,\n) {\n const reasons: string[] = [];\n const providerId = entry.provider.id;\n\n if (entry.status !== (query.status ?? \"ready\")) {\n reasons.push(`status:${entry.status}`);\n }\n\n if (query.protocolMode && entry.provider.protocolMode !== query.protocolMode) {\n reasons.push(`protocol:${entry.provider.protocolMode}`);\n }\n\n if (query.paymentPreferences) {\n const paymentMatch = findProviderCatalogMatches(\n {\n schemaVersion: \"probemesh.provider-catalog.index.v1\",\n generatedAt: \"1970-01-01T00:00:00.000Z\",\n entries: [entry],\n },\n {\n capability: query.capability,\n paymentPreferences: query.paymentPreferences,\n status: entry.status,\n },\n );\n\n if (paymentMatch.length === 0) {\n reasons.push(\"payment_preferences:not_matched\");\n }\n }\n\n if (query.providerIds && !query.providerIds.includes(providerId)) {\n reasons.push(\"provider:not_allowed\");\n }\n\n if (query.blockedProviderIds?.includes(providerId)) {\n reasons.push(\"provider:blocked\");\n }\n\n const cost = resolveCatalogCost(entry, query.capability);\n\n if (\n query.maxCostUsd !== undefined &&\n (cost === undefined || cost.amountUsd > query.maxCostUsd)\n ) {\n reasons.push(`cost:${cost?.amountUsd ?? \"unknown\"}>${query.maxCostUsd}`);\n }\n\n const receiptTypes = new Set(entry.acceptance.receipts.types);\n\n for (const receiptType of query.requiredReceiptTypes ?? []) {\n if (!receiptTypes.has(receiptType)) {\n reasons.push(`missing_receipt:${receiptType}`);\n }\n }\n\n if (!adapterIds.has(providerId)) {\n reasons.push(`missing_adapter:${providerId}`);\n }\n\n return reasons.length > 0 ? reasons : [\"not_matched\"];\n}\n\nfunction resolveCatalogCost(\n entry: ProviderCatalogEntry,\n capability: string,\n) {\n const pricing = entry.provider.pricing;\n\n if (isPricing(pricing)) {\n return pricing;\n }\n\n const capabilityPricing = pricing[capability];\n return isPricing(capabilityPricing) ? capabilityPricing : undefined;\n}\n\nfunction pushCheck(\n checks: ProviderCatalogPolicyCheck[],\n check: ProviderCatalogPolicyCheck,\n) {\n checks.push(check);\n}\n\nfunction strictestMaxCostUsd(\n first: number | undefined,\n second: number | undefined,\n) {\n if (first === undefined) {\n return second;\n }\n\n if (second === undefined) {\n return first;\n }\n\n return Math.min(first, second);\n}\n\nfunction intersectProviderIds(\n first: string[] | undefined,\n second: string[] | undefined,\n) {\n if (!first) {\n return second;\n }\n\n if (!second) {\n return first;\n }\n\n return first.filter((providerId) => second.includes(providerId));\n}\n\nfunction unionProviderIds(first: string[] | undefined, second: string[] | undefined) {\n return [...new Set([...(first ?? []), ...(second ?? [])])];\n}\n\nfunction formatMarkdownReport(report: ProviderCatalogPolicyReport) {\n const lines = [\n `# ${report.title}`,\n \"\",\n `Status: ${report.status}`,\n `Generated: ${report.generatedAt}`,\n \"\",\n \"## Summary\",\n `- Total entries: ${report.summary.totalEntries}`,\n `- Ready entries: ${report.summary.readyEntries}`,\n `- Rejected entries: ${report.summary.rejectedEntries}`,\n `- Queries: ${report.summary.totalQueries}`,\n `- Routeable matches: ${report.summary.routeableMatches}`,\n `- Missing adapter matches: ${report.summary.missingAdapterMatches}`,\n `- Failed checks: ${report.summary.failedChecks}`,\n \"\",\n \"## Checks\",\n ...report.checks.map(\n (check) =>\n `- ${check.status === \"passed\" ? \"[x]\" : \"[ ]\"} ${check.name}: ${check.message}`,\n ),\n \"\",\n \"## Queries\",\n ...report.queryResults.flatMap((result) => [\n `### ${result.query.capability}`,\n `- Matches: ${formatProviderIds(result.matches.map((match) => match.providerId))}`,\n `- Payment options: ${formatMatchPaymentOptions(result.routeableMatches)}`,\n `- Routeable: ${formatProviderIds(\n result.routeableMatches.map((match) => match.providerId),\n )}`,\n `- Missing adapters: ${formatProviderIds(\n result.missingAdapterMatches.map((match) => match.providerId),\n )}`,\n `- Skipped: ${formatProviderIds(\n result.skippedProviders.map((provider) => provider.providerId),\n )}`,\n \"\",\n ]),\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction formatProviderIds(providerIds: string[]) {\n return providerIds.length > 0 ? providerIds.join(\", \") : \"none\";\n}\n\nfunction formatMatchPaymentOptions(matches: ProviderCatalogMatch[]) {\n if (matches.length === 0) {\n return \"none\";\n }\n\n return matches\n .map((match) => {\n const selection = match.paymentSelection;\n\n if (!selection) {\n return `${match.providerId}: none`;\n }\n\n const score =\n selection.score !== undefined ? ` score=${selection.score}` : \"\";\n const reasons =\n selection.scoreReasons && selection.scoreReasons.length > 0\n ? ` (${selection.scoreReasons.join(\"; \")})`\n : \"\";\n\n return `${match.providerId}: ${selection.optionId}/${selection.protocolMode}${score}${reasons}`;\n })\n .join(\", \");\n}\n\nfunction sanitizeReport<T>(value: T, forbiddenOutputValues: string[]) {\n return replaceForbiddenValues(\n cloneSerializable(value),\n forbiddenOutputValues.filter((entry) => entry.length > 0),\n ) as T;\n}\n\nfunction replaceForbiddenValues(value: unknown, forbiddenValues: string[]): 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 (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\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 validateStringArray(value: unknown, path: string) {\n if (\n value !== undefined &&\n (!Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isPricing(value: unknown): value is ProbeMeshPricing {\n return (\n isRecord(value) &&\n typeof value.unit === \"string\" &&\n typeof value.amountUsd === \"number\" &&\n Number.isFinite(value.amountUsd) &&\n value.amountUsd >= 0 &&\n (value.currency === undefined || typeof value.currency === \"string\")\n );\n}\n\nfunction isReceiptType(value: unknown): value is ReceiptType {\n return (\n value === \"payment_proof\" ||\n value === \"settlement_confirmation\" ||\n value === \"provider_delivery\" ||\n value === \"provider_response_evidence\" ||\n value === \"authorization_decision\"\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 {\n assertProbeMeshCallAuditArtifact,\n validateProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\nimport { ProbeMeshError } from \"./errors\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n ProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\n\nexport const PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION =\n \"probemesh.audit-trail.v1\" as const;\n\nexport type ProbeMeshAuditTrailBundleStatus = \"complete\" | \"incomplete\";\n\nexport type ProbeMeshAuditTrailBundleFormat = \"json\" | \"markdown\";\n\nexport interface ProbeMeshAuditTrailBundleOptions {\n artifacts: ProbeMeshCallAuditArtifact[];\n generatedAt?: string;\n bundleId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProbeMeshAuditTrailBundleSummary {\n totalCalls: number;\n completedCalls: number;\n failedCalls: number;\n providers: string[];\n capabilities: string[];\n receiptTypes: string[];\n policyBundleIds: string[];\n unsafePaymentEvidenceCalls: number;\n retrySafeFailures: number;\n uncoveredPolicyFailures: number;\n}\n\nexport interface ProbeMeshAuditTrailBundleHashes {\n artifacts: string;\n summary: string;\n bundle: string;\n}\n\nexport interface ProbeMeshAuditTrailBundle {\n schemaVersion: typeof PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION;\n bundleId: string;\n generatedAt: string;\n status: ProbeMeshAuditTrailBundleStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProbeMeshAuditTrailBundleHashes;\n summary: ProbeMeshAuditTrailBundleSummary;\n artifacts: ProbeMeshCallAuditArtifact[];\n}\n\nexport interface ProbeMeshAuditTrailBundleValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProbeMeshAuditTrailBundleValidationResult {\n valid: boolean;\n errors: ProbeMeshAuditTrailBundleValidationError[];\n}\n\nexport interface ProbeMeshAuditTrailCollector {\n onArtifact(artifact: ProbeMeshCallAuditArtifact): void;\n getArtifacts(): ProbeMeshCallAuditArtifact[];\n clear(): void;\n createBundle(\n options?: Omit<ProbeMeshAuditTrailBundleOptions, \"artifacts\">,\n ): ProbeMeshAuditTrailBundle;\n}\n\nexport function createProbeMeshAuditTrailCollector(): ProbeMeshAuditTrailCollector {\n const artifacts: ProbeMeshCallAuditArtifact[] = [];\n\n return {\n onArtifact(artifact) {\n assertProbeMeshCallAuditArtifact(artifact);\n artifacts.push(cloneSerializable(artifact));\n },\n getArtifacts() {\n return cloneSerializable(artifacts);\n },\n clear() {\n artifacts.length = 0;\n },\n createBundle(options = {}) {\n return createProbeMeshAuditTrailBundle({\n ...options,\n artifacts,\n });\n },\n };\n}\n\nexport function createProbeMeshAuditTrailBundle(\n options: ProbeMeshAuditTrailBundleOptions,\n): ProbeMeshAuditTrailBundle {\n assertBundleOptions(options);\n\n for (const [index, artifact] of options.artifacts.entries()) {\n const validation = validateProbeMeshCallAuditArtifact(artifact);\n\n if (!validation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh call audit artifact at index ${index}: ${formatValidationErrors(\n validation.errors,\n )}`,\n });\n }\n }\n\n const artifacts = sanitizeBundleOutput(\n options.artifacts,\n options.forbiddenOutputValues ?? [],\n );\n const summary = summarizeArtifacts(artifacts);\n const hashesWithoutBundle: ProbeMeshAuditTrailBundleHashes = {\n artifacts: hashStableJson(artifacts),\n summary: hashStableJson(summary),\n bundle: \"\",\n };\n const bundleBase: ProbeMeshAuditTrailBundle = {\n schemaVersion: PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION,\n bundleId:\n options.bundleId ??\n `audit_trail_${hashStableJson({\n artifacts: hashesWithoutBundle.artifacts,\n summary: hashesWithoutBundle.summary,\n }).slice(0, 16)}`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: artifacts.length > 0 ? \"complete\" : \"incomplete\",\n hashAlgorithm: \"sha256\",\n hashes: hashesWithoutBundle,\n summary,\n artifacts,\n };\n const bundle: ProbeMeshAuditTrailBundle = {\n ...bundleBase,\n hashes: {\n ...hashesWithoutBundle,\n bundle: hashBundleContent(bundleBase),\n },\n };\n\n assertProbeMeshAuditTrailBundle(bundle);\n\n return bundle;\n}\n\nexport function summarizeProbeMeshAuditTrailBundle(\n bundleOrArtifacts: ProbeMeshAuditTrailBundle | ProbeMeshCallAuditArtifact[],\n): ProbeMeshAuditTrailBundleSummary {\n return Array.isArray(bundleOrArtifacts)\n ? summarizeArtifacts(bundleOrArtifacts)\n : cloneSerializable(bundleOrArtifacts.summary);\n}\n\nexport function validateProbeMeshAuditTrailBundle(\n bundle: unknown,\n): ProbeMeshAuditTrailBundleValidationResult {\n const errors: ProbeMeshAuditTrailBundleValidationError[] = [];\n\n if (!isRecord(bundle)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"ProbeMesh audit trail bundle must be an object.\",\n },\n ],\n };\n }\n\n if (bundle.schemaVersion !== PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(bundle.bundleId, \"bundleId\", errors);\n validateIsoTimestamp(bundle.generatedAt, \"generatedAt\", errors);\n\n if (bundle.status !== \"complete\" && bundle.status !== \"incomplete\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"complete\" or \"incomplete\".',\n });\n }\n\n if (bundle.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(bundle.hashes, errors);\n validateSummary(bundle.summary, errors);\n\n if (!Array.isArray(bundle.artifacts)) {\n errors.push({\n path: \"artifacts\",\n message: \"artifacts must be an array.\",\n });\n } else {\n bundle.artifacts.forEach((artifact, index) => {\n const validation = validateProbeMeshCallAuditArtifact(artifact);\n\n for (const artifactError of validation.errors) {\n errors.push({\n path: `artifacts.${index}.${artifactError.path}`,\n message: artifactError.message,\n });\n }\n });\n }\n\n if (errors.length === 0) {\n const typedBundle = bundle as unknown as ProbeMeshAuditTrailBundle;\n\n pushHashMismatch(\n errors,\n \"hashes.artifacts\",\n typedBundle.hashes.artifacts,\n hashStableJson(typedBundle.artifacts),\n );\n pushHashMismatch(\n errors,\n \"hashes.summary\",\n typedBundle.hashes.summary,\n hashStableJson(typedBundle.summary),\n );\n pushHashMismatch(\n errors,\n \"hashes.bundle\",\n typedBundle.hashes.bundle,\n hashBundleContent(typedBundle),\n );\n\n const expectedSummary = summarizeArtifacts(typedBundle.artifacts);\n\n if (stableStringify(typedBundle.summary) !== stableStringify(expectedSummary)) {\n errors.push({\n path: \"summary\",\n message: \"summary does not match bundle artifacts.\",\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProbeMeshAuditTrailBundle(\n bundle: unknown,\n): asserts bundle is ProbeMeshAuditTrailBundle {\n const result = validateProbeMeshAuditTrailBundle(bundle);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh audit trail bundle: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProbeMeshAuditTrailBundle(\n bundle: ProbeMeshAuditTrailBundle,\n options: {\n format?: ProbeMeshAuditTrailBundleFormat;\n } = {},\n) {\n assertProbeMeshAuditTrailBundle(bundle);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatBundleMarkdown(bundle);\n }\n\n return JSON.stringify(bundle, null, 2);\n}\n\nfunction assertBundleOptions(\n options: ProbeMeshAuditTrailBundleOptions,\n): asserts options is ProbeMeshAuditTrailBundleOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundle options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.artifacts)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundle artifacts must be an array.\",\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: \"ProbeMesh audit trail bundle generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.bundleId !== undefined &&\n (typeof options.bundleId !== \"string\" || options.bundleId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundleId 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 \"ProbeMesh audit trail bundle forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeArtifacts(\n artifacts: ProbeMeshCallAuditArtifact[],\n): ProbeMeshAuditTrailBundleSummary {\n const providers: string[] = [];\n const capabilities: string[] = [];\n const receiptTypes: string[] = [];\n const policyBundleIds: string[] = [];\n let unsafePaymentEvidenceCalls = 0;\n let retrySafeFailures = 0;\n let uncoveredPolicyFailures = 0;\n\n for (const artifact of artifacts) {\n pushUnique(providers, artifact.call.providerId);\n pushUnique(capabilities, artifact.call.capability);\n\n for (const receiptType of artifact.evidence.receiptSummary.types) {\n pushUnique(receiptTypes, receiptType);\n }\n\n const attestationBundleId = artifact.evidence.route?.attestation?.bundleId;\n pushUnique(policyBundleIds, attestationBundleId);\n\n if (\n artifact.evidence.safety?.moneyMayHaveMoved === true ||\n artifact.evidence.receiptSummary.hasPaymentProof\n ) {\n unsafePaymentEvidenceCalls += 1;\n }\n\n if (\n artifact.status === \"failed\" &&\n artifact.evidence.retrySafety?.safeToAutoRetry === true\n ) {\n retrySafeFailures += 1;\n }\n\n if (\n artifact.status === \"failed\" &&\n artifact.evidence.route?.explanation?.attempts.some(\n (attempt) => attempt.reason === \"skipped_policy_bundle_uncovered\",\n ) === true\n ) {\n uncoveredPolicyFailures += 1;\n }\n }\n\n return {\n totalCalls: artifacts.length,\n completedCalls: artifacts.filter((artifact) => artifact.status === \"completed\")\n .length,\n failedCalls: artifacts.filter((artifact) => artifact.status === \"failed\")\n .length,\n providers,\n capabilities,\n receiptTypes,\n policyBundleIds,\n unsafePaymentEvidenceCalls,\n retrySafeFailures,\n uncoveredPolicyFailures,\n };\n}\n\nfunction validateHashes(\n hashes: unknown,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (!isRecord(hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const key of [\"artifacts\", \"summary\", \"bundle\"]) {\n validateSha256String(hashes[key], `hashes.${key}`, errors);\n }\n}\n\nfunction validateSummary(\n summary: unknown,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (!isRecord(summary)) {\n errors.push({\n path: \"summary\",\n message: \"summary must be an object.\",\n });\n return;\n }\n\n for (const key of [\n \"totalCalls\",\n \"completedCalls\",\n \"failedCalls\",\n \"unsafePaymentEvidenceCalls\",\n \"retrySafeFailures\",\n \"uncoveredPolicyFailures\",\n ]) {\n if (\n typeof summary[key] !== \"number\" ||\n !Number.isFinite(summary[key]) ||\n summary[key] < 0\n ) {\n errors.push({\n path: `summary.${key}`,\n message: `summary.${key} must be a non-negative finite number.`,\n });\n }\n }\n\n validateStringArray(summary.providers, \"summary.providers\", errors);\n validateStringArray(summary.capabilities, \"summary.capabilities\", errors);\n validateStringArray(summary.receiptTypes, \"summary.receiptTypes\", errors);\n validateStringArray(summary.policyBundleIds, \"summary.policyBundleIds\", errors);\n}\n\nfunction hashBundleContent(bundle: ProbeMeshAuditTrailBundle) {\n return hashStableJson({\n ...bundle,\n hashes: {\n ...bundle.hashes,\n bundle: \"\",\n },\n });\n}\n\nfunction pushHashMismatch(\n errors: ProbeMeshAuditTrailBundleValidationError[],\n path: string,\n expected: string,\n actual: string,\n) {\n if (expected === actual) {\n return;\n }\n\n errors.push({\n path,\n message: `${path} does not match bundle content.`,\n });\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(sortSerializable(value));\n}\n\nfunction sortSerializable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortSerializable);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .filter((key) => value[key] !== undefined)\n .map((key) => [key, sortSerializable(value[key])]),\n );\n}\n\nfunction sanitizeBundleOutput<T>(value: T, forbiddenOutputValues: string[]) {\n const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);\n\n return redactX402Secrets(\n replaceForbiddenValues(cloneSerializable(value), forbiddenValues),\n ) as T;\n}\n\nfunction replaceForbiddenValues(\n value: unknown,\n forbiddenValues: string[],\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 (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\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 formatBundleMarkdown(bundle: ProbeMeshAuditTrailBundle) {\n return [\n `# ProbeMesh Audit Trail Bundle`,\n ``,\n `Status: ${bundle.status}`,\n `Schema: ${bundle.schemaVersion}`,\n `Bundle ID: ${bundle.bundleId}`,\n `Generated: ${bundle.generatedAt}`,\n ``,\n `## Summary`,\n `- Total calls: ${bundle.summary.totalCalls}`,\n `- Completed: ${bundle.summary.completedCalls}`,\n `- Failed: ${bundle.summary.failedCalls}`,\n `- Providers: ${formatInlineList(bundle.summary.providers)}`,\n `- Capabilities: ${formatInlineList(bundle.summary.capabilities)}`,\n `- Receipt types: ${formatInlineList(bundle.summary.receiptTypes)}`,\n `- Policy bundles: ${formatInlineList(bundle.summary.policyBundleIds)}`,\n `- Unsafe payment evidence calls: ${bundle.summary.unsafePaymentEvidenceCalls}`,\n `- Retry-safe failures: ${bundle.summary.retrySafeFailures}`,\n `- Uncovered policy failures: ${bundle.summary.uncoveredPolicyFailures}`,\n ``,\n `## Artifacts`,\n ...bundle.artifacts.map(\n (artifact) =>\n `- ${artifact.call.callId ?? artifact.artifactId}: ${artifact.status} / ${artifact.call.capability} / ${artifact.call.providerId ?? \"none\"}`,\n ),\n ``,\n `## Hashes`,\n `- Bundle: ${bundle.hashes.bundle}`,\n `- Artifacts: ${bundle.hashes.artifacts}`,\n `- Summary: ${bundle.hashes.summary}`,\n ].join(\"\\n\");\n}\n\nfunction formatInlineList(values: string[]) {\n return values.length === 0 ? \"none\" : values.join(\", \");\n}\n\nfunction pushUnique(values: string[], value: string | undefined) {\n if (value && !values.includes(value)) {\n values.push(value);\n }\n}\n\nfunction validateSha256String(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path,\n message: `${path} must be a sha256 hex string.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\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: ProbeMeshAuditTrailBundleValidationError[],\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 validateStringArray(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatValidationErrors(errors: Array<{ path: string; message: string }>) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProbeMeshAuditTrailBundle,\n formatProbeMeshAuditTrailBundle,\n} from \"../auditTrailBundle\";\nimport type {\n ProbeMeshAuditTrailBundle,\n ProbeMeshAuditTrailBundleFormat,\n ProbeMeshAuditTrailBundleOptions,\n} from \"../auditTrailBundle\";\nimport type {\n ProbeMeshCallAuditArtifact,\n} from \"../callAuditArtifact\";\n\nexport interface ProbeMeshAuditTrailExportCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProbeMeshAuditTrailExportCliOutputs {\n json?: string;\n markdown?: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliBundle\n extends Omit<ProbeMeshAuditTrailBundleOptions, \"artifacts\"> {\n format?: ProbeMeshAuditTrailBundleFormat;\n}\n\nexport interface ProbeMeshAuditTrailExportCliConfig {\n artifacts?: ProbeMeshCallAuditArtifact[];\n artifactFiles?: string[];\n bundle?: ProbeMeshAuditTrailExportCliBundle;\n outputs?: ProbeMeshAuditTrailExportCliOutputs;\n}\n\nexport type ProbeMeshAuditTrailExportCliConfigExport =\n | ProbeMeshAuditTrailExportCliConfig\n | ProbeMeshAuditTrailExportCliSkip;\n\nexport type ProbeMeshAuditTrailExportCliConfigFactory = (\n context: ProbeMeshAuditTrailExportCliConfigContext,\n) =>\n | ProbeMeshAuditTrailExportCliConfigExport\n | Promise<ProbeMeshAuditTrailExportCliConfigExport>;\n\nexport interface ProbeMeshAuditTrailExportCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProbeMeshAuditTrailExportCliSkip;\n bundle?: ProbeMeshAuditTrailBundle;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProbeMeshAuditTrailExportCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProbeMeshAuditTrailBundleFormat;\n outJson?: string;\n outMarkdown?: string;\n bundleId?: string;\n generatedAt?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-audit-trail-export --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--bundle-id <text>] [--generated-at <iso>]\";\n\nexport async function runProbeMeshAuditTrailExportCli(\n options: ProbeMeshAuditTrailExportCliOptions = {},\n): Promise<ProbeMeshAuditTrailExportCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `ProbeMesh audit trail export skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const artifacts = await loadArtifacts({\n cwd,\n inlineArtifacts: configExport.artifacts,\n artifactFiles: configExport.artifactFiles,\n });\n const bundle = createProbeMeshAuditTrailBundle({\n artifacts,\n bundleId: parsedArgs.bundleId ?? configExport.bundle?.bundleId,\n generatedAt: parsedArgs.generatedAt ?? configExport.bundle?.generatedAt,\n forbiddenOutputValues: configExport.bundle?.forbiddenOutputValues,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.bundle?.format ?? \"markdown\";\n const stdout = formatProbeMeshAuditTrailBundle(bundle, {\n format: selectedFormat,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n bundle,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n },\n });\n\n return {\n exitCode: bundle.status === \"complete\" ? 0 : 1,\n skipped: false,\n bundle,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error\n ? error.message\n : \"Unknown audit trail export CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--bundle-id\") {\n parsedArgs.bundleId = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--generated-at\") {\n parsedArgs.generatedAt = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProbeMeshAuditTrailExportCliConfigContext,\n): Promise<ProbeMeshAuditTrailExportCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProbeMeshAuditTrailExportCliConfigFactory)(context);\n }\n\n return configExport as ProbeMeshAuditTrailExportCliConfigExport;\n}\n\nfunction isCliSkip(\n value: unknown,\n): value is ProbeMeshAuditTrailExportCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProbeMeshAuditTrailExportCliSkip>).skip === true &&\n typeof (value as Partial<ProbeMeshAuditTrailExportCliSkip>).reason ===\n \"string\"\n );\n}\n\nfunction assertCliConfig(\n value: unknown,\n): asserts value is ProbeMeshAuditTrailExportCliConfig {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Audit trail export CLI config must export an object.\");\n }\n\n const config = value as Partial<ProbeMeshAuditTrailExportCliConfig>;\n\n if (config.artifacts !== undefined && !Array.isArray(config.artifacts)) {\n throw new Error(\"Audit trail export CLI artifacts must be an array.\");\n }\n\n if (\n config.artifactFiles !== undefined &&\n (!Array.isArray(config.artifactFiles) ||\n config.artifactFiles.some((artifactFile) => typeof artifactFile !== \"string\"))\n ) {\n throw new Error(\"Audit trail export CLI artifactFiles must be an array of strings.\");\n }\n\n if (config.bundle !== undefined) {\n assertBundleConfig(config.bundle);\n }\n\n const outputs = config.outputs;\n\n if (\n outputs !== undefined &&\n (!outputs ||\n typeof outputs !== \"object\" ||\n Array.isArray(outputs) ||\n (outputs.json !== undefined && typeof outputs.json !== \"string\") ||\n (outputs.markdown !== undefined && typeof outputs.markdown !== \"string\"))\n ) {\n throw new Error(\"Audit trail export CLI outputs must contain string paths.\");\n }\n}\n\nfunction assertBundleConfig(value: unknown) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Audit trail export CLI bundle config must be an object.\");\n }\n\n const bundle = value as Partial<ProbeMeshAuditTrailExportCliBundle>;\n\n if (bundle.bundleId !== undefined && typeof bundle.bundleId !== \"string\") {\n throw new Error(\"Audit trail export CLI bundleId must be a string.\");\n }\n\n if (bundle.generatedAt !== undefined && typeof bundle.generatedAt !== \"string\") {\n throw new Error(\"Audit trail export CLI generatedAt must be a string.\");\n }\n\n if (\n bundle.forbiddenOutputValues !== undefined &&\n (!Array.isArray(bundle.forbiddenOutputValues) ||\n bundle.forbiddenOutputValues.some((value) => typeof value !== \"string\"))\n ) {\n throw new Error(\n \"Audit trail export CLI forbiddenOutputValues must be an array of strings.\",\n );\n }\n\n if (\n bundle.format !== undefined &&\n bundle.format !== \"markdown\" &&\n bundle.format !== \"json\"\n ) {\n throw new Error(\"Audit trail export CLI bundle format must be markdown or json.\");\n }\n}\n\nasync function loadArtifacts(options: {\n cwd: string;\n inlineArtifacts?: ProbeMeshCallAuditArtifact[];\n artifactFiles?: string[];\n}) {\n const artifacts: ProbeMeshCallAuditArtifact[] = [\n ...(options.inlineArtifacts ?? []),\n ];\n\n for (const artifactFile of options.artifactFiles ?? []) {\n const loadedArtifacts = await loadArtifactFile(options.cwd, artifactFile);\n artifacts.push(...loadedArtifacts);\n }\n\n return artifacts;\n}\n\nasync function loadArtifactFile(cwd: string, artifactFile: string) {\n const artifactPath = resolve(cwd, artifactFile);\n const body = await readFile(artifactPath, \"utf8\");\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(body);\n } catch (error) {\n throw new Error(\n `Invalid audit artifact JSON in \"${artifactFile}\": ${\n error instanceof Error ? error.message : \"parse failed\"\n }`,\n );\n }\n\n if (Array.isArray(parsed)) {\n return parsed as ProbeMeshCallAuditArtifact[];\n }\n\n if (parsed && typeof parsed === \"object\") {\n return [parsed as ProbeMeshCallAuditArtifact];\n }\n\n throw new Error(\n `Audit artifact file \"${artifactFile}\" must contain an artifact object or artifact array.`,\n );\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n bundle: ProbeMeshAuditTrailBundle;\n outputs: ProbeMeshAuditTrailExportCliOutputs;\n}) {\n const artifactPaths: ProbeMeshAuditTrailExportCliOutputs = {};\n\n if (options.outputs.json) {\n const outputPath = resolve(options.cwd, options.outputs.json);\n await writeArtifact(\n outputPath,\n formatProbeMeshAuditTrailBundle(options.bundle, {\n format: \"json\",\n }),\n );\n artifactPaths.json = outputPath;\n }\n\n if (options.outputs.markdown) {\n const outputPath = resolve(options.cwd, options.outputs.markdown);\n await writeArtifact(\n outputPath,\n formatProbeMeshAuditTrailBundle(options.bundle, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = outputPath;\n }\n\n return artifactPaths;\n}\n\nasync function writeArtifact(outputPath: string, body: string) {\n await mkdir(dirname(outputPath), {\n recursive: true,\n });\n await writeFile(outputPath, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): ProbeMeshAuditTrailExportCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `${message}\\n${USAGE}\\n`,\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nexport async function loadCliConfigDefault(\n configPath: string,\n cwd: string,\n): Promise<unknown> {\n const resolvedPath = resolve(cwd, configPath);\n const moduleUrl = pathToFileURL(resolvedPath);\n\n try {\n const loadedModule = await import(/* @vite-ignore */ moduleUrl.href);\n return loadedModule.default;\n } catch (error) {\n return loadSelfContainedConfigFallback(resolvedPath, error);\n }\n}\n\nasync function loadSelfContainedConfigFallback(\n resolvedPath: string,\n importError: unknown,\n): Promise<unknown> {\n const source = await readFile(resolvedPath, \"utf8\");\n\n if (/\\bimport\\s/.test(source) || !/\\bexport\\s+default\\b/.test(source)) {\n throw importError;\n }\n\n const transformedSource = source.replace(\n /\\bexport\\s+default\\b/,\n \"const __probemeshDefault =\",\n );\n\n try {\n const factory = new Function(\n `${transformedSource}\\nreturn __probemeshDefault;`,\n ) as () => unknown;\n return factory();\n } catch {\n throw importError;\n }\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProviderCatalog,\n} from \"../providerCatalog\";\nimport type {\n ProviderCatalog,\n} from \"../providerCatalog\";\nimport type {\n ProviderCatalogArtifact,\n} from \"../providerCatalogArtifact\";\nimport {\n createProviderCatalogPolicyReport,\n evaluateProviderCatalogPolicy,\n formatProviderCatalogPolicyReport,\n} from \"../providerCatalogPolicy\";\nimport {\n createProviderCatalogPolicyBundle,\n formatProviderCatalogPolicyBundle,\n} from \"../providerCatalogPolicyBundle\";\nimport type {\n ProviderCatalogPolicyAdapterInventory,\n ProviderCatalogPolicyEvaluationResult,\n ProviderCatalogPolicyExpectedQuery,\n ProviderCatalogPolicyOptions,\n ProviderCatalogPolicyReport,\n ProviderCatalogPolicyReportFormat,\n ProviderCatalogPolicyReportOptions,\n} from \"../providerCatalogPolicy\";\nimport type {\n ProviderCatalogPolicyBundle,\n} from \"../providerCatalogPolicyBundle\";\n\nexport interface ProviderCatalogPolicyCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProviderCatalogPolicyCliOutputs {\n json?: string;\n markdown?: string;\n bundle?: string;\n}\n\nexport interface ProviderCatalogPolicyCliBundle {\n bundleId?: string;\n generatedAt?: string;\n}\n\nexport interface ProviderCatalogPolicyCliConfig {\n catalog?: ProviderCatalog;\n artifacts?: ProviderCatalogArtifact[];\n catalogPolicy?: ProviderCatalogPolicyOptions;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries: ProviderCatalogPolicyExpectedQuery[];\n report?: ProviderCatalogPolicyReportOptions & {\n format?: ProviderCatalogPolicyReportFormat;\n };\n bundle?: ProviderCatalogPolicyCliBundle;\n outputs?: ProviderCatalogPolicyCliOutputs;\n}\n\nexport type ProviderCatalogPolicyCliConfigExport =\n | ProviderCatalogPolicyCliConfig\n | ProviderCatalogPolicyCliSkip;\n\nexport type ProviderCatalogPolicyCliConfigFactory = (\n context: ProviderCatalogPolicyCliConfigContext,\n) =>\n | ProviderCatalogPolicyCliConfigExport\n | Promise<ProviderCatalogPolicyCliConfigExport>;\n\nexport interface ProviderCatalogPolicyCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProviderCatalogPolicyCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProviderCatalogPolicyCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProviderCatalogPolicyCliSkip;\n evaluation?: ProviderCatalogPolicyEvaluationResult;\n report?: ProviderCatalogPolicyReport;\n bundle?: ProviderCatalogPolicyBundle;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProviderCatalogPolicyCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProviderCatalogPolicyReportFormat;\n outJson?: string;\n outMarkdown?: string;\n outBundle?: string;\n title?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-catalog-check --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--out-bundle <path>] [--title <text>]\";\n\nexport async function runProviderCatalogPolicyCli(\n options: ProviderCatalogPolicyCliOptions = {},\n): Promise<ProviderCatalogPolicyCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `provider catalog policy check skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const catalog = resolveCatalog(configExport);\n const evaluation = evaluateProviderCatalogPolicy({\n catalog,\n catalogPolicy: configExport.catalogPolicy,\n adapterInventory: configExport.adapterInventory,\n queries: configExport.queries,\n });\n const report = createProviderCatalogPolicyReport(evaluation, {\n ...(configExport.report ?? {}),\n title: parsedArgs.title ?? configExport.report?.title,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.report?.format ?? \"markdown\";\n const stdout = formatProviderCatalogPolicyReport(report, {\n format: selectedFormat,\n });\n const bundle = createOptionalBundle({\n catalog,\n config: configExport,\n evaluation,\n requestedBundleOutput: parsedArgs.outBundle,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n report,\n bundle,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n bundle: parsedArgs.outBundle ?? configExport.outputs?.bundle,\n },\n });\n\n return {\n exitCode: evaluation.status === \"passed\" ? 0 : 1,\n skipped: false,\n evaluation,\n report,\n bundle,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error ? error.message : \"Unknown catalog policy CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-bundle\") {\n parsedArgs.outBundle = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--title\") {\n parsedArgs.title = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProviderCatalogPolicyCliConfigContext,\n): Promise<ProviderCatalogPolicyCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProviderCatalogPolicyCliConfigFactory)(context);\n }\n\n return configExport as ProviderCatalogPolicyCliConfigExport;\n}\n\nfunction isCliSkip(value: unknown): value is ProviderCatalogPolicyCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProviderCatalogPolicyCliSkip>).skip === true &&\n typeof (value as Partial<ProviderCatalogPolicyCliSkip>).reason === \"string\"\n );\n}\n\nfunction assertCliConfig(\n value: unknown,\n): asserts value is ProviderCatalogPolicyCliConfig {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Catalog policy CLI config must export an object.\");\n }\n\n const config = value as Partial<ProviderCatalogPolicyCliConfig>;\n\n if (!config.catalog && !config.artifacts) {\n throw new Error(\"Catalog policy CLI config requires catalog or artifacts.\");\n }\n\n if (config.catalog && config.artifacts) {\n throw new Error(\"Catalog policy CLI config must not provide both catalog and artifacts.\");\n }\n\n if (config.artifacts !== undefined && !Array.isArray(config.artifacts)) {\n throw new Error(\"Catalog policy CLI artifacts must be an array.\");\n }\n\n if (!Array.isArray(config.adapterInventory)) {\n throw new Error(\"Catalog policy CLI config requires adapterInventory array.\");\n }\n\n if (!Array.isArray(config.queries) || config.queries.length === 0) {\n throw new Error(\"Catalog policy CLI config requires at least one query.\");\n }\n\n const outputs = config.outputs;\n\n if (\n outputs !== undefined &&\n (!outputs ||\n typeof outputs !== \"object\" ||\n Array.isArray(outputs) ||\n (outputs.json !== undefined && typeof outputs.json !== \"string\") ||\n (outputs.markdown !== undefined && typeof outputs.markdown !== \"string\") ||\n (outputs.bundle !== undefined && typeof outputs.bundle !== \"string\"))\n ) {\n throw new Error(\"Catalog policy CLI outputs must contain string paths.\");\n }\n\n const bundle = config.bundle;\n\n if (\n bundle !== undefined &&\n (!bundle ||\n typeof bundle !== \"object\" ||\n Array.isArray(bundle) ||\n (bundle.bundleId !== undefined && typeof bundle.bundleId !== \"string\") ||\n (bundle.generatedAt !== undefined && typeof bundle.generatedAt !== \"string\"))\n ) {\n throw new Error(\"Catalog policy CLI bundle config must contain string values.\");\n }\n}\n\nfunction resolveCatalog(config: ProviderCatalogPolicyCliConfig) {\n if (config.catalog) {\n return config.catalog;\n }\n\n return createProviderCatalog({\n artifacts: config.artifacts ?? [],\n });\n}\n\nfunction createOptionalBundle(options: {\n catalog: ProviderCatalog;\n config: ProviderCatalogPolicyCliConfig;\n evaluation: ProviderCatalogPolicyEvaluationResult;\n requestedBundleOutput?: string;\n}) {\n if (!options.config.bundle && !options.requestedBundleOutput && !options.config.outputs?.bundle) {\n return undefined;\n }\n\n return createProviderCatalogPolicyBundle({\n catalog: options.catalog,\n catalogPolicy: options.config.catalogPolicy,\n adapterInventory: options.config.adapterInventory,\n queries: options.config.queries,\n evaluation: options.evaluation,\n bundleId: options.config.bundle?.bundleId,\n generatedAt: options.config.bundle?.generatedAt,\n forbiddenOutputValues: options.config.report?.forbiddenOutputValues,\n });\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n report: ProviderCatalogPolicyReport;\n bundle?: ProviderCatalogPolicyBundle;\n outputs: ProviderCatalogPolicyCliOutputs;\n}) {\n const artifactPaths: ProviderCatalogPolicyCliOutputs = {};\n\n if (options.outputs.json) {\n const outputPath = resolve(options.cwd, options.outputs.json);\n await writeArtifact(\n outputPath,\n formatProviderCatalogPolicyReport(options.report, {\n format: \"json\",\n }),\n );\n artifactPaths.json = outputPath;\n }\n\n if (options.outputs.markdown) {\n const outputPath = resolve(options.cwd, options.outputs.markdown);\n await writeArtifact(\n outputPath,\n formatProviderCatalogPolicyReport(options.report, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = outputPath;\n }\n\n if (options.outputs.bundle) {\n if (!options.bundle) {\n throw new Error(\"Catalog policy CLI bundle output requires bundle config.\");\n }\n\n const outputPath = resolve(options.cwd, options.outputs.bundle);\n await writeArtifact(\n outputPath,\n formatProviderCatalogPolicyBundle(options.bundle, {\n format: \"json\",\n }),\n );\n artifactPaths.bundle = outputPath;\n }\n\n return artifactPaths;\n}\n\nasync function writeArtifact(outputPath: string, body: string) {\n await mkdir(dirname(outputPath), {\n recursive: true,\n });\n await writeFile(outputPath, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): ProviderCatalogPolicyCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `${message}\\n${USAGE}\\n`,\n };\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProviderConformanceArtifact,\n formatProviderConformanceArtifact,\n} from \"../providerConformanceArtifact\";\nimport type {\n ProviderConformanceArtifact,\n ProviderConformanceArtifactOptions,\n} from \"../providerConformanceArtifact\";\nimport {\n createProviderConformanceReport,\n formatProviderConformanceReport,\n runProviderConformance,\n} from \"../providerConformance\";\nimport type {\n ProviderConformanceOptions,\n ProviderConformanceReport,\n ProviderConformanceReportFormat,\n ProviderConformanceReportOptions,\n ProviderConformanceResult,\n} from \"../providerConformance\";\n\nexport interface ProviderConformanceCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProviderConformanceCliOutputs {\n json?: string;\n markdown?: string;\n artifact?: string;\n}\n\nexport interface ProviderConformanceCliArtifact\n extends Omit<ProviderConformanceArtifactOptions, \"manifest\" | \"report\"> {\n format?: \"json\" | \"markdown\";\n}\n\nexport interface ProviderConformanceCliConfig {\n conformance: ProviderConformanceOptions;\n report?: ProviderConformanceReportOptions & {\n format?: ProviderConformanceReportFormat;\n };\n artifact?: ProviderConformanceCliArtifact;\n outputs?: ProviderConformanceCliOutputs;\n}\n\nexport type ProviderConformanceCliConfigExport =\n | ProviderConformanceCliConfig\n | ProviderConformanceCliSkip;\n\nexport type ProviderConformanceCliConfigFactory = (\n context: ProviderConformanceCliConfigContext,\n) =>\n | ProviderConformanceCliConfigExport\n | Promise<ProviderConformanceCliConfigExport>;\n\nexport interface ProviderConformanceCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProviderConformanceCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProviderConformanceCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProviderConformanceCliSkip;\n result?: ProviderConformanceResult;\n report?: ProviderConformanceReport;\n artifact?: ProviderConformanceArtifact;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProviderConformanceCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProviderConformanceReportFormat;\n outJson?: string;\n outMarkdown?: string;\n outArtifact?: string;\n title?: string;\n artifactId?: string;\n generatedAt?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-conformance --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--out-artifact <path>] [--title <text>] [--artifact-id <text>] [--generated-at <iso>]\";\n\nexport async function runProviderConformanceCli(\n options: ProviderConformanceCliOptions = {},\n): Promise<ProviderConformanceCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `provider conformance skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const result = await runProviderConformance(configExport.conformance);\n const report = createProviderConformanceReport(result, {\n ...(configExport.report ?? {}),\n title: parsedArgs.title ?? configExport.report?.title,\n });\n const outputs = {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n artifact: parsedArgs.outArtifact ?? configExport.outputs?.artifact,\n };\n const artifact = createOptionalArtifact({\n config: configExport,\n report,\n artifactId: parsedArgs.artifactId,\n generatedAt: parsedArgs.generatedAt,\n requestedArtifactOutput: outputs.artifact,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.report?.format ?? \"markdown\";\n const stdout = formatProviderConformanceReport(report, {\n format: selectedFormat,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n report,\n artifact,\n outputs,\n });\n\n return {\n exitCode: result.status === \"passed\" ? 0 : 1,\n skipped: false,\n result,\n report,\n artifact,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error\n ? error.message\n : \"Unknown provider conformance CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-artifact\") {\n parsedArgs.outArtifact = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--title\") {\n parsedArgs.title = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--artifact-id\") {\n parsedArgs.artifactId = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--generated-at\") {\n parsedArgs.generatedAt = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProviderConformanceCliConfigContext,\n): Promise<ProviderConformanceCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProviderConformanceCliConfigFactory)(context);\n }\n\n return configExport as ProviderConformanceCliConfigExport;\n}\n\nfunction isCliSkip(value: unknown): value is ProviderConformanceCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProviderConformanceCliSkip>).skip === true &&\n typeof (value as Partial<ProviderConformanceCliSkip>).reason === \"string\"\n );\n}\n\nfunction assertCliConfig(\n config: unknown,\n): asserts config is ProviderConformanceCliConfig {\n if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n throw new Error(\"Provider conformance CLI config must be an object.\");\n }\n\n const candidate = config as Partial<ProviderConformanceCliConfig>;\n\n if (\n !candidate.conformance ||\n typeof candidate.conformance !== \"object\" ||\n Array.isArray(candidate.conformance)\n ) {\n throw new Error(\"Provider conformance CLI config requires conformance options.\");\n }\n\n if (candidate.report !== undefined && !isRecord(candidate.report)) {\n throw new Error(\"Provider conformance CLI report config must be an object.\");\n }\n\n if (candidate.artifact !== undefined && !isRecord(candidate.artifact)) {\n throw new Error(\"Provider conformance CLI artifact config must be an object.\");\n }\n\n if (candidate.outputs !== undefined) {\n assertOutputs(candidate.outputs);\n }\n}\n\nfunction assertOutputs(outputs: unknown) {\n if (!isRecord(outputs)) {\n throw new Error(\"Provider conformance CLI outputs must be an object.\");\n }\n\n for (const [key, value] of Object.entries(outputs)) {\n if (\n ![\"json\", \"markdown\", \"artifact\"].includes(key) ||\n (value !== undefined && typeof value !== \"string\")\n ) {\n throw new Error(\n \"Provider conformance CLI outputs may only include json, markdown, and artifact string paths.\",\n );\n }\n }\n}\n\nfunction createOptionalArtifact(options: {\n config: ProviderConformanceCliConfig;\n report: ProviderConformanceReport;\n artifactId?: string;\n generatedAt?: string;\n requestedArtifactOutput?: string;\n}) {\n if (!options.config.artifact && !options.requestedArtifactOutput) {\n return undefined;\n }\n\n return createProviderConformanceArtifact({\n manifest: options.config.conformance.manifest,\n report: options.report,\n artifactId: options.artifactId ?? options.config.artifact?.artifactId,\n generatedAt: options.generatedAt ?? options.config.artifact?.generatedAt,\n forbiddenOutputValues:\n options.config.artifact?.forbiddenOutputValues ??\n options.config.report?.forbiddenOutputValues ??\n options.config.conformance.forbiddenOutputValues,\n });\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n report: ProviderConformanceReport;\n artifact?: ProviderConformanceArtifact;\n outputs: ProviderConformanceCliOutputs;\n}) {\n const artifactPaths: ProviderConformanceCliOutputs = {};\n\n if (options.outputs.json) {\n const path = resolve(options.cwd, options.outputs.json);\n await writeTextFile(\n path,\n formatProviderConformanceReport(options.report, {\n format: \"json\",\n }),\n );\n artifactPaths.json = path;\n }\n\n if (options.outputs.markdown) {\n const path = resolve(options.cwd, options.outputs.markdown);\n await writeTextFile(\n path,\n formatProviderConformanceReport(options.report, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = path;\n }\n\n if (options.outputs.artifact) {\n if (!options.artifact) {\n throw new Error(\"Provider conformance artifact output requested but no artifact was created.\");\n }\n\n const path = resolve(options.cwd, options.outputs.artifact);\n await writeTextFile(\n path,\n formatProviderConformanceArtifact(options.artifact, {\n format: \"json\",\n }),\n );\n artifactPaths.artifact = path;\n }\n\n return artifactPaths;\n}\n\nasync function writeTextFile(path: string, body: string) {\n await mkdir(dirname(path), {\n recursive: true,\n });\n await writeFile(path, body);\n}\n\nfunction cliFailure(message: string): ProviderConformanceCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `Provider conformance CLI failed: ${message}\\n`,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { createHash } from \"node:crypto\";\n\nimport { ProbeMeshError } from \"./errors\";\nimport { validateProviderManifest } from \"./providerKit/manifest\";\nimport type {\n JsonSchemaLike,\n ProviderLimits,\n ProviderManifest,\n ProviderReceiptSupport,\n} from \"./providerKit/types\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n Cost,\n ProbeMeshCallSafety,\n ProbeMeshRetrySafety,\n ProbeMeshTimelineEventType,\n ProviderPaymentOption,\n ReceiptType,\n} from \"./types\";\nimport type {\n ProviderConformanceCheck,\n ProviderConformanceReport,\n ProviderConformanceStatus,\n ProviderConformanceSummary,\n} from \"./providerConformance\";\n\nexport const PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION =\n \"probemesh.provider-conformance.v1\" as const;\n\nexport type ProviderConformanceArtifactStatus = \"verified\" | \"failed\";\n\nexport type ProviderConformanceArtifactFormat = \"json\" | \"markdown\";\n\nexport interface ProviderConformanceArtifactOptions {\n manifest: ProviderManifest;\n report: ProviderConformanceReport;\n generatedAt?: string;\n artifactId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderConformanceArtifactManifestSummary {\n id: string;\n displayName: string;\n capabilities: string[];\n protocolMode: string;\n pricing?: Cost | Record<string, Cost>;\n receipts: ProviderReceiptSupport;\n limits?: ProviderLimits;\n paymentOptions?: ProviderPaymentOption[];\n schemas: {\n inputDeclared: boolean;\n outputDeclared: boolean;\n };\n}\n\nexport interface ProviderConformanceArtifactReceiptSummary {\n total: number;\n types: ReceiptType[];\n providers: string[];\n byType: Partial<Record<ReceiptType, number>>;\n hasPaymentProof: boolean;\n hasSettlementConfirmation: boolean;\n hasProviderDelivery: boolean;\n}\n\nexport interface ProviderConformanceArtifactHashes {\n manifest: string;\n report: string;\n checks: string;\n artifact: string;\n}\n\nexport interface ProviderConformanceArtifact {\n schemaVersion: typeof PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION;\n artifactId: string;\n generatedAt: string;\n status: ProviderConformanceArtifactStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProviderConformanceArtifactHashes;\n provider: ProviderConformanceArtifactManifestSummary;\n conformance: {\n title: string;\n status: ProviderConformanceStatus;\n summary: ProviderConformanceSummary;\n checks: ProviderConformanceCheck[];\n failedChecks: string[];\n receipts: ProviderConformanceArtifactReceiptSummary;\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProviderConformanceSummary[\"route\"];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n errorCode?: string;\n };\n}\n\nexport interface ProviderConformanceArtifactValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProviderConformanceArtifactValidationResult {\n valid: boolean;\n errors: ProviderConformanceArtifactValidationError[];\n}\n\nexport function createProviderConformanceArtifact(\n options: ProviderConformanceArtifactOptions,\n): ProviderConformanceArtifact {\n assertProviderConformanceArtifactOptions(options);\n\n const status: ProviderConformanceArtifactStatus =\n options.report.status === \"passed\" &&\n options.report.checks.every((check) => check.status === \"passed\")\n ? \"verified\"\n : \"failed\";\n const provider = summarizeManifest(options.manifest);\n const conformance = {\n title: options.report.title,\n status: options.report.status,\n summary: cloneSerializable(options.report.summary),\n checks: cloneSerializable(options.report.checks),\n failedChecks: [...options.report.summary.failedCheckNames],\n receipts: cloneSerializable(options.report.receipts),\n safety: cloneSerializable(options.report.safety),\n retrySafety: cloneSerializable(options.report.retrySafety),\n route: cloneSerializable(options.report.route),\n timelineEventTypes: [...options.report.timelineEventTypes],\n telemetryEventTypes: [...options.report.telemetryEventTypes],\n errorCode: options.report.summary.errorCode,\n };\n const baseContent = sanitizeConformanceArtifactOutput(\n {\n schemaVersion: PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION,\n artifactId:\n options.artifactId ??\n `${options.manifest.id}:${options.report.summary.callId ?? \"unknown\"}:conformance`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status,\n hashAlgorithm: \"sha256\" as const,\n provider,\n conformance,\n },\n options.forbiddenOutputValues ?? [],\n );\n const hashesWithoutArtifact: ProviderConformanceArtifactHashes = {\n manifest: hashStableJson(baseContent.provider),\n report: hashStableJson(baseContent.conformance.summary),\n checks: hashStableJson(baseContent.conformance.checks),\n artifact: \"\",\n };\n const artifact: ProviderConformanceArtifact = {\n ...baseContent,\n hashes: {\n ...hashesWithoutArtifact,\n artifact: hashArtifactContent({\n ...baseContent,\n hashes: hashesWithoutArtifact,\n }),\n },\n };\n\n assertProviderConformanceArtifact(artifact);\n\n return artifact;\n}\n\nexport function validateProviderConformanceArtifact(\n artifact: unknown,\n): ProviderConformanceArtifactValidationResult {\n const errors: ProviderConformanceArtifactValidationError[] = [];\n\n if (!isRecord(artifact)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"Provider conformance artifact must be an object.\",\n },\n ],\n };\n }\n\n if (artifact.schemaVersion !== PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(artifact.artifactId, \"artifactId\", errors);\n validateIsoTimestamp(artifact.generatedAt, \"generatedAt\", errors);\n\n if (artifact.status !== \"verified\" && artifact.status !== \"failed\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"verified\" or \"failed\".',\n });\n }\n\n if (artifact.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(artifact.hashes, errors);\n validateManifestSummary(artifact.provider, errors);\n validateConformanceSummary(artifact.conformance, errors);\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProviderConformanceArtifact(\n artifact: unknown,\n): asserts artifact is ProviderConformanceArtifact {\n const result = validateProviderConformanceArtifact(artifact);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider conformance artifact: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProviderConformanceArtifact(\n artifact: ProviderConformanceArtifact,\n options: {\n format?: ProviderConformanceArtifactFormat;\n } = {},\n) {\n assertProviderConformanceArtifact(artifact);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatConformanceArtifactMarkdown(artifact);\n }\n\n return JSON.stringify(artifact, null, 2);\n}\n\nfunction assertProviderConformanceArtifactOptions(\n options: ProviderConformanceArtifactOptions,\n): asserts options is ProviderConformanceArtifactOptions {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance artifact options must be an object.\",\n });\n }\n\n const manifestValidation = validateProviderManifest(options.manifest);\n\n if (!manifestValidation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider conformance artifact manifest: ${formatValidationErrors(\n manifestValidation.errors,\n )}`,\n });\n }\n\n if (\n !options.report ||\n typeof options.report !== \"object\" ||\n Array.isArray(options.report)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance artifact requires a conformance report.\",\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 conformance artifact generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.artifactId !== undefined &&\n (typeof options.artifactId !== \"string\" || options.artifactId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance artifact artifactId 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 conformance artifact forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeManifest(\n manifest: ProviderManifest,\n): ProviderConformanceArtifactManifestSummary {\n return {\n id: manifest.id,\n displayName: manifest.displayName,\n capabilities: [...manifest.capabilities],\n protocolMode: manifest.protocolMode,\n pricing: cloneSerializable(manifest.pricing),\n receipts: cloneSerializable(manifest.receipts),\n limits: cloneSerializable(manifest.limits),\n paymentOptions: cloneSerializable(manifest.paymentOptions),\n schemas: {\n inputDeclared: hasSchemaDeclaration(manifest.inputSchema),\n outputDeclared: hasSchemaDeclaration(manifest.outputSchema),\n },\n };\n}\n\nfunction hasSchemaDeclaration(\n declaration: JsonSchemaLike | Record<string, JsonSchemaLike>,\n) {\n return Object.keys(declaration).length > 0;\n}\n\nfunction formatConformanceArtifactMarkdown(\n artifact: ProviderConformanceArtifact,\n) {\n const lines = [\n `# ${artifact.provider.displayName} Conformance Artifact`,\n \"\",\n `Status: ${artifact.status}`,\n `Schema: ${artifact.schemaVersion}`,\n `Artifact ID: ${artifact.artifactId}`,\n `Generated: ${artifact.generatedAt}`,\n `Provider: ${artifact.provider.id}`,\n `Capabilities: ${formatInlineList(artifact.provider.capabilities)}`,\n \"\",\n \"## Conformance\",\n `- Result: ${artifact.conformance.status}`,\n `- Failed checks: ${formatInlineList(artifact.conformance.failedChecks)}`,\n `- Receipts: ${formatInlineList(artifact.conformance.receipts.types)}`,\n `- Timeline: ${formatInlineList(artifact.conformance.timelineEventTypes)}`,\n \"\",\n \"## Safety\",\n `- Payment: ${artifact.conformance.safety?.paymentStatus ?? \"unknown\"}`,\n `- Settlement: ${\n artifact.conformance.safety?.settlementStatus ?? \"unknown\"\n }`,\n `- Delivery: ${artifact.conformance.safety?.deliveryStatus ?? \"unknown\"}`,\n `- Money may have moved: ${String(\n artifact.conformance.safety?.moneyMayHaveMoved ?? false,\n )}`,\n \"\",\n \"## Hashes\",\n `- Manifest: ${artifact.hashes.manifest}`,\n `- Report: ${artifact.hashes.report}`,\n `- Checks: ${artifact.hashes.checks}`,\n `- Artifact: ${artifact.hashes.artifact}`,\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction validateManifestSummary(\n provider: unknown,\n errors: ProviderConformanceArtifactValidationError[],\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\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 validateNonEmptyString(provider.protocolMode, \"provider.protocolMode\", errors);\n\n if (!isRecord(provider.receipts)) {\n errors.push({\n path: \"provider.receipts\",\n message: \"provider.receipts must be an object.\",\n });\n }\n\n if (\n !isRecord(provider.schemas) ||\n typeof provider.schemas.inputDeclared !== \"boolean\" ||\n typeof provider.schemas.outputDeclared !== \"boolean\"\n ) {\n errors.push({\n path: \"provider.schemas\",\n message: \"provider.schemas must include inputDeclared and outputDeclared booleans.\",\n });\n }\n}\n\nfunction validateConformanceSummary(\n conformance: unknown,\n errors: ProviderConformanceArtifactValidationError[],\n) {\n if (!isRecord(conformance)) {\n errors.push({\n path: \"conformance\",\n message: \"conformance must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(conformance.title, \"conformance.title\", errors);\n\n if (conformance.status !== \"passed\" && conformance.status !== \"failed\") {\n errors.push({\n path: \"conformance.status\",\n message: 'conformance.status must be \"passed\" or \"failed\".',\n });\n }\n\n if (!isRecord(conformance.summary)) {\n errors.push({\n path: \"conformance.summary\",\n message: \"conformance.summary must be an object.\",\n });\n }\n\n if (\n !Array.isArray(conformance.checks) ||\n conformance.checks.some((check) => !isRecord(check))\n ) {\n errors.push({\n path: \"conformance.checks\",\n message: \"conformance.checks must be an array of check objects.\",\n });\n }\n\n if (\n !Array.isArray(conformance.failedChecks) ||\n conformance.failedChecks.some((checkName) => typeof checkName !== \"string\")\n ) {\n errors.push({\n path: \"conformance.failedChecks\",\n message: \"conformance.failedChecks must be an array of strings.\",\n });\n }\n\n if (!isRecord(conformance.receipts)) {\n errors.push({\n path: \"conformance.receipts\",\n message: \"conformance.receipts must be an object.\",\n });\n }\n\n if (\n !Array.isArray(conformance.timelineEventTypes) ||\n conformance.timelineEventTypes.some((eventType) => typeof eventType !== \"string\")\n ) {\n errors.push({\n path: \"conformance.timelineEventTypes\",\n message: \"conformance.timelineEventTypes must be an array of strings.\",\n });\n }\n\n if (\n !Array.isArray(conformance.telemetryEventTypes) ||\n conformance.telemetryEventTypes.some((eventType) => typeof eventType !== \"string\")\n ) {\n errors.push({\n path: \"conformance.telemetryEventTypes\",\n message: \"conformance.telemetryEventTypes must be an array of strings.\",\n });\n }\n}\n\nfunction validateHashes(\n hashes: unknown,\n errors: ProviderConformanceArtifactValidationError[],\n) {\n if (!isRecord(hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const field of [\"manifest\", \"report\", \"checks\", \"artifact\"]) {\n const value = 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\nfunction sanitizeConformanceArtifactOutput<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 hashArtifactContent(\n artifact: Omit<ProviderConformanceArtifact, \"hashes\"> & {\n hashes: ProviderConformanceArtifactHashes;\n },\n) {\n return hashStableJson(artifact);\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 validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProviderConformanceArtifactValidationError[],\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: ProviderConformanceArtifactValidationError[],\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: Array<{\n path: string;\n message: string;\n }>,\n) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n\nfunction formatInlineList(values: readonly string[] | undefined) {\n return values && 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","import { ProbeMeshError } from \"./errors\";\nimport type { JsonSchemaLike } from \"./providerKit/types\";\n\nexport interface JsonSchemaLikeValidationError {\n path: string;\n message: string;\n}\n\nexport interface JsonSchemaLikeValidationResult {\n valid: boolean;\n errors: JsonSchemaLikeValidationError[];\n}\n\nexport interface JsonSchemaLikeValidationOptions {\n path?: string;\n}\n\nexport function validateJsonSchemaLikeValue(\n value: unknown,\n schema: JsonSchemaLike,\n options: JsonSchemaLikeValidationOptions = {},\n): JsonSchemaLikeValidationResult {\n const errors: JsonSchemaLikeValidationError[] = [];\n\n validateValue(value, schema, options.path ?? \"$\", errors);\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertJsonSchemaLikeValue(\n value: unknown,\n schema: JsonSchemaLike,\n options: JsonSchemaLikeValidationOptions = {},\n): void {\n const result = validateJsonSchemaLikeValue(value, schema, options);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `JSON schema-lite validation failed: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nfunction validateValue(\n value: unknown,\n schema: JsonSchemaLike,\n path: string,\n errors: JsonSchemaLikeValidationError[],\n) {\n if (!isRecord(schema)) {\n errors.push({\n path,\n message: \"schema must be an object.\",\n });\n return;\n }\n\n if (schema.enum !== undefined) {\n if (!Array.isArray(schema.enum)) {\n errors.push({\n path,\n message: \"schema enum must be an array.\",\n });\n } else if (!schema.enum.some((candidate) => deepEqual(candidate, value))) {\n errors.push({\n path,\n message: \"value must match one of the schema enum values.\",\n });\n }\n }\n\n if (schema.type !== undefined) {\n validateType(value, schema.type, path, errors);\n }\n\n if (isRecord(value)) {\n validateObjectValue(value, schema, path, errors);\n }\n\n if (Array.isArray(value)) {\n validateArrayValue(value, schema, path, errors);\n }\n}\n\nfunction validateType(\n value: unknown,\n type: unknown,\n path: string,\n errors: JsonSchemaLikeValidationError[],\n) {\n if (typeof type !== \"string\") {\n errors.push({\n path,\n message: \"schema type must be a string.\",\n });\n return;\n }\n\n const valid =\n type === \"object\"\n ? isRecord(value)\n : type === \"array\"\n ? Array.isArray(value)\n : type === \"string\"\n ? typeof value === \"string\"\n : type === \"number\"\n ? typeof value === \"number\" && Number.isFinite(value)\n : type === \"integer\"\n ? Number.isInteger(value)\n : type === \"boolean\"\n ? typeof value === \"boolean\"\n : type === \"null\"\n ? value === null\n : true;\n\n if (!valid) {\n errors.push({\n path,\n message: `value must be ${type}.`,\n });\n }\n}\n\nfunction validateObjectValue(\n value: Record<string, unknown>,\n schema: JsonSchemaLike,\n path: string,\n errors: JsonSchemaLikeValidationError[],\n) {\n if (schema.required !== undefined) {\n if (!Array.isArray(schema.required)) {\n errors.push({\n path,\n message: \"schema required must be an array.\",\n });\n } else {\n for (const requiredKey of schema.required) {\n if (typeof requiredKey !== \"string\") {\n errors.push({\n path,\n message: \"schema required entries must be strings.\",\n });\n continue;\n }\n\n if (!(requiredKey in value)) {\n errors.push({\n path: `${path}.${requiredKey}`,\n message: \"required property is missing.\",\n });\n }\n }\n }\n }\n\n const properties = isRecord(schema.properties) ? schema.properties : undefined;\n\n if (properties) {\n for (const [key, propertySchema] of Object.entries(properties)) {\n if (key in value) {\n validateValue(\n value[key],\n propertySchema as JsonSchemaLike,\n `${path}.${key}`,\n errors,\n );\n }\n }\n }\n\n if (schema.additionalProperties === false && properties) {\n for (const key of Object.keys(value)) {\n if (!(key in properties)) {\n errors.push({\n path: `${path}.${key}`,\n message: \"additional property is not allowed.\",\n });\n }\n }\n } else if (isRecord(schema.additionalProperties)) {\n const additionalSchema = schema.additionalProperties as JsonSchemaLike;\n\n for (const key of Object.keys(value)) {\n if (!properties || !(key in properties)) {\n validateValue(value[key], additionalSchema, `${path}.${key}`, errors);\n }\n }\n }\n}\n\nfunction validateArrayValue(\n value: unknown[],\n schema: JsonSchemaLike,\n path: string,\n errors: JsonSchemaLikeValidationError[],\n) {\n if (schema.items === undefined) {\n return;\n }\n\n if (!isRecord(schema.items)) {\n errors.push({\n path,\n message: \"schema items must be an object.\",\n });\n return;\n }\n\n value.forEach((item, index) => {\n validateValue(item, schema.items as JsonSchemaLike, `${path}.${index}`, errors);\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction deepEqual(left: unknown, right: unknown) {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction formatValidationErrors(errors: JsonSchemaLikeValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","import type { HostedTelemetryEvent } from \"./hostedRouter\";\nimport { startHostedRouter } from \"./hostedRouter\";\nimport { createProbeMesh } from \"./client\";\nimport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nimport {\n isSharedJsonSchemaLike,\n validateProviderManifest,\n} from \"./providerKit/manifest\";\nimport type { JsonSchemaLike, ProviderManifest } from \"./providerKit/types\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport {\n validateJsonSchemaLikeValue,\n type JsonSchemaLikeValidationError,\n} from \"./schemaValidation\";\nimport type {\n ProbeMeshAdapter,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteDecisionReason,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEventType,\n ReceiptRef,\n ReceiptType,\n} from \"./types\";\n\nexport type ProviderConformanceStatus = \"passed\" | \"failed\";\n\nexport interface ProviderConformanceCheck {\n name: string;\n status: ProviderConformanceStatus;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface ProviderConformanceSchemaValidationMode {\n input?: boolean;\n output?: boolean;\n}\n\nexport interface ProviderConformanceOptions<Input = unknown> {\n manifest: ProviderManifest;\n adapters: ProbeMeshAdapter[];\n request: ProbeMeshCallRequest<Input>;\n apiKey?: string;\n expectedProviderId?: string;\n requiredReceiptTypes?: ReceiptType[];\n schemaValidation?: ProviderConformanceSchemaValidationMode;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderConformanceError {\n name: \"ProbeMeshError\";\n code: ProbeMeshErrorCode;\n message: string;\n status: \"failed\";\n capability?: string;\n provider?: string;\n callId?: string;\n receiptRefs?: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n timeline?: ProbeMeshCallResponse[\"timeline\"];\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProbeMeshRouteMetadata;\n}\n\nexport interface ProviderConformanceSummary {\n status: ProviderConformanceStatus;\n totalChecks: number;\n passedChecks: number;\n failedChecks: number;\n failedCheckNames: string[];\n callId?: string;\n providerId?: string;\n errorCode?: ProbeMeshErrorCode;\n receiptTypes: ReceiptType[];\n requiredReceiptTypes: ReceiptType[];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: {\n routeId?: string;\n selectedProviderId?: string;\n fallbackUsed?: boolean;\n fallbackCount?: number;\n stopReason?: ProbeMeshRouteDecisionReason;\n };\n}\n\nexport interface ProviderConformanceResult<Data = unknown> {\n status: ProviderConformanceStatus;\n checks: ProviderConformanceCheck[];\n response?: ProbeMeshCallResponse<Data>;\n error?: ProviderConformanceError;\n telemetryEvents: HostedTelemetryEvent[];\n summary: ProviderConformanceSummary;\n}\n\nexport type ProviderConformanceReportFormat = \"json\" | \"markdown\";\n\nexport interface ProviderConformanceReportOptions {\n title?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderConformanceReport {\n title: string;\n status: ProviderConformanceStatus;\n summary: ProviderConformanceSummary;\n checks: ProviderConformanceCheck[];\n receipts: {\n total: number;\n types: ReceiptType[];\n providers: string[];\n byType: Partial<Record<ReceiptType, number>>;\n hasPaymentProof: boolean;\n hasSettlementConfirmation: boolean;\n hasProviderDelivery: boolean;\n };\n route?: ProviderConformanceSummary[\"route\"];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n error?: ProviderConformanceError;\n}\n\nconst DEFAULT_REQUIRED_RECEIPT_TYPES: ReceiptType[] = [\"provider_delivery\"];\n\nexport async function runProviderConformance<\n Input = unknown,\n Data = unknown,\n>(\n options: ProviderConformanceOptions<Input>,\n): Promise<ProviderConformanceResult<Data>> {\n assertConformanceOptions(options);\n\n const requiredReceiptTypes =\n options.requiredReceiptTypes ?? DEFAULT_REQUIRED_RECEIPT_TYPES;\n const schemaValidation = options.schemaValidation ?? {};\n const forbiddenOutputValues = options.forbiddenOutputValues ?? [];\n const manifestValidation = validateProviderManifest(options.manifest);\n const setupChecks: ProviderConformanceCheck[] = [\n manifestValidation.valid\n ? pass(\"manifest_valid\", \"Provider manifest is valid.\")\n : fail(\"manifest_valid\", \"Provider manifest is invalid.\", {\n errors: manifestValidation.errors,\n }),\n ];\n const inputSchema = schemaValidation.input\n ? schemaForCapability(options.manifest.inputSchema, options.request.capability)\n : undefined;\n\n if (inputSchema) {\n const inputValidation = validateJsonSchemaLikeValue(\n options.request.input,\n inputSchema,\n {\n path: \"$.input\",\n },\n );\n\n setupChecks.push(\n inputValidation.valid\n ? pass(\"input_schema_valid\", \"Request input matches the declared schema.\")\n : fail(\"input_schema_valid\", \"Request input does not match the declared schema.\", {\n errors: inputValidation.errors,\n }),\n );\n } else if (schemaValidation.input) {\n setupChecks.push(\n fail(\"input_schema_valid\", \"No input schema is declared for this capability.\"),\n );\n }\n\n if (setupChecks.some((check) => check.status === \"failed\")) {\n const checks = [\n ...setupChecks,\n createSecretSafeOutputCheck({\n checks: setupChecks,\n requiredReceiptTypes,\n telemetryEvents: [],\n forbiddenOutputValues,\n }),\n ];\n const status = statusFromChecks(checks);\n const sanitizedChecks = sanitizeConformanceOutput(checks, forbiddenOutputValues);\n\n return {\n status,\n checks: sanitizedChecks,\n telemetryEvents: [],\n summary: createSummary({\n status,\n checks: sanitizedChecks,\n telemetryEvents: [],\n requiredReceiptTypes,\n }),\n };\n }\n\n const telemetryEvents: HostedTelemetryEvent[] = [];\n const hostedRouter = await startHostedRouter({\n port: 0,\n adapters: options.adapters,\n apiKeys: options.apiKey ? [options.apiKey] : undefined,\n onTelemetryEvent(event) {\n telemetryEvents.push(event);\n },\n });\n\n let response: ProbeMeshCallResponse<Data> | undefined;\n let error: ProviderConformanceError | undefined;\n\n try {\n const probemesh = createProbeMesh({\n hosted: {\n baseUrl: hostedRouter.url,\n apiKey: options.apiKey,\n },\n });\n\n try {\n response = await probemesh.call<Input, Data>(options.request);\n } catch (caught) {\n error = toConformanceError(caught);\n }\n } finally {\n await hostedRouter.close();\n }\n\n const baseChecks = [\n ...setupChecks,\n ...createExecutionChecks({\n response,\n error,\n telemetryEvents,\n expectedProviderId: options.expectedProviderId ?? options.manifest.id,\n requiredReceiptTypes,\n }),\n ];\n const outputSchema = schemaValidation.output\n ? schemaForCapability(options.manifest.outputSchema, options.request.capability)\n : undefined;\n\n if (outputSchema) {\n baseChecks.push(outputSchemaCheck(response, outputSchema));\n } else if (schemaValidation.output) {\n baseChecks.push(\n fail(\"output_schema_valid\", \"No output schema is declared for this capability.\"),\n );\n }\n\n const checks = [\n ...baseChecks,\n createSecretSafeOutputCheck({\n response,\n error,\n telemetryEvents,\n checks: baseChecks,\n requiredReceiptTypes,\n forbiddenOutputValues,\n }),\n ];\n const status = statusFromChecks(checks);\n const sanitizedChecks = sanitizeConformanceOutput(checks, forbiddenOutputValues);\n const sanitizedResponse = sanitizeConformanceOutput(response, forbiddenOutputValues);\n const sanitizedError = sanitizeConformanceOutput(error, forbiddenOutputValues);\n const sanitizedTelemetryEvents = sanitizeConformanceOutput(\n telemetryEvents,\n forbiddenOutputValues,\n );\n\n return {\n status,\n checks: sanitizedChecks,\n response: sanitizedResponse,\n error: sanitizedError,\n telemetryEvents: sanitizedTelemetryEvents,\n summary: createSummary({\n status,\n checks: sanitizedChecks,\n response: sanitizedResponse,\n error: sanitizedError,\n telemetryEvents: sanitizedTelemetryEvents,\n requiredReceiptTypes,\n }),\n };\n}\n\nexport function createProviderConformanceReport(\n result: ProviderConformanceResult,\n options: ProviderConformanceReportOptions = {},\n): ProviderConformanceReport {\n const receiptRefs = result.response?.receiptRefs ?? result.error?.receiptRefs;\n const report: ProviderConformanceReport = {\n title: options.title ?? \"ProbeMesh Provider Conformance Report\",\n status: result.status,\n summary: result.summary,\n checks: result.checks,\n receipts: summarizeReceipts(receiptRefs),\n route: result.summary.route,\n timelineEventTypes: result.summary.timelineEventTypes,\n telemetryEventTypes: result.summary.telemetryEventTypes,\n safety: result.summary.safety,\n retrySafety: result.summary.retrySafety,\n error: result.error,\n };\n\n return sanitizeConformanceOutput(report, options.forbiddenOutputValues ?? []);\n}\n\nexport function formatProviderConformanceReport(\n report: ProviderConformanceReport,\n options: {\n format?: ProviderConformanceReportFormat;\n } = {},\n) {\n const sanitizedReport = sanitizeConformanceOutput(report, []);\n\n if ((options.format ?? \"markdown\") === \"json\") {\n return JSON.stringify(sanitizedReport, null, 2);\n }\n\n return formatConformanceReportMarkdown(sanitizedReport);\n}\n\nfunction createExecutionChecks(options: {\n response?: ProbeMeshCallResponse;\n error?: ProviderConformanceError;\n telemetryEvents: HostedTelemetryEvent[];\n expectedProviderId?: string;\n requiredReceiptTypes: ReceiptType[];\n}): ProviderConformanceCheck[] {\n return [\n completedResponseCheck(options.response, options.error),\n selectedProviderCheck(\n options.response,\n options.error,\n options.expectedProviderId,\n ),\n routeMetadataCheck(options.response, options.error),\n timelineEventsCheck(options.response, options.error),\n requiredReceiptsCheck(options.response, options.error, options.requiredReceiptTypes),\n safetyMetadataCheck(options.response, options.error, options.requiredReceiptTypes),\n retrySafetyCheck(options.response, options.error),\n telemetryMatchesTimelineCheck(options.response, options.telemetryEvents),\n ];\n}\n\nfunction completedResponseCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n) {\n if (response?.status === \"completed\") {\n return pass(\"completed_response\", \"Hosted provider call completed.\");\n }\n\n return fail(\n \"completed_response\",\n error\n ? `Hosted provider call failed with ${error.code}.`\n : \"Hosted provider call did not return a completed response.\",\n {\n errorCode: error?.code,\n errorMessage: error?.message,\n },\n );\n}\n\nfunction selectedProviderCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n expectedProviderId: string | undefined,\n) {\n const providerId = response?.provider.id;\n\n if (\n providerId &&\n (!expectedProviderId || providerId === expectedProviderId)\n ) {\n return pass(\"selected_provider\", \"Hosted route selected the expected provider.\", {\n providerId,\n });\n }\n\n return fail(\"selected_provider\", \"Hosted route did not select the expected provider.\", {\n expectedProviderId,\n providerId,\n errorProvider: error?.provider,\n });\n}\n\nfunction routeMetadataCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n) {\n if (\n response?.route?.mode === \"hosted\" &&\n typeof response.route.routeId === \"string\" &&\n response.route.routeId.length > 0\n ) {\n return pass(\"route_metadata\", \"Hosted route metadata is present.\", {\n routeId: response.route.routeId,\n selectedProviderId: response.route.selectedProviderId,\n });\n }\n\n return fail(\"route_metadata\", \"Hosted route metadata is missing.\", {\n errorRouteId: error?.route?.routeId,\n });\n}\n\nfunction timelineEventsCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n) {\n const timelineEventTypes =\n response?.timeline?.events.map((event) => event.type) ?? [];\n const requiredEvents: ProbeMeshTimelineEventType[] = [\n \"call.requested\",\n \"provider.attempted\",\n \"provider.selected\",\n \"call.completed\",\n ];\n const missingEvents = requiredEvents.filter(\n (eventType) => !timelineEventTypes.includes(eventType),\n );\n\n if (missingEvents.length === 0) {\n return pass(\"timeline_events\", \"Hosted timeline contains the provider conformance events.\", {\n timelineEventTypes,\n });\n }\n\n return fail(\"timeline_events\", \"Hosted timeline is missing required events.\", {\n missingEvents,\n timelineEventTypes,\n errorTimelineEventTypes: error?.timeline?.events.map((event) => event.type),\n });\n}\n\nfunction requiredReceiptsCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n requiredReceiptTypes: ReceiptType[],\n) {\n const receiptTypes = getReceiptTypes(response?.receiptRefs);\n const missingReceiptTypes = requiredReceiptTypes.filter(\n (receiptType) => !receiptTypes.includes(receiptType),\n );\n\n if (missingReceiptTypes.length === 0) {\n return pass(\"required_receipts\", \"Required receipts are present.\", {\n receiptTypes,\n });\n }\n\n return fail(\"required_receipts\", \"Required receipts are missing.\", {\n missingReceiptTypes,\n receiptTypes,\n errorReceiptTypes: getReceiptTypes(error?.receiptRefs),\n });\n}\n\nfunction safetyMetadataCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n requiredReceiptTypes: ReceiptType[],\n) {\n const requiresPaymentSafety = requiredReceiptTypes.some((receiptType) =>\n [\"payment_proof\", \"settlement_confirmation\"].includes(receiptType),\n );\n\n if (!requiresPaymentSafety) {\n return pass(\"safety_metadata\", \"Payment safety metadata is not required for this conformance run.\");\n }\n\n if (response?.safety) {\n return pass(\"safety_metadata\", \"Safety metadata is present for paid conformance.\", {\n safety: response.safety,\n });\n }\n\n return fail(\"safety_metadata\", \"Safety metadata is missing for paid conformance.\", {\n errorSafety: error?.safety,\n });\n}\n\nfunction retrySafetyCheck(\n response: ProbeMeshCallResponse | undefined,\n error: ProviderConformanceError | undefined,\n) {\n if (response?.retrySafety) {\n return pass(\"retry_safety\", \"Hosted response includes retry safety metadata.\", {\n retrySafety: response.retrySafety,\n });\n }\n\n return fail(\"retry_safety\", \"Hosted response retry safety metadata is missing.\", {\n errorRetrySafety: error?.retrySafety,\n });\n}\n\nfunction telemetryMatchesTimelineCheck(\n response: ProbeMeshCallResponse | undefined,\n telemetryEvents: HostedTelemetryEvent[],\n) {\n const timelineEventTypes =\n response?.timeline?.events.map((event) => event.type) ?? [];\n const telemetryEventTypes = telemetryEvents.map((event) => event.type);\n const matches =\n timelineEventTypes.length > 0 &&\n timelineEventTypes.length === telemetryEventTypes.length &&\n timelineEventTypes.every(\n (eventType, index) => eventType === telemetryEventTypes[index],\n );\n\n if (matches) {\n return pass(\"telemetry_matches_timeline\", \"Telemetry mirrors the hosted timeline.\", {\n telemetryEventTypes,\n });\n }\n\n return fail(\"telemetry_matches_timeline\", \"Telemetry does not mirror the hosted timeline.\", {\n timelineEventTypes,\n telemetryEventTypes,\n });\n}\n\nfunction outputSchemaCheck(\n response: ProbeMeshCallResponse | undefined,\n schema: JsonSchemaLike,\n) {\n if (!response) {\n return fail(\"output_schema_valid\", \"Cannot validate output schema without a response.\");\n }\n\n const result = validateJsonSchemaLikeValue(response.data, schema, {\n path: \"$.data\",\n });\n\n if (result.valid) {\n return pass(\"output_schema_valid\", \"Provider response data matches the declared schema.\");\n }\n\n return fail(\"output_schema_valid\", \"Provider response data does not match the declared schema.\", {\n errors: result.errors,\n });\n}\n\nfunction createSecretSafeOutputCheck(options: {\n response?: ProbeMeshCallResponse;\n error?: ProviderConformanceError;\n telemetryEvents: HostedTelemetryEvent[];\n checks: ProviderConformanceCheck[];\n requiredReceiptTypes: ReceiptType[];\n forbiddenOutputValues: string[];\n}) {\n const forbiddenOutputValues = options.forbiddenOutputValues.filter(\n (value) => value.length > 0,\n );\n const candidate = {\n response: options.response,\n error: options.error,\n telemetryEvents: options.telemetryEvents,\n checks: options.checks,\n summary: createSummary({\n status: statusFromChecks(options.checks),\n checks: options.checks,\n response: options.response,\n error: options.error,\n telemetryEvents: options.telemetryEvents,\n requiredReceiptTypes: options.requiredReceiptTypes,\n }),\n };\n const serialized = JSON.stringify(candidate);\n const leakedValues = forbiddenOutputValues.filter((value) =>\n serialized.includes(value),\n );\n\n if (leakedValues.length === 0) {\n return pass(\"secret_safe_output\", \"Serialized conformance output contains no forbidden values.\", {\n checkedForbiddenValueCount: forbiddenOutputValues.length,\n });\n }\n\n return fail(\"secret_safe_output\", \"Serialized conformance output contains forbidden values.\", {\n leakedValueCount: leakedValues.length,\n });\n}\n\nfunction createSummary(options: {\n status: ProviderConformanceStatus;\n checks: ProviderConformanceCheck[];\n response?: ProbeMeshCallResponse;\n error?: ProviderConformanceError;\n telemetryEvents: HostedTelemetryEvent[];\n requiredReceiptTypes: ReceiptType[];\n}): ProviderConformanceSummary {\n const receiptRefs = options.response?.receiptRefs ?? options.error?.receiptRefs;\n const timeline = options.response?.timeline ?? options.error?.timeline;\n const route = options.response?.route ?? options.error?.route;\n const failedCheckNames = options.checks\n .filter((check) => check.status === \"failed\")\n .map((check) => check.name);\n\n return {\n status: options.status,\n totalChecks: options.checks.length,\n passedChecks: options.checks.length - failedCheckNames.length,\n failedChecks: failedCheckNames.length,\n failedCheckNames,\n callId: options.response?.callId ?? options.error?.callId,\n providerId: options.response?.provider.id ?? options.error?.provider,\n errorCode: options.error?.code,\n receiptTypes: getReceiptTypes(receiptRefs),\n requiredReceiptTypes: [...options.requiredReceiptTypes],\n timelineEventTypes: timeline?.events.map((event) => event.type) ?? [],\n telemetryEventTypes: options.telemetryEvents.map((event) => event.type),\n safety: options.response?.safety ?? options.error?.safety,\n retrySafety: options.response?.retrySafety ?? options.error?.retrySafety,\n route: route\n ? {\n routeId: route.routeId,\n selectedProviderId: route.selectedProviderId,\n fallbackUsed: route.explanation?.fallbackUsed,\n fallbackCount: route.explanation?.fallbackCount,\n stopReason: route.explanation?.stopReason,\n }\n : undefined,\n };\n}\n\nfunction summarizeReceipts(receiptRefs: ReceiptRef[] | undefined) {\n const receipts = receiptRefs ?? [];\n const byType: Partial<Record<ReceiptType, number>> = {};\n\n for (const receiptRef of receipts) {\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receipts.length,\n types: getReceiptTypes(receipts),\n providers: [\n ...new Set(receipts.map((receiptRef) => receiptRef.provider)),\n ],\n byType,\n hasPaymentProof: receipts.some(\n (receiptRef) => receiptRef.type === \"payment_proof\",\n ),\n hasSettlementConfirmation: receipts.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n ),\n hasProviderDelivery: receipts.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n ),\n };\n}\n\nfunction formatConformanceReportMarkdown(report: ProviderConformanceReport) {\n const lines = [\n `# ${report.title}`,\n \"\",\n `Conformance: ${report.status}`,\n `Provider: ${report.summary.providerId ?? \"unknown\"}`,\n `Call: ${report.summary.callId ?? \"unknown\"}`,\n `Error: ${report.summary.errorCode ?? \"none\"}`,\n \"\",\n \"## Checks\",\n ...report.checks.map(\n (check) =>\n `- [${check.status === \"passed\" ? \"x\" : \" \"}] ${check.name}: ${check.message}`,\n ),\n \"\",\n \"## Receipts\",\n `- Total: ${report.receipts.total}`,\n `- Types: ${formatInlineList(report.receipts.types)}`,\n `- Providers: ${formatInlineList(report.receipts.providers)}`,\n \"\",\n \"## Route\",\n `- Route ID: ${report.route?.routeId ?? \"none\"}`,\n `- Selected provider: ${report.route?.selectedProviderId ?? \"none\"}`,\n `- Stop reason: ${report.route?.stopReason ?? \"none\"}`,\n \"\",\n \"## Safety\",\n `- Payment: ${report.safety?.paymentStatus ?? \"unknown\"}`,\n `- Settlement: ${report.safety?.settlementStatus ?? \"unknown\"}`,\n `- Delivery: ${report.safety?.deliveryStatus ?? \"unknown\"}`,\n `- Money may have moved: ${String(\n report.safety?.moneyMayHaveMoved ?? false,\n )}`,\n \"\",\n \"## Retry Safety\",\n `- Retryable: ${String(report.retrySafety?.retryable ?? false)}`,\n `- Safe to auto retry: ${String(\n report.retrySafety?.safeToAutoRetry ?? false,\n )}`,\n `- Reason: ${report.retrySafety?.reason ?? \"unknown\"}`,\n \"\",\n \"## Timeline\",\n `- Events: ${formatInlineList(report.timelineEventTypes)}`,\n `- Telemetry: ${formatInlineList(report.telemetryEventTypes)}`,\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction schemaForCapability(\n declaration: JsonSchemaLike | Record<string, JsonSchemaLike>,\n capability: string,\n): JsonSchemaLike | undefined {\n if (isSharedJsonSchemaLike(declaration)) {\n return declaration;\n }\n\n return declaration[capability];\n}\n\nfunction toConformanceError(error: unknown): ProviderConformanceError {\n if (isProbeMeshError(error)) {\n return {\n name: \"ProbeMeshError\",\n code: error.code,\n message: error.message,\n status: \"failed\",\n capability: error.capability,\n provider: error.provider,\n callId: error.callId,\n receiptRefs: error.receiptRefs,\n safety: error.safety,\n timeline: error.timeline,\n retrySafety: error.retrySafety,\n route: error.route,\n };\n }\n\n return {\n name: \"ProbeMeshError\",\n code: \"provider_unavailable\",\n message:\n error instanceof Error\n ? error.message\n : \"provider conformance call failed.\",\n status: \"failed\",\n };\n}\n\nfunction sanitizeConformanceOutput<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 assertConformanceOptions(\n options: ProviderConformanceOptions,\n): asserts options is ProviderConformanceOptions {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.adapters)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance adapters must be an array.\",\n });\n }\n\n if (\n !options.request ||\n typeof options.request !== \"object\" ||\n Array.isArray(options.request)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider conformance request must be an object.\",\n });\n }\n}\n\nfunction getReceiptTypes(receiptRefs: ReceiptRef[] | undefined) {\n return [...new Set((receiptRefs ?? []).map((receiptRef) => receiptRef.type))];\n}\n\nfunction statusFromChecks(checks: ProviderConformanceCheck[]) {\n return checks.every((check) => check.status === \"passed\")\n ? \"passed\"\n : \"failed\";\n}\n\nfunction formatInlineList(values: readonly string[]) {\n return values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction pass(\n name: string,\n message: string,\n details?: Record<string, unknown>,\n): ProviderConformanceCheck {\n return {\n name,\n status: \"passed\",\n message,\n details,\n };\n}\n\nfunction fail(\n name: string,\n message: string,\n details?: Record<string, unknown>,\n): ProviderConformanceCheck {\n return {\n name,\n status: \"failed\",\n message,\n details,\n };\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProviderOnboardingDossierImportReport,\n evaluateProviderOnboardingDossiers,\n formatProviderOnboardingDossierImportReport,\n parseProviderOnboardingDossierJson,\n} from \"../providerOnboardingDossierImport\";\nimport type {\n ProviderOnboardingDossierEvaluationResult,\n ProviderOnboardingDossierImportReport,\n ProviderOnboardingDossierImportReportFormat,\n ProviderOnboardingDossierImportReportOptions,\n ProviderOnboardingDossierPolicyEvaluationOptions,\n} from \"../providerOnboardingDossierImport\";\nimport type { ProviderCatalog } from \"../providerCatalog\";\nimport type { ProviderOnboardingDossier } from \"../providerOnboardingDossier\";\n\nexport interface ProviderDossierCheckCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProviderDossierCheckCliCatalog {\n generatedAt?: string;\n}\n\nexport interface ProviderDossierCheckCliOutputs {\n json?: string;\n markdown?: string;\n catalog?: string;\n}\n\nexport interface ProviderDossierCheckCliConfig {\n dossiers?: ProviderOnboardingDossier[];\n dossierFiles?: string[];\n catalog?: ProviderDossierCheckCliCatalog;\n policy?: ProviderOnboardingDossierPolicyEvaluationOptions;\n report?: ProviderOnboardingDossierImportReportOptions & {\n format?: ProviderOnboardingDossierImportReportFormat;\n };\n outputs?: ProviderDossierCheckCliOutputs;\n}\n\nexport type ProviderDossierCheckCliConfigExport =\n | ProviderDossierCheckCliConfig\n | ProviderDossierCheckCliSkip;\n\nexport type ProviderDossierCheckCliConfigFactory = (\n context: ProviderDossierCheckCliConfigContext,\n) =>\n | ProviderDossierCheckCliConfigExport\n | Promise<ProviderDossierCheckCliConfigExport>;\n\nexport interface ProviderDossierCheckCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProviderDossierCheckCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProviderDossierCheckCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProviderDossierCheckCliSkip;\n evaluation?: ProviderOnboardingDossierEvaluationResult;\n report?: ProviderOnboardingDossierImportReport;\n catalog?: ProviderCatalog;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProviderDossierCheckCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProviderOnboardingDossierImportReportFormat;\n outJson?: string;\n outMarkdown?: string;\n outCatalog?: string;\n title?: string;\n generatedAt?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-dossier-check --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--out-catalog <path>] [--title <text>] [--generated-at <iso>]\";\n\nexport async function runProviderDossierCheckCli(\n options: ProviderDossierCheckCliOptions = {},\n): Promise<ProviderDossierCheckCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `provider dossier check skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const dossiers = await resolveDossiers(configExport, cwd);\n const evaluation = evaluateProviderOnboardingDossiers({\n dossiers,\n generatedAt:\n parsedArgs.generatedAt ?? configExport.catalog?.generatedAt,\n policy: configExport.policy,\n });\n const report = createProviderOnboardingDossierImportReport(evaluation, {\n ...(configExport.report ?? {}),\n title: parsedArgs.title ?? configExport.report?.title,\n generatedAt: parsedArgs.generatedAt ?? configExport.report?.generatedAt,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.report?.format ?? \"markdown\";\n const stdout = formatProviderOnboardingDossierImportReport(report, {\n format: selectedFormat,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n report,\n catalog: evaluation.catalog,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n catalog: parsedArgs.outCatalog ?? configExport.outputs?.catalog,\n },\n });\n\n return {\n exitCode: evaluation.status === \"passed\" ? 0 : 1,\n skipped: false,\n evaluation,\n report,\n catalog: evaluation.catalog,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error\n ? error.message\n : \"Unknown provider dossier check CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-catalog\") {\n parsedArgs.outCatalog = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--title\") {\n parsedArgs.title = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--generated-at\") {\n parsedArgs.generatedAt = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProviderDossierCheckCliConfigContext,\n): Promise<ProviderDossierCheckCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProviderDossierCheckCliConfigFactory)(context);\n }\n\n return configExport as ProviderDossierCheckCliConfigExport;\n}\n\nfunction isCliSkip(value: unknown): value is ProviderDossierCheckCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProviderDossierCheckCliSkip>).skip === true &&\n typeof (value as Partial<ProviderDossierCheckCliSkip>).reason === \"string\"\n );\n}\n\nfunction assertCliConfig(\n config: unknown,\n): asserts config is ProviderDossierCheckCliConfig {\n if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n throw new Error(\"Provider dossier check CLI config must be an object.\");\n }\n\n const candidate = config as Partial<ProviderDossierCheckCliConfig>;\n\n if (\n candidate.dossiers !== undefined &&\n !Array.isArray(candidate.dossiers)\n ) {\n throw new Error(\"Provider dossier check CLI dossiers must be an array.\");\n }\n\n if (\n candidate.dossierFiles !== undefined &&\n (!Array.isArray(candidate.dossierFiles) ||\n candidate.dossierFiles.some((file) => typeof file !== \"string\"))\n ) {\n throw new Error(\"Provider dossier check CLI dossierFiles must be an array of strings.\");\n }\n\n if (\n (candidate.dossiers?.length ?? 0) === 0 &&\n (candidate.dossierFiles?.length ?? 0) === 0\n ) {\n throw new Error(\"Provider dossier check CLI config requires dossiers or dossierFiles.\");\n }\n\n if (candidate.catalog !== undefined && !isRecord(candidate.catalog)) {\n throw new Error(\"Provider dossier check CLI catalog config must be an object.\");\n }\n\n if (candidate.policy !== undefined && !isRecord(candidate.policy)) {\n throw new Error(\"Provider dossier check CLI policy config must be an object.\");\n }\n\n if (candidate.outputs !== undefined) {\n assertOutputs(candidate.outputs);\n }\n}\n\nfunction assertOutputs(outputs: unknown) {\n if (!isRecord(outputs)) {\n throw new Error(\"Provider dossier check CLI outputs must be an object.\");\n }\n\n for (const [key, value] of Object.entries(outputs)) {\n if (\n ![\"json\", \"markdown\", \"catalog\"].includes(key) ||\n (value !== undefined && typeof value !== \"string\")\n ) {\n throw new Error(\n \"Provider dossier check CLI outputs may only include json, markdown, and catalog string paths.\",\n );\n }\n }\n}\n\nasync function resolveDossiers(\n config: ProviderDossierCheckCliConfig,\n cwd: string,\n) {\n const dossiers: ProviderOnboardingDossier[] = [\n ...(config.dossiers ?? []),\n ];\n\n for (const dossierFile of config.dossierFiles ?? []) {\n const parsed = JSON.parse(await readFile(resolve(cwd, dossierFile), \"utf8\"));\n const entries = Array.isArray(parsed) ? parsed : [parsed];\n\n for (const entry of entries) {\n dossiers.push(parseProviderOnboardingDossierJson(JSON.stringify(entry)));\n }\n }\n\n return dossiers;\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n report: ProviderOnboardingDossierImportReport;\n catalog: ProviderCatalog;\n outputs: ProviderDossierCheckCliOutputs;\n}) {\n const artifactPaths: ProviderDossierCheckCliOutputs = {};\n\n if (options.outputs.json) {\n const path = resolve(options.cwd, options.outputs.json);\n await writeTextFile(\n path,\n formatProviderOnboardingDossierImportReport(options.report, {\n format: \"json\",\n }),\n );\n artifactPaths.json = path;\n }\n\n if (options.outputs.markdown) {\n const path = resolve(options.cwd, options.outputs.markdown);\n await writeTextFile(\n path,\n formatProviderOnboardingDossierImportReport(options.report, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = path;\n }\n\n if (options.outputs.catalog) {\n const path = resolve(options.cwd, options.outputs.catalog);\n await writeTextFile(path, `${JSON.stringify(options.catalog, null, 2)}\\n`);\n artifactPaths.catalog = path;\n }\n\n return artifactPaths;\n}\n\nasync function writeTextFile(path: string, body: string) {\n await mkdir(dirname(path), {\n recursive: true,\n });\n await writeFile(path, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): ProviderDossierCheckCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `Provider dossier check CLI failed: ${message}\\n${USAGE}\\n`,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","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","import { ProbeMeshError } from \"./errors\";\nimport type { HostedProviderCatalogPolicyOptions } from \"./hostedRouter\";\nimport {\n createProviderCatalog,\n summarizeProviderCatalog,\n type ProviderCatalog,\n type ProviderCatalogSummary,\n} from \"./providerCatalog\";\nimport {\n evaluateProviderCatalogPolicy,\n type ProviderCatalogPolicyAdapterInventory,\n type ProviderCatalogPolicyEvaluationResult,\n type ProviderCatalogPolicyExpectedQuery,\n type ProviderCatalogPolicyOptions,\n} from \"./providerCatalogPolicy\";\nimport {\n assertProviderOnboardingDossier,\n validateProviderOnboardingDossier,\n type ProviderOnboardingDossier,\n type ProviderOnboardingDossierStatus,\n} from \"./providerOnboardingDossier\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\n\nexport type ProviderOnboardingDossierImportStatus = \"passed\" | \"failed\";\n\nexport type ProviderOnboardingDossierImportCheckStatus = \"passed\" | \"failed\";\n\nexport type ProviderOnboardingDossierImportReportFormat = \"json\" | \"markdown\";\n\nexport interface ProviderCatalogFromOnboardingDossiersOptions {\n dossiers: ProviderOnboardingDossier[];\n generatedAt?: string;\n}\n\nexport interface ProviderOnboardingDossierPolicyEvaluationOptions {\n catalogPolicy?: ProviderCatalogPolicyOptions;\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries: ProviderCatalogPolicyExpectedQuery[];\n}\n\nexport interface ProviderOnboardingDossierEvaluationOptions\n extends ProviderCatalogFromOnboardingDossiersOptions {\n policy?: ProviderOnboardingDossierPolicyEvaluationOptions;\n}\n\nexport interface HostedCatalogPolicyFromOnboardingDossiersOptions\n extends ProviderCatalogFromOnboardingDossiersOptions,\n ProviderCatalogPolicyOptions {\n adapterInventory: ProviderCatalogPolicyAdapterInventory;\n queries: ProviderCatalogPolicyExpectedQuery[];\n}\n\nexport interface HostedCatalogPolicyFromOnboardingDossiersResult {\n catalogPolicy: HostedProviderCatalogPolicyOptions;\n evaluation: ProviderOnboardingDossierEvaluationResult;\n}\n\nexport interface ProviderOnboardingDossierImportCheck {\n name: string;\n status: ProviderOnboardingDossierImportCheckStatus;\n message: string;\n dossierId?: string;\n providerId?: string;\n}\n\nexport interface ProviderOnboardingDossierImportDossierResult {\n dossierId: string;\n providerId: string;\n status: ProviderOnboardingDossierStatus;\n catalogArtifactId: string;\n conformanceArtifactId: string;\n imported: boolean;\n reasons: string[];\n failedChecks: string[];\n}\n\nexport interface ProviderOnboardingDossierEvaluationResult {\n status: ProviderOnboardingDossierImportStatus;\n checks: ProviderOnboardingDossierImportCheck[];\n summary: ProviderCatalogSummary & {\n totalDossiers: number;\n readyDossiers: number;\n failedDossiers: number;\n importedDossiers: number;\n excludedDossiers: number;\n policyStatus?: ProviderCatalogPolicyEvaluationResult[\"status\"];\n };\n catalog: ProviderCatalog;\n dossiers: ProviderOnboardingDossierImportDossierResult[];\n policyEvaluation?: ProviderCatalogPolicyEvaluationResult;\n}\n\nexport interface ProviderOnboardingDossierImportReportOptions {\n title?: string;\n generatedAt?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProviderOnboardingDossierImportReport {\n title: string;\n generatedAt: string;\n status: ProviderOnboardingDossierImportStatus;\n summary: ProviderOnboardingDossierEvaluationResult[\"summary\"];\n checks: ProviderOnboardingDossierImportCheck[];\n dossiers: ProviderOnboardingDossierImportDossierResult[];\n policyEvaluation?: ProviderCatalogPolicyEvaluationResult;\n}\n\nexport function parseProviderOnboardingDossierJson(\n json: string,\n): ProviderOnboardingDossier {\n if (typeof json !== \"string\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier JSON must be a string.\",\n });\n }\n\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(json);\n } catch (cause) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier JSON must be valid JSON.\",\n cause,\n });\n }\n\n assertProviderOnboardingDossier(parsed);\n\n return parsed;\n}\n\nexport function createProviderCatalogFromOnboardingDossiers(\n options: ProviderCatalogFromOnboardingDossiersOptions,\n): ProviderCatalog {\n assertDossierListOptions(options);\n\n const readyArtifacts = options.dossiers\n .filter((dossier) => dossier.status === \"ready\")\n .map((dossier) => dossier.artifacts.catalog);\n\n return createProviderCatalog({\n artifacts: readyArtifacts,\n generatedAt: options.generatedAt,\n });\n}\n\nexport function evaluateProviderOnboardingDossiers(\n options: ProviderOnboardingDossierEvaluationOptions,\n): ProviderOnboardingDossierEvaluationResult {\n assertEvaluationOptions(options);\n\n const catalog = createProviderCatalogFromOnboardingDossiers({\n dossiers: options.dossiers,\n generatedAt: options.generatedAt,\n });\n const dossierResults = options.dossiers.map(summarizeDossierImport);\n const readyDossiers = dossierResults.filter((dossier) => dossier.imported).length;\n const failedDossiers = dossierResults.length - readyDossiers;\n const checks: ProviderOnboardingDossierImportCheck[] = [\n {\n name: \"dossiers_valid\",\n status: \"passed\",\n message: `${options.dossiers.length} provider onboarding dossier(s) are valid.`,\n },\n readyDossiers > 0\n ? {\n name: \"ready_dossiers\",\n status: \"passed\",\n message: `${readyDossiers} ready dossier(s) were imported into the buyer catalog.`,\n }\n : {\n name: \"ready_dossiers\",\n status: \"failed\",\n message: \"No ready dossiers were available for buyer catalog import.\",\n },\n ];\n let policyEvaluation: ProviderCatalogPolicyEvaluationResult | undefined;\n\n if (options.policy) {\n policyEvaluation = evaluateProviderCatalogPolicy({\n catalog,\n catalogPolicy: options.policy.catalogPolicy,\n adapterInventory: options.policy.adapterInventory,\n queries: options.policy.queries,\n });\n checks.push({\n name: \"catalog_policy\",\n status: policyEvaluation.status === \"passed\" ? \"passed\" : \"failed\",\n message:\n policyEvaluation.status === \"passed\"\n ? \"Imported dossier catalog passed the buyer catalog policy checks.\"\n : \"Imported dossier catalog failed the buyer catalog policy checks.\",\n });\n }\n\n if (failedDossiers > 0) {\n checks.push({\n name: \"failed_dossiers_excluded\",\n status: \"passed\",\n message: `${failedDossiers} failed dossier(s) were kept in the report and excluded from the buyer catalog.`,\n });\n }\n\n const failedChecks = checks.filter((check) => check.status === \"failed\").length;\n const catalogSummary = summarizeProviderCatalog(catalog);\n\n return {\n status: failedChecks === 0 ? \"passed\" : \"failed\",\n checks,\n summary: {\n ...catalogSummary,\n totalDossiers: options.dossiers.length,\n readyDossiers,\n failedDossiers,\n importedDossiers: readyDossiers,\n excludedDossiers: failedDossiers,\n policyStatus: policyEvaluation?.status,\n },\n catalog,\n dossiers: dossierResults,\n policyEvaluation,\n };\n}\n\nexport function createHostedCatalogPolicyFromOnboardingDossiers(\n options: HostedCatalogPolicyFromOnboardingDossiersOptions,\n): HostedCatalogPolicyFromOnboardingDossiersResult {\n const catalogPolicy = createCatalogPolicyOptions(options);\n const evaluation = evaluateProviderOnboardingDossiers({\n dossiers: options.dossiers,\n generatedAt: options.generatedAt,\n policy: {\n catalogPolicy,\n adapterInventory: options.adapterInventory,\n queries: options.queries,\n },\n });\n\n if (evaluation.status !== \"passed\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider onboarding dossiers cannot create a hosted catalog policy: ${formatFailedChecks(\n evaluation.checks,\n )}`,\n });\n }\n\n return {\n catalogPolicy: {\n catalog: evaluation.catalog,\n ...catalogPolicy,\n },\n evaluation,\n };\n}\n\nexport function createProviderOnboardingDossierImportReport(\n result: ProviderOnboardingDossierEvaluationResult,\n options: ProviderOnboardingDossierImportReportOptions = {},\n): ProviderOnboardingDossierImportReport {\n const report: ProviderOnboardingDossierImportReport = {\n title: options.title ?? \"ProbeMesh Provider Onboarding Dossier Import Report\",\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: result.status,\n summary: cloneSerializable(result.summary),\n checks: cloneSerializable(result.checks),\n dossiers: cloneSerializable(result.dossiers),\n policyEvaluation: cloneSerializable(result.policyEvaluation),\n };\n\n return sanitizeReport(report, options.forbiddenOutputValues ?? []);\n}\n\nexport function formatProviderOnboardingDossierImportReport(\n report: ProviderOnboardingDossierImportReport,\n options: {\n format?: ProviderOnboardingDossierImportReportFormat;\n } = {},\n) {\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatMarkdownReport(report);\n }\n\n return JSON.stringify(report, null, 2);\n}\n\nfunction assertDossierListOptions(\n options: ProviderCatalogFromOnboardingDossiersOptions,\n): asserts options is ProviderCatalogFromOnboardingDossiersOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier import options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.dossiers)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier import options require dossiers array.\",\n });\n }\n\n options.dossiers.forEach((dossier, index) => {\n const validation = validateProviderOnboardingDossier(dossier);\n\n if (!validation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid provider onboarding dossier at index ${index}: ${formatValidationErrors(\n validation.errors,\n )}`,\n });\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 import generatedAt must be an ISO timestamp.\",\n });\n }\n}\n\nfunction assertEvaluationOptions(\n options: ProviderOnboardingDossierEvaluationOptions,\n): asserts options is ProviderOnboardingDossierEvaluationOptions {\n assertDossierListOptions(options);\n\n if (options.dossiers.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier evaluation requires at least one dossier.\",\n });\n }\n\n if (options.policy === undefined) {\n return;\n }\n\n if (!isRecord(options.policy)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier policy options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.policy.adapterInventory)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier policy requires adapterInventory array.\",\n });\n }\n\n if (!Array.isArray(options.policy.queries) || options.policy.queries.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"Provider onboarding dossier policy requires at least one query.\",\n });\n }\n}\n\nfunction createCatalogPolicyOptions(\n options: HostedCatalogPolicyFromOnboardingDossiersOptions,\n): ProviderCatalogPolicyOptions {\n return {\n enabled: options.enabled,\n status: options.status,\n protocolMode: options.protocolMode,\n paymentPreferences: options.paymentPreferences,\n paymentStrategy: options.paymentStrategy,\n maxCostUsd: options.maxCostUsd,\n requiredReceiptTypes: options.requiredReceiptTypes,\n providerIds: options.providerIds,\n blockedProviderIds: options.blockedProviderIds,\n };\n}\n\nfunction summarizeDossierImport(\n dossier: ProviderOnboardingDossier,\n): ProviderOnboardingDossierImportDossierResult {\n return {\n dossierId: dossier.dossierId,\n providerId: dossier.provider.id,\n status: dossier.status,\n catalogArtifactId: dossier.evidence.catalog.artifactId,\n conformanceArtifactId: dossier.evidence.conformance.artifactId,\n imported: dossier.status === \"ready\",\n reasons: [...dossier.readiness.reasons],\n failedChecks: [...dossier.readiness.failedChecks],\n };\n}\n\nfunction formatMarkdownReport(report: ProviderOnboardingDossierImportReport) {\n const lines = [\n `# ${report.title}`,\n \"\",\n `Status: ${report.status}`,\n `Generated: ${report.generatedAt}`,\n \"\",\n \"## Summary\",\n `- Total dossiers: ${report.summary.totalDossiers}`,\n `- Ready dossiers: ${report.summary.readyDossiers}`,\n `- Failed dossiers: ${report.summary.failedDossiers}`,\n `- Imported dossiers: ${report.summary.importedDossiers}`,\n `- Excluded dossiers: ${report.summary.excludedDossiers}`,\n `- Catalog entries: ${report.summary.totalEntries}`,\n `- Providers: ${formatInlineList(report.summary.providers)}`,\n `- Capabilities: ${formatInlineList(report.summary.capabilities)}`,\n `- Policy status: ${report.summary.policyStatus ?? \"not_run\"}`,\n \"\",\n \"## Checks\",\n ...report.checks.map(\n (check) =>\n `- [${check.status === \"passed\" ? \"x\" : \" \"}] ${check.name}: ${check.message}`,\n ),\n \"\",\n \"## Dossiers\",\n ...report.dossiers.map(\n (dossier) =>\n `- ${dossier.dossierId}: ${dossier.status} / ${dossier.providerId} / ${\n dossier.imported ? \"imported\" : \"excluded\"\n }`,\n ),\n ];\n\n if (report.policyEvaluation) {\n lines.push(\n \"\",\n \"## Policy\",\n `- Status: ${report.policyEvaluation.status}`,\n `- Routeable matches: ${report.policyEvaluation.summary.routeableMatches}`,\n `- Missing adapter matches: ${report.policyEvaluation.summary.missingAdapterMatches}`,\n );\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction sanitizeReport<T>(value: T, forbiddenOutputValues: string[]): 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 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 formatValidationErrors(\n errors: { path: string; message: string }[],\n) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n\nfunction formatFailedChecks(checks: ProviderOnboardingDossierImportCheck[]) {\n const failedChecks = checks.filter((check) => check.status === \"failed\");\n\n if (failedChecks.length === 0) {\n return \"unknown dossier import failure.\";\n }\n\n return failedChecks\n .map((check) => `${check.name}: ${check.message}`)\n .join(\"; \");\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n assertProviderCatalogArtifact,\n type ProviderCatalogArtifact,\n} from \"../providerCatalogArtifact\";\nimport {\n assertProviderConformanceArtifact,\n type ProviderConformanceArtifact,\n} from \"../providerConformanceArtifact\";\nimport {\n createProviderOnboardingDossier,\n formatProviderOnboardingDossier,\n} from \"../providerOnboardingDossier\";\nimport type {\n ProviderOnboardingDossier,\n ProviderOnboardingDossierFormat,\n ProviderOnboardingDossierOptions,\n} from \"../providerOnboardingDossier\";\n\nexport interface ProviderOnboardingDossierCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProviderOnboardingDossierCliOutputs {\n json?: string;\n markdown?: string;\n}\n\nexport interface ProviderOnboardingDossierCliDossier\n extends Omit<\n ProviderOnboardingDossierOptions,\n \"catalogArtifact\" | \"conformanceArtifact\"\n > {\n format?: ProviderOnboardingDossierFormat;\n title?: string;\n}\n\nexport interface ProviderOnboardingDossierCliConfig {\n catalogArtifact?: ProviderCatalogArtifact;\n catalogArtifactFile?: string;\n conformanceArtifact?: ProviderConformanceArtifact;\n conformanceArtifactFile?: string;\n dossier?: ProviderOnboardingDossierCliDossier;\n outputs?: ProviderOnboardingDossierCliOutputs;\n}\n\nexport type ProviderOnboardingDossierCliConfigExport =\n | ProviderOnboardingDossierCliConfig\n | ProviderOnboardingDossierCliSkip;\n\nexport type ProviderOnboardingDossierCliConfigFactory = (\n context: ProviderOnboardingDossierCliConfigContext,\n) =>\n | ProviderOnboardingDossierCliConfigExport\n | Promise<ProviderOnboardingDossierCliConfigExport>;\n\nexport interface ProviderOnboardingDossierCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProviderOnboardingDossierCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProviderOnboardingDossierCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProviderOnboardingDossierCliSkip;\n dossier?: ProviderOnboardingDossier;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProviderOnboardingDossierCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProviderOnboardingDossierFormat;\n outJson?: string;\n outMarkdown?: string;\n dossierId?: string;\n generatedAt?: string;\n title?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-dossier --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--dossier-id <text>] [--generated-at <iso>] [--title <text>]\";\n\nexport async function runProviderOnboardingDossierCli(\n options: ProviderOnboardingDossierCliOptions = {},\n): Promise<ProviderOnboardingDossierCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `provider onboarding dossier skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const catalogArtifact = await resolveCatalogArtifact(configExport, cwd);\n const conformanceArtifact = await resolveConformanceArtifact(\n configExport,\n cwd,\n );\n const dossier = createProviderOnboardingDossier({\n catalogArtifact,\n conformanceArtifact,\n dossierId: parsedArgs.dossierId ?? configExport.dossier?.dossierId,\n generatedAt: parsedArgs.generatedAt ?? configExport.dossier?.generatedAt,\n forbiddenOutputValues: configExport.dossier?.forbiddenOutputValues,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.dossier?.format ?? \"markdown\";\n const title = parsedArgs.title ?? configExport.dossier?.title;\n const stdout = formatProviderOnboardingDossier(dossier, {\n format: selectedFormat,\n title,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n dossier,\n title,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n },\n });\n\n return {\n exitCode: dossier.status === \"ready\" ? 0 : 1,\n skipped: false,\n dossier,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error\n ? error.message\n : \"Unknown provider onboarding dossier CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--dossier-id\") {\n parsedArgs.dossierId = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--generated-at\") {\n parsedArgs.generatedAt = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--title\") {\n parsedArgs.title = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProviderOnboardingDossierCliConfigContext,\n): Promise<ProviderOnboardingDossierCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProviderOnboardingDossierCliConfigFactory)(context);\n }\n\n return configExport as ProviderOnboardingDossierCliConfigExport;\n}\n\nfunction isCliSkip(value: unknown): value is ProviderOnboardingDossierCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProviderOnboardingDossierCliSkip>).skip === true &&\n typeof (value as Partial<ProviderOnboardingDossierCliSkip>).reason ===\n \"string\"\n );\n}\n\nfunction assertCliConfig(\n config: unknown,\n): asserts config is ProviderOnboardingDossierCliConfig {\n if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n throw new Error(\"Provider onboarding dossier CLI config must be an object.\");\n }\n\n const candidate = config as Partial<ProviderOnboardingDossierCliConfig>;\n\n if (\n candidate.catalogArtifact !== undefined &&\n candidate.catalogArtifactFile !== undefined\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI config may not provide both catalogArtifact and catalogArtifactFile.\",\n );\n }\n\n if (\n candidate.conformanceArtifact !== undefined &&\n candidate.conformanceArtifactFile !== undefined\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI config may not provide both conformanceArtifact and conformanceArtifactFile.\",\n );\n }\n\n if (\n candidate.catalogArtifact === undefined &&\n candidate.catalogArtifactFile === undefined\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI config requires catalogArtifact or catalogArtifactFile.\",\n );\n }\n\n if (\n candidate.conformanceArtifact === undefined &&\n candidate.conformanceArtifactFile === undefined\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI config requires conformanceArtifact or conformanceArtifactFile.\",\n );\n }\n\n if (\n candidate.catalogArtifactFile !== undefined &&\n typeof candidate.catalogArtifactFile !== \"string\"\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI catalogArtifactFile must be a string.\",\n );\n }\n\n if (\n candidate.conformanceArtifactFile !== undefined &&\n typeof candidate.conformanceArtifactFile !== \"string\"\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI conformanceArtifactFile must be a string.\",\n );\n }\n\n if (candidate.dossier !== undefined && !isRecord(candidate.dossier)) {\n throw new Error(\"Provider onboarding dossier CLI dossier config must be an object.\");\n }\n\n if (candidate.outputs !== undefined) {\n assertOutputs(candidate.outputs);\n }\n}\n\nfunction assertOutputs(outputs: unknown) {\n if (!isRecord(outputs)) {\n throw new Error(\"Provider onboarding dossier CLI outputs must be an object.\");\n }\n\n for (const [key, value] of Object.entries(outputs)) {\n if (\n ![\"json\", \"markdown\"].includes(key) ||\n (value !== undefined && typeof value !== \"string\")\n ) {\n throw new Error(\n \"Provider onboarding dossier CLI outputs may only include json and markdown string paths.\",\n );\n }\n }\n}\n\nasync function resolveCatalogArtifact(\n config: ProviderOnboardingDossierCliConfig,\n cwd: string,\n) {\n if (config.catalogArtifact !== undefined) {\n assertProviderCatalogArtifact(config.catalogArtifact);\n return config.catalogArtifact;\n }\n\n const artifact = JSON.parse(\n await readFile(resolve(cwd, config.catalogArtifactFile!), \"utf8\"),\n );\n assertProviderCatalogArtifact(artifact);\n return artifact;\n}\n\nasync function resolveConformanceArtifact(\n config: ProviderOnboardingDossierCliConfig,\n cwd: string,\n) {\n if (config.conformanceArtifact !== undefined) {\n assertProviderConformanceArtifact(config.conformanceArtifact);\n return config.conformanceArtifact;\n }\n\n const artifact = JSON.parse(\n await readFile(resolve(cwd, config.conformanceArtifactFile!), \"utf8\"),\n );\n assertProviderConformanceArtifact(artifact);\n return artifact;\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n dossier: ProviderOnboardingDossier;\n title?: string;\n outputs: ProviderOnboardingDossierCliOutputs;\n}) {\n const artifactPaths: ProviderOnboardingDossierCliOutputs = {};\n\n if (options.outputs.json) {\n const path = resolve(options.cwd, options.outputs.json);\n await writeTextFile(\n path,\n formatProviderOnboardingDossier(options.dossier, {\n format: \"json\",\n title: options.title,\n }),\n );\n artifactPaths.json = path;\n }\n\n if (options.outputs.markdown) {\n const path = resolve(options.cwd, options.outputs.markdown);\n await writeTextFile(\n path,\n formatProviderOnboardingDossier(options.dossier, {\n format: \"markdown\",\n title: options.title,\n }),\n );\n artifactPaths.markdown = path;\n }\n\n return artifactPaths;\n}\n\nasync function writeTextFile(path: string, body: string) {\n await mkdir(dirname(path), {\n recursive: true,\n });\n await writeFile(path, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): ProviderOnboardingDossierCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `Provider onboarding dossier CLI failed: ${message}\\n${USAGE}\\n`,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { mkdir, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\n\nimport {\n listProbeMeshIntegrationTemplates,\n renderProbeMeshIntegrationTemplate,\n} from \"../integrationTemplates\";\nimport type {\n ProbeMeshIntegrationTemplateFile,\n ProbeMeshIntegrationTemplateId,\n ProbeMeshIntegrationTemplateRenderResult,\n} from \"../integrationTemplates\";\n\nexport interface ProbeMeshInitCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProbeMeshInitCliResult {\n exitCode: 0 | 2;\n listed: boolean;\n dryRun: boolean;\n stdout: string;\n stderr?: string;\n templateId?: ProbeMeshIntegrationTemplateId | string;\n outDir?: string;\n files?: ProbeMeshIntegrationTemplateFile[];\n}\n\ninterface ParsedCliArgs {\n list?: boolean;\n templateId?: string;\n outDir?: string;\n packageName?: string;\n force?: boolean;\n dryRun?: boolean;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-init [--list] [--template <id> --out-dir <path>] [--package-name <name>] [--force] [--dry-run]\";\n\nexport async function runProbeMeshInitCli(\n options: ProbeMeshInitCliOptions = {},\n): Promise<ProbeMeshInitCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return cliSuccess({\n listed: true,\n dryRun: false,\n stdout: `${USAGE}\\n`,\n });\n }\n\n if (parsedArgs.list) {\n return cliSuccess({\n listed: true,\n dryRun: false,\n stdout: formatTemplateList(),\n });\n }\n\n if (!parsedArgs.templateId) {\n return cliFailure(\"--template <id> is required unless --list is used.\");\n }\n\n if (!parsedArgs.outDir) {\n return cliFailure(\"--out-dir <path> is required when generating a template.\");\n }\n\n const rendered = renderProbeMeshIntegrationTemplate({\n templateId: parsedArgs.templateId,\n packageName: parsedArgs.packageName,\n });\n const outDir = resolve(cwd, parsedArgs.outDir);\n const plannedFiles = rendered.files.map((file) => ({\n ...file,\n path: file.path,\n }));\n\n await assertSafeTargets({\n outDir,\n files: plannedFiles,\n force: parsedArgs.force === true,\n });\n\n if (!parsedArgs.dryRun) {\n await writeRenderedTemplate({\n outDir,\n rendered,\n });\n }\n\n return cliSuccess({\n listed: false,\n dryRun: parsedArgs.dryRun === true,\n templateId: rendered.template.id,\n outDir,\n files: plannedFiles,\n stdout: formatGenerationResult({\n rendered,\n outDir,\n dryRun: parsedArgs.dryRun === true,\n }),\n });\n } catch (error) {\n return cliFailure(\n error instanceof Error ? error.message : \"Unknown probemesh-init failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--list\") {\n parsedArgs.list = true;\n continue;\n }\n\n if (arg === \"--template\") {\n parsedArgs.templateId = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-dir\") {\n parsedArgs.outDir = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--package-name\") {\n parsedArgs.packageName = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--force\") {\n parsedArgs.force = true;\n continue;\n }\n\n if (arg === \"--dry-run\") {\n parsedArgs.dryRun = true;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nfunction formatTemplateList() {\n const templates = listProbeMeshIntegrationTemplates();\n const lines = [\n \"Available ProbeMesh integration templates:\",\n ...templates.map(\n (template) =>\n `- ${template.id}: ${template.name} - ${template.description}`,\n ),\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction formatGenerationResult(options: {\n rendered: ProbeMeshIntegrationTemplateRenderResult;\n outDir: string;\n dryRun: boolean;\n}) {\n const prefix = options.dryRun ? \"Dry run: would generate\" : \"Generated\";\n const lines = [\n `${prefix} ${options.rendered.template.id} in ${options.outDir}`,\n `Package: ${options.rendered.packageName}`,\n ...options.rendered.files.map((file) => `- ${file.path}`),\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nasync function assertSafeTargets(options: {\n outDir: string;\n files: ProbeMeshIntegrationTemplateFile[];\n force: boolean;\n}) {\n const collisions: string[] = [];\n\n for (const file of options.files) {\n const target = resolveTemplateTarget(options.outDir, file.path);\n\n if (options.force) {\n continue;\n }\n\n if (await pathExists(target)) {\n collisions.push(file.path);\n }\n }\n\n if (collisions.length > 0) {\n throw new Error(\n [\n \"Refusing to overwrite existing template files without --force.\",\n `Existing files: ${collisions.join(\", \")}`,\n ].join(\" \"),\n );\n }\n}\n\nasync function writeRenderedTemplate(options: {\n outDir: string;\n rendered: ProbeMeshIntegrationTemplateRenderResult;\n}) {\n for (const file of options.rendered.files) {\n const target = resolveTemplateTarget(options.outDir, file.path);\n await mkdir(dirname(target), {\n recursive: true,\n });\n await writeFile(target, file.content, \"utf8\");\n }\n}\n\nfunction resolveTemplateTarget(outDir: string, filePath: string) {\n const target = resolve(outDir, filePath);\n const relativeTarget = relative(outDir, target);\n\n if (relativeTarget.startsWith(\"..\") || isAbsolute(relativeTarget)) {\n throw new Error(`Template file path escapes output directory: ${filePath}`);\n }\n\n return target;\n}\n\nasync function pathExists(path: string) {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n\n throw error;\n }\n}\n\nfunction cliSuccess(\n result: Omit<ProbeMeshInitCliResult, \"exitCode\">,\n): ProbeMeshInitCliResult {\n return {\n exitCode: 0,\n ...result,\n };\n}\n\nfunction cliFailure(message: string): ProbeMeshInitCliResult {\n return {\n exitCode: 2,\n listed: false,\n dryRun: false,\n stdout: \"\",\n stderr: `${message}\\n${USAGE}\\n`,\n };\n}\n","import { ProbeMeshError } from \"./errors\";\n\nexport type ProbeMeshIntegrationTemplateId =\n | \"provider-x402-sandbox\"\n | \"buyer-hosted-router\"\n | \"catalog-policy-ci\"\n | \"audit-trail-export\";\n\nexport interface ProbeMeshIntegrationTemplateFile {\n path: string;\n content: string;\n executable?: boolean;\n}\n\nexport interface ProbeMeshIntegrationTemplate {\n id: ProbeMeshIntegrationTemplateId;\n name: string;\n description: string;\n files: ProbeMeshIntegrationTemplateFile[];\n}\n\nexport interface ProbeMeshIntegrationTemplateRenderOptions {\n templateId: ProbeMeshIntegrationTemplateId | string;\n packageName?: string;\n sdkVersion?: string;\n}\n\nexport interface ProbeMeshIntegrationTemplateRenderResult {\n template: ProbeMeshIntegrationTemplate;\n packageName: string;\n files: ProbeMeshIntegrationTemplateFile[];\n}\n\nconst DEFAULT_SDK_VERSION = \"^0.1.0\";\n\nconst TEMPLATE_ORDER: ProbeMeshIntegrationTemplateId[] = [\n \"provider-x402-sandbox\",\n \"buyer-hosted-router\",\n \"catalog-policy-ci\",\n \"audit-trail-export\",\n];\n\nconst TEMPLATE_PACKAGE_NAMES: Record<ProbeMeshIntegrationTemplateId, string> = {\n \"provider-x402-sandbox\": \"probemesh-provider-x402-sandbox\",\n \"buyer-hosted-router\": \"probemesh-buyer-hosted-router\",\n \"catalog-policy-ci\": \"probemesh-catalog-policy-ci\",\n \"audit-trail-export\": \"probemesh-audit-trail-export\",\n};\n\nconst TEMPLATE_REGISTRY: ProbeMeshIntegrationTemplate[] = [\n {\n id: \"provider-x402-sandbox\",\n name: \"Provider x402 Sandbox\",\n description:\n \"Manifest-backed provider starter with the x402 sandbox protocol and an acceptance config.\",\n files: createProviderX402SandboxFiles(),\n },\n {\n id: \"buyer-hosted-router\",\n name: \"Buyer Hosted Router\",\n description:\n \"Hosted buyer starter with paid provider routing, payment strategy, catalog policy, and audit collection.\",\n files: createBuyerHostedRouterFiles(),\n },\n {\n id: \"catalog-policy-ci\",\n name: \"Catalog Policy CI\",\n description:\n \"CI-friendly catalog policy check starter with machine-readable reports.\",\n files: createCatalogPolicyCiFiles(),\n },\n {\n id: \"audit-trail-export\",\n name: \"Audit Trail Export\",\n description:\n \"Local audit artifact collection and audit trail export starter.\",\n files: createAuditTrailExportFiles(),\n },\n];\n\nexport function listProbeMeshIntegrationTemplates() {\n return TEMPLATE_ORDER.map((id) => cloneTemplate(requireTemplate(id)));\n}\n\nexport function getProbeMeshIntegrationTemplate(\n id: ProbeMeshIntegrationTemplateId | string,\n) {\n return cloneTemplate(requireTemplate(id));\n}\n\nexport function renderProbeMeshIntegrationTemplate(\n options: ProbeMeshIntegrationTemplateRenderOptions,\n): ProbeMeshIntegrationTemplateRenderResult {\n const template = requireTemplate(options.templateId);\n const packageName =\n options.packageName?.trim() ?? TEMPLATE_PACKAGE_NAMES[template.id];\n const sdkVersion = options.sdkVersion?.trim() ?? DEFAULT_SDK_VERSION;\n\n assertValidPackageName(packageName);\n assertNonEmptyString(sdkVersion, \"sdkVersion\");\n\n return {\n template: cloneTemplate(template),\n packageName,\n files: template.files.map((file) => ({\n ...file,\n path: validateRelativeTemplatePath(file.path),\n content: renderTemplateContent(file.content, {\n packageName,\n sdkVersion,\n }),\n })),\n };\n}\n\nfunction requireTemplate(id: ProbeMeshIntegrationTemplateId | string) {\n const template = TEMPLATE_REGISTRY.find((candidate) => candidate.id === id);\n\n if (!template) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Unknown ProbeMesh integration template \"${id}\".`,\n });\n }\n\n return template;\n}\n\nfunction cloneTemplate(template: ProbeMeshIntegrationTemplate) {\n return {\n ...template,\n files: template.files.map((file) => ({ ...file })),\n };\n}\n\nfunction renderTemplateContent(\n content: string,\n values: {\n packageName: string;\n sdkVersion: string;\n },\n) {\n return content\n .replaceAll(\"{{packageName}}\", values.packageName)\n .replaceAll(\"{{sdkVersion}}\", values.sdkVersion);\n}\n\nfunction assertNonEmptyString(value: string, label: string) {\n if (value.trim().length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${label} must be a non-empty string.`,\n });\n }\n}\n\nfunction assertValidPackageName(packageName: string) {\n assertNonEmptyString(packageName, \"packageName\");\n\n if (\n packageName.length > 214 ||\n packageName.startsWith(\".\") ||\n packageName.startsWith(\"_\") ||\n packageName.includes(\" \") ||\n !/^(?:@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*$/.test(packageName)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid packageName \"${packageName}\".`,\n });\n }\n}\n\nfunction validateRelativeTemplatePath(path: string) {\n assertNonEmptyString(path, \"template file path\");\n\n if (\n path.startsWith(\"/\") ||\n path.startsWith(\"\\\\\") ||\n path.includes(\"..\") ||\n path.split(/[\\\\/]/).some((segment) => segment.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid template file path \"${path}\".`,\n });\n }\n\n return path;\n}\n\nfunction createProviderX402SandboxFiles(): ProbeMeshIntegrationTemplateFile[] {\n return [\n templateFile(\n \"package.json\",\n [\n \"{\",\n ' \"name\": \"{{packageName}}\",',\n ' \"private\": true,',\n ' \"type\": \"module\",',\n ' \"engines\": {',\n ' \"node\": \">=20.12.0\"',\n \" },\",\n ' \"packageManager\": \"pnpm@10.33.0\",',\n ' \"scripts\": {',\n ' \"dev\": \"tsx src/index.ts\",',\n ' \"accept:x402\": \"probemesh-x402-accept --config x402-acceptance.config.mjs\",',\n ' \"conformance:provider\": \"probemesh-conformance --config provider-conformance.config.mjs\",',\n ' \"dossier:provider\": \"probemesh-dossier --config provider-dossier.config.mjs\"',\n \" },\",\n ' \"dependencies\": {',\n ' \"@probemesh/sdk\": \"{{sdkVersion}}\"',\n \" },\",\n ' \"devDependencies\": {',\n ' \"tsx\": \"^4.15.7\",',\n ' \"typescript\": \"^5.4.5\"',\n \" }\",\n \"}\",\n ],\n ),\n templateFile(\n \"README.md\",\n [\n \"# {{packageName}}\",\n \"\",\n \"Manifest-backed ProbeMesh provider starter using the local x402 sandbox protocol.\",\n \"\",\n \"## Run\",\n \"\",\n \"```sh\",\n \"pnpm install\",\n \"pnpm dev\",\n \"pnpm accept:x402\",\n \"pnpm conformance:provider\",\n \"pnpm dossier:provider\",\n \"```\",\n \"\",\n \"`pnpm accept:x402` writes a JSON report, Markdown report, and provider catalog artifact under `artifacts/`.\",\n \"\",\n \"`pnpm conformance:provider` writes a JSON report, Markdown report, and provider conformance artifact under `artifacts/`.\",\n \"\",\n \"`pnpm dossier:provider` bundles the catalog and conformance artifacts into one provider onboarding dossier under `artifacts/`.\",\n \"\",\n \"The x402 sandbox emits deterministic payment headers and receipts. It does not use a real wallet, facilitator, settlement network, or live funds.\",\n ],\n ),\n templateFile(\n \"src/index.ts\",\n [\n 'import {',\n \" createAdapterFromManifest,\",\n \" createProbeMesh,\",\n \" createX402SandboxProtocol,\",\n \" hasReceipt,\",\n '} from \"@probemesh/sdk\";',\n \"\",\n \"const providerId = \\\"starter-x402-provider\\\";\",\n \"const manifest = {\",\n \" id: providerId,\",\n \" displayName: \\\"Starter x402 Provider\\\",\",\n \" capabilities: [\\\"price-lookup\\\"],\",\n \" protocolMode: \\\"x402\\\",\",\n \" paymentOptions: [\",\n \" {\",\n \" id: \\\"x402-sandbox-usdc\\\",\",\n \" protocolMode: \\\"x402\\\",\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" receiptTypes: [\\\"payment_proof\\\", \\\"settlement_confirmation\\\", \\\"provider_delivery\\\"],\",\n \" },\",\n \" ],\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" inputSchema: { type: \\\"object\\\" },\",\n \" outputSchema: { type: \\\"object\\\" },\",\n \" receipts: { payment: true, delivery: true, responseEvidence: false },\",\n \"} as const;\",\n \"\",\n \"const adapter = createAdapterFromManifest(\",\n \" manifest,\",\n \" {\",\n \" \\\"price-lookup\\\": (_request, context) => ({\",\n \" data: { symbol: \\\"BTC\\\", currency: \\\"USD\\\", price: 64000, paidWith: context.paymentSelection?.protocolMode },\",\n \" receiptRefs: [\",\n \" {\",\n \" type: \\\"provider_delivery\\\",\",\n \" provider: providerId,\",\n \" status: \\\"recorded\\\",\",\n \" ref: context.callId + \\\":provider_delivery\\\",\",\n \" timestamp: context.startedAt.toISOString(),\",\n \" },\",\n \" ],\",\n \" }),\",\n \" },\",\n \" {\",\n \" protocolAdapters: [createX402SandboxProtocol({ providerId })],\",\n \" },\",\n \");\",\n \"\",\n \"const probemesh = createProbeMesh({ adapters: [adapter] });\",\n \"const response = await probemesh.call({\",\n \" capability: \\\"price-lookup\\\",\",\n \" input: { symbol: \\\"BTC\\\", currency: \\\"USD\\\" },\",\n \" constraints: { maxCostUsd: 0.02, requireReceipt: true },\",\n \" paymentPreferences: { allowedProtocols: [\\\"x402\\\"] },\",\n \" paymentStrategy: { mode: \\\"receipt_coverage\\\" },\",\n \" idempotencyKey: \\\"starter-x402-call\\\",\",\n \"});\",\n \"\",\n \"console.log(JSON.stringify({\",\n \" status: response.status,\",\n \" provider: response.provider.id,\",\n \" protocol: response.route?.paymentSelection?.protocolMode,\",\n \" hasPaymentProof: hasReceipt(response, \\\"payment_proof\\\"),\",\n \" hasSettlement: hasReceipt(response, \\\"settlement_confirmation\\\"),\",\n \" hasDelivery: hasReceipt(response, \\\"provider_delivery\\\"),\",\n \" safety: response.safety,\",\n \"}, null, 2));\",\n ],\n ),\n templateFile(\n \"x402-acceptance.config.mjs\",\n [\n 'import { createAdapterFromManifest, createX402SandboxProtocol } from \"@probemesh/sdk\";',\n \"\",\n \"const providerId = \\\"starter-x402-provider\\\";\",\n \"const manifest = {\",\n \" id: providerId,\",\n \" displayName: \\\"Starter x402 Provider\\\",\",\n \" capabilities: [\\\"price-lookup\\\"],\",\n \" protocolMode: \\\"x402\\\",\",\n \" paymentOptions: [\",\n \" {\",\n \" id: \\\"x402-sandbox-usdc\\\",\",\n \" protocolMode: \\\"x402\\\",\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" receiptTypes: [\\\"payment_proof\\\", \\\"settlement_confirmation\\\", \\\"provider_delivery\\\"],\",\n \" },\",\n \" ],\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" inputSchema: { type: \\\"object\\\" },\",\n \" outputSchema: { type: \\\"object\\\" },\",\n \" receipts: { payment: true, delivery: true, responseEvidence: false },\",\n \"};\",\n \"\",\n \"const adapter = createAdapterFromManifest(\",\n \" manifest,\",\n \" {\",\n \" \\\"price-lookup\\\": (_request, context) => ({\",\n \" data: { symbol: \\\"BTC\\\", currency: \\\"USD\\\", price: 64000 },\",\n \" receiptRefs: [\",\n \" {\",\n \" type: \\\"provider_delivery\\\",\",\n \" provider: providerId,\",\n \" status: \\\"recorded\\\",\",\n \" ref: context.callId + \\\":provider_delivery\\\",\",\n \" timestamp: context.startedAt.toISOString(),\",\n \" },\",\n \" ],\",\n \" }),\",\n \" },\",\n \" { protocolAdapters: [createX402SandboxProtocol({ providerId })] },\",\n \");\",\n \"\",\n \"export default {\",\n \" acceptance: {\",\n \" adapters: [adapter],\",\n \" request: {\",\n \" capability: \\\"price-lookup\\\",\",\n \" input: { symbol: \\\"BTC\\\", currency: \\\"USD\\\" },\",\n \" constraints: { maxCostUsd: 0.02, requireReceipt: true },\",\n \" paymentPreferences: { allowedProtocols: [\\\"x402\\\"] },\",\n \" idempotencyKey: \\\"starter-x402-acceptance\\\",\",\n \" },\",\n \" expectedProviderId: providerId,\",\n \" requiredReceiptTypes: [\\\"payment_proof\\\", \\\"settlement_confirmation\\\", \\\"provider_delivery\\\"],\",\n \" },\",\n \" catalog: { manifest, artifactId: providerId + \\\":x402-sandbox\\\" },\",\n \" report: { title: \\\"Starter x402 sandbox acceptance\\\" },\",\n \" outputs: {\",\n \" json: \\\"artifacts/x402-acceptance-report.json\\\",\",\n \" markdown: \\\"artifacts/x402-acceptance-report.md\\\",\",\n \" catalog: \\\"artifacts/provider-catalog-artifact.json\\\",\",\n \" },\",\n \"};\",\n ],\n ),\n templateFile(\n \"provider-conformance.config.mjs\",\n [\n 'import { createAdapterFromManifest, createX402SandboxProtocol } from \"@probemesh/sdk\";',\n \"\",\n \"const providerId = \\\"starter-x402-provider\\\";\",\n \"const requiredReceiptTypes = [\\\"payment_proof\\\", \\\"settlement_confirmation\\\", \\\"provider_delivery\\\"];\",\n \"const manifest = {\",\n \" id: providerId,\",\n \" displayName: \\\"Starter x402 Provider\\\",\",\n \" capabilities: [\\\"price-lookup\\\"],\",\n \" protocolMode: \\\"x402\\\",\",\n \" paymentOptions: [\",\n \" {\",\n \" id: \\\"x402-sandbox-usdc\\\",\",\n \" protocolMode: \\\"x402\\\",\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" receiptTypes: requiredReceiptTypes,\",\n \" },\",\n \" ],\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" inputSchema: {\",\n \" type: \\\"object\\\",\",\n \" required: [\\\"symbol\\\", \\\"currency\\\"],\",\n \" properties: {\",\n \" symbol: { type: \\\"string\\\" },\",\n \" currency: { type: \\\"string\\\" },\",\n \" },\",\n \" additionalProperties: true,\",\n \" },\",\n \" outputSchema: {\",\n \" type: \\\"object\\\",\",\n \" required: [\\\"symbol\\\", \\\"currency\\\", \\\"price\\\"],\",\n \" properties: {\",\n \" symbol: { type: \\\"string\\\" },\",\n \" currency: { type: \\\"string\\\" },\",\n \" price: { type: \\\"number\\\" },\",\n \" paidWith: { type: \\\"string\\\" },\",\n \" },\",\n \" additionalProperties: true,\",\n \" },\",\n \" receipts: { payment: true, delivery: true, responseEvidence: false },\",\n \"};\",\n \"\",\n \"const adapter = createAdapterFromManifest(\",\n \" manifest,\",\n \" {\",\n \" \\\"price-lookup\\\": (_request, context) => ({\",\n \" data: { symbol: \\\"BTC\\\", currency: \\\"USD\\\", price: 64000, paidWith: context.paymentSelection?.protocolMode },\",\n \" receiptRefs: [\",\n \" {\",\n \" type: \\\"provider_delivery\\\",\",\n \" provider: providerId,\",\n \" status: \\\"recorded\\\",\",\n \" ref: context.callId + \\\":provider_delivery\\\",\",\n \" timestamp: context.startedAt.toISOString(),\",\n \" },\",\n \" ],\",\n \" }),\",\n \" },\",\n \" { protocolAdapters: [createX402SandboxProtocol({ providerId })] },\",\n \");\",\n \"\",\n \"export default {\",\n \" conformance: {\",\n \" manifest,\",\n \" adapters: [adapter],\",\n \" request: {\",\n \" capability: \\\"price-lookup\\\",\",\n \" input: { symbol: \\\"BTC\\\", currency: \\\"USD\\\" },\",\n \" constraints: { maxCostUsd: 0.02, requireReceipt: true },\",\n \" paymentPreferences: { allowedProtocols: [\\\"x402\\\"], requiredReceiptTypes },\",\n \" paymentStrategy: { mode: \\\"receipt_coverage\\\", preferredReceiptTypes: requiredReceiptTypes },\",\n \" idempotencyKey: \\\"starter-x402-conformance\\\",\",\n \" },\",\n \" expectedProviderId: providerId,\",\n \" requiredReceiptTypes,\",\n \" schemaValidation: { input: true, output: true },\",\n \" },\",\n \" report: { title: \\\"Starter x402 sandbox conformance\\\", format: \\\"markdown\\\" },\",\n \" artifact: { artifactId: providerId + \\\":x402-sandbox-conformance\\\" },\",\n \" outputs: {\",\n \" json: \\\"artifacts/provider-conformance-report.json\\\",\",\n \" markdown: \\\"artifacts/provider-conformance-report.md\\\",\",\n \" artifact: \\\"artifacts/provider-conformance-artifact.json\\\",\",\n \" },\",\n \"};\",\n ],\n ),\n templateFile(\n \"provider-dossier.config.mjs\",\n [\n \"export default {\",\n \" catalogArtifactFile: \\\"artifacts/provider-catalog-artifact.json\\\",\",\n \" conformanceArtifactFile: \\\"artifacts/provider-conformance-artifact.json\\\",\",\n \" dossier: {\",\n \" dossierId: \\\"starter-x402-provider:onboarding-dossier\\\",\",\n \" title: \\\"Starter x402 provider onboarding dossier\\\",\",\n \" format: \\\"markdown\\\",\",\n \" },\",\n \" outputs: {\",\n \" json: \\\"artifacts/provider-onboarding-dossier.json\\\",\",\n \" markdown: \\\"artifacts/provider-onboarding-dossier.md\\\",\",\n \" },\",\n \"};\",\n ],\n ),\n ];\n}\n\nfunction createBuyerHostedRouterFiles(): ProbeMeshIntegrationTemplateFile[] {\n return [\n templateFile(\n \"package.json\",\n [\n \"{\",\n ' \"name\": \"{{packageName}}\",',\n ' \"private\": true,',\n ' \"type\": \"module\",',\n ' \"engines\": {',\n ' \"node\": \">=20.12.0\"',\n \" },\",\n ' \"packageManager\": \"pnpm@10.33.0\",',\n ' \"scripts\": {',\n ' \"dev\": \"tsx src/index.ts\"',\n \" },\",\n ' \"dependencies\": {',\n ' \"@probemesh/sdk\": \"{{sdkVersion}}\"',\n \" },\",\n ' \"devDependencies\": {',\n ' \"tsx\": \"^4.15.7\",',\n ' \"typescript\": \"^5.4.5\"',\n \" }\",\n \"}\",\n ],\n ),\n templateFile(\n \"README.md\",\n [\n \"# {{packageName}}\",\n \"\",\n \"Hosted buyer starter with a paid provider, payment strategy, catalog policy, and audit collector.\",\n \"\",\n \"## Run\",\n \"\",\n \"```sh\",\n \"pnpm install\",\n \"pnpm dev\",\n \"```\",\n \"\",\n \"Everything runs locally. The payment protocol is mock-only and intended for integration testing.\",\n ],\n ),\n templateFile(\n \"src/index.ts\",\n [\n 'import {',\n \" createPaidPriceLookupProvider,\",\n \" createProbeMesh,\",\n \" createProbeMeshAuditTrailCollector,\",\n \" createProviderCatalog,\",\n \" createProviderCatalogArtifact,\",\n \" startHostedRouter,\",\n \" summarizeProbeMeshAuditTrailBundle,\",\n '} from \"@probemesh/sdk\";',\n \"\",\n \"const apiKey = \\\"local-dev-api-key\\\";\",\n \"const providerId = \\\"paid-price-provider\\\";\",\n \"const receiptTypes = [\\\"payment_proof\\\", \\\"provider_delivery\\\"] as const;\",\n \"const manifest = {\",\n \" id: providerId,\",\n \" displayName: \\\"Paid Price Lookup Provider\\\",\",\n \" capabilities: [\\\"price-lookup\\\"],\",\n \" protocolMode: \\\"mock-payment\\\",\",\n \" paymentOptions: [\",\n \" {\",\n \" id: \\\"mock-payment-standard\\\",\",\n \" protocolMode: \\\"mock-payment\\\",\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" receiptTypes: [...receiptTypes],\",\n \" },\",\n \" ],\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" inputSchema: { type: \\\"object\\\" },\",\n \" outputSchema: { type: \\\"object\\\" },\",\n \" receipts: { payment: true, delivery: true, responseEvidence: false },\",\n \"} as const;\",\n \"\",\n \"const acceptanceReport = {\",\n \" title: \\\"Starter paid provider acceptance\\\",\",\n \" status: \\\"passed\\\",\",\n \" gate: { accepted: true, status: \\\"accepted\\\", requiredCheckNames: [], failedRequiredCheckNames: [], reasons: [\\\"local starter\\\"] },\",\n \" summary: {\",\n \" status: \\\"passed\\\", totalChecks: 1, passedChecks: 1, failedChecks: 0, failedCheckNames: [],\",\n \" providerId, receiptTypes: [...receiptTypes], requiredReceiptTypes: [...receiptTypes],\",\n \" timelineEventTypes: [\\\"call.completed\\\"], telemetryEventTypes: [\\\"call.completed\\\"],\",\n \" safety: { paymentStatus: \\\"authorized\\\", settlementStatus: \\\"settled\\\", deliveryStatus: \\\"delivered\\\", moneyMayHaveMoved: true },\",\n \" retrySafety: { retryable: false, safeToAutoRetry: false, reason: \\\"completed\\\" },\",\n \" },\",\n \" checks: [],\",\n \" receipts: {\",\n \" total: 2, types: [...receiptTypes], providers: [providerId],\",\n \" byType: { payment_proof: 1, provider_delivery: 1 },\",\n \" hasPaymentProof: true, hasSettlementConfirmation: false, hasProviderDelivery: true,\",\n \" },\",\n \" timelineEventTypes: [\\\"call.completed\\\"],\",\n \" telemetryEventTypes: [\\\"call.completed\\\"],\",\n \" safety: { paymentStatus: \\\"authorized\\\", settlementStatus: \\\"settled\\\", deliveryStatus: \\\"delivered\\\", moneyMayHaveMoved: true },\",\n \" retrySafety: { retryable: false, safeToAutoRetry: false, reason: \\\"completed\\\" },\",\n \"} as const;\",\n \"\",\n \"const catalog = createProviderCatalog({\",\n \" artifacts: [\",\n \" createProviderCatalogArtifact({\",\n \" manifest,\",\n \" acceptanceReport,\",\n \" artifactId: providerId + \\\":mock-payment\\\",\",\n \" generatedAt: \\\"2026-05-15T00:00:00.000Z\\\",\",\n \" }),\",\n \" ],\",\n \"});\",\n \"\",\n \"const collector = createProbeMeshAuditTrailCollector();\",\n \"const router = await startHostedRouter({\",\n \" port: 0,\",\n \" apiKeys: [apiKey],\",\n \" adapters: [createPaidPriceLookupProvider()],\",\n \" catalogPolicy: {\",\n \" catalog,\",\n \" requiredReceiptTypes: [...receiptTypes],\",\n \" maxCostUsd: 0.02,\",\n \" },\",\n \" auditArtifacts: { enabled: true, onArtifact: collector.onArtifact },\",\n \"});\",\n \"\",\n \"try {\",\n \" const probemesh = createProbeMesh({ hosted: { baseUrl: router.url, apiKey } });\",\n \" const response = await probemesh.call({\",\n \" capability: \\\"price-lookup\\\",\",\n \" input: { symbol: \\\"ETH\\\", currency: \\\"USD\\\" },\",\n \" constraints: { maxCostUsd: 0.02, requireReceipt: true },\",\n \" paymentPreferences: { allowedProtocols: [\\\"mock-payment\\\"] },\",\n \" paymentStrategy: { mode: \\\"lowest_cost\\\" },\",\n \" idempotencyKey: \\\"buyer-hosted-router-demo\\\",\",\n \" });\",\n \" const bundle = collector.createBundle({ bundleId: \\\"buyer-hosted-router-audit\\\" });\",\n \" console.log(JSON.stringify({\",\n \" status: response.status,\",\n \" provider: response.provider.id,\",\n \" route: response.route,\",\n \" safety: response.safety,\",\n \" auditSummary: summarizeProbeMeshAuditTrailBundle(bundle),\",\n \" }, null, 2));\",\n \"} finally {\",\n \" await router.close();\",\n \"}\",\n ],\n ),\n ];\n}\n\nfunction createCatalogPolicyCiFiles(): ProbeMeshIntegrationTemplateFile[] {\n return [\n templateFile(\n \"package.json\",\n [\n \"{\",\n ' \"name\": \"{{packageName}}\",',\n ' \"private\": true,',\n ' \"type\": \"module\",',\n ' \"engines\": {',\n ' \"node\": \">=20.12.0\"',\n \" },\",\n ' \"packageManager\": \"pnpm@10.33.0\",',\n ' \"scripts\": {',\n ' \"check:catalog\": \"probemesh-catalog-check --config catalog-policy.config.mjs --format markdown --out-json artifacts/catalog-policy.json --out-md artifacts/catalog-policy.md --out-bundle artifacts/catalog-policy-bundle.json\"',\n \" },\",\n ' \"dependencies\": {',\n ' \"@probemesh/sdk\": \"{{sdkVersion}}\"',\n \" }\",\n \"}\",\n ],\n ),\n templateFile(\n \"README.md\",\n [\n \"# {{packageName}}\",\n \"\",\n \"CI starter for validating a buyer-side ProbeMesh provider catalog and router policy.\",\n \"\",\n \"## Run\",\n \"\",\n \"```sh\",\n \"pnpm install\",\n \"pnpm check:catalog\",\n \"```\",\n \"\",\n \"The generated artifacts are safe to store in CI because they contain metadata and hashes, not secrets or executable adapters.\",\n ],\n ),\n templateFile(\n \"catalog-policy.config.mjs\",\n [\n 'import { createProviderCatalogArtifact } from \"@probemesh/sdk\";',\n \"\",\n \"const providerId = \\\"catalog-ready-price-provider\\\";\",\n \"const receiptTypes = [\\\"payment_proof\\\", \\\"provider_delivery\\\"];\",\n \"const manifest = {\",\n \" id: providerId,\",\n \" displayName: \\\"Catalog Ready Price Provider\\\",\",\n \" capabilities: [\\\"price-lookup\\\"],\",\n \" protocolMode: \\\"mock-payment\\\",\",\n \" paymentOptions: [\",\n \" {\",\n \" id: \\\"mock-payment-standard\\\",\",\n \" protocolMode: \\\"mock-payment\\\",\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" receiptTypes,\",\n \" },\",\n \" ],\",\n \" pricing: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" inputSchema: { type: \\\"object\\\" },\",\n \" outputSchema: { type: \\\"object\\\" },\",\n \" receipts: { payment: true, delivery: true, responseEvidence: false },\",\n \"};\",\n \"const acceptanceReport = {\",\n \" title: \\\"Catalog ready provider\\\",\",\n \" status: \\\"passed\\\",\",\n \" gate: { accepted: true, status: \\\"accepted\\\", requiredCheckNames: [], failedRequiredCheckNames: [], reasons: [\\\"starter fixture\\\"] },\",\n \" summary: { status: \\\"passed\\\", totalChecks: 1, passedChecks: 1, failedChecks: 0, failedCheckNames: [], providerId, receiptTypes, requiredReceiptTypes: receiptTypes, timelineEventTypes: [\\\"call.completed\\\"], telemetryEventTypes: [\\\"call.completed\\\"] },\",\n \" checks: [],\",\n \" receipts: { total: 2, types: receiptTypes, providers: [providerId], byType: { payment_proof: 1, provider_delivery: 1 }, hasPaymentProof: true, hasSettlementConfirmation: false, hasProviderDelivery: true },\",\n \" timelineEventTypes: [\\\"call.completed\\\"],\",\n \" telemetryEventTypes: [\\\"call.completed\\\"],\",\n \"};\",\n \"\",\n \"export default {\",\n \" artifacts: [createProviderCatalogArtifact({ manifest, acceptanceReport, artifactId: providerId + \\\":mock-payment\\\" })],\",\n \" catalogPolicy: { status: \\\"ready\\\", maxCostUsd: 0.02, requiredReceiptTypes: receiptTypes },\",\n \" adapterInventory: [{ id: providerId, capabilities: [\\\"price-lookup\\\"], pricing: manifest.pricing }],\",\n \" queries: [\",\n \" {\",\n \" capability: \\\"price-lookup\\\",\",\n \" minMatches: 1,\",\n \" paymentPreferences: { allowedProtocols: [\\\"mock-payment\\\"], requiredReceiptTypes: receiptTypes },\",\n \" paymentStrategy: { mode: \\\"lowest_cost\\\" },\",\n \" },\",\n \" ],\",\n \" report: { title: \\\"Starter catalog policy check\\\" },\",\n \" bundle: { bundleId: \\\"starter-catalog-policy-bundle\\\" },\",\n \"};\",\n ],\n ),\n ];\n}\n\nfunction createAuditTrailExportFiles(): ProbeMeshIntegrationTemplateFile[] {\n return [\n templateFile(\n \"package.json\",\n [\n \"{\",\n ' \"name\": \"{{packageName}}\",',\n ' \"private\": true,',\n ' \"type\": \"module\",',\n ' \"engines\": {',\n ' \"node\": \">=20.12.0\"',\n \" },\",\n ' \"packageManager\": \"pnpm@10.33.0\",',\n ' \"scripts\": {',\n ' \"dev\": \"tsx src/index.ts\",',\n ' \"export:audit-trail\": \"probemesh-audit-trail-export --config audit-trail.config.mjs --format markdown --out-json artifacts/audit-trail.json --out-md artifacts/audit-trail.md\"',\n \" },\",\n ' \"dependencies\": {',\n ' \"@probemesh/sdk\": \"{{sdkVersion}}\"',\n \" },\",\n ' \"devDependencies\": {',\n ' \"tsx\": \"^4.15.7\",',\n ' \"typescript\": \"^5.4.5\"',\n \" }\",\n \"}\",\n ],\n ),\n templateFile(\n \"README.md\",\n [\n \"# {{packageName}}\",\n \"\",\n \"Starter for collecting safe ProbeMesh call audit artifacts and exporting a local audit trail bundle.\",\n \"\",\n \"## Run\",\n \"\",\n \"```sh\",\n \"pnpm install\",\n \"pnpm dev\",\n \"pnpm export:audit-trail\",\n \"```\",\n \"\",\n \"Audit artifacts include route, receipts, safety, retry decisions, and hashes. Raw request input and secrets are not stored.\",\n ],\n ),\n templateFile(\n \"src/index.ts\",\n [\n 'import {',\n \" createPaidPriceLookupProvider,\",\n \" createProbeMesh,\",\n \" createProbeMeshAuditTrailCollector,\",\n \" formatProbeMeshAuditTrailBundle,\",\n \" startHostedRouter,\",\n '} from \"@probemesh/sdk\";',\n \"\",\n \"const apiKey = \\\"local-audit-api-key\\\";\",\n \"const collector = createProbeMeshAuditTrailCollector();\",\n \"const router = await startHostedRouter({\",\n \" port: 0,\",\n \" apiKeys: [apiKey],\",\n \" adapters: [createPaidPriceLookupProvider()],\",\n \" auditArtifacts: { enabled: true, onArtifact: collector.onArtifact },\",\n \"});\",\n \"\",\n \"try {\",\n \" const probemesh = createProbeMesh({ hosted: { baseUrl: router.url, apiKey } });\",\n \" await probemesh.call({\",\n \" capability: \\\"price-lookup\\\",\",\n \" input: { symbol: \\\"SOL\\\", currency: \\\"USD\\\" },\",\n \" constraints: { maxCostUsd: 0.02, requireReceipt: true },\",\n \" paymentPreferences: { allowedProtocols: [\\\"mock-payment\\\"] },\",\n \" idempotencyKey: \\\"audit-trail-starter-call\\\",\",\n \" });\",\n \" const bundle = collector.createBundle({ bundleId: \\\"audit-trail-starter-bundle\\\" });\",\n \" console.log(formatProbeMeshAuditTrailBundle(bundle, { format: \\\"markdown\\\" }));\",\n \"} finally {\",\n \" await router.close();\",\n \"}\",\n ],\n ),\n templateFile(\n \"audit-trail.config.mjs\",\n [\n 'import { createProbeMeshCallAuditArtifact } from \"@probemesh/sdk\";',\n \"\",\n \"const generatedAt = \\\"2026-05-15T00:00:00.000Z\\\";\",\n \"const response = {\",\n \" callId: \\\"starter-audit-call\\\",\",\n \" capability: \\\"price-lookup\\\",\",\n \" data: { symbol: \\\"ETH\\\", currency: \\\"USD\\\", price: 3200 },\",\n \" provider: { id: \\\"starter-audit-provider\\\", displayName: \\\"Starter Audit Provider\\\", mode: \\\"hosted\\\" },\",\n \" cost: { unit: \\\"call\\\", amountUsd: 0.01, currency: \\\"USD\\\" },\",\n \" latencyMs: 4,\",\n \" receiptRefs: [{ type: \\\"provider_delivery\\\", provider: \\\"starter-audit-provider\\\", status: \\\"recorded\\\", ref: \\\"starter-audit-call:delivery\\\", timestamp: generatedAt }],\",\n \" retrySafety: { retryable: false, safeToAutoRetry: false, reason: \\\"completed\\\" },\",\n \" status: \\\"completed\\\",\",\n \"};\",\n \"\",\n \"export default {\",\n \" artifacts: [\",\n \" createProbeMeshCallAuditArtifact({\",\n \" request: { capability: \\\"price-lookup\\\", input: { symbol: \\\"ETH\\\" }, idempotencyKey: \\\"starter-audit-call\\\" },\",\n \" response,\",\n \" generatedAt,\",\n \" }),\",\n \" ],\",\n \" bundle: { bundleId: \\\"starter-audit-trail\\\", generatedAt },\",\n \"};\",\n ],\n ),\n ];\n}\n\nfunction templateFile(path: string, lines: string[]): ProbeMeshIntegrationTemplateFile {\n return {\n path,\n content: `${lines.join(\"\\n\")}\\n`,\n };\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n} from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\nimport type { ProbeMeshCallSafety } from \"../types\";\n\nexport type ApiKeyPlacement = \"header\" | \"authorization\";\n\nexport type ApiKeyResolver =\n | (() => string | undefined)\n | (() => Promise<string | undefined>);\n\nexport interface ApiKeyProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n apiKey?: string;\n resolveApiKey?: ApiKeyResolver;\n placement?: ApiKeyPlacement;\n headerName?: string;\n authorizationScheme?: string;\n}\n\nconst DEFAULT_MODE = \"api-key\";\nconst DEFAULT_HEADER_NAME = \"x-api-key\";\nconst DEFAULT_AUTHORIZATION_HEADER = \"authorization\";\nconst DEFAULT_AUTHORIZATION_SCHEME = \"Bearer\";\n\nexport function createApiKeyProtocol(\n options: ApiKeyProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertApiKeyProtocolOptions(options);\n\n const mode = options.mode ?? DEFAULT_MODE;\n\n return {\n mode,\n async prepare({ manifest, request, context }) {\n if (options.providerId && options.providerId !== manifest.id) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `API key protocol is configured for provider \"${options.providerId}\", but manifest \"${manifest.id}\" was used.`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const apiKey = await resolveApiKey(options);\n\n if (!apiKey) {\n throw new ProbeMeshError({\n code: \"unauthorized\",\n message: `API key is required for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const placement = options.placement ?? \"header\";\n const headerName = headerNameForPlacement(options, placement);\n const headers = {\n [headerName]: headerValueForPlacement(options, placement, apiKey),\n };\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n credentialPresent: true,\n placement,\n headerName,\n providerId: manifest.id,\n },\n receiptRefs: [\n {\n type: \"authorization_decision\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:api_key_authorized`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: noPaymentPreparationSafety(),\n };\n\n Object.defineProperty(preparation, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n return preparation;\n },\n };\n}\n\nfunction assertApiKeyProtocolOptions(options: ApiKeyProtocolOptions) {\n if (\n options.providerId !== undefined &&\n (typeof options.providerId !== \"string\" || options.providerId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol providerId must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.apiKey !== undefined &&\n (typeof options.apiKey !== \"string\" || options.apiKey.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol apiKey must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.resolveApiKey !== undefined &&\n typeof options.resolveApiKey !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol resolveApiKey must be a function when provided.\",\n });\n }\n\n if (\n options.placement !== undefined &&\n options.placement !== \"header\" &&\n options.placement !== \"authorization\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol placement must be \\\"header\\\" or \\\"authorization\\\".\",\n });\n }\n\n if (\n options.headerName !== undefined &&\n (typeof options.headerName !== \"string\" || options.headerName.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol headerName must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.authorizationScheme !== undefined &&\n (typeof options.authorizationScheme !== \"string\" ||\n options.authorizationScheme.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"API key protocol authorizationScheme must be a non-empty string when provided.\",\n });\n }\n}\n\nasync function resolveApiKey(options: ApiKeyProtocolOptions) {\n return options.apiKey ?? (await options.resolveApiKey?.());\n}\n\nfunction headerNameForPlacement(\n options: ApiKeyProtocolOptions,\n placement: ApiKeyPlacement,\n) {\n if (placement === \"authorization\") {\n return options.headerName ?? DEFAULT_AUTHORIZATION_HEADER;\n }\n\n return options.headerName ?? DEFAULT_HEADER_NAME;\n}\n\nfunction headerValueForPlacement(\n options: ApiKeyProtocolOptions,\n placement: ApiKeyPlacement,\n apiKey: string,\n) {\n if (placement === \"authorization\") {\n return `${options.authorizationScheme ?? DEFAULT_AUTHORIZATION_SCHEME} ${apiKey}`;\n }\n\n return apiKey;\n}\n\nfunction noPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n\nfunction noPaymentPreparationSafety(): Partial<ProbeMeshCallSafety> {\n return {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n","import { x402Client } from \"@x402/core/client\";\nimport type { Network } from \"@x402/core/types\";\nimport {\n registerExactEvmScheme,\n type ExactEvmSchemeOptions,\n} from \"@x402/evm/exact/client\";\nimport {\n getDefaultAsset,\n toClientEvmSigner,\n type ClientEvmSigner,\n} from \"@x402/evm\";\nimport { createPublicClient, http, type PrivateKeyAccount } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { ProbeMeshError } from \"../errors\";\nimport type {\n X402Facilitator,\n X402FacilitatorSettleResult,\n X402FacilitatorVerifyResult,\n X402Signer,\n} from \"./x402Protocol\";\n\nexport type X402EvmPrivateKey = `0x${string}`;\nexport type X402EvmAddress = `0x${string}`;\nexport type X402EvmClientSigner = ClientEvmSigner;\n\nexport interface X402EvmNetworkConfig {\n network?: Network;\n networks?: Network[];\n rpcUrl?: string;\n schemeOptions?: ExactEvmSchemeOptions;\n}\n\nexport interface X402EvmSignerMetadata {\n signer: \"evm\";\n scheme: \"exact\";\n address: X402EvmAddress;\n networks: Network[];\n rpcConfigured: boolean;\n}\n\nexport interface X402EvmSignerOptions extends X402EvmNetworkConfig {\n privateKey?: X402EvmPrivateKey;\n signer?: X402EvmClientSigner | PrivateKeyAccount;\n}\n\nexport interface X402HttpFacilitatorAuthHeaders {\n verify: Record<string, string>;\n settle: Record<string, string>;\n supported: Record<string, string>;\n bazaar?: Record<string, string>;\n}\n\nexport type X402HttpFacilitatorAuthHeaderResolver =\n () => X402HttpFacilitatorAuthHeaders | Promise<X402HttpFacilitatorAuthHeaders>;\n\nexport interface X402HttpFacilitatorOptions {\n url?: string;\n createAuthHeaders?: X402HttpFacilitatorAuthHeaderResolver;\n timeoutMs?: number;\n}\n\nexport type X402EvmTestnetEnv = Record<string, string | undefined>;\n\nexport interface X402EvmTestnetConfigOptions {\n env?: X402EvmTestnetEnv;\n defaultNetwork?: Network;\n defaultAmount?: string;\n defaultFacilitatorUrl?: string;\n}\n\nexport interface X402EvmTestnetConfig {\n privateKey: X402EvmPrivateKey;\n network: Network;\n rpcUrl?: string;\n facilitatorUrl: string;\n amount: string;\n asset: X402EvmAddress;\n payTo: X402EvmAddress;\n assetMetadata: {\n name: string;\n version: string;\n };\n}\n\nexport interface X402EvmTestnetConfigSummary {\n network: Network;\n rpcConfigured: boolean;\n facilitatorUrl: string;\n amount: string;\n asset: X402EvmAddress;\n payTo: X402EvmAddress;\n assetMetadata: {\n name: string;\n version: string;\n };\n privateKeyConfigured: boolean;\n}\n\nexport interface X402EvmTestnetConfigSkip {\n reason: string;\n missingEnv: string[];\n requiredEnv: string[];\n optionalEnv: string[];\n defaults: {\n network: Network;\n amount: string;\n facilitatorUrl: string;\n };\n}\n\nexport type X402EvmTestnetConfigResult =\n | {\n ok: true;\n config: X402EvmTestnetConfig;\n summary: X402EvmTestnetConfigSummary;\n }\n | {\n ok: false;\n skip: X402EvmTestnetConfigSkip;\n };\n\nconst DEFAULT_NETWORK: Network = \"eip155:84532\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_FACILITATOR_URL = \"https://x402.org/facilitator\";\nconst REQUIRED_TESTNET_ENV = [\n \"PROBEMESH_X402_EVM_PRIVATE_KEY\",\n \"PROBEMESH_X402_PAY_TO\",\n \"PROBEMESH_X402_ASSET\",\n];\nconst OPTIONAL_TESTNET_ENV = [\n \"PROBEMESH_X402_FACILITATOR_URL\",\n \"PROBEMESH_X402_RPC_URL\",\n \"PROBEMESH_X402_NETWORK\",\n \"PROBEMESH_X402_AMOUNT\",\n \"PROBEMESH_X402_ASSET_NAME\",\n \"PROBEMESH_X402_ASSET_VERSION\",\n];\n\nexport function resolveX402EvmTestnetConfig(\n options: X402EvmTestnetConfigOptions = {},\n): X402EvmTestnetConfigResult {\n assertTestnetConfigOptions(options);\n\n const env = options.env ?? process.env;\n const defaultNetwork = options.defaultNetwork ?? DEFAULT_NETWORK;\n const defaultAmount = options.defaultAmount ?? DEFAULT_AMOUNT;\n const defaultFacilitatorUrl =\n options.defaultFacilitatorUrl ?? DEFAULT_FACILITATOR_URL;\n const missingEnv = REQUIRED_TESTNET_ENV.filter((name) => !env[name]);\n\n if (missingEnv.length > 0) {\n return {\n ok: false,\n skip: {\n reason: \"Missing opt-in live x402 EVM environment variables.\",\n missingEnv,\n requiredEnv: [...REQUIRED_TESTNET_ENV],\n optionalEnv: [...OPTIONAL_TESTNET_ENV],\n defaults: {\n network: defaultNetwork,\n amount: defaultAmount,\n facilitatorUrl: defaultFacilitatorUrl,\n },\n },\n };\n }\n\n const network = requireEvmNetwork(\n env.PROBEMESH_X402_NETWORK ?? defaultNetwork,\n \"PROBEMESH_X402_NETWORK\",\n );\n const amount = requirePositiveIntegerString(\n env.PROBEMESH_X402_AMOUNT ?? defaultAmount,\n \"PROBEMESH_X402_AMOUNT\",\n );\n const facilitatorUrl = requireHttpUrl(\n env.PROBEMESH_X402_FACILITATOR_URL ?? defaultFacilitatorUrl,\n \"PROBEMESH_X402_FACILITATOR_URL\",\n );\n const rpcUrl = env.PROBEMESH_X402_RPC_URL\n ? requireHttpUrl(env.PROBEMESH_X402_RPC_URL, \"PROBEMESH_X402_RPC_URL\")\n : undefined;\n const privateKey = requirePrivateKey(\n env.PROBEMESH_X402_EVM_PRIVATE_KEY,\n \"PROBEMESH_X402_EVM_PRIVATE_KEY\",\n );\n const asset = requireEvmAddress(\n env.PROBEMESH_X402_ASSET,\n \"PROBEMESH_X402_ASSET\",\n );\n const payTo = requireEvmAddress(\n env.PROBEMESH_X402_PAY_TO,\n \"PROBEMESH_X402_PAY_TO\",\n );\n const assetMetadata = resolveTestnetAssetMetadata({\n network,\n asset,\n env,\n });\n const config: X402EvmTestnetConfig = {\n privateKey,\n network,\n rpcUrl,\n facilitatorUrl,\n amount,\n asset,\n payTo,\n assetMetadata,\n };\n\n return {\n ok: true,\n config,\n summary: {\n network,\n rpcConfigured: typeof rpcUrl === \"string\",\n facilitatorUrl,\n amount,\n asset,\n payTo,\n assetMetadata,\n privateKeyConfigured: true,\n },\n };\n}\n\nexport function createX402EvmSigner(\n options: X402EvmSignerOptions = {},\n): X402Signer {\n assertX402EvmSignerOptions(options);\n\n const signer = resolveClientEvmSigner(options);\n const networks = resolveNetworks(options);\n const client = new x402Client();\n\n registerExactEvmScheme(client, {\n signer,\n networks,\n schemeOptions: options.schemeOptions,\n });\n\n return async (input) => {\n try {\n const paymentPayload = await client.createPaymentPayload(\n input.paymentRequired,\n );\n\n return {\n paymentPayload,\n payer: signer.address,\n metadata: {\n signer: \"evm\",\n scheme: \"exact\",\n address: signer.address,\n networks,\n rpcConfigured: typeof options.rpcUrl === \"string\",\n } satisfies X402EvmSignerMetadata,\n };\n } catch (error) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 EVM signer failed to create a payment payload for provider \"${input.providerId}\".`,\n capability: input.capability,\n provider: input.providerId,\n callId: input.callId,\n safety: {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n },\n cause: error,\n });\n }\n };\n}\n\nexport function createX402HttpFacilitator(\n options: X402HttpFacilitatorOptions = {},\n): X402Facilitator {\n assertX402HttpFacilitatorOptions(options);\n\n const baseUrl = (options.url ?? DEFAULT_FACILITATOR_URL).replace(/\\/+$/, \"\");\n const timeoutMs = options.timeoutMs;\n\n return {\n async verify(input): Promise<X402FacilitatorVerifyResult> {\n const response = await postFacilitatorJson({\n baseUrl,\n path: \"verify\",\n timeoutMs,\n createAuthHeaders: options.createAuthHeaders,\n body: {\n x402Version: input.paymentPayload.x402Version,\n paymentPayload: input.paymentPayload,\n paymentRequirements: input.paymentRequirements,\n },\n providerId: input.providerId,\n capability: input.capability,\n callId: input.callId,\n unsafeAfterPayment: false,\n });\n\n return response as X402FacilitatorVerifyResult;\n },\n async settle(input): Promise<X402FacilitatorSettleResult> {\n const response = await postFacilitatorJson({\n baseUrl,\n path: \"settle\",\n timeoutMs,\n createAuthHeaders: options.createAuthHeaders,\n body: {\n x402Version: input.paymentPayload.x402Version,\n paymentPayload: input.paymentPayload,\n paymentRequirements: input.paymentRequirements,\n },\n providerId: input.providerId,\n capability: input.capability,\n callId: input.callId,\n unsafeAfterPayment: true,\n });\n\n return response as X402FacilitatorSettleResult;\n },\n };\n}\n\nfunction resolveClientEvmSigner(options: X402EvmSignerOptions) {\n const signer =\n options.signer ??\n (options.privateKey ? privateKeyToAccount(options.privateKey) : undefined);\n\n if (!signer) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer requires either privateKey or signer.\",\n });\n }\n\n if (options.rpcUrl) {\n const publicClient = createPublicClient({\n transport: http(options.rpcUrl),\n });\n\n return toClientEvmSigner(signer, publicClient);\n }\n\n return signer as X402EvmClientSigner;\n}\n\nfunction resolveNetworks(options: X402EvmSignerOptions): Network[] {\n if (options.networks !== undefined) {\n return options.networks;\n }\n\n return [options.network ?? DEFAULT_NETWORK];\n}\n\nfunction assertX402EvmSignerOptions(options: X402EvmSignerOptions) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM signer options must be an object.\",\n });\n }\n\n if (\n options.privateKey !== undefined &&\n (typeof options.privateKey !== \"string\" ||\n !options.privateKey.startsWith(\"0x\") ||\n options.privateKey.length !== 66)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer privateKey must be a 32-byte 0x-prefixed hex string.\",\n });\n }\n\n if (options.signer !== undefined) {\n assertClientSigner(options.signer);\n }\n\n if (options.privateKey !== undefined && options.signer !== undefined) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer accepts either privateKey or signer, not both.\",\n });\n }\n\n if (\n options.network !== undefined &&\n !isValidEvmNetwork(options.network)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer network must use CAIP-2 eip155:<chainId> format.\",\n });\n }\n\n if (\n options.networks !== undefined &&\n (!Array.isArray(options.networks) ||\n options.networks.length === 0 ||\n options.networks.some((network) => !isValidEvmNetwork(network)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer networks must be a non-empty array of CAIP-2 eip155:<chainId> values.\",\n });\n }\n\n if (\n options.network !== undefined &&\n options.networks !== undefined\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer accepts either network or networks, not both.\",\n });\n }\n\n if (\n options.rpcUrl !== undefined &&\n (typeof options.rpcUrl !== \"string\" || options.rpcUrl.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM signer rpcUrl must be a non-empty string when provided.\",\n });\n }\n}\n\nfunction assertX402HttpFacilitatorOptions(\n options: X402HttpFacilitatorOptions,\n) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 HTTP facilitator options must be an object.\",\n });\n }\n\n if (\n options.url !== undefined &&\n (typeof options.url !== \"string\" || options.url.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 HTTP facilitator url must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.createAuthHeaders !== undefined &&\n typeof options.createAuthHeaders !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator createAuthHeaders must be a function when provided.\",\n });\n }\n\n if (\n options.timeoutMs !== undefined &&\n (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator timeoutMs must be a positive number when provided.\",\n });\n }\n}\n\nasync function postFacilitatorJson(options: {\n baseUrl: string;\n path: \"verify\" | \"settle\";\n timeoutMs?: number;\n createAuthHeaders?: X402HttpFacilitatorAuthHeaderResolver;\n body: unknown;\n providerId: string;\n capability: string;\n callId: string;\n unsafeAfterPayment: boolean;\n}) {\n const controller = new AbortController();\n const timeout =\n options.timeoutMs !== undefined\n ? setTimeout(() => controller.abort(), options.timeoutMs)\n : undefined;\n\n try {\n const authHeaders = await resolveFacilitatorAuthHeaders(\n options.createAuthHeaders,\n options.path,\n );\n const response = await fetch(`${options.baseUrl}/${options.path}`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...authHeaders,\n },\n redirect: \"follow\",\n body: JSON.stringify(toJsonSafe(options.body)),\n signal: controller.signal,\n });\n const responseText = await response.text();\n const responseBody = parseFacilitatorJson(\n responseText,\n options.path,\n options.providerId,\n options.capability,\n options.callId,\n options.unsafeAfterPayment,\n );\n\n if (!response.ok && !isFacilitatorLifecycleResult(responseBody)) {\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request failed with HTTP ${response.status}.`,\n });\n }\n\n return responseBody;\n } catch (error) {\n if (error instanceof ProbeMeshError) {\n throw error;\n }\n\n if (isAbortError(error)) {\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request timed out after ${options.timeoutMs}ms.`,\n });\n }\n\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request failed.`,\n });\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nasync function resolveFacilitatorAuthHeaders(\n createAuthHeaders: X402HttpFacilitatorAuthHeaderResolver | undefined,\n path: \"verify\" | \"settle\",\n) {\n if (!createAuthHeaders) {\n return {};\n }\n\n const headers = await createAuthHeaders();\n const selected = headers[path] ?? {};\n\n if (\n !selected ||\n typeof selected !== \"object\" ||\n Array.isArray(selected) ||\n Object.entries(selected).some(\n ([key, value]) =>\n typeof key !== \"string\" ||\n key.length === 0 ||\n typeof value !== \"string\",\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator auth headers must be records of string values.\",\n });\n }\n\n return selected;\n}\n\nfunction parseFacilitatorJson(\n responseText: string,\n path: \"verify\" | \"settle\",\n providerId: string,\n capability: string,\n callId: string,\n unsafeAfterPayment: boolean,\n) {\n try {\n return responseText ? JSON.parse(responseText) : {};\n } catch {\n throw facilitatorRequestError({\n path,\n providerId,\n capability,\n callId,\n unsafeAfterPayment,\n message: `x402 HTTP facilitator ${path} response was not valid JSON.`,\n });\n }\n}\n\nfunction isFacilitatorLifecycleResult(value: unknown) {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (\"isValid\" in value || \"success\" in value)\n );\n}\n\nfunction facilitatorRequestError(options: {\n path: \"verify\" | \"settle\";\n providerId: string;\n capability: string;\n callId: string;\n unsafeAfterPayment: boolean;\n message: string;\n}) {\n return new ProbeMeshError({\n code: \"payment_failed\",\n message: options.message,\n capability: options.capability,\n provider: options.providerId,\n callId: options.callId,\n safety: options.unsafeAfterPayment\n ? {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n }\n : {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n },\n });\n}\n\nfunction toJsonSafe(value: unknown): unknown {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => toJsonSafe(entry));\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, toJsonSafe(entry)]),\n );\n }\n\n return value;\n}\n\nfunction isAbortError(error: unknown) {\n return (\n !!error &&\n typeof error === \"object\" &&\n \"name\" in error &&\n error.name === \"AbortError\"\n );\n}\n\nfunction assertTestnetConfigOptions(options: X402EvmTestnetConfigOptions) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM testnet config options must be an object.\",\n });\n }\n\n if (\n options.env !== undefined &&\n (!options.env || typeof options.env !== \"object\" || Array.isArray(options.env))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM testnet config env must be an object when provided.\",\n });\n }\n\n if (\n options.defaultNetwork !== undefined &&\n !isValidEvmNetwork(options.defaultNetwork)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM testnet defaultNetwork must use CAIP-2 eip155:<chainId> format.\",\n });\n }\n\n if (options.defaultAmount !== undefined) {\n requirePositiveIntegerString(\n options.defaultAmount,\n \"x402 EVM testnet defaultAmount\",\n );\n }\n\n if (options.defaultFacilitatorUrl !== undefined) {\n requireHttpUrl(\n options.defaultFacilitatorUrl,\n \"x402 EVM testnet defaultFacilitatorUrl\",\n );\n }\n}\n\nfunction assertClientSigner(\n signer: X402EvmClientSigner | PrivateKeyAccount,\n) {\n if (\n !signer ||\n typeof signer !== \"object\" ||\n Array.isArray(signer) ||\n typeof signer.address !== \"string\" ||\n !signer.address.startsWith(\"0x\") ||\n typeof signer.signTypedData !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer signer must expose address and signTypedData(...).\",\n });\n }\n}\n\nfunction isValidEvmNetwork(network: unknown): network is Network {\n return (\n typeof network === \"string\" &&\n /^eip155:[1-9][0-9]*$/.test(network)\n );\n}\n\nfunction requireEvmNetwork(value: unknown, field: string): Network {\n if (!isValidEvmNetwork(value)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must use CAIP-2 eip155:<chainId> format.`,\n });\n }\n\n return value;\n}\n\nfunction requirePrivateKey(value: unknown, field: string): X402EvmPrivateKey {\n if (\n typeof value !== \"string\" ||\n !value.startsWith(\"0x\") ||\n value.length !== 66 ||\n !/^0x[0-9a-fA-F]{64}$/.test(value)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a 32-byte 0x-prefixed hex string.`,\n });\n }\n\n return value as X402EvmPrivateKey;\n}\n\nfunction requireEvmAddress(value: unknown, field: string): X402EvmAddress {\n if (\n typeof value !== \"string\" ||\n !/^0x[0-9a-fA-F]{40}$/.test(value)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a 20-byte 0x-prefixed EVM address.`,\n });\n }\n\n return value as X402EvmAddress;\n}\n\nfunction requirePositiveIntegerString(value: unknown, field: string) {\n if (typeof value !== \"string\" || !/^[1-9][0-9]*$/.test(value)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a positive integer string.`,\n });\n }\n\n return value;\n}\n\nfunction requireHttpUrl(value: unknown, field: string) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a non-empty HTTP(S) URL.`,\n });\n }\n\n try {\n const url = new URL(value);\n\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"invalid protocol\");\n }\n } catch {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a valid HTTP(S) URL.`,\n });\n }\n\n return value;\n}\n\nfunction resolveTestnetAssetMetadata(options: {\n network: Network;\n asset: X402EvmAddress;\n env: X402EvmTestnetEnv;\n}) {\n const configuredName = options.env.PROBEMESH_X402_ASSET_NAME;\n const configuredVersion = options.env.PROBEMESH_X402_ASSET_VERSION;\n\n if (configuredName !== undefined && configuredName.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"PROBEMESH_X402_ASSET_NAME must be non-empty when provided.\",\n });\n }\n\n if (configuredVersion !== undefined && configuredVersion.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"PROBEMESH_X402_ASSET_VERSION must be non-empty when provided.\",\n });\n }\n\n if (configuredName && configuredVersion) {\n return {\n name: configuredName,\n version: configuredVersion,\n };\n }\n\n try {\n const defaultAsset = getDefaultAsset(options.network);\n\n if (defaultAsset.address.toLowerCase() === options.asset.toLowerCase()) {\n return {\n name: configuredName ?? defaultAsset.name,\n version: configuredVersion ?? defaultAsset.version,\n };\n }\n } catch {\n // Fall through to common USDC EIP-3009 defaults for custom/local testnets.\n }\n\n return {\n name: configuredName ?? \"USDC\",\n version: configuredVersion ?? \"2\",\n };\n}\n","import {\n decodePaymentRequiredHeader,\n decodePaymentSignatureHeader,\n encodePaymentRequiredHeader,\n encodePaymentResponseHeader,\n encodePaymentSignatureHeader,\n} from \"@x402/core/http\";\nimport type {\n PaymentPayload as CorePaymentPayload,\n PaymentRequired as CorePaymentRequired,\n PaymentRequirements as CorePaymentRequirements,\n ResourceInfo as CoreResourceInfo,\n SettleResponse as CoreSettleResponse,\n VerifyResponse as CoreVerifyResponse,\n} from \"@x402/core/types\";\nimport { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n ProviderProtocolSettlement,\n} from \"../providerKit/protocol\";\nimport type {\n ProviderProtocolMode,\n ProviderManifest,\n} from \"../providerKit/types\";\nimport type {\n ProbeMeshAdapterCallResult,\n ProbeMeshAdapterCallRequest,\n ProbeMeshAdapterContext,\n ProbeMeshCallSafety,\n} from \"../types\";\n\nexport type X402PaymentRequired = CorePaymentRequired;\nexport type X402PaymentRequirements = CorePaymentRequirements;\nexport type X402PaymentPayload = CorePaymentPayload;\nexport type X402ResourceInfo = CoreResourceInfo;\nexport type X402SettlementResponse = CoreSettleResponse;\nexport type X402VerifyResponse = CoreVerifyResponse;\n\nexport interface X402PaymentRequiredConfig {\n x402Version?: number;\n error?: string;\n resource?: string | Partial<X402ResourceInfo>;\n accepts?: X402PaymentRequirements[];\n extensions?: Record<string, unknown>;\n scheme?: string;\n network?: string;\n asset?: string;\n amount?: string;\n payTo?: string;\n maxTimeoutSeconds?: number;\n extra?: Record<string, unknown>;\n}\n\nexport interface X402PaymentRequiredResolverInput {\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n}\n\nexport type X402PaymentRequiredResolver = (\n input: X402PaymentRequiredResolverInput,\n) => X402PaymentRequired | Promise<X402PaymentRequired>;\n\nexport interface X402SignerInput {\n paymentRequired: X402PaymentRequired;\n paymentRequirements: X402PaymentRequirements;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n paymentId: string;\n payer: string;\n}\n\nexport interface X402SignerResult {\n paymentPayload: X402PaymentPayload;\n payer?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type X402Signer = (\n input: X402SignerInput,\n) => X402SignerResult | Promise<X402SignerResult>;\n\nexport interface X402FacilitatorVerifyInput {\n paymentPayload: X402PaymentPayload;\n paymentRequirements: X402PaymentRequirements;\n paymentRequired: X402PaymentRequired;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n}\n\nexport type X402FacilitatorVerifyResult = X402VerifyResponse;\n\nexport interface X402FacilitatorSettleInput {\n paymentPayload: X402PaymentPayload;\n paymentRequirements: X402PaymentRequirements;\n paymentRequired: X402PaymentRequired;\n result: ProbeMeshAdapterCallResult;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n}\n\nexport type X402FacilitatorSettleResult = X402SettlementResponse;\n\nexport interface X402Facilitator {\n verify(\n input: X402FacilitatorVerifyInput,\n ): X402FacilitatorVerifyResult | Promise<X402FacilitatorVerifyResult>;\n settle(\n input: X402FacilitatorSettleInput,\n ): X402FacilitatorSettleResult | Promise<X402FacilitatorSettleResult>;\n}\n\nexport interface X402ProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n payer?: string;\n paymentId?: string;\n paymentRequired?: X402PaymentRequiredConfig;\n resolvePaymentRequired?: X402PaymentRequiredResolver;\n signer?: X402Signer;\n facilitator?: X402Facilitator;\n}\n\nexport interface X402LocalSignerOptions {\n payer?: string;\n paymentId?: string;\n failSign?: boolean;\n payload?: Record<string, unknown>;\n}\n\nexport interface X402LocalFacilitatorOptions {\n payer?: string;\n failVerify?: boolean;\n failSettle?: boolean;\n invalidReason?: string;\n invalidMessage?: string;\n errorReason?: string;\n errorMessage?: string;\n transaction?: string;\n}\n\nconst DEFAULT_MODE = \"x402\";\nconst DEFAULT_PAYER = \"local-x402-agent\";\nconst DEFAULT_NETWORK: X402PaymentRequirements[\"network\"] = \"eip155:84532\";\nconst DEFAULT_ASSET = \"USDC\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_PAY_TO = \"probemesh-local-x402-provider\";\nconst DEFAULT_TIMEOUT_SECONDS = 60;\nconst PAYMENT_REQUIRED_HEADER = \"PAYMENT-REQUIRED\";\nconst PAYMENT_SIGNATURE_HEADER = \"PAYMENT-SIGNATURE\";\nconst PAYMENT_RESPONSE_HEADER = \"PAYMENT-RESPONSE\";\n\nexport function createX402Protocol(\n options: X402ProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertX402ProtocolOptions(options);\n\n const mode = options.mode ?? X402_PROTOCOL_DEFAULT_MODE;\n const signer =\n options.signer ??\n createX402LocalSigner({\n payer: options.payer,\n paymentId: options.paymentId,\n });\n const facilitator = options.facilitator ?? createX402LocalFacilitator();\n\n return {\n mode,\n async prepare({ manifest, request, context }) {\n assertProviderMatches(\n options.providerId,\n manifest.id,\n request.capability,\n context.callId,\n );\n\n const paymentRequired = await resolvePaymentRequired({\n options,\n manifest,\n request,\n context,\n });\n const paymentRequirements = paymentRequired.accepts[0];\n const paymentId = options.paymentId ?? `${context.callId}:x402_payment`;\n const payer = options.payer ?? DEFAULT_PAYER;\n const signerResult = await signer({\n paymentRequired,\n paymentRequirements,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n paymentId,\n payer,\n });\n\n assertSignerResult(signerResult, request.capability, manifest.id, context.callId);\n assertPaymentPayload(\n signerResult.paymentPayload,\n paymentRequirements,\n request.capability,\n manifest.id,\n context.callId,\n );\n\n const verifyResult = await facilitator.verify({\n paymentPayload: signerResult.paymentPayload,\n paymentRequirements,\n paymentRequired,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n });\n assertVerifyResult(\n verifyResult,\n request.capability,\n manifest.id,\n context.callId,\n );\n\n if (!verifyResult.isValid) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n verifyResult.invalidMessage ??\n `x402 facilitator rejected payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: failedPaymentSafety(),\n });\n }\n\n const headers = {\n [PAYMENT_REQUIRED_HEADER]: encodePaymentRequiredHeader(paymentRequired),\n [PAYMENT_SIGNATURE_HEADER]: encodePaymentSignatureHeader(\n signerResult.paymentPayload,\n ),\n };\n const resolvedPayer =\n verifyResult.payer ??\n signerResult.payer ??\n getPayloadString(signerResult.paymentPayload, \"payer\") ??\n payer;\n const paymentAttemptId = `${paymentId}:attempt`;\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n verified: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n payer: resolvedPayer,\n network: paymentRequirements.network,\n asset: paymentRequirements.asset,\n amount: paymentRequirements.amount,\n paymentRequired,\n selectedPaymentRequirements: paymentRequirements,\n verifyResponse: verifyResult,\n signerMetadata: signerResult.metadata,\n paymentRequiredHeader: PAYMENT_REQUIRED_HEADER,\n paymentSignatureHeader: PAYMENT_SIGNATURE_HEADER,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_payment_proof`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(preparation, headers);\n\n return preparation;\n },\n async settle({ manifest, request, context, result, preparation }) {\n assertProviderMatches(\n options.providerId,\n manifest.id,\n request.capability,\n context.callId,\n );\n\n const preparedPayment = decodePreparedPayment(\n preparation,\n request.capability,\n manifest.id,\n context.callId,\n );\n const settleResult = await facilitator.settle({\n ...preparedPayment,\n result,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n });\n assertSettleResult(\n settleResult,\n request.capability,\n manifest.id,\n context.callId,\n );\n const paymentId =\n getPayloadString(preparedPayment.paymentPayload, \"paymentId\") ??\n `${context.callId}:x402_payment`;\n const paymentAttemptId = `${paymentId}:attempt`;\n const hasDeliveryReceipt =\n Array.isArray(result.receiptRefs) &&\n result.receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n\n if (!settleResult.success) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n settleResult.errorMessage ??\n `x402 facilitator failed settlement for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const headers = {\n [PAYMENT_RESPONSE_HEADER]: encodePaymentResponseHeader(settleResult),\n };\n const settlement: ProviderProtocolSettlement = {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n settlementResponse: settleResult,\n paymentResponseHeader: PAYMENT_RESPONSE_HEADER,\n },\n receiptRefs: [\n {\n type: \"settlement_confirmation\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_settlement_confirmed`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"settled\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(settlement, headers);\n\n return settlement;\n },\n };\n}\n\nexport function createX402LocalSigner(\n options: X402LocalSignerOptions = {},\n): X402Signer {\n assertLocalSignerOptions(options);\n\n return (input) => {\n if (options.failSign) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 local signer failed for provider \"${input.providerId}\".`,\n capability: input.capability,\n provider: input.providerId,\n callId: input.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const payer = options.payer ?? input.payer;\n const paymentId = options.paymentId ?? input.paymentId;\n const issuedAt = input.context.startedAt.toISOString();\n const paymentPayload: X402PaymentPayload = {\n x402Version: 2,\n resource: input.paymentRequired.resource,\n accepted: input.paymentRequirements,\n payload: {\n ...(options.payload ?? {}),\n kind: \"probemesh-local-x402-signature\",\n payer,\n provider: input.providerId,\n callId: input.callId,\n paymentId,\n issuedAt,\n signature: `local-x402:${input.providerId}:${input.callId}:${paymentId}`,\n },\n extensions: input.paymentRequired.extensions,\n };\n\n return {\n payer,\n paymentPayload,\n metadata: {\n signer: \"local\",\n paymentId,\n },\n };\n };\n}\n\nexport function createX402LocalFacilitator(\n options: X402LocalFacilitatorOptions = {},\n): X402Facilitator {\n assertLocalFacilitatorOptions(options);\n\n return {\n verify(input) {\n const payer =\n options.payer ??\n getPayloadString(input.paymentPayload, \"payer\") ??\n DEFAULT_PAYER;\n\n if (options.failVerify) {\n return {\n isValid: false,\n invalidReason: options.invalidReason ?? \"local_verify_failed\",\n invalidMessage:\n options.invalidMessage ??\n `x402 local facilitator rejected payment for provider \"${input.providerId}\".`,\n payer,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n },\n };\n }\n\n if (input.paymentPayload.x402Version !== 2) {\n return {\n isValid: false,\n invalidReason: \"unsupported_x402_version\",\n invalidMessage: \"x402 local facilitator only accepts V2 payloads.\",\n payer,\n };\n }\n\n if (\n !paymentRequirementsMatch(\n input.paymentPayload.accepted,\n input.paymentRequirements,\n )\n ) {\n return {\n isValid: false,\n invalidReason: \"requirements_mismatch\",\n invalidMessage:\n \"x402 payment payload does not match the selected payment requirements.\",\n payer,\n };\n }\n\n return {\n isValid: true,\n payer,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n paymentId: getPayloadString(input.paymentPayload, \"paymentId\"),\n },\n };\n },\n settle(input) {\n const payer =\n options.payer ??\n getPayloadString(input.paymentPayload, \"payer\") ??\n DEFAULT_PAYER;\n const transaction =\n options.transaction ?? `${input.callId}:x402_local_settlement`;\n const baseResponse = {\n payer,\n transaction,\n network: input.paymentRequirements.network,\n amount: input.paymentRequirements.amount,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n paymentId: getPayloadString(input.paymentPayload, \"paymentId\"),\n },\n };\n\n if (options.failSettle) {\n return {\n ...baseResponse,\n success: false,\n errorReason: options.errorReason ?? \"local_settle_failed\",\n errorMessage:\n options.errorMessage ??\n `x402 local facilitator failed settlement for provider \"${input.providerId}\".`,\n };\n }\n\n return {\n ...baseResponse,\n success: true,\n };\n },\n };\n}\n\nasync function resolvePaymentRequired(options: {\n options: X402ProtocolOptions;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n}) {\n const defaultPaymentRequired = createDefaultPaymentRequired({\n providerId: options.manifest.id,\n capability: options.request.capability,\n config: options.options.paymentRequired,\n });\n const paymentRequired = options.options.resolvePaymentRequired\n ? await options.options.resolvePaymentRequired({\n manifest: options.manifest,\n request: options.request,\n context: options.context,\n })\n : defaultPaymentRequired;\n\n assertPaymentRequired(paymentRequired);\n\n return paymentRequired;\n}\n\nfunction decodePreparedPayment(\n preparation: ProviderProtocolPreparation | undefined,\n capability: string,\n provider: string,\n callId: string,\n) {\n const paymentRequiredHeader = preparation?.headers?.[PAYMENT_REQUIRED_HEADER];\n const paymentSignatureHeader =\n preparation?.headers?.[PAYMENT_SIGNATURE_HEADER];\n\n if (!paymentRequiredHeader || !paymentSignatureHeader) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 prepared payment headers are missing for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const paymentRequired = decodePaymentRequiredHeader(paymentRequiredHeader);\n const paymentPayload = decodePaymentSignatureHeader(paymentSignatureHeader);\n assertPaymentRequired(paymentRequired);\n assertPaymentPayload(\n paymentPayload,\n paymentPayload.accepted,\n capability,\n provider,\n callId,\n );\n\n return {\n paymentRequired,\n paymentPayload,\n paymentRequirements: paymentPayload.accepted,\n };\n}\n\nfunction assertSignerResult(\n signerResult: X402SignerResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !signerResult ||\n typeof signerResult !== \"object\" ||\n Array.isArray(signerResult)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 signer returned an invalid result for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertPaymentPayload(\n paymentPayload: X402PaymentPayload,\n paymentRequirements: X402PaymentRequirements,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !paymentPayload ||\n typeof paymentPayload !== \"object\" ||\n Array.isArray(paymentPayload)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 signer returned an invalid payment payload for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (paymentPayload.x402Version !== 2) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload x402Version must be 2.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (\n !paymentPayload.accepted ||\n typeof paymentPayload.accepted !== \"object\" ||\n Array.isArray(paymentPayload.accepted)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload accepted requirements must be an object.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (\n !paymentPayload.payload ||\n typeof paymentPayload.payload !== \"object\" ||\n Array.isArray(paymentPayload.payload)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload payload must be an object.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (!paymentRequirementsMatch(paymentPayload.accepted, paymentRequirements)) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n \"x402 payment payload does not match the selected payment requirements.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertVerifyResult(\n verifyResult: X402FacilitatorVerifyResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !verifyResult ||\n typeof verifyResult !== \"object\" ||\n Array.isArray(verifyResult) ||\n typeof verifyResult.isValid !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 facilitator returned an invalid verify response for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertSettleResult(\n settleResult: X402FacilitatorSettleResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !settleResult ||\n typeof settleResult !== \"object\" ||\n Array.isArray(settleResult) ||\n typeof settleResult.success !== \"boolean\" ||\n typeof settleResult.transaction !== \"string\" ||\n settleResult.transaction.length === 0 ||\n typeof settleResult.network !== \"string\" ||\n settleResult.network.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 facilitator returned an invalid settlement response for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n}\n\nfunction createDefaultPaymentRequired(options: {\n providerId: string;\n capability: string;\n config?: X402PaymentRequiredConfig;\n}): X402PaymentRequired {\n const config = options.config ?? {};\n const accepts = config.accepts ?? [\n {\n scheme: config.scheme ?? \"exact\",\n network: normalizeNetwork(config.network ?? DEFAULT_NETWORK),\n asset: config.asset ?? DEFAULT_ASSET,\n amount: config.amount ?? DEFAULT_AMOUNT,\n payTo: config.payTo ?? DEFAULT_PAY_TO,\n maxTimeoutSeconds:\n config.maxTimeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS,\n extra: config.extra ?? {},\n },\n ];\n\n return {\n x402Version: config.x402Version ?? 2,\n error: config.error,\n resource: normalizeResourceInfo(\n config.resource,\n options.providerId,\n options.capability,\n ),\n accepts,\n extensions: config.extensions,\n };\n}\n\nfunction assertPaymentRequired(paymentRequired: X402PaymentRequired) {\n if (\n !paymentRequired ||\n typeof paymentRequired !== \"object\" ||\n Array.isArray(paymentRequired)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired must be an object.\",\n });\n }\n\n if (paymentRequired.x402Version !== 2) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.x402Version must be 2.\",\n });\n }\n\n if (\n !paymentRequired.resource ||\n typeof paymentRequired.resource !== \"object\" ||\n typeof paymentRequired.resource.url !== \"string\" ||\n paymentRequired.resource.url.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.resource.url must be a non-empty string.\",\n });\n }\n\n if (\n !Array.isArray(paymentRequired.accepts) ||\n paymentRequired.accepts.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.accepts must include at least one option.\",\n });\n }\n\n for (const requirements of paymentRequired.accepts) {\n assertPaymentRequirements(requirements);\n }\n}\n\nfunction assertPaymentRequirements(requirements: X402PaymentRequirements) {\n if (!requirements || typeof requirements !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements must be an object.\",\n });\n }\n\n for (const field of [\"scheme\", \"network\", \"asset\", \"amount\", \"payTo\"]) {\n const value = requirements[field as keyof X402PaymentRequirements];\n\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 payment requirements ${field} must be a non-empty string.`,\n });\n }\n }\n\n if (\n typeof requirements.maxTimeoutSeconds !== \"number\" ||\n !Number.isFinite(requirements.maxTimeoutSeconds) ||\n requirements.maxTimeoutSeconds <= 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 payment requirements maxTimeoutSeconds must be a positive number.\",\n });\n }\n\n if (\n !requirements.extra ||\n typeof requirements.extra !== \"object\" ||\n Array.isArray(requirements.extra)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements extra must be an object.\",\n });\n }\n}\n\nfunction assertX402ProtocolOptions(options: X402ProtocolOptions) {\n validateOptionalString(options.mode, \"mode\");\n validateOptionalString(options.providerId, \"providerId\");\n validateOptionalString(options.payer, \"payer\");\n validateOptionalString(options.paymentId, \"paymentId\");\n\n if (\n options.paymentRequired !== undefined &&\n (!options.paymentRequired ||\n typeof options.paymentRequired !== \"object\" ||\n Array.isArray(options.paymentRequired))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired config must be an object when provided.\",\n });\n }\n\n if (\n options.resolvePaymentRequired !== undefined &&\n typeof options.resolvePaymentRequired !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 resolvePaymentRequired must be a function when provided.\",\n });\n }\n\n if (options.signer !== undefined && typeof options.signer !== \"function\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 signer must be a function when provided.\",\n });\n }\n\n if (\n options.facilitator !== undefined &&\n (!options.facilitator ||\n typeof options.facilitator !== \"object\" ||\n typeof options.facilitator.verify !== \"function\" ||\n typeof options.facilitator.settle !== \"function\")\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 facilitator must expose verify(...) and settle(...) functions.\",\n });\n }\n}\n\nfunction assertLocalSignerOptions(options: X402LocalSignerOptions) {\n validateOptionalString(options.payer, \"local signer payer\");\n validateOptionalString(options.paymentId, \"local signer paymentId\");\n\n if (options.failSign !== undefined && typeof options.failSign !== \"boolean\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 local signer failSign must be a boolean when provided.\",\n });\n }\n\n if (\n options.payload !== undefined &&\n (!options.payload ||\n typeof options.payload !== \"object\" ||\n Array.isArray(options.payload))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 local signer payload must be an object when provided.\",\n });\n }\n}\n\nfunction assertLocalFacilitatorOptions(options: X402LocalFacilitatorOptions) {\n validateOptionalString(options.payer, \"local facilitator payer\");\n validateOptionalString(options.invalidReason, \"local facilitator invalidReason\");\n validateOptionalString(options.invalidMessage, \"local facilitator invalidMessage\");\n validateOptionalString(options.errorReason, \"local facilitator errorReason\");\n validateOptionalString(options.errorMessage, \"local facilitator errorMessage\");\n validateOptionalString(options.transaction, \"local facilitator transaction\");\n\n if (\n options.failVerify !== undefined &&\n typeof options.failVerify !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 local facilitator failVerify must be a boolean when provided.\",\n });\n }\n\n if (\n options.failSettle !== undefined &&\n typeof options.failSettle !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 local facilitator failSettle must be a boolean when provided.\",\n });\n }\n}\n\nfunction normalizeResourceInfo(\n resource: string | Partial<X402ResourceInfo> | undefined,\n providerId: string,\n capability: string,\n): X402ResourceInfo {\n if (typeof resource === \"string\") {\n return {\n url: resource,\n description: `ProbeMesh x402 payment for ${capability}.`,\n mimeType: \"application/json\",\n serviceName: providerId,\n };\n }\n\n return {\n url: resource?.url ?? `probemesh://${providerId}/${capability}`,\n description:\n resource?.description ?? `ProbeMesh x402 payment for ${capability}.`,\n mimeType: resource?.mimeType ?? \"application/json\",\n serviceName: resource?.serviceName ?? providerId,\n tags: resource?.tags,\n iconUrl: resource?.iconUrl,\n };\n}\n\nfunction normalizeNetwork(network: string): X402PaymentRequirements[\"network\"] {\n if (!network.includes(\":\")) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements network must use CAIP-2 format.\",\n });\n }\n\n return network as X402PaymentRequirements[\"network\"];\n}\n\nfunction defineNonEnumerableHeaders(\n target: ProviderProtocolPreparation | ProviderProtocolSettlement,\n headers: Record<string, string>,\n) {\n Object.defineProperty(target, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n}\n\nfunction assertProviderMatches(\n configuredProviderId: string | undefined,\n manifestProviderId: string,\n capability: string,\n callId: string,\n) {\n if (!configuredProviderId || configuredProviderId === manifestProviderId) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 protocol is configured for provider \"${configuredProviderId}\", but manifest \"${manifestProviderId}\" was used.`,\n capability,\n provider: manifestProviderId,\n callId,\n });\n}\n\nfunction paymentRequirementsMatch(\n left: X402PaymentRequirements,\n right: X402PaymentRequirements,\n) {\n return (\n left.scheme === right.scheme &&\n left.network === right.network &&\n left.asset === right.asset &&\n left.amount === right.amount &&\n left.payTo === right.payTo\n );\n}\n\nfunction getPayloadString(\n paymentPayload: X402PaymentPayload,\n field: string,\n) {\n const value = paymentPayload.payload[field];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction validateOptionalString(value: unknown, field: string) {\n if (\n value !== undefined &&\n (typeof value !== \"string\" || value.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 ${field} must be a non-empty string when provided.`,\n });\n }\n}\n\nfunction noPaymentSafety(): ProbeMeshCallSafety {\n return failedPaymentSafety();\n}\n\nfunction failedPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n\nexport const X402_PROTOCOL_DEFAULT_MODE = DEFAULT_MODE;\n","import type { HostedTelemetryEvent } from \"../hostedRouter\";\nimport { startHostedRouter } from \"../hostedRouter\";\nimport { createProbeMesh } from \"../client\";\nimport { ProbeMeshError, isProbeMeshError } from \"../errors\";\nimport { redactX402Secrets } from \"./x402Redaction\";\nimport type {\n ProbeMeshAdapter,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshCallTimeline,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteDecisionReason,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEventType,\n ReceiptRef,\n ReceiptType,\n} from \"../types\";\n\nexport type X402ProviderAcceptanceStatus = \"passed\" | \"failed\";\n\nexport interface X402ProviderAcceptanceCheck {\n name: string;\n status: X402ProviderAcceptanceStatus;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface X402ProviderAcceptanceOptions<Input = unknown> {\n adapters: ProbeMeshAdapter[];\n request: ProbeMeshCallRequest<Input>;\n apiKey?: string;\n expectedProviderId?: string;\n requiredReceiptTypes?: ReceiptType[];\n forbiddenOutputValues?: string[];\n}\n\nexport interface X402ProviderAcceptanceError {\n name: \"ProbeMeshError\";\n code: ProbeMeshErrorCode;\n message: string;\n status: \"failed\";\n capability?: string;\n provider?: string;\n callId?: string;\n receiptRefs?: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProbeMeshRouteMetadata;\n}\n\nexport interface X402ProviderAcceptanceResult<Data = unknown> {\n status: X402ProviderAcceptanceStatus;\n checks: X402ProviderAcceptanceCheck[];\n response?: ProbeMeshCallResponse<Data>;\n error?: X402ProviderAcceptanceError;\n telemetryEvents: HostedTelemetryEvent[];\n summary: X402ProviderAcceptanceSummary;\n}\n\nexport interface X402ProviderAcceptanceSummary {\n status: X402ProviderAcceptanceStatus;\n totalChecks: number;\n passedChecks: number;\n failedChecks: number;\n failedCheckNames: string[];\n callId?: string;\n providerId?: string;\n errorCode?: ProbeMeshErrorCode;\n receiptTypes: ReceiptType[];\n requiredReceiptTypes: ReceiptType[];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: {\n routeId?: string;\n selectedProviderId?: string;\n fallbackUsed?: boolean;\n fallbackCount?: number;\n stopReason?: ProbeMeshRouteDecisionReason;\n };\n}\n\nexport type X402ProviderAcceptanceGateStatus = \"accepted\" | \"rejected\";\n\nexport interface X402ProviderAcceptanceGateOptions {\n requiredCheckNames?: string[];\n}\n\nexport interface X402ProviderAcceptanceGate {\n accepted: boolean;\n status: X402ProviderAcceptanceGateStatus;\n requiredCheckNames: string[];\n failedRequiredCheckNames: string[];\n reasons: string[];\n}\n\nexport interface X402ProviderAcceptanceReportOptions {\n gate?: X402ProviderAcceptanceGateOptions;\n forbiddenOutputValues?: string[];\n title?: string;\n}\n\nexport type X402ProviderAcceptanceReportFormat = \"json\" | \"markdown\";\n\nexport interface X402ProviderAcceptanceReport {\n title: string;\n status: X402ProviderAcceptanceStatus;\n gate: X402ProviderAcceptanceGate;\n summary: X402ProviderAcceptanceSummary;\n checks: X402ProviderAcceptanceCheck[];\n receipts: {\n total: number;\n types: ReceiptType[];\n providers: string[];\n byType: Partial<Record<ReceiptType, number>>;\n hasPaymentProof: boolean;\n hasSettlementConfirmation: boolean;\n hasProviderDelivery: boolean;\n };\n route?: X402ProviderAcceptanceSummary[\"route\"];\n timelineEventTypes: ProbeMeshTimelineEventType[];\n telemetryEventTypes: ProbeMeshTimelineEventType[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n error?: X402ProviderAcceptanceError;\n}\n\nconst DEFAULT_REQUIRED_RECEIPT_TYPES: ReceiptType[] = [\n \"payment_proof\",\n \"settlement_confirmation\",\n \"provider_delivery\",\n];\n\nexport async function runX402ProviderAcceptance<\n Input = unknown,\n Data = unknown,\n>(\n options: X402ProviderAcceptanceOptions<Input>,\n): Promise<X402ProviderAcceptanceResult<Data>> {\n assertAcceptanceOptions(options);\n\n const telemetryEvents: HostedTelemetryEvent[] = [];\n const requiredReceiptTypes =\n options.requiredReceiptTypes ?? DEFAULT_REQUIRED_RECEIPT_TYPES;\n const hostedRouter = await startHostedRouter({\n port: 0,\n adapters: options.adapters,\n apiKeys: options.apiKey ? [options.apiKey] : undefined,\n onTelemetryEvent(event) {\n telemetryEvents.push(event);\n },\n });\n\n let response: ProbeMeshCallResponse<Data> | undefined;\n let error: X402ProviderAcceptanceError | undefined;\n\n try {\n const probemesh = createProbeMesh({\n hosted: {\n baseUrl: hostedRouter.url,\n apiKey: options.apiKey,\n },\n });\n\n try {\n response = await probemesh.call<Input, Data>(options.request);\n } catch (caught) {\n error = toAcceptanceError(caught);\n }\n } finally {\n await hostedRouter.close();\n }\n\n const baseChecks = createAcceptanceChecks({\n response,\n error,\n telemetryEvents,\n expectedProviderId: options.expectedProviderId,\n requiredReceiptTypes,\n });\n const checks = [\n ...baseChecks,\n createSecretSafeOutputCheck({\n response,\n error,\n telemetryEvents,\n checks: baseChecks,\n requiredReceiptTypes,\n forbiddenOutputValues: options.forbiddenOutputValues ?? [],\n }),\n ];\n const status = checks.every((check) => check.status === \"passed\")\n ? \"passed\"\n : \"failed\";\n const forbiddenOutputValues = options.forbiddenOutputValues ?? [];\n const sanitizedChecks = sanitizeAcceptanceOutput(checks, forbiddenOutputValues);\n const sanitizedResponse = sanitizeAcceptanceOutput(response, forbiddenOutputValues);\n const sanitizedError = sanitizeAcceptanceOutput(error, forbiddenOutputValues);\n const sanitizedTelemetryEvents = sanitizeAcceptanceOutput(\n telemetryEvents,\n forbiddenOutputValues,\n );\n\n return {\n status,\n checks: sanitizedChecks,\n response: sanitizedResponse,\n error: sanitizedError,\n telemetryEvents: sanitizedTelemetryEvents,\n summary: createSummary({\n status,\n checks: sanitizedChecks,\n response: sanitizedResponse,\n error: sanitizedError,\n telemetryEvents: sanitizedTelemetryEvents,\n requiredReceiptTypes,\n }),\n };\n}\n\nexport function summarizeX402AcceptanceResult(\n result: X402ProviderAcceptanceResult,\n): X402ProviderAcceptanceSummary {\n return createSummary({\n status: result.status,\n checks: result.checks,\n response: result.response,\n error: result.error,\n telemetryEvents: result.telemetryEvents,\n requiredReceiptTypes: result.summary.requiredReceiptTypes,\n });\n}\n\nexport function evaluateX402ProviderAcceptanceGate(\n result: X402ProviderAcceptanceResult,\n options: X402ProviderAcceptanceGateOptions = {},\n): X402ProviderAcceptanceGate {\n const requiredCheckNames =\n options.requiredCheckNames ?? result.checks.map((check) => check.name);\n const failedRequiredCheckNames = requiredCheckNames.filter((checkName) => {\n const check = result.checks.find((candidate) => candidate.name === checkName);\n\n return check?.status !== \"passed\";\n });\n const reasons = createGateReasons({\n result,\n requiredCheckNames,\n failedRequiredCheckNames,\n });\n const accepted =\n result.status === \"passed\" && failedRequiredCheckNames.length === 0;\n\n return {\n accepted,\n status: accepted ? \"accepted\" : \"rejected\",\n requiredCheckNames: [...requiredCheckNames],\n failedRequiredCheckNames,\n reasons: accepted\n ? [\"All required x402 provider acceptance checks passed.\"]\n : reasons,\n };\n}\n\nexport function createX402ProviderAcceptanceReport(\n result: X402ProviderAcceptanceResult,\n options: X402ProviderAcceptanceReportOptions = {},\n): X402ProviderAcceptanceReport {\n const summary = summarizeX402AcceptanceResult(result);\n const receiptRefs = result.response?.receiptRefs ?? result.error?.receiptRefs;\n const report: X402ProviderAcceptanceReport = {\n title: options.title ?? \"x402 Provider Acceptance Report\",\n status: result.status,\n gate: evaluateX402ProviderAcceptanceGate(result, options.gate),\n summary,\n checks: result.checks,\n receipts: summarizeAcceptanceReceipts(receiptRefs),\n route: summary.route,\n timelineEventTypes: summary.timelineEventTypes,\n telemetryEventTypes: summary.telemetryEventTypes,\n safety: summary.safety,\n retrySafety: summary.retrySafety,\n error: result.error,\n };\n\n return sanitizeAcceptanceOutput(report, options.forbiddenOutputValues ?? []);\n}\n\nexport function formatX402ProviderAcceptanceReport(\n report: X402ProviderAcceptanceReport,\n options: {\n format?: X402ProviderAcceptanceReportFormat;\n } = {},\n): string {\n const sanitizedReport = sanitizeAcceptanceOutput(report, []);\n\n if ((options.format ?? \"markdown\") === \"json\") {\n return JSON.stringify(sanitizedReport, null, 2);\n }\n\n return formatAcceptanceReportMarkdown(sanitizedReport);\n}\n\nfunction createAcceptanceChecks(options: {\n response?: ProbeMeshCallResponse;\n error?: X402ProviderAcceptanceError;\n telemetryEvents: HostedTelemetryEvent[];\n expectedProviderId?: string;\n requiredReceiptTypes: ReceiptType[];\n}): X402ProviderAcceptanceCheck[] {\n return [\n completedResponseCheck(options.response, options.error),\n selectedProviderCheck(\n options.response,\n options.error,\n options.expectedProviderId,\n ),\n routeMetadataCheck(options.response, options.error),\n timelineEventsCheck(options.response, options.error),\n requiredReceiptsCheck(options.response, options.error, options.requiredReceiptTypes),\n safetySettledDeliveredCheck(options.response, options.error),\n retrySafetyAfterSuccessCheck(options.response, options.error),\n telemetryMatchesTimelineCheck(options.response, options.telemetryEvents),\n ];\n}\n\nfunction createGateReasons(options: {\n result: X402ProviderAcceptanceResult;\n requiredCheckNames: string[];\n failedRequiredCheckNames: string[];\n}) {\n const reasons: string[] = [];\n\n if (options.result.status !== \"passed\") {\n reasons.push(`Acceptance result status is \"${options.result.status}\".`);\n }\n\n for (const checkName of options.failedRequiredCheckNames) {\n const check = options.result.checks.find(\n (candidate) => candidate.name === checkName,\n );\n\n if (!check) {\n reasons.push(`Required check \"${checkName}\" was not found.`);\n continue;\n }\n\n reasons.push(`Required check \"${checkName}\" failed: ${check.message}`);\n }\n\n return reasons;\n}\n\nfunction summarizeAcceptanceReceipts(receiptRefs: ReceiptRef[] | undefined) {\n const receipts = receiptRefs ?? [];\n const byType: Partial<Record<ReceiptType, number>> = {};\n\n for (const receiptRef of receipts) {\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receipts.length,\n types: getReceiptTypes(receipts),\n providers: [\n ...new Set(receipts.map((receiptRef) => receiptRef.provider)),\n ],\n byType,\n hasPaymentProof: receipts.some(\n (receiptRef) => receiptRef.type === \"payment_proof\",\n ),\n hasSettlementConfirmation: receipts.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n ),\n hasProviderDelivery: receipts.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n ),\n };\n}\n\nfunction formatAcceptanceReportMarkdown(\n report: X402ProviderAcceptanceReport,\n) {\n const lines = [\n `# ${report.title}`,\n \"\",\n `Gate: ${report.gate.status}`,\n `Acceptance: ${report.status}`,\n `Provider: ${report.summary.providerId ?? \"unknown\"}`,\n `Call: ${report.summary.callId ?? \"unknown\"}`,\n `Error: ${report.summary.errorCode ?? \"none\"}`,\n \"\",\n \"## Gate Reasons\",\n ...formatList(report.gate.reasons),\n \"\",\n \"## Checks\",\n ...report.checks.map(\n (check) =>\n `- [${check.status === \"passed\" ? \"x\" : \" \"}] ${check.name}: ${check.message}`,\n ),\n \"\",\n \"## Receipts\",\n `- Total: ${report.receipts.total}`,\n `- Types: ${formatInlineList(report.receipts.types)}`,\n `- Providers: ${formatInlineList(report.receipts.providers)}`,\n `- Payment proof: ${String(report.receipts.hasPaymentProof)}`,\n `- Settlement confirmation: ${String(\n report.receipts.hasSettlementConfirmation,\n )}`,\n `- Provider delivery: ${String(report.receipts.hasProviderDelivery)}`,\n \"\",\n \"## Route\",\n `- Route ID: ${report.route?.routeId ?? \"none\"}`,\n `- Selected provider: ${report.route?.selectedProviderId ?? \"none\"}`,\n `- Fallback used: ${String(report.route?.fallbackUsed ?? false)}`,\n `- Stop reason: ${report.route?.stopReason ?? \"none\"}`,\n \"\",\n \"## Safety\",\n `- Payment: ${report.safety?.paymentStatus ?? \"unknown\"}`,\n `- Settlement: ${report.safety?.settlementStatus ?? \"unknown\"}`,\n `- Delivery: ${report.safety?.deliveryStatus ?? \"unknown\"}`,\n `- Money may have moved: ${String(\n report.safety?.moneyMayHaveMoved ?? false,\n )}`,\n \"\",\n \"## Retry Safety\",\n `- Retryable: ${String(report.retrySafety?.retryable ?? false)}`,\n `- Safe to auto retry: ${String(\n report.retrySafety?.safeToAutoRetry ?? false,\n )}`,\n `- Reason: ${report.retrySafety?.reason ?? \"unknown\"}`,\n \"\",\n \"## Timeline\",\n `- Events: ${formatInlineList(report.timelineEventTypes)}`,\n `- Telemetry: ${formatInlineList(report.telemetryEventTypes)}`,\n ];\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction formatList(values: string[]) {\n if (values.length === 0) {\n return [\"- none\"];\n }\n\n return values.map((value) => `- ${value}`);\n}\n\nfunction formatInlineList(values: readonly string[]) {\n return values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction completedResponseCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n) {\n if (response?.status === \"completed\") {\n return pass(\"completed_response\", \"Hosted x402 call completed.\");\n }\n\n return fail(\n \"completed_response\",\n error\n ? `Hosted x402 call failed with ${error.code}.`\n : \"Hosted x402 call did not return a completed response.\",\n {\n errorCode: error?.code,\n errorMessage: error?.message,\n },\n );\n}\n\nfunction selectedProviderCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n expectedProviderId: string | undefined,\n) {\n const providerId = response?.provider.id;\n\n if (\n providerId &&\n (!expectedProviderId || providerId === expectedProviderId)\n ) {\n return pass(\"selected_provider\", \"Hosted route selected the expected provider.\", {\n providerId,\n });\n }\n\n return fail(\"selected_provider\", \"Hosted route did not select the expected provider.\", {\n expectedProviderId,\n providerId,\n errorProvider: error?.provider,\n });\n}\n\nfunction routeMetadataCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n) {\n if (\n response?.route?.mode === \"hosted\" &&\n typeof response.route.routeId === \"string\" &&\n response.route.routeId.length > 0\n ) {\n return pass(\"route_metadata\", \"Hosted route metadata is present.\", {\n routeId: response.route.routeId,\n selectedProviderId: response.route.selectedProviderId,\n });\n }\n\n return fail(\"route_metadata\", \"Hosted route metadata is missing.\", {\n errorRouteId: error?.route?.routeId,\n });\n}\n\nfunction timelineEventsCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n) {\n const timelineEventTypes =\n response?.timeline?.events.map((event) => event.type) ?? [];\n const requiredEvents: ProbeMeshTimelineEventType[] = [\n \"call.requested\",\n \"provider.attempted\",\n \"provider.selected\",\n \"payment.attempted\",\n \"receipt.recorded\",\n \"call.completed\",\n ];\n const missingEvents = requiredEvents.filter(\n (eventType) => !timelineEventTypes.includes(eventType),\n );\n\n if (missingEvents.length === 0) {\n return pass(\"timeline_events\", \"Hosted timeline contains the x402 acceptance events.\", {\n timelineEventTypes,\n });\n }\n\n return fail(\"timeline_events\", \"Hosted timeline is missing required x402 events.\", {\n missingEvents,\n timelineEventTypes,\n errorTimelineEventTypes: error?.timeline?.events.map((event) => event.type),\n });\n}\n\nfunction requiredReceiptsCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n requiredReceiptTypes: ReceiptType[],\n) {\n const receiptTypes = getReceiptTypes(response?.receiptRefs);\n const missingReceiptTypes = requiredReceiptTypes.filter(\n (receiptType) => !receiptTypes.includes(receiptType),\n );\n\n if (missingReceiptTypes.length === 0) {\n return pass(\"required_receipts\", \"Required x402 receipts are present.\", {\n receiptTypes,\n });\n }\n\n return fail(\"required_receipts\", \"Required x402 receipts are missing.\", {\n missingReceiptTypes,\n receiptTypes,\n errorReceiptTypes: getReceiptTypes(error?.receiptRefs),\n });\n}\n\nfunction safetySettledDeliveredCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n) {\n const safety = response?.safety;\n\n if (\n safety?.paymentStatus === \"authorized\" &&\n safety.settlementStatus === \"settled\" &&\n safety.deliveryStatus === \"delivered\" &&\n safety.moneyMayHaveMoved === true\n ) {\n return pass(\"safety_settled_delivered\", \"Safety metadata proves authorized, settled delivery.\", {\n safety,\n });\n }\n\n return fail(\n \"safety_settled_delivered\",\n \"Safety metadata does not prove settled delivery.\",\n {\n safety,\n errorSafety: error?.safety,\n },\n );\n}\n\nfunction retrySafetyAfterSuccessCheck(\n response: ProbeMeshCallResponse | undefined,\n error: X402ProviderAcceptanceError | undefined,\n) {\n const retrySafety = response?.retrySafety;\n\n if (\n retrySafety?.retryable === false &&\n retrySafety.safeToAutoRetry === false &&\n retrySafety.reason === \"completed\"\n ) {\n return pass(\"retry_safety_after_success\", \"Completed paid call is not retryable.\", {\n retrySafety,\n });\n }\n\n return fail(\n \"retry_safety_after_success\",\n \"Completed paid call retry safety is missing or incorrect.\",\n {\n retrySafety,\n errorRetrySafety: error?.retrySafety,\n },\n );\n}\n\nfunction telemetryMatchesTimelineCheck(\n response: ProbeMeshCallResponse | undefined,\n telemetryEvents: HostedTelemetryEvent[],\n) {\n const timelineEventTypes =\n response?.timeline?.events.map((event) => event.type) ?? [];\n const telemetryEventTypes = telemetryEvents.map((event) => event.type);\n const matches =\n timelineEventTypes.length > 0 &&\n timelineEventTypes.length === telemetryEventTypes.length &&\n timelineEventTypes.every(\n (eventType, index) => eventType === telemetryEventTypes[index],\n );\n\n if (matches) {\n return pass(\"telemetry_matches_timeline\", \"Telemetry mirrors the hosted timeline.\", {\n telemetryEventTypes,\n });\n }\n\n return fail(\"telemetry_matches_timeline\", \"Telemetry does not mirror the hosted timeline.\", {\n timelineEventTypes,\n telemetryEventTypes,\n });\n}\n\nfunction createSecretSafeOutputCheck(options: {\n response?: ProbeMeshCallResponse;\n error?: X402ProviderAcceptanceError;\n telemetryEvents: HostedTelemetryEvent[];\n checks: X402ProviderAcceptanceCheck[];\n requiredReceiptTypes: ReceiptType[];\n forbiddenOutputValues: string[];\n}) {\n const forbiddenOutputValues = options.forbiddenOutputValues.filter(\n (value) => value.length > 0,\n );\n const candidate = {\n response: options.response,\n error: options.error,\n telemetryEvents: options.telemetryEvents,\n checks: options.checks,\n summary: createSummary({\n status: options.checks.every((check) => check.status === \"passed\")\n ? \"passed\"\n : \"failed\",\n checks: options.checks,\n response: options.response,\n error: options.error,\n telemetryEvents: options.telemetryEvents,\n requiredReceiptTypes: options.requiredReceiptTypes,\n }),\n };\n const serialized = JSON.stringify(candidate);\n const leakedValues = forbiddenOutputValues.filter((value) =>\n serialized.includes(value),\n );\n\n if (leakedValues.length === 0) {\n return pass(\"secret_safe_output\", \"Serialized acceptance output contains no forbidden values.\", {\n checkedForbiddenValueCount: forbiddenOutputValues.length,\n });\n }\n\n return fail(\"secret_safe_output\", \"Serialized acceptance output contains forbidden values.\", {\n leakedValueCount: leakedValues.length,\n });\n}\n\nfunction createSummary(options: {\n status: X402ProviderAcceptanceStatus;\n checks: X402ProviderAcceptanceCheck[];\n response?: ProbeMeshCallResponse;\n error?: X402ProviderAcceptanceError;\n telemetryEvents: HostedTelemetryEvent[];\n requiredReceiptTypes: ReceiptType[];\n}): X402ProviderAcceptanceSummary {\n const receiptRefs = options.response?.receiptRefs ?? options.error?.receiptRefs;\n const timeline = options.response?.timeline ?? options.error?.timeline;\n const route = options.response?.route ?? options.error?.route;\n const failedCheckNames = options.checks\n .filter((check) => check.status === \"failed\")\n .map((check) => check.name);\n\n return {\n status: options.status,\n totalChecks: options.checks.length,\n passedChecks: options.checks.length - failedCheckNames.length,\n failedChecks: failedCheckNames.length,\n failedCheckNames,\n callId: options.response?.callId ?? options.error?.callId,\n providerId: options.response?.provider.id ?? options.error?.provider,\n errorCode: options.error?.code,\n receiptTypes: getReceiptTypes(receiptRefs),\n requiredReceiptTypes: [...options.requiredReceiptTypes],\n timelineEventTypes: timeline?.events.map((event) => event.type) ?? [],\n telemetryEventTypes: options.telemetryEvents.map((event) => event.type),\n safety: options.response?.safety ?? options.error?.safety,\n retrySafety: options.response?.retrySafety ?? options.error?.retrySafety,\n route: route\n ? {\n routeId: route.routeId,\n selectedProviderId: route.selectedProviderId,\n fallbackUsed: route.explanation?.fallbackUsed,\n fallbackCount: route.explanation?.fallbackCount,\n stopReason: route.explanation?.stopReason,\n }\n : undefined,\n };\n}\n\nfunction toAcceptanceError(error: unknown): X402ProviderAcceptanceError {\n if (isProbeMeshError(error)) {\n return {\n name: \"ProbeMeshError\",\n code: error.code,\n message: error.message,\n status: \"failed\",\n capability: error.capability,\n provider: error.provider,\n callId: error.callId,\n receiptRefs: error.receiptRefs,\n safety: error.safety,\n timeline: error.timeline,\n retrySafety: error.retrySafety,\n route: error.route,\n };\n }\n\n return {\n name: \"ProbeMeshError\",\n code: \"provider_unavailable\",\n message:\n error instanceof Error\n ? error.message\n : \"x402 provider acceptance call failed.\",\n status: \"failed\",\n };\n}\n\nfunction getReceiptTypes(receiptRefs: ReceiptRef[] | undefined) {\n return [...new Set((receiptRefs ?? []).map((receiptRef) => receiptRef.type))];\n}\n\nfunction sanitizeAcceptanceOutput<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 pass(\n name: string,\n message: string,\n details?: Record<string, unknown>,\n): X402ProviderAcceptanceCheck {\n return {\n name,\n status: \"passed\",\n message,\n details,\n };\n}\n\nfunction fail(\n name: string,\n message: string,\n details?: Record<string, unknown>,\n): X402ProviderAcceptanceCheck {\n return {\n name,\n status: \"failed\",\n message,\n details,\n };\n}\n\nfunction assertAcceptanceOptions(\n options: X402ProviderAcceptanceOptions,\n): asserts options is X402ProviderAcceptanceOptions {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw invalidOptions(\"x402 acceptance options must be an object.\");\n }\n\n if (!Array.isArray(options.adapters) || options.adapters.length === 0) {\n throw invalidOptions(\"x402 acceptance options require at least one adapter.\");\n }\n\n if (\n !options.request ||\n typeof options.request !== \"object\" ||\n Array.isArray(options.request)\n ) {\n throw invalidOptions(\"x402 acceptance options require a call request object.\");\n }\n\n if (\n options.apiKey !== undefined &&\n (typeof options.apiKey !== \"string\" || options.apiKey.length === 0)\n ) {\n throw invalidOptions(\"x402 acceptance apiKey must be a non-empty string.\");\n }\n\n if (\n options.expectedProviderId !== undefined &&\n (typeof options.expectedProviderId !== \"string\" ||\n options.expectedProviderId.length === 0)\n ) {\n throw invalidOptions(\n \"x402 acceptance expectedProviderId must be a non-empty string.\",\n );\n }\n\n if (\n options.requiredReceiptTypes !== undefined &&\n (!Array.isArray(options.requiredReceiptTypes) ||\n options.requiredReceiptTypes.some(\n (receiptType) =>\n typeof receiptType !== \"string\" || receiptType.length === 0,\n ))\n ) {\n throw invalidOptions(\n \"x402 acceptance requiredReceiptTypes must be an array of receipt type strings.\",\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 invalidOptions(\n \"x402 acceptance forbiddenOutputValues must be an array of strings.\",\n );\n }\n}\n\nfunction invalidOptions(message: string) {\n return new ProbeMeshError({\n code: \"invalid_request\",\n message,\n });\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProviderCatalogArtifact,\n formatProviderCatalogArtifact,\n} from \"../providerCatalogArtifact\";\nimport type {\n ProviderCatalogArtifact,\n ProviderCatalogArtifactOptions,\n} from \"../providerCatalogArtifact\";\nimport type { ProviderManifest } from \"../providerKit/types\";\nimport {\n createX402ProviderAcceptanceReport,\n formatX402ProviderAcceptanceReport,\n runX402ProviderAcceptance,\n} from \"../protocols/x402Acceptance\";\nimport type {\n X402ProviderAcceptanceOptions,\n X402ProviderAcceptanceReport,\n X402ProviderAcceptanceReportFormat,\n X402ProviderAcceptanceReportOptions,\n} from \"../protocols/x402Acceptance\";\n\nexport interface X402ProviderAcceptanceCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface X402ProviderAcceptanceCliOutputs {\n json?: string;\n markdown?: string;\n catalog?: string;\n}\n\nexport interface X402ProviderAcceptanceCliCatalog {\n manifest: ProviderManifest;\n artifactId?: string;\n generatedAt?: string;\n}\n\nexport interface X402ProviderAcceptanceCliConfig<Input = unknown> {\n acceptance: X402ProviderAcceptanceOptions<Input>;\n report?: X402ProviderAcceptanceReportOptions & {\n format?: X402ProviderAcceptanceReportFormat;\n };\n catalog?: X402ProviderAcceptanceCliCatalog;\n outputs?: X402ProviderAcceptanceCliOutputs;\n}\n\nexport type X402ProviderAcceptanceCliConfigExport<Input = unknown> =\n | X402ProviderAcceptanceCliConfig<Input>\n | X402ProviderAcceptanceCliSkip;\n\nexport type X402ProviderAcceptanceCliConfigFactory<Input = unknown> = (\n context: X402ProviderAcceptanceCliConfigContext,\n) =>\n | X402ProviderAcceptanceCliConfigExport<Input>\n | Promise<X402ProviderAcceptanceCliConfigExport<Input>>;\n\nexport interface X402ProviderAcceptanceCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface X402ProviderAcceptanceCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface X402ProviderAcceptanceCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: X402ProviderAcceptanceCliSkip;\n report?: X402ProviderAcceptanceReport;\n catalogArtifact?: ProviderCatalogArtifact;\n stdout: string;\n stderr?: string;\n artifactPaths?: X402ProviderAcceptanceCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: X402ProviderAcceptanceReportFormat;\n outJson?: string;\n outMarkdown?: string;\n outCatalog?: string;\n title?: string;\n help?: boolean;\n}\n\nconst USAGE = `Usage: probemesh-x402-accept --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--out-catalog <path>] [--title <text>]`;\n\nexport async function runX402ProviderAcceptanceCli(\n options: X402ProviderAcceptanceCliOptions = {},\n): Promise<X402ProviderAcceptanceCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `x402 acceptance skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const result = await runX402ProviderAcceptance(configExport.acceptance);\n const report = createX402ProviderAcceptanceReport(result, {\n ...(configExport.report ?? {}),\n title: parsedArgs.title ?? configExport.report?.title,\n forbiddenOutputValues: mergeForbiddenOutputValues(configExport),\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.report?.format ?? \"markdown\";\n const stdout = formatX402ProviderAcceptanceReport(report, {\n format: selectedFormat,\n });\n const catalogArtifact = createOptionalCatalogArtifact(\n configExport,\n report,\n parsedArgs.outCatalog,\n );\n const artifactPaths = await writeArtifacts({\n cwd,\n report,\n catalogArtifact,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n catalog: parsedArgs.outCatalog ?? configExport.outputs?.catalog,\n },\n });\n\n return {\n exitCode: report.gate.accepted ? 0 : 1,\n skipped: false,\n report,\n catalogArtifact,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(error instanceof Error ? error.message : \"Unknown CLI failure.\");\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-catalog\") {\n parsedArgs.outCatalog = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--title\") {\n parsedArgs.title = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: X402ProviderAcceptanceCliConfigContext,\n): Promise<X402ProviderAcceptanceCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as X402ProviderAcceptanceCliConfigFactory)(context);\n }\n\n return configExport as X402ProviderAcceptanceCliConfigExport;\n}\n\nfunction isCliSkip(value: unknown): value is X402ProviderAcceptanceCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<X402ProviderAcceptanceCliSkip>).skip === true &&\n typeof (value as Partial<X402ProviderAcceptanceCliSkip>).reason === \"string\"\n );\n}\n\nfunction assertCliConfig(\n value: unknown,\n): asserts value is X402ProviderAcceptanceCliConfig {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"x402 acceptance CLI config must export an object.\");\n }\n\n if (\n !(\"acceptance\" in value) ||\n !(value as Partial<X402ProviderAcceptanceCliConfig>).acceptance ||\n typeof (value as Partial<X402ProviderAcceptanceCliConfig>).acceptance !==\n \"object\"\n ) {\n throw new Error(\"x402 acceptance CLI config requires acceptance options.\");\n }\n\n const outputs = (value as Partial<X402ProviderAcceptanceCliConfig>).outputs;\n\n if (\n outputs !== undefined &&\n (!outputs ||\n typeof outputs !== \"object\" ||\n Array.isArray(outputs) ||\n (outputs.json !== undefined && typeof outputs.json !== \"string\") ||\n (outputs.markdown !== undefined && typeof outputs.markdown !== \"string\") ||\n (outputs.catalog !== undefined && typeof outputs.catalog !== \"string\"))\n ) {\n throw new Error(\"x402 acceptance CLI outputs must contain string paths.\");\n }\n\n const catalog = (value as Partial<X402ProviderAcceptanceCliConfig>).catalog;\n\n if (catalog !== undefined) {\n if (!catalog || typeof catalog !== \"object\" || Array.isArray(catalog)) {\n throw new Error(\"x402 acceptance CLI catalog config must be an object.\");\n }\n\n if (\n !(\"manifest\" in catalog) ||\n !(catalog as Partial<X402ProviderAcceptanceCliCatalog>).manifest ||\n typeof (catalog as Partial<X402ProviderAcceptanceCliCatalog>).manifest !==\n \"object\"\n ) {\n throw new Error(\"x402 acceptance CLI catalog config requires manifest.\");\n }\n\n if (\n catalog.artifactId !== undefined &&\n typeof catalog.artifactId !== \"string\"\n ) {\n throw new Error(\"x402 acceptance CLI catalog artifactId must be a string.\");\n }\n\n if (\n catalog.generatedAt !== undefined &&\n typeof catalog.generatedAt !== \"string\"\n ) {\n throw new Error(\"x402 acceptance CLI catalog generatedAt must be a string.\");\n }\n }\n}\n\nfunction mergeForbiddenOutputValues(config: X402ProviderAcceptanceCliConfig) {\n return [\n ...(config.acceptance.forbiddenOutputValues ?? []),\n ...(config.report?.forbiddenOutputValues ?? []),\n ];\n}\n\nfunction createOptionalCatalogArtifact(\n config: X402ProviderAcceptanceCliConfig,\n report: X402ProviderAcceptanceReport,\n requestedCatalogOutput: string | undefined,\n) {\n if (!config.catalog) {\n if (requestedCatalogOutput ?? config.outputs?.catalog) {\n throw new Error(\n \"x402 acceptance CLI catalog output requires catalog manifest config.\",\n );\n }\n\n return undefined;\n }\n\n return createProviderCatalogArtifact({\n manifest: config.catalog.manifest,\n acceptanceReport: report,\n artifactId: config.catalog.artifactId,\n generatedAt: config.catalog.generatedAt,\n forbiddenOutputValues: mergeForbiddenOutputValues(config),\n } satisfies ProviderCatalogArtifactOptions);\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n report: X402ProviderAcceptanceReport;\n catalogArtifact?: ProviderCatalogArtifact;\n outputs: X402ProviderAcceptanceCliOutputs;\n}) {\n const artifactPaths: X402ProviderAcceptanceCliOutputs = {};\n\n if (options.outputs.json) {\n const outputPath = resolve(options.cwd, options.outputs.json);\n await writeArtifact(\n outputPath,\n formatX402ProviderAcceptanceReport(options.report, {\n format: \"json\",\n }),\n );\n artifactPaths.json = outputPath;\n }\n\n if (options.outputs.markdown) {\n const outputPath = resolve(options.cwd, options.outputs.markdown);\n await writeArtifact(\n outputPath,\n formatX402ProviderAcceptanceReport(options.report, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = outputPath;\n }\n\n if (options.outputs.catalog) {\n if (!options.catalogArtifact) {\n throw new Error(\n \"x402 acceptance CLI catalog output requires a catalog artifact.\",\n );\n }\n\n const outputPath = resolve(options.cwd, options.outputs.catalog);\n await writeArtifact(\n outputPath,\n formatProviderCatalogArtifact(options.catalogArtifact, {\n format: \"json\",\n }),\n );\n artifactPaths.catalog = outputPath;\n }\n\n return artifactPaths;\n}\n\nasync function writeArtifact(outputPath: string, body: string) {\n await mkdir(dirname(outputPath), {\n recursive: true,\n });\n await writeFile(outputPath, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): X402ProviderAcceptanceCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `${message}\\n${USAGE}\\n`,\n };\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n ProviderProtocolSettlement,\n} from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\nimport type { ProbeMeshCallSafety } from \"../types\";\n\nexport interface X402SandboxPaymentRequirement {\n x402Version: 2;\n scheme: \"exact\" | \"upto\" | string;\n network: string;\n asset: string;\n amount: string;\n payTo: string;\n resource: string;\n description?: string;\n maxTimeoutSeconds?: number;\n extra?: Record<string, unknown>;\n}\n\nexport interface X402SandboxPaymentPayload {\n x402Version: 2;\n scheme: string;\n network: string;\n asset: string;\n amount: string;\n payTo: string;\n resource: string;\n payer: string;\n provider: string;\n callId: string;\n paymentId: string;\n issuedAt: string;\n sandboxSignature: string;\n}\n\nexport interface X402SandboxSettlementResponse {\n x402Version: 2;\n success: boolean;\n provider: string;\n payer: string;\n paymentId: string;\n paymentAttemptId: string;\n network: string;\n asset: string;\n amount: string;\n settledAt: string;\n sandboxSettlementId: string;\n}\n\nexport interface X402SandboxProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n failPrepare?: boolean;\n failSettle?: boolean;\n paymentId?: string;\n payer?: string;\n paymentRequired?: Partial<X402SandboxPaymentRequirement>;\n}\n\nconst DEFAULT_MODE = \"x402\";\nconst DEFAULT_PAYER = \"sandbox-agent\";\nconst DEFAULT_NETWORK = \"eip155:84532\";\nconst DEFAULT_ASSET = \"USDC\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_PAY_TO = \"sandbox-provider-wallet\";\nconst PAYMENT_REQUIRED_HEADER = \"PAYMENT-REQUIRED\";\nconst PAYMENT_SIGNATURE_HEADER = \"PAYMENT-SIGNATURE\";\nconst PAYMENT_RESPONSE_HEADER = \"PAYMENT-RESPONSE\";\n\nexport function createX402SandboxProtocol(\n options: X402SandboxProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertX402SandboxProtocolOptions(options);\n\n const mode = options.mode ?? DEFAULT_MODE;\n\n return {\n mode,\n prepare({ manifest, request, context }) {\n if (options.failPrepare) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 sandbox payment authorization failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: failedPaymentSafety(),\n });\n }\n\n assertProviderMatches(options.providerId, manifest.id, request.capability, context.callId);\n\n const paymentRequired = createPaymentRequirement({\n providerId: manifest.id,\n capability: request.capability,\n options,\n });\n const paymentId = options.paymentId ?? `${context.callId}:x402_payment`;\n const payer = options.payer ?? DEFAULT_PAYER;\n const paymentAttemptId = `${paymentId}:attempt`;\n const paymentPayload = createPaymentPayload({\n paymentRequired,\n providerId: manifest.id,\n callId: context.callId,\n paymentId,\n payer,\n issuedAt: context.startedAt.toISOString(),\n });\n const headers = {\n [PAYMENT_REQUIRED_HEADER]: encodeBase64Json(paymentRequired),\n [PAYMENT_SIGNATURE_HEADER]: encodeBase64Json(paymentPayload),\n };\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n payer,\n network: paymentRequired.network,\n asset: paymentRequired.asset,\n amount: paymentRequired.amount,\n paymentRequired,\n paymentPayload,\n paymentRequiredHeader: PAYMENT_REQUIRED_HEADER,\n paymentSignatureHeader: PAYMENT_SIGNATURE_HEADER,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_payment_proof`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(preparation, headers);\n\n return preparation;\n },\n settle({ manifest, request, context, result, preparation }) {\n assertProviderMatches(options.providerId, manifest.id, request.capability, context.callId);\n\n const paymentAttemptId = getMetadataString(\n preparation?.metadata?.paymentAttemptId,\n `${context.callId}:x402_payment:attempt`,\n );\n const paymentId = getMetadataString(\n preparation?.metadata?.paymentId,\n `${context.callId}:x402_payment`,\n );\n const payer = getMetadataString(preparation?.metadata?.payer, DEFAULT_PAYER);\n const network = getMetadataString(\n preparation?.metadata?.network,\n DEFAULT_NETWORK,\n );\n const asset = getMetadataString(preparation?.metadata?.asset, DEFAULT_ASSET);\n const amount = getMetadataString(\n preparation?.metadata?.amount,\n DEFAULT_AMOUNT,\n );\n const hasDeliveryReceipt =\n Array.isArray(result.receiptRefs) &&\n result.receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n\n if (options.failSettle) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 sandbox settlement failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const settlementResponse: X402SandboxSettlementResponse = {\n x402Version: 2,\n success: true,\n provider: manifest.id,\n payer,\n paymentId,\n paymentAttemptId,\n network,\n asset,\n amount,\n settledAt: context.startedAt.toISOString(),\n sandboxSettlementId: `${context.callId}:x402_settlement`,\n };\n const headers = {\n [PAYMENT_RESPONSE_HEADER]: encodeBase64Json(settlementResponse),\n };\n const settlement: ProviderProtocolSettlement = {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n settlementResponse,\n paymentResponseHeader: PAYMENT_RESPONSE_HEADER,\n },\n receiptRefs: [\n {\n type: \"settlement_confirmation\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_settlement_confirmed`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"settled\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(settlement, headers);\n\n return settlement;\n },\n };\n}\n\nfunction assertX402SandboxProtocolOptions(options: X402SandboxProtocolOptions) {\n validateOptionalString(options.mode, \"mode\");\n validateOptionalString(options.providerId, \"providerId\");\n validateOptionalString(options.paymentId, \"paymentId\");\n validateOptionalString(options.payer, \"payer\");\n\n if (\n options.paymentRequired !== undefined &&\n (!options.paymentRequired ||\n typeof options.paymentRequired !== \"object\" ||\n Array.isArray(options.paymentRequired))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox paymentRequired must be an object when provided.\",\n });\n }\n\n if (\n options.failPrepare !== undefined &&\n typeof options.failPrepare !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox failPrepare must be a boolean when provided.\",\n });\n }\n\n if (\n options.failSettle !== undefined &&\n typeof options.failSettle !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox failSettle must be a boolean when provided.\",\n });\n }\n}\n\nfunction validateOptionalString(value: unknown, field: string) {\n if (\n value !== undefined &&\n (typeof value !== \"string\" || value.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 sandbox ${field} must be a non-empty string when provided.`,\n });\n }\n}\n\nfunction assertProviderMatches(\n configuredProviderId: string | undefined,\n manifestProviderId: string,\n capability: string,\n callId: string,\n) {\n if (!configuredProviderId || configuredProviderId === manifestProviderId) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 sandbox protocol is configured for provider \"${configuredProviderId}\", but manifest \"${manifestProviderId}\" was used.`,\n capability,\n provider: manifestProviderId,\n callId,\n });\n}\n\nfunction createPaymentRequirement(options: {\n providerId: string;\n capability: string;\n options: X402SandboxProtocolOptions;\n}): X402SandboxPaymentRequirement {\n const overrides = options.options.paymentRequired ?? {};\n\n return {\n x402Version: 2,\n scheme: overrides.scheme ?? \"exact\",\n network: overrides.network ?? DEFAULT_NETWORK,\n asset: overrides.asset ?? DEFAULT_ASSET,\n amount: overrides.amount ?? DEFAULT_AMOUNT,\n payTo: overrides.payTo ?? DEFAULT_PAY_TO,\n resource:\n overrides.resource ??\n `probemesh://${options.providerId}/${options.capability}`,\n description:\n overrides.description ??\n `ProbeMesh x402 sandbox payment for ${options.capability}.`,\n maxTimeoutSeconds: overrides.maxTimeoutSeconds ?? 60,\n extra: overrides.extra,\n };\n}\n\nfunction createPaymentPayload(options: {\n paymentRequired: X402SandboxPaymentRequirement;\n providerId: string;\n callId: string;\n paymentId: string;\n payer: string;\n issuedAt: string;\n}): X402SandboxPaymentPayload {\n return {\n x402Version: 2,\n scheme: options.paymentRequired.scheme,\n network: options.paymentRequired.network,\n asset: options.paymentRequired.asset,\n amount: options.paymentRequired.amount,\n payTo: options.paymentRequired.payTo,\n resource: options.paymentRequired.resource,\n payer: options.payer,\n provider: options.providerId,\n callId: options.callId,\n paymentId: options.paymentId,\n issuedAt: options.issuedAt,\n sandboxSignature: `sandbox:${options.providerId}:${options.paymentId}`,\n };\n}\n\nfunction defineNonEnumerableHeaders(\n target: ProviderProtocolPreparation | ProviderProtocolSettlement,\n headers: Record<string, string>,\n) {\n Object.defineProperty(target, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n}\n\nfunction encodeBase64Json(value: unknown) {\n return Buffer.from(JSON.stringify(value), \"utf8\").toString(\"base64\");\n}\n\nfunction getMetadataString(value: unknown, fallback: string) {\n return typeof value === \"string\" && value.length > 0 ? value : fallback;\n}\n\nfunction failedPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n","import type { ProbeMeshCallResponse, ReceiptRef, ReceiptType } from \"./types\";\n\nexport type ReceiptSource = ProbeMeshCallResponse | ReceiptRef[];\n\nexport interface ReceiptSummary {\n total: number;\n types: ReceiptType[];\n providers: string[];\n byType: Partial<Record<ReceiptType, number>>;\n hasPaymentProof: boolean;\n hasProviderDelivery: boolean;\n}\n\nexport function getReceiptRefs(\n source: ReceiptSource,\n type?: ReceiptType,\n): ReceiptRef[] {\n const receiptRefs = readReceiptRefs(source);\n\n if (type === undefined) {\n return [...receiptRefs];\n }\n\n return receiptRefs.filter((receiptRef) => receiptRef.type === type);\n}\n\nexport function findReceiptRef(\n source: ReceiptSource,\n type: ReceiptType,\n): ReceiptRef | undefined {\n return getReceiptRefs(source, type)[0];\n}\n\nexport function hasReceipt(source: ReceiptSource, type: ReceiptType): boolean {\n return findReceiptRef(source, type) !== undefined;\n}\n\nexport function summarizeReceipts(source: ReceiptSource): ReceiptSummary {\n const receiptRefs = readReceiptRefs(source);\n const types: ReceiptType[] = [];\n const providers: string[] = [];\n const byType: Partial<Record<ReceiptType, number>> = {};\n\n for (const receiptRef of receiptRefs) {\n if (!types.includes(receiptRef.type)) {\n types.push(receiptRef.type);\n }\n\n if (!providers.includes(receiptRef.provider)) {\n providers.push(receiptRef.provider);\n }\n\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receiptRefs.length,\n types,\n providers,\n byType,\n hasPaymentProof: hasReceipt(receiptRefs, \"payment_proof\"),\n hasProviderDelivery: hasReceipt(receiptRefs, \"provider_delivery\"),\n };\n}\n\nfunction readReceiptRefs(source: ReceiptSource): ReceiptRef[] {\n return Array.isArray(source) ? source : source.receiptRefs;\n}\n"],"mappings":"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;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,+BAAmE;AAC1E,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,6BAAiE;AACxE,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,8BAAkE;AACzE,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAa,MAAc,OAAmD;AACrF,SAA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","names":["summarizeReceipts","pricingToCost","validateStringArray","isRecord","validateNonEmptyString","validatePricingDeclaration","validatePricing","parsePriceLookupInput","import_node_crypto","import_node_crypto","cloneSerializable","isRecord","validateNonEmptyString","formatValidationErrors","validateReceiptRefs","validateStringArray","cloneSerializable","isRecord","validateNonEmptyString","validateIsoTimestamp","formatValidationErrors","formatInlineList","replaceForbiddenValues","entries","validateStringArray","validateReceiptSummary","isRecord","validateIsoTimestamp","formatValidationErrors","isReceiptType","cloneSerializable","pricingToCost","validateNonEmptyString","validateStringArray","validatePricingDeclaration","validateReceiptSummary","import_node_crypto","cloneSerializable","isRecord","validateStringArray","isReceiptType","resolveCatalogCost","isPricing","replaceForbiddenValues","hashStableJson","cloneSerializable","isRecord","validateNonEmptyString","validateIsoTimestamp","validateHashes","validateStringArray","formatValidationErrors","pushHashMismatch","stableStringify","sortSerializable","formatInlineList","replaceForbiddenValues","body","isReceiptType","retrySafety","normalizedError","strictestMaxCostUsd","getPricing","pricingToCost","generateCallId","resolve","import_node_crypto","cloneSerializable","assertBundleOptions","formatValidationErrors","sanitizeBundleOutput","hashStableJson","hashBundleContent","isRecord","validateNonEmptyString","validateIsoTimestamp","validateHashes","pushHashMismatch","stableStringify","formatBundleMarkdown","validateSha256String","validateStringArray","sortSerializable","replaceForbiddenValues","formatInlineList","import_promises","import_node_path","value","import_promises","import_node_path","USAGE","parseCliArgs","cliFailure","loadCliConfig","isCliSkip","assertCliConfig","writeArtifacts","requireValue","writeArtifact","import_promises","import_node_path","import_node_crypto","cloneSerializable","hashStableJson","hashArtifactContent","isRecord","validateNonEmptyString","validateIsoTimestamp","validateHashes","formatValidationErrors","formatInlineList","replaceForbiddenValues","entries","stableStringify","formatValidationErrors","isRecord","checks","status","sanitizedChecks","formatInlineList","replaceForbiddenValues","entries","USAGE","parseCliArgs","cliFailure","loadCliConfig","isCliSkip","assertCliConfig","writeArtifacts","requireValue","isRecord","import_promises","import_node_path","import_node_crypto","cloneSerializable","hashStableJson","isRecord","validateNonEmptyString","validateIsoTimestamp","validateEvidence","validateHashes","formatValidationErrors","formatInlineList","replaceForbiddenValues","entries","stableStringify","assertEvaluationOptions","cloneSerializable","sanitizeReport","formatMarkdownReport","isRecord","formatValidationErrors","formatInlineList","replaceForbiddenValues","entries","USAGE","parseCliArgs","cliFailure","loadCliConfig","isCliSkip","assertCliConfig","writeArtifacts","requireValue","isRecord","assertOutputs","writeTextFile","import_promises","import_node_path","USAGE","parseCliArgs","cliFailure","loadCliConfig","isCliSkip","assertCliConfig","writeArtifacts","requireValue","isRecord","assertOutputs","writeTextFile","import_promises","import_node_path","USAGE","parseCliArgs","cliFailure","requireValue","import_client","DEFAULT_MODE","DEFAULT_NETWORK","DEFAULT_AMOUNT","noPaymentSafety","DEFAULT_REQUIRED_RECEIPT_TYPES","createSecretSafeOutputCheck","createSummary","completedResponseCheck","selectedProviderCheck","routeMetadataCheck","timelineEventsCheck","requiredReceiptsCheck","telemetryMatchesTimelineCheck","getReceiptTypes","formatInlineList","pass","fail","replaceForbiddenValues","entries","import_promises","import_node_path","USAGE","parseCliArgs","cliFailure","loadCliConfig","isCliSkip","assertCliConfig","writeArtifacts","requireValue","writeArtifact","DEFAULT_MODE","DEFAULT_PAYER","DEFAULT_NETWORK","DEFAULT_ASSET","DEFAULT_AMOUNT","DEFAULT_PAY_TO","PAYMENT_REQUIRED_HEADER","PAYMENT_SIGNATURE_HEADER","PAYMENT_RESPONSE_HEADER","failedPaymentSafety","assertProviderMatches","defineNonEnumerableHeaders","validateOptionalString","summarizeReceipts"]}
|