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 +31 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.js +167 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +4 -2
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
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/esbuild.ts","../../src/types/metadata.ts","../../src/utils/module-loader.ts","../../src/cli/shared/metadata.ts","../../src/types/payment.ts","../../src/helpers/payment.ts","../../src/payment/index.ts","../../src/adapters/mcp.ts","../../src/types/index.ts","../../src/cli/validate.ts","../../src/cli/build.ts","../../src/cli/dev.ts","../../src/cli/generate-metadata.ts","../../src/cli/index.ts"],"names":["path","fs","path2","path3","fs2","z","context","path4","fs3","__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.
|
|
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.
|
|
60
|
+
"esbuild": "^0.25.0",
|
|
59
61
|
"tsx": "^4.0.0",
|
|
60
62
|
"viem": "^2.31.7",
|
|
61
63
|
"zod": "^3.24.1",
|