@t2000/discovery 10.32.0 → 10.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -384,5 +384,3 @@ exports.extractEndpoints = extractEndpoints;
384
384
  exports.fetchOpenApi = fetchOpenApi;
385
385
  exports.probe = probe;
386
386
  exports.validateOpenApi = validateOpenApi;
387
- //# sourceMappingURL=index.cjs.map
388
- //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -373,5 +373,3 @@ async function check(origin, options = {}) {
373
373
  }
374
374
 
375
375
  export { KNOWN_SUI_CURRENCIES, SUI_USDC_TESTNET_TYPE, SUI_USDC_TYPE, VALIDATION_CODES, check, discover, extractEndpoints, fetchOpenApi, probe, validateOpenApi };
376
- //# sourceMappingURL=index.js.map
377
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@t2000/discovery",
3
- "version": "10.32.0",
3
+ "version": "10.32.2",
4
+ "engines": {
5
+ "node": ">=20"
6
+ },
4
7
  "description": "Probe and validate x402 seller endpoints on Sui — 402 accepts[] / WWW-Authenticate probing plus OpenAPI paid-endpoint extraction. The discovery half of the @t2000 serve stack.",
5
8
  "type": "module",
6
9
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/discover.ts","../src/probe.ts","../src/check.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export const SUI_USDC_TYPE =\n '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC';\n\nexport const SUI_USDC_TESTNET_TYPE =\n '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC';\n\nexport const KNOWN_SUI_CURRENCIES = new Set([SUI_USDC_TYPE, SUI_USDC_TESTNET_TYPE]);\n\nexport const SUI_ADDRESS_REGEX = /^0x[a-fA-F0-9]{1,64}$/;\n\nexport const VALIDATION_CODES = {\n OPENAPI_FETCH_FAILED: 'OPENAPI_FETCH_FAILED',\n OPENAPI_PARSE_FAILED: 'OPENAPI_PARSE_FAILED',\n OPENAPI_VERSION_INVALID: 'OPENAPI_VERSION_INVALID',\n NO_PAID_ENDPOINTS: 'NO_PAID_ENDPOINTS',\n MISSING_402_RESPONSE: 'MISSING_402_RESPONSE',\n MISSING_REQUEST_BODY: 'MISSING_REQUEST_BODY',\n MISSING_PROTOCOLS: 'MISSING_PROTOCOLS',\n PROTOCOL_NOT_MPP: 'PROTOCOL_NOT_MPP',\n MISSING_PRICING: 'MISSING_PRICING',\n INVALID_PRICE_FORMAT: 'INVALID_PRICE_FORMAT',\n MISSING_GUIDANCE: 'MISSING_GUIDANCE',\n HIGH_ROUTE_COUNT: 'HIGH_ROUTE_COUNT',\n PROBE_FAILED: 'PROBE_FAILED',\n PROBE_NOT_402: 'PROBE_NOT_402',\n PROBE_INVALID_RECIPIENT: 'PROBE_INVALID_RECIPIENT',\n PROBE_UNKNOWN_CURRENCY: 'PROBE_UNKNOWN_CURRENCY',\n PROBE_REALM_MISMATCH: 'PROBE_REALM_MISMATCH',\n} as const;\n","import { VALIDATION_CODES } from './constants.js';\nimport type {\n OpenApiDocument,\n DiscoverResult,\n DiscoveredEndpoint,\n ValidationIssue,\n} from './types.js';\n\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\nexport async function fetchOpenApi(origin: string): Promise<OpenApiDocument> {\n const url = new URL('/openapi.json', origin).toString();\n const res = await fetch(url, {\n headers: { accept: 'application/json' },\n signal: AbortSignal.timeout(15_000),\n });\n if (!res.ok) {\n throw new Error(`GET ${url} returned ${res.status}`);\n }\n return (await res.json()) as OpenApiDocument;\n}\n\nexport function extractEndpoints(doc: OpenApiDocument): DiscoveredEndpoint[] {\n const endpoints: DiscoveredEndpoint[] = [];\n\n for (const [path, pathItem] of Object.entries(doc.paths ?? {})) {\n for (const method of HTTP_METHODS) {\n const op = pathItem[method];\n if (!op || !op['x-payment-info']) continue;\n\n endpoints.push({\n path,\n method: method.toUpperCase(),\n operationId: op.operationId,\n summary: op.summary,\n paymentInfo: op['x-payment-info'],\n hasRequestBody: !!op.requestBody,\n has402Response: !!op.responses?.['402'],\n });\n }\n }\n\n return endpoints;\n}\n\nexport function validateOpenApi(\n doc: OpenApiDocument,\n endpoints: DiscoveredEndpoint[],\n _origin?: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n if (!doc.openapi?.startsWith('3.1')) {\n issues.push({\n code: VALIDATION_CODES.OPENAPI_VERSION_INVALID,\n severity: 'error',\n message: `Expected OpenAPI 3.1.x, got \"${doc.openapi}\"`,\n });\n }\n\n if (endpoints.length === 0) {\n issues.push({\n code: VALIDATION_CODES.NO_PAID_ENDPOINTS,\n severity: 'error',\n message: 'No operations with x-payment-info found',\n });\n return issues;\n }\n\n if (endpoints.length > 80) {\n issues.push({\n code: VALIDATION_CODES.HIGH_ROUTE_COUNT,\n severity: 'warning',\n message: `High route count (${endpoints.length}) may exceed agent token budgets for zero-hop injection`,\n });\n }\n\n if (!doc.info?.['x-guidance'] && !doc['x-service-info']) {\n issues.push({\n code: VALIDATION_CODES.MISSING_GUIDANCE,\n severity: 'warning',\n message: 'No x-guidance in info or x-service-info at root — agents may lack context',\n });\n }\n\n for (const ep of endpoints) {\n const loc = `${ep.method} ${ep.path}`;\n\n if (!ep.has402Response) {\n issues.push({\n code: VALIDATION_CODES.MISSING_402_RESPONSE,\n severity: 'error',\n message: `Missing 402 response definition`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n if (['POST', 'PUT', 'PATCH'].includes(ep.method) && !ep.hasRequestBody) {\n issues.push({\n code: VALIDATION_CODES.MISSING_REQUEST_BODY,\n severity: 'warning',\n message: `${loc} — POST/PUT/PATCH without requestBody schema`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n const pi = ep.paymentInfo;\n\n if (!pi.protocols || pi.protocols.length === 0) {\n issues.push({\n code: VALIDATION_CODES.MISSING_PROTOCOLS,\n severity: 'warning',\n message: `${loc} — x-payment-info missing \"protocols\" field`,\n path: ep.path,\n method: ep.method,\n });\n } else if (!pi.protocols.includes('mpp')) {\n issues.push({\n code: VALIDATION_CODES.PROTOCOL_NOT_MPP,\n severity: 'error',\n message: `${loc} — protocols ${JSON.stringify(pi.protocols)} does not include \"mpp\"`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n const mode = pi.pricingMode;\n if (mode === 'fixed' && !pi.price) {\n issues.push({\n code: VALIDATION_CODES.MISSING_PRICING,\n severity: 'error',\n message: `${loc} — pricingMode \"fixed\" but no price specified`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n if (pi.price && !/^\\$?\\d+(\\.\\d+)?$/.test(pi.price)) {\n issues.push({\n code: VALIDATION_CODES.INVALID_PRICE_FORMAT,\n severity: 'warning',\n message: `${loc} — price \"${pi.price}\" may not be parseable`,\n path: ep.path,\n method: ep.method,\n });\n }\n }\n\n return issues;\n}\n\nexport async function discover(origin: string): Promise<DiscoverResult> {\n const normalizedOrigin = origin.startsWith('http') ? origin : `https://${origin}`;\n const specUrl = new URL('/openapi.json', normalizedOrigin).toString();\n\n try {\n const doc = await fetchOpenApi(normalizedOrigin);\n const endpoints = extractEndpoints(doc);\n const issues = validateOpenApi(doc, endpoints, normalizedOrigin);\n\n const hasErrors = issues.some(i => i.severity === 'error');\n\n return {\n ok: !hasErrors,\n origin: normalizedOrigin,\n specUrl,\n title: doc.info?.title ?? 'Unknown',\n version: doc.info?.version ?? '0.0.0',\n guidance: doc.info?.['x-guidance'] as string | undefined,\n endpoints,\n totalEndpoints: Object.keys(doc.paths ?? {}).length,\n paidEndpoints: endpoints.length,\n issues,\n };\n } catch (err) {\n return {\n ok: false,\n origin: normalizedOrigin,\n specUrl,\n title: 'Unknown',\n version: '0.0.0',\n endpoints: [],\n totalEndpoints: 0,\n paidEndpoints: 0,\n issues: [\n {\n code: VALIDATION_CODES.OPENAPI_FETCH_FAILED,\n severity: 'error',\n message: `Failed to fetch OpenAPI: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n","import { SUI_ADDRESS_REGEX, KNOWN_SUI_CURRENCIES, VALIDATION_CODES } from './constants.js';\nimport type { ProbeResult, ValidationIssue } from './types.js';\n\ninterface MppChallenge {\n amount?: string;\n currency?: string;\n recipient?: string;\n realm?: string;\n network?: string;\n [key: string]: unknown;\n}\n\nfunction decodeRequest(encoded: string): Record<string, string> {\n try {\n const json = Buffer.from(encoded, 'base64').toString('utf-8');\n const parsed = JSON.parse(json);\n if (parsed && typeof parsed === 'object') return parsed;\n } catch {}\n return {};\n}\n\ninterface X402Accept {\n scheme?: unknown;\n network?: unknown;\n payTo?: unknown;\n asset?: unknown;\n maxAmountRequired?: unknown;\n resource?: unknown;\n}\n\n/** x402 `accepts[]` entry → the MPP challenge shape the rest of probe() reads.\n * `maxAmountRequired` is raw 6-decimal USDC units; the header dialect's\n * `amount` is a decimal string — convert (known-USDC only) so `amount` means\n * the same thing whichever dialect answered. */\nfunction challengeFromAccepts(accepts: unknown): MppChallenge | null {\n if (!Array.isArray(accepts)) return null;\n const sui = accepts.filter(\n (a: X402Accept) =>\n a &&\n typeof a === 'object' &&\n a.scheme === 'exact' &&\n typeof a.network === 'string' &&\n a.network.startsWith('sui'),\n ) as X402Accept[];\n const entry = sui.find(a => a.network === 'sui:mainnet') ?? sui[0];\n if (!entry || typeof entry.payTo !== 'string') return null;\n\n const challenge: MppChallenge = { recipient: entry.payTo };\n if (typeof entry.asset === 'string') challenge.currency = entry.asset;\n if (typeof entry.maxAmountRequired === 'string' && /^\\d+$/.test(entry.maxAmountRequired)) {\n challenge.amount =\n typeof entry.asset === 'string' && KNOWN_SUI_CURRENCIES.has(entry.asset)\n ? (Number(entry.maxAmountRequired) / 1_000_000).toString()\n : entry.maxAmountRequired;\n }\n if (typeof entry.resource === 'string') {\n try {\n challenge.realm = new URL(entry.resource).hostname;\n } catch {}\n }\n return challenge;\n}\n\nfunction extractChallenge(headers: Headers, body: unknown): MppChallenge | null {\n const wwwAuth = headers.get('www-authenticate');\n if (wwwAuth) {\n const params: Record<string, string> = {};\n for (const match of wwwAuth.matchAll(/(\\w+)=\"([^\"]*)\"/g)) {\n params[match[1]] = match[2];\n }\n\n // mppx encodes amount/currency/recipient inside a base64 `request` field\n if (params.request) {\n const decoded = decodeRequest(params.request);\n Object.assign(params, decoded);\n }\n\n if (params.recipient || params.currency) return params;\n }\n\n if (body && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n if (b.recipient || b.currency || b.amount) return b as MppChallenge;\n\n if (b.paymentRequirements && typeof b.paymentRequirements === 'object') {\n return b.paymentRequirements as MppChallenge;\n }\n\n // x402 body-only sellers (@t2000/serve emits accepts[] and no\n // WWW-Authenticate) — the dialect this probe rejected until 0.2.2.\n const fromAccepts = challengeFromAccepts(b.accepts);\n if (fromAccepts) return fromAccepts;\n }\n\n return null;\n}\n\nexport async function probe(url: string, expectedOrigin?: string): Promise<ProbeResult> {\n const issues: ValidationIssue[] = [];\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(15_000),\n redirect: 'follow',\n });\n\n if (res.status !== 402) {\n return {\n ok: false,\n url,\n statusCode: res.status,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_NOT_402,\n severity: 'error',\n message: `Expected 402 Payment Required, got ${res.status}`,\n },\n ],\n };\n }\n\n let body: unknown;\n try {\n body = await res.json();\n } catch {\n body = null;\n }\n\n const challenge = extractChallenge(res.headers, body);\n if (!challenge) {\n return {\n ok: false,\n url,\n statusCode: 402,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_FAILED,\n severity: 'error',\n message: 'Got 402 but could not extract payment challenge from headers or body',\n },\n ],\n };\n }\n\n if (challenge.recipient && !SUI_ADDRESS_REGEX.test(challenge.recipient)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_INVALID_RECIPIENT,\n severity: 'error',\n message: `Recipient \"${challenge.recipient}\" is not a valid Sui address`,\n });\n }\n\n if (challenge.currency && !KNOWN_SUI_CURRENCIES.has(challenge.currency)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_UNKNOWN_CURRENCY,\n severity: 'warning',\n message: `Currency \"${challenge.currency}\" is not a recognized Sui USDC type`,\n });\n }\n\n if (expectedOrigin && challenge.realm) {\n const expectedHost = new URL(expectedOrigin).hostname;\n if (challenge.realm !== expectedHost && !challenge.realm.endsWith(`.${expectedHost}`)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_REALM_MISMATCH,\n severity: 'error',\n message: `Payment realm \"${challenge.realm}\" does not match origin host \"${expectedHost}\"`,\n });\n }\n }\n\n const hasErrors = issues.some(i => i.severity === 'error');\n\n return {\n ok: !hasErrors,\n url,\n statusCode: 402,\n hasSuiPayment: true,\n recipient: challenge.recipient,\n currency: challenge.currency,\n amount: challenge.amount,\n realm: challenge.realm,\n issues,\n };\n } catch (err) {\n return {\n ok: false,\n url,\n statusCode: 0,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_FAILED,\n severity: 'error',\n message: `Probe failed: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n","import { discover } from './discover.js';\nimport { probe } from './probe.js';\nimport type { CheckResult } from './types.js';\n\nexport interface CheckOptions {\n probeEndpoint?: boolean;\n}\n\nexport async function check(\n origin: string,\n options: CheckOptions = {},\n): Promise<CheckResult> {\n const { probeEndpoint = true } = options;\n\n const normalizedOrigin = origin.startsWith('http') ? origin : `https://${origin}`;\n const discovery = await discover(normalizedOrigin);\n\n let probeResult = undefined;\n if (probeEndpoint && discovery.endpoints.length > 0) {\n const firstPost = discovery.endpoints.find(e => e.method === 'POST');\n const target = firstPost ?? discovery.endpoints[0];\n const probeUrl = new URL(target.path, normalizedOrigin).toString();\n probeResult = await probe(probeUrl, normalizedOrigin);\n }\n\n const allIssues = [\n ...discovery.issues,\n ...(probeResult?.issues ?? []),\n ];\n\n const errors = allIssues.filter(i => i.severity === 'error').length;\n const warnings = allIssues.filter(i => i.severity === 'warning').length;\n\n return {\n ok: errors === 0,\n origin: normalizedOrigin,\n discovery,\n probe: probeResult,\n summary: {\n totalIssues: allIssues.length,\n errors,\n warnings,\n },\n };\n}\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/discover.ts","../src/probe.ts","../src/check.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const SUI_USDC_TYPE =\n '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC';\n\nexport const SUI_USDC_TESTNET_TYPE =\n '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC';\n\nexport const KNOWN_SUI_CURRENCIES = new Set([SUI_USDC_TYPE, SUI_USDC_TESTNET_TYPE]);\n\nexport const SUI_ADDRESS_REGEX = /^0x[a-fA-F0-9]{1,64}$/;\n\nexport const VALIDATION_CODES = {\n OPENAPI_FETCH_FAILED: 'OPENAPI_FETCH_FAILED',\n OPENAPI_PARSE_FAILED: 'OPENAPI_PARSE_FAILED',\n OPENAPI_VERSION_INVALID: 'OPENAPI_VERSION_INVALID',\n NO_PAID_ENDPOINTS: 'NO_PAID_ENDPOINTS',\n MISSING_402_RESPONSE: 'MISSING_402_RESPONSE',\n MISSING_REQUEST_BODY: 'MISSING_REQUEST_BODY',\n MISSING_PROTOCOLS: 'MISSING_PROTOCOLS',\n PROTOCOL_NOT_MPP: 'PROTOCOL_NOT_MPP',\n MISSING_PRICING: 'MISSING_PRICING',\n INVALID_PRICE_FORMAT: 'INVALID_PRICE_FORMAT',\n MISSING_GUIDANCE: 'MISSING_GUIDANCE',\n HIGH_ROUTE_COUNT: 'HIGH_ROUTE_COUNT',\n PROBE_FAILED: 'PROBE_FAILED',\n PROBE_NOT_402: 'PROBE_NOT_402',\n PROBE_INVALID_RECIPIENT: 'PROBE_INVALID_RECIPIENT',\n PROBE_UNKNOWN_CURRENCY: 'PROBE_UNKNOWN_CURRENCY',\n PROBE_REALM_MISMATCH: 'PROBE_REALM_MISMATCH',\n} as const;\n","import { VALIDATION_CODES } from './constants.js';\nimport type {\n OpenApiDocument,\n DiscoverResult,\n DiscoveredEndpoint,\n ValidationIssue,\n} from './types.js';\n\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\nexport async function fetchOpenApi(origin: string): Promise<OpenApiDocument> {\n const url = new URL('/openapi.json', origin).toString();\n const res = await fetch(url, {\n headers: { accept: 'application/json' },\n signal: AbortSignal.timeout(15_000),\n });\n if (!res.ok) {\n throw new Error(`GET ${url} returned ${res.status}`);\n }\n return (await res.json()) as OpenApiDocument;\n}\n\nexport function extractEndpoints(doc: OpenApiDocument): DiscoveredEndpoint[] {\n const endpoints: DiscoveredEndpoint[] = [];\n\n for (const [path, pathItem] of Object.entries(doc.paths ?? {})) {\n for (const method of HTTP_METHODS) {\n const op = pathItem[method];\n if (!op || !op['x-payment-info']) continue;\n\n endpoints.push({\n path,\n method: method.toUpperCase(),\n operationId: op.operationId,\n summary: op.summary,\n paymentInfo: op['x-payment-info'],\n hasRequestBody: !!op.requestBody,\n has402Response: !!op.responses?.['402'],\n });\n }\n }\n\n return endpoints;\n}\n\nexport function validateOpenApi(\n doc: OpenApiDocument,\n endpoints: DiscoveredEndpoint[],\n _origin?: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n if (!doc.openapi?.startsWith('3.1')) {\n issues.push({\n code: VALIDATION_CODES.OPENAPI_VERSION_INVALID,\n severity: 'error',\n message: `Expected OpenAPI 3.1.x, got \"${doc.openapi}\"`,\n });\n }\n\n if (endpoints.length === 0) {\n issues.push({\n code: VALIDATION_CODES.NO_PAID_ENDPOINTS,\n severity: 'error',\n message: 'No operations with x-payment-info found',\n });\n return issues;\n }\n\n if (endpoints.length > 80) {\n issues.push({\n code: VALIDATION_CODES.HIGH_ROUTE_COUNT,\n severity: 'warning',\n message: `High route count (${endpoints.length}) may exceed agent token budgets for zero-hop injection`,\n });\n }\n\n if (!doc.info?.['x-guidance'] && !doc['x-service-info']) {\n issues.push({\n code: VALIDATION_CODES.MISSING_GUIDANCE,\n severity: 'warning',\n message: 'No x-guidance in info or x-service-info at root — agents may lack context',\n });\n }\n\n for (const ep of endpoints) {\n const loc = `${ep.method} ${ep.path}`;\n\n if (!ep.has402Response) {\n issues.push({\n code: VALIDATION_CODES.MISSING_402_RESPONSE,\n severity: 'error',\n message: `Missing 402 response definition`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n if (['POST', 'PUT', 'PATCH'].includes(ep.method) && !ep.hasRequestBody) {\n issues.push({\n code: VALIDATION_CODES.MISSING_REQUEST_BODY,\n severity: 'warning',\n message: `${loc} — POST/PUT/PATCH without requestBody schema`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n const pi = ep.paymentInfo;\n\n if (!pi.protocols || pi.protocols.length === 0) {\n issues.push({\n code: VALIDATION_CODES.MISSING_PROTOCOLS,\n severity: 'warning',\n message: `${loc} — x-payment-info missing \"protocols\" field`,\n path: ep.path,\n method: ep.method,\n });\n } else if (!pi.protocols.includes('mpp')) {\n issues.push({\n code: VALIDATION_CODES.PROTOCOL_NOT_MPP,\n severity: 'error',\n message: `${loc} — protocols ${JSON.stringify(pi.protocols)} does not include \"mpp\"`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n const mode = pi.pricingMode;\n if (mode === 'fixed' && !pi.price) {\n issues.push({\n code: VALIDATION_CODES.MISSING_PRICING,\n severity: 'error',\n message: `${loc} — pricingMode \"fixed\" but no price specified`,\n path: ep.path,\n method: ep.method,\n });\n }\n\n if (pi.price && !/^\\$?\\d+(\\.\\d+)?$/.test(pi.price)) {\n issues.push({\n code: VALIDATION_CODES.INVALID_PRICE_FORMAT,\n severity: 'warning',\n message: `${loc} — price \"${pi.price}\" may not be parseable`,\n path: ep.path,\n method: ep.method,\n });\n }\n }\n\n return issues;\n}\n\nexport async function discover(origin: string): Promise<DiscoverResult> {\n const normalizedOrigin = origin.startsWith('http') ? origin : `https://${origin}`;\n const specUrl = new URL('/openapi.json', normalizedOrigin).toString();\n\n try {\n const doc = await fetchOpenApi(normalizedOrigin);\n const endpoints = extractEndpoints(doc);\n const issues = validateOpenApi(doc, endpoints, normalizedOrigin);\n\n const hasErrors = issues.some(i => i.severity === 'error');\n\n return {\n ok: !hasErrors,\n origin: normalizedOrigin,\n specUrl,\n title: doc.info?.title ?? 'Unknown',\n version: doc.info?.version ?? '0.0.0',\n guidance: doc.info?.['x-guidance'] as string | undefined,\n endpoints,\n totalEndpoints: Object.keys(doc.paths ?? {}).length,\n paidEndpoints: endpoints.length,\n issues,\n };\n } catch (err) {\n return {\n ok: false,\n origin: normalizedOrigin,\n specUrl,\n title: 'Unknown',\n version: '0.0.0',\n endpoints: [],\n totalEndpoints: 0,\n paidEndpoints: 0,\n issues: [\n {\n code: VALIDATION_CODES.OPENAPI_FETCH_FAILED,\n severity: 'error',\n message: `Failed to fetch OpenAPI: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n","import { SUI_ADDRESS_REGEX, KNOWN_SUI_CURRENCIES, VALIDATION_CODES } from './constants.js';\nimport type { ProbeResult, ValidationIssue } from './types.js';\n\ninterface MppChallenge {\n amount?: string;\n currency?: string;\n recipient?: string;\n realm?: string;\n network?: string;\n [key: string]: unknown;\n}\n\nfunction decodeRequest(encoded: string): Record<string, string> {\n try {\n const json = Buffer.from(encoded, 'base64').toString('utf-8');\n const parsed = JSON.parse(json);\n if (parsed && typeof parsed === 'object') return parsed;\n } catch {}\n return {};\n}\n\ninterface X402Accept {\n scheme?: unknown;\n network?: unknown;\n payTo?: unknown;\n asset?: unknown;\n maxAmountRequired?: unknown;\n resource?: unknown;\n}\n\n/** x402 `accepts[]` entry → the MPP challenge shape the rest of probe() reads.\n * `maxAmountRequired` is raw 6-decimal USDC units; the header dialect's\n * `amount` is a decimal string — convert (known-USDC only) so `amount` means\n * the same thing whichever dialect answered. */\nfunction challengeFromAccepts(accepts: unknown): MppChallenge | null {\n if (!Array.isArray(accepts)) return null;\n const sui = accepts.filter(\n (a: X402Accept) =>\n a &&\n typeof a === 'object' &&\n a.scheme === 'exact' &&\n typeof a.network === 'string' &&\n a.network.startsWith('sui'),\n ) as X402Accept[];\n const entry = sui.find(a => a.network === 'sui:mainnet') ?? sui[0];\n if (!entry || typeof entry.payTo !== 'string') return null;\n\n const challenge: MppChallenge = { recipient: entry.payTo };\n if (typeof entry.asset === 'string') challenge.currency = entry.asset;\n if (typeof entry.maxAmountRequired === 'string' && /^\\d+$/.test(entry.maxAmountRequired)) {\n challenge.amount =\n typeof entry.asset === 'string' && KNOWN_SUI_CURRENCIES.has(entry.asset)\n ? (Number(entry.maxAmountRequired) / 1_000_000).toString()\n : entry.maxAmountRequired;\n }\n if (typeof entry.resource === 'string') {\n try {\n challenge.realm = new URL(entry.resource).hostname;\n } catch {}\n }\n return challenge;\n}\n\nfunction extractChallenge(headers: Headers, body: unknown): MppChallenge | null {\n const wwwAuth = headers.get('www-authenticate');\n if (wwwAuth) {\n const params: Record<string, string> = {};\n for (const match of wwwAuth.matchAll(/(\\w+)=\"([^\"]*)\"/g)) {\n params[match[1]] = match[2];\n }\n\n // mppx encodes amount/currency/recipient inside a base64 `request` field\n if (params.request) {\n const decoded = decodeRequest(params.request);\n Object.assign(params, decoded);\n }\n\n if (params.recipient || params.currency) return params;\n }\n\n if (body && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n if (b.recipient || b.currency || b.amount) return b as MppChallenge;\n\n if (b.paymentRequirements && typeof b.paymentRequirements === 'object') {\n return b.paymentRequirements as MppChallenge;\n }\n\n // x402 body-only sellers (@t2000/serve emits accepts[] and no\n // WWW-Authenticate) — the dialect this probe rejected until 0.2.2.\n const fromAccepts = challengeFromAccepts(b.accepts);\n if (fromAccepts) return fromAccepts;\n }\n\n return null;\n}\n\nexport async function probe(url: string, expectedOrigin?: string): Promise<ProbeResult> {\n const issues: ValidationIssue[] = [];\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(15_000),\n redirect: 'follow',\n });\n\n if (res.status !== 402) {\n return {\n ok: false,\n url,\n statusCode: res.status,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_NOT_402,\n severity: 'error',\n message: `Expected 402 Payment Required, got ${res.status}`,\n },\n ],\n };\n }\n\n let body: unknown;\n try {\n body = await res.json();\n } catch {\n body = null;\n }\n\n const challenge = extractChallenge(res.headers, body);\n if (!challenge) {\n return {\n ok: false,\n url,\n statusCode: 402,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_FAILED,\n severity: 'error',\n message: 'Got 402 but could not extract payment challenge from headers or body',\n },\n ],\n };\n }\n\n if (challenge.recipient && !SUI_ADDRESS_REGEX.test(challenge.recipient)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_INVALID_RECIPIENT,\n severity: 'error',\n message: `Recipient \"${challenge.recipient}\" is not a valid Sui address`,\n });\n }\n\n if (challenge.currency && !KNOWN_SUI_CURRENCIES.has(challenge.currency)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_UNKNOWN_CURRENCY,\n severity: 'warning',\n message: `Currency \"${challenge.currency}\" is not a recognized Sui USDC type`,\n });\n }\n\n if (expectedOrigin && challenge.realm) {\n const expectedHost = new URL(expectedOrigin).hostname;\n if (challenge.realm !== expectedHost && !challenge.realm.endsWith(`.${expectedHost}`)) {\n issues.push({\n code: VALIDATION_CODES.PROBE_REALM_MISMATCH,\n severity: 'error',\n message: `Payment realm \"${challenge.realm}\" does not match origin host \"${expectedHost}\"`,\n });\n }\n }\n\n const hasErrors = issues.some(i => i.severity === 'error');\n\n return {\n ok: !hasErrors,\n url,\n statusCode: 402,\n hasSuiPayment: true,\n recipient: challenge.recipient,\n currency: challenge.currency,\n amount: challenge.amount,\n realm: challenge.realm,\n issues,\n };\n } catch (err) {\n return {\n ok: false,\n url,\n statusCode: 0,\n hasSuiPayment: false,\n issues: [\n {\n code: VALIDATION_CODES.PROBE_FAILED,\n severity: 'error',\n message: `Probe failed: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n","import { discover } from './discover.js';\nimport { probe } from './probe.js';\nimport type { CheckResult } from './types.js';\n\nexport interface CheckOptions {\n probeEndpoint?: boolean;\n}\n\nexport async function check(\n origin: string,\n options: CheckOptions = {},\n): Promise<CheckResult> {\n const { probeEndpoint = true } = options;\n\n const normalizedOrigin = origin.startsWith('http') ? origin : `https://${origin}`;\n const discovery = await discover(normalizedOrigin);\n\n let probeResult = undefined;\n if (probeEndpoint && discovery.endpoints.length > 0) {\n const firstPost = discovery.endpoints.find(e => e.method === 'POST');\n const target = firstPost ?? discovery.endpoints[0];\n const probeUrl = new URL(target.path, normalizedOrigin).toString();\n probeResult = await probe(probeUrl, normalizedOrigin);\n }\n\n const allIssues = [\n ...discovery.issues,\n ...(probeResult?.issues ?? []),\n ];\n\n const errors = allIssues.filter(i => i.severity === 'error').length;\n const warnings = allIssues.filter(i => i.severity === 'warning').length;\n\n return {\n ok: errors === 0,\n origin: normalizedOrigin,\n discovery,\n probe: probeResult,\n summary: {\n totalIssues: allIssues.length,\n errors,\n warnings,\n },\n };\n}\n"]}