opentool 0.7.0 ā 0.7.1
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/README.md +30 -25
- package/dist/cli/index.js +29 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -11,30 +11,6 @@ Build serverless TypeScript tools that work with AI assistants, handle crypto pa
|
|
|
11
11
|
|
|
12
12
|
OpenTool lets you write simple TypeScript functions that can be called by other agents, monetized with crypto payments, and deployed as serverless functions. It handles the boring stuff like:
|
|
13
13
|
|
|
14
|
-
- Type validation with Zod schemas
|
|
15
|
-
- AI client integration (OpenAI, Anthropic, etc.)
|
|
16
|
-
- Multi-chain wallet support (Ethereum, Base, Arbitrum, etc.)
|
|
17
|
-
- Automatic AWS Lambda deployment via [OpenPond](https://openpond.ai)
|
|
18
|
-
- Payment infrastructure for on-chain tool monetization
|
|
19
|
-
|
|
20
|
-
## Recent Updates
|
|
21
|
-
|
|
22
|
-
- **Selective MCP mode** - tools now support `mcp = { enabled: true }` to enable MCP clients on a per-tool basis
|
|
23
|
-
- **Context bundling** - generates consolidated context files for AI code generation (see `dist/opentool-context.ts`)
|
|
24
|
-
- **Default bundling enabled** - tools now bundle by default for cleaner deployments
|
|
25
|
-
- **Improved CLI** - better validation and metadata generation commands
|
|
26
|
-
|
|
27
|
-
## Features
|
|
28
|
-
|
|
29
|
-
- **TypeScript-first** with Zod validation and auto-generated JSON schemas
|
|
30
|
-
- **Serverless by default** - deploys to AWS Lambda with Function URLs
|
|
31
|
-
- **MCP support** - works with Claude Desktop, MCP Inspector, or any MCP client
|
|
32
|
-
- **Built-in AI client** for OpenAI, Anthropic, and compatible providers
|
|
33
|
-
- **Multi-chain wallets** - Ethereum, Base, Arbitrum, Polygon, etc.
|
|
34
|
-
- **Crypto payments** - monetize tools with ERC-20 tokens (USDC, USDT, DAI)
|
|
35
|
-
- **CLI tools** for building, validating, and local dev with watch mode
|
|
36
|
-
- **Context bundling** - generates consolidated context files for AI code generation
|
|
37
|
-
|
|
38
14
|
## Installation
|
|
39
15
|
|
|
40
16
|
```bash
|
|
@@ -89,7 +65,36 @@ npx opentool validate
|
|
|
89
65
|
npx opentool dev
|
|
90
66
|
```
|
|
91
67
|
|
|
92
|
-
### 4.
|
|
68
|
+
### 4. x402
|
|
69
|
+
|
|
70
|
+
Include the definePayment function from the opentool package to define your payment config.
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { generateText } from "opentool/ai";
|
|
74
|
+
import { definePayment } from "opentool/payment";
|
|
75
|
+
|
|
76
|
+
export const payment = definePayment({
|
|
77
|
+
amount: "0.50",
|
|
78
|
+
currency: "USDC",
|
|
79
|
+
payTo: "0x...",
|
|
80
|
+
message: "Premium analytics require payment before access.",
|
|
81
|
+
acceptedMethods: ["x402", "402"],
|
|
82
|
+
acceptedCurrencies: ["USDC"],
|
|
83
|
+
chains: ["base"],
|
|
84
|
+
facilitator: "opentool",
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
export async function POST(request: Request) {
|
|
88
|
+
const payload = await request.json();
|
|
89
|
+
const { symbol } = schema.parse(payload);
|
|
90
|
+
const report = await generateText("Premium Content " + symbol);
|
|
91
|
+
return Response.json({
|
|
92
|
+
message: `Premium analytics for ${symbol}`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 4. MCP
|
|
93
98
|
|
|
94
99
|
By default, tools are HTTP-only. Want them accessible via MCP clients like Claude Desktop? Just add this to your tool file:
|
|
95
100
|
|
package/dist/cli/index.js
CHANGED
|
@@ -1884,8 +1884,20 @@ async function buildWorkflowsIfPresent(options) {
|
|
|
1884
1884
|
);
|
|
1885
1885
|
return null;
|
|
1886
1886
|
}
|
|
1887
|
-
|
|
1887
|
+
let BaseBuilder;
|
|
1888
|
+
try {
|
|
1889
|
+
({ BaseBuilder } = await import('@workflow/cli/dist/lib/builders/base-builder.js'));
|
|
1890
|
+
} catch (error) {
|
|
1891
|
+
const details = error instanceof Error ? `
|
|
1892
|
+
Reason: ${error.message}` : "";
|
|
1893
|
+
throw new Error(
|
|
1894
|
+
`[${timestamp()}] Workflow sources detected, but optional dependency '@workflow/cli' is not installed. Install it with "npm install @workflow/cli" (or add it to devDependencies) and rerun the build.` + details
|
|
1895
|
+
);
|
|
1896
|
+
}
|
|
1888
1897
|
class OpenToolWorkflowBuilder extends BaseBuilder {
|
|
1898
|
+
constructor(config) {
|
|
1899
|
+
super(config);
|
|
1900
|
+
}
|
|
1889
1901
|
async build() {
|
|
1890
1902
|
const inputFiles = await this.getInputFiles();
|
|
1891
1903
|
const tsConfig = await this.getTsConfigOptions();
|
|
@@ -1946,6 +1958,22 @@ async function buildWorkflowsIfPresent(options) {
|
|
|
1946
1958
|
});
|
|
1947
1959
|
await this.createWebhookBundle({ outfile: webhookBundlePath2 });
|
|
1948
1960
|
}
|
|
1961
|
+
async buildClientLibrary() {
|
|
1962
|
+
if (!this.config?.clientBundlePath) {
|
|
1963
|
+
return;
|
|
1964
|
+
}
|
|
1965
|
+
const clientBundlePath2 = path5.resolve(
|
|
1966
|
+
this.config.workingDir,
|
|
1967
|
+
this.config.clientBundlePath
|
|
1968
|
+
);
|
|
1969
|
+
await fs4.promises.mkdir(path5.dirname(clientBundlePath2), {
|
|
1970
|
+
recursive: true
|
|
1971
|
+
});
|
|
1972
|
+
await this.createWorkflowsBundle({
|
|
1973
|
+
outfile: clientBundlePath2,
|
|
1974
|
+
bundleFinalOutput: true
|
|
1975
|
+
});
|
|
1976
|
+
}
|
|
1949
1977
|
}
|
|
1950
1978
|
const relativeSourceDir = path5.relative(options.projectRoot, workflowsDir) || ".";
|
|
1951
1979
|
const outputBase = path5.join(
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/esbuild.ts","../../src/types/metadata.ts","../../src/utils/module-loader.ts","../../src/cli/shared/metadata.ts","../../src/types/payment.ts","../../src/helpers/payment.ts","../../src/payment/index.ts","../../src/adapters/mcp.ts","../../src/types/index.ts","../../src/cli/validate.ts","../../src/cli/build.ts","../../src/cli/dev.ts","../../src/cli/generate-metadata.ts","../../src/cli/index.ts"],"names":["path","fs","path2","path3","fs2","z","context","path4","fs3","options","stepsBundlePath","webhookBundlePath","__dirname","path6","fs5","watch","toHttpHandlerMap","timestamp","path7","fs6"],"mappings":"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","file":"index.js","sourcesContent":["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 { 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 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 { 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 { 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 * 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 { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { loadAndValidateTools } from \"./validate\";\n\nexport interface BuildOptions {\n input: string;\n output: string;\n name?: string;\n version?: string;\n}\n\ninterface BuildArtifacts {\n metadata: Metadata;\n defaultsApplied: string[];\n tools: InternalToolDefinition[];\n compiledTools: CompiledToolArtifact[];\n workflowBundles: WorkflowBundleArtifact | null;\n}\n\ninterface CompiledToolArtifact {\n name: string;\n filename: string;\n modulePath: string;\n httpMethods: string[];\n mcpEnabled: boolean;\n defaultMcpMethod?: string;\n hasWallet: boolean;\n}\n\ninterface WorkflowBundleArtifact {\n sourceDir: string;\n outputDir: string;\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n clientBundlePath?: string;\n manifestPath?: string;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const start = timestamp();\n console.log(`[${start}] Building OpenTool project...`);\n\n try {\n const artifacts = await buildProject(options);\n logBuildSummary(artifacts, options);\n } catch (error) {\n const end = timestamp();\n console.error(`[${end}] Build failed:`, error);\n process.exit(1);\n }\n}\n\nexport async function buildProject(options: BuildOptions): Promise<BuildArtifacts> {\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 outputDir = path.resolve(options.output);\n fs.mkdirSync(outputDir, { recursive: true });\n\n const serverName = options.name ?? \"opentool-server\";\n const serverVersion = options.version ?? \"1.0.0\";\n\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No valid tools found - build aborted\");\n }\n\n const { metadata, defaultsApplied } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n const metadataPath = path.join(outputDir, \"metadata.json\");\n fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));\n\n const compiledTools = await emitTools(tools, {\n projectRoot,\n outputDir,\n });\n\n const workflowBundles = await buildWorkflowsIfPresent({\n projectRoot,\n outputDir,\n });\n\n const shouldBuildMcpServer = compiledTools.some((artifact) => artifact.mcpEnabled);\n\n if (shouldBuildMcpServer) {\n await writeMcpServer({\n outputDir,\n serverName,\n serverVersion,\n metadata,\n compiledTools,\n tools,\n });\n } else {\n const serverPath = path.join(outputDir, \"mcp-server.js\");\n if (fs.existsSync(serverPath)) {\n fs.rmSync(serverPath);\n }\n }\n\n return {\n metadata,\n defaultsApplied,\n tools,\n compiledTools,\n workflowBundles,\n };\n}\n\ninterface EmitToolsConfig {\n projectRoot: string;\n outputDir: string;\n}\n\nasync function emitTools(\n tools: InternalToolDefinition[],\n config: EmitToolsConfig\n): Promise<CompiledToolArtifact[]> {\n const toolsOutDir = path.join(config.outputDir, \"tools\");\n if (fs.existsSync(toolsOutDir)) {\n fs.rmSync(toolsOutDir, { recursive: true, force: true });\n }\n fs.mkdirSync(toolsOutDir, { recursive: true });\n\n const entryPoints = tools.map((tool) => {\n if (!tool.sourcePath) {\n throw new Error(`Missing sourcePath for tool ${tool.filename}`);\n }\n return tool.sourcePath;\n });\n\n await transpileWithEsbuild({\n entryPoints,\n projectRoot: config.projectRoot,\n format: \"cjs\",\n outDir: toolsOutDir,\n bundle: true,\n });\n\n const compiled: CompiledToolArtifact[] = tools.map((tool) => {\n if (!tool.sourcePath) {\n throw new Error(`Missing sourcePath for tool ${tool.filename}`);\n }\n\n const base = path.basename(tool.sourcePath).replace(/\\.[^.]+$/, \"\");\n const modulePath = path.join(\"tools\", `${base}.js`);\n\n if (!fs.existsSync(path.join(config.outputDir, modulePath))) {\n throw new Error(`Expected compiled output missing: ${modulePath}`);\n }\n\n const defaultMcpMethod = tool.mcpConfig?.defaultMethod;\n return {\n name: tool.metadata?.name ?? tool.filename,\n filename: base,\n modulePath,\n httpMethods: tool.httpHandlers.map((handler) => handler.method),\n mcpEnabled: tool.mcpConfig?.enabled ?? false,\n ...(defaultMcpMethod ? { defaultMcpMethod } : {}),\n hasWallet: Boolean(tool.payment),\n };\n });\n\n return compiled;\n}\n\ninterface ServerOptions {\n outputDir: string;\n serverName: string;\n serverVersion: string;\n metadata: Metadata;\n compiledTools: CompiledToolArtifact[];\n tools: InternalToolDefinition[];\n}\n\nfunction renderMcpServer(options: ServerOptions): string {\n const toolImports = options.compiledTools\n .map((tool, index) => `const tool${index} = require('./${tool.modulePath}');`)\n .join(\"\\n\");\n\n const registry = options.compiledTools\n .map((artifact, index) => {\n const config = {\n enabled: artifact.mcpEnabled,\n defaultMethod: artifact.defaultMcpMethod ?? null,\n httpMethods: artifact.httpMethods,\n filename: artifact.filename,\n };\n return ` { meta: metadata.tools[${index}], module: tool${index}, config: ${JSON.stringify(config)} }`;\n })\n .join(\",\\n\");\n\n return `#!/usr/bin/env node\nconst { Server } = require('@modelcontextprotocol/sdk/server/index.js');\nconst { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');\nconst { CallToolRequestSchema, ListToolsRequestSchema } = require('@modelcontextprotocol/sdk/types.js');\nconst metadata = require('./metadata.json');\nconst { createMcpAdapter, HTTP_METHODS } = require('opentool/dist/adapters/mcp.js');\n\n${toolImports}\n\nconst toolRegistry = [\n${registry}\n];\n\nconst adapters = toolRegistry.map((entry) => {\n if (!entry.config.enabled) {\n return null;\n }\n\n const httpHandlers = Object.fromEntries(\n HTTP_METHODS\n .map((method) => [method, entry.module[method]])\n .filter(([, handler]) => typeof handler === 'function')\n );\n\n return {\n meta: entry.meta,\n invoke: createMcpAdapter({\n name: entry.meta.name,\n schema: entry.module.schema,\n httpHandlers,\n defaultMethod: entry.config.defaultMethod || undefined,\n }),\n };\n});\n\nconst server = new Server(\n {\n name: '${escapeForJs(options.serverName)}',\n version: '${escapeForJs(options.serverVersion)}',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n);\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters\n .filter((entry) => entry !== null)\n .map((entry) => entry.meta),\n}));\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const adapter = adapters.find((entry) => entry && entry.meta.name === request.params.name);\n if (!adapter) {\n throw new Error('Tool ' + request.params.name + ' is not registered for MCP');\n }\n\n try {\n return await adapter.invoke(request.params.arguments);\n } catch (error) {\n const message = (error && error.message) || String(error);\n return {\n content: [{ type: 'text', text: 'Error: ' + message }],\n isError: true,\n };\n }\n});\n\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nif (require.main === module) {\n main().catch(console.error);\n}\n\nmodule.exports = { server };\n`;\n}\n\nasync function writeMcpServer(options: ServerOptions): Promise<void> {\n const serverCode = renderMcpServer(options);\n const serverPath = path.join(options.outputDir, 'mcp-server.js');\n fs.writeFileSync(serverPath, serverCode);\n fs.chmodSync(serverPath, 0o755);\n}\n\nfunction logBuildSummary(artifacts: BuildArtifacts, options: BuildOptions): void {\n const end = timestamp();\n console.log(`[${end}] Build completed successfully!`);\n console.log(`Output directory: ${path.resolve(options.output)}`);\n console.log(\"Generated files:\");\n const hasMcp = artifacts.compiledTools.some((tool) => tool.mcpEnabled);\n if (hasMcp) {\n console.log(\" ⢠mcp-server.js (stdio server)\");\n }\n console.log(` ⢠tools/ (${artifacts.compiledTools.length} compiled tools)`);\n artifacts.compiledTools.forEach((tool) => {\n const methods = tool.httpMethods.join(\", \");\n const walletBadge = tool.hasWallet ? \" [wallet]\" : \"\";\n console.log(` - ${tool.name} [${methods}]${walletBadge}`);\n });\n console.log(\" ⢠metadata.json (registry artifact)\");\n if (artifacts.workflowBundles) {\n console.log(\" ⢠.well-known/workflow/v1/ (workflow bundles)\");\n console.log(\" - flow.js\");\n console.log(\" - step.js\");\n console.log(\" - webhook.js\");\n if (artifacts.workflowBundles.clientBundlePath) {\n console.log(\" - client.js\");\n }\n if (artifacts.workflowBundles.manifestPath) {\n console.log(\" - manifest.json\");\n }\n }\n if (artifacts.defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n artifacts.defaultsApplied.forEach((entry) => console.log(` ⢠${entry}`));\n }\n\n if (!hasMcp) {\n console.log(\"\\nā¹ļø MCP adapter skipped (no tools opted in)\");\n }\n}\n\ninterface WorkflowBuildOptions {\n projectRoot: string;\n outputDir: string;\n workflowsDir?: string;\n}\n\nasync function buildWorkflowsIfPresent(\n options: WorkflowBuildOptions\n): Promise<WorkflowBundleArtifact | null> {\n const workflowsDir =\n options.workflowsDir ?? path.join(options.projectRoot, \"workflows\");\n\n if (!fs.existsSync(workflowsDir)) {\n return null;\n }\n\n if (!hasWorkflowSourceFiles(workflowsDir)) {\n return null;\n }\n\n const nodeVersion = process.versions?.node ?? \"0.0.0\";\n const nodeMajor = Number(nodeVersion.split(\".\")[0] ?? 0);\n\n if (!Number.isFinite(nodeMajor) || nodeMajor < 22) {\n console.warn(\n `[${timestamp()}] Workflow bundles skipped (requires Node >= 22, current ${nodeVersion})`\n );\n return null;\n }\n\n const { BaseBuilder } = await import(\n \"@workflow/cli/dist/lib/builders/base-builder.js\"\n );\n\n class OpenToolWorkflowBuilder extends BaseBuilder {\n async build(): Promise<void> {\n const inputFiles = await this.getInputFiles();\n const tsConfig = await this.getTsConfigOptions();\n const shared: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n } = {\n inputFiles,\n ...(tsConfig.baseUrl ? { tsBaseUrl: tsConfig.baseUrl } : {}),\n ...(tsConfig.paths ? { tsPaths: tsConfig.paths } : {}),\n };\n\n await this.buildStepsBundle(shared);\n await this.buildWorkflowsBundle(shared);\n await this.buildWebhookRoute();\n await this.buildClientLibrary();\n }\n\n private async buildStepsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow steps bundle at\",\n this.config.stepsBundlePath\n );\n const stepsBundlePath = path.resolve(\n this.config.workingDir,\n this.config.stepsBundlePath\n );\n await fs.promises.mkdir(path.dirname(stepsBundlePath), { recursive: true });\n await this.createStepsBundle({\n outfile: stepsBundlePath,\n ...options,\n });\n }\n\n private async buildWorkflowsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow bundle at\",\n this.config.workflowsBundlePath\n );\n const workflowBundlePath = path.resolve(\n this.config.workingDir,\n this.config.workflowsBundlePath\n );\n await fs.promises.mkdir(path.dirname(workflowBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: workflowBundlePath,\n bundleFinalOutput: false,\n ...options,\n });\n }\n\n private async buildWebhookRoute(): Promise<void> {\n console.log(\n \"Creating OpenTool workflow webhook bundle at\",\n this.config.webhookBundlePath\n );\n const webhookBundlePath = path.resolve(\n this.config.workingDir,\n this.config.webhookBundlePath\n );\n await fs.promises.mkdir(path.dirname(webhookBundlePath), {\n recursive: true,\n });\n await this.createWebhookBundle({ outfile: webhookBundlePath });\n }\n }\n\n const relativeSourceDir = path.relative(options.projectRoot, workflowsDir) || \".\";\n const outputBase = path.join(\n options.outputDir,\n \".well-known\",\n \"workflow\",\n \"v1\"\n );\n\n const stepsBundlePath = path.join(outputBase, \"step.js\");\n const workflowsBundlePath = path.join(outputBase, \"flow.js\");\n const webhookBundlePath = path.join(outputBase, \"webhook.js\");\n const clientBundlePath: string | undefined = undefined;\n const manifestPath = path.join(outputBase, \"manifest.json\");\n\n const builder = new OpenToolWorkflowBuilder({\n workingDir: options.projectRoot,\n dirs: [relativeSourceDir],\n buildTarget: \"standalone\",\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n workflowManifestPath: manifestPath,\n externalPackages: [\n \"workflow\",\n \"workflow/internal/builtins\",\n \"workflow/internal/private\",\n \"workflow/runtime\",\n \"workflow/api\",\n ],\n });\n\n console.log(\n `[${timestamp()}] Building workflows from ${workflowsDir} -> ${outputBase}`\n );\n\n await builder.build();\n\n return {\n sourceDir: workflowsDir,\n outputDir: outputBase,\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n manifestPath,\n };\n}\n\nfunction hasWorkflowSourceFiles(directory: string): boolean {\n const entries = fs.readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (hasWorkflowSourceFiles(path.join(directory, entry.name))) {\n return true;\n }\n continue;\n }\n\n if (entry.isFile()) {\n const extension = path.extname(entry.name).toLowerCase();\n if (WORKFLOW_SOURCE_EXTENSIONS.has(extension)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nconst WORKFLOW_SOURCE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n]);\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n\nfunction escapeForJs(value: string): string {\n return value.replace(/'/g, \"\\\\'\");\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport { PaymentRequiredError } from \"../payment/index\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n} from \"../types/index\";\nimport { loadAndValidateTools } from \"./validate\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst packageJson = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, \"../../package.json\"), \"utf-8\")\n);\n\nconst cyan = \"\\x1b[36m\";\nconst bold = \"\\x1b[1m\";\nconst dim = \"\\x1b[2m\";\nconst reset = \"\\x1b[0m\";\n\nexport interface DevOptions {\n input: string;\n port?: number;\n watch?: boolean;\n stdio?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n const port = options.port ?? 7000;\n const watch = options.watch ?? true;\n const enableStdio = options.stdio ?? false;\n const log = enableStdio\n ? (_message: string) => {}\n : (message: string) => console.log(message);\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\n const projectRoot = path.dirname(toolsDir);\n let toolDefinitions = await loadToolDefinitions(toolsDir, projectRoot);\n if (toolDefinitions.length === 0) {\n throw new Error(\"No tools found in the target directory\");\n }\n let routes = expandRoutes(toolDefinitions);\n\n const stdioController = enableStdio\n ? await startMcpServer(() => toolDefinitions)\n : null;\n\n if (watch) {\n const reloadableExtensions = /\\.(ts|js|mjs|cjs|tsx|jsx)$/i;\n const tempDir = path.join(toolsDir, \".opentool-temp\");\n const watchTargets = new Set<string>([toolsDir]);\n if (projectRoot !== toolsDir) {\n watchTargets.add(projectRoot);\n }\n\n let reloading = false;\n const scheduleReload = async (changedPath?: string) => {\n if (reloading) {\n return;\n }\n reloading = true;\n log(\n `${dim}\\nDetected change in ${\n changedPath ?? \"tools directory\"\n }, reloading...${reset}`\n );\n try {\n toolDefinitions = await loadToolDefinitions(toolsDir, projectRoot);\n routes = expandRoutes(toolDefinitions);\n logReload(toolDefinitions, enableStdio, log);\n } catch (error) {\n console.error(\"Failed to reload tools:\", error);\n } finally {\n reloading = false;\n }\n };\n\n for (const target of watchTargets) {\n fs.watch(target, async (_eventType, rawFilename) => {\n const filename = rawFilename?.toString();\n if (filename && !reloadableExtensions.test(filename)) {\n return;\n }\n\n const fullPath = filename ? path.join(target, filename) : undefined;\n if (fullPath && fullPath.startsWith(tempDir)) {\n return;\n }\n\n // Normalize display path relative to the project root for clarity.\n const displayPath = fullPath\n ? path.relative(projectRoot, fullPath) || path.basename(fullPath)\n : path.relative(projectRoot, target) || path.basename(target);\n\n await scheduleReload(displayPath);\n });\n }\n }\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const url = new URL(req.url || \"/\", `http://localhost:${port}`);\n const routePath = url.pathname;\n log(`${dim}[request] ${method} ${routePath}${reset}`);\n try {\n await handleRequest({ req, res, port, routes });\n log(\n `${dim}[response] ${method} ${routePath} ${res.statusCode}${reset}`\n );\n } catch (error) {\n console.error(\"Error handling request:\", error);\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: (error as Error).message }));\n log(`${dim}[response] ${method} ${routePath} 500${reset}`);\n }\n });\n\n server.listen(port, () => {\n log(`${bold}${dim}> dev opentool${reset}`);\n log(\n ` * ${bold}opentool${reset} ${cyan}v${packageJson.version}${reset}`\n );\n log(` * ${bold}HTTP:${reset} http://localhost:${port}`);\n logStartup(toolDefinitions, enableStdio, log);\n });\n\n process.on(\"SIGINT\", async () => {\n log(`\\n${dim}Shutting down dev server...${reset}`);\n server.close();\n if (stdioController) {\n await stdioController.close();\n }\n process.exit(0);\n });\n } catch (error) {\n console.error(\"Dev server failed:\", error);\n process.exit(1);\n }\n}\n\nasync function startMcpServer(\n getTools: () => InternalToolDefinition[]\n): Promise<{ close(): Promise<void> }> {\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 const tools = getTools().filter(isMcpEnabled);\n return {\n tools: tools.map((tool) => ({\n name: tool.metadata?.name ?? tool.filename,\n description: tool.metadata?.description ?? `${tool.filename} tool`,\n inputSchema: tool.inputSchema,\n annotations: tool.metadata?.annotations,\n payment: tool.metadata?.payment,\n discovery: tool.metadata?.discovery,\n })),\n };\n });\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const tools = getTools().filter(isMcpEnabled);\n const tool = tools.find((entry) => {\n const toolName = entry.metadata?.name ?? entry.filename;\n return toolName === request.params.name;\n });\n\n if (!tool) {\n throw new Error(`Tool ${request.params.name} not found`);\n }\n\n try {\n const validatedParams = (tool.schema as any).parse(\n request.params.arguments\n );\n const handler =\n tool.handler ??\n createMcpAdapter({\n name: tool.metadata?.name ?? tool.filename,\n httpHandlers: toHttpHandlerMap(tool.httpHandlers),\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod\n ? { defaultMethod: tool.mcpConfig.defaultMethod }\n : {}),\n });\n\n const result = await handler(validatedParams);\n return result 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 server.connect(transport).catch((error) => {\n console.error(\"MCP transport error:\", error);\n });\n\n return {\n async close() {\n await server.close();\n if (typeof transport.close === \"function\") {\n transport.close();\n }\n },\n };\n}\n\nasync function loadToolDefinitions(\n toolsDir: string,\n projectRoot: string\n): Promise<InternalToolDefinition[]> {\n return loadAndValidateTools(toolsDir, { projectRoot });\n}\n\nfunction expandRoutes(tools: InternalToolDefinition[]): DevRoute[] {\n const routes: DevRoute[] = [];\n\n tools.forEach((tool) => {\n tool.httpHandlers.forEach((handlerDef: HttpHandlerDefinition) => {\n routes.push({\n tool,\n method: handlerDef.method.toUpperCase(),\n handler: async (request: Request) => handlerDef.handler(request),\n });\n });\n });\n\n return routes;\n}\n\nfunction logStartup(\n tools: InternalToolDefinition[],\n stdio: boolean,\n log: (message: string) => void\n): void {\n log(`\\nTools: ${tools.length} tool${tools.length === 1 ? \"\" : \"s\"}`);\n printToolList(tools, log);\n if (stdio) {\n const mcpTools = tools.filter(isMcpEnabled);\n const label =\n mcpTools.length > 0\n ? `MCP stdio enabled (${mcpTools.length} tool${\n mcpTools.length === 1 ? \"\" : \"s\"\n })`\n : \"MCP stdio enabled (no tools opted in)\";\n log(`${dim}${label}${reset}`);\n }\n}\n\nfunction logReload(\n tools: InternalToolDefinition[],\n stdio: boolean,\n log: (message: string) => void\n): void {\n log(`\\nReloaded ${tools.length} tool${tools.length === 1 ? \"\" : \"s\"}`);\n printToolList(tools, log);\n if (stdio) {\n const mcpTools = tools.filter(isMcpEnabled);\n const label =\n mcpTools.length > 0\n ? `MCP stdio enabled (${mcpTools.length} tool${\n mcpTools.length === 1 ? \"\" : \"s\"\n })`\n : \"MCP stdio enabled (no tools opted in)\";\n log(`${dim}${label}${reset}`);\n }\n}\n\nfunction printToolList(\n tools: InternalToolDefinition[],\n log: (message: string) => void\n): void {\n tools.forEach((tool) => {\n const name = tool.metadata?.name ?? tool.filename;\n const methods = tool.httpHandlers\n .map((handler) => handler.method)\n .join(\", \");\n const tags: string[] = [];\n if (tool.mcpConfig?.enabled) {\n tags.push(`${dim}[mcp]${reset}`);\n }\n if (tool.payment || (tool.metadata && (tool.metadata as any).payment)) {\n tags.push(`${dim}[payments]${reset}`);\n }\n const tagSuffix = tags.length ? ` ${tags.join(\" \")}` : \"\";\n log(` ⢠${name} ā ${methods}${tagSuffix}`);\n });\n}\n\nasync function handleRequest(params: {\n req: http.IncomingMessage;\n res: http.ServerResponse;\n port: number;\n routes: DevRoute[];\n}): Promise<void> {\n const { req, res, port, routes } = params;\n\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\n \"Access-Control-Allow-Methods\",\n HTTP_METHODS.join(\", \") + \", OPTIONS\"\n );\n res.setHeader(\"Access-Control-Allow-Headers\", \"Content-Type, Authorization\");\n\n if (req.method === \"OPTIONS\") {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const method = (req.method || \"GET\").toUpperCase();\n const url = new URL(req.url || \"/\", `http://localhost:${port}`);\n const toolName = url.pathname.slice(1) || \"index\";\n\n const route = findRoute(toolName, method, routes);\n if (!route) {\n res.writeHead(404, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n error: `Tool not found: ${method} /${toolName}`,\n availableTools: routes.map((r) => `${r.method} /${routeName(r.tool)}`),\n })\n );\n return;\n }\n\n const body = await readRequestBody(req);\n const request = createWebRequest({ req, url, body });\n let response: Response;\n try {\n response = await route.handler(request);\n } catch (error) {\n if (error instanceof PaymentRequiredError) {\n response = error.response;\n } else {\n throw error;\n }\n }\n\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n res.writeHead(response.status, headers);\n\n if (method === \"HEAD\") {\n res.end();\n return;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n res.end(Buffer.from(arrayBuffer));\n}\n\nfunction findRoute(\n toolName: string,\n method: string,\n routes: DevRoute[]\n): DevRoute | undefined {\n const direct = routes.find(\n (route) => routeName(route.tool) === toolName && route.method === method\n );\n\n if (direct) {\n return direct;\n }\n\n if (method === \"HEAD\") {\n return routes.find(\n (route) => routeName(route.tool) === toolName && route.method === \"GET\"\n );\n }\n\n return undefined;\n}\n\nfunction routeName(tool: InternalToolDefinition): string {\n return tool.metadata?.name ?? tool.filename;\n}\n\nasync function readRequestBody(req: http.IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction createWebRequest(params: {\n req: http.IncomingMessage;\n url: URL;\n body: Buffer;\n}): Request {\n const { req, url, body } = params;\n\n const headers = new Headers();\n Object.entries(req.headers).forEach(([key, value]) => {\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((entry) => headers.append(key, entry));\n return;\n }\n headers.set(key, value);\n });\n\n const method = (req.method || \"GET\").toUpperCase();\n const init: RequestInit = {\n method,\n headers,\n };\n\n if (body.length > 0 && method !== \"GET\" && method !== \"HEAD\") {\n init.body = body.toString();\n }\n\n return new Request(url, init);\n}\n\ninterface DevRoute {\n tool: InternalToolDefinition;\n method: string;\n handler: (request: Request) => Promise<Response>;\n}\n\nfunction toHttpHandlerMap(\n handlers: HttpHandlerDefinition[]\n): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>(\n (acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n },\n {}\n );\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\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","#!/usr/bin/env node\n\nimport { program } from \"commander\";\nimport { buildCommand } from \"./build\";\nimport { devCommand } from \"./dev\";\nimport { generateMetadataCommand } from \"./generate-metadata\";\nimport { validateCommand, validateFullCommand } from \"./validate\";\n\nprogram\n .name(\"opentool\")\n .description(\"OpenTool CLI for building and developing serverless MCP tools\")\n .version(\"1.0.0\");\n\n// Dev command\nprogram\n .command(\"dev\")\n .description(\"Start HTTP dev server (optional MCP stdio)\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\"-p, --port <port>\", \"Port to listen on\", \"7000\")\n .option(\"--stdio\", \"Expose MCP stdio transport\", false)\n .option(\"--no-watch\", \"Disable file watching\")\n .action((cmdOptions) => {\n devCommand({\n input: cmdOptions.input,\n port: Number(cmdOptions.port ?? 7000),\n watch: cmdOptions.watch,\n stdio: cmdOptions.stdio,\n });\n });\n\n// Build command\nprogram\n .command(\"build\")\n .description(\"Build tools for deployment\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\"-o, --output <dir>\", \"Output directory for built tools\", \"dist\")\n .option(\"--name <name>\", \"Server name\", \"opentool-server\")\n .option(\"--version <version>\", \"Server version\", \"1.0.0\")\n .action(buildCommand);\n\n// Validate command (metadata only)\nprogram\n .command(\"validate\")\n .description(\"Validate metadata for registry submission\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .action(validateCommand);\n\n// Full validation command (tools + metadata)\nprogram\n .command(\"validate-full\")\n .description(\"Full validation of tools and metadata\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .action(validateFullCommand);\n\n// Generate metadata command\nprogram\n .command(\"metadata\")\n .description(\"Generate OpenTool metadata JSON without building\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\n \"-o, --output <file>\",\n \"Output file path for metadata.json\",\n \"metadata.json\"\n )\n .option(\"--name <name>\", \"Server name\", \"opentool-server\")\n .option(\"--version <version>\", \"Server version\", \"1.0.0\")\n .action(generateMetadataCommand);\n\n// Parse arguments\nprogram.parse();\n\nexport * from \"./build\";\nexport * from \"./dev\";\nexport * from \"./generate-metadata\";\nexport * from \"./validate\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/esbuild.ts","../../src/types/metadata.ts","../../src/utils/module-loader.ts","../../src/cli/shared/metadata.ts","../../src/types/payment.ts","../../src/helpers/payment.ts","../../src/payment/index.ts","../../src/adapters/mcp.ts","../../src/types/index.ts","../../src/cli/validate.ts","../../src/cli/build.ts","../../src/cli/dev.ts","../../src/cli/generate-metadata.ts","../../src/cli/index.ts"],"names":["path","fs","path2","path3","fs2","z","context","path4","fs3","options","stepsBundlePath","webhookBundlePath","clientBundlePath","__dirname","path6","fs5","watch","toHttpHandlerMap","timestamp","path7","fs6"],"mappings":"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","file":"index.js","sourcesContent":["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 { 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 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 { 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 { 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 * 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 { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { loadAndValidateTools } from \"./validate\";\n\nexport interface BuildOptions {\n input: string;\n output: string;\n name?: string;\n version?: string;\n}\n\ninterface BuildArtifacts {\n metadata: Metadata;\n defaultsApplied: string[];\n tools: InternalToolDefinition[];\n compiledTools: CompiledToolArtifact[];\n workflowBundles: WorkflowBundleArtifact | null;\n}\n\ninterface CompiledToolArtifact {\n name: string;\n filename: string;\n modulePath: string;\n httpMethods: string[];\n mcpEnabled: boolean;\n defaultMcpMethod?: string;\n hasWallet: boolean;\n}\n\ninterface WorkflowBundleArtifact {\n sourceDir: string;\n outputDir: string;\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n clientBundlePath?: string;\n manifestPath?: string;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const start = timestamp();\n console.log(`[${start}] Building OpenTool project...`);\n\n try {\n const artifacts = await buildProject(options);\n logBuildSummary(artifacts, options);\n } catch (error) {\n const end = timestamp();\n console.error(`[${end}] Build failed:`, error);\n process.exit(1);\n }\n}\n\nexport async function buildProject(options: BuildOptions): Promise<BuildArtifacts> {\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 outputDir = path.resolve(options.output);\n fs.mkdirSync(outputDir, { recursive: true });\n\n const serverName = options.name ?? \"opentool-server\";\n const serverVersion = options.version ?? \"1.0.0\";\n\n const tools = await loadAndValidateTools(toolsDir, { projectRoot });\n if (tools.length === 0) {\n throw new Error(\"No valid tools found - build aborted\");\n }\n\n const { metadata, defaultsApplied } = await buildMetadataArtifact({\n projectRoot,\n tools,\n });\n\n const metadataPath = path.join(outputDir, \"metadata.json\");\n fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));\n\n const compiledTools = await emitTools(tools, {\n projectRoot,\n outputDir,\n });\n\n const workflowBundles = await buildWorkflowsIfPresent({\n projectRoot,\n outputDir,\n });\n\n const shouldBuildMcpServer = compiledTools.some((artifact) => artifact.mcpEnabled);\n\n if (shouldBuildMcpServer) {\n await writeMcpServer({\n outputDir,\n serverName,\n serverVersion,\n metadata,\n compiledTools,\n tools,\n });\n } else {\n const serverPath = path.join(outputDir, \"mcp-server.js\");\n if (fs.existsSync(serverPath)) {\n fs.rmSync(serverPath);\n }\n }\n\n return {\n metadata,\n defaultsApplied,\n tools,\n compiledTools,\n workflowBundles,\n };\n}\n\ninterface EmitToolsConfig {\n projectRoot: string;\n outputDir: string;\n}\n\nasync function emitTools(\n tools: InternalToolDefinition[],\n config: EmitToolsConfig\n): Promise<CompiledToolArtifact[]> {\n const toolsOutDir = path.join(config.outputDir, \"tools\");\n if (fs.existsSync(toolsOutDir)) {\n fs.rmSync(toolsOutDir, { recursive: true, force: true });\n }\n fs.mkdirSync(toolsOutDir, { recursive: true });\n\n const entryPoints = tools.map((tool) => {\n if (!tool.sourcePath) {\n throw new Error(`Missing sourcePath for tool ${tool.filename}`);\n }\n return tool.sourcePath;\n });\n\n await transpileWithEsbuild({\n entryPoints,\n projectRoot: config.projectRoot,\n format: \"cjs\",\n outDir: toolsOutDir,\n bundle: true,\n });\n\n const compiled: CompiledToolArtifact[] = tools.map((tool) => {\n if (!tool.sourcePath) {\n throw new Error(`Missing sourcePath for tool ${tool.filename}`);\n }\n\n const base = path.basename(tool.sourcePath).replace(/\\.[^.]+$/, \"\");\n const modulePath = path.join(\"tools\", `${base}.js`);\n\n if (!fs.existsSync(path.join(config.outputDir, modulePath))) {\n throw new Error(`Expected compiled output missing: ${modulePath}`);\n }\n\n const defaultMcpMethod = tool.mcpConfig?.defaultMethod;\n return {\n name: tool.metadata?.name ?? tool.filename,\n filename: base,\n modulePath,\n httpMethods: tool.httpHandlers.map((handler) => handler.method),\n mcpEnabled: tool.mcpConfig?.enabled ?? false,\n ...(defaultMcpMethod ? { defaultMcpMethod } : {}),\n hasWallet: Boolean(tool.payment),\n };\n });\n\n return compiled;\n}\n\ninterface ServerOptions {\n outputDir: string;\n serverName: string;\n serverVersion: string;\n metadata: Metadata;\n compiledTools: CompiledToolArtifact[];\n tools: InternalToolDefinition[];\n}\n\nfunction renderMcpServer(options: ServerOptions): string {\n const toolImports = options.compiledTools\n .map((tool, index) => `const tool${index} = require('./${tool.modulePath}');`)\n .join(\"\\n\");\n\n const registry = options.compiledTools\n .map((artifact, index) => {\n const config = {\n enabled: artifact.mcpEnabled,\n defaultMethod: artifact.defaultMcpMethod ?? null,\n httpMethods: artifact.httpMethods,\n filename: artifact.filename,\n };\n return ` { meta: metadata.tools[${index}], module: tool${index}, config: ${JSON.stringify(config)} }`;\n })\n .join(\",\\n\");\n\n return `#!/usr/bin/env node\nconst { Server } = require('@modelcontextprotocol/sdk/server/index.js');\nconst { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');\nconst { CallToolRequestSchema, ListToolsRequestSchema } = require('@modelcontextprotocol/sdk/types.js');\nconst metadata = require('./metadata.json');\nconst { createMcpAdapter, HTTP_METHODS } = require('opentool/dist/adapters/mcp.js');\n\n${toolImports}\n\nconst toolRegistry = [\n${registry}\n];\n\nconst adapters = toolRegistry.map((entry) => {\n if (!entry.config.enabled) {\n return null;\n }\n\n const httpHandlers = Object.fromEntries(\n HTTP_METHODS\n .map((method) => [method, entry.module[method]])\n .filter(([, handler]) => typeof handler === 'function')\n );\n\n return {\n meta: entry.meta,\n invoke: createMcpAdapter({\n name: entry.meta.name,\n schema: entry.module.schema,\n httpHandlers,\n defaultMethod: entry.config.defaultMethod || undefined,\n }),\n };\n});\n\nconst server = new Server(\n {\n name: '${escapeForJs(options.serverName)}',\n version: '${escapeForJs(options.serverVersion)}',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n);\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters\n .filter((entry) => entry !== null)\n .map((entry) => entry.meta),\n}));\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const adapter = adapters.find((entry) => entry && entry.meta.name === request.params.name);\n if (!adapter) {\n throw new Error('Tool ' + request.params.name + ' is not registered for MCP');\n }\n\n try {\n return await adapter.invoke(request.params.arguments);\n } catch (error) {\n const message = (error && error.message) || String(error);\n return {\n content: [{ type: 'text', text: 'Error: ' + message }],\n isError: true,\n };\n }\n});\n\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nif (require.main === module) {\n main().catch(console.error);\n}\n\nmodule.exports = { server };\n`;\n}\n\nasync function writeMcpServer(options: ServerOptions): Promise<void> {\n const serverCode = renderMcpServer(options);\n const serverPath = path.join(options.outputDir, 'mcp-server.js');\n fs.writeFileSync(serverPath, serverCode);\n fs.chmodSync(serverPath, 0o755);\n}\n\nfunction logBuildSummary(artifacts: BuildArtifacts, options: BuildOptions): void {\n const end = timestamp();\n console.log(`[${end}] Build completed successfully!`);\n console.log(`Output directory: ${path.resolve(options.output)}`);\n console.log(\"Generated files:\");\n const hasMcp = artifacts.compiledTools.some((tool) => tool.mcpEnabled);\n if (hasMcp) {\n console.log(\" ⢠mcp-server.js (stdio server)\");\n }\n console.log(` ⢠tools/ (${artifacts.compiledTools.length} compiled tools)`);\n artifacts.compiledTools.forEach((tool) => {\n const methods = tool.httpMethods.join(\", \");\n const walletBadge = tool.hasWallet ? \" [wallet]\" : \"\";\n console.log(` - ${tool.name} [${methods}]${walletBadge}`);\n });\n console.log(\" ⢠metadata.json (registry artifact)\");\n if (artifacts.workflowBundles) {\n console.log(\" ⢠.well-known/workflow/v1/ (workflow bundles)\");\n console.log(\" - flow.js\");\n console.log(\" - step.js\");\n console.log(\" - webhook.js\");\n if (artifacts.workflowBundles.clientBundlePath) {\n console.log(\" - client.js\");\n }\n if (artifacts.workflowBundles.manifestPath) {\n console.log(\" - manifest.json\");\n }\n }\n if (artifacts.defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n artifacts.defaultsApplied.forEach((entry) => console.log(` ⢠${entry}`));\n }\n\n if (!hasMcp) {\n console.log(\"\\nā¹ļø MCP adapter skipped (no tools opted in)\");\n }\n}\n\ninterface WorkflowBuildOptions {\n projectRoot: string;\n outputDir: string;\n workflowsDir?: string;\n}\n\nasync function buildWorkflowsIfPresent(\n options: WorkflowBuildOptions\n): Promise<WorkflowBundleArtifact | null> {\n const workflowsDir =\n options.workflowsDir ?? path.join(options.projectRoot, \"workflows\");\n\n if (!fs.existsSync(workflowsDir)) {\n return null;\n }\n\n if (!hasWorkflowSourceFiles(workflowsDir)) {\n return null;\n }\n\n const nodeVersion = process.versions?.node ?? \"0.0.0\";\n const nodeMajor = Number(nodeVersion.split(\".\")[0] ?? 0);\n\n if (!Number.isFinite(nodeMajor) || nodeMajor < 22) {\n console.warn(\n `[${timestamp()}] Workflow bundles skipped (requires Node >= 22, current ${nodeVersion})`\n );\n return null;\n }\n\n type WorkflowBaseBuilderCtor = new (config: any) => {\n config: any;\n getInputFiles(): Promise<string[]>;\n getTsConfigOptions(): Promise<{\n baseUrl?: string;\n paths?: Record<string, string[]>;\n }>;\n createStepsBundle(options: any): Promise<void>;\n createWorkflowsBundle(options: any): Promise<void>;\n createWebhookBundle(options: any): Promise<void>;\n };\n\n let BaseBuilder: WorkflowBaseBuilderCtor;\n try {\n ({ BaseBuilder } = (await import(\n \"@workflow/cli/dist/lib/builders/base-builder.js\"\n )) as { BaseBuilder: WorkflowBaseBuilderCtor });\n } catch (error) {\n const details =\n error instanceof Error ? `\\nReason: ${error.message}` : \"\";\n throw new Error(\n `[${timestamp()}] Workflow sources detected, but optional dependency ` +\n \"'@workflow/cli' is not installed. Install it with \\\"npm install \" +\n \"@workflow/cli\\\" (or add it to devDependencies) and rerun the build.\" +\n details\n );\n }\n\n class OpenToolWorkflowBuilder extends BaseBuilder {\n constructor(config: ConstructorParameters<WorkflowBaseBuilderCtor>[0]) {\n super(config);\n }\n\n async build(): Promise<void> {\n const inputFiles = await this.getInputFiles();\n const tsConfig = await this.getTsConfigOptions();\n const shared: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n } = {\n inputFiles,\n ...(tsConfig.baseUrl ? { tsBaseUrl: tsConfig.baseUrl } : {}),\n ...(tsConfig.paths ? { tsPaths: tsConfig.paths } : {}),\n };\n\n await this.buildStepsBundle(shared);\n await this.buildWorkflowsBundle(shared);\n await this.buildWebhookRoute();\n await this.buildClientLibrary();\n }\n\n private async buildStepsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow steps bundle at\",\n this.config.stepsBundlePath\n );\n const stepsBundlePath = path.resolve(\n this.config.workingDir,\n this.config.stepsBundlePath\n );\n await fs.promises.mkdir(path.dirname(stepsBundlePath), { recursive: true });\n await this.createStepsBundle({\n outfile: stepsBundlePath,\n ...options,\n });\n }\n\n private async buildWorkflowsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow bundle at\",\n this.config.workflowsBundlePath\n );\n const workflowBundlePath = path.resolve(\n this.config.workingDir,\n this.config.workflowsBundlePath\n );\n await fs.promises.mkdir(path.dirname(workflowBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: workflowBundlePath,\n bundleFinalOutput: false,\n ...options,\n });\n }\n\n private async buildWebhookRoute(): Promise<void> {\n console.log(\n \"Creating OpenTool workflow webhook bundle at\",\n this.config.webhookBundlePath\n );\n const webhookBundlePath = path.resolve(\n this.config.workingDir,\n this.config.webhookBundlePath\n );\n await fs.promises.mkdir(path.dirname(webhookBundlePath), {\n recursive: true,\n });\n await this.createWebhookBundle({ outfile: webhookBundlePath });\n }\n\n private async buildClientLibrary(): Promise<void> {\n if (!this.config?.clientBundlePath) {\n return;\n }\n\n // Workflow CLI normally emits a client bundle for UI tooling. OpenTool\n // currently doesn't surface it, but we keep the hook to remain compatible\n // with future versions.\n const clientBundlePath = path.resolve(\n this.config.workingDir,\n this.config.clientBundlePath\n );\n await fs.promises.mkdir(path.dirname(clientBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: clientBundlePath,\n bundleFinalOutput: true,\n });\n }\n }\n\n const relativeSourceDir = path.relative(options.projectRoot, workflowsDir) || \".\";\n const outputBase = path.join(\n options.outputDir,\n \".well-known\",\n \"workflow\",\n \"v1\"\n );\n\n const stepsBundlePath = path.join(outputBase, \"step.js\");\n const workflowsBundlePath = path.join(outputBase, \"flow.js\");\n const webhookBundlePath = path.join(outputBase, \"webhook.js\");\n const clientBundlePath: string | undefined = undefined;\n const manifestPath = path.join(outputBase, \"manifest.json\");\n\n const builder = new OpenToolWorkflowBuilder({\n workingDir: options.projectRoot,\n dirs: [relativeSourceDir],\n buildTarget: \"standalone\",\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n workflowManifestPath: manifestPath,\n externalPackages: [\n \"workflow\",\n \"workflow/internal/builtins\",\n \"workflow/internal/private\",\n \"workflow/runtime\",\n \"workflow/api\",\n ],\n });\n\n console.log(\n `[${timestamp()}] Building workflows from ${workflowsDir} -> ${outputBase}`\n );\n\n await builder.build();\n\n return {\n sourceDir: workflowsDir,\n outputDir: outputBase,\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n manifestPath,\n };\n}\n\nfunction hasWorkflowSourceFiles(directory: string): boolean {\n const entries = fs.readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (hasWorkflowSourceFiles(path.join(directory, entry.name))) {\n return true;\n }\n continue;\n }\n\n if (entry.isFile()) {\n const extension = path.extname(entry.name).toLowerCase();\n if (WORKFLOW_SOURCE_EXTENSIONS.has(extension)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nconst WORKFLOW_SOURCE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n]);\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n\nfunction escapeForJs(value: string): string {\n return value.replace(/'/g, \"\\\\'\");\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport { PaymentRequiredError } from \"../payment/index\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n} from \"../types/index\";\nimport { loadAndValidateTools } from \"./validate\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst packageJson = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, \"../../package.json\"), \"utf-8\")\n);\n\nconst cyan = \"\\x1b[36m\";\nconst bold = \"\\x1b[1m\";\nconst dim = \"\\x1b[2m\";\nconst reset = \"\\x1b[0m\";\n\nexport interface DevOptions {\n input: string;\n port?: number;\n watch?: boolean;\n stdio?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n const port = options.port ?? 7000;\n const watch = options.watch ?? true;\n const enableStdio = options.stdio ?? false;\n const log = enableStdio\n ? (_message: string) => {}\n : (message: string) => console.log(message);\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\n const projectRoot = path.dirname(toolsDir);\n let toolDefinitions = await loadToolDefinitions(toolsDir, projectRoot);\n if (toolDefinitions.length === 0) {\n throw new Error(\"No tools found in the target directory\");\n }\n let routes = expandRoutes(toolDefinitions);\n\n const stdioController = enableStdio\n ? await startMcpServer(() => toolDefinitions)\n : null;\n\n if (watch) {\n const reloadableExtensions = /\\.(ts|js|mjs|cjs|tsx|jsx)$/i;\n const tempDir = path.join(toolsDir, \".opentool-temp\");\n const watchTargets = new Set<string>([toolsDir]);\n if (projectRoot !== toolsDir) {\n watchTargets.add(projectRoot);\n }\n\n let reloading = false;\n const scheduleReload = async (changedPath?: string) => {\n if (reloading) {\n return;\n }\n reloading = true;\n log(\n `${dim}\\nDetected change in ${\n changedPath ?? \"tools directory\"\n }, reloading...${reset}`\n );\n try {\n toolDefinitions = await loadToolDefinitions(toolsDir, projectRoot);\n routes = expandRoutes(toolDefinitions);\n logReload(toolDefinitions, enableStdio, log);\n } catch (error) {\n console.error(\"Failed to reload tools:\", error);\n } finally {\n reloading = false;\n }\n };\n\n for (const target of watchTargets) {\n fs.watch(target, async (_eventType, rawFilename) => {\n const filename = rawFilename?.toString();\n if (filename && !reloadableExtensions.test(filename)) {\n return;\n }\n\n const fullPath = filename ? path.join(target, filename) : undefined;\n if (fullPath && fullPath.startsWith(tempDir)) {\n return;\n }\n\n // Normalize display path relative to the project root for clarity.\n const displayPath = fullPath\n ? path.relative(projectRoot, fullPath) || path.basename(fullPath)\n : path.relative(projectRoot, target) || path.basename(target);\n\n await scheduleReload(displayPath);\n });\n }\n }\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const url = new URL(req.url || \"/\", `http://localhost:${port}`);\n const routePath = url.pathname;\n log(`${dim}[request] ${method} ${routePath}${reset}`);\n try {\n await handleRequest({ req, res, port, routes });\n log(\n `${dim}[response] ${method} ${routePath} ${res.statusCode}${reset}`\n );\n } catch (error) {\n console.error(\"Error handling request:\", error);\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: (error as Error).message }));\n log(`${dim}[response] ${method} ${routePath} 500${reset}`);\n }\n });\n\n server.listen(port, () => {\n log(`${bold}${dim}> dev opentool${reset}`);\n log(\n ` * ${bold}opentool${reset} ${cyan}v${packageJson.version}${reset}`\n );\n log(` * ${bold}HTTP:${reset} http://localhost:${port}`);\n logStartup(toolDefinitions, enableStdio, log);\n });\n\n process.on(\"SIGINT\", async () => {\n log(`\\n${dim}Shutting down dev server...${reset}`);\n server.close();\n if (stdioController) {\n await stdioController.close();\n }\n process.exit(0);\n });\n } catch (error) {\n console.error(\"Dev server failed:\", error);\n process.exit(1);\n }\n}\n\nasync function startMcpServer(\n getTools: () => InternalToolDefinition[]\n): Promise<{ close(): Promise<void> }> {\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 const tools = getTools().filter(isMcpEnabled);\n return {\n tools: tools.map((tool) => ({\n name: tool.metadata?.name ?? tool.filename,\n description: tool.metadata?.description ?? `${tool.filename} tool`,\n inputSchema: tool.inputSchema,\n annotations: tool.metadata?.annotations,\n payment: tool.metadata?.payment,\n discovery: tool.metadata?.discovery,\n })),\n };\n });\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const tools = getTools().filter(isMcpEnabled);\n const tool = tools.find((entry) => {\n const toolName = entry.metadata?.name ?? entry.filename;\n return toolName === request.params.name;\n });\n\n if (!tool) {\n throw new Error(`Tool ${request.params.name} not found`);\n }\n\n try {\n const validatedParams = (tool.schema as any).parse(\n request.params.arguments\n );\n const handler =\n tool.handler ??\n createMcpAdapter({\n name: tool.metadata?.name ?? tool.filename,\n httpHandlers: toHttpHandlerMap(tool.httpHandlers),\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod\n ? { defaultMethod: tool.mcpConfig.defaultMethod }\n : {}),\n });\n\n const result = await handler(validatedParams);\n return result 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 server.connect(transport).catch((error) => {\n console.error(\"MCP transport error:\", error);\n });\n\n return {\n async close() {\n await server.close();\n if (typeof transport.close === \"function\") {\n transport.close();\n }\n },\n };\n}\n\nasync function loadToolDefinitions(\n toolsDir: string,\n projectRoot: string\n): Promise<InternalToolDefinition[]> {\n return loadAndValidateTools(toolsDir, { projectRoot });\n}\n\nfunction expandRoutes(tools: InternalToolDefinition[]): DevRoute[] {\n const routes: DevRoute[] = [];\n\n tools.forEach((tool) => {\n tool.httpHandlers.forEach((handlerDef: HttpHandlerDefinition) => {\n routes.push({\n tool,\n method: handlerDef.method.toUpperCase(),\n handler: async (request: Request) => handlerDef.handler(request),\n });\n });\n });\n\n return routes;\n}\n\nfunction logStartup(\n tools: InternalToolDefinition[],\n stdio: boolean,\n log: (message: string) => void\n): void {\n log(`\\nTools: ${tools.length} tool${tools.length === 1 ? \"\" : \"s\"}`);\n printToolList(tools, log);\n if (stdio) {\n const mcpTools = tools.filter(isMcpEnabled);\n const label =\n mcpTools.length > 0\n ? `MCP stdio enabled (${mcpTools.length} tool${\n mcpTools.length === 1 ? \"\" : \"s\"\n })`\n : \"MCP stdio enabled (no tools opted in)\";\n log(`${dim}${label}${reset}`);\n }\n}\n\nfunction logReload(\n tools: InternalToolDefinition[],\n stdio: boolean,\n log: (message: string) => void\n): void {\n log(`\\nReloaded ${tools.length} tool${tools.length === 1 ? \"\" : \"s\"}`);\n printToolList(tools, log);\n if (stdio) {\n const mcpTools = tools.filter(isMcpEnabled);\n const label =\n mcpTools.length > 0\n ? `MCP stdio enabled (${mcpTools.length} tool${\n mcpTools.length === 1 ? \"\" : \"s\"\n })`\n : \"MCP stdio enabled (no tools opted in)\";\n log(`${dim}${label}${reset}`);\n }\n}\n\nfunction printToolList(\n tools: InternalToolDefinition[],\n log: (message: string) => void\n): void {\n tools.forEach((tool) => {\n const name = tool.metadata?.name ?? tool.filename;\n const methods = tool.httpHandlers\n .map((handler) => handler.method)\n .join(\", \");\n const tags: string[] = [];\n if (tool.mcpConfig?.enabled) {\n tags.push(`${dim}[mcp]${reset}`);\n }\n if (tool.payment || (tool.metadata && (tool.metadata as any).payment)) {\n tags.push(`${dim}[payments]${reset}`);\n }\n const tagSuffix = tags.length ? ` ${tags.join(\" \")}` : \"\";\n log(` ⢠${name} ā ${methods}${tagSuffix}`);\n });\n}\n\nasync function handleRequest(params: {\n req: http.IncomingMessage;\n res: http.ServerResponse;\n port: number;\n routes: DevRoute[];\n}): Promise<void> {\n const { req, res, port, routes } = params;\n\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\n \"Access-Control-Allow-Methods\",\n HTTP_METHODS.join(\", \") + \", OPTIONS\"\n );\n res.setHeader(\"Access-Control-Allow-Headers\", \"Content-Type, Authorization\");\n\n if (req.method === \"OPTIONS\") {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const method = (req.method || \"GET\").toUpperCase();\n const url = new URL(req.url || \"/\", `http://localhost:${port}`);\n const toolName = url.pathname.slice(1) || \"index\";\n\n const route = findRoute(toolName, method, routes);\n if (!route) {\n res.writeHead(404, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n error: `Tool not found: ${method} /${toolName}`,\n availableTools: routes.map((r) => `${r.method} /${routeName(r.tool)}`),\n })\n );\n return;\n }\n\n const body = await readRequestBody(req);\n const request = createWebRequest({ req, url, body });\n let response: Response;\n try {\n response = await route.handler(request);\n } catch (error) {\n if (error instanceof PaymentRequiredError) {\n response = error.response;\n } else {\n throw error;\n }\n }\n\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n res.writeHead(response.status, headers);\n\n if (method === \"HEAD\") {\n res.end();\n return;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n res.end(Buffer.from(arrayBuffer));\n}\n\nfunction findRoute(\n toolName: string,\n method: string,\n routes: DevRoute[]\n): DevRoute | undefined {\n const direct = routes.find(\n (route) => routeName(route.tool) === toolName && route.method === method\n );\n\n if (direct) {\n return direct;\n }\n\n if (method === \"HEAD\") {\n return routes.find(\n (route) => routeName(route.tool) === toolName && route.method === \"GET\"\n );\n }\n\n return undefined;\n}\n\nfunction routeName(tool: InternalToolDefinition): string {\n return tool.metadata?.name ?? tool.filename;\n}\n\nasync function readRequestBody(req: http.IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction createWebRequest(params: {\n req: http.IncomingMessage;\n url: URL;\n body: Buffer;\n}): Request {\n const { req, url, body } = params;\n\n const headers = new Headers();\n Object.entries(req.headers).forEach(([key, value]) => {\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((entry) => headers.append(key, entry));\n return;\n }\n headers.set(key, value);\n });\n\n const method = (req.method || \"GET\").toUpperCase();\n const init: RequestInit = {\n method,\n headers,\n };\n\n if (body.length > 0 && method !== \"GET\" && method !== \"HEAD\") {\n init.body = body.toString();\n }\n\n return new Request(url, init);\n}\n\ninterface DevRoute {\n tool: InternalToolDefinition;\n method: string;\n handler: (request: Request) => Promise<Response>;\n}\n\nfunction toHttpHandlerMap(\n handlers: HttpHandlerDefinition[]\n): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>(\n (acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n },\n {}\n );\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\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","#!/usr/bin/env node\n\nimport { program } from \"commander\";\nimport { buildCommand } from \"./build\";\nimport { devCommand } from \"./dev\";\nimport { generateMetadataCommand } from \"./generate-metadata\";\nimport { validateCommand, validateFullCommand } from \"./validate\";\n\nprogram\n .name(\"opentool\")\n .description(\"OpenTool CLI for building and developing serverless MCP tools\")\n .version(\"1.0.0\");\n\n// Dev command\nprogram\n .command(\"dev\")\n .description(\"Start HTTP dev server (optional MCP stdio)\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\"-p, --port <port>\", \"Port to listen on\", \"7000\")\n .option(\"--stdio\", \"Expose MCP stdio transport\", false)\n .option(\"--no-watch\", \"Disable file watching\")\n .action((cmdOptions) => {\n devCommand({\n input: cmdOptions.input,\n port: Number(cmdOptions.port ?? 7000),\n watch: cmdOptions.watch,\n stdio: cmdOptions.stdio,\n });\n });\n\n// Build command\nprogram\n .command(\"build\")\n .description(\"Build tools for deployment\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\"-o, --output <dir>\", \"Output directory for built tools\", \"dist\")\n .option(\"--name <name>\", \"Server name\", \"opentool-server\")\n .option(\"--version <version>\", \"Server version\", \"1.0.0\")\n .action(buildCommand);\n\n// Validate command (metadata only)\nprogram\n .command(\"validate\")\n .description(\"Validate metadata for registry submission\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .action(validateCommand);\n\n// Full validation command (tools + metadata)\nprogram\n .command(\"validate-full\")\n .description(\"Full validation of tools and metadata\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .action(validateFullCommand);\n\n// Generate metadata command\nprogram\n .command(\"metadata\")\n .description(\"Generate OpenTool metadata JSON without building\")\n .option(\"-i, --input <dir>\", \"Input directory containing tools\", \"tools\")\n .option(\n \"-o, --output <file>\",\n \"Output file path for metadata.json\",\n \"metadata.json\"\n )\n .option(\"--name <name>\", \"Server name\", \"opentool-server\")\n .option(\"--version <version>\", \"Server version\", \"1.0.0\")\n .action(generateMetadataCommand);\n\n// Parse arguments\nprogram.parse();\n\nexport * from \"./build\";\nexport * from \"./dev\";\nexport * from \"./generate-metadata\";\nexport * from \"./validate\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opentool",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "OpenTool framework for building serverless MCP tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -50,7 +50,6 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@workflow/cli": "^4.0.1-beta.4",
|
|
54
53
|
"workflow": "^4.0.1-beta.4",
|
|
55
54
|
"@aws/run-mcp-servers-with-aws-lambda": "^0.2.2",
|
|
56
55
|
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
@@ -75,7 +74,13 @@
|
|
|
75
74
|
"typescript": "^5.0.0"
|
|
76
75
|
},
|
|
77
76
|
"peerDependencies": {
|
|
78
|
-
"typescript": "^5.0.0"
|
|
77
|
+
"typescript": "^5.0.0",
|
|
78
|
+
"@workflow/cli": "^4.0.1-beta.4"
|
|
79
|
+
},
|
|
80
|
+
"peerDependenciesMeta": {
|
|
81
|
+
"@workflow/cli": {
|
|
82
|
+
"optional": true
|
|
83
|
+
}
|
|
79
84
|
},
|
|
80
85
|
"engines": {
|
|
81
86
|
"node": ">=20.0.0"
|