@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,408 @@
1
+ import {
2
+ validateProviderManifest
3
+ } from "./chunk-3H7UGVI6.js";
4
+ import {
5
+ redactX402Secrets
6
+ } from "./chunk-NYTV263W.js";
7
+ import {
8
+ ProbeMeshError
9
+ } from "./chunk-2ASMVLG4.js";
10
+
11
+ // src/providerConformanceArtifact.ts
12
+ import { createHash } from "crypto";
13
+ var PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION = "probemesh.provider-conformance.v1";
14
+ function createProviderConformanceArtifact(options) {
15
+ assertProviderConformanceArtifactOptions(options);
16
+ const status = options.report.status === "passed" && options.report.checks.every((check) => check.status === "passed") ? "verified" : "failed";
17
+ const provider = summarizeManifest(options.manifest);
18
+ const conformance = {
19
+ title: options.report.title,
20
+ status: options.report.status,
21
+ summary: cloneSerializable(options.report.summary),
22
+ checks: cloneSerializable(options.report.checks),
23
+ failedChecks: [...options.report.summary.failedCheckNames],
24
+ receipts: cloneSerializable(options.report.receipts),
25
+ safety: cloneSerializable(options.report.safety),
26
+ retrySafety: cloneSerializable(options.report.retrySafety),
27
+ route: cloneSerializable(options.report.route),
28
+ timelineEventTypes: [...options.report.timelineEventTypes],
29
+ telemetryEventTypes: [...options.report.telemetryEventTypes],
30
+ errorCode: options.report.summary.errorCode
31
+ };
32
+ const baseContent = sanitizeConformanceArtifactOutput(
33
+ {
34
+ schemaVersion: PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION,
35
+ artifactId: options.artifactId ?? `${options.manifest.id}:${options.report.summary.callId ?? "unknown"}:conformance`,
36
+ generatedAt: options.generatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
37
+ status,
38
+ hashAlgorithm: "sha256",
39
+ provider,
40
+ conformance
41
+ },
42
+ options.forbiddenOutputValues ?? []
43
+ );
44
+ const hashesWithoutArtifact = {
45
+ manifest: hashStableJson(baseContent.provider),
46
+ report: hashStableJson(baseContent.conformance.summary),
47
+ checks: hashStableJson(baseContent.conformance.checks),
48
+ artifact: ""
49
+ };
50
+ const artifact = {
51
+ ...baseContent,
52
+ hashes: {
53
+ ...hashesWithoutArtifact,
54
+ artifact: hashArtifactContent({
55
+ ...baseContent,
56
+ hashes: hashesWithoutArtifact
57
+ })
58
+ }
59
+ };
60
+ assertProviderConformanceArtifact(artifact);
61
+ return artifact;
62
+ }
63
+ function validateProviderConformanceArtifact(artifact) {
64
+ const errors = [];
65
+ if (!isRecord(artifact)) {
66
+ return {
67
+ valid: false,
68
+ errors: [
69
+ {
70
+ path: "$",
71
+ message: "Provider conformance artifact must be an object."
72
+ }
73
+ ]
74
+ };
75
+ }
76
+ if (artifact.schemaVersion !== PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION) {
77
+ errors.push({
78
+ path: "schemaVersion",
79
+ message: `schemaVersion must be "${PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION}".`
80
+ });
81
+ }
82
+ validateNonEmptyString(artifact.artifactId, "artifactId", errors);
83
+ validateIsoTimestamp(artifact.generatedAt, "generatedAt", errors);
84
+ if (artifact.status !== "verified" && artifact.status !== "failed") {
85
+ errors.push({
86
+ path: "status",
87
+ message: 'status must be "verified" or "failed".'
88
+ });
89
+ }
90
+ if (artifact.hashAlgorithm !== "sha256") {
91
+ errors.push({
92
+ path: "hashAlgorithm",
93
+ message: 'hashAlgorithm must be "sha256".'
94
+ });
95
+ }
96
+ validateHashes(artifact.hashes, errors);
97
+ validateManifestSummary(artifact.provider, errors);
98
+ validateConformanceSummary(artifact.conformance, errors);
99
+ return {
100
+ valid: errors.length === 0,
101
+ errors
102
+ };
103
+ }
104
+ function assertProviderConformanceArtifact(artifact) {
105
+ const result = validateProviderConformanceArtifact(artifact);
106
+ if (result.valid) {
107
+ return;
108
+ }
109
+ throw new ProbeMeshError({
110
+ code: "invalid_request",
111
+ message: `Invalid provider conformance artifact: ${formatValidationErrors(
112
+ result.errors
113
+ )}`
114
+ });
115
+ }
116
+ function formatProviderConformanceArtifact(artifact, options = {}) {
117
+ assertProviderConformanceArtifact(artifact);
118
+ if ((options.format ?? "json") === "markdown") {
119
+ return formatConformanceArtifactMarkdown(artifact);
120
+ }
121
+ return JSON.stringify(artifact, null, 2);
122
+ }
123
+ function assertProviderConformanceArtifactOptions(options) {
124
+ if (!options || typeof options !== "object" || Array.isArray(options)) {
125
+ throw new ProbeMeshError({
126
+ code: "invalid_request",
127
+ message: "Provider conformance artifact options must be an object."
128
+ });
129
+ }
130
+ const manifestValidation = validateProviderManifest(options.manifest);
131
+ if (!manifestValidation.valid) {
132
+ throw new ProbeMeshError({
133
+ code: "invalid_request",
134
+ message: `Invalid provider conformance artifact manifest: ${formatValidationErrors(
135
+ manifestValidation.errors
136
+ )}`
137
+ });
138
+ }
139
+ if (!options.report || typeof options.report !== "object" || Array.isArray(options.report)) {
140
+ throw new ProbeMeshError({
141
+ code: "invalid_request",
142
+ message: "Provider conformance artifact requires a conformance report."
143
+ });
144
+ }
145
+ if (options.generatedAt !== void 0 && (typeof options.generatedAt !== "string" || Number.isNaN(Date.parse(options.generatedAt)))) {
146
+ throw new ProbeMeshError({
147
+ code: "invalid_request",
148
+ message: "Provider conformance artifact generatedAt must be an ISO timestamp."
149
+ });
150
+ }
151
+ if (options.artifactId !== void 0 && (typeof options.artifactId !== "string" || options.artifactId.length === 0)) {
152
+ throw new ProbeMeshError({
153
+ code: "invalid_request",
154
+ message: "Provider conformance artifact artifactId must be a non-empty string."
155
+ });
156
+ }
157
+ if (options.forbiddenOutputValues !== void 0 && (!Array.isArray(options.forbiddenOutputValues) || options.forbiddenOutputValues.some((value) => typeof value !== "string"))) {
158
+ throw new ProbeMeshError({
159
+ code: "invalid_request",
160
+ message: "Provider conformance artifact forbiddenOutputValues must be an array of strings."
161
+ });
162
+ }
163
+ }
164
+ function summarizeManifest(manifest) {
165
+ return {
166
+ id: manifest.id,
167
+ displayName: manifest.displayName,
168
+ capabilities: [...manifest.capabilities],
169
+ protocolMode: manifest.protocolMode,
170
+ pricing: cloneSerializable(manifest.pricing),
171
+ receipts: cloneSerializable(manifest.receipts),
172
+ limits: cloneSerializable(manifest.limits),
173
+ paymentOptions: cloneSerializable(manifest.paymentOptions),
174
+ schemas: {
175
+ inputDeclared: hasSchemaDeclaration(manifest.inputSchema),
176
+ outputDeclared: hasSchemaDeclaration(manifest.outputSchema)
177
+ }
178
+ };
179
+ }
180
+ function hasSchemaDeclaration(declaration) {
181
+ return Object.keys(declaration).length > 0;
182
+ }
183
+ function formatConformanceArtifactMarkdown(artifact) {
184
+ const lines = [
185
+ `# ${artifact.provider.displayName} Conformance Artifact`,
186
+ "",
187
+ `Status: ${artifact.status}`,
188
+ `Schema: ${artifact.schemaVersion}`,
189
+ `Artifact ID: ${artifact.artifactId}`,
190
+ `Generated: ${artifact.generatedAt}`,
191
+ `Provider: ${artifact.provider.id}`,
192
+ `Capabilities: ${formatInlineList(artifact.provider.capabilities)}`,
193
+ "",
194
+ "## Conformance",
195
+ `- Result: ${artifact.conformance.status}`,
196
+ `- Failed checks: ${formatInlineList(artifact.conformance.failedChecks)}`,
197
+ `- Receipts: ${formatInlineList(artifact.conformance.receipts.types)}`,
198
+ `- Timeline: ${formatInlineList(artifact.conformance.timelineEventTypes)}`,
199
+ "",
200
+ "## Safety",
201
+ `- Payment: ${artifact.conformance.safety?.paymentStatus ?? "unknown"}`,
202
+ `- Settlement: ${artifact.conformance.safety?.settlementStatus ?? "unknown"}`,
203
+ `- Delivery: ${artifact.conformance.safety?.deliveryStatus ?? "unknown"}`,
204
+ `- Money may have moved: ${String(
205
+ artifact.conformance.safety?.moneyMayHaveMoved ?? false
206
+ )}`,
207
+ "",
208
+ "## Hashes",
209
+ `- Manifest: ${artifact.hashes.manifest}`,
210
+ `- Report: ${artifact.hashes.report}`,
211
+ `- Checks: ${artifact.hashes.checks}`,
212
+ `- Artifact: ${artifact.hashes.artifact}`
213
+ ];
214
+ return `${lines.join("\n")}
215
+ `;
216
+ }
217
+ function validateManifestSummary(provider, errors) {
218
+ if (!isRecord(provider)) {
219
+ errors.push({
220
+ path: "provider",
221
+ message: "provider must be an object."
222
+ });
223
+ return;
224
+ }
225
+ validateNonEmptyString(provider.id, "provider.id", errors);
226
+ validateNonEmptyString(provider.displayName, "provider.displayName", errors);
227
+ if (!Array.isArray(provider.capabilities) || provider.capabilities.some((capability) => typeof capability !== "string")) {
228
+ errors.push({
229
+ path: "provider.capabilities",
230
+ message: "provider.capabilities must be an array of strings."
231
+ });
232
+ }
233
+ validateNonEmptyString(provider.protocolMode, "provider.protocolMode", errors);
234
+ if (!isRecord(provider.receipts)) {
235
+ errors.push({
236
+ path: "provider.receipts",
237
+ message: "provider.receipts must be an object."
238
+ });
239
+ }
240
+ if (!isRecord(provider.schemas) || typeof provider.schemas.inputDeclared !== "boolean" || typeof provider.schemas.outputDeclared !== "boolean") {
241
+ errors.push({
242
+ path: "provider.schemas",
243
+ message: "provider.schemas must include inputDeclared and outputDeclared booleans."
244
+ });
245
+ }
246
+ }
247
+ function validateConformanceSummary(conformance, errors) {
248
+ if (!isRecord(conformance)) {
249
+ errors.push({
250
+ path: "conformance",
251
+ message: "conformance must be an object."
252
+ });
253
+ return;
254
+ }
255
+ validateNonEmptyString(conformance.title, "conformance.title", errors);
256
+ if (conformance.status !== "passed" && conformance.status !== "failed") {
257
+ errors.push({
258
+ path: "conformance.status",
259
+ message: 'conformance.status must be "passed" or "failed".'
260
+ });
261
+ }
262
+ if (!isRecord(conformance.summary)) {
263
+ errors.push({
264
+ path: "conformance.summary",
265
+ message: "conformance.summary must be an object."
266
+ });
267
+ }
268
+ if (!Array.isArray(conformance.checks) || conformance.checks.some((check) => !isRecord(check))) {
269
+ errors.push({
270
+ path: "conformance.checks",
271
+ message: "conformance.checks must be an array of check objects."
272
+ });
273
+ }
274
+ if (!Array.isArray(conformance.failedChecks) || conformance.failedChecks.some((checkName) => typeof checkName !== "string")) {
275
+ errors.push({
276
+ path: "conformance.failedChecks",
277
+ message: "conformance.failedChecks must be an array of strings."
278
+ });
279
+ }
280
+ if (!isRecord(conformance.receipts)) {
281
+ errors.push({
282
+ path: "conformance.receipts",
283
+ message: "conformance.receipts must be an object."
284
+ });
285
+ }
286
+ if (!Array.isArray(conformance.timelineEventTypes) || conformance.timelineEventTypes.some((eventType) => typeof eventType !== "string")) {
287
+ errors.push({
288
+ path: "conformance.timelineEventTypes",
289
+ message: "conformance.timelineEventTypes must be an array of strings."
290
+ });
291
+ }
292
+ if (!Array.isArray(conformance.telemetryEventTypes) || conformance.telemetryEventTypes.some((eventType) => typeof eventType !== "string")) {
293
+ errors.push({
294
+ path: "conformance.telemetryEventTypes",
295
+ message: "conformance.telemetryEventTypes must be an array of strings."
296
+ });
297
+ }
298
+ }
299
+ function validateHashes(hashes, errors) {
300
+ if (!isRecord(hashes)) {
301
+ errors.push({
302
+ path: "hashes",
303
+ message: "hashes must be an object."
304
+ });
305
+ return;
306
+ }
307
+ for (const field of ["manifest", "report", "checks", "artifact"]) {
308
+ const value = hashes[field];
309
+ if (typeof value !== "string" || !/^[a-f0-9]{64}$/.test(value)) {
310
+ errors.push({
311
+ path: `hashes.${field}`,
312
+ message: `${field} hash must be a sha256 hex string.`
313
+ });
314
+ }
315
+ }
316
+ }
317
+ function sanitizeConformanceArtifactOutput(value, forbiddenOutputValues) {
318
+ const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);
319
+ return redactX402Secrets(
320
+ replaceForbiddenValues(value, forbiddenValues, /* @__PURE__ */ new WeakSet())
321
+ );
322
+ }
323
+ function replaceForbiddenValues(value, forbiddenValues, seen) {
324
+ if (typeof value === "string") {
325
+ return forbiddenValues.reduce(
326
+ (current, forbidden) => current.split(forbidden).join("[REDACTED]"),
327
+ value
328
+ );
329
+ }
330
+ if (value === null || typeof value !== "object" || value instanceof Date) {
331
+ return value;
332
+ }
333
+ if (seen.has(value)) {
334
+ return "[Circular]";
335
+ }
336
+ seen.add(value);
337
+ if (Array.isArray(value)) {
338
+ const entries2 = value.map(
339
+ (entry) => replaceForbiddenValues(entry, forbiddenValues, seen)
340
+ );
341
+ seen.delete(value);
342
+ return entries2;
343
+ }
344
+ const entries = Object.fromEntries(
345
+ Object.entries(value).map(([key, entry]) => [
346
+ key,
347
+ replaceForbiddenValues(entry, forbiddenValues, seen)
348
+ ])
349
+ );
350
+ seen.delete(value);
351
+ return entries;
352
+ }
353
+ function cloneSerializable(value) {
354
+ if (value === void 0) {
355
+ return value;
356
+ }
357
+ return JSON.parse(JSON.stringify(value));
358
+ }
359
+ function hashStableJson(value) {
360
+ return createHash("sha256").update(stableStringify(value)).digest("hex");
361
+ }
362
+ function hashArtifactContent(artifact) {
363
+ return hashStableJson(artifact);
364
+ }
365
+ function stableStringify(value) {
366
+ if (value === null || typeof value !== "object") {
367
+ return JSON.stringify(value);
368
+ }
369
+ if (Array.isArray(value)) {
370
+ return `[${value.map((entry) => stableStringify(entry)).join(",")}]`;
371
+ }
372
+ const entries = Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right));
373
+ return `{${entries.map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`).join(",")}}`;
374
+ }
375
+ function validateNonEmptyString(value, path, errors) {
376
+ if (typeof value !== "string" || value.length === 0) {
377
+ errors.push({
378
+ path,
379
+ message: `${path} must be a non-empty string.`
380
+ });
381
+ }
382
+ }
383
+ function validateIsoTimestamp(value, path, errors) {
384
+ if (typeof value !== "string" || Number.isNaN(Date.parse(value))) {
385
+ errors.push({
386
+ path,
387
+ message: `${path} must be an ISO timestamp.`
388
+ });
389
+ }
390
+ }
391
+ function formatValidationErrors(errors) {
392
+ return errors.map((error) => `${error.path}: ${error.message}`).join("; ");
393
+ }
394
+ function formatInlineList(values) {
395
+ return values && values.length > 0 ? values.join(", ") : "none";
396
+ }
397
+ function isRecord(value) {
398
+ return typeof value === "object" && value !== null && !Array.isArray(value);
399
+ }
400
+
401
+ export {
402
+ PROVIDER_CONFORMANCE_ARTIFACT_SCHEMA_VERSION,
403
+ createProviderConformanceArtifact,
404
+ validateProviderConformanceArtifact,
405
+ assertProviderConformanceArtifact,
406
+ formatProviderConformanceArtifact
407
+ };
408
+ //# sourceMappingURL=chunk-UU2ZG7P7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providerConformanceArtifact.ts"],"sourcesContent":["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"],"mappings":"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","names":["entries"]}