opentool 0.6.4 → 0.6.5

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 CHANGED
@@ -113,6 +113,37 @@ npx mcp-inspector --config inspector.json --server opentool-dev
113
113
 
114
114
  Copy `.env.example` to `.env` and add your credentials if you're using wallet/payment features. The inspector starts `opentool dev` automatically, so you only need one terminal. Only tools with `mcp = { enabled: true }` show up in the inspector - HTTP-only tools keep running on localhost.
115
115
 
116
+ ### Quick x402 test with curl
117
+
118
+ 1. Start the dev server against the example tools:
119
+
120
+ ```bash
121
+ npx opentool dev --input examples/full-metadata/tools
122
+ ```
123
+
124
+ 2. Trigger the paywall and inspect the returned payment requirements:
125
+
126
+ ```bash
127
+ curl -i \
128
+ -X POST http://localhost:7000/premium-report \
129
+ -H "content-type: application/json" \
130
+ -d '{"symbol":"BTC"}'
131
+ ```
132
+
133
+ The response includes a `402 Payment Required` status and JSON body with an `x402.accepts[0]` object describing the payment request.
134
+
135
+ 3. Submit a follow-up request with an `X-PAYMENT` header produced by your x402 facilitator (for example, by using the Coinbase [x402](https://github.com/coinbase/x402) tooling or your own signing flow):
136
+
137
+ ```bash
138
+ curl -i \
139
+ -X POST http://localhost:7000/premium-report \
140
+ -H "content-type: application/json" \
141
+ -H "X-PAYMENT: ${X402_HEADER}" \
142
+ -d '{"symbol":"BTC"}'
143
+ ```
144
+
145
+ Replace `${X402_HEADER}` with the base64-encoded payment payload returned by your facilitator’s `/verify` or `/pay` workflow. If the payment is valid the server responds with `200 OK`; otherwise it returns a new `402` with failure details.
146
+
116
147
  ### 5. Build for deployment
117
148
 
118
149
  ```bash
@@ -15,6 +15,7 @@ interface BuildArtifacts {
15
15
  defaultsApplied: string[];
16
16
  tools: InternalToolDefinition[];
17
17
  compiledTools: CompiledToolArtifact[];
18
+ workflowBundles: WorkflowBundleArtifact | null;
18
19
  }
19
20
  interface CompiledToolArtifact {
20
21
  name: string;
@@ -25,6 +26,15 @@ interface CompiledToolArtifact {
25
26
  defaultMcpMethod?: string;
26
27
  hasWallet: boolean;
27
28
  }
29
+ interface WorkflowBundleArtifact {
30
+ sourceDir: string;
31
+ outputDir: string;
32
+ stepsBundlePath: string;
33
+ workflowsBundlePath: string;
34
+ webhookBundlePath: string;
35
+ clientBundlePath?: string;
36
+ manifestPath?: string;
37
+ }
28
38
  declare function buildCommand(options: BuildOptions): Promise<void>;
29
39
  declare function buildProject(options: BuildOptions): Promise<BuildArtifacts>;
30
40
 
package/dist/cli/index.js CHANGED
@@ -1667,6 +1667,10 @@ async function buildProject(options) {
1667
1667
  projectRoot,
1668
1668
  outputDir
1669
1669
  });
1670
+ const workflowBundles = await buildWorkflowsIfPresent({
1671
+ projectRoot,
1672
+ outputDir
1673
+ });
1670
1674
  const shouldBuildMcpServer = compiledTools.some((artifact) => artifact.mcpEnabled);
1671
1675
  if (shouldBuildMcpServer) {
1672
1676
  await writeMcpServer({
@@ -1684,7 +1688,8 @@ async function buildProject(options) {
1684
1688
  metadata,
1685
1689
  defaultsApplied,
1686
1690
  tools,
1687
- compiledTools
1691
+ compiledTools,
1692
+ workflowBundles
1688
1693
  };
1689
1694
  }
1690
1695
  async function emitTools(tools, config) {
@@ -1843,6 +1848,18 @@ function logBuildSummary(artifacts, options) {
1843
1848
  console.log(` - ${tool.name} [${methods}]${walletBadge}`);
1844
1849
  });
1845
1850
  console.log(" \u2022 metadata.json (registry artifact)");
1851
+ if (artifacts.workflowBundles) {
1852
+ console.log(" \u2022 .well-known/workflow/v1/ (workflow bundles)");
1853
+ console.log(" - flow.js");
1854
+ console.log(" - step.js");
1855
+ console.log(" - webhook.js");
1856
+ if (artifacts.workflowBundles.clientBundlePath) {
1857
+ console.log(" - client.js");
1858
+ }
1859
+ if (artifacts.workflowBundles.manifestPath) {
1860
+ console.log(" - manifest.json");
1861
+ }
1862
+ }
1846
1863
  if (artifacts.defaultsApplied.length > 0) {
1847
1864
  console.log("\nDefaults applied during metadata synthesis:");
1848
1865
  artifacts.defaultsApplied.forEach((entry) => console.log(` \u2022 ${entry}`));
@@ -1851,6 +1868,155 @@ function logBuildSummary(artifacts, options) {
1851
1868
  console.log("\n\u2139\uFE0F MCP adapter skipped (no tools opted in)");
1852
1869
  }
1853
1870
  }
1871
+ async function buildWorkflowsIfPresent(options) {
1872
+ const workflowsDir = options.workflowsDir ?? path5.join(options.projectRoot, "workflows");
1873
+ if (!fs4.existsSync(workflowsDir)) {
1874
+ return null;
1875
+ }
1876
+ if (!hasWorkflowSourceFiles(workflowsDir)) {
1877
+ return null;
1878
+ }
1879
+ const nodeVersion = process.versions?.node ?? "0.0.0";
1880
+ const nodeMajor = Number(nodeVersion.split(".")[0] ?? 0);
1881
+ if (!Number.isFinite(nodeMajor) || nodeMajor < 22) {
1882
+ console.warn(
1883
+ `[${timestamp()}] Workflow bundles skipped (requires Node >= 22, current ${nodeVersion})`
1884
+ );
1885
+ return null;
1886
+ }
1887
+ const { BaseBuilder } = await import('@workflow/cli/dist/lib/builders/base-builder.js');
1888
+ class OpenToolWorkflowBuilder extends BaseBuilder {
1889
+ async build() {
1890
+ const inputFiles = await this.getInputFiles();
1891
+ const tsConfig = await this.getTsConfigOptions();
1892
+ const shared = {
1893
+ inputFiles,
1894
+ ...tsConfig.baseUrl ? { tsBaseUrl: tsConfig.baseUrl } : {},
1895
+ ...tsConfig.paths ? { tsPaths: tsConfig.paths } : {}
1896
+ };
1897
+ await this.buildStepsBundle(shared);
1898
+ await this.buildWorkflowsBundle(shared);
1899
+ await this.buildWebhookRoute();
1900
+ await this.buildClientLibrary();
1901
+ }
1902
+ async buildStepsBundle(options2) {
1903
+ console.log(
1904
+ "Creating OpenTool workflow steps bundle at",
1905
+ this.config.stepsBundlePath
1906
+ );
1907
+ const stepsBundlePath2 = path5.resolve(
1908
+ this.config.workingDir,
1909
+ this.config.stepsBundlePath
1910
+ );
1911
+ await fs4.promises.mkdir(path5.dirname(stepsBundlePath2), { recursive: true });
1912
+ await this.createStepsBundle({
1913
+ outfile: stepsBundlePath2,
1914
+ ...options2
1915
+ });
1916
+ }
1917
+ async buildWorkflowsBundle(options2) {
1918
+ console.log(
1919
+ "Creating OpenTool workflow bundle at",
1920
+ this.config.workflowsBundlePath
1921
+ );
1922
+ const workflowBundlePath = path5.resolve(
1923
+ this.config.workingDir,
1924
+ this.config.workflowsBundlePath
1925
+ );
1926
+ await fs4.promises.mkdir(path5.dirname(workflowBundlePath), {
1927
+ recursive: true
1928
+ });
1929
+ await this.createWorkflowsBundle({
1930
+ outfile: workflowBundlePath,
1931
+ bundleFinalOutput: false,
1932
+ ...options2
1933
+ });
1934
+ }
1935
+ async buildWebhookRoute() {
1936
+ console.log(
1937
+ "Creating OpenTool workflow webhook bundle at",
1938
+ this.config.webhookBundlePath
1939
+ );
1940
+ const webhookBundlePath2 = path5.resolve(
1941
+ this.config.workingDir,
1942
+ this.config.webhookBundlePath
1943
+ );
1944
+ await fs4.promises.mkdir(path5.dirname(webhookBundlePath2), {
1945
+ recursive: true
1946
+ });
1947
+ await this.createWebhookBundle({ outfile: webhookBundlePath2 });
1948
+ }
1949
+ }
1950
+ const relativeSourceDir = path5.relative(options.projectRoot, workflowsDir) || ".";
1951
+ const outputBase = path5.join(
1952
+ options.outputDir,
1953
+ ".well-known",
1954
+ "workflow",
1955
+ "v1"
1956
+ );
1957
+ const stepsBundlePath = path5.join(outputBase, "step.js");
1958
+ const workflowsBundlePath = path5.join(outputBase, "flow.js");
1959
+ const webhookBundlePath = path5.join(outputBase, "webhook.js");
1960
+ const manifestPath = path5.join(outputBase, "manifest.json");
1961
+ const builder = new OpenToolWorkflowBuilder({
1962
+ workingDir: options.projectRoot,
1963
+ dirs: [relativeSourceDir],
1964
+ buildTarget: "standalone",
1965
+ stepsBundlePath,
1966
+ workflowsBundlePath,
1967
+ webhookBundlePath,
1968
+ ...{},
1969
+ workflowManifestPath: manifestPath,
1970
+ externalPackages: [
1971
+ "workflow",
1972
+ "workflow/internal/builtins",
1973
+ "workflow/internal/private",
1974
+ "workflow/runtime",
1975
+ "workflow/api"
1976
+ ]
1977
+ });
1978
+ console.log(
1979
+ `[${timestamp()}] Building workflows from ${workflowsDir} -> ${outputBase}`
1980
+ );
1981
+ await builder.build();
1982
+ return {
1983
+ sourceDir: workflowsDir,
1984
+ outputDir: outputBase,
1985
+ stepsBundlePath,
1986
+ workflowsBundlePath,
1987
+ webhookBundlePath,
1988
+ ...{},
1989
+ manifestPath
1990
+ };
1991
+ }
1992
+ function hasWorkflowSourceFiles(directory) {
1993
+ const entries = fs4.readdirSync(directory, { withFileTypes: true });
1994
+ for (const entry of entries) {
1995
+ if (entry.isDirectory()) {
1996
+ if (hasWorkflowSourceFiles(path5.join(directory, entry.name))) {
1997
+ return true;
1998
+ }
1999
+ continue;
2000
+ }
2001
+ if (entry.isFile()) {
2002
+ const extension = path5.extname(entry.name).toLowerCase();
2003
+ if (WORKFLOW_SOURCE_EXTENSIONS.has(extension)) {
2004
+ return true;
2005
+ }
2006
+ }
2007
+ }
2008
+ return false;
2009
+ }
2010
+ var WORKFLOW_SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
2011
+ ".ts",
2012
+ ".tsx",
2013
+ ".js",
2014
+ ".jsx",
2015
+ ".mjs",
2016
+ ".cjs",
2017
+ ".mts",
2018
+ ".cts"
2019
+ ]);
1854
2020
  function timestamp() {
1855
2021
  return (/* @__PURE__ */ new Date()).toISOString().replace("T", " ").slice(0, 19);
1856
2022
  }
@@ -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","__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 chainIds: z.array(z.number().int()).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.any()).optional(),\n pricing: z.record(z.any()).optional(),\n compatibility: z.record(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.any()).optional(),\n pricing: z.record(z.any()).optional(),\n compatibility: z.record(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 \"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 chainIds: Array.isArray(pricing.chainIds)\n ? (pricing.chainIds as 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 chainIds?: 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.chainIds) {\n baseMetadata.chainIds = config.chainIds;\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 \"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}\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\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 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 };\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.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\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","__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 chainIds: z.array(z.number().int()).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.any()).optional(),\n pricing: z.record(z.any()).optional(),\n compatibility: z.record(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.any()).optional(),\n pricing: z.record(z.any()).optional(),\n compatibility: z.record(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 \"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 chainIds: Array.isArray(pricing.chainIds)\n ? (pricing.chainIds as 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 chainIds?: 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.chainIds) {\n baseMetadata.chainIds = config.chainIds;\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 \"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opentool",
3
- "version": "0.6.4",
3
+ "version": "0.6.5",
4
4
  "description": "OpenTool framework for building serverless MCP tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -50,12 +50,14 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
+ "@workflow/cli": "^4.0.1-beta.4",
54
+ "workflow": "^4.0.1-beta.4",
53
55
  "@aws/run-mcp-servers-with-aws-lambda": "^0.2.2",
54
56
  "@modelcontextprotocol/sdk": "^1.15.1",
55
57
  "@turnkey/sdk-server": "4.10.2",
56
58
  "@turnkey/viem": "0.14.5",
57
59
  "commander": "^11.0.0",
58
- "esbuild": "^0.21.5",
60
+ "esbuild": "^0.25.0",
59
61
  "tsx": "^4.0.0",
60
62
  "viem": "^2.31.7",
61
63
  "zod": "^3.24.1",