opentool 0.7.2 → 0.7.3

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/payment.ts","../src/helpers/payment.ts","../src/payment/index.ts","../src/adapters/mcp.ts","../src/runtime/index.ts","../src/types/index.ts","../src/wallets/constants.ts","../src/wallets/providers/private-key.ts","../src/wallets/providers/turnkey.ts","../src/wallets/index.ts","../src/ai/errors.ts","../src/ai/config.ts","../src/ai/models.ts","../src/ai/tools.ts","../src/ai/messages.ts","../src/ai/client.ts","../src/types/metadata.ts","../src/utils/esbuild.ts","../src/utils/module-loader.ts","../src/cli/shared/metadata.ts","../src/cli/validate.ts","../src/cli/generate-metadata.ts"],"names":["z","context","path","fs","HTTP_METHODS","http","createPublicClient","createWalletClient","tokens","base","resolve","payload","path2","path3","path4","fs3","fs4","normalizeInputSchema","collectHttpHandlers","toHttpHandlerMap","zodToJsonSchema","isPlainObject","path6","fs5"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const PAYMENT_SCHEMA_VERSION = 1 as const;\nexport const paymentSchemaVersionSchema = z.literal(PAYMENT_SCHEMA_VERSION);\nexport type PaymentSchemaVersion = z.infer<typeof paymentSchemaVersionSchema>;\n\nexport const decimalStringSchema = z\n .string()\n .regex(/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/, \"Value must be a positive decimal string\");\n\nexport const currencySchema = z.object({\n code: z\n .string()\n .min(2)\n .max(12)\n .transform((value) => value.toUpperCase()),\n symbol: z.string().min(1).max(6).optional(),\n decimals: z.number().int().min(0).max(36).optional(),\n kind: z.enum([\"fiat\", \"crypto\"]).default(\"crypto\").optional(),\n description: z.string().optional(),\n});\nexport type Currency = z.infer<typeof currencySchema>;\n\nexport const paymentAmountSchema = z.object({\n value: decimalStringSchema,\n currency: currencySchema,\n display: z.string().optional(),\n});\nexport type PaymentAmount = z.infer<typeof paymentAmountSchema>;\n\nexport const cryptoAssetSchema = z.object({\n symbol: z.string().min(2).max(12),\n network: z.string().min(1).optional(),\n chainId: z.number().int().min(0).optional(),\n address: z.string().min(1).optional(),\n decimals: z.number().int().min(0).max(36).optional(),\n standard: z.enum([\"erc20\", \"spl\", \"custom\"]).default(\"erc20\").optional(),\n description: z.string().optional(),\n});\nexport type CryptoAsset = z.infer<typeof cryptoAssetSchema>;\n\nexport const facilitatorConfigSchema = z.object({\n url: z.string().url(),\n vendor: z.string().optional(),\n verifyPath: z.string().default(\"/verify\").optional(),\n settlePath: z.string().default(\"/settle\").optional(),\n apiKey: z.string().optional(),\n apiKeyEnv: z.string().optional(),\n apiKeyHeader: z.string().default(\"Authorization\").optional(),\n headers: z.record(z.string(), z.string()).optional(),\n timeoutMs: z.number().int().positive().optional(),\n});\nexport type FacilitatorConfig = z.infer<typeof facilitatorConfigSchema>;\n\nexport const settlementTermsSchema = z.object({\n windowSeconds: z.number().int().positive().optional(),\n targetConfirmations: z.number().int().positive().optional(),\n finalityDescription: z.string().optional(),\n slaDescription: z.string().optional(),\n});\nexport type SettlementTerms = z.infer<typeof settlementTermsSchema>;\n\nexport const paymentFieldSchema = z.object({\n key: z.string().min(1),\n label: z.string().min(1),\n required: z.boolean().default(true).optional(),\n description: z.string().optional(),\n example: z.string().optional(),\n});\nexport type PaymentField = z.infer<typeof paymentFieldSchema>;\n\nexport const x402ProofSchema = z.object({\n mode: z.literal(\"x402\"),\n scheme: z.string().min(1),\n network: z.string().min(1),\n version: z.number().int().min(1).optional(),\n facilitator: facilitatorConfigSchema.optional(),\n verifier: z.string().optional(),\n});\nexport type X402ProofConfig = z.infer<typeof x402ProofSchema>;\n\nexport const directProofSchema = z.object({\n mode: z.literal(\"direct\"),\n proofTypes: z.array(z.string().min(1)).nonempty(),\n verifier: z.string().optional(),\n instructions: z.string().optional(),\n fields: z.array(paymentFieldSchema).optional(),\n allowsManualReview: z.boolean().optional(),\n});\nexport type DirectProofConfig = z.infer<typeof directProofSchema>;\n\nexport const paymentProofSchema = z.discriminatedUnion(\"mode\", [\n x402ProofSchema,\n directProofSchema,\n]);\nexport type PaymentProofConfig = z.infer<typeof paymentProofSchema>;\n\nexport const paymentOptionSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n amount: paymentAmountSchema,\n asset: cryptoAssetSchema,\n payTo: z.string().min(1),\n resource: z.string().url().optional(),\n proof: paymentProofSchema,\n settlement: settlementTermsSchema.optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nexport type PaymentOption = z.infer<typeof paymentOptionSchema>;\n\nexport const paymentRequirementsSchema = z.object({\n schemaVersion: paymentSchemaVersionSchema,\n message: z.string().optional(),\n title: z.string().optional(),\n resource: z.string().url().optional(),\n accepts: z.array(paymentOptionSchema).nonempty(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n fallbackText: z.string().optional(),\n});\nexport type PaymentRequirementsDefinition = z.infer<\n typeof paymentRequirementsSchema\n>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().min(1),\n scheme: z.string().min(1),\n network: z.string().min(1),\n payload: z.unknown(),\n correlationId: z.string().optional(),\n});\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport const directPaymentPayloadSchema = z.object({\n schemaVersion: z.literal(1),\n optionId: z.string().min(1),\n proofType: z.string().min(1),\n payload: z.unknown(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nexport type DirectPaymentPayload = z.infer<typeof directPaymentPayloadSchema>;\n\nexport const paymentSuccessMetadataSchema = z.object({\n optionId: z.string().min(1),\n verifier: z.string().optional(),\n txHash: z.string().optional(),\n networkId: z.string().optional(),\n amount: paymentAmountSchema.optional(),\n settledAt: z.string().datetime().optional(),\n payload: z.unknown().optional(),\n});\nexport type PaymentSuccessMetadata = z.infer<\n typeof paymentSuccessMetadataSchema\n>;\n\nexport const paymentFailureSchema = z.object({\n reason: z.string().min(1),\n code: z\n .enum([\n \"verifier_not_found\",\n \"verification_failed\",\n \"invalid_payload\",\n \"unsupported_option\",\n \"missing_header\",\n \"unknown\",\n ])\n .default(\"unknown\")\n .optional(),\n retryable: z.boolean().optional(),\n detail: z.unknown().optional(),\n});\nexport type PaymentFailure = z.infer<typeof paymentFailureSchema>;\n","import { z } from \"zod\";\nimport {\n DirectPaymentPayload,\n directPaymentPayloadSchema,\n DirectProofConfig,\n PaymentFailure,\n paymentFailureSchema,\n PaymentOption,\n paymentOptionSchema,\n PaymentRequirementsDefinition,\n paymentRequirementsSchema,\n PaymentSuccessMetadata,\n paymentSuccessMetadataSchema,\n SettlementTerms,\n X402PaymentHeader,\n x402PaymentHeaderSchema,\n X402ProofConfig,\n} from \"../types/payment\";\n\nconst X402_VERSION_DEFAULT = 1;\nconst HEADER_X402 = \"X-PAYMENT\";\nconst HEADER_DIRECT = \"X-PAYMENT-PROOF\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nconst x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface PaymentRequiredBody extends PaymentRequirementsDefinition {\n x402?: X402RequirementsResponse;\n}\n\nexport type PaymentAttempt =\n | {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n }\n | {\n type: \"direct\";\n headerName: typeof HEADER_DIRECT;\n raw: string;\n payload: DirectPaymentPayload;\n };\n\nexport interface ExtractAttemptsResult {\n attempts: PaymentAttempt[];\n failures: PaymentFailure[];\n}\n\nexport interface PaymentVerificationContext {\n attempt: PaymentAttempt;\n option: PaymentOption;\n definition: PaymentRequirementsDefinition;\n settle?: boolean;\n}\n\nexport interface PaymentVerificationResult {\n success: boolean;\n optionId: string;\n attemptType: PaymentAttempt[\"type\"];\n metadata?: PaymentSuccessMetadata;\n failure?: PaymentFailure;\n responseHeaders?: Record<string, string>;\n}\n\nexport type PaymentVerifier = (\n context: PaymentVerificationContext\n) => Promise<PaymentVerificationResult>;\n\nexport interface VerifyPaymentOptions {\n definition: PaymentRequirementsDefinition;\n request?: Request;\n attempts?: PaymentAttempt[];\n settle?: boolean;\n verifiers?: Record<string, PaymentVerifier>;\n fetchImpl?: typeof fetch;\n}\n\nexport function createPaymentRequiredBody(\n definition: PaymentRequirementsDefinition\n): PaymentRequiredBody {\n const parsed = paymentRequirementsSchema.parse(definition);\n const x402Accepts = parsed.accepts\n .filter((option) => option.proof.mode === \"x402\")\n .map((option) =>\n toX402Requirement(option, parsed.resource, option.settlement)\n )\n .filter((value): value is X402Requirement => Boolean(value));\n\n const x402Body: X402RequirementsResponse | undefined =\n x402Accepts.length > 0\n ? {\n x402Version: resolveX402Version(parsed.accepts),\n error: parsed.message ?? \"Payment required\",\n accepts: x402Accepts,\n }\n : undefined;\n\n if (x402Body) {\n return {\n ...parsed,\n x402: x402Body,\n };\n }\n\n return parsed;\n}\n\nexport function paymentRequiredResponse(\n definition: PaymentRequirementsDefinition,\n init?: ResponseInit\n): Response {\n const body = createPaymentRequiredBody(definition);\n const headers = new Headers(init?.headers);\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(body), {\n ...init,\n status: init?.status ?? 402,\n headers,\n });\n}\n\nexport function extractPaymentAttempts(\n source: Request\n): ExtractAttemptsResult {\n const attempts: PaymentAttempt[] = [];\n const failures: PaymentFailure[] = [];\n\n const x402Header = source.headers.get(HEADER_X402);\n if (x402Header) {\n const { attempt, failure } = parseX402Header(x402Header);\n if (attempt) {\n attempts.push(attempt);\n } else if (failure) {\n failures.push(failure);\n }\n }\n\n const directHeader = source.headers.get(HEADER_DIRECT);\n if (directHeader) {\n const { attempt, failure } = parseDirectHeader(directHeader);\n if (attempt) {\n attempts.push(attempt);\n } else if (failure) {\n failures.push(failure);\n }\n }\n\n if (attempts.length === 0 && failures.length === 0) {\n failures.push(\n paymentFailureSchema.parse({\n reason: \"No payment headers present\",\n code: \"missing_header\",\n retryable: false,\n })\n );\n }\n\n return { attempts, failures };\n}\n\nexport async function verifyPayment(\n options: VerifyPaymentOptions\n): Promise<PaymentVerificationResult> {\n const definition = paymentRequirementsSchema.parse(options.definition);\n const attempts = options.attempts\n ? options.attempts\n : options.request\n ? extractPaymentAttempts(options.request).attempts\n : [];\n\n if (attempts.length === 0) {\n return {\n success: false,\n optionId: \"\",\n attemptType: \"direct\",\n failure: paymentFailureSchema.parse({\n reason: \"No payment attempt found\",\n code: \"missing_header\",\n retryable: false,\n }),\n };\n }\n\n for (const attempt of attempts) {\n const option = findMatchingOption(definition, attempt);\n if (!option) {\n continue;\n }\n\n if (attempt.type === \"x402\") {\n const proof = option.proof as X402ProofConfig;\n const verifierId = proof.verifier ?? (proof.facilitator ? \"x402:facilitator\" : undefined);\n if (verifierId === \"x402:facilitator\" && proof.facilitator) {\n const context: PaymentVerificationContext = {\n attempt,\n option,\n definition,\n };\n if (options.settle !== undefined) {\n context.settle = options.settle;\n }\n return runFacilitatorVerifier({\n ...context,\n fetchImpl: options.fetchImpl ?? fetch,\n });\n }\n\n const verifier = verifierId ? options.verifiers?.[verifierId] : undefined;\n if (!verifier) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: `No verifier registered for id: ${verifierId ?? \"(missing)\"}`,\n code: \"verifier_not_found\",\n retryable: false,\n }),\n };\n }\n\n const context: PaymentVerificationContext = {\n attempt,\n option,\n definition,\n };\n if (options.settle !== undefined) {\n context.settle = options.settle;\n }\n return verifier(context);\n }\n\n if (attempt.type === \"direct\") {\n const proof = option.proof as DirectProofConfig;\n const verifierId = proof.verifier ?? `direct:${attempt.payload.proofType}`;\n const verifier = verifierId ? options.verifiers?.[verifierId] : undefined;\n if (!verifier) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: `No verifier registered for id: ${verifierId}`,\n code: \"verifier_not_found\",\n retryable: false,\n }),\n };\n }\n\n const context: PaymentVerificationContext = {\n attempt,\n option,\n definition,\n };\n if (options.settle !== undefined) {\n context.settle = options.settle;\n }\n return verifier(context);\n }\n }\n\n return {\n success: false,\n optionId: \"\",\n attemptType: attempts[0]?.type ?? \"direct\",\n failure: paymentFailureSchema.parse({\n reason: \"No matching payment option for attempt\",\n code: \"unsupported_option\",\n retryable: false,\n }),\n };\n}\n\nexport function createPaymentResponseHeader(\n metadata: PaymentSuccessMetadata\n): string {\n const parsed = paymentSuccessMetadataSchema.parse(metadata);\n return encodeJson(parsed);\n}\n\nfunction parseX402Header(value: string): {\n attempt?: PaymentAttempt;\n failure?: PaymentFailure;\n} {\n try {\n const payload = decodeJson(value, x402PaymentHeaderSchema);\n return {\n attempt: {\n type: \"x402\",\n headerName: HEADER_X402,\n raw: value,\n payload,\n },\n };\n } catch (error) {\n return {\n failure: paymentFailureSchema.parse({\n reason: `Invalid X-PAYMENT header: ${(error as Error).message}`,\n code: \"invalid_payload\",\n retryable: false,\n }),\n };\n }\n}\n\nfunction parseDirectHeader(value: string): {\n attempt?: PaymentAttempt;\n failure?: PaymentFailure;\n} {\n try {\n const payload = decodeJson(value, directPaymentPayloadSchema);\n return {\n attempt: {\n type: \"direct\",\n headerName: HEADER_DIRECT,\n raw: value,\n payload,\n },\n };\n } catch (error) {\n return {\n failure: paymentFailureSchema.parse({\n reason: `Invalid X-PAYMENT-PROOF header: ${(error as Error).message}`,\n code: \"invalid_payload\",\n retryable: false,\n }),\n };\n }\n}\n\nfunction findMatchingOption(\n definition: PaymentRequirementsDefinition,\n attempt: PaymentAttempt\n): PaymentOption | undefined {\n return definition.accepts.find((candidate) => {\n const option = paymentOptionSchema.parse(candidate);\n if (attempt.type === \"x402\" && option.proof.mode === \"x402\") {\n return (\n option.proof.scheme === attempt.payload.scheme &&\n option.proof.network === attempt.payload.network\n );\n }\n\n if (attempt.type === \"direct\" && option.proof.mode === \"direct\") {\n return option.id === attempt.payload.optionId;\n }\n\n return false;\n });\n}\n\nfunction resolveX402Version(options: PaymentOption[]): number {\n const versions: number[] = [];\n for (const option of options) {\n if (option.proof.mode === \"x402\" && option.proof.version) {\n versions.push(option.proof.version);\n }\n }\n return versions.length > 0 ? Math.max(...versions) : X402_VERSION_DEFAULT;\n}\n\nfunction toX402Requirement(\n option: PaymentOption,\n fallbackResource?: string,\n settlement?: SettlementTerms\n): X402Requirement | undefined {\n if (option.proof.mode !== \"x402\") {\n return undefined;\n }\n\n const decimals = resolveDecimals(option);\n const assetAddress = option.asset.address;\n if (!assetAddress) {\n throw new Error(\n `x402 payment option '${option.id}' is missing asset.address`\n );\n }\n\n const units = decimalToBaseUnits(option.amount.value, decimals);\n\n return x402RequirementSchema.parse({\n scheme: option.proof.scheme,\n network: option.proof.network,\n maxAmountRequired: units,\n asset: assetAddress,\n payTo: option.payTo,\n resource: option.resource ?? fallbackResource,\n description: option.description,\n maxTimeoutSeconds: settlement?.windowSeconds,\n extra: {\n symbol: option.asset.symbol,\n currencyCode: option.amount.currency.code,\n decimals,\n },\n });\n}\n\nfunction resolveDecimals(option: PaymentOption): number {\n if (typeof option.asset.decimals === \"number\") {\n return option.asset.decimals;\n }\n if (typeof option.amount.currency.decimals === \"number\") {\n return option.amount.currency.decimals;\n }\n throw new Error(\n `Payment option '${option.id}' must specify asset.decimals or currency.decimals`\n );\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction encodeJson(value: unknown): string {\n const json = JSON.stringify(value);\n return Buffer.from(json, \"utf-8\").toString(\"base64\");\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nasync function runFacilitatorVerifier({\n attempt,\n option,\n definition,\n settle,\n fetchImpl,\n}: PaymentVerificationContext & { fetchImpl: typeof fetch }): Promise<\n PaymentVerificationResult\n> {\n if (option.proof.mode !== \"x402\" || attempt.type !== \"x402\" || !option.proof.facilitator) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: \"Facilitator verifier invoked for non-x402 option\",\n code: \"verification_failed\",\n retryable: false,\n }),\n };\n }\n\n const facilitator = option.proof.facilitator;\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n const requirement = toX402Requirement(option, definition.resource, option.settlement);\n if (!requirement) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: \"Unable to derive x402 requirement for facilitator\",\n code: \"verification_failed\",\n retryable: false,\n }),\n };\n }\n\n const headers = buildFacilitatorHeaders(facilitator);\n const controller = facilitator.timeoutMs\n ? new AbortController()\n : undefined;\n const timeout = facilitator.timeoutMs\n ? setTimeout(() => controller?.abort(), facilitator.timeoutMs)\n : undefined;\n\n try {\n const verifyResponse = await fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n x402Version: attempt.payload.x402Version,\n paymentHeader: attempt.raw,\n paymentRequirements: requirement,\n }),\n signal: controller?.signal ?? null,\n });\n\n if (!verifyResponse.ok) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: `Facilitator verify request failed: ${verifyResponse.status}`,\n code: \"verification_failed\",\n retryable: verifyResponse.status >= 500,\n }),\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n retryable: false,\n }),\n };\n }\n\n if (!settle) {\n return {\n success: true,\n optionId: option.id,\n attemptType: attempt.type,\n metadata: paymentSuccessMetadataSchema.parse({\n optionId: option.id,\n verifier: facilitator.vendor ?? \"facilitator\",\n }),\n };\n }\n\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n const settleResponse = await fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n x402Version: attempt.payload.x402Version,\n paymentHeader: attempt.raw,\n paymentRequirements: requirement,\n }),\n signal: controller?.signal ?? null,\n });\n\n if (!settleResponse.ok) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: `Facilitator settle request failed: ${settleResponse.status}`,\n code: \"verification_failed\",\n retryable: settleResponse.status >= 500,\n }),\n };\n }\n\n const settlePayload = (await settleResponse.json()) as {\n success: boolean;\n error?: string | null;\n txHash?: string | null;\n networkId?: string | null;\n };\n\n if (!settlePayload.success) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: settlePayload.error ?? \"Facilitator settlement failed\",\n code: \"verification_failed\",\n retryable: false,\n }),\n };\n }\n\n const metadata = paymentSuccessMetadataSchema.parse({\n optionId: option.id,\n verifier: facilitator.vendor ?? \"facilitator\",\n txHash: settlePayload.txHash ?? undefined,\n networkId: settlePayload.networkId ?? undefined,\n });\n\n return {\n success: true,\n optionId: option.id,\n attemptType: attempt.type,\n metadata,\n responseHeaders: {\n [HEADER_PAYMENT_RESPONSE]: createPaymentResponseHeader(metadata),\n },\n };\n } catch (error) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: paymentFailureSchema.parse({\n reason: `Facilitator request error: ${(error as Error).message}`,\n code: \"verification_failed\",\n retryable: false,\n }),\n };\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction buildFacilitatorHeaders(config: X402ProofConfig[\"facilitator\"]): Record<string, string> {\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n\n if (config?.headers) {\n Object.assign(headers, config.headers);\n }\n\n const apiKey = resolveFacilitatorApiKey(config);\n if (apiKey) {\n const headerName = config?.apiKeyHeader ?? \"Authorization\";\n headers[headerName] = apiKey;\n }\n\n return headers;\n}\n\nfunction resolveFacilitatorApiKey(\n config: X402ProofConfig[\"facilitator\"]\n): string | undefined {\n if (!config) {\n return undefined;\n }\n if (config.apiKey) {\n return config.apiKey;\n }\n if (config.apiKeyEnv && typeof process !== \"undefined\") {\n return process.env?.[config.apiKeyEnv];\n }\n return undefined;\n}\n\nfunction ensureTrailingSlash(value: string): string {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nexport const PAYMENT_HEADERS = {\n x402: HEADER_X402,\n direct: HEADER_DIRECT,\n response: HEADER_PAYMENT_RESPONSE,\n} as const;\n\nexport { PAYMENT_SCHEMA_VERSION } from \"../types/payment\";\n","import type { PaymentVerifier } from \"../helpers/payment\";\nimport {\n PAYMENT_HEADERS,\n paymentRequiredResponse,\n verifyPayment,\n type PaymentVerificationResult,\n} from \"../helpers/payment\";\nimport {\n PAYMENT_SCHEMA_VERSION,\n paymentOptionSchema,\n type DirectProofConfig,\n type PaymentField,\n type PaymentOption,\n type PaymentRequirementsDefinition,\n type PaymentSuccessMetadata,\n type SettlementTerms,\n type X402ProofConfig,\n} from \"../types/payment\";\n\nconst DEFAULT_ID_X402 = \"x402\";\nconst DEFAULT_ID_402 = \"402\";\ninterface CurrencySpec {\n decimals: number;\n symbol: string;\n x402?: {\n network: string;\n assetAddress: string;\n };\n}\n\nconst SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n x402: {\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n },\n};\n\nconst DEFAULT_FACILITATORS = {\n opentool: \"https://facilitator.opentool.dev/x402\",\n coinbase: \"https://payments.coinbase.com/x402\",\n} as const;\n\nexport interface DefinedPayment {\n definition: PaymentRequirementsDefinition;\n verifiers: Record<string, PaymentVerifier>;\n metadata?: Record<string, unknown>;\n message?: string;\n}\n\nexport interface RequirePaymentOptions {\n settle?: boolean;\n verifiers?: Record<string, PaymentVerifier>;\n fetchImpl?: typeof fetch;\n onFailure?: (result: PaymentVerificationResult) => Response;\n}\n\nexport interface RequirePaymentSuccess {\n payment: PaymentSuccessMetadata;\n headers: Record<string, string>;\n optionId: string;\n result: PaymentVerificationResult;\n}\n\nexport type RequirePaymentOutcome = Response | RequirePaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.payment.context\");\n\nexport class PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: PaymentVerificationResult | undefined;\n\n constructor(response: Response, verification?: PaymentVerificationResult) {\n super(\"Payment required\");\n this.name = \"PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type PaymentContext = RequirePaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getPaymentContext(\n request: Request\n): PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nfunction applyPaymentHeaders(\n response: Response,\n headers: Record<string, string>\n): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nexport function withPaymentRequirement(\n handler: (request: Request) => Promise<Response> | Response,\n payment: DefinedPayment | PaymentRequirementsDefinition,\n options: RequirePaymentOptions = {}\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requirePayment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nexport interface DefinePaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n acceptedMethods?: (\"x402\" | \"402\")[];\n acceptedCurrencies?: string[];\n chains?: (string | number)[];\n facilitator?:\n | \"opentool\"\n | \"coinbase\"\n | string\n | X402ProofConfig[\"facilitator\"];\n metadata?: Record<string, unknown>;\n verifiers?: Record<string, PaymentVerifier>;\n x402?: X402Config;\n direct?: DirectConfig;\n}\n\nexport interface X402Config {\n id?: string;\n facilitator?: string | X402ProofConfig[\"facilitator\"];\n network?: string;\n assetAddress?: string;\n scheme?: string;\n version?: number;\n settlement?: SettlementTerms;\n}\n\nexport interface DirectConfig {\n id?: string;\n verifierId?: string;\n proofType?: string;\n token?: string;\n verify?: PaymentVerifier;\n instructions?: string;\n fields?: PaymentField[];\n allowsManualReview?: boolean;\n settlement?: SettlementTerms;\n}\n\nexport function definePayment(config: DefinePaymentConfig): DefinedPayment {\n const verifiers: Record<string, PaymentVerifier> = {\n ...(config.verifiers ?? {}),\n };\n const methods = config.acceptedMethods ?? [\"402\"];\n const includeX402 = methods.includes(\"x402\");\n const includePlain402 = methods.includes(\"402\");\n\n if (!includeX402 && !includePlain402) {\n throw new Error(\n \"definePayment requires at least one payment transport (x402 or 402)\"\n );\n }\n\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n if (!currencySpec) {\n throw new Error(`Unsupported currency for payments: ${currencyCode}`);\n }\n const decimals = currencySpec.decimals;\n const symbol = currencySpec.symbol;\n const value = toDecimalString(config.amount);\n\n const accepts: PaymentOption[] = [];\n\n if (includeX402) {\n const overrides = config.x402 ?? {};\n const defaults = currencySpec.x402;\n if (!defaults && (!overrides.network || !overrides.assetAddress)) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\"\n );\n }\n const facilitator = resolveFacilitator(\n config.facilitator ?? overrides.facilitator ?? \"opentool\"\n );\n accepts.push(\n paymentOptionSchema.parse({\n id: overrides.id ?? DEFAULT_ID_X402,\n title: `Pay ${value} ${currencyCode}`,\n amount: {\n value,\n currency: { code: currencyCode, symbol, decimals },\n },\n asset: {\n symbol,\n network: overrides.network ?? defaults?.network ?? \"\",\n address: overrides.assetAddress ?? defaults?.assetAddress ?? \"\",\n decimals,\n standard: \"erc20\",\n },\n payTo: config.payTo,\n proof: {\n mode: \"x402\",\n network: overrides.network ?? defaults?.network ?? \"\",\n scheme: overrides.scheme ?? \"exact\",\n version: overrides.version ?? 1,\n facilitator,\n verifier: facilitator ? \"x402:facilitator\" : undefined,\n },\n settlement: overrides.settlement,\n })\n );\n }\n\n if (includePlain402) {\n const overrides = config.direct ?? {};\n const id = overrides.id ?? DEFAULT_ID_402;\n const verifierId = overrides.verifierId ?? `direct:${id}`;\n const proofType = overrides.proofType ?? id;\n const verifier =\n overrides.verify ??\n buildDefaultDirectVerifier(overrides.token, verifierId, id);\n verifiers[verifierId] = verifier;\n accepts.push(\n paymentOptionSchema.parse({\n id,\n title: `Pay ${value} ${currencyCode}`,\n amount: {\n value,\n currency: { code: currencyCode, symbol, decimals },\n },\n asset: {\n symbol,\n decimals,\n standard: \"erc20\",\n },\n payTo: config.payTo,\n proof: {\n mode: \"direct\",\n proofTypes: [proofType],\n verifier: verifierId,\n instructions: overrides.instructions,\n fields: overrides.fields,\n allowsManualReview: overrides.allowsManualReview,\n } as DirectProofConfig,\n settlement: overrides.settlement,\n })\n );\n }\n\n const facilitatorLabel = includeX402\n ? resolveFacilitatorLabel(config.facilitator ?? config.x402?.facilitator)\n : undefined;\n\n const baseMetadata: Record<string, unknown> = {};\n if (currencyCode === \"USDC\") {\n baseMetadata.amountUSDC = Number(value);\n }\n baseMetadata.x402 = includeX402;\n baseMetadata.plain402 = includePlain402;\n baseMetadata.acceptedMethods = methods;\n baseMetadata.acceptedCurrencies = config.acceptedCurrencies ?? [currencyCode];\n if (config.chains) {\n baseMetadata.chains = config.chains;\n }\n if (facilitatorLabel) {\n baseMetadata.facilitator = facilitatorLabel;\n }\n\n const metadata = config.metadata\n ? { ...baseMetadata, ...config.metadata }\n : baseMetadata;\n\n const definition: PaymentRequirementsDefinition = {\n schemaVersion: PAYMENT_SCHEMA_VERSION,\n accepts,\n metadata,\n } as PaymentRequirementsDefinition;\n\n if (config.message !== undefined) {\n (definition as any).message = config.message;\n }\n if (config.resource !== undefined) {\n (definition as any).resource = config.resource;\n }\n\n const defined: DefinedPayment = {\n definition,\n verifiers,\n metadata,\n };\n if (config.message !== undefined) {\n defined.message = config.message;\n }\n\n return defined;\n}\n\nexport async function requirePayment(\n request: Request,\n payment: DefinedPayment | PaymentRequirementsDefinition,\n options: RequirePaymentOptions = {}\n): Promise<RequirePaymentOutcome> {\n const { definition, verifiers } = normalizePayment(payment);\n const mergedVerifiers: Record<string, PaymentVerifier> = {\n ...verifiers,\n ...(options.verifiers ?? {}),\n };\n\n const verifyOptions: Parameters<typeof verifyPayment>[0] = {\n definition,\n request,\n };\n\n if (Object.keys(mergedVerifiers).length > 0) {\n verifyOptions.verifiers = mergedVerifiers;\n }\n if (options.settle !== undefined) {\n verifyOptions.settle = options.settle;\n }\n if (options.fetchImpl) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyPayment(verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = paymentRequiredResponse(definition);\n throw new PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata,\n headers: verification.responseHeaders ?? {},\n optionId: verification.optionId,\n result: verification,\n };\n}\n\nfunction normalizePayment(\n payment: DefinedPayment | PaymentRequirementsDefinition\n): {\n definition: PaymentRequirementsDefinition;\n verifiers: Record<string, PaymentVerifier>;\n} {\n if (isDefinedPayment(payment)) {\n return {\n definition: payment.definition,\n verifiers: payment.verifiers ?? {},\n };\n }\n\n return {\n definition: payment,\n verifiers: {},\n };\n}\n\nfunction isDefinedPayment(value: unknown): value is DefinedPayment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as DefinedPayment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: \"opentool\" | \"coinbase\" | string | X402ProofConfig[\"facilitator\"]\n): X402ProofConfig[\"facilitator\"] | undefined {\n if (!value) {\n return undefined;\n }\n if (typeof value === \"string\") {\n if (value in DEFAULT_FACILITATORS) {\n return {\n url: DEFAULT_FACILITATORS[value as keyof typeof DEFAULT_FACILITATORS],\n };\n }\n return { url: value };\n }\n return value;\n}\n\nfunction resolveFacilitatorLabel(\n value: DefinePaymentConfig[\"facilitator\"]\n): string | undefined {\n if (!value) {\n return \"opentool\";\n }\n if (typeof value === \"string\") {\n if (value === \"opentool\" || value === \"coinbase\") {\n return value;\n }\n return \"custom\";\n }\n return \"custom\";\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nfunction buildDefaultDirectVerifier(\n expectedToken: string | undefined,\n verifierId: string,\n optionId: string\n): PaymentVerifier {\n return async ({ attempt, option }) => {\n if (attempt.type !== \"direct\") {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: {\n reason: \"Expected direct payment payload\",\n code: \"invalid_payload\",\n },\n };\n }\n\n const payload = attempt.payload.payload as { token?: string } | undefined;\n if (expectedToken) {\n if (payload?.token !== expectedToken) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: {\n reason: \"Invalid or missing payment proof\",\n code: \"verification_failed\",\n },\n };\n }\n } else if (!payload) {\n return {\n success: false,\n optionId: option.id,\n attemptType: attempt.type,\n failure: {\n reason: \"Payment proof is required\",\n code: \"verification_failed\",\n },\n };\n }\n\n return {\n success: true,\n optionId,\n attemptType: attempt.type,\n metadata: {\n optionId,\n verifier: verifierId,\n payload,\n },\n };\n };\n}\n\nexport { PAYMENT_HEADERS };\n","import { z, type ZodSchema } from \"zod\";\nimport { PaymentRequiredError } from \"../payment/index\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(\n `Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`\n );\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\"\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { zodToJsonSchema } from '@alcyone-labs/zod-to-json-schema';\nimport { createMcpAdapter, HTTP_METHODS } from '../adapters/mcp';\nimport { withPaymentRequirement } from '../payment/index';\nimport {\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type ToolResponse,\n} from '../types/index';\nimport { Metadata, Tool } from '../types/metadata';\n\ninterface AdapterEntry {\n tool: InternalToolDefinition;\n invoke: (params: unknown) => Promise<ToolResponse>;\n}\n\n/**\n * Create local development server for MCP tooling.\n */\nexport function createDevServer(tools: InternalToolDefinition[]): Server {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n\n const adapters = buildAdapters(tools);\n\n const server = new Server(\n {\n name: 'opentool-dev',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n return server;\n}\n\n/**\n * Create stdio server for use with AWS Lambda MCP Adapter\n */\nexport async function createStdioServer(tools?: InternalToolDefinition[]): Promise<void> {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n const toolDefinitions = tools || (await loadToolsFromDirectory(metadataMap));\n const adapters = buildAdapters(toolDefinitions);\n\n const server = new Server(\n {\n name: 'opentool-runtime',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('MCP stdio server started');\n}\n\nfunction buildAdapters(tools: InternalToolDefinition[]): AdapterEntry[] {\n return tools\n .filter((tool) => isMcpEnabled(tool))\n .map((tool) => {\n const httpHandlers = toHttpHandlerMap(tool.httpHandlers);\n const adapterOptions = {\n name: tool.metadata?.name || tool.filename,\n httpHandlers,\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod\n ? { defaultMethod: tool.mcpConfig.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n return {\n tool,\n invoke: adapter,\n };\n });\n}\n\n/**\n * Load tools from tools directory\n */\nasync function loadToolsFromDirectory(metadataMap: Map<string, Tool>): Promise<InternalToolDefinition[]> {\n const tools: InternalToolDefinition[] = [];\n const toolsDir = path.join(process.cwd(), 'tools');\n if (!fs.existsSync(toolsDir)) {\n return tools;\n }\n\n const files = fs.readdirSync(toolsDir);\n for (const file of files) {\n if (!isSupportedToolFile(file)) {\n continue;\n }\n\n const toolPath = path.join(toolsDir, file);\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const exportsObject = require(toolPath);\n const candidate = resolveModuleCandidate(exportsObject);\n if (!candidate?.schema) {\n continue;\n }\n\n const baseName = file.replace(/\\.[^.]+$/, '');\n const name = candidate.metadata?.name || baseName;\n const meta = metadataMap.get(name);\n\n let inputSchema = meta?.inputSchema;\n if (!inputSchema) {\n try {\n inputSchema = zodToJsonSchema(candidate.schema, {\n name: `${name}Schema`,\n target: 'jsonSchema7',\n $refStrategy: 'none',\n });\n } catch (error) {\n inputSchema = { type: 'object' };\n }\n }\n inputSchema = normalizeInputSchema(inputSchema);\n\n const payment = candidate.payment ?? null;\n const httpHandlersRaw = collectHttpHandlers(candidate);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n continue;\n }\n\n if (payment) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withPaymentRequirement(entry.handler, payment),\n };\n }\n }\n\n const mcpConfig = normalizeRuntimeMcpConfig(candidate.mcp);\n const adapterOptions = {\n name,\n httpHandlers: toHttpHandlerMap(httpHandlers),\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n ...(typeof candidate.mcp?.defaultMethod === 'string'\n ? { defaultMethod: candidate.mcp.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n const tool: InternalToolDefinition = {\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n inputSchema,\n metadata: candidate.metadata || meta || null,\n filename: baseName,\n httpHandlers,\n mcpConfig,\n handler: async (params) => adapter(params),\n payment,\n };\n tools.push(tool);\n } catch (error) {\n console.warn(`Failed to load tool from ${file}: ${error}`);\n }\n }\n\n return tools;\n}\n\nfunction loadMetadata(): Metadata | null {\n const metadataPath = path.join(process.cwd(), 'metadata.json');\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n try {\n const contents = fs.readFileSync(metadataPath, 'utf8');\n return JSON.parse(contents) as Metadata;\n } catch (error) {\n console.warn(`Failed to parse metadata.json: ${error}`);\n return null;\n }\n}\n\nfunction buildMetadataMap(metadata: Metadata | null): Map<string, Tool> {\n const map = new Map<string, Tool>();\n if (!metadata?.tools) {\n return map;\n }\n metadata.tools.forEach((tool) => {\n map.set(tool.name, tool);\n });\n return map;\n}\n\nfunction serializeTool(tool: InternalToolDefinition, metadataMap: Map<string, Tool>) {\n const name = tool.metadata?.name || tool.filename;\n const meta = metadataMap.get(name);\n return {\n name,\n description: meta?.description || tool.metadata?.description || `${tool.filename} tool`,\n inputSchema: meta?.inputSchema || tool.inputSchema,\n annotations: meta?.annotations || tool.metadata?.annotations,\n payment: meta?.payment || tool.metadata?.payment,\n discovery: meta?.discovery || tool.metadata?.discovery,\n };\n}\n\nfunction isSupportedToolFile(file: string): boolean {\n return /\\.(cjs|mjs|js|ts)$/i.test(file);\n}\n\nfunction resolveModuleCandidate(exportsObject: any): any {\n if (!exportsObject) {\n return null;\n }\n if (exportsObject.schema) {\n return exportsObject;\n }\n if (exportsObject.default && exportsObject.default.schema) {\n return exportsObject.default;\n }\n return exportsObject;\n}\n\nfunction collectHttpHandlers(module: any): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n HTTP_METHODS.forEach((method) => {\n const handler = module?.[method];\n if (typeof handler === 'function') {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n });\n return handlers;\n}\n\n\nfunction toHttpHandlerMap(handlers: HttpHandlerDefinition[]): Record<string, HttpHandlerDefinition['handler']> {\n return handlers.reduce<Record<string, HttpHandlerDefinition['handler']>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(schema: any): any {\n if (!schema || typeof schema !== 'object') {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema));\n\n if (typeof clone.$ref === 'string' && clone.$ref.startsWith('#/definitions/')) {\n const refKey = clone.$ref.replace('#/definitions/', '');\n if (clone.definitions && typeof clone.definitions[refKey] === 'object') {\n return normalizeInputSchema(clone.definitions[refKey]);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!clone.type) {\n clone.type = 'object';\n }\n\n return clone;\n}\n\nfunction normalizeRuntimeMcpConfig(rawConfig: any): McpConfig | null {\n if (isPlainObject(rawConfig) && rawConfig.enabled === true) {\n let normalizedMode: McpConfig['mode'] | undefined;\n if (typeof rawConfig.mode === 'string') {\n const candidate = rawConfig.mode.toLowerCase();\n if (candidate === 'stdio' || candidate === 'lambda' || candidate === 'dual') {\n normalizedMode = candidate as McpConfig['mode'];\n } else {\n throw new Error('mcp.mode must be one of \"stdio\", \"lambda\", or \"dual\"');\n }\n }\n const metadataOverrides = isPlainObject(rawConfig.metadataOverrides)\n ? rawConfig.metadataOverrides\n : undefined;\n const config: McpConfig = { enabled: true };\n\n if (normalizedMode) {\n config.mode = normalizedMode;\n }\n\n if (typeof rawConfig.defaultMethod === 'string') {\n config.defaultMethod = rawConfig.defaultMethod.toUpperCase();\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n }\n\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\n}\n\nexport function resolveRuntimePath(value: string): string {\n if (value.startsWith('file://')) {\n return fileURLToPath(value);\n }\n return path.resolve(value);\n}\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { DefinedPayment } from \"../payment/index\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: DefinedPayment | null;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type { Tool, ToolMetadataOverrides, Metadata } from \"./metadata\";\nexport * from \"./payment\";\n","import { zeroAddress } from \"viem\";\nimport { base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(\n host: string,\n fallbackUrls: readonly string[]\n): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\"\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(\n ETHEREUM_ALCHEMY_HOST,\n mainnet.rpcUrls.default.http\n ),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(\n BASE_SEPOLIA_ALCHEMY_HOST,\n baseSepolia.rpcUrls.default.http\n ),\n },\n};\n\nfunction createNativeToken(\n chainId: number,\n symbol: string,\n name: string\n): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(\n base.id,\n \"USDC\",\n \"USD Coin\",\n \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\",\n 6\n ),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(\n mainnet.id,\n \"USDC\",\n \"USD Coin\",\n \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\",\n 6\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","import { createPublicClient, createWalletClient, http, type PublicClient, type WalletClient } from \"viem\";\nimport { privateKeyToAccount, type Account } from \"viem/accounts\";\n\nimport type {\n ChainMetadata,\n HexAddress,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const withPrefix = trimmed.startsWith(\"0x\") ? trimmed : `0x${trimmed}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(withPrefix)) {\n throw new Error(\"wallet() privateKey must be a 32-byte hex string\");\n }\n return withPrefix as `0x${string}`;\n}\n\nexport interface PrivateKeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n privateKey: string;\n}\n\nexport interface PrivateKeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient;\n}\n\nexport function createPrivateKeyProvider(\n config: PrivateKeyProviderConfig\n): PrivateKeyProviderResult {\n const privateKey = normalizePrivateKey(config.privateKey);\n const account = privateKeyToAccount(privateKey);\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account: account as Account,\n walletClient: walletClient as WalletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n","import { Turnkey } from \"@turnkey/sdk-server\";\nimport { createAccount } from \"@turnkey/viem\";\nimport { createPublicClient, createWalletClient, http, type PublicClient, type WalletClient } from \"viem\";\n\nimport type {\n ChainMetadata,\n HexAddress,\n TurnkeySignWith,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nexport interface TurnkeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: TurnkeySignWith;\n apiBaseUrl?: string;\n}\n\nexport interface TurnkeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient;\n}\n\nexport async function createTurnkeyProvider(\n config: TurnkeyProviderConfig\n): Promise<TurnkeyProviderResult> {\n const turnkey = new Turnkey({\n apiBaseUrl: config.apiBaseUrl ?? \"https://api.turnkey.com\",\n // The delegated sub-organization the API key pair belongs to.\n defaultOrganizationId: config.organizationId,\n apiPublicKey: config.apiPublicKey,\n apiPrivateKey: config.apiPrivateKey,\n });\n\n const account = await createAccount({\n client: turnkey.apiClient(),\n organizationId: config.organizationId,\n signWith: config.signWith,\n });\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient: walletClient as WalletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n","export * from \"./types\";\nexport { chains, tokens, registry, DEFAULT_CHAIN, DEFAULT_TOKENS } from \"./constants\";\n\nimport { createPublicClient, http } from \"viem\";\n\nimport type {\n RpcProviderOptions,\n WalletContext,\n WalletFullContext,\n WalletReadonlyContext,\n WalletOptions,\n WalletProviderType,\n WalletPrivateKeyOptions,\n WalletTurnkeyOptions,\n WalletReadonlyOptions,\n} from \"./types\";\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n registry as walletRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createPrivateKeyProvider } from \"./providers/private-key\";\nimport { createTurnkeyProvider } from \"./providers/turnkey\";\n\ntype ChainSlug = keyof typeof chainRegistry;\n\nfunction resolveChainSlug(reference?: string | number): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nexport function getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nexport function wallet(options: WalletPrivateKeyOptions): Promise<WalletFullContext>;\nexport function wallet(options: WalletTurnkeyOptions): Promise<WalletFullContext>;\nexport function wallet(options?: WalletReadonlyOptions): Promise<WalletReadonlyContext>;\nexport async function wallet(options: WalletOptions = {}): Promise<WalletContext> {\n if (options.privateKey && options.turnkey) {\n throw new Error(\"wallet() cannot be initialized with both privateKey and turnkey credentials\");\n }\n\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? {};\n const overrides: RpcProviderOptions = {};\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n\n let providerType: WalletProviderType = \"readonly\";\n let signerProvider:\n | ReturnType<typeof createPrivateKeyProvider>\n | (Awaited<ReturnType<typeof createTurnkeyProvider>>)\n | undefined;\n\n if (options.privateKey) {\n signerProvider = createPrivateKeyProvider({\n chain,\n rpcUrl,\n privateKey: options.privateKey,\n });\n providerType = \"privateKey\";\n } else if (options.turnkey) {\n const turnkeyConfig = {\n chain,\n rpcUrl,\n organizationId: options.turnkey.organizationId,\n apiPublicKey: options.turnkey.apiPublicKey,\n apiPrivateKey: options.turnkey.apiPrivateKey,\n signWith: options.turnkey.signWith,\n } as Parameters<typeof createTurnkeyProvider>[0];\n\n if (options.turnkey.apiBaseUrl) {\n turnkeyConfig.apiBaseUrl = options.turnkey.apiBaseUrl;\n }\n\n signerProvider = await createTurnkeyProvider(turnkeyConfig);\n providerType = \"turnkey\";\n }\n\n const publicClient = signerProvider?.publicClient ??\n createPublicClient({\n chain: chain.chain,\n transport: http(rpcUrl),\n });\n\n const baseContext: WalletReadonlyContext = {\n chain,\n tokens,\n rpcUrl,\n providerType,\n publicClient,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n };\n\n if (signerProvider) {\n const { publicClient: _ignored, ...rest } = signerProvider;\n return {\n ...baseContext,\n ...rest,\n } as WalletFullContext;\n }\n\n return baseContext;\n}\n\nexport const walletToolkit = {\n chains: chainRegistry,\n tokens: tokenRegistry,\n registry: walletRegistry,\n defaults: {\n chain: DEFAULT_CHAIN,\n tokens: DEFAULT_TOKENS,\n },\n getRpcUrl,\n wallet,\n} as const;\n","interface ErrorInit {\n cause?: unknown;\n}\n\nexport class AIError extends Error {\n constructor(message: string, options?: ErrorInit) {\n super(message);\n this.name = \"AIError\";\n if (options && \"cause\" in options) {\n (this as unknown as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\nexport interface ResponseErrorDetails {\n status: number;\n statusText: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class AIFetchError extends AIError {\n constructor(message: string, options?: ErrorInit) {\n super(message, options);\n this.name = \"AIFetchError\";\n }\n}\n\nexport class AIResponseError extends AIError {\n readonly status: number;\n readonly statusText: string;\n readonly body?: unknown;\n readonly headers: Record<string, string>;\n\n constructor(details: ResponseErrorDetails, message?: string) {\n super(message ?? `AI response error: ${details.status} ${details.statusText}`);\n this.name = \"AIResponseError\";\n this.status = details.status;\n this.statusText = details.statusText;\n this.body = details.body;\n this.headers = details.headers ?? {};\n }\n}\n\nexport class AIAbortError extends AIError {\n constructor(message = \"AI request aborted\") {\n super(message);\n this.name = \"AIAbortError\";\n }\n}\n","import { AIClientConfig, ResolvedAIClientConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://gateway.openpond.dev\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MODEL = \"openai/gpt-5-mini\";\n\nfunction assertFetchAvailable(fetchImplementation?: typeof fetch): asserts fetchImplementation {\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via AIClientConfig.fetchImplementation.\"\n );\n }\n}\n\nexport function resolveConfig(\n config: AIClientConfig = {}\n): ResolvedAIClientConfig {\n const fetchImplementation = config.fetchImplementation ?? globalThis.fetch;\n assertFetchAvailable(fetchImplementation);\n\n const resolved: ResolvedAIClientConfig = {\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n defaultModel: config.defaultModel ?? DEFAULT_MODEL,\n defaultHeaders: {\n \"Content-Type\": \"application/json\",\n ...config.defaultHeaders,\n },\n fetchImplementation,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n\n if (config.apiKey !== undefined) {\n resolved.apiKey = config.apiKey;\n }\n\n return resolved;\n}\n\nexport function mergeHeaders(\n base: Record<string, string>,\n overrides?: Record<string, string>\n): Record<string, string> {\n if (!overrides) {\n return { ...base };\n }\n\n const merged = { ...base };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) {\n continue;\n }\n\n merged[key] = value;\n }\n return merged;\n}\n","export type ModelProvider = \"openai\" | \"anthropic\" | \"google\" | \"deepseek\" | \"custom\";\n\nexport interface ModelConfig {\n name: string;\n label: string;\n provider: ModelProvider;\n supportsStreaming: boolean;\n supportsTools: boolean;\n reasoning?: boolean;\n aliases?: string[];\n default?: boolean;\n}\n\nconst MODEL_REGISTRY: ModelConfig[] = [\n {\n name: \"openai/gpt-5-mini\",\n label: \"OpenAI GPT-5 Mini\",\n provider: \"openai\",\n supportsStreaming: true,\n supportsTools: true,\n reasoning: true,\n aliases: [\"gpt-5-mini\", \"gpt5-mini\", \"gpt-5.0-mini\"],\n default: true,\n },\n {\n name: \"anthropic/claude-4-sonnet-20250514\",\n label: \"Claude 4 Sonnet (20250514)\",\n provider: \"anthropic\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"claude-4-sonnet\", \"claude-sonnet\"],\n },\n {\n name: \"google/gemini-2.0-flash-001\",\n label: \"Gemini 2.0 Flash\",\n provider: \"google\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"gemini-2.0-flash\", \"gemini-flash\"],\n },\n {\n name: \"deepseek/deepseek-chat\",\n label: \"DeepSeek Chat\",\n provider: \"deepseek\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"deepseek-chat\", \"deepseek\"],\n },\n];\n\nconst ALIAS_LOOKUP: Record<string, string> = MODEL_REGISTRY.reduce(\n (accumulator, model) => {\n accumulator[model.name.toLowerCase()] = model.name;\n if (model.aliases) {\n for (const alias of model.aliases) {\n accumulator[alias.toLowerCase()] = model.name;\n }\n }\n return accumulator;\n },\n {} as Record<string, string>\n);\n\nconst DEFAULT_MODEL_NAME =\n MODEL_REGISTRY.find((model) => model.default)?.name ?? MODEL_REGISTRY[0].name;\n\nexport function listModels(): ModelConfig[] {\n return [...MODEL_REGISTRY];\n}\n\nexport function getModelConfig(modelName?: string): ModelConfig | undefined {\n if (!modelName) {\n return MODEL_REGISTRY.find((model) => model.default) ?? MODEL_REGISTRY[0];\n }\n\n const normalized = normalizeModelName(modelName);\n return MODEL_REGISTRY.find((model) => model.name === normalized);\n}\n\nexport function normalizeModelName(modelName?: string): string {\n if (!modelName) {\n return DEFAULT_MODEL_NAME;\n }\n\n const trimmed = modelName.trim();\n if (!trimmed) {\n return DEFAULT_MODEL_NAME;\n }\n\n const directMatch = ALIAS_LOOKUP[trimmed.toLowerCase()];\n if (directMatch) {\n return directMatch;\n }\n\n if (trimmed.includes(\"/\")) {\n return trimmed;\n }\n\n return `openai/${trimmed}`;\n}\n\nexport function isStreamingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsStreaming : true;\n}\n\nexport function isToolCallingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsTools : true;\n}\n\n","import {\n ToolDefinition,\n ToolExecutionPolicy,\n WebSearchOptions,\n} from \"./types\";\n\nexport const WEBSEARCH_TOOL_NAME = \"websearch\";\n\nexport const WEBSEARCH_TOOL_DEFINITION: ToolDefinition = {\n type: \"function\",\n function: {\n name: WEBSEARCH_TOOL_NAME,\n description:\n \"Search the web using the OpenPond search engine. Returns relevant results with titles, URLs, and text content.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n },\n },\n required: [\"query\"],\n },\n },\n};\n\nexport function resolveToolset(\n tools: ToolDefinition[] | undefined,\n policy: ToolExecutionPolicy | undefined\n): ToolDefinition[] | undefined {\n if (!policy) {\n return tools;\n }\n\n const resolved: ToolDefinition[] = tools ? [...tools] : [];\n\n if (policy.webSearch) {\n const alreadyIncluded = resolved.some(\n (tool) =>\n tool.type === \"function\" && tool.function?.name === WEBSEARCH_TOOL_NAME\n );\n if (!alreadyIncluded) {\n resolved.push(materializeWebSearchTool(policy.webSearch));\n }\n }\n\n return resolved.length > 0 ? resolved : undefined;\n}\n\nfunction materializeWebSearchTool(options: WebSearchOptions): ToolDefinition {\n if (!options || Object.keys(options).length === 0) {\n return WEBSEARCH_TOOL_DEFINITION;\n }\n\n const baseParameters =\n WEBSEARCH_TOOL_DEFINITION.function.parameters ??\n ({} as Record<string, unknown>);\n const baseProperties =\n (baseParameters.properties as Record<string, unknown> | undefined) ?? {};\n\n const properties: Record<string, unknown> = { ...baseProperties };\n\n if (options.limit !== undefined) {\n const existingLimit = baseProperties[\"limit\"];\n const limitSchema: Record<string, unknown> =\n typeof existingLimit === \"object\" && existingLimit !== null\n ? { ...(existingLimit as Record<string, unknown>) }\n : {\n type: \"number\",\n description:\n \"Maximum number of results to return (default: 5)\",\n };\n\n limitSchema.default = options.limit;\n properties.limit = limitSchema;\n }\n\n if (options.includeImages) {\n properties.includeImages = {\n type: \"boolean\",\n description: \"Whether to include representative images in results.\",\n default: true,\n };\n }\n\n return {\n ...WEBSEARCH_TOOL_DEFINITION,\n function: {\n ...WEBSEARCH_TOOL_DEFINITION.function,\n parameters: {\n ...WEBSEARCH_TOOL_DEFINITION.function.parameters,\n properties,\n },\n },\n } as ToolDefinition;\n}\n","import { AIError } from \"./errors\";\nimport { ChatMessage, ChatMessageContentPart } from \"./types\";\n\nexport interface FlattenMessageContentOptions {\n /**\n * String used to join individual text segments when the content array contains multiple text parts.\n * Defaults to an empty string.\n */\n separator?: string;\n /**\n * When true, JSON stringifies non-text segments instead of discarding them.\n * Defaults to false (skip non-text parts).\n */\n includeUnknown?: boolean;\n}\n\nexport function flattenMessageContent(\n content: ChatMessage[\"content\"],\n options: FlattenMessageContentOptions = {}\n): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n const separator = options.separator ?? \"\";\n const collected: string[] = [];\n\n for (const part of content) {\n const text = extractTextPart(part, options);\n if (text) {\n collected.push(text);\n }\n }\n\n if (collected.length === 0) {\n return undefined;\n }\n\n return collected.join(separator);\n}\n\nexport interface EnsureTextContentOptions extends FlattenMessageContentOptions {\n errorMessage?: string;\n}\n\nexport function ensureTextContent(\n message: ChatMessage,\n options?: EnsureTextContentOptions\n): string {\n const flattened = flattenMessageContent(message.content, options);\n if (flattened !== undefined) {\n return flattened;\n }\n\n throw new AIError(\n options?.errorMessage ??\n \"Assistant response did not contain textual content.\"\n );\n}\n\nfunction extractTextPart(\n part: ChatMessageContentPart,\n options: FlattenMessageContentOptions\n): string | undefined {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n\n if (options.includeUnknown) {\n try {\n return JSON.stringify(part);\n } catch (error) {\n return `[unserializable_part: ${String(error)}]`;\n }\n }\n\n return undefined;\n}\n","import { resolveConfig, mergeHeaders } from \"./config\";\nimport {\n GenerateTextOptions,\n GenerateTextResult,\n AIClientConfig,\n ChatCompletionResponse,\n ChatCompletionChoice,\n ChatCompletionUsage,\n ResolvedAIClientConfig,\n StreamTextOptions,\n StreamTextResult,\n GenerationParameters,\n AIRequestMetadata,\n ChatMessage,\n StreamingEventHandlers,\n} from \"./types\";\nimport {\n normalizeModelName,\n isToolCallingSupported,\n listModels,\n} from \"./models\";\nimport { resolveToolset } from \"./tools\";\nimport { flattenMessageContent } from \"./messages\";\nimport { AIFetchError, AIResponseError, AIAbortError, AIError } from \"./errors\";\n\nconst CHAT_COMPLETIONS_PATH = \"/v1/chat/completions\";\n\nexport interface AIClient {\n readonly config: ResolvedAIClientConfig;\n generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;\n streamText(options: StreamTextOptions): Promise<StreamTextResult>;\n listModels: typeof listModels;\n}\n\ninterface ChatCompletionRequestPayload {\n model: string;\n messages: GenerateTextOptions[\"messages\"];\n temperature?: number;\n top_p?: number;\n max_tokens?: number;\n stop?: string | string[];\n presence_penalty?: number;\n frequency_penalty?: number;\n tool_choice?: GenerateTextOptions[\"toolChoice\"];\n tools?: GenerateTextOptions[\"tools\"];\n stream?: boolean;\n response_format?: GenerationParameters[\"responseFormat\"];\n metadata?: Record<string, unknown>;\n stream_options?: {\n include_usage?: boolean;\n };\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n abort: () => void;\n cleanup: () => void;\n}\n\nexport function createAIClient(config: AIClientConfig = {}): AIClient {\n const resolved = resolveConfig(config);\n\n return {\n get config() {\n return resolved;\n },\n async generateText(options) {\n return generateText(options, config);\n },\n async streamText(options) {\n return streamText(options, config);\n },\n listModels,\n };\n}\n\nexport async function generateText(\n options: GenerateTextOptions,\n clientConfig: AIClientConfig = {}\n): Promise<GenerateTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const payload = buildRequestPayload(options, model, {\n allowTools: isToolCallingSupported(model),\n });\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n } finally {\n abortBundle.cleanup();\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n const data = (await response.json()) as ChatCompletionResponse;\n const primaryChoice = data.choices.find(isPrimaryChoice);\n\n if (!primaryChoice) {\n throw new AIResponseError(\n {\n status: response.status,\n statusText: response.statusText,\n body: data,\n },\n \"Gateway response did not contain a valid choice\"\n );\n }\n\n const result: GenerateTextResult = {\n id: data.id,\n model: data.model,\n message: primaryChoice.message,\n raw: data,\n };\n\n if (primaryChoice.finish_reason !== undefined) {\n result.finishReason = primaryChoice.finish_reason;\n }\n\n if (data.usage) {\n result.usage = data.usage;\n }\n\n return result;\n}\n\nexport async function streamText(\n options: StreamTextOptions,\n clientConfig: AIClientConfig = {}\n): Promise<StreamTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const streamExtras = buildStreamMetadataExtras(options);\n const payload = buildRequestPayload(\n options,\n model,\n {\n allowTools: isToolCallingSupported(model),\n },\n streamExtras\n );\n\n payload.stream = true;\n if (options.includeUsage) {\n payload.stream_options = { include_usage: true };\n }\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n abortBundle.cleanup();\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n if (!response.body) {\n abortBundle.cleanup();\n throw new AIFetchError(\"Streaming response did not include a readable body\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const handlers = options.handlers ?? {};\n\n let finishedResolve: () => void;\n let finishedReject: (reason?: unknown) => void;\n const finished = new Promise<void>((resolve, reject) => {\n finishedResolve = resolve;\n finishedReject = reject;\n });\n\n let settled = false;\n\n const resolveStream = () => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onDone?.();\n finishedResolve();\n } catch (error) {\n settled = false; // allow rejectError to run with handler error\n rejectStream(error);\n }\n };\n\n const rejectStream = (reason: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onError?.(reason);\n } catch (handlerError) {\n reason = handlerError;\n }\n finishedReject(reason);\n };\n\n const abort = () => abortBundle.abort();\n\n (async () => {\n let buffer = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n if (buffer.trim().length > 0) {\n if (processStreamEventChunk(buffer, handlers)) {\n break;\n }\n }\n resolveStream();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let boundaryIndex: number;\n while ((boundaryIndex = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const chunk = buffer.slice(0, boundaryIndex);\n buffer = buffer.slice(boundaryIndex + 2);\n if (!chunk) {\n continue;\n }\n if (processStreamEventChunk(chunk, handlers)) {\n await reader.cancel().catch(() => undefined);\n resolveStream();\n return;\n }\n }\n }\n } catch (error) {\n if (abortBundle.signal.aborted) {\n rejectStream(toAbortError(abortBundle.signal.reason ?? error));\n } else {\n rejectStream(error);\n }\n } finally {\n try {\n reader.releaseLock();\n } catch (error) {\n // ignore release errors\n }\n abortBundle.cleanup();\n }\n })().catch((error) => {\n rejectStream(error);\n });\n\n return {\n abort,\n finished,\n };\n\n function processStreamEventChunk(\n chunk: string,\n eventHandlers: StreamingEventHandlers\n ): boolean {\n const dataString = extractSseData(chunk);\n if (dataString == null) {\n return false;\n }\n\n const trimmed = dataString.trim();\n if (trimmed === \"[DONE]\") {\n return true;\n }\n\n let payload: unknown;\n try {\n payload = JSON.parse(dataString);\n } catch (error) {\n rejectStream(new AIError(\"Failed to parse streaming payload\", { cause: error }));\n return true;\n }\n\n try {\n handleStreamPayload(payload, eventHandlers);\n } catch (error) {\n rejectStream(error);\n return true;\n }\n\n return false;\n }\n\n function handleStreamPayload(\n payload: unknown,\n eventHandlers: StreamingEventHandlers\n ): void {\n if (!payload || typeof payload !== \"object\") {\n return;\n }\n\n if (\"error\" in payload && payload.error) {\n const message =\n typeof payload.error === \"string\"\n ? payload.error\n : (payload.error as { message?: string }).message;\n throw new AIError(message ?? \"AI stream returned an error payload\");\n }\n\n const structured = payload as {\n choices?: Array<{ delta?: unknown }>;\n usage?: ChatCompletionUsage;\n };\n\n if (Array.isArray(structured.choices)) {\n for (const choice of structured.choices) {\n if (!choice || typeof choice !== \"object\") {\n continue;\n }\n const delta = (choice as { delta?: unknown }).delta;\n if (!delta || typeof delta !== \"object\") {\n continue;\n }\n const deltaObject = delta as Record<string, unknown>;\n\n const textDelta = extractDeltaText(deltaObject.content);\n if (textDelta) {\n eventHandlers.onTextDelta?.(textDelta);\n }\n\n const reasoningDelta = extractDeltaText(deltaObject.reasoning);\n if (reasoningDelta) {\n eventHandlers.onReasoningDelta?.(reasoningDelta);\n }\n\n if (deltaObject.tool_calls !== undefined) {\n eventHandlers.onToolCallDelta?.(deltaObject.tool_calls);\n }\n }\n }\n\n if (structured.usage) {\n eventHandlers.onUsage?.(structured.usage);\n }\n }\n\n function extractDeltaText(value: unknown): string | undefined {\n if (!value) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return flattenMessageContent(value as ChatMessage[\"content\"]);\n }\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"content\" in value &&\n Array.isArray((value as { content?: unknown }).content)\n ) {\n return flattenMessageContent(\n ((value as { content?: ChatMessage[\"content\"] }).content ?? []) as ChatMessage[\"content\"]\n );\n }\n\n return undefined;\n }\n\n function extractSseData(chunk: string): string | null {\n const lines = chunk.split(\"\\n\");\n const dataLines: string[] = [];\n for (const rawLine of lines) {\n if (!rawLine) {\n continue;\n }\n const match = /^data:(.*)$/.exec(rawLine);\n if (!match) {\n continue;\n }\n\n const value = match[1];\n dataLines.push(value.startsWith(\" \") ? value.slice(1) : value);\n }\n\n if (dataLines.length === 0) {\n return null;\n }\n\n return dataLines.join(\"\\n\");\n }\n}\n\nfunction buildStreamMetadataExtras(\n options: StreamTextOptions\n): Record<string, unknown> | undefined {\n const streamConfig: Record<string, unknown> = {};\n\n if (options.sendReasoning !== undefined) {\n streamConfig.sendReasoning = options.sendReasoning;\n }\n\n if (options.includeUsage !== undefined) {\n streamConfig.includeUsage = options.includeUsage;\n }\n\n if (Object.keys(streamConfig).length === 0) {\n return undefined;\n }\n\n return {\n openpond: {\n stream: streamConfig,\n },\n } satisfies Record<string, unknown>;\n}\n\nfunction buildRequestPayload(\n options: GenerateTextOptions,\n model: string,\n capabilities: { allowTools: boolean },\n metadataExtras?: Record<string, unknown>\n): ChatCompletionRequestPayload {\n const payload: ChatCompletionRequestPayload = {\n model,\n messages: options.messages,\n };\n\n const generation: GenerationParameters = options.generation ?? {};\n\n assignIfDefined(payload, \"temperature\", generation.temperature);\n assignIfDefined(payload, \"top_p\", generation.topP);\n assignIfDefined(payload, \"max_tokens\", generation.maxTokens);\n assignIfDefined(payload, \"stop\", generation.stop);\n assignIfDefined(\n payload,\n \"frequency_penalty\",\n generation.frequencyPenalty\n );\n assignIfDefined(payload, \"presence_penalty\", generation.presencePenalty);\n assignIfDefined(payload, \"response_format\", generation.responseFormat);\n\n const toolExecution = options.toolExecution;\n const enableTools = toolExecution?.enableTools ?? true;\n if (enableTools && capabilities.allowTools) {\n const resolvedTools = resolveToolset(options.tools, toolExecution);\n assignIfDefined(payload, \"tools\", resolvedTools);\n assignIfDefined(payload, \"tool_choice\", options.toolChoice);\n } else if (options.toolChoice && options.toolChoice !== \"none\") {\n payload.tool_choice = \"none\";\n }\n\n const metadataPayload = buildMetadataPayload(\n options.metadata,\n toolExecution,\n metadataExtras\n );\n if (metadataPayload) {\n payload.metadata = metadataPayload;\n }\n\n return payload;\n}\n\nfunction assignIfDefined<T extends object, K extends keyof T>(\n target: T,\n key: K,\n value: T[K] | undefined\n): void {\n if (value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction buildUrl(baseUrl: string, path: string): string {\n const sanitizedBase = baseUrl.endsWith(\"/\")\n ? baseUrl.slice(0, -1)\n : baseUrl;\n return `${sanitizedBase}${path}`;\n}\n\nfunction createAbortBundle(\n upstreamSignal: AbortSignal | undefined,\n timeoutMs: number | undefined\n): AbortBundle {\n const controller = new AbortController();\n const cleanupCallbacks: Array<() => void> = [];\n\n if (upstreamSignal) {\n if (upstreamSignal.aborted) {\n controller.abort(upstreamSignal.reason);\n } else {\n const onAbort = () => controller.abort(upstreamSignal.reason);\n upstreamSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanupCallbacks.push(() =>\n upstreamSignal.removeEventListener(\"abort\", onAbort)\n );\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timeoutId = setTimeout(() => {\n controller.abort(new Error(\"AI request timed out\"));\n }, timeoutMs);\n cleanupCallbacks.push(() => clearTimeout(timeoutId));\n }\n\n return {\n signal: controller.signal,\n abort: () => controller.abort(),\n cleanup: () => {\n cleanupCallbacks.forEach((fn) => fn());\n },\n };\n}\n\nfunction collectHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction buildMetadataPayload(\n base: AIRequestMetadata | undefined,\n toolExecution: GenerateTextOptions[\"toolExecution\"] | undefined,\n extras?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n const metadata: Record<string, unknown> = base ? { ...base } : {};\n\n if (extras) {\n for (const [key, value] of Object.entries(extras)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"openpond\" && typeof value === \"object\" && value !== null) {\n const existing = {\n ...((metadata.openpond as Record<string, unknown> | undefined) ?? {}),\n };\n metadata.openpond = {\n ...existing,\n ...(value as Record<string, unknown>),\n };\n } else {\n metadata[key] = value;\n }\n }\n }\n\n if (toolExecution) {\n const openpond = {\n ...((metadata.openpond as Record<string, unknown> | undefined) ?? {}),\n toolExecution,\n };\n metadata.openpond = openpond;\n }\n\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nasync function safeParseJson(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"application/json\")) {\n return undefined;\n }\n\n try {\n return await response.json();\n } catch (error) {\n return { error: \"Failed to parse error body\", cause: String(error) };\n }\n}\n\nfunction isPrimaryChoice(choice: ChatCompletionChoice): boolean {\n return choice.index === 0 || choice.message !== undefined;\n}\n\nfunction toAbortError(reason: unknown): AIAbortError {\n if (reason instanceof AIAbortError) {\n return reason;\n }\n\n if (reason instanceof Error) {\n if (reason.name === \"AbortError\") {\n return new AIAbortError(reason.message || \"AI request aborted\");\n }\n return new AIAbortError(reason.message);\n }\n\n return new AIAbortError(String(reason ?? \"AI request aborted\"));\n}\n\nexport { listModels };\n","import { z } from \"zod\";\n\nexport const METADATA_SPEC_VERSION = \"1.1.0\";\n\nexport const McpAnnotationsSchema = z\n .object({\n title: z.string().optional(),\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n openWorldHint: z.boolean().optional(),\n requiresPayment: z.boolean().optional(),\n })\n .strict();\n\nexport type McpAnnotations = z.infer<typeof McpAnnotationsSchema>;\n\nexport const PaymentConfigSchema = z\n .object({\n amountUSDC: z.number().nonnegative().optional(),\n description: z.string().optional(),\n x402: z.boolean().optional(),\n plain402: z.boolean().optional(),\n acceptedMethods: z\n .array(z.union([z.literal(\"x402\"), z.literal(\"402\")]))\n .optional(),\n acceptedCurrencies: z.array(z.string()).optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n facilitator: z.string().optional(),\n })\n .strict();\n\nexport type PaymentConfig = z.infer<typeof PaymentConfigSchema>;\n\nexport const DiscoveryMetadataSchema = z\n .object({\n keywords: z.array(z.string()).optional(),\n category: z.string().optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n pricing: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n documentation: z.union([z.string(), z.array(z.string())]).optional(),\n })\n .catchall(z.any());\n\nexport type DiscoveryMetadata = z.infer<typeof DiscoveryMetadataSchema>;\n\nexport const ToolMetadataOverridesSchema = z\n .object({\n name: z.string().optional(),\n description: z.string().optional(),\n annotations: McpAnnotationsSchema.optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type ToolMetadataOverrides = z.infer<typeof ToolMetadataOverridesSchema>;\n\nexport const ToolSchema = z\n .object({\n name: z.string(),\n description: z.string(),\n inputSchema: z.any(),\n annotations: McpAnnotationsSchema.optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const AuthoredMetadataSchema = z\n .object({\n metadataSpecVersion: z.string().optional(),\n name: z.string().optional(),\n displayName: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string().optional(),\n categories: z.array(z.string()).optional(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n pricing: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type AuthoredMetadata = z.infer<typeof AuthoredMetadataSchema>;\n\nexport const MetadataSchema = z\n .object({\n metadataSpecVersion: z.string().default(METADATA_SPEC_VERSION),\n name: z.string(),\n displayName: z.string(),\n version: z.string(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n tools: z.array(ToolSchema).min(1),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type Metadata = z.infer<typeof MetadataSchema>;\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tmpdir } from \"os\";\nimport { build, type BuildOptions } from \"esbuild\";\n\ninterface TranspileOptions {\n entryPoints: string[];\n projectRoot: string;\n outDir?: string;\n format: \"cjs\" | \"esm\";\n bundle?: boolean;\n external?: string[];\n}\n\nfunction resolveTsconfig(projectRoot: string): string | undefined {\n const candidate = path.join(projectRoot, \"tsconfig.json\");\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return undefined;\n}\n\ninterface TranspileResult {\n outDir: string;\n cleanup(): void;\n}\n\nexport async function transpileWithEsbuild(options: TranspileOptions): Promise<TranspileResult> {\n if (options.entryPoints.length === 0) {\n throw new Error(\"No entry points provided for esbuild transpilation\");\n }\n\n const projectRoot = options.projectRoot;\n const tempBase = options.outDir ?? fs.mkdtempSync(path.join(tmpdir(), \"opentool-\"));\n if (!fs.existsSync(tempBase)) {\n fs.mkdirSync(tempBase, { recursive: true });\n }\n\n const tsconfig = resolveTsconfig(projectRoot);\n\n const buildOptions: BuildOptions = {\n entryPoints: options.entryPoints,\n outdir: tempBase,\n bundle: options.bundle ?? false,\n format: options.format,\n platform: \"node\",\n target: \"node20\",\n logLevel: \"warning\",\n sourcesContent: false,\n sourcemap: false,\n loader: {\n \".ts\": \"ts\",\n \".tsx\": \"tsx\",\n \".cts\": \"ts\",\n \".mts\": \"ts\",\n \".js\": \"js\",\n \".jsx\": \"jsx\",\n \".mjs\": \"js\",\n \".cjs\": \"js\",\n \".json\": \"json\",\n },\n metafile: false,\n allowOverwrite: true,\n absWorkingDir: projectRoot,\n };\n\n if (options.external && options.external.length > 0) {\n buildOptions.external = options.external;\n }\n\n if (!buildOptions.bundle) {\n buildOptions.packages = \"external\";\n }\n\n if (tsconfig) {\n buildOptions.tsconfig = tsconfig;\n }\n\n await build(buildOptions);\n\n if (options.format === \"esm\") {\n const packageJsonPath = path.join(tempBase, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n fs.writeFileSync(packageJsonPath, JSON.stringify({ type: \"module\" }), \"utf8\");\n }\n }\n\n const cleanup = () => {\n if (options.outDir) {\n return;\n }\n fs.rmSync(tempBase, { recursive: true, force: true });\n };\n\n return { outDir: tempBase, cleanup };\n}\n","import * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nconst requireModule = createRequire(import.meta.url);\n\nexport function resolveCompiledPath(\n outDir: string,\n originalFile: string,\n extension = \".js\"\n): string {\n const baseName = path.basename(originalFile).replace(/\\.[^.]+$/, \"\");\n return path.join(outDir, `${baseName}${extension}`);\n}\n\nexport function requireFresh(modulePath: string): any {\n const resolved = requireModule.resolve(modulePath);\n delete requireModule.cache[resolved];\n return requireModule(resolved);\n}\n\nexport async function importFresh(modulePath: string): Promise<any> {\n const fileUrl = pathToFileURL(modulePath).href;\n const cacheBuster = `t=${Date.now()}-${Math.random()}`;\n const separator = fileUrl.includes(\"?\") ? \"&\" : \"?\";\n return import(`${fileUrl}${separator}${cacheBuster}`);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport {\n AuthoredMetadata,\n AuthoredMetadataSchema,\n DiscoveryMetadata,\n Metadata,\n MetadataSchema,\n METADATA_SPEC_VERSION,\n PaymentConfig,\n Tool,\n ToolMetadataOverrides,\n ToolMetadataOverridesSchema,\n} from \"../../types/metadata\";\nimport { InternalToolDefinition } from \"../../types/index\";\nimport { transpileWithEsbuild } from \"../../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../../utils/module-loader\";\n\ninterface LoadAuthoredMetadataResult {\n metadata: AuthoredMetadata;\n sourcePath: string;\n}\n\nconst METADATA_ENTRY = \"metadata.ts\";\n\nexport async function loadAuthoredMetadata(projectRoot: string): Promise<LoadAuthoredMetadataResult> {\n const absPath = path.join(projectRoot, METADATA_ENTRY);\n if (!fs.existsSync(absPath)) {\n throw new Error(\n `metadata.ts not found in ${projectRoot}. Create metadata.ts to describe your agent.`\n );\n }\n\n const tempDir = path.join(projectRoot, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints: [absPath],\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n });\n\n try {\n const compiledPath = resolveCompiledPath(outDir, METADATA_ENTRY);\n const moduleExports = await importFresh(compiledPath);\n const metadataExport = extractMetadataExport(moduleExports);\n const parsed = AuthoredMetadataSchema.parse(metadataExport);\n return { metadata: parsed, sourcePath: absPath };\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n}\n\nfunction extractMetadataExport(moduleExports: unknown): unknown {\n if (!moduleExports || typeof moduleExports !== \"object\") {\n throw new Error(\"metadata.ts must export a metadata object\");\n }\n\n const exportsObject = moduleExports as Record<string, unknown>;\n if (exportsObject.metadata) {\n return exportsObject.metadata;\n }\n\n if (exportsObject.default && typeof exportsObject.default === \"object\") {\n const defaultExport = exportsObject.default as Record<string, unknown>;\n if (defaultExport.metadata) {\n return defaultExport.metadata;\n }\n return defaultExport;\n }\n\n return moduleExports;\n}\n\ninterface PackageInfo {\n name?: string;\n version?: string;\n description?: string;\n author?: string;\n repository?: string | { url?: string };\n homepage?: string;\n type?: string;\n}\n\nfunction readPackageJson(projectRoot: string): PackageInfo {\n const packagePath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(packagePath)) {\n return {};\n }\n\n try {\n const content = fs.readFileSync(packagePath, \"utf8\");\n return JSON.parse(content) as PackageInfo;\n } catch (error) {\n throw new Error(`Failed to read package.json: ${error}`);\n }\n}\n\ninterface MetadataBuildOptions {\n projectRoot: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface MetadataBuildResult {\n metadata: Metadata;\n defaultsApplied: string[];\n sourceMetadataPath: string;\n}\n\nexport async function buildMetadataArtifact(options: MetadataBuildOptions): Promise<MetadataBuildResult> {\n const projectRoot = options.projectRoot;\n const packageInfo = readPackageJson(projectRoot);\n const { metadata: authored, sourcePath } = await loadAuthoredMetadata(projectRoot);\n const defaultsApplied: string[] = [];\n\n const folderName = path.basename(projectRoot);\n\n const name = resolveField(\n \"name\",\n authored.name,\n () => packageInfo.name ?? folderName,\n defaultsApplied,\n \"package.json name\"\n );\n\n const displayName = resolveField(\n \"displayName\",\n authored.displayName,\n () => {\n const source = packageInfo.name ?? folderName;\n return source\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \");\n },\n defaultsApplied,\n \"package.json name\"\n );\n\n const versionRaw = resolveField(\n \"version\",\n authored.version,\n () => packageInfo.version ?? \"0.1.0\",\n defaultsApplied,\n \"package.json version\"\n );\n const version = typeof versionRaw === \"number\" ? String(versionRaw) : versionRaw;\n\n const category = determineCategory(authored, defaultsApplied);\n\n const description = authored.description ?? packageInfo.description;\n if (!authored.description && packageInfo.description) {\n defaultsApplied.push(\"description → package.json description\");\n }\n\n const author = authored.author ?? packageInfo.author;\n if (!authored.author && packageInfo.author) {\n defaultsApplied.push(\"author → package.json author\");\n }\n\n const repository = authored.repository ?? extractRepository(packageInfo.repository);\n if (!authored.repository && repository) {\n defaultsApplied.push(\"repository → package.json repository\");\n }\n\n const website = authored.website ?? packageInfo.homepage;\n if (!authored.website && packageInfo.homepage) {\n defaultsApplied.push(\"website → package.json homepage\");\n }\n\n const payment = resolvePayment(authored, defaultsApplied);\n\n const baseImage = authored.image ?? authored.iconPath;\n const animation = authored.animation_url ?? authored.videoPath;\n\n const discovery = buildDiscovery(authored);\n\n const metadataTools: Tool[] = options.tools.map((tool) => {\n const overrides: ToolMetadataOverrides = tool.metadata\n ? ToolMetadataOverridesSchema.parse(tool.metadata)\n : {};\n const toolName = overrides.name ?? tool.filename;\n const toolDescription = overrides.description ?? `${toolName} tool`;\n const toolPayment = overrides.payment ?? payment ?? undefined;\n if (!overrides.payment && toolPayment && payment && toolPayment === payment) {\n defaultsApplied.push(`tool ${toolName} payment → agent payment`);\n }\n\n const toolDiscovery = overrides.discovery ?? undefined;\n const toolChains = overrides.chains ?? authored.chains ?? undefined;\n\n const toolDefinition: Tool = {\n name: toolName,\n description: toolDescription,\n inputSchema: tool.inputSchema as JsonSchema7Type,\n };\n\n if (overrides.annotations) {\n toolDefinition.annotations = overrides.annotations;\n }\n if (toolPayment) {\n toolDefinition.payment = toolPayment;\n }\n if (toolDiscovery) {\n toolDefinition.discovery = toolDiscovery;\n }\n if (toolChains) {\n toolDefinition.chains = toolChains;\n }\n\n return toolDefinition;\n });\n\n const metadata: Metadata = MetadataSchema.parse({\n metadataSpecVersion: authored.metadataSpecVersion ?? METADATA_SPEC_VERSION,\n name,\n displayName,\n version,\n description,\n author,\n repository,\n website,\n category,\n termsOfService: authored.termsOfService,\n mcpUrl: authored.mcpUrl,\n payment: payment ?? undefined,\n tools: metadataTools,\n discovery,\n promptExamples: authored.promptExamples,\n iconPath: authored.iconPath,\n videoPath: authored.videoPath,\n image: baseImage,\n animation_url: animation,\n chains: authored.chains,\n });\n\n return {\n metadata,\n defaultsApplied,\n sourceMetadataPath: sourcePath,\n };\n}\n\nfunction resolveField<T>(\n field: string,\n value: T | undefined,\n fallback: () => T,\n defaultsApplied: string[],\n fallbackLabel: string\n): T {\n if (value !== undefined && value !== null && value !== \"\") {\n return value;\n }\n const resolved = fallback();\n defaultsApplied.push(`${field} → ${fallbackLabel}`);\n return resolved;\n}\n\nfunction determineCategory(authored: AuthoredMetadata, defaultsApplied: string[]): string {\n if (authored.category) {\n return authored.category;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n defaultsApplied.push(\"category → metadata.categories[0]\");\n return authored.categories[0];\n }\n defaultsApplied.push(\"category → default category\");\n return \"utility\";\n}\n\nfunction extractRepository(repository: PackageInfo[\"repository\"]): string | undefined {\n if (!repository) {\n return undefined;\n }\n if (typeof repository === \"string\") {\n return repository;\n }\n return repository.url;\n}\n\nfunction resolvePayment(authored: AuthoredMetadata, defaults: string[]): PaymentConfig | undefined {\n if (authored.payment) {\n return authored.payment;\n }\n\n const discoveryPricing = authored.discovery?.pricing as Record<string, unknown> | undefined;\n const legacyPricing = authored.pricing as Record<string, unknown> | undefined;\n const pricing = discoveryPricing ?? legacyPricing;\n\n if (!pricing) {\n return undefined;\n }\n\n const amount = typeof pricing.defaultAmount === \"number\" ? pricing.defaultAmount : 0;\n const sourceLabel = discoveryPricing\n ? \"discovery.pricing.defaultAmount\"\n : \"pricing.defaultAmount\";\n defaults.push(`payment → synthesized from ${sourceLabel}`);\n\n const acceptedMethodsRaw = Array.isArray(pricing.acceptedMethods)\n ? (pricing.acceptedMethods as string[])\n : [\"402\"];\n const acceptedMethods = acceptedMethodsRaw.map((method) =>\n method === \"x402\" ? \"x402\" : \"402\"\n ) as (\"x402\" | \"402\")[];\n return {\n amountUSDC: amount,\n description: typeof pricing.description === \"string\" ? pricing.description : undefined,\n x402: acceptedMethods.includes(\"x402\"),\n plain402: acceptedMethods.includes(\"402\"),\n acceptedMethods,\n acceptedCurrencies: Array.isArray(pricing.acceptedCurrencies)\n ? (pricing.acceptedCurrencies as string[])\n : [\"USDC\"],\n chains: Array.isArray(pricing.chains)\n ? (pricing.chains as (string | number)[])\n : [8453],\n } satisfies PaymentConfig;\n}\n\nfunction buildDiscovery(authored: AuthoredMetadata): DiscoveryMetadata | undefined {\n const legacyDiscovery: DiscoveryMetadata = {};\n\n if (Array.isArray(authored.keywords) && authored.keywords.length > 0) {\n legacyDiscovery.keywords = authored.keywords;\n }\n if (Array.isArray(authored.useCases) && authored.useCases.length > 0) {\n legacyDiscovery.useCases = authored.useCases;\n }\n if (Array.isArray(authored.capabilities) && authored.capabilities.length > 0) {\n legacyDiscovery.capabilities = authored.capabilities;\n }\n if (authored.requirements) {\n legacyDiscovery.requirements = authored.requirements;\n }\n if (authored.compatibility) {\n legacyDiscovery.compatibility = authored.compatibility;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n legacyDiscovery.category = authored.categories[0];\n }\n if (authored.pricing) {\n legacyDiscovery.pricing = authored.pricing;\n }\n\n const merged = {\n ...legacyDiscovery,\n ...(authored.discovery ?? {}),\n } as DiscoveryMetadata;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { z, type ZodSchema } from \"zod\";\nimport { zodToJsonSchema, type JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n} from \"../types/index\";\nimport { Metadata, ToolMetadataOverrides } from \"../types/metadata\";\nimport type { DefinedPayment } from \"../payment/index\";\nimport { withPaymentRequirement } from \"../payment/index\";\nimport { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../utils/module-loader\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\n\nexport interface ValidateOptions {\n input: string;\n}\n\ninterface LoadToolsOptions {\n projectRoot?: string;\n}\n\nconst SUPPORTED_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n];\n\nexport async function validateCommand(options: ValidateOptions): Promise<void> {\n console.log(\"🔍 Validating OpenTool metadata...\");\n try {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No valid tools found - metadata validation aborted\");\n }\n\n const { metadata, defaultsApplied, sourceMetadataPath } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n logMetadataSummary(metadata, defaultsApplied, sourceMetadataPath);\n console.log(\"\\n✅ Metadata validation passed!\\n\");\n } catch (error) {\n console.error(\"❌ Metadata validation failed:\", error);\n process.exit(1);\n }\n}\n\nexport async function validateFullCommand(options: ValidateOptions): Promise<void> {\n console.log(\"🔍 Running full OpenTool validation...\\n\");\n try {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No tools discovered in the target directory\");\n }\n\n const names = tools.map((tool) => tool.metadata?.name ?? tool.filename);\n const duplicates = findDuplicates(names);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate tool names found: ${duplicates.join(\", \")}`);\n }\n\n const { metadata, defaultsApplied, sourceMetadataPath } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n console.log(`📦 Tools loaded: ${tools.length}`);\n tools.forEach((tool) => {\n const toolName = tool.metadata?.name ?? tool.filename;\n const description = tool.metadata?.description ?? `${toolName} tool`;\n console.log(` • ${toolName} — ${description}`);\n });\n\n logMetadataSummary(metadata, defaultsApplied, sourceMetadataPath);\n console.log(\"\\n✅ Full validation completed successfully\\n\");\n } catch (error) {\n console.error(\"❌ Full validation failed:\", error);\n process.exit(1);\n }\n}\n\nexport async function loadAndValidateTools(\n toolsDir: string,\n options: LoadToolsOptions = {}\n): Promise<InternalToolDefinition[]> {\n const files = fs\n .readdirSync(toolsDir)\n .filter((file) => SUPPORTED_EXTENSIONS.includes(path.extname(file)));\n\n if (files.length === 0) {\n return [];\n }\n\n const projectRoot = options.projectRoot ?? path.dirname(toolsDir);\n const tempDir = path.join(toolsDir, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const entryPoints = files.map((file) => path.join(toolsDir, file));\n\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints,\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n bundle: true,\n external: [\"opentool\", \"opentool/*\"],\n });\n\n const tools: InternalToolDefinition[] = [];\n\n try {\n for (const file of files) {\n const compiledPath = resolveCompiledPath(outDir, file);\n if (!fs.existsSync(compiledPath)) {\n throw new Error(`Failed to compile ${file}`);\n }\n\n const moduleExports = await importFresh(compiledPath);\n const toolModule = extractToolModule(moduleExports, file);\n\n const schema = ensureZodSchema(toolModule.schema, file);\n const paymentExport = toolModule.payment as DefinedPayment | undefined;\n const toolName =\n toolModule.metadata?.name ?? toolModule.metadata?.title ?? toBaseName(file);\n const inputSchemaRaw = schema ? toJsonSchema(toolName, schema) : undefined;\n const inputSchema = normalizeInputSchema(inputSchemaRaw);\n\n const httpHandlersRaw = collectHttpHandlers(toolModule, file);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n throw new Error(\n `${file} must export at least one HTTP handler (e.g. POST)`\n );\n }\n\n if (paymentExport) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withPaymentRequirement(entry.handler, paymentExport),\n };\n }\n }\n\n const httpHandlerMap = toHttpHandlerMap(httpHandlers);\n const defaultMethod =\n typeof toolModule.mcp?.defaultMethod === \"string\"\n ? toolModule.mcp.defaultMethod\n : undefined;\n\n const adapter = createMcpAdapter({\n name: toolName,\n httpHandlers: httpHandlerMap,\n ...(defaultMethod ? { defaultMethod } : {}),\n ...(schema ? { schema } : {}),\n });\n\n let metadataOverrides: ToolMetadataOverrides | null =\n toolModule.metadata ?? null;\n\n if (paymentExport?.metadata) {\n if (metadataOverrides) {\n metadataOverrides = {\n ...metadataOverrides,\n payment: metadataOverrides.payment ?? (paymentExport.metadata as any),\n annotations: {\n ...(metadataOverrides.annotations ?? {}),\n requiresPayment:\n metadataOverrides.annotations?.requiresPayment ?? true,\n },\n };\n } else {\n metadataOverrides = {\n payment: paymentExport.metadata as any,\n annotations: { requiresPayment: true },\n } as ToolMetadataOverrides;\n }\n }\n\n const tool: InternalToolDefinition = {\n schema: schema ?? undefined,\n inputSchema,\n metadata: metadataOverrides,\n httpHandlers,\n mcpConfig: normalizeMcpConfig(toolModule.mcp, file),\n filename: toBaseName(file),\n sourcePath: path.join(toolsDir, file),\n handler: async (params: unknown) => adapter(params),\n payment: paymentExport ?? null,\n };\n\n tools.push(tool);\n }\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n\n return tools;\n}\n\nfunction extractToolModule(exportsObject: any, filename: string): any {\n const candidates = [exportsObject, exportsObject?.default];\n for (const candidate of candidates) {\n if (candidate && typeof candidate === \"object\") {\n const hasSchema = candidate.schema && typeof candidate.schema === \"object\";\n const hasHttp = HTTP_METHODS.some((method) => typeof candidate[method] === \"function\");\n if (hasSchema || hasHttp) {\n return candidate;\n }\n }\n }\n throw new Error(\n `${filename} must export a tool definition. Expected a Zod schema plus HTTP handlers (export async function POST).`\n );\n}\n\nfunction toJsonSchema(name: string, schema?: ZodSchema): JsonSchema7Type | undefined {\n if (!schema) {\n return undefined;\n }\n try {\n return zodToJsonSchema(schema, {\n name: `${name}Schema`,\n target: \"jsonSchema7\",\n $refStrategy: \"none\",\n });\n } catch (error) {\n throw new Error(`Failed to convert Zod schema for ${name}: ${error}`);\n }\n}\n\nfunction toBaseName(file: string): string {\n return file.replace(/\\.[^.]+$/, \"\");\n}\n\nfunction ensureZodSchema(schemaCandidate: unknown, filename: string): ZodSchema | undefined {\n if (schemaCandidate == null) {\n return undefined;\n }\n\n if (schemaCandidate instanceof z.ZodType) {\n return schemaCandidate as ZodSchema;\n }\n\n const schema = schemaCandidate as ZodSchema;\n if (typeof (schema as any)?.parse !== \"function\") {\n throw new Error(`${filename} schema export must be a Zod schema (missing parse method)`);\n }\n\n return schema;\n}\n\nfunction collectHttpHandlers(module: any, filename: string): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n for (const method of HTTP_METHODS) {\n const handler = module?.[method];\n if (typeof handler === \"function\") {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n }\n\n // Ensure deterministic ordering\n handlers.sort((a, b) => HTTP_METHODS.indexOf(a.method) - HTTP_METHODS.indexOf(b.method));\n\n // Warn when duplicate methods detected\n const duplicates = findDuplicates(handlers.map((h) => h.method));\n if (duplicates.length > 0) {\n throw new Error(\n `${filename} exports multiple handlers for HTTP method(s): ${duplicates.join(\", \")}`\n );\n }\n\n return handlers;\n}\n\n\nfunction toHttpHandlerMap(handlers: HttpHandlerDefinition[]): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(\n schema: JsonSchema7Type | undefined\n): JsonSchema7Type | undefined {\n if (!schema || typeof schema !== \"object\") {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema)) as Record<string, unknown>;\n\n if (typeof clone.$ref === \"string\" && clone.$ref.startsWith(\"#/definitions/\")) {\n const refName = clone.$ref.replace(\"#/definitions/\", \"\");\n const definitions = clone.definitions as Record<string, unknown> | undefined;\n if (definitions && typeof definitions[refName] === \"object\") {\n return normalizeInputSchema(definitions[refName] as JsonSchema7Type);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!(\"type\" in clone)) {\n clone.type = \"object\";\n }\n\n return clone as JsonSchema7Type;\n}\n\nfunction normalizeMcpConfig(rawConfig: unknown, filename: string): McpConfig | null {\n if (rawConfig == null) {\n return null;\n }\n\n if (rawConfig === false) {\n return null;\n }\n\n if (rawConfig === true) {\n return { enabled: true };\n }\n\n if (!isPlainObject(rawConfig)) {\n throw new Error(`${filename} export \\\\\"mcp\\\\\" must be an object with an enabled flag`);\n }\n\n const enabledRaw = (rawConfig as Record<string, unknown>).enabled;\n if (enabledRaw === false) {\n return null;\n }\n\n if (enabledRaw !== true) {\n throw new Error(`${filename} mcp.enabled must be explicitly set to true to opt-in to MCP`);\n }\n\n const modeRaw = (rawConfig as Record<string, unknown>).mode;\n let mode: McpConfig[\"mode\"] | undefined;\n if (typeof modeRaw === \"string\") {\n const normalized = modeRaw.toLowerCase();\n if ([\"stdio\", \"lambda\", \"dual\"].includes(normalized)) {\n mode = normalized as McpConfig[\"mode\"];\n } else {\n throw new Error(\n `${filename} mcp.mode must be one of \\\"stdio\\\", \\\"lambda\\\", or \\\"dual\\\" if specified`\n );\n }\n }\n\n const defaultMethodRaw = (rawConfig as Record<string, unknown>).defaultMethod;\n const defaultMethod =\n typeof defaultMethodRaw === \"string\" ? defaultMethodRaw.toUpperCase() : undefined;\n\n const overridesRaw = (rawConfig as Record<string, unknown>).metadataOverrides;\n const metadataOverrides = isPlainObject(overridesRaw)\n ? (overridesRaw as Partial<ToolMetadataOverrides>)\n : undefined;\n\n const config: McpConfig = {\n enabled: true,\n };\n\n if (mode) {\n config.mode = mode;\n }\n\n if (defaultMethod) {\n config.defaultMethod = defaultMethod;\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction findDuplicates(values: string[]): string[] {\n const seen = new Map<string, number>();\n const duplicates = new Set<string>();\n values.forEach((value) => {\n const count = seen.get(value) ?? 0;\n seen.set(value, count + 1);\n if (count >= 1) {\n duplicates.add(value);\n }\n });\n return Array.from(duplicates.values());\n}\n\nfunction logMetadataSummary(\n metadata: Metadata,\n defaultsApplied: string[],\n sourceMetadataPath: string\n): void {\n console.log(`📄 metadata loaded from ${sourceMetadataPath}`);\n console.log(\"\\n📊 Metadata Summary:\");\n console.log(` • Name: ${metadata.name}`);\n console.log(` • Display Name: ${metadata.displayName}`);\n console.log(` • Version: ${metadata.version}`);\n console.log(` • Category: ${metadata.category}`);\n console.log(` • Tools: ${metadata.tools.length}`);\n console.log(` • Spec Version: ${metadata.metadataSpecVersion}`);\n if (metadata.payment) {\n console.log(` • Payment: $${metadata.payment.amountUSDC} USDC`);\n }\n if (defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n defaultsApplied.forEach((entry) => console.log(` • ${entry}`));\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { InternalToolDefinition } from \"../types/index\";\nimport { Metadata } from \"../types/metadata\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { loadAndValidateTools } from \"./validate\";\n\nexport interface GenerateMetadataOptions {\n input: string;\n output?: string;\n}\n\nexport interface GenerateMetadataResult {\n metadata: Metadata;\n defaultsApplied: string[];\n tools: InternalToolDefinition[];\n outputPath: string;\n}\n\nexport async function generateMetadataCommand(options: GenerateMetadataOptions): Promise<void> {\n const startTimestamp = timestamp();\n console.log(`[${startTimestamp}] Generating OpenTool metadata...`);\n\n try {\n const result = await generateMetadata(options);\n const endTimestamp = timestamp();\n console.log(`[${endTimestamp}] Metadata generation completed successfully!`);\n console.log(`Output file: ${result.outputPath}`);\n console.log(`Spec version: ${result.metadata.metadataSpecVersion}`);\n console.log(`Tools included: ${result.tools.length}`);\n if (result.defaultsApplied.length > 0) {\n console.log(\"Applied defaults:\");\n for (const entry of result.defaultsApplied) {\n console.log(` • ${entry}`);\n }\n }\n } catch (error) {\n const endTimestamp = timestamp();\n console.error(`[${endTimestamp}] Metadata generation failed:`, error);\n process.exit(1);\n }\n}\n\nexport async function generateMetadata(options: GenerateMetadataOptions): Promise<GenerateMetadataResult> {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n\n const { metadata, defaultsApplied } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n const outputPath = options.output\n ? path.resolve(options.output)\n : path.join(projectRoot, \"metadata.json\");\n fs.writeFileSync(outputPath, JSON.stringify(metadata, null, 2));\n\n return {\n metadata,\n defaultsApplied,\n tools,\n outputPath,\n };\n}\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n"]}
1
+ {"version":3,"sources":["../src/x402/types.ts","../src/x402/helpers.ts","../src/x402/client.ts","../src/x402/index.ts","../src/adapters/mcp.ts","../src/runtime/index.ts","../src/types/index.ts","../src/wallets/constants.ts","../src/wallets/providers/private-key.ts","../src/wallets/providers/turnkey.ts","../src/wallets/index.ts","../src/ai/errors.ts","../src/ai/config.ts","../src/ai/models.ts","../src/ai/tools.ts","../src/ai/messages.ts","../src/ai/client.ts","../src/types/metadata.ts","../src/utils/esbuild.ts","../src/utils/module-loader.ts","../src/cli/shared/metadata.ts","../src/cli/validate.ts","../src/cli/generate-metadata.ts"],"names":["z","path","fs","HTTP_METHODS","baseSepolia","privateKeyToAccount","http","createWalletClient","createPublicClient","tokens","base","resolve","payload","path2","path3","loadMetadata","path4","fs3","fs4","normalizeInputSchema","collectHttpHandlers","toHttpHandlerMap","zodToJsonSchema","isPlainObject","path6","fs5"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const X402_VERSION = 1;\nexport const HEADER_X402 = \"X-PAYMENT\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nexport const x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().positive(),\n scheme: z.string().min(1),\n network: z.string().min(1),\n correlationId: z.string().optional(),\n payload: z.unknown(),\n});\n\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface X402PaymentAttempt {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n}\n\nexport interface X402VerificationResult {\n success: boolean;\n metadata?: {\n optionId: string;\n verifier: string;\n [key: string]: unknown;\n };\n failure?: {\n reason: string;\n code: string;\n };\n responseHeaders?: Record<string, string>;\n}\n\nexport interface X402FacilitatorConfig {\n url: string;\n verifyPath?: string;\n settlePath?: string;\n apiKeyHeader?: string;\n}\n\nexport interface CurrencySpec {\n decimals: number;\n symbol: string;\n network: string;\n assetAddress: string;\n}\n\nexport const SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n};\n\nexport const DEFAULT_FACILITATOR: X402FacilitatorConfig = {\n url: \"https://facilitator.x402.rs\",\n verifyPath: \"/verify\",\n settlePath: \"/settle\",\n apiKeyHeader: \"Authorization\",\n};\n","import { z } from \"zod\";\nimport {\n HEADER_X402,\n HEADER_PAYMENT_RESPONSE,\n X402_VERSION,\n x402PaymentHeaderSchema,\n x402RequirementSchema,\n type X402PaymentAttempt,\n type X402Requirement,\n type X402VerificationResult,\n type X402FacilitatorConfig,\n} from \"./types\";\n\nexport interface X402PaymentDefinition {\n amount: string;\n currency: { code: string; symbol: string; decimals: number };\n asset: { symbol: string; network: string; address: string; decimals: number };\n payTo: string;\n resource?: string;\n description?: string;\n scheme: string;\n network: string;\n facilitator: X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport function createX402PaymentRequired(\n definition: X402PaymentDefinition\n): Response {\n const requirement = toX402Requirement(definition);\n\n // Build full payment requirements response\n const body = {\n schemaVersion: 1,\n message: definition.description ?? \"Payment required\",\n resource: definition.resource,\n accepts: [\n {\n id: \"x402\",\n title: `Pay ${definition.amount} ${definition.currency.code}`,\n description: definition.description,\n amount: {\n value: definition.amount,\n currency: {\n code: definition.currency.code,\n symbol: definition.currency.symbol,\n decimals: definition.currency.decimals,\n kind: \"crypto\",\n },\n },\n asset: {\n symbol: definition.asset.symbol,\n network: definition.asset.network,\n address: definition.asset.address,\n decimals: definition.asset.decimals,\n standard: \"erc20\",\n },\n payTo: definition.payTo,\n resource: definition.resource,\n proof: {\n mode: \"x402\",\n scheme: definition.scheme,\n network: definition.network,\n version: X402_VERSION,\n facilitator: definition.facilitator,\n verifier: \"x402:facilitator\",\n },\n },\n ],\n metadata: definition.metadata ?? {},\n x402: {\n x402Version: X402_VERSION,\n error: definition.description ?? \"Payment required\",\n accepts: [requirement],\n },\n };\n\n return new Response(JSON.stringify(body), {\n status: 402,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nexport function extractX402Attempt(request: Request): X402PaymentAttempt | null {\n const raw = request.headers.get(HEADER_X402);\n if (!raw) {\n return null;\n }\n\n try {\n const payload = decodeJson(raw, x402PaymentHeaderSchema);\n return {\n type: \"x402\",\n headerName: HEADER_X402,\n raw,\n payload,\n };\n } catch {\n return null;\n }\n}\n\nexport async function verifyX402Payment(\n attempt: X402PaymentAttempt,\n definition: X402PaymentDefinition,\n options: {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n } = {}\n): Promise<X402VerificationResult> {\n const fetchImpl = options.fetchImpl ?? fetch;\n const facilitator = definition.facilitator;\n\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n const requirement = toX402Requirement(definition);\n const headers = buildFacilitatorHeaders(facilitator);\n\n try {\n const verifyResponse = await fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n }),\n });\n\n if (!verifyResponse.ok) {\n return {\n success: false,\n failure: {\n reason: `Facilitator verify request failed: ${verifyResponse.status}`,\n code: \"verification_failed\",\n },\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n failure: {\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n },\n };\n }\n\n const responseHeaders: Record<string, string> = {};\n if (options.settle) {\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n try {\n const settleResponse = await fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n }),\n });\n\n if (settleResponse.ok) {\n const settlePayload = (await settleResponse.json()) as {\n txHash?: string;\n [key: string]: unknown;\n };\n if (settlePayload.txHash) {\n responseHeaders[HEADER_PAYMENT_RESPONSE] = JSON.stringify({\n settled: true,\n txHash: settlePayload.txHash,\n });\n }\n }\n } catch {\n // Settlement failure doesn't fail verification\n }\n }\n\n const result: X402VerificationResult = {\n success: true,\n metadata: {\n optionId: \"x402\",\n verifier: \"x402:facilitator\",\n amount: definition.amount,\n currency: definition.currency.code,\n network: definition.network,\n },\n };\n\n if (Object.keys(responseHeaders).length > 0) {\n result.responseHeaders = responseHeaders;\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Unknown error\",\n code: \"verification_failed\",\n },\n };\n }\n}\n\nfunction toX402Requirement(definition: X402PaymentDefinition): X402Requirement {\n const decimals = definition.asset.decimals;\n const units = decimalToBaseUnits(definition.amount, decimals);\n\n return x402RequirementSchema.parse({\n scheme: definition.scheme,\n network: definition.network,\n maxAmountRequired: units,\n asset: definition.asset.address,\n payTo: definition.payTo,\n resource: definition.resource,\n description: definition.description,\n mimeType: \"application/json\",\n maxTimeoutSeconds: 900,\n extra: {\n symbol: definition.asset.symbol,\n currencyCode: definition.currency.code,\n decimals,\n },\n });\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nfunction buildFacilitatorHeaders(facilitator: X402FacilitatorConfig): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (facilitator.apiKeyHeader && process.env.X402_FACILITATOR_API_KEY) {\n headers[facilitator.apiKeyHeader] = process.env.X402_FACILITATOR_API_KEY;\n }\n return headers;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nexport const PAYMENT_HEADERS = [HEADER_X402, HEADER_PAYMENT_RESPONSE] as const;\n","import { createWalletClient, http, type Address, type PrivateKeyAccount, type WalletClient } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { baseSepolia } from \"viem/chains\";\n\nexport interface X402ClientConfig {\n privateKey: `0x${string}`;\n rpcUrl?: string;\n}\n\nexport interface X402PayRequest {\n url: string;\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport interface X402PayResult {\n success: boolean;\n response?: Response;\n error?: string;\n paymentDetails?: {\n amount: string;\n currency: string;\n network: string;\n signature: string;\n };\n}\n\nexport class X402Client {\n private account: PrivateKeyAccount;\n private walletClient: ReturnType<typeof createWalletClient>;\n\n constructor(config: X402ClientConfig) {\n this.account = privateKeyToAccount(config.privateKey);\n\n // Support both base and base-sepolia\n const chain = baseSepolia;\n this.walletClient = createWalletClient({\n account: this.account,\n chain,\n transport: http(config.rpcUrl),\n });\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n // Step 1: Make initial request to get 402 response\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n // If not 402, return the response directly\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n // Step 2: Parse payment requirements\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n // Step 3: Generate EIP-3009 authorization\n const authorization = await this.signTransferAuthorization({\n from: this.account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900), // 15 min\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256).toString(16).padStart(2, '0')\n ).join('')}` as `0x${string}`,\n tokenAddress: x402Requirements.asset as Address,\n });\n\n // Step 4: Build X-PAYMENT header\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature: authorization.signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = Buffer.from(JSON.stringify(paymentProof)).toString(\"base64\");\n\n // Step 5: Retry request with payment\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature: authorization.signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n tokenAddress: Address;\n }) {\n if (!this.walletClient.chain) {\n throw new Error(\"Wallet client chain not configured\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.walletClient.chain.id,\n verifyingContract: params.tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n\n const signature = await this.walletClient.signTypedData({\n account: this.account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n\n return {\n signature,\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n }\n\n getAddress(): Address {\n return this.account.address;\n }\n}\n\n// Helper function for quick testing\nexport async function payX402(config: {\n privateKey: `0x${string}`;\n url: string;\n body?: unknown;\n rpcUrl?: string;\n}): Promise<X402PayResult> {\n const client = new X402Client({\n privateKey: config.privateKey,\n ...(config.rpcUrl ? { rpcUrl: config.rpcUrl } : {}),\n });\n\n return client.pay({\n url: config.url,\n body: config.body,\n });\n}\n\nexport interface EIP3009Authorization {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n}\n\nexport interface X402BrowserClientConfig {\n walletClient: WalletClient;\n chainId: number;\n}\n\nexport class X402BrowserClient {\n private walletClient: WalletClient;\n private chainId: number;\n\n constructor(config: X402BrowserClientConfig) {\n this.walletClient = config.walletClient;\n this.chainId = config.chainId;\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n const account = this.walletClient.account;\n if (!account) {\n return {\n success: false,\n error: \"No account connected to wallet\",\n };\n }\n\n const authorization: EIP3009Authorization = {\n from: account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900),\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256).toString(16).padStart(2, '0')\n ).join('')}` as `0x${string}`,\n };\n\n const signature = await this.signTransferAuthorization(\n authorization,\n x402Requirements.asset as Address\n );\n\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = btoa(JSON.stringify(paymentProof));\n\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(\n authorization: EIP3009Authorization,\n tokenAddress: Address\n ): Promise<`0x${string}`> {\n const account = this.walletClient.account;\n if (!account) {\n throw new Error(\"No account connected to wallet\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.chainId,\n verifyingContract: tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value,\n validAfter: authorization.validAfter,\n validBefore: authorization.validBefore,\n nonce: authorization.nonce,\n };\n\n return await this.walletClient.signTypedData({\n account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n }\n}\n\nexport async function payX402WithWallet(\n walletClient: WalletClient,\n chainId: number,\n request: X402PayRequest\n): Promise<X402PayResult> {\n const client = new X402BrowserClient({ walletClient, chainId });\n return client.pay(request);\n}\n","import {\n createX402PaymentRequired,\n extractX402Attempt,\n verifyX402Payment,\n PAYMENT_HEADERS,\n type X402PaymentDefinition,\n} from \"./helpers\";\nimport {\n SUPPORTED_CURRENCIES,\n DEFAULT_FACILITATOR,\n type X402FacilitatorConfig,\n type X402VerificationResult,\n type CurrencySpec,\n} from \"./types\";\n\nexport interface DefineX402PaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n network?: string;\n assetAddress?: string;\n scheme?: \"exact\" | \"bounded\";\n facilitator?: string | X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport interface X402Payment {\n definition: X402PaymentDefinition;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequireX402PaymentOptions {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n onFailure?: (result: X402VerificationResult) => Response;\n}\n\nexport interface RequireX402PaymentSuccess {\n payment: {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n };\n headers: Record<string, string>;\n result: X402VerificationResult;\n}\n\nexport type RequireX402PaymentOutcome = Response | RequireX402PaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.x402.context\");\n\nexport class X402PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: X402VerificationResult | undefined;\n\n constructor(response: Response, verification?: X402VerificationResult) {\n super(\"X402 Payment required\");\n this.name = \"X402PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type X402PaymentContext = RequireX402PaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: X402PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getX402PaymentContext(\n request: Request\n): X402PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nexport function defineX402Payment(config: DefineX402PaymentConfig): X402Payment {\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n\n if (!currencySpec) {\n throw new Error(`Unsupported currency for x402 payments: ${currencyCode}`);\n }\n\n const network = config.network ?? currencySpec.network;\n const assetAddress = config.assetAddress ?? currencySpec.assetAddress;\n\n if (!network || !assetAddress) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\"\n );\n }\n\n const facilitator = resolveFacilitator(config.facilitator);\n const value = toDecimalString(config.amount);\n\n const definition: X402PaymentDefinition = {\n amount: value,\n currency: {\n code: currencyCode,\n symbol: currencySpec.symbol,\n decimals: currencySpec.decimals,\n },\n asset: {\n symbol: currencySpec.symbol,\n network,\n address: assetAddress,\n decimals: currencySpec.decimals,\n },\n payTo: config.payTo,\n scheme: config.scheme ?? \"exact\",\n network,\n facilitator,\n };\n\n if (config.resource) {\n definition.resource = config.resource;\n }\n if (config.message) {\n definition.description = config.message;\n }\n if (config.metadata) {\n definition.metadata = config.metadata;\n }\n\n const baseMetadata: Record<string, unknown> = {\n amountUSDC: currencyCode === \"USDC\" ? Number(value) : undefined,\n facilitator: \"x402rs\",\n network,\n };\n\n const metadata = config.metadata\n ? { ...baseMetadata, ...config.metadata }\n : baseMetadata;\n\n return {\n definition,\n metadata,\n };\n}\n\nexport async function requireX402Payment(\n request: Request,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): Promise<RequireX402PaymentOutcome> {\n const definition = isX402Payment(payment) ? payment.definition : payment;\n\n const attempt = extractX402Attempt(request);\n if (!attempt) {\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response);\n }\n\n const verifyOptions: Parameters<typeof verifyX402Payment>[2] = {};\n if (options.settle !== undefined) {\n verifyOptions.settle = options.settle;\n }\n if (options.fetchImpl !== undefined) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyX402Payment(attempt, definition, verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata as {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n },\n headers: verification.responseHeaders ?? {},\n result: verification,\n };\n}\n\nexport function withX402Payment(\n handler: (request: Request) => Promise<Response> | Response,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requireX402Payment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nfunction applyPaymentHeaders(\n response: Response,\n headers: Record<string, string>\n): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nfunction isX402Payment(value: unknown): value is X402Payment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as X402Payment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: string | X402FacilitatorConfig | undefined\n): X402FacilitatorConfig {\n if (!value) {\n return DEFAULT_FACILITATOR;\n }\n if (typeof value === \"string\") {\n return { ...DEFAULT_FACILITATOR, url: value };\n }\n return value;\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nexport { PAYMENT_HEADERS };\nexport type { X402PaymentDefinition, X402VerificationResult, X402FacilitatorConfig, CurrencySpec };\nexport { SUPPORTED_CURRENCIES, DEFAULT_FACILITATOR };\nexport {\n X402Client,\n payX402,\n X402BrowserClient,\n payX402WithWallet,\n type X402ClientConfig,\n type X402PayRequest,\n type X402PayResult,\n type X402BrowserClientConfig,\n type EIP3009Authorization,\n} from \"./client\";\n","import { z, type ZodSchema } from \"zod\";\nimport { X402PaymentRequiredError } from \"../x402/index\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(\n `Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`\n );\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof X402PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\"\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { zodToJsonSchema } from '@alcyone-labs/zod-to-json-schema';\nimport { createMcpAdapter, HTTP_METHODS } from '../adapters/mcp';\nimport { withX402Payment } from '../x402/index';\nimport {\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type ToolResponse,\n} from '../types/index';\nimport { BuildMetadata, Tool } from '../types/metadata';\n\ninterface AdapterEntry {\n tool: InternalToolDefinition;\n invoke: (params: unknown) => Promise<ToolResponse>;\n}\n\n/**\n * Create local development server for MCP tooling.\n */\nexport function createDevServer(tools: InternalToolDefinition[]): Server {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n\n const adapters = buildAdapters(tools);\n\n const server = new Server(\n {\n name: 'opentool-dev',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n return server;\n}\n\n/**\n * Create stdio server for use with AWS Lambda MCP Adapter\n */\nexport async function createStdioServer(tools?: InternalToolDefinition[]): Promise<void> {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n const toolDefinitions = tools || (await loadToolsFromDirectory(metadataMap));\n const adapters = buildAdapters(toolDefinitions);\n\n const server = new Server(\n {\n name: 'opentool-runtime',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('MCP stdio server started');\n}\n\nfunction buildAdapters(tools: InternalToolDefinition[]): AdapterEntry[] {\n return tools\n .filter((tool) => isMcpEnabled(tool))\n .map((tool) => {\n const httpHandlers = toHttpHandlerMap(tool.httpHandlers);\n const adapterOptions = {\n name: tool.metadata?.name || tool.filename,\n httpHandlers,\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod\n ? { defaultMethod: tool.mcpConfig.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n return {\n tool,\n invoke: adapter,\n };\n });\n}\n\n/**\n * Load tools from tools directory\n */\nasync function loadToolsFromDirectory(metadataMap: Map<string, Tool>): Promise<InternalToolDefinition[]> {\n const tools: InternalToolDefinition[] = [];\n const toolsDir = path.join(process.cwd(), 'tools');\n if (!fs.existsSync(toolsDir)) {\n return tools;\n }\n\n const files = fs.readdirSync(toolsDir);\n for (const file of files) {\n if (!isSupportedToolFile(file)) {\n continue;\n }\n\n const toolPath = path.join(toolsDir, file);\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const exportsObject = require(toolPath);\n const candidate = resolveModuleCandidate(exportsObject);\n if (!candidate?.schema) {\n continue;\n }\n\n const baseName = file.replace(/\\.[^.]+$/, '');\n const name = candidate.metadata?.name || baseName;\n const meta = metadataMap.get(name);\n\n let inputSchema = meta?.inputSchema;\n if (!inputSchema) {\n try {\n inputSchema = zodToJsonSchema(candidate.schema, {\n name: `${name}Schema`,\n target: 'jsonSchema7',\n $refStrategy: 'none',\n });\n } catch (error) {\n inputSchema = { type: 'object' };\n }\n }\n inputSchema = normalizeInputSchema(inputSchema);\n\n const payment = candidate.payment ?? null;\n const httpHandlersRaw = collectHttpHandlers(candidate);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n continue;\n }\n\n if (payment) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, payment),\n };\n }\n }\n\n const mcpConfig = normalizeRuntimeMcpConfig(candidate.mcp);\n const adapterOptions = {\n name,\n httpHandlers: toHttpHandlerMap(httpHandlers),\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n ...(typeof candidate.mcp?.defaultMethod === 'string'\n ? { defaultMethod: candidate.mcp.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n const tool: InternalToolDefinition = {\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n inputSchema,\n metadata: candidate.metadata || meta || null,\n filename: baseName,\n httpHandlers,\n mcpConfig,\n handler: async (params) => adapter(params),\n payment,\n };\n tools.push(tool);\n } catch (error) {\n console.warn(`Failed to load tool from ${file}: ${error}`);\n }\n }\n\n return tools;\n}\n\nfunction loadMetadata(): BuildMetadata | null {\n const metadataPath = path.join(process.cwd(), 'metadata.json');\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n try {\n const contents = fs.readFileSync(metadataPath, 'utf8');\n return JSON.parse(contents) as BuildMetadata;\n } catch (error) {\n console.warn(`Failed to parse metadata.json: ${error}`);\n return null;\n }\n}\n\nfunction buildMetadataMap(metadata: BuildMetadata | null): Map<string, Tool> {\n const map = new Map<string, Tool>();\n if (!metadata?.tools) {\n return map;\n }\n metadata.tools.forEach((tool) => {\n map.set(tool.name, tool);\n });\n return map;\n}\n\nfunction serializeTool(tool: InternalToolDefinition, metadataMap: Map<string, Tool>) {\n const name = tool.metadata?.name || tool.filename;\n const meta = metadataMap.get(name);\n return {\n name,\n description: meta?.description || tool.metadata?.description || `${tool.filename} tool`,\n inputSchema: meta?.inputSchema || tool.inputSchema,\n annotations: meta?.annotations || tool.metadata?.annotations,\n payment: meta?.payment || tool.metadata?.payment,\n discovery: meta?.discovery || tool.metadata?.discovery,\n };\n}\n\nfunction isSupportedToolFile(file: string): boolean {\n return /\\.(cjs|mjs|js|ts)$/i.test(file);\n}\n\nfunction resolveModuleCandidate(exportsObject: any): any {\n if (!exportsObject) {\n return null;\n }\n if (exportsObject.schema) {\n return exportsObject;\n }\n if (exportsObject.default && exportsObject.default.schema) {\n return exportsObject.default;\n }\n return exportsObject;\n}\n\nfunction collectHttpHandlers(module: any): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n HTTP_METHODS.forEach((method) => {\n const handler = module?.[method];\n if (typeof handler === 'function') {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n });\n return handlers;\n}\n\n\nfunction toHttpHandlerMap(handlers: HttpHandlerDefinition[]): Record<string, HttpHandlerDefinition['handler']> {\n return handlers.reduce<Record<string, HttpHandlerDefinition['handler']>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(schema: any): any {\n if (!schema || typeof schema !== 'object') {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema));\n\n if (typeof clone.$ref === 'string' && clone.$ref.startsWith('#/definitions/')) {\n const refKey = clone.$ref.replace('#/definitions/', '');\n if (clone.definitions && typeof clone.definitions[refKey] === 'object') {\n return normalizeInputSchema(clone.definitions[refKey]);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!clone.type) {\n clone.type = 'object';\n }\n\n return clone;\n}\n\nfunction normalizeRuntimeMcpConfig(rawConfig: any): McpConfig | null {\n if (isPlainObject(rawConfig) && rawConfig.enabled === true) {\n let normalizedMode: McpConfig['mode'] | undefined;\n if (typeof rawConfig.mode === 'string') {\n const candidate = rawConfig.mode.toLowerCase();\n if (candidate === 'stdio' || candidate === 'lambda' || candidate === 'dual') {\n normalizedMode = candidate as McpConfig['mode'];\n } else {\n throw new Error('mcp.mode must be one of \"stdio\", \"lambda\", or \"dual\"');\n }\n }\n const metadataOverrides = isPlainObject(rawConfig.metadataOverrides)\n ? rawConfig.metadataOverrides\n : undefined;\n const config: McpConfig = { enabled: true };\n\n if (normalizedMode) {\n config.mode = normalizedMode;\n }\n\n if (typeof rawConfig.defaultMethod === 'string') {\n config.defaultMethod = rawConfig.defaultMethod.toUpperCase();\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n }\n\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\n}\n\nexport function resolveRuntimePath(value: string): string {\n if (value.startsWith('file://')) {\n return fileURLToPath(value);\n }\n return path.resolve(value);\n}\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { X402Payment } from \"../x402/index\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: X402Payment | null;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type { Tool, ToolMetadataOverrides, Metadata, BuildMetadata, PaymentConfig } from \"./metadata\";\n","import { zeroAddress } from \"viem\";\nimport { base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(\n host: string,\n fallbackUrls: readonly string[]\n): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\"\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(\n ETHEREUM_ALCHEMY_HOST,\n mainnet.rpcUrls.default.http\n ),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(\n BASE_SEPOLIA_ALCHEMY_HOST,\n baseSepolia.rpcUrls.default.http\n ),\n },\n};\n\nfunction createNativeToken(\n chainId: number,\n symbol: string,\n name: string\n): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(\n base.id,\n \"USDC\",\n \"USD Coin\",\n \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\",\n 6\n ),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(\n mainnet.id,\n \"USDC\",\n \"USD Coin\",\n \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\",\n 6\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","import { createPublicClient, createWalletClient, http, type PublicClient, type WalletClient } from \"viem\";\nimport { privateKeyToAccount, type Account } from \"viem/accounts\";\n\nimport type {\n ChainMetadata,\n HexAddress,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const withPrefix = trimmed.startsWith(\"0x\") ? trimmed : `0x${trimmed}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(withPrefix)) {\n throw new Error(\"wallet() privateKey must be a 32-byte hex string\");\n }\n return withPrefix as `0x${string}`;\n}\n\nexport interface PrivateKeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n privateKey: string;\n}\n\nexport interface PrivateKeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient;\n}\n\nexport function createPrivateKeyProvider(\n config: PrivateKeyProviderConfig\n): PrivateKeyProviderResult {\n const privateKey = normalizePrivateKey(config.privateKey);\n const account = privateKeyToAccount(privateKey);\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account: account as Account,\n walletClient: walletClient as WalletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n","import { Turnkey } from \"@turnkey/sdk-server\";\nimport { createAccount } from \"@turnkey/viem\";\nimport { createPublicClient, createWalletClient, http, type PublicClient, type WalletClient } from \"viem\";\n\nimport type {\n ChainMetadata,\n HexAddress,\n TurnkeySignWith,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nexport interface TurnkeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: TurnkeySignWith;\n apiBaseUrl?: string;\n}\n\nexport interface TurnkeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient;\n}\n\nexport async function createTurnkeyProvider(\n config: TurnkeyProviderConfig\n): Promise<TurnkeyProviderResult> {\n const turnkey = new Turnkey({\n apiBaseUrl: config.apiBaseUrl ?? \"https://api.turnkey.com\",\n // The delegated sub-organization the API key pair belongs to.\n defaultOrganizationId: config.organizationId,\n apiPublicKey: config.apiPublicKey,\n apiPrivateKey: config.apiPrivateKey,\n });\n\n const account = await createAccount({\n client: turnkey.apiClient(),\n organizationId: config.organizationId,\n signWith: config.signWith,\n });\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient: walletClient as WalletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n","export * from \"./types\";\nexport { chains, tokens, registry, DEFAULT_CHAIN, DEFAULT_TOKENS } from \"./constants\";\n\nimport { createPublicClient, http } from \"viem\";\n\nimport type {\n RpcProviderOptions,\n WalletContext,\n WalletFullContext,\n WalletReadonlyContext,\n WalletOptions,\n WalletProviderType,\n WalletPrivateKeyOptions,\n WalletTurnkeyOptions,\n WalletReadonlyOptions,\n} from \"./types\";\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n registry as walletRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createPrivateKeyProvider } from \"./providers/private-key\";\nimport { createTurnkeyProvider } from \"./providers/turnkey\";\n\ntype ChainSlug = keyof typeof chainRegistry;\n\nfunction resolveChainSlug(reference?: string | number): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nexport function getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nexport function wallet(options: WalletPrivateKeyOptions): Promise<WalletFullContext>;\nexport function wallet(options: WalletTurnkeyOptions): Promise<WalletFullContext>;\nexport function wallet(options?: WalletReadonlyOptions): Promise<WalletReadonlyContext>;\nexport async function wallet(options: WalletOptions = {}): Promise<WalletContext> {\n if (options.privateKey && options.turnkey) {\n throw new Error(\"wallet() cannot be initialized with both privateKey and turnkey credentials\");\n }\n\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? {};\n const overrides: RpcProviderOptions = {};\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n\n let providerType: WalletProviderType = \"readonly\";\n let signerProvider:\n | ReturnType<typeof createPrivateKeyProvider>\n | (Awaited<ReturnType<typeof createTurnkeyProvider>>)\n | undefined;\n\n if (options.privateKey) {\n signerProvider = createPrivateKeyProvider({\n chain,\n rpcUrl,\n privateKey: options.privateKey,\n });\n providerType = \"privateKey\";\n } else if (options.turnkey) {\n const turnkeyConfig = {\n chain,\n rpcUrl,\n organizationId: options.turnkey.organizationId,\n apiPublicKey: options.turnkey.apiPublicKey,\n apiPrivateKey: options.turnkey.apiPrivateKey,\n signWith: options.turnkey.signWith,\n } as Parameters<typeof createTurnkeyProvider>[0];\n\n if (options.turnkey.apiBaseUrl) {\n turnkeyConfig.apiBaseUrl = options.turnkey.apiBaseUrl;\n }\n\n signerProvider = await createTurnkeyProvider(turnkeyConfig);\n providerType = \"turnkey\";\n }\n\n const publicClient = signerProvider?.publicClient ??\n createPublicClient({\n chain: chain.chain,\n transport: http(rpcUrl),\n });\n\n const baseContext: WalletReadonlyContext = {\n chain,\n tokens,\n rpcUrl,\n providerType,\n publicClient,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n };\n\n if (signerProvider) {\n const { publicClient: _ignored, ...rest } = signerProvider;\n return {\n ...baseContext,\n ...rest,\n } as WalletFullContext;\n }\n\n return baseContext;\n}\n\nexport const walletToolkit = {\n chains: chainRegistry,\n tokens: tokenRegistry,\n registry: walletRegistry,\n defaults: {\n chain: DEFAULT_CHAIN,\n tokens: DEFAULT_TOKENS,\n },\n getRpcUrl,\n wallet,\n} as const;\n","interface ErrorInit {\n cause?: unknown;\n}\n\nexport class AIError extends Error {\n constructor(message: string, options?: ErrorInit) {\n super(message);\n this.name = \"AIError\";\n if (options && \"cause\" in options) {\n (this as unknown as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\nexport interface ResponseErrorDetails {\n status: number;\n statusText: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class AIFetchError extends AIError {\n constructor(message: string, options?: ErrorInit) {\n super(message, options);\n this.name = \"AIFetchError\";\n }\n}\n\nexport class AIResponseError extends AIError {\n readonly status: number;\n readonly statusText: string;\n readonly body?: unknown;\n readonly headers: Record<string, string>;\n\n constructor(details: ResponseErrorDetails, message?: string) {\n super(message ?? `AI response error: ${details.status} ${details.statusText}`);\n this.name = \"AIResponseError\";\n this.status = details.status;\n this.statusText = details.statusText;\n this.body = details.body;\n this.headers = details.headers ?? {};\n }\n}\n\nexport class AIAbortError extends AIError {\n constructor(message = \"AI request aborted\") {\n super(message);\n this.name = \"AIAbortError\";\n }\n}\n","import { AIClientConfig, ResolvedAIClientConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://gateway.openpond.dev\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MODEL = \"openai/gpt-5-mini\";\n\nfunction assertFetchAvailable(fetchImplementation?: typeof fetch): asserts fetchImplementation {\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via AIClientConfig.fetchImplementation.\"\n );\n }\n}\n\nexport function resolveConfig(\n config: AIClientConfig = {}\n): ResolvedAIClientConfig {\n const fetchImplementation = config.fetchImplementation ?? globalThis.fetch;\n assertFetchAvailable(fetchImplementation);\n\n const resolved: ResolvedAIClientConfig = {\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n defaultModel: config.defaultModel ?? DEFAULT_MODEL,\n defaultHeaders: {\n \"Content-Type\": \"application/json\",\n ...config.defaultHeaders,\n },\n fetchImplementation,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n\n if (config.apiKey !== undefined) {\n resolved.apiKey = config.apiKey;\n }\n\n return resolved;\n}\n\nexport function mergeHeaders(\n base: Record<string, string>,\n overrides?: Record<string, string>\n): Record<string, string> {\n if (!overrides) {\n return { ...base };\n }\n\n const merged = { ...base };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) {\n continue;\n }\n\n merged[key] = value;\n }\n return merged;\n}\n","export type ModelProvider = \"openai\" | \"anthropic\" | \"google\" | \"deepseek\" | \"custom\";\n\nexport interface ModelConfig {\n name: string;\n label: string;\n provider: ModelProvider;\n supportsStreaming: boolean;\n supportsTools: boolean;\n reasoning?: boolean;\n aliases?: string[];\n default?: boolean;\n}\n\nconst MODEL_REGISTRY: ModelConfig[] = [\n {\n name: \"openai/gpt-5-mini\",\n label: \"OpenAI GPT-5 Mini\",\n provider: \"openai\",\n supportsStreaming: true,\n supportsTools: true,\n reasoning: true,\n aliases: [\"gpt-5-mini\", \"gpt5-mini\", \"gpt-5.0-mini\"],\n default: true,\n },\n {\n name: \"anthropic/claude-4-sonnet-20250514\",\n label: \"Claude 4 Sonnet (20250514)\",\n provider: \"anthropic\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"claude-4-sonnet\", \"claude-sonnet\"],\n },\n {\n name: \"google/gemini-2.0-flash-001\",\n label: \"Gemini 2.0 Flash\",\n provider: \"google\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"gemini-2.0-flash\", \"gemini-flash\"],\n },\n {\n name: \"deepseek/deepseek-chat\",\n label: \"DeepSeek Chat\",\n provider: \"deepseek\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"deepseek-chat\", \"deepseek\"],\n },\n];\n\nconst ALIAS_LOOKUP: Record<string, string> = MODEL_REGISTRY.reduce(\n (accumulator, model) => {\n accumulator[model.name.toLowerCase()] = model.name;\n if (model.aliases) {\n for (const alias of model.aliases) {\n accumulator[alias.toLowerCase()] = model.name;\n }\n }\n return accumulator;\n },\n {} as Record<string, string>\n);\n\nconst DEFAULT_MODEL_NAME =\n MODEL_REGISTRY.find((model) => model.default)?.name ?? MODEL_REGISTRY[0].name;\n\nexport function listModels(): ModelConfig[] {\n return [...MODEL_REGISTRY];\n}\n\nexport function getModelConfig(modelName?: string): ModelConfig | undefined {\n if (!modelName) {\n return MODEL_REGISTRY.find((model) => model.default) ?? MODEL_REGISTRY[0];\n }\n\n const normalized = normalizeModelName(modelName);\n return MODEL_REGISTRY.find((model) => model.name === normalized);\n}\n\nexport function normalizeModelName(modelName?: string): string {\n if (!modelName) {\n return DEFAULT_MODEL_NAME;\n }\n\n const trimmed = modelName.trim();\n if (!trimmed) {\n return DEFAULT_MODEL_NAME;\n }\n\n const directMatch = ALIAS_LOOKUP[trimmed.toLowerCase()];\n if (directMatch) {\n return directMatch;\n }\n\n if (trimmed.includes(\"/\")) {\n return trimmed;\n }\n\n return `openai/${trimmed}`;\n}\n\nexport function isStreamingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsStreaming : true;\n}\n\nexport function isToolCallingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsTools : true;\n}\n\n","import {\n ToolDefinition,\n ToolExecutionPolicy,\n WebSearchOptions,\n} from \"./types\";\n\nexport const WEBSEARCH_TOOL_NAME = \"websearch\";\n\nexport const WEBSEARCH_TOOL_DEFINITION: ToolDefinition = {\n type: \"function\",\n function: {\n name: WEBSEARCH_TOOL_NAME,\n description:\n \"Search the web using the OpenPond search engine. Returns relevant results with titles, URLs, and text content.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n },\n },\n required: [\"query\"],\n },\n },\n};\n\nexport function resolveToolset(\n tools: ToolDefinition[] | undefined,\n policy: ToolExecutionPolicy | undefined\n): ToolDefinition[] | undefined {\n if (!policy) {\n return tools;\n }\n\n const resolved: ToolDefinition[] = tools ? [...tools] : [];\n\n if (policy.webSearch) {\n const alreadyIncluded = resolved.some(\n (tool) =>\n tool.type === \"function\" && tool.function?.name === WEBSEARCH_TOOL_NAME\n );\n if (!alreadyIncluded) {\n resolved.push(materializeWebSearchTool(policy.webSearch));\n }\n }\n\n return resolved.length > 0 ? resolved : undefined;\n}\n\nfunction materializeWebSearchTool(options: WebSearchOptions): ToolDefinition {\n if (!options || Object.keys(options).length === 0) {\n return WEBSEARCH_TOOL_DEFINITION;\n }\n\n const baseParameters =\n WEBSEARCH_TOOL_DEFINITION.function.parameters ??\n ({} as Record<string, unknown>);\n const baseProperties =\n (baseParameters.properties as Record<string, unknown> | undefined) ?? {};\n\n const properties: Record<string, unknown> = { ...baseProperties };\n\n if (options.limit !== undefined) {\n const existingLimit = baseProperties[\"limit\"];\n const limitSchema: Record<string, unknown> =\n typeof existingLimit === \"object\" && existingLimit !== null\n ? { ...(existingLimit as Record<string, unknown>) }\n : {\n type: \"number\",\n description:\n \"Maximum number of results to return (default: 5)\",\n };\n\n limitSchema.default = options.limit;\n properties.limit = limitSchema;\n }\n\n if (options.includeImages) {\n properties.includeImages = {\n type: \"boolean\",\n description: \"Whether to include representative images in results.\",\n default: true,\n };\n }\n\n return {\n ...WEBSEARCH_TOOL_DEFINITION,\n function: {\n ...WEBSEARCH_TOOL_DEFINITION.function,\n parameters: {\n ...WEBSEARCH_TOOL_DEFINITION.function.parameters,\n properties,\n },\n },\n } as ToolDefinition;\n}\n","import { AIError } from \"./errors\";\nimport { ChatMessage, ChatMessageContentPart } from \"./types\";\n\nexport interface FlattenMessageContentOptions {\n /**\n * String used to join individual text segments when the content array contains multiple text parts.\n * Defaults to an empty string.\n */\n separator?: string;\n /**\n * When true, JSON stringifies non-text segments instead of discarding them.\n * Defaults to false (skip non-text parts).\n */\n includeUnknown?: boolean;\n}\n\nexport function flattenMessageContent(\n content: ChatMessage[\"content\"],\n options: FlattenMessageContentOptions = {}\n): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n const separator = options.separator ?? \"\";\n const collected: string[] = [];\n\n for (const part of content) {\n const text = extractTextPart(part, options);\n if (text) {\n collected.push(text);\n }\n }\n\n if (collected.length === 0) {\n return undefined;\n }\n\n return collected.join(separator);\n}\n\nexport interface EnsureTextContentOptions extends FlattenMessageContentOptions {\n errorMessage?: string;\n}\n\nexport function ensureTextContent(\n message: ChatMessage,\n options?: EnsureTextContentOptions\n): string {\n const flattened = flattenMessageContent(message.content, options);\n if (flattened !== undefined) {\n return flattened;\n }\n\n throw new AIError(\n options?.errorMessage ??\n \"Assistant response did not contain textual content.\"\n );\n}\n\nfunction extractTextPart(\n part: ChatMessageContentPart,\n options: FlattenMessageContentOptions\n): string | undefined {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n\n if (options.includeUnknown) {\n try {\n return JSON.stringify(part);\n } catch (error) {\n return `[unserializable_part: ${String(error)}]`;\n }\n }\n\n return undefined;\n}\n","import { resolveConfig, mergeHeaders } from \"./config\";\nimport {\n GenerateTextOptions,\n GenerateTextResult,\n AIClientConfig,\n ChatCompletionResponse,\n ChatCompletionChoice,\n ChatCompletionUsage,\n ResolvedAIClientConfig,\n StreamTextOptions,\n StreamTextResult,\n GenerationParameters,\n AIRequestMetadata,\n ChatMessage,\n StreamingEventHandlers,\n} from \"./types\";\nimport {\n normalizeModelName,\n isToolCallingSupported,\n listModels,\n} from \"./models\";\nimport { resolveToolset } from \"./tools\";\nimport { flattenMessageContent } from \"./messages\";\nimport { AIFetchError, AIResponseError, AIAbortError, AIError } from \"./errors\";\n\nconst CHAT_COMPLETIONS_PATH = \"/v1/chat/completions\";\n\nexport interface AIClient {\n readonly config: ResolvedAIClientConfig;\n generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;\n streamText(options: StreamTextOptions): Promise<StreamTextResult>;\n listModels: typeof listModels;\n}\n\ninterface ChatCompletionRequestPayload {\n model: string;\n messages: GenerateTextOptions[\"messages\"];\n temperature?: number;\n top_p?: number;\n max_tokens?: number;\n stop?: string | string[];\n presence_penalty?: number;\n frequency_penalty?: number;\n tool_choice?: GenerateTextOptions[\"toolChoice\"];\n tools?: GenerateTextOptions[\"tools\"];\n stream?: boolean;\n response_format?: GenerationParameters[\"responseFormat\"];\n metadata?: Record<string, unknown>;\n stream_options?: {\n include_usage?: boolean;\n };\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n abort: () => void;\n cleanup: () => void;\n}\n\nexport function createAIClient(config: AIClientConfig = {}): AIClient {\n const resolved = resolveConfig(config);\n\n return {\n get config() {\n return resolved;\n },\n async generateText(options) {\n return generateText(options, config);\n },\n async streamText(options) {\n return streamText(options, config);\n },\n listModels,\n };\n}\n\nexport async function generateText(\n options: GenerateTextOptions,\n clientConfig: AIClientConfig = {}\n): Promise<GenerateTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const payload = buildRequestPayload(options, model, {\n allowTools: isToolCallingSupported(model),\n });\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n } finally {\n abortBundle.cleanup();\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n const data = (await response.json()) as ChatCompletionResponse;\n const primaryChoice = data.choices.find(isPrimaryChoice);\n\n if (!primaryChoice) {\n throw new AIResponseError(\n {\n status: response.status,\n statusText: response.statusText,\n body: data,\n },\n \"Gateway response did not contain a valid choice\"\n );\n }\n\n const result: GenerateTextResult = {\n id: data.id,\n model: data.model,\n message: primaryChoice.message,\n raw: data,\n };\n\n if (primaryChoice.finish_reason !== undefined) {\n result.finishReason = primaryChoice.finish_reason;\n }\n\n if (data.usage) {\n result.usage = data.usage;\n }\n\n return result;\n}\n\nexport async function streamText(\n options: StreamTextOptions,\n clientConfig: AIClientConfig = {}\n): Promise<StreamTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const streamExtras = buildStreamMetadataExtras(options);\n const payload = buildRequestPayload(\n options,\n model,\n {\n allowTools: isToolCallingSupported(model),\n },\n streamExtras\n );\n\n payload.stream = true;\n if (options.includeUsage) {\n payload.stream_options = { include_usage: true };\n }\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n abortBundle.cleanup();\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n if (!response.body) {\n abortBundle.cleanup();\n throw new AIFetchError(\"Streaming response did not include a readable body\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const handlers = options.handlers ?? {};\n\n let finishedResolve: () => void;\n let finishedReject: (reason?: unknown) => void;\n const finished = new Promise<void>((resolve, reject) => {\n finishedResolve = resolve;\n finishedReject = reject;\n });\n\n let settled = false;\n\n const resolveStream = () => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onDone?.();\n finishedResolve();\n } catch (error) {\n settled = false; // allow rejectError to run with handler error\n rejectStream(error);\n }\n };\n\n const rejectStream = (reason: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onError?.(reason);\n } catch (handlerError) {\n reason = handlerError;\n }\n finishedReject(reason);\n };\n\n const abort = () => abortBundle.abort();\n\n (async () => {\n let buffer = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n if (buffer.trim().length > 0) {\n if (processStreamEventChunk(buffer, handlers)) {\n break;\n }\n }\n resolveStream();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let boundaryIndex: number;\n while ((boundaryIndex = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const chunk = buffer.slice(0, boundaryIndex);\n buffer = buffer.slice(boundaryIndex + 2);\n if (!chunk) {\n continue;\n }\n if (processStreamEventChunk(chunk, handlers)) {\n await reader.cancel().catch(() => undefined);\n resolveStream();\n return;\n }\n }\n }\n } catch (error) {\n if (abortBundle.signal.aborted) {\n rejectStream(toAbortError(abortBundle.signal.reason ?? error));\n } else {\n rejectStream(error);\n }\n } finally {\n try {\n reader.releaseLock();\n } catch (error) {\n // ignore release errors\n }\n abortBundle.cleanup();\n }\n })().catch((error) => {\n rejectStream(error);\n });\n\n return {\n abort,\n finished,\n };\n\n function processStreamEventChunk(\n chunk: string,\n eventHandlers: StreamingEventHandlers\n ): boolean {\n const dataString = extractSseData(chunk);\n if (dataString == null) {\n return false;\n }\n\n const trimmed = dataString.trim();\n if (trimmed === \"[DONE]\") {\n return true;\n }\n\n let payload: unknown;\n try {\n payload = JSON.parse(dataString);\n } catch (error) {\n rejectStream(new AIError(\"Failed to parse streaming payload\", { cause: error }));\n return true;\n }\n\n try {\n handleStreamPayload(payload, eventHandlers);\n } catch (error) {\n rejectStream(error);\n return true;\n }\n\n return false;\n }\n\n function handleStreamPayload(\n payload: unknown,\n eventHandlers: StreamingEventHandlers\n ): void {\n if (!payload || typeof payload !== \"object\") {\n return;\n }\n\n if (\"error\" in payload && payload.error) {\n const message =\n typeof payload.error === \"string\"\n ? payload.error\n : (payload.error as { message?: string }).message;\n throw new AIError(message ?? \"AI stream returned an error payload\");\n }\n\n const structured = payload as {\n choices?: Array<{ delta?: unknown }>;\n usage?: ChatCompletionUsage;\n };\n\n if (Array.isArray(structured.choices)) {\n for (const choice of structured.choices) {\n if (!choice || typeof choice !== \"object\") {\n continue;\n }\n const delta = (choice as { delta?: unknown }).delta;\n if (!delta || typeof delta !== \"object\") {\n continue;\n }\n const deltaObject = delta as Record<string, unknown>;\n\n const textDelta = extractDeltaText(deltaObject.content);\n if (textDelta) {\n eventHandlers.onTextDelta?.(textDelta);\n }\n\n const reasoningDelta = extractDeltaText(deltaObject.reasoning);\n if (reasoningDelta) {\n eventHandlers.onReasoningDelta?.(reasoningDelta);\n }\n\n if (deltaObject.tool_calls !== undefined) {\n eventHandlers.onToolCallDelta?.(deltaObject.tool_calls);\n }\n }\n }\n\n if (structured.usage) {\n eventHandlers.onUsage?.(structured.usage);\n }\n }\n\n function extractDeltaText(value: unknown): string | undefined {\n if (!value) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return flattenMessageContent(value as ChatMessage[\"content\"]);\n }\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"content\" in value &&\n Array.isArray((value as { content?: unknown }).content)\n ) {\n return flattenMessageContent(\n ((value as { content?: ChatMessage[\"content\"] }).content ?? []) as ChatMessage[\"content\"]\n );\n }\n\n return undefined;\n }\n\n function extractSseData(chunk: string): string | null {\n const lines = chunk.split(\"\\n\");\n const dataLines: string[] = [];\n for (const rawLine of lines) {\n if (!rawLine) {\n continue;\n }\n const match = /^data:(.*)$/.exec(rawLine);\n if (!match) {\n continue;\n }\n\n const value = match[1];\n dataLines.push(value.startsWith(\" \") ? value.slice(1) : value);\n }\n\n if (dataLines.length === 0) {\n return null;\n }\n\n return dataLines.join(\"\\n\");\n }\n}\n\nfunction buildStreamMetadataExtras(\n options: StreamTextOptions\n): Record<string, unknown> | undefined {\n const streamConfig: Record<string, unknown> = {};\n\n if (options.sendReasoning !== undefined) {\n streamConfig.sendReasoning = options.sendReasoning;\n }\n\n if (options.includeUsage !== undefined) {\n streamConfig.includeUsage = options.includeUsage;\n }\n\n if (Object.keys(streamConfig).length === 0) {\n return undefined;\n }\n\n return {\n openpond: {\n stream: streamConfig,\n },\n } satisfies Record<string, unknown>;\n}\n\nfunction buildRequestPayload(\n options: GenerateTextOptions,\n model: string,\n capabilities: { allowTools: boolean },\n metadataExtras?: Record<string, unknown>\n): ChatCompletionRequestPayload {\n const payload: ChatCompletionRequestPayload = {\n model,\n messages: options.messages,\n };\n\n const generation: GenerationParameters = options.generation ?? {};\n\n assignIfDefined(payload, \"temperature\", generation.temperature);\n assignIfDefined(payload, \"top_p\", generation.topP);\n assignIfDefined(payload, \"max_tokens\", generation.maxTokens);\n assignIfDefined(payload, \"stop\", generation.stop);\n assignIfDefined(\n payload,\n \"frequency_penalty\",\n generation.frequencyPenalty\n );\n assignIfDefined(payload, \"presence_penalty\", generation.presencePenalty);\n assignIfDefined(payload, \"response_format\", generation.responseFormat);\n\n const toolExecution = options.toolExecution;\n const enableTools = toolExecution?.enableTools ?? true;\n if (enableTools && capabilities.allowTools) {\n const resolvedTools = resolveToolset(options.tools, toolExecution);\n assignIfDefined(payload, \"tools\", resolvedTools);\n assignIfDefined(payload, \"tool_choice\", options.toolChoice);\n } else if (options.toolChoice && options.toolChoice !== \"none\") {\n payload.tool_choice = \"none\";\n }\n\n const metadataPayload = buildMetadataPayload(\n options.metadata,\n toolExecution,\n metadataExtras\n );\n if (metadataPayload) {\n payload.metadata = metadataPayload;\n }\n\n return payload;\n}\n\nfunction assignIfDefined<T extends object, K extends keyof T>(\n target: T,\n key: K,\n value: T[K] | undefined\n): void {\n if (value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction buildUrl(baseUrl: string, path: string): string {\n const sanitizedBase = baseUrl.endsWith(\"/\")\n ? baseUrl.slice(0, -1)\n : baseUrl;\n return `${sanitizedBase}${path}`;\n}\n\nfunction createAbortBundle(\n upstreamSignal: AbortSignal | undefined,\n timeoutMs: number | undefined\n): AbortBundle {\n const controller = new AbortController();\n const cleanupCallbacks: Array<() => void> = [];\n\n if (upstreamSignal) {\n if (upstreamSignal.aborted) {\n controller.abort(upstreamSignal.reason);\n } else {\n const onAbort = () => controller.abort(upstreamSignal.reason);\n upstreamSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanupCallbacks.push(() =>\n upstreamSignal.removeEventListener(\"abort\", onAbort)\n );\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timeoutId = setTimeout(() => {\n controller.abort(new Error(\"AI request timed out\"));\n }, timeoutMs);\n cleanupCallbacks.push(() => clearTimeout(timeoutId));\n }\n\n return {\n signal: controller.signal,\n abort: () => controller.abort(),\n cleanup: () => {\n cleanupCallbacks.forEach((fn) => fn());\n },\n };\n}\n\nfunction collectHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction buildMetadataPayload(\n base: AIRequestMetadata | undefined,\n toolExecution: GenerateTextOptions[\"toolExecution\"] | undefined,\n extras?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n const metadata: Record<string, unknown> = base ? { ...base } : {};\n\n if (extras) {\n for (const [key, value] of Object.entries(extras)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"openpond\" && typeof value === \"object\" && value !== null) {\n const existing = {\n ...((metadata.openpond as Record<string, unknown> | undefined) ?? {}),\n };\n metadata.openpond = {\n ...existing,\n ...(value as Record<string, unknown>),\n };\n } else {\n metadata[key] = value;\n }\n }\n }\n\n if (toolExecution) {\n const openpond = {\n ...((metadata.openpond as Record<string, unknown> | undefined) ?? {}),\n toolExecution,\n };\n metadata.openpond = openpond;\n }\n\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nasync function safeParseJson(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"application/json\")) {\n return undefined;\n }\n\n try {\n return await response.json();\n } catch (error) {\n return { error: \"Failed to parse error body\", cause: String(error) };\n }\n}\n\nfunction isPrimaryChoice(choice: ChatCompletionChoice): boolean {\n return choice.index === 0 || choice.message !== undefined;\n}\n\nfunction toAbortError(reason: unknown): AIAbortError {\n if (reason instanceof AIAbortError) {\n return reason;\n }\n\n if (reason instanceof Error) {\n if (reason.name === \"AbortError\") {\n return new AIAbortError(reason.message || \"AI request aborted\");\n }\n return new AIAbortError(reason.message);\n }\n\n return new AIAbortError(String(reason ?? \"AI request aborted\"));\n}\n\nexport { listModels };\n","import { z } from \"zod\";\n\nexport const METADATA_SPEC_VERSION = \"1.1.0\";\n\nexport const McpAnnotationsSchema = z\n .object({\n title: z.string().optional(),\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n openWorldHint: z.boolean().optional(),\n requiresPayment: z.boolean().optional(),\n })\n .strict();\n\nexport type McpAnnotations = z.infer<typeof McpAnnotationsSchema>;\n\n// X402Payment structure (from defineX402Payment)\nconst X402PaymentSchema = z\n .object({\n definition: z.object({\n amount: z.string(),\n currency: z.object({\n code: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n }),\n asset: z.object({\n symbol: z.string(),\n network: z.string(),\n address: z.string(),\n decimals: z.number(),\n }),\n payTo: z.string(),\n resource: z.string().optional(),\n description: z.string().optional(),\n scheme: z.string(),\n network: z.string(),\n facilitator: z.object({\n url: z.string(),\n verifyPath: z.string().optional(),\n settlePath: z.string().optional(),\n apiKeyHeader: z.string().optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\n// Accept x402 or any custom payment config\nexport const PaymentConfigSchema = z.union([\n X402PaymentSchema,\n z.record(z.string(), z.unknown()),\n]);\n\nexport type PaymentConfig = z.infer<typeof PaymentConfigSchema>;\n\nexport const DiscoveryMetadataSchema = z\n .object({\n keywords: z.array(z.string()).optional(),\n category: z.string().optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n documentation: z.union([z.string(), z.array(z.string())]).optional(),\n })\n .catchall(z.any());\n\nexport type DiscoveryMetadata = z.infer<typeof DiscoveryMetadataSchema>;\n\nexport const ToolMetadataOverridesSchema = z\n .object({\n name: z.string().optional(),\n description: z.string().optional(),\n annotations: McpAnnotationsSchema.optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type ToolMetadataOverrides = z.infer<typeof ToolMetadataOverridesSchema>;\n\nexport const ToolSchema = z\n .object({\n name: z.string(),\n description: z.string(),\n inputSchema: z.any(),\n annotations: McpAnnotationsSchema.optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const MetadataSchema = z\n .object({\n metadataSpecVersion: z.string().optional(),\n name: z.string().optional(),\n displayName: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string().optional(),\n categories: z.array(z.string()).optional(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type Metadata = z.infer<typeof MetadataSchema>;\n\nexport const BuildMetadataSchema = z\n .object({\n metadataSpecVersion: z.string().default(METADATA_SPEC_VERSION),\n name: z.string(),\n displayName: z.string(),\n version: z.string(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n tools: z.array(ToolSchema).min(1),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type BuildMetadata = z.infer<typeof BuildMetadataSchema>;\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tmpdir } from \"os\";\nimport { build, type BuildOptions } from \"esbuild\";\n\ninterface TranspileOptions {\n entryPoints: string[];\n projectRoot: string;\n outDir?: string;\n format: \"cjs\" | \"esm\";\n bundle?: boolean;\n external?: string[];\n}\n\nfunction resolveTsconfig(projectRoot: string): string | undefined {\n const candidate = path.join(projectRoot, \"tsconfig.json\");\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return undefined;\n}\n\ninterface TranspileResult {\n outDir: string;\n cleanup(): void;\n}\n\nexport async function transpileWithEsbuild(options: TranspileOptions): Promise<TranspileResult> {\n if (options.entryPoints.length === 0) {\n throw new Error(\"No entry points provided for esbuild transpilation\");\n }\n\n const projectRoot = options.projectRoot;\n const tempBase = options.outDir ?? fs.mkdtempSync(path.join(tmpdir(), \"opentool-\"));\n if (!fs.existsSync(tempBase)) {\n fs.mkdirSync(tempBase, { recursive: true });\n }\n\n const tsconfig = resolveTsconfig(projectRoot);\n\n const buildOptions: BuildOptions = {\n entryPoints: options.entryPoints,\n outdir: tempBase,\n bundle: options.bundle ?? false,\n format: options.format,\n platform: \"node\",\n target: \"node20\",\n logLevel: \"warning\",\n sourcesContent: false,\n sourcemap: false,\n loader: {\n \".ts\": \"ts\",\n \".tsx\": \"tsx\",\n \".cts\": \"ts\",\n \".mts\": \"ts\",\n \".js\": \"js\",\n \".jsx\": \"jsx\",\n \".mjs\": \"js\",\n \".cjs\": \"js\",\n \".json\": \"json\",\n },\n metafile: false,\n allowOverwrite: true,\n absWorkingDir: projectRoot,\n };\n\n if (options.external && options.external.length > 0) {\n buildOptions.external = options.external;\n }\n\n if (!buildOptions.bundle) {\n buildOptions.packages = \"external\";\n }\n\n if (tsconfig) {\n buildOptions.tsconfig = tsconfig;\n }\n\n await build(buildOptions);\n\n if (options.format === \"esm\") {\n const packageJsonPath = path.join(tempBase, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n fs.writeFileSync(packageJsonPath, JSON.stringify({ type: \"module\" }), \"utf8\");\n }\n }\n\n const cleanup = () => {\n if (options.outDir) {\n return;\n }\n fs.rmSync(tempBase, { recursive: true, force: true });\n };\n\n return { outDir: tempBase, cleanup };\n}\n","import * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nconst requireModule = createRequire(import.meta.url);\n\nexport function resolveCompiledPath(\n outDir: string,\n originalFile: string,\n extension = \".js\"\n): string {\n const baseName = path.basename(originalFile).replace(/\\.[^.]+$/, \"\");\n return path.join(outDir, `${baseName}${extension}`);\n}\n\nexport function requireFresh(modulePath: string): any {\n const resolved = requireModule.resolve(modulePath);\n delete requireModule.cache[resolved];\n return requireModule(resolved);\n}\n\nexport async function importFresh(modulePath: string): Promise<any> {\n const fileUrl = pathToFileURL(modulePath).href;\n const cacheBuster = `t=${Date.now()}-${Math.random()}`;\n const separator = fileUrl.includes(\"?\") ? \"&\" : \"?\";\n return import(`${fileUrl}${separator}${cacheBuster}`);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport {\n Metadata,\n MetadataSchema,\n DiscoveryMetadata,\n BuildMetadata,\n BuildMetadataSchema,\n METADATA_SPEC_VERSION,\n PaymentConfig,\n Tool,\n ToolMetadataOverrides,\n ToolMetadataOverridesSchema,\n} from \"../../types/metadata\";\nimport { InternalToolDefinition } from \"../../types/index\";\nimport { transpileWithEsbuild } from \"../../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../../utils/module-loader\";\n\ninterface LoadMetadataResult {\n metadata: Metadata;\n sourcePath: string;\n}\n\nconst METADATA_ENTRY = \"metadata.ts\";\n\nexport async function loadMetadata(projectRoot: string): Promise<LoadMetadataResult> {\n const absPath = path.join(projectRoot, METADATA_ENTRY);\n if (!fs.existsSync(absPath)) {\n throw new Error(\n `metadata.ts not found in ${projectRoot}. Create metadata.ts to describe your agent.`\n );\n }\n\n const tempDir = path.join(projectRoot, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints: [absPath],\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n });\n\n try {\n const compiledPath = resolveCompiledPath(outDir, METADATA_ENTRY);\n const moduleExports = await importFresh(compiledPath);\n const metadataExport = extractMetadataExport(moduleExports);\n const parsed = MetadataSchema.parse(metadataExport);\n return { metadata: parsed, sourcePath: absPath };\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n}\n\nfunction extractMetadataExport(moduleExports: unknown): unknown {\n if (!moduleExports || typeof moduleExports !== \"object\") {\n throw new Error(\"metadata.ts must export a metadata object\");\n }\n\n const exportsObject = moduleExports as Record<string, unknown>;\n if (exportsObject.metadata) {\n return exportsObject.metadata;\n }\n\n if (exportsObject.default && typeof exportsObject.default === \"object\") {\n const defaultExport = exportsObject.default as Record<string, unknown>;\n if (defaultExport.metadata) {\n return defaultExport.metadata;\n }\n return defaultExport;\n }\n\n return moduleExports;\n}\n\ninterface PackageInfo {\n name?: string;\n version?: string;\n description?: string;\n author?: string;\n repository?: string | { url?: string };\n homepage?: string;\n type?: string;\n}\n\nfunction readPackageJson(projectRoot: string): PackageInfo {\n const packagePath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(packagePath)) {\n return {};\n }\n\n try {\n const content = fs.readFileSync(packagePath, \"utf8\");\n return JSON.parse(content) as PackageInfo;\n } catch (error) {\n throw new Error(`Failed to read package.json: ${error}`);\n }\n}\n\ninterface MetadataBuildOptions {\n projectRoot: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface MetadataBuildResult {\n metadata: BuildMetadata;\n defaultsApplied: string[];\n sourceMetadataPath: string;\n}\n\nexport async function buildMetadataArtifact(options: MetadataBuildOptions): Promise<MetadataBuildResult> {\n const projectRoot = options.projectRoot;\n const packageInfo = readPackageJson(projectRoot);\n const { metadata: authored, sourcePath } = await loadMetadata(projectRoot);\n const defaultsApplied: string[] = [];\n\n const folderName = path.basename(projectRoot);\n\n const name = resolveField(\n \"name\",\n authored.name,\n () => packageInfo.name ?? folderName,\n defaultsApplied,\n \"package.json name\"\n );\n\n const displayName = resolveField(\n \"displayName\",\n authored.displayName,\n () => {\n const source = packageInfo.name ?? folderName;\n return source\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \");\n },\n defaultsApplied,\n \"package.json name\"\n );\n\n const versionRaw = resolveField(\n \"version\",\n authored.version,\n () => packageInfo.version ?? \"0.1.0\",\n defaultsApplied,\n \"package.json version\"\n );\n const version = typeof versionRaw === \"number\" ? String(versionRaw) : versionRaw;\n\n const category = determineCategory(authored, defaultsApplied);\n\n const description = authored.description ?? packageInfo.description;\n if (!authored.description && packageInfo.description) {\n defaultsApplied.push(\"description → package.json description\");\n }\n\n const author = authored.author ?? packageInfo.author;\n if (!authored.author && packageInfo.author) {\n defaultsApplied.push(\"author → package.json author\");\n }\n\n const repository = authored.repository ?? extractRepository(packageInfo.repository);\n if (!authored.repository && repository) {\n defaultsApplied.push(\"repository → package.json repository\");\n }\n\n const website = authored.website ?? packageInfo.homepage;\n if (!authored.website && packageInfo.homepage) {\n defaultsApplied.push(\"website → package.json homepage\");\n }\n\n const payment = resolvePayment(authored, defaultsApplied);\n\n const baseImage = authored.image ?? authored.iconPath;\n const animation = authored.animation_url ?? authored.videoPath;\n\n const discovery = buildDiscovery(authored);\n\n const metadataTools: Tool[] = options.tools.map((tool) => {\n const overrides: ToolMetadataOverrides = tool.metadata\n ? ToolMetadataOverridesSchema.parse(tool.metadata)\n : {};\n const toolName = overrides.name ?? tool.filename;\n const toolDescription = overrides.description ?? `${toolName} tool`;\n const toolPayment = overrides.payment ?? payment ?? undefined;\n if (!overrides.payment && toolPayment && payment && toolPayment === payment) {\n defaultsApplied.push(`tool ${toolName} payment → agent payment`);\n }\n\n const toolDiscovery = overrides.discovery ?? undefined;\n const toolChains = overrides.chains ?? authored.chains ?? undefined;\n\n const toolDefinition: Tool = {\n name: toolName,\n description: toolDescription,\n inputSchema: tool.inputSchema as JsonSchema7Type,\n };\n\n if (overrides.annotations) {\n toolDefinition.annotations = overrides.annotations;\n }\n if (toolPayment) {\n toolDefinition.payment = toolPayment;\n }\n if (toolDiscovery) {\n toolDefinition.discovery = toolDiscovery;\n }\n if (toolChains) {\n toolDefinition.chains = toolChains;\n }\n\n return toolDefinition;\n });\n\n const metadata: BuildMetadata = BuildMetadataSchema.parse({\n metadataSpecVersion: authored.metadataSpecVersion ?? METADATA_SPEC_VERSION,\n name,\n displayName,\n version,\n description,\n author,\n repository,\n website,\n category,\n termsOfService: authored.termsOfService,\n mcpUrl: authored.mcpUrl,\n payment: payment ?? undefined,\n tools: metadataTools,\n discovery,\n promptExamples: authored.promptExamples,\n iconPath: authored.iconPath,\n videoPath: authored.videoPath,\n image: baseImage,\n animation_url: animation,\n chains: authored.chains,\n });\n\n return {\n metadata,\n defaultsApplied,\n sourceMetadataPath: sourcePath,\n };\n}\n\nfunction resolveField<T>(\n field: string,\n value: T | undefined,\n fallback: () => T,\n defaultsApplied: string[],\n fallbackLabel: string\n): T {\n if (value !== undefined && value !== null && value !== \"\") {\n return value;\n }\n const resolved = fallback();\n defaultsApplied.push(`${field} → ${fallbackLabel}`);\n return resolved;\n}\n\nfunction determineCategory(authored: Metadata, defaultsApplied: string[]): string {\n if (authored.category) {\n return authored.category;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n defaultsApplied.push(\"category → metadata.categories[0]\");\n return authored.categories[0];\n }\n defaultsApplied.push(\"category → default category\");\n return \"utility\";\n}\n\nfunction extractRepository(repository: PackageInfo[\"repository\"]): string | undefined {\n if (!repository) {\n return undefined;\n }\n if (typeof repository === \"string\") {\n return repository;\n }\n return repository.url;\n}\n\nfunction resolvePayment(authored: Metadata, _defaults: string[]): PaymentConfig | undefined {\n return authored.payment ?? undefined;\n}\n\nfunction buildDiscovery(authored: Metadata): DiscoveryMetadata | undefined {\n const legacyDiscovery: DiscoveryMetadata = {};\n\n if (Array.isArray(authored.keywords) && authored.keywords.length > 0) {\n legacyDiscovery.keywords = authored.keywords;\n }\n if (Array.isArray(authored.useCases) && authored.useCases.length > 0) {\n legacyDiscovery.useCases = authored.useCases;\n }\n if (Array.isArray(authored.capabilities) && authored.capabilities.length > 0) {\n legacyDiscovery.capabilities = authored.capabilities;\n }\n if (authored.requirements) {\n legacyDiscovery.requirements = authored.requirements;\n }\n if (authored.compatibility) {\n legacyDiscovery.compatibility = authored.compatibility;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n legacyDiscovery.category = authored.categories[0];\n }\n\n const merged = {\n ...legacyDiscovery,\n ...(authored.discovery ?? {}),\n } as DiscoveryMetadata;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { z, type ZodSchema } from \"zod\";\nimport { zodToJsonSchema, type JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n} from \"../types/index\";\nimport { Metadata, ToolMetadataOverrides } from \"../types/metadata\";\nimport { withX402Payment, type X402Payment } from \"../x402/index\";\nimport { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../utils/module-loader\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\n\nexport interface ValidateOptions {\n input: string;\n}\n\ninterface LoadToolsOptions {\n projectRoot?: string;\n}\n\nconst SUPPORTED_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n];\n\nexport async function validateCommand(options: ValidateOptions): Promise<void> {\n console.log(\"🔍 Validating OpenTool metadata...\");\n try {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No valid tools found - metadata validation aborted\");\n }\n\n const { metadata, defaultsApplied, sourceMetadataPath } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n logMetadataSummary(metadata, defaultsApplied, sourceMetadataPath);\n console.log(\"\\n✅ Metadata validation passed!\\n\");\n } catch (error) {\n console.error(\"❌ Metadata validation failed:\", error);\n process.exit(1);\n }\n}\n\nexport async function validateFullCommand(options: ValidateOptions): Promise<void> {\n console.log(\"🔍 Running full OpenTool validation...\\n\");\n try {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No tools discovered in the target directory\");\n }\n\n const names = tools.map((tool) => tool.metadata?.name ?? tool.filename);\n const duplicates = findDuplicates(names);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate tool names found: ${duplicates.join(\", \")}`);\n }\n\n const { metadata, defaultsApplied, sourceMetadataPath } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n console.log(`📦 Tools loaded: ${tools.length}`);\n tools.forEach((tool) => {\n const toolName = tool.metadata?.name ?? tool.filename;\n const description = tool.metadata?.description ?? `${toolName} tool`;\n console.log(` • ${toolName} — ${description}`);\n });\n\n logMetadataSummary(metadata, defaultsApplied, sourceMetadataPath);\n console.log(\"\\n✅ Full validation completed successfully\\n\");\n } catch (error) {\n console.error(\"❌ Full validation failed:\", error);\n process.exit(1);\n }\n}\n\nexport async function loadAndValidateTools(\n toolsDir: string,\n options: LoadToolsOptions = {}\n): Promise<InternalToolDefinition[]> {\n const files = fs\n .readdirSync(toolsDir)\n .filter((file) => SUPPORTED_EXTENSIONS.includes(path.extname(file)));\n\n if (files.length === 0) {\n return [];\n }\n\n const projectRoot = options.projectRoot ?? path.dirname(toolsDir);\n const tempDir = path.join(toolsDir, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const entryPoints = files.map((file) => path.join(toolsDir, file));\n\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints,\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n bundle: true,\n external: [\"opentool\", \"opentool/*\"],\n });\n\n const tools: InternalToolDefinition[] = [];\n\n try {\n for (const file of files) {\n const compiledPath = resolveCompiledPath(outDir, file);\n if (!fs.existsSync(compiledPath)) {\n throw new Error(`Failed to compile ${file}`);\n }\n\n const moduleExports = await importFresh(compiledPath);\n const toolModule = extractToolModule(moduleExports, file);\n\n const schema = ensureZodSchema(toolModule.schema, file);\n const paymentExport = toolModule.payment as X402Payment | undefined;\n const toolName =\n toolModule.metadata?.name ?? toolModule.metadata?.title ?? toBaseName(file);\n const inputSchemaRaw = schema ? toJsonSchema(toolName, schema) : undefined;\n const inputSchema = normalizeInputSchema(inputSchemaRaw);\n\n const httpHandlersRaw = collectHttpHandlers(toolModule, file);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n throw new Error(\n `${file} must export at least one HTTP handler (e.g. POST)`\n );\n }\n\n if (paymentExport) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, paymentExport),\n };\n }\n }\n\n const httpHandlerMap = toHttpHandlerMap(httpHandlers);\n const defaultMethod =\n typeof toolModule.mcp?.defaultMethod === \"string\"\n ? toolModule.mcp.defaultMethod\n : undefined;\n\n const adapter = createMcpAdapter({\n name: toolName,\n httpHandlers: httpHandlerMap,\n ...(defaultMethod ? { defaultMethod } : {}),\n ...(schema ? { schema } : {}),\n });\n\n let metadataOverrides: ToolMetadataOverrides | null =\n toolModule.metadata ?? null;\n\n if (paymentExport) {\n if (metadataOverrides) {\n metadataOverrides = {\n ...metadataOverrides,\n payment: metadataOverrides.payment ?? (paymentExport as any),\n annotations: {\n ...(metadataOverrides.annotations ?? {}),\n requiresPayment:\n metadataOverrides.annotations?.requiresPayment ?? true,\n },\n };\n } else {\n metadataOverrides = {\n payment: paymentExport as any,\n annotations: { requiresPayment: true },\n } as ToolMetadataOverrides;\n }\n }\n\n const tool: InternalToolDefinition = {\n schema: schema ?? undefined,\n inputSchema,\n metadata: metadataOverrides,\n httpHandlers,\n mcpConfig: normalizeMcpConfig(toolModule.mcp, file),\n filename: toBaseName(file),\n sourcePath: path.join(toolsDir, file),\n handler: async (params: unknown) => adapter(params),\n payment: paymentExport ?? null,\n };\n\n tools.push(tool);\n }\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n\n return tools;\n}\n\nfunction extractToolModule(exportsObject: any, filename: string): any {\n const candidates = [exportsObject, exportsObject?.default];\n for (const candidate of candidates) {\n if (candidate && typeof candidate === \"object\") {\n const hasSchema = candidate.schema && typeof candidate.schema === \"object\";\n const hasHttp = HTTP_METHODS.some((method) => typeof candidate[method] === \"function\");\n if (hasSchema || hasHttp) {\n return candidate;\n }\n }\n }\n throw new Error(\n `${filename} must export a tool definition. Expected a Zod schema plus HTTP handlers (export async function POST).`\n );\n}\n\nfunction toJsonSchema(name: string, schema?: ZodSchema): JsonSchema7Type | undefined {\n if (!schema) {\n return undefined;\n }\n try {\n return zodToJsonSchema(schema, {\n name: `${name}Schema`,\n target: \"jsonSchema7\",\n $refStrategy: \"none\",\n });\n } catch (error) {\n throw new Error(`Failed to convert Zod schema for ${name}: ${error}`);\n }\n}\n\nfunction toBaseName(file: string): string {\n return file.replace(/\\.[^.]+$/, \"\");\n}\n\nfunction ensureZodSchema(schemaCandidate: unknown, filename: string): ZodSchema | undefined {\n if (schemaCandidate == null) {\n return undefined;\n }\n\n if (schemaCandidate instanceof z.ZodType) {\n return schemaCandidate as ZodSchema;\n }\n\n const schema = schemaCandidate as ZodSchema;\n if (typeof (schema as any)?.parse !== \"function\") {\n throw new Error(`${filename} schema export must be a Zod schema (missing parse method)`);\n }\n\n return schema;\n}\n\nfunction collectHttpHandlers(module: any, filename: string): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n for (const method of HTTP_METHODS) {\n const handler = module?.[method];\n if (typeof handler === \"function\") {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n }\n\n // Ensure deterministic ordering\n handlers.sort((a, b) => HTTP_METHODS.indexOf(a.method) - HTTP_METHODS.indexOf(b.method));\n\n // Warn when duplicate methods detected\n const duplicates = findDuplicates(handlers.map((h) => h.method));\n if (duplicates.length > 0) {\n throw new Error(\n `${filename} exports multiple handlers for HTTP method(s): ${duplicates.join(\", \")}`\n );\n }\n\n return handlers;\n}\n\n\nfunction toHttpHandlerMap(handlers: HttpHandlerDefinition[]): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(\n schema: JsonSchema7Type | undefined\n): JsonSchema7Type | undefined {\n if (!schema || typeof schema !== \"object\") {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema)) as Record<string, unknown>;\n\n if (typeof clone.$ref === \"string\" && clone.$ref.startsWith(\"#/definitions/\")) {\n const refName = clone.$ref.replace(\"#/definitions/\", \"\");\n const definitions = clone.definitions as Record<string, unknown> | undefined;\n if (definitions && typeof definitions[refName] === \"object\") {\n return normalizeInputSchema(definitions[refName] as JsonSchema7Type);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!(\"type\" in clone)) {\n clone.type = \"object\";\n }\n\n return clone as JsonSchema7Type;\n}\n\nfunction normalizeMcpConfig(rawConfig: unknown, filename: string): McpConfig | null {\n if (rawConfig == null) {\n return null;\n }\n\n if (rawConfig === false) {\n return null;\n }\n\n if (rawConfig === true) {\n return { enabled: true };\n }\n\n if (!isPlainObject(rawConfig)) {\n throw new Error(`${filename} export \\\\\"mcp\\\\\" must be an object with an enabled flag`);\n }\n\n const enabledRaw = (rawConfig as Record<string, unknown>).enabled;\n if (enabledRaw === false) {\n return null;\n }\n\n if (enabledRaw !== true) {\n throw new Error(`${filename} mcp.enabled must be explicitly set to true to opt-in to MCP`);\n }\n\n const modeRaw = (rawConfig as Record<string, unknown>).mode;\n let mode: McpConfig[\"mode\"] | undefined;\n if (typeof modeRaw === \"string\") {\n const normalized = modeRaw.toLowerCase();\n if ([\"stdio\", \"lambda\", \"dual\"].includes(normalized)) {\n mode = normalized as McpConfig[\"mode\"];\n } else {\n throw new Error(\n `${filename} mcp.mode must be one of \\\"stdio\\\", \\\"lambda\\\", or \\\"dual\\\" if specified`\n );\n }\n }\n\n const defaultMethodRaw = (rawConfig as Record<string, unknown>).defaultMethod;\n const defaultMethod =\n typeof defaultMethodRaw === \"string\" ? defaultMethodRaw.toUpperCase() : undefined;\n\n const overridesRaw = (rawConfig as Record<string, unknown>).metadataOverrides;\n const metadataOverrides = isPlainObject(overridesRaw)\n ? (overridesRaw as Partial<ToolMetadataOverrides>)\n : undefined;\n\n const config: McpConfig = {\n enabled: true,\n };\n\n if (mode) {\n config.mode = mode;\n }\n\n if (defaultMethod) {\n config.defaultMethod = defaultMethod;\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction findDuplicates(values: string[]): string[] {\n const seen = new Map<string, number>();\n const duplicates = new Set<string>();\n values.forEach((value) => {\n const count = seen.get(value) ?? 0;\n seen.set(value, count + 1);\n if (count >= 1) {\n duplicates.add(value);\n }\n });\n return Array.from(duplicates.values());\n}\n\nfunction logMetadataSummary(\n metadata: Metadata,\n defaultsApplied: string[],\n sourceMetadataPath: string\n): void {\n console.log(`📄 metadata loaded from ${sourceMetadataPath}`);\n console.log(\"\\n📊 Metadata Summary:\");\n console.log(` • Name: ${metadata.name}`);\n console.log(` • Display Name: ${metadata.displayName}`);\n console.log(` • Version: ${metadata.version}`);\n console.log(` • Category: ${metadata.category}`);\n console.log(` • Tools: ${metadata.tools.length}`);\n console.log(` • Spec Version: ${metadata.metadataSpecVersion}`);\n if (metadata.payment) {\n console.log(` • Payment: $${metadata.payment.amountUSDC} USDC`);\n }\n if (defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n defaultsApplied.forEach((entry) => console.log(` • ${entry}`));\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { InternalToolDefinition } from \"../types/index\";\nimport { Metadata } from \"../types/metadata\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { loadAndValidateTools } from \"./validate\";\n\nexport interface GenerateMetadataOptions {\n input: string;\n output?: string;\n}\n\nexport interface GenerateMetadataResult {\n metadata: Metadata;\n defaultsApplied: string[];\n tools: InternalToolDefinition[];\n outputPath: string;\n}\n\nexport async function generateMetadataCommand(options: GenerateMetadataOptions): Promise<void> {\n const startTimestamp = timestamp();\n console.log(`[${startTimestamp}] Generating OpenTool metadata...`);\n\n try {\n const result = await generateMetadata(options);\n const endTimestamp = timestamp();\n console.log(`[${endTimestamp}] Metadata generation completed successfully!`);\n console.log(`Output file: ${result.outputPath}`);\n console.log(`Spec version: ${result.metadata.metadataSpecVersion}`);\n console.log(`Tools included: ${result.tools.length}`);\n if (result.defaultsApplied.length > 0) {\n console.log(\"Applied defaults:\");\n for (const entry of result.defaultsApplied) {\n console.log(` • ${entry}`);\n }\n }\n } catch (error) {\n const endTimestamp = timestamp();\n console.error(`[${endTimestamp}] Metadata generation failed:`, error);\n process.exit(1);\n }\n}\n\nexport async function generateMetadata(options: GenerateMetadataOptions): Promise<GenerateMetadataResult> {\n const toolsDir = path.resolve(options.input);\n if (!fs.existsSync(toolsDir)) {\n throw new Error(`Tools directory not found: ${toolsDir}`);\n }\n\n const projectRoot = path.dirname(toolsDir);\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n\n const { metadata, defaultsApplied } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n const outputPath = options.output\n ? path.resolve(options.output)\n : path.join(projectRoot, \"metadata.json\");\n fs.writeFileSync(outputPath, JSON.stringify(metadata, null, 2));\n\n return {\n metadata,\n defaultsApplied,\n tools,\n outputPath,\n };\n}\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n"]}