@probemesh/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/chunk-257Y7LN2.js +827 -0
  4. package/dist/chunk-257Y7LN2.js.map +1 -0
  5. package/dist/chunk-2ASMVLG4.js +56 -0
  6. package/dist/chunk-2ASMVLG4.js.map +1 -0
  7. package/dist/chunk-2KWGHJYP.js +285 -0
  8. package/dist/chunk-2KWGHJYP.js.map +1 -0
  9. package/dist/chunk-3H7UGVI6.js +1117 -0
  10. package/dist/chunk-3H7UGVI6.js.map +1 -0
  11. package/dist/chunk-5Q3PDYIA.js +657 -0
  12. package/dist/chunk-5Q3PDYIA.js.map +1 -0
  13. package/dist/chunk-CXZOO3U4.js +550 -0
  14. package/dist/chunk-CXZOO3U4.js.map +1 -0
  15. package/dist/chunk-FRFBK4SY.js +270 -0
  16. package/dist/chunk-FRFBK4SY.js.map +1 -0
  17. package/dist/chunk-HJK52QJF.js +994 -0
  18. package/dist/chunk-HJK52QJF.js.map +1 -0
  19. package/dist/chunk-HNBDX7IU.js +705 -0
  20. package/dist/chunk-HNBDX7IU.js.map +1 -0
  21. package/dist/chunk-NYTV263W.js +116 -0
  22. package/dist/chunk-NYTV263W.js.map +1 -0
  23. package/dist/chunk-PXG54XOG.js +595 -0
  24. package/dist/chunk-PXG54XOG.js.map +1 -0
  25. package/dist/chunk-TDOBAMYM.js +607 -0
  26. package/dist/chunk-TDOBAMYM.js.map +1 -0
  27. package/dist/chunk-TV42EZSI.js +2157 -0
  28. package/dist/chunk-TV42EZSI.js.map +1 -0
  29. package/dist/chunk-UU2ZG7P7.js +408 -0
  30. package/dist/chunk-UU2ZG7P7.js.map +1 -0
  31. package/dist/chunk-WKN7QOCA.js +977 -0
  32. package/dist/chunk-WKN7QOCA.js.map +1 -0
  33. package/dist/chunk-ZJOLPBJJ.js +1091 -0
  34. package/dist/chunk-ZJOLPBJJ.js.map +1 -0
  35. package/dist/cli/audit-trail-export.cjs +1193 -0
  36. package/dist/cli/audit-trail-export.cjs.map +1 -0
  37. package/dist/cli/audit-trail-export.d.cts +1 -0
  38. package/dist/cli/audit-trail-export.d.ts +1 -0
  39. package/dist/cli/audit-trail-export.js +24 -0
  40. package/dist/cli/audit-trail-export.js.map +1 -0
  41. package/dist/cli/catalog-check.cjs +2687 -0
  42. package/dist/cli/catalog-check.cjs.map +1 -0
  43. package/dist/cli/catalog-check.d.cts +1 -0
  44. package/dist/cli/catalog-check.d.ts +1 -0
  45. package/dist/cli/catalog-check.js +26 -0
  46. package/dist/cli/catalog-check.js.map +1 -0
  47. package/dist/cli/probemesh-init.cjs +1049 -0
  48. package/dist/cli/probemesh-init.cjs.map +1 -0
  49. package/dist/cli/probemesh-init.d.cts +1 -0
  50. package/dist/cli/probemesh-init.d.ts +1 -0
  51. package/dist/cli/probemesh-init.js +22 -0
  52. package/dist/cli/probemesh-init.js.map +1 -0
  53. package/dist/cli/provider-conformance.cjs +6180 -0
  54. package/dist/cli/provider-conformance.cjs.map +1 -0
  55. package/dist/cli/provider-conformance.d.cts +1 -0
  56. package/dist/cli/provider-conformance.d.ts +1 -0
  57. package/dist/cli/provider-conformance.js +29 -0
  58. package/dist/cli/provider-conformance.js.map +1 -0
  59. package/dist/cli/provider-dossier-check.cjs +2978 -0
  60. package/dist/cli/provider-dossier-check.cjs.map +1 -0
  61. package/dist/cli/provider-dossier-check.d.cts +1 -0
  62. package/dist/cli/provider-dossier-check.d.ts +1 -0
  63. package/dist/cli/provider-dossier-check.js +27 -0
  64. package/dist/cli/provider-dossier-check.js.map +1 -0
  65. package/dist/cli/provider-dossier.cjs +1753 -0
  66. package/dist/cli/provider-dossier.cjs.map +1 -0
  67. package/dist/cli/provider-dossier.d.cts +1 -0
  68. package/dist/cli/provider-dossier.d.ts +1 -0
  69. package/dist/cli/provider-dossier.js +26 -0
  70. package/dist/cli/provider-dossier.js.map +1 -0
  71. package/dist/cli/x402-accept.cjs +6009 -0
  72. package/dist/cli/x402-accept.cjs.map +1 -0
  73. package/dist/cli/x402-accept.d.cts +1 -0
  74. package/dist/cli/x402-accept.d.ts +1 -0
  75. package/dist/cli/x402-accept.js +28 -0
  76. package/dist/cli/x402-accept.js.map +1 -0
  77. package/dist/index.cjs +13671 -0
  78. package/dist/index.cjs.map +1 -0
  79. package/dist/index.d.cts +2026 -0
  80. package/dist/index.d.ts +2026 -0
  81. package/dist/index.js +2560 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts","../src/hostedRouter.ts"],"sourcesContent":["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 { 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"],"mappings":"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","names":["randomUUID","randomUUID","body","retrySafety","normalizedError","getPricing","pricingToCost","generateCallId"]}