opentool 0.8.18 ā 0.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/hyperliquid/index.d.ts +29 -1
- package/dist/adapters/hyperliquid/index.js +205 -1
- package/dist/adapters/hyperliquid/index.js.map +1 -1
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +211 -1
- package/dist/index.js.map +1 -1
- package/dist/{validate-DsvADI66.d.ts ā validate-C4a9tmrQ.d.ts} +1 -0
- package/package.json +1 -1
- package/templates/base/package.json +1 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../src/utils/esbuild.ts","../../src/types/metadata.ts","../../src/utils/module-loader.ts","../../src/cli/shared/metadata.ts","../../src/x402/types.ts","../../src/x402/helpers.ts","../../src/x402/index.ts","../../src/adapters/mcp.ts","../../src/types/index.ts","../../src/utils/schedule.ts","../../src/cli/validate.ts","../../src/cli/build.ts","../../src/cli/dev.ts","../../src/cli/generate-metadata.ts","../../src/cli/init.ts","../../src/cli/index.ts"],"names":["path2","fs","path3","path4","fs2","z","path5","fs3","schema","options","stepsBundlePath","webhookBundlePath","clientBundlePath","__dirname","path7","fileURLToPath","fs5","watch","toHttpHandlerMap","timestamp","path8","fs6","path"],"mappings":"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","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tmpdir } from \"os\";\nimport { build, type BuildOptions } from \"esbuild\";\n\ninterface TranspileOptions {\n entryPoints: string[];\n projectRoot: string;\n outDir?: string;\n outBase?: string;\n format: \"cjs\" | \"esm\";\n bundle?: boolean;\n external?: string[];\n metafile?: boolean;\n logLevel?: \"silent\" | \"error\" | \"warning\" | \"info\" | \"debug\";\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: options.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: options.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 (options.outBase) {\n buildOptions.outbase = options.outBase;\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\n// X402Payment structure (from defineX402Payment)\nconst X402PaymentSchema = z\n .object({\n definition: z.object({\n amount: z.string(),\n currency: z.object({\n code: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n }),\n asset: z.object({\n symbol: z.string(),\n network: z.string(),\n address: z.string(),\n decimals: z.number(),\n }),\n payTo: z.string(),\n resource: z.string().optional(),\n description: z.string().optional(),\n scheme: z.string(),\n network: z.string(),\n facilitator: z.object({\n url: z.string(),\n verifyPath: z.string().optional(),\n settlePath: z.string().optional(),\n apiKeyHeader: z.string().optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\n// Accept x402 or any custom payment config\nexport const PaymentConfigSchema = z.union([\n X402PaymentSchema,\n z.record(z.string(), z.unknown()),\n]);\n\nexport type PaymentConfig = z.infer<typeof PaymentConfigSchema>;\n\nexport const DiscoveryMetadataSchema = z\n .object({\n keywords: z.array(z.string()).optional(),\n category: z.string().optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n documentation: z.union([z.string(), z.array(z.string())]).optional(),\n })\n .catchall(z.any());\n\nexport type DiscoveryMetadata = z.infer<typeof DiscoveryMetadataSchema>;\n\nexport const ToolCategorySchema = z.enum([\"strategy\", \"tracker\", \"orchestrator\"]);\nexport type ToolCategory = z.infer<typeof ToolCategorySchema>;\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 notifyEmail: z.boolean().optional(),\n category: ToolCategorySchema.optional(),\n })\n .strict();\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const MetadataSchema = z\n .object({\n metadataSpecVersion: z.string().optional(),\n name: z.string().optional(),\n displayName: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string().optional(),\n categories: z.array(z.string()).optional(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type Metadata = z.infer<typeof MetadataSchema>;\n\nexport const BuildMetadataSchema = z\n .object({\n metadataSpecVersion: z.string().default(METADATA_SPEC_VERSION),\n name: z.string(),\n displayName: z.string(),\n version: z.string(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n tools: z.array(ToolSchema).min(1),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type BuildMetadata = z.infer<typeof BuildMetadataSchema>;\n","import * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nconst requireModule = createRequire(\n typeof __filename !== \"undefined\" ? __filename : import.meta.url\n);\n\nexport function resolveCompiledPath(\n outDir: string,\n originalFile: string,\n extension = \".js\"\n): string {\n const baseName = path.basename(originalFile).replace(/\\.[^.]+$/, \"\");\n return path.join(outDir, `${baseName}${extension}`);\n}\n\nexport function requireFresh(modulePath: string): any {\n const resolved = requireModule.resolve(modulePath);\n delete requireModule.cache[resolved];\n return requireModule(resolved);\n}\n\nexport async function importFresh(modulePath: string): Promise<any> {\n const fileUrl = pathToFileURL(modulePath).href;\n const cacheBuster = `t=${Date.now()}-${Math.random()}`;\n const separator = fileUrl.includes(\"?\") ? \"&\" : \"?\";\n return import(`${fileUrl}${separator}${cacheBuster}`);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport {\n Metadata,\n MetadataSchema,\n DiscoveryMetadata,\n BuildMetadata,\n BuildMetadataSchema,\n METADATA_SPEC_VERSION,\n PaymentConfig,\n Tool,\n ToolMetadataOverrides,\n ToolMetadataOverridesSchema,\n} from \"../../types/metadata\";\nimport { InternalToolDefinition } from \"../../types/index\";\nimport { transpileWithEsbuild } from \"../../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../../utils/module-loader\";\n\ninterface LoadMetadataResult {\n metadata: Metadata;\n sourcePath: string;\n}\n\nconst METADATA_ENTRY = \"metadata.ts\";\n\nexport async function loadMetadata(projectRoot: string): Promise<LoadMetadataResult> {\n const absPath = path.join(projectRoot, METADATA_ENTRY);\n if (!fs.existsSync(absPath)) {\n return {\n metadata: MetadataSchema.parse({}),\n sourcePath: \"smart defaults (metadata.ts missing)\",\n };\n }\n\n const tempDir = path.join(projectRoot, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints: [absPath],\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n });\n\n try {\n const compiledPath = resolveCompiledPath(outDir, METADATA_ENTRY);\n const moduleExports = await importFresh(compiledPath);\n const metadataExport = extractMetadataExport(moduleExports);\n const parsed = MetadataSchema.parse(metadataExport);\n return { metadata: parsed, sourcePath: absPath };\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n}\n\nfunction extractMetadataExport(moduleExports: unknown): unknown {\n if (!moduleExports || typeof moduleExports !== \"object\") {\n throw new Error(\"metadata.ts must export a metadata object\");\n }\n\n const exportsObject = moduleExports as Record<string, unknown>;\n if (exportsObject.metadata) {\n return exportsObject.metadata;\n }\n\n if (exportsObject.default && typeof exportsObject.default === \"object\") {\n const defaultExport = exportsObject.default as Record<string, unknown>;\n if (defaultExport.metadata) {\n return defaultExport.metadata;\n }\n return defaultExport;\n }\n\n return moduleExports;\n}\n\ninterface PackageInfo {\n name?: string;\n version?: string;\n description?: string;\n author?: string;\n repository?: string | { url?: string };\n homepage?: string;\n type?: string;\n}\n\nfunction readPackageJson(projectRoot: string): PackageInfo {\n const packagePath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(packagePath)) {\n return {};\n }\n\n try {\n const content = fs.readFileSync(packagePath, \"utf8\");\n return JSON.parse(content) as PackageInfo;\n } catch (error) {\n throw new Error(`Failed to read package.json: ${error}`);\n }\n}\n\ninterface MetadataBuildOptions {\n projectRoot: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface MetadataBuildResult {\n metadata: BuildMetadata;\n defaultsApplied: string[];\n sourceMetadataPath: string;\n}\n\nexport async function buildMetadataArtifact(options: MetadataBuildOptions): Promise<MetadataBuildResult> {\n const projectRoot = options.projectRoot;\n const packageInfo = readPackageJson(projectRoot);\n const { metadata: authored, sourcePath } = await loadMetadata(projectRoot);\n const defaultsApplied: string[] = [];\n\n const folderName = path.basename(projectRoot);\n\n const name = resolveField(\n \"name\",\n authored.name,\n () => packageInfo.name ?? folderName,\n defaultsApplied,\n \"package.json name\"\n );\n\n const displayName = resolveField(\n \"displayName\",\n authored.displayName,\n () => {\n const source = packageInfo.name ?? folderName;\n return source\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \");\n },\n defaultsApplied,\n \"package.json name\"\n );\n\n const versionRaw = resolveField(\n \"version\",\n authored.version,\n () => packageInfo.version ?? \"0.1.0\",\n defaultsApplied,\n \"package.json version\"\n );\n const version = typeof versionRaw === \"number\" ? String(versionRaw) : versionRaw;\n\n const category = determineCategory(authored, defaultsApplied);\n\n const description = authored.description ?? packageInfo.description;\n if (!authored.description && packageInfo.description) {\n defaultsApplied.push(\"description ā package.json description\");\n }\n\n const author = authored.author ?? packageInfo.author;\n if (!authored.author && packageInfo.author) {\n defaultsApplied.push(\"author ā package.json author\");\n }\n\n const repository = authored.repository ?? extractRepository(packageInfo.repository);\n if (!authored.repository && repository) {\n defaultsApplied.push(\"repository ā package.json repository\");\n }\n\n const website = authored.website ?? packageInfo.homepage;\n if (!authored.website && packageInfo.homepage) {\n defaultsApplied.push(\"website ā package.json homepage\");\n }\n\n const payment = resolvePayment(authored, defaultsApplied);\n\n const baseImage = authored.image ?? authored.iconPath;\n const animation = authored.animation_url ?? authored.videoPath;\n\n const discovery = buildDiscovery(authored);\n\n const metadataTools: Tool[] = options.tools.map((tool) => {\n const overrides: ToolMetadataOverrides = tool.metadata\n ? ToolMetadataOverridesSchema.parse(tool.metadata)\n : {};\n const toolName = overrides.name ?? tool.filename;\n const toolDescription = overrides.description ?? `${toolName} tool`;\n const toolPayment = overrides.payment ?? payment ?? undefined;\n if (!overrides.payment && toolPayment && payment && toolPayment === payment) {\n defaultsApplied.push(`tool ${toolName} payment ā agent payment`);\n }\n\n const toolDiscovery = overrides.discovery ?? undefined;\n const toolChains = overrides.chains ?? authored.chains ?? undefined;\n const toolCategory = tool.profileCategory ?? \"tracker\";\n if (!tool.profileCategory) {\n defaultsApplied.push(`tool ${toolName} category ā tracker (default)`);\n }\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 toolDefinition.category = toolCategory;\n const notifyEmail = tool.notifyEmail ?? tool.schedule?.notifyEmail;\n if (notifyEmail !== undefined) {\n toolDefinition.notifyEmail = notifyEmail;\n }\n if (tool.profileCategory) {\n toolDefinition.category = tool.profileCategory;\n }\n\n return toolDefinition;\n });\n\n const metadata: BuildMetadata = BuildMetadataSchema.parse({\n metadataSpecVersion: authored.metadataSpecVersion ?? METADATA_SPEC_VERSION,\n name,\n displayName,\n version,\n description,\n author,\n repository,\n website,\n category,\n termsOfService: authored.termsOfService,\n mcpUrl: authored.mcpUrl,\n payment: payment ?? undefined,\n tools: metadataTools,\n discovery,\n promptExamples: authored.promptExamples,\n iconPath: authored.iconPath,\n videoPath: authored.videoPath,\n image: baseImage,\n animation_url: animation,\n chains: authored.chains,\n });\n\n return {\n metadata,\n defaultsApplied,\n sourceMetadataPath: sourcePath,\n };\n}\n\nfunction resolveField<T>(\n field: string,\n value: T | undefined,\n fallback: () => T,\n defaultsApplied: string[],\n fallbackLabel: string\n): T {\n if (value !== undefined && value !== null && value !== \"\") {\n return value;\n }\n const resolved = fallback();\n defaultsApplied.push(`${field} ā ${fallbackLabel}`);\n return resolved;\n}\n\nfunction determineCategory(authored: Metadata, defaultsApplied: string[]): string {\n if (authored.category) {\n return authored.category;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n defaultsApplied.push(\"category ā metadata.categories[0]\");\n return authored.categories[0];\n }\n defaultsApplied.push(\"category ā default category\");\n return \"utility\";\n}\n\nfunction extractRepository(repository: PackageInfo[\"repository\"]): string | undefined {\n if (!repository) {\n return undefined;\n }\n if (typeof repository === \"string\") {\n return repository;\n }\n return repository.url;\n}\n\nfunction resolvePayment(authored: Metadata, _defaults: string[]): PaymentConfig | undefined {\n return authored.payment ?? undefined;\n}\n\nfunction buildDiscovery(authored: Metadata): DiscoveryMetadata | undefined {\n const legacyDiscovery: DiscoveryMetadata = {};\n\n if (Array.isArray(authored.keywords) && authored.keywords.length > 0) {\n legacyDiscovery.keywords = authored.keywords;\n }\n if (Array.isArray(authored.useCases) && authored.useCases.length > 0) {\n legacyDiscovery.useCases = authored.useCases;\n }\n if (Array.isArray(authored.capabilities) && authored.capabilities.length > 0) {\n legacyDiscovery.capabilities = authored.capabilities;\n }\n if (authored.requirements) {\n legacyDiscovery.requirements = authored.requirements;\n }\n if (authored.compatibility) {\n legacyDiscovery.compatibility = authored.compatibility;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n legacyDiscovery.category = authored.categories[0];\n }\n\n const merged = {\n ...legacyDiscovery,\n ...(authored.discovery ?? {}),\n } as DiscoveryMetadata;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import { z } from \"zod\";\n\nexport const X402_VERSION = 1;\nexport const HEADER_X402 = \"X-PAYMENT\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nexport const x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().positive(),\n scheme: z.string().min(1),\n network: z.string().min(1),\n correlationId: z.string().optional(),\n payload: z.unknown(),\n});\n\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface X402PaymentAttempt {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n}\n\nexport interface X402VerificationResult {\n success: boolean;\n metadata?: {\n optionId: string;\n verifier: string;\n [key: string]: unknown;\n };\n failure?: {\n reason: string;\n code: string;\n };\n responseHeaders?: Record<string, string>;\n}\n\nexport interface X402FacilitatorConfig {\n url: string;\n verifyPath?: string;\n settlePath?: string;\n apiKeyHeader?: string;\n}\n\nexport interface CurrencySpec {\n decimals: number;\n symbol: string;\n network: string;\n assetAddress: string;\n}\n\nexport const SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n};\n\nexport const DEFAULT_FACILITATOR: X402FacilitatorConfig = {\n url: \"https://facilitator.x402.rs\",\n verifyPath: \"/verify\",\n settlePath: \"/settle\",\n apiKeyHeader: \"Authorization\",\n};\n","import { z } from \"zod\";\nimport {\n HEADER_X402,\n HEADER_PAYMENT_RESPONSE,\n X402_VERSION,\n x402PaymentHeaderSchema,\n x402RequirementSchema,\n type X402PaymentAttempt,\n type X402Requirement,\n type X402VerificationResult,\n type X402FacilitatorConfig,\n} from \"./types\";\n\nexport interface X402PaymentDefinition {\n amount: string;\n currency: { code: string; symbol: string; decimals: number };\n asset: { symbol: string; network: string; address: string; decimals: number };\n payTo: string;\n resource?: string;\n description?: string;\n scheme: string;\n network: string;\n facilitator: X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport function createX402PaymentRequired(\n definition: X402PaymentDefinition\n): Response {\n const requirement = toX402Requirement(definition);\n\n // Build full payment requirements response\n const body = {\n schemaVersion: 1,\n message: definition.description ?? \"Payment required\",\n resource: definition.resource,\n accepts: [\n {\n id: \"x402\",\n title: `Pay ${definition.amount} ${definition.currency.code}`,\n description: definition.description,\n amount: {\n value: definition.amount,\n currency: {\n code: definition.currency.code,\n symbol: definition.currency.symbol,\n decimals: definition.currency.decimals,\n kind: \"crypto\",\n },\n },\n asset: {\n symbol: definition.asset.symbol,\n network: definition.asset.network,\n address: definition.asset.address,\n decimals: definition.asset.decimals,\n standard: \"erc20\",\n },\n payTo: definition.payTo,\n resource: definition.resource,\n proof: {\n mode: \"x402\",\n scheme: definition.scheme,\n network: definition.network,\n version: X402_VERSION,\n facilitator: definition.facilitator,\n verifier: \"x402:facilitator\",\n },\n },\n ],\n metadata: definition.metadata ?? {},\n x402: {\n x402Version: X402_VERSION,\n error: definition.description ?? \"Payment required\",\n accepts: [requirement],\n },\n };\n\n return new Response(JSON.stringify(body), {\n status: 402,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nexport function extractX402Attempt(request: Request): X402PaymentAttempt | null {\n const raw = request.headers.get(HEADER_X402);\n if (!raw) {\n return null;\n }\n\n try {\n const payload = decodeJson(raw, x402PaymentHeaderSchema);\n return {\n type: \"x402\",\n headerName: HEADER_X402,\n raw,\n payload,\n };\n } catch {\n return null;\n }\n}\n\nexport async function verifyX402Payment(\n attempt: X402PaymentAttempt,\n definition: X402PaymentDefinition,\n options: {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n timeout?: number;\n } = {}\n): Promise<X402VerificationResult> {\n const fetchImpl = options.fetchImpl ?? fetch;\n const timeout = options.timeout ?? 25000; // 25 second default timeout\n const facilitator = definition.facilitator;\n\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n const requirement = toX402Requirement(definition);\n const headers = buildFacilitatorHeaders(facilitator);\n\n try {\n const verifyBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /verify\", {\n url: verifierUrl,\n fullBody: JSON.stringify(verifyBody, null, 2)\n });\n const verifyResponse = await Promise.race([\n fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(verifyBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Verification timeout after ${timeout}ms`)), timeout)\n ),\n ]);\n console.log(\"[x402] Facilitator /verify response\", { status: verifyResponse.status });\n\n if (!verifyResponse.ok) {\n const errorText = await verifyResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /verify error\", { status: verifyResponse.status, body: errorText });\n return {\n success: false,\n failure: {\n reason: `Facilitator verify request failed: ${verifyResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"verification_failed\",\n },\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n failure: {\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n },\n };\n }\n\n const responseHeaders: Record<string, string> = {};\n if (options.settle) {\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n try {\n const settleBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /settle\", {\n url: settleUrl,\n bodyPreview: JSON.stringify(settleBody).substring(0, 300)\n });\n const settleResponse = await Promise.race([\n fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(settleBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Settlement timeout after ${timeout}ms`)), timeout)\n ),\n ]);\n console.log(\"[x402] Facilitator /settle response\", { status: settleResponse.status });\n\n if (!settleResponse.ok) {\n const errorText = await settleResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /settle error\", { status: settleResponse.status, body: errorText });\n return {\n success: false,\n failure: {\n reason: `Facilitator settlement failed: ${settleResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"settlement_failed\",\n },\n };\n }\n\n const settlePayload = (await settleResponse.json()) as {\n txHash?: string;\n [key: string]: unknown;\n };\n console.log(\"[x402] Facilitator /settle success\", { txHash: settlePayload.txHash });\n if (settlePayload.txHash) {\n responseHeaders[HEADER_PAYMENT_RESPONSE] = JSON.stringify({\n settled: true,\n txHash: settlePayload.txHash,\n });\n }\n } catch (error) {\n console.error(\"[x402] Settlement exception\", { error: error instanceof Error ? error.message : String(error) });\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Settlement failed\",\n code: \"settlement_failed\",\n },\n };\n }\n }\n\n const result: X402VerificationResult = {\n success: true,\n metadata: {\n optionId: \"x402\",\n verifier: \"x402:facilitator\",\n amount: definition.amount,\n currency: definition.currency.code,\n network: definition.network,\n },\n };\n\n if (Object.keys(responseHeaders).length > 0) {\n result.responseHeaders = responseHeaders;\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Unknown error\",\n code: \"verification_failed\",\n },\n };\n }\n}\n\nfunction toX402Requirement(definition: X402PaymentDefinition): X402Requirement {\n const decimals = definition.asset.decimals;\n const units = decimalToBaseUnits(definition.amount, decimals);\n\n return x402RequirementSchema.parse({\n scheme: definition.scheme,\n network: definition.network,\n maxAmountRequired: units,\n asset: definition.asset.address,\n payTo: definition.payTo,\n resource: definition.resource,\n description: definition.description,\n mimeType: \"application/json\",\n maxTimeoutSeconds: 900,\n extra: {\n symbol: definition.asset.symbol,\n currencyCode: definition.currency.code,\n decimals,\n },\n });\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nfunction buildFacilitatorHeaders(facilitator: X402FacilitatorConfig): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (facilitator.apiKeyHeader && process.env.X402_FACILITATOR_API_KEY) {\n headers[facilitator.apiKeyHeader] = process.env.X402_FACILITATOR_API_KEY;\n }\n return headers;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nexport const PAYMENT_HEADERS = [HEADER_X402, HEADER_PAYMENT_RESPONSE] as const;\n","import {\n createX402PaymentRequired,\n extractX402Attempt,\n verifyX402Payment,\n PAYMENT_HEADERS,\n type X402PaymentDefinition,\n} from \"./helpers\";\nimport {\n SUPPORTED_CURRENCIES,\n DEFAULT_FACILITATOR,\n type X402FacilitatorConfig,\n type X402VerificationResult,\n type CurrencySpec,\n} from \"./types\";\n\nexport interface DefineX402PaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n network?: string;\n assetAddress?: string;\n scheme?: \"exact\" | \"bounded\";\n facilitator?: string | X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport interface X402Payment {\n definition: X402PaymentDefinition;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequireX402PaymentOptions {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n onFailure?: (result: X402VerificationResult) => Response;\n}\n\nexport interface RequireX402PaymentSuccess {\n payment: {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n };\n headers: Record<string, string>;\n result: X402VerificationResult;\n}\n\nexport type RequireX402PaymentOutcome = Response | RequireX402PaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.x402.context\");\n\nexport class X402PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: X402VerificationResult | undefined;\n\n constructor(response: Response, verification?: X402VerificationResult) {\n super(\"X402 Payment required\");\n this.name = \"X402PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type X402PaymentContext = RequireX402PaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: X402PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getX402PaymentContext(\n request: Request\n): X402PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nexport function defineX402Payment(config: DefineX402PaymentConfig): X402Payment {\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n\n if (!currencySpec) {\n throw new Error(`Unsupported currency for x402 payments: ${currencyCode}`);\n }\n\n const network = config.network ?? currencySpec.network;\n const assetAddress = config.assetAddress ?? currencySpec.assetAddress;\n\n if (!network || !assetAddress) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\"\n );\n }\n\n const facilitator = resolveFacilitator(config.facilitator);\n const value = toDecimalString(config.amount);\n\n const definition: X402PaymentDefinition = {\n amount: value,\n currency: {\n code: currencyCode,\n symbol: currencySpec.symbol,\n decimals: currencySpec.decimals,\n },\n asset: {\n symbol: currencySpec.symbol,\n network,\n address: assetAddress,\n decimals: currencySpec.decimals,\n },\n payTo: config.payTo,\n scheme: config.scheme ?? \"exact\",\n network,\n facilitator,\n };\n\n if (config.resource) {\n definition.resource = config.resource;\n }\n if (config.message) {\n definition.description = config.message;\n }\n if (config.metadata) {\n definition.metadata = config.metadata;\n }\n\n const baseMetadata: Record<string, unknown> = {\n amountUSDC: currencyCode === \"USDC\" ? Number(value) : undefined,\n facilitator: \"x402rs\",\n network,\n };\n\n const metadata = config.metadata\n ? { ...baseMetadata, ...config.metadata }\n : baseMetadata;\n\n return {\n definition,\n metadata,\n };\n}\n\nexport async function requireX402Payment(\n request: Request,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): Promise<RequireX402PaymentOutcome> {\n const definition = isX402Payment(payment) ? payment.definition : payment;\n\n const attempt = extractX402Attempt(request);\n if (!attempt) {\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response);\n }\n\n const verifyOptions: Parameters<typeof verifyX402Payment>[2] = {\n settle: options.settle !== undefined ? options.settle : true,\n };\n if (options.fetchImpl !== undefined) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyX402Payment(attempt, definition, verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata as {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n },\n headers: verification.responseHeaders ?? {},\n result: verification,\n };\n}\n\nexport function withX402Payment(\n handler: (request: Request) => Promise<Response> | Response,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requireX402Payment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nfunction applyPaymentHeaders(\n response: Response,\n headers: Record<string, string>\n): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nfunction isX402Payment(value: unknown): value is X402Payment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as X402Payment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: string | X402FacilitatorConfig | undefined\n): X402FacilitatorConfig {\n if (!value) {\n return DEFAULT_FACILITATOR;\n }\n if (typeof value === \"string\") {\n return { ...DEFAULT_FACILITATOR, url: value };\n }\n return value;\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nexport { PAYMENT_HEADERS };\nexport type { X402PaymentDefinition, X402VerificationResult, X402FacilitatorConfig, CurrencySpec };\nexport { SUPPORTED_CURRENCIES, DEFAULT_FACILITATOR };\nexport {\n X402Client,\n payX402,\n X402BrowserClient,\n payX402WithWallet,\n type X402ClientConfig,\n type X402PayRequest,\n type X402PayResult,\n type X402BrowserClientConfig,\n type EIP3009Authorization,\n} from \"./client\";\n","import { z, type ZodSchema } from \"zod\";\nimport { X402PaymentRequiredError } from \"../x402/index\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(\n `Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`\n );\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof X402PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\"\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { ToolCategory, ToolProfile } from \"./tool\";\nimport type { X402Payment } from \"../x402/index\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport type ScheduleType = \"cron\" | \"rate\";\n\nexport interface NormalizedSchedule {\n type: ScheduleType;\n expression: string;\n authoredEnabled?: boolean;\n notifyEmail?: boolean;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: X402Payment | null;\n schedule?: NormalizedSchedule | null;\n notifyEmail?: boolean;\n profile?: ToolProfile | null;\n profileDescription?: string | null;\n profileCategory?: ToolCategory;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type { Tool, ToolMetadataOverrides, Metadata, BuildMetadata, PaymentConfig } from \"./metadata\";\n","import { NormalizedSchedule } from \"../types/index\";\n\nconst CRON_WRAPPED_REGEX = /^cron\\((.*)\\)$/i;\nconst CRON_TOKEN_REGEX = /^[A-Za-z0-9*?/,\\-#L]+$/;\n\nexport function normalizeScheduleExpression(raw: string, context: string): NormalizedSchedule {\n const value = raw?.trim();\n if (!value) {\n throw new Error(`${context}: profile.schedule.cron must be a non-empty string`);\n }\n\n const cronBody = extractCronBody(value);\n const cronFields = cronBody.trim().split(/\\s+/).filter(Boolean);\n\n if (cronFields.length !== 5 && cronFields.length !== 6) {\n throw new Error(`${context}: cron expression must have 5 or 6 fields (got ${cronFields.length})`);\n }\n\n validateCronTokens(cronFields, context);\n\n return {\n type: \"cron\",\n expression: cronFields.join(\" \"),\n };\n}\n\nfunction extractCronBody(value: string): string {\n const cronMatch = CRON_WRAPPED_REGEX.exec(value);\n if (cronMatch) {\n return (cronMatch[1] ?? \"\").trim();\n }\n return value;\n}\n\nfunction validateCronTokens(fields: string[], context: string): void {\n fields.forEach((token, idx) => {\n if (!CRON_TOKEN_REGEX.test(token)) {\n throw new Error(`${context}: invalid cron token \"${token}\" at position ${idx + 1}`);\n }\n });\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { z, type ZodSchema } from \"zod\";\nimport { zodToJsonSchema, type JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type NormalizedSchedule,\n} from \"../types/index\";\nimport { Metadata, ToolMetadataOverrides } from \"../types/metadata\";\nimport { withX402Payment, type X402Payment } from \"../x402/index\";\nimport { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../utils/module-loader\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { normalizeScheduleExpression } from \"../utils/schedule\";\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 // Enforce kebab-case filenames (tool key = filename)\n const kebabCase = /^[a-z0-9]+(?:-[a-z0-9]+)*\\.[a-z]+$/;\n for (const f of files) {\n if (!kebabCase.test(f)) {\n throw new Error(`Tool filename must be kebab-case: ${f}`);\n }\n }\n\n const entryPoints = files.map((file) => path.join(toolsDir, file));\n\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints,\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n bundle: true,\n external: [\"opentool\", \"opentool/*\"],\n });\n\n const tools: InternalToolDefinition[] = [];\n\n try {\n for (const file of files) {\n const compiledPath = resolveCompiledPath(outDir, file);\n if (!fs.existsSync(compiledPath)) {\n throw new Error(`Failed to compile ${file}`);\n }\n\n const moduleExports = await importFresh(compiledPath);\n const toolModule = extractToolModule(moduleExports, file);\n\n const schema = ensureZodSchema(toolModule.schema, file);\n const paymentExport = toolModule.payment as X402Payment | undefined;\n const toolName =\n toolModule.metadata?.name ?? toolModule.metadata?.title ?? toBaseName(file);\n const inputSchemaRaw = schema ? toJsonSchema(toolName, schema) : undefined;\n const inputSchema = normalizeInputSchema(inputSchemaRaw);\n\n const httpHandlersRaw = collectHttpHandlers(toolModule, file);\n // Enforce strict authoring rules: exactly one of GET or POST\n const hasGET = typeof (toolModule as any).GET === \"function\";\n const hasPOST = typeof (toolModule as any).POST === \"function\";\n const otherMethods = HTTP_METHODS.filter((m) => m !== \"GET\" && m !== \"POST\").filter(\n (m) => typeof (toolModule as any)[m] === \"function\"\n );\n if (otherMethods.length > 0) {\n throw new Error(\n `${file} must not export ${otherMethods.join(\", \")}. Only one of GET or POST is allowed.`\n );\n }\n if (hasGET === hasPOST) {\n throw new Error(`${file}: export exactly one of GET or POST`);\n }\n\n let normalizedSchedule: NormalizedSchedule | null = null;\n const schedule = (toolModule as any)?.profile?.schedule;\n const profileNotifyEmail =\n typeof (toolModule as any)?.profile?.notifyEmail === \"boolean\"\n ? (toolModule as any).profile.notifyEmail\n : undefined;\n const profileCategoryRaw =\n typeof (toolModule as any)?.profile?.category === \"string\"\n ? (toolModule as any).profile.category\n : undefined;\n const allowedProfileCategories = new Set([\"strategy\", \"tracker\", \"orchestrator\"]);\n if (profileCategoryRaw && !allowedProfileCategories.has(profileCategoryRaw)) {\n throw new Error(\n `${file}: profile.category must be one of ${Array.from(allowedProfileCategories).join(\", \")}`\n );\n }\n const profileAssetsRaw = (toolModule as any)?.profile?.assets;\n if (profileAssetsRaw !== undefined) {\n if (!Array.isArray(profileAssetsRaw)) {\n throw new Error(`${file}: profile.assets must be an array.`);\n }\n profileAssetsRaw.forEach((entry, index) => {\n if (!entry || typeof entry !== \"object\") {\n throw new Error(\n `${file}: profile.assets[${index}] must be an object.`\n );\n }\n const record = entry as Record<string, unknown>;\n const venue = typeof record.venue === \"string\" ? record.venue.trim() : \"\";\n if (!venue) {\n throw new Error(\n `${file}: profile.assets[${index}].venue must be a non-empty string.`\n );\n }\n const chain = record.chain;\n if (typeof chain !== \"string\" && typeof chain !== \"number\") {\n throw new Error(\n `${file}: profile.assets[${index}].chain must be a string or number.`\n );\n }\n const symbols = record.assetSymbols;\n if (!Array.isArray(symbols) || symbols.length === 0) {\n throw new Error(\n `${file}: profile.assets[${index}].assetSymbols must be a non-empty array.`\n );\n }\n const invalidSymbol = symbols.find(\n (symbol) =>\n typeof symbol !== \"string\" || symbol.trim().length === 0\n );\n if (invalidSymbol !== undefined) {\n throw new Error(\n `${file}: profile.assets[${index}].assetSymbols must be non-empty strings.`\n );\n }\n const walletAddress = record.walletAddress;\n if (\n walletAddress !== undefined &&\n (typeof walletAddress !== \"string\" || walletAddress.trim().length === 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].walletAddress must be a non-empty string when provided.`\n );\n }\n const pair = record.pair;\n if (\n pair !== undefined &&\n (typeof pair !== \"string\" || pair.trim().length === 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].pair must be a non-empty string when provided.`\n );\n }\n const leverage = record.leverage;\n if (\n leverage !== undefined &&\n (typeof leverage !== \"number\" || !Number.isFinite(leverage) || leverage <= 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].leverage must be a positive number when provided.`\n );\n }\n });\n }\n const templateConfigRaw = (toolModule as any)?.profile?.templateConfig;\n if (templateConfigRaw !== undefined) {\n if (!templateConfigRaw || typeof templateConfigRaw !== \"object\") {\n throw new Error(`${file}: profile.templateConfig must be an object.`);\n }\n const record = templateConfigRaw as Record<string, unknown>;\n const version = record.version;\n if (\n typeof version !== \"string\" &&\n typeof version !== \"number\"\n ) {\n throw new Error(\n `${file}: profile.templateConfig.version must be a string or number.`\n );\n }\n const schema = record.schema;\n if (\n schema !== undefined &&\n (!schema || typeof schema !== \"object\" || Array.isArray(schema))\n ) {\n throw new Error(\n `${file}: profile.templateConfig.schema must be an object when provided.`\n );\n }\n const defaults = record.defaults;\n if (\n defaults !== undefined &&\n (!defaults || typeof defaults !== \"object\" || Array.isArray(defaults))\n ) {\n throw new Error(\n `${file}: profile.templateConfig.defaults must be an object when provided.`\n );\n }\n }\n if (hasGET && schedule && typeof schedule.cron === \"string\" && schedule.cron.trim().length > 0) {\n normalizedSchedule = normalizeScheduleExpression(schedule.cron, file);\n if (typeof schedule.enabled === \"boolean\") {\n normalizedSchedule.authoredEnabled = schedule.enabled;\n }\n if (typeof schedule.notifyEmail === \"boolean\") {\n normalizedSchedule.notifyEmail = schedule.notifyEmail;\n }\n }\n if (hasPOST) {\n if (!schema) {\n throw new Error(`${file}: POST tools must export a Zod schema as 'schema'`);\n }\n if (schedule && typeof schedule.cron === \"string\") {\n throw new Error(`${file}: POST tools must not define profile.schedule; use GET + cron for scheduled tasks.`);\n }\n }\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n throw new Error(\n `${file} must export at least one HTTP handler (e.g. POST)`\n );\n }\n\n if (paymentExport) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, paymentExport),\n };\n }\n }\n\n const httpHandlerMap = toHttpHandlerMap(httpHandlers);\n const defaultMethod =\n typeof toolModule.mcp?.defaultMethod === \"string\"\n ? toolModule.mcp.defaultMethod\n : undefined;\n\n const adapter = createMcpAdapter({\n name: toolName,\n httpHandlers: httpHandlerMap,\n ...(defaultMethod ? { defaultMethod } : {}),\n ...(schema ? { schema } : {}),\n });\n\n let metadataOverrides: ToolMetadataOverrides | null =\n toolModule.metadata ?? null;\n\n if (paymentExport) {\n if (metadataOverrides) {\n metadataOverrides = {\n ...metadataOverrides,\n payment: metadataOverrides.payment ?? (paymentExport as any),\n annotations: {\n ...(metadataOverrides.annotations ?? {}),\n requiresPayment:\n metadataOverrides.annotations?.requiresPayment ?? true,\n },\n };\n } else {\n metadataOverrides = {\n payment: paymentExport as any,\n annotations: { requiresPayment: true },\n } as ToolMetadataOverrides;\n }\n }\n\n const tool: InternalToolDefinition = {\n schema: schema ?? undefined,\n inputSchema,\n metadata: metadataOverrides,\n httpHandlers,\n mcpConfig: normalizeMcpConfig(toolModule.mcp, file),\n filename: toBaseName(file),\n sourcePath: path.join(toolsDir, file),\n handler: async (params: unknown) => adapter(params),\n payment: paymentExport ?? null,\n schedule: normalizedSchedule,\n profile:\n (toolModule as any)?.profile && typeof (toolModule as any).profile === \"object\"\n ? (toolModule as any).profile\n : null,\n ...(profileNotifyEmail !== undefined ? { notifyEmail: profileNotifyEmail } : {}),\n profileDescription:\n typeof (toolModule as any)?.profile?.description === \"string\"\n ? toolModule.profile?.description ?? null\n : null,\n ...(profileCategoryRaw ? { profileCategory: profileCategoryRaw } : {}),\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 toolsManifestPath: string | null;\n sharedModules?: SharedModulesInfo | 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\ninterface ToolsManifestEntry {\n name: string;\n method: string;\n inputSchema?: unknown;\n profile?: Record<string, unknown> | null;\n schedule?: InternalToolDefinition[\"schedule\"] | null;\n toolPath: string;\n}\n\ninterface SharedModulesInfo {\n count: number;\n outputDir: 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 sharedModules = await emitSharedModules({\n projectRoot,\n outputDir,\n });\n\n const toolsManifestPath = await writeToolsManifest({\n tools,\n compiledTools,\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 toolsManifestPath,\n sharedModules,\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 EmitSharedModulesConfig {\n projectRoot: string;\n outputDir: string;\n}\n\nasync function emitSharedModules(\n config: EmitSharedModulesConfig\n): Promise<SharedModulesInfo | null> {\n const srcDir = path.join(config.projectRoot, \"src\");\n if (!fs.existsSync(srcDir)) {\n return null;\n }\n\n const sharedFiles = collectSourceFiles(srcDir);\n if (sharedFiles.length === 0) {\n return null;\n }\n\n const sharedOutDir = path.join(config.outputDir, \"src\");\n\n await transpileWithEsbuild({\n entryPoints: sharedFiles,\n projectRoot: config.projectRoot,\n outDir: sharedOutDir,\n outBase: srcDir,\n format: \"cjs\",\n bundle: false,\n logLevel: \"warning\",\n });\n\n return { count: sharedFiles.length, outputDir: sharedOutDir };\n}\n\nfunction collectSourceFiles(dir: string): string[] {\n const supported = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\"]);\n const results: string[] = [];\n const ignoreDirs = new Set([\"node_modules\", \".git\", \"dist\", \".opentool-temp\"]);\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (ignoreDirs.has(entry.name)) {\n continue;\n }\n results.push(...collectSourceFiles(fullPath));\n continue;\n }\n\n const ext = path.extname(entry.name);\n if (supported.has(ext) && !entry.name.endsWith(\".d.ts\")) {\n results.push(fullPath);\n }\n }\n\n return results;\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 writeToolsManifest(options: {\n tools: InternalToolDefinition[];\n compiledTools: CompiledToolArtifact[];\n outputDir: string;\n}): string | null {\n const manifestPath = path.join(options.outputDir, \"tools.json\");\n const legacyManifestPath = path.join(\n options.outputDir,\n \".well-known\",\n \"opentool\",\n \"cron.json\"\n );\n if (fs.existsSync(legacyManifestPath)) {\n fs.rmSync(legacyManifestPath, { force: true });\n }\n const entries: ToolsManifestEntry[] = options.tools.map((tool) => {\n const compiled = options.compiledTools.find(\n (artifact) => artifact.filename === tool.filename\n );\n if (!compiled) {\n throw new Error(`Internal error: missing compiled artifact for ${tool.filename}`);\n }\n\n const handler = tool.httpHandlers[0];\n const method = handler ? handler.method.toUpperCase() : \"GET\";\n const toolPath = compiled.modulePath.replace(/\\\\/g, \"/\");\n\n const entry: ToolsManifestEntry = {\n name: tool.metadata?.name ?? tool.filename,\n method,\n toolPath,\n };\n\n if (tool.inputSchema) {\n entry.inputSchema = tool.inputSchema;\n }\n if (tool.profile) {\n entry.profile = tool.profile as Record<string, unknown>;\n }\n if (tool.schedule) {\n entry.schedule = tool.schedule;\n }\n\n return entry;\n });\n\n fs.writeFileSync(manifestPath, JSON.stringify(entries, null, 2));\n return manifestPath;\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 if (artifacts.sharedModules) {\n console.log(\n ` ⢠src/ (${artifacts.sharedModules.count} shared module${\n artifacts.sharedModules.count === 1 ? \"\" : \"s\"\n } compiled)`\n );\n }\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.toolsManifestPath) {\n console.log(\" ⢠tools.json (runtime tool manifest)\");\n }\n if (artifacts.workflowBundles) {\n console.log(\" ⢠.well-known/workflow/v1/ (workflow bundles)\");\n console.log(\" - flow.js\");\n console.log(\" - step.js\");\n console.log(\" - webhook.js\");\n if (artifacts.workflowBundles.clientBundlePath) {\n console.log(\" - client.js\");\n }\n if (artifacts.workflowBundles.manifestPath) {\n console.log(\" - manifest.json\");\n }\n }\n if (artifacts.defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n artifacts.defaultsApplied.forEach((entry) => console.log(` ⢠${entry}`));\n }\n\n if (!hasMcp) {\n console.log(\"\\nā¹ļø MCP adapter skipped (no tools opted in)\");\n }\n}\n\ninterface WorkflowBuildOptions {\n projectRoot: string;\n outputDir: string;\n workflowsDir?: string;\n}\n\nasync function buildWorkflowsIfPresent(\n options: WorkflowBuildOptions\n): Promise<WorkflowBundleArtifact | null> {\n const workflowsDir =\n options.workflowsDir ?? path.join(options.projectRoot, \"workflows\");\n\n if (!fs.existsSync(workflowsDir)) {\n return null;\n }\n\n if (!hasWorkflowSourceFiles(workflowsDir)) {\n return null;\n }\n\n const nodeVersion = process.versions?.node ?? \"0.0.0\";\n const nodeMajor = Number(nodeVersion.split(\".\")[0] ?? 0);\n\n if (!Number.isFinite(nodeMajor) || nodeMajor < 22) {\n console.warn(\n `[${timestamp()}] Workflow bundles skipped (requires Node >= 22, current ${nodeVersion})`\n );\n return null;\n }\n\n type WorkflowBaseBuilderCtor = new (config: any) => {\n config: any;\n getInputFiles(): Promise<string[]>;\n getTsConfigOptions(): Promise<{\n baseUrl?: string;\n paths?: Record<string, string[]>;\n }>;\n createStepsBundle(options: any): Promise<void>;\n createWorkflowsBundle(options: any): Promise<void>;\n createWebhookBundle(options: any): Promise<void>;\n };\n\n let BaseBuilder: WorkflowBaseBuilderCtor;\n try {\n ({ BaseBuilder } = (await import(\n \"@workflow/cli/dist/lib/builders/base-builder.js\"\n )) as { BaseBuilder: WorkflowBaseBuilderCtor });\n } catch (error) {\n const details =\n error instanceof Error ? `\\nReason: ${error.message}` : \"\";\n throw new Error(\n `[${timestamp()}] Workflow sources detected, but optional dependency ` +\n \"'@workflow/cli' is not installed. Install it with \\\"npm install \" +\n \"@workflow/cli\\\" (or add it to devDependencies) and rerun the build.\" +\n details\n );\n }\n\n class OpenToolWorkflowBuilder extends BaseBuilder {\n constructor(config: ConstructorParameters<WorkflowBaseBuilderCtor>[0]) {\n super(config);\n }\n\n async build(): Promise<void> {\n const inputFiles = await this.getInputFiles();\n const tsConfig = await this.getTsConfigOptions();\n const shared: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n } = {\n inputFiles,\n ...(tsConfig.baseUrl ? { tsBaseUrl: tsConfig.baseUrl } : {}),\n ...(tsConfig.paths ? { tsPaths: tsConfig.paths } : {}),\n };\n\n await this.buildStepsBundle(shared);\n await this.buildWorkflowsBundle(shared);\n await this.buildWebhookRoute();\n await this.buildClientLibrary();\n }\n\n private async buildStepsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow steps bundle at\",\n this.config.stepsBundlePath\n );\n const stepsBundlePath = path.resolve(\n this.config.workingDir,\n this.config.stepsBundlePath\n );\n await fs.promises.mkdir(path.dirname(stepsBundlePath), { recursive: true });\n await this.createStepsBundle({\n outfile: stepsBundlePath,\n ...options,\n });\n }\n\n private async buildWorkflowsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow bundle at\",\n this.config.workflowsBundlePath\n );\n const workflowBundlePath = path.resolve(\n this.config.workingDir,\n this.config.workflowsBundlePath\n );\n await fs.promises.mkdir(path.dirname(workflowBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: workflowBundlePath,\n bundleFinalOutput: false,\n ...options,\n });\n }\n\n private async buildWebhookRoute(): Promise<void> {\n console.log(\n \"Creating OpenTool workflow webhook bundle at\",\n this.config.webhookBundlePath\n );\n const webhookBundlePath = path.resolve(\n this.config.workingDir,\n this.config.webhookBundlePath\n );\n await fs.promises.mkdir(path.dirname(webhookBundlePath), {\n recursive: true,\n });\n await this.createWebhookBundle({ outfile: webhookBundlePath });\n }\n\n private async buildClientLibrary(): Promise<void> {\n if (!this.config?.clientBundlePath) {\n return;\n }\n\n // Workflow CLI normally emits a client bundle for UI tooling. OpenTool\n // currently doesn't surface it, but we keep the hook to remain compatible\n // with future versions.\n const clientBundlePath = path.resolve(\n this.config.workingDir,\n this.config.clientBundlePath\n );\n await fs.promises.mkdir(path.dirname(clientBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: clientBundlePath,\n bundleFinalOutput: true,\n });\n }\n }\n\n const relativeSourceDir = path.relative(options.projectRoot, workflowsDir) || \".\";\n const outputBase = path.join(\n options.outputDir,\n \".well-known\",\n \"workflow\",\n \"v1\"\n );\n\n const stepsBundlePath = path.join(outputBase, \"step.js\");\n const workflowsBundlePath = path.join(outputBase, \"flow.js\");\n const webhookBundlePath = path.join(outputBase, \"webhook.js\");\n const clientBundlePath: string | undefined = undefined;\n const manifestPath = path.join(outputBase, \"manifest.json\");\n\n const builder = new OpenToolWorkflowBuilder({\n workingDir: options.projectRoot,\n dirs: [relativeSourceDir],\n buildTarget: \"standalone\",\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n workflowManifestPath: manifestPath,\n externalPackages: [\n \"workflow\",\n \"workflow/internal/builtins\",\n \"workflow/internal/private\",\n \"workflow/runtime\",\n \"workflow/api\",\n ],\n });\n\n console.log(\n `[${timestamp()}] Building workflows from ${workflowsDir} -> ${outputBase}`\n );\n\n await builder.build();\n\n return {\n sourceDir: workflowsDir,\n outputDir: outputBase,\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n manifestPath,\n };\n}\n\nfunction hasWorkflowSourceFiles(directory: string): boolean {\n const entries = fs.readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (hasWorkflowSourceFiles(path.join(directory, entry.name))) {\n return true;\n }\n continue;\n }\n\n if (entry.isFile()) {\n const extension = path.extname(entry.name).toLowerCase();\n if (WORKFLOW_SOURCE_EXTENSIONS.has(extension)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nconst WORKFLOW_SOURCE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n]);\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n\nfunction escapeForJs(value: string): string {\n return value.replace(/'/g, \"\\\\'\");\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport { X402PaymentRequiredError } from \"../x402/index\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n} from \"../types/index\";\nimport { loadAndValidateTools } from \"./validate\";\nimport dotenv from \"dotenv\";\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 loadEnvFiles(projectRoot);\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 X402PaymentRequiredError) {\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\nfunction loadEnvFiles(projectRoot: string): void {\n const envFiles = [\".env.local\", \".env\"];\n for (const file of envFiles) {\n const candidate = path.join(projectRoot, file);\n if (fs.existsSync(candidate)) {\n dotenv.config({ path: candidate, override: false });\n }\n }\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","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype InitOptions = {\n dir?: string;\n name?: string;\n description?: string;\n force?: boolean;\n};\n\nfunction resolveTemplateDir(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n return path.resolve(here, \"../../templates/base\");\n}\n\nasync function directoryIsEmpty(targetDir: string): Promise<boolean> {\n try {\n const entries = await fs.readdir(targetDir);\n return entries.length === 0;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return true;\n }\n throw error;\n }\n}\n\nasync function copyDir(src: string, dest: string) {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nfunction toPackageName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"opentool-project\";\n}\n\nfunction toDisplayName(value: string): string {\n return value\n .trim()\n .replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (ch) => ch.toUpperCase()) || \"OpenTool Project\";\n}\n\nasync function updatePackageJson(\n targetDir: string,\n name: string,\n description?: string\n) {\n const filePath = path.join(targetDir, \"package.json\");\n const raw = await fs.readFile(filePath, \"utf-8\");\n const pkg = JSON.parse(raw) as Record<string, unknown>;\n pkg.name = toPackageName(name);\n if (description) {\n pkg.description = description;\n }\n await fs.writeFile(filePath, `${JSON.stringify(pkg, null, 2)}\\n`, \"utf-8\");\n}\n\nasync function updateMetadata(\n targetDir: string,\n name: string,\n description?: string\n) {\n const filePath = path.join(targetDir, \"metadata.ts\");\n const raw = await fs.readFile(filePath, \"utf-8\");\n const displayName = toDisplayName(name);\n const resolvedDescription = description || \"OpenTool project\";\n const updated = raw\n .replace(/name:\\s*\\\".*?\\\"/, `name: \"${toPackageName(name)}\"`)\n .replace(/displayName:\\s*\\\".*?\\\"/, `displayName: \"${displayName}\"`)\n .replace(/description:\\s*\\\".*?\\\"/, `description: \"${resolvedDescription}\"`);\n await fs.writeFile(filePath, updated, \"utf-8\");\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const targetDir = path.resolve(process.cwd(), options.dir || \".\");\n const templateDir = resolveTemplateDir();\n const empty = await directoryIsEmpty(targetDir);\n\n if (!empty && !options.force) {\n throw new Error(\n `Directory not empty: ${targetDir}. Use --force to overwrite.`\n );\n }\n\n await copyDir(templateDir, targetDir);\n\n const projectName = options.name || path.basename(targetDir);\n const description = options.description;\n await updatePackageJson(targetDir, projectName, description);\n await updateMetadata(targetDir, projectName, description);\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 { initCommand } from \"./init\";\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// Init command\nprogram\n .command(\"init\")\n .description(\"Create a new OpenTool project in the target directory\")\n .option(\"-d, --dir <dir>\", \"Target directory\", \".\")\n .option(\"-n, --name <name>\", \"Project name\")\n .option(\"--description <description>\", \"Project description\")\n .option(\"--force\", \"Overwrite existing files\", false)\n .action(async (cmdOptions) => {\n await initCommand({\n dir: cmdOptions.dir,\n name: cmdOptions.name,\n description: cmdOptions.description,\n force: cmdOptions.force,\n });\n console.log(`Initialized OpenTool project in ${cmdOptions.dir || \".\"}`);\n });\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":["../../node_modules/tsup/assets/esm_shims.js","../../src/utils/esbuild.ts","../../src/types/metadata.ts","../../src/utils/module-loader.ts","../../src/cli/shared/metadata.ts","../../src/x402/types.ts","../../src/x402/helpers.ts","../../src/x402/index.ts","../../src/adapters/mcp.ts","../../src/types/index.ts","../../src/utils/schedule.ts","../../src/cli/validate.ts","../../src/cli/build.ts","../../src/cli/dev.ts","../../src/cli/generate-metadata.ts","../../src/cli/init.ts","../../src/cli/index.ts"],"names":["path2","fs","path3","path4","fs2","z","path5","fs3","schema","options","stepsBundlePath","webhookBundlePath","clientBundlePath","__dirname","path7","fileURLToPath","fs5","watch","toHttpHandlerMap","timestamp","path8","fs6","path"],"mappings":"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","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tmpdir } from \"os\";\nimport { build, type BuildOptions } from \"esbuild\";\n\ninterface TranspileOptions {\n entryPoints: string[];\n projectRoot: string;\n outDir?: string;\n outBase?: string;\n format: \"cjs\" | \"esm\";\n bundle?: boolean;\n external?: string[];\n metafile?: boolean;\n logLevel?: \"silent\" | \"error\" | \"warning\" | \"info\" | \"debug\";\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: options.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: options.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 (options.outBase) {\n buildOptions.outbase = options.outBase;\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\n// X402Payment structure (from defineX402Payment)\nconst X402PaymentSchema = z\n .object({\n definition: z.object({\n amount: z.string(),\n currency: z.object({\n code: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n }),\n asset: z.object({\n symbol: z.string(),\n network: z.string(),\n address: z.string(),\n decimals: z.number(),\n }),\n payTo: z.string(),\n resource: z.string().optional(),\n description: z.string().optional(),\n scheme: z.string(),\n network: z.string(),\n facilitator: z.object({\n url: z.string(),\n verifyPath: z.string().optional(),\n settlePath: z.string().optional(),\n apiKeyHeader: z.string().optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n }),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\n// Accept x402 or any custom payment config\nexport const PaymentConfigSchema = z.union([\n X402PaymentSchema,\n z.record(z.string(), z.unknown()),\n]);\n\nexport type PaymentConfig = z.infer<typeof PaymentConfigSchema>;\n\nexport const DiscoveryMetadataSchema = z\n .object({\n keywords: z.array(z.string()).optional(),\n category: z.string().optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n documentation: z.union([z.string(), z.array(z.string())]).optional(),\n })\n .catchall(z.any());\n\nexport type DiscoveryMetadata = z.infer<typeof DiscoveryMetadataSchema>;\n\nexport const ToolCategorySchema = z.enum([\"strategy\", \"tracker\", \"orchestrator\"]);\nexport type ToolCategory = z.infer<typeof ToolCategorySchema>;\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 notifyEmail: z.boolean().optional(),\n category: ToolCategorySchema.optional(),\n })\n .strict();\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const MetadataSchema = z\n .object({\n metadataSpecVersion: z.string().optional(),\n name: z.string().optional(),\n displayName: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string().optional(),\n categories: z.array(z.string()).optional(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n useCases: z.array(z.string()).optional(),\n capabilities: z.array(z.string()).optional(),\n requirements: z.record(z.string(), z.any()).optional(),\n compatibility: z.record(z.string(), z.any()).optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .catchall(z.any());\n\nexport type Metadata = z.infer<typeof MetadataSchema>;\n\nexport const BuildMetadataSchema = z\n .object({\n metadataSpecVersion: z.string().default(METADATA_SPEC_VERSION),\n name: z.string(),\n displayName: z.string(),\n version: z.string(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().optional(),\n website: z.string().optional(),\n category: z.string(),\n termsOfService: z.string().optional(),\n mcpUrl: z.string().optional(),\n payment: PaymentConfigSchema.optional(),\n tools: z.array(ToolSchema).min(1),\n discovery: DiscoveryMetadataSchema.optional(),\n promptExamples: z.array(z.string()).optional(),\n iconPath: z.string().optional(),\n videoPath: z.string().optional(),\n image: z.string().optional(),\n animation_url: z.string().optional(),\n chains: z.array(z.union([z.string(), z.number()])).optional(),\n })\n .strict();\n\nexport type BuildMetadata = z.infer<typeof BuildMetadataSchema>;\n","import * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nconst requireModule = createRequire(\n typeof __filename !== \"undefined\" ? __filename : import.meta.url\n);\n\nexport function resolveCompiledPath(\n outDir: string,\n originalFile: string,\n extension = \".js\"\n): string {\n const baseName = path.basename(originalFile).replace(/\\.[^.]+$/, \"\");\n return path.join(outDir, `${baseName}${extension}`);\n}\n\nexport function requireFresh(modulePath: string): any {\n const resolved = requireModule.resolve(modulePath);\n delete requireModule.cache[resolved];\n return requireModule(resolved);\n}\n\nexport async function importFresh(modulePath: string): Promise<any> {\n const fileUrl = pathToFileURL(modulePath).href;\n const cacheBuster = `t=${Date.now()}-${Math.random()}`;\n const separator = fileUrl.includes(\"?\") ? \"&\" : \"?\";\n return import(`${fileUrl}${separator}${cacheBuster}`);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport {\n Metadata,\n MetadataSchema,\n DiscoveryMetadata,\n BuildMetadata,\n BuildMetadataSchema,\n METADATA_SPEC_VERSION,\n PaymentConfig,\n Tool,\n ToolMetadataOverrides,\n ToolMetadataOverridesSchema,\n} from \"../../types/metadata\";\nimport { InternalToolDefinition } from \"../../types/index\";\nimport { transpileWithEsbuild } from \"../../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../../utils/module-loader\";\n\ninterface LoadMetadataResult {\n metadata: Metadata;\n sourcePath: string;\n}\n\nconst METADATA_ENTRY = \"metadata.ts\";\n\nexport async function loadMetadata(projectRoot: string): Promise<LoadMetadataResult> {\n const absPath = path.join(projectRoot, METADATA_ENTRY);\n if (!fs.existsSync(absPath)) {\n return {\n metadata: MetadataSchema.parse({}),\n sourcePath: \"smart defaults (metadata.ts missing)\",\n };\n }\n\n const tempDir = path.join(projectRoot, \".opentool-temp\");\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints: [absPath],\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n });\n\n try {\n const compiledPath = resolveCompiledPath(outDir, METADATA_ENTRY);\n const moduleExports = await importFresh(compiledPath);\n const metadataExport = extractMetadataExport(moduleExports);\n const parsed = MetadataSchema.parse(metadataExport);\n return { metadata: parsed, sourcePath: absPath };\n } finally {\n cleanup();\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n}\n\nfunction extractMetadataExport(moduleExports: unknown): unknown {\n if (!moduleExports || typeof moduleExports !== \"object\") {\n throw new Error(\"metadata.ts must export a metadata object\");\n }\n\n const exportsObject = moduleExports as Record<string, unknown>;\n if (exportsObject.metadata) {\n return exportsObject.metadata;\n }\n\n if (exportsObject.default && typeof exportsObject.default === \"object\") {\n const defaultExport = exportsObject.default as Record<string, unknown>;\n if (defaultExport.metadata) {\n return defaultExport.metadata;\n }\n return defaultExport;\n }\n\n return moduleExports;\n}\n\ninterface PackageInfo {\n name?: string;\n version?: string;\n description?: string;\n author?: string;\n repository?: string | { url?: string };\n homepage?: string;\n type?: string;\n}\n\nfunction readPackageJson(projectRoot: string): PackageInfo {\n const packagePath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(packagePath)) {\n return {};\n }\n\n try {\n const content = fs.readFileSync(packagePath, \"utf8\");\n return JSON.parse(content) as PackageInfo;\n } catch (error) {\n throw new Error(`Failed to read package.json: ${error}`);\n }\n}\n\ninterface MetadataBuildOptions {\n projectRoot: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface MetadataBuildResult {\n metadata: BuildMetadata;\n defaultsApplied: string[];\n sourceMetadataPath: string;\n}\n\nexport async function buildMetadataArtifact(options: MetadataBuildOptions): Promise<MetadataBuildResult> {\n const projectRoot = options.projectRoot;\n const packageInfo = readPackageJson(projectRoot);\n const { metadata: authored, sourcePath } = await loadMetadata(projectRoot);\n const defaultsApplied: string[] = [];\n\n const folderName = path.basename(projectRoot);\n\n const name = resolveField(\n \"name\",\n authored.name,\n () => packageInfo.name ?? folderName,\n defaultsApplied,\n \"package.json name\"\n );\n\n const displayName = resolveField(\n \"displayName\",\n authored.displayName,\n () => {\n const source = packageInfo.name ?? folderName;\n return source\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \");\n },\n defaultsApplied,\n \"package.json name\"\n );\n\n const versionRaw = resolveField(\n \"version\",\n authored.version,\n () => packageInfo.version ?? \"0.1.0\",\n defaultsApplied,\n \"package.json version\"\n );\n const version = typeof versionRaw === \"number\" ? String(versionRaw) : versionRaw;\n\n const category = determineCategory(authored, defaultsApplied);\n\n const description = authored.description ?? packageInfo.description;\n if (!authored.description && packageInfo.description) {\n defaultsApplied.push(\"description ā package.json description\");\n }\n\n const author = authored.author ?? packageInfo.author;\n if (!authored.author && packageInfo.author) {\n defaultsApplied.push(\"author ā package.json author\");\n }\n\n const repository = authored.repository ?? extractRepository(packageInfo.repository);\n if (!authored.repository && repository) {\n defaultsApplied.push(\"repository ā package.json repository\");\n }\n\n const website = authored.website ?? packageInfo.homepage;\n if (!authored.website && packageInfo.homepage) {\n defaultsApplied.push(\"website ā package.json homepage\");\n }\n\n const payment = resolvePayment(authored, defaultsApplied);\n\n const baseImage = authored.image ?? authored.iconPath;\n const animation = authored.animation_url ?? authored.videoPath;\n\n const discovery = buildDiscovery(authored);\n\n const metadataTools: Tool[] = options.tools.map((tool) => {\n const overrides: ToolMetadataOverrides = tool.metadata\n ? ToolMetadataOverridesSchema.parse(tool.metadata)\n : {};\n const toolName = overrides.name ?? tool.filename;\n const toolDescription = overrides.description ?? `${toolName} tool`;\n const toolPayment = overrides.payment ?? payment ?? undefined;\n if (!overrides.payment && toolPayment && payment && toolPayment === payment) {\n defaultsApplied.push(`tool ${toolName} payment ā agent payment`);\n }\n\n const toolDiscovery = overrides.discovery ?? undefined;\n const toolChains = overrides.chains ?? authored.chains ?? undefined;\n const toolCategory = tool.profileCategory ?? \"tracker\";\n if (!tool.profileCategory) {\n defaultsApplied.push(`tool ${toolName} category ā tracker (default)`);\n }\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 toolDefinition.category = toolCategory;\n const notifyEmail = tool.notifyEmail ?? tool.schedule?.notifyEmail;\n if (notifyEmail !== undefined) {\n toolDefinition.notifyEmail = notifyEmail;\n }\n if (tool.profileCategory) {\n toolDefinition.category = tool.profileCategory;\n }\n\n return toolDefinition;\n });\n\n const metadata: BuildMetadata = BuildMetadataSchema.parse({\n metadataSpecVersion: authored.metadataSpecVersion ?? METADATA_SPEC_VERSION,\n name,\n displayName,\n version,\n description,\n author,\n repository,\n website,\n category,\n termsOfService: authored.termsOfService,\n mcpUrl: authored.mcpUrl,\n payment: payment ?? undefined,\n tools: metadataTools,\n discovery,\n promptExamples: authored.promptExamples,\n iconPath: authored.iconPath,\n videoPath: authored.videoPath,\n image: baseImage,\n animation_url: animation,\n chains: authored.chains,\n });\n\n return {\n metadata,\n defaultsApplied,\n sourceMetadataPath: sourcePath,\n };\n}\n\nfunction resolveField<T>(\n field: string,\n value: T | undefined,\n fallback: () => T,\n defaultsApplied: string[],\n fallbackLabel: string\n): T {\n if (value !== undefined && value !== null && value !== \"\") {\n return value;\n }\n const resolved = fallback();\n defaultsApplied.push(`${field} ā ${fallbackLabel}`);\n return resolved;\n}\n\nfunction determineCategory(authored: Metadata, defaultsApplied: string[]): string {\n if (authored.category) {\n return authored.category;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n defaultsApplied.push(\"category ā metadata.categories[0]\");\n return authored.categories[0];\n }\n defaultsApplied.push(\"category ā default category\");\n return \"utility\";\n}\n\nfunction extractRepository(repository: PackageInfo[\"repository\"]): string | undefined {\n if (!repository) {\n return undefined;\n }\n if (typeof repository === \"string\") {\n return repository;\n }\n return repository.url;\n}\n\nfunction resolvePayment(authored: Metadata, _defaults: string[]): PaymentConfig | undefined {\n return authored.payment ?? undefined;\n}\n\nfunction buildDiscovery(authored: Metadata): DiscoveryMetadata | undefined {\n const legacyDiscovery: DiscoveryMetadata = {};\n\n if (Array.isArray(authored.keywords) && authored.keywords.length > 0) {\n legacyDiscovery.keywords = authored.keywords;\n }\n if (Array.isArray(authored.useCases) && authored.useCases.length > 0) {\n legacyDiscovery.useCases = authored.useCases;\n }\n if (Array.isArray(authored.capabilities) && authored.capabilities.length > 0) {\n legacyDiscovery.capabilities = authored.capabilities;\n }\n if (authored.requirements) {\n legacyDiscovery.requirements = authored.requirements;\n }\n if (authored.compatibility) {\n legacyDiscovery.compatibility = authored.compatibility;\n }\n if (Array.isArray(authored.categories) && authored.categories.length > 0) {\n legacyDiscovery.category = authored.categories[0];\n }\n\n const merged = {\n ...legacyDiscovery,\n ...(authored.discovery ?? {}),\n } as DiscoveryMetadata;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import { z } from \"zod\";\n\nexport const X402_VERSION = 1;\nexport const HEADER_X402 = \"X-PAYMENT\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nexport const x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().positive(),\n scheme: z.string().min(1),\n network: z.string().min(1),\n correlationId: z.string().optional(),\n payload: z.unknown(),\n});\n\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface X402PaymentAttempt {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n}\n\nexport interface X402VerificationResult {\n success: boolean;\n metadata?: {\n optionId: string;\n verifier: string;\n [key: string]: unknown;\n };\n failure?: {\n reason: string;\n code: string;\n };\n responseHeaders?: Record<string, string>;\n}\n\nexport interface X402FacilitatorConfig {\n url: string;\n verifyPath?: string;\n settlePath?: string;\n apiKeyHeader?: string;\n}\n\nexport interface CurrencySpec {\n decimals: number;\n symbol: string;\n network: string;\n assetAddress: string;\n}\n\nexport const SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n};\n\nexport const DEFAULT_FACILITATOR: X402FacilitatorConfig = {\n url: \"https://facilitator.x402.rs\",\n verifyPath: \"/verify\",\n settlePath: \"/settle\",\n apiKeyHeader: \"Authorization\",\n};\n","import { z } from \"zod\";\nimport {\n HEADER_X402,\n HEADER_PAYMENT_RESPONSE,\n X402_VERSION,\n x402PaymentHeaderSchema,\n x402RequirementSchema,\n type X402PaymentAttempt,\n type X402Requirement,\n type X402VerificationResult,\n type X402FacilitatorConfig,\n} from \"./types\";\n\nexport interface X402PaymentDefinition {\n amount: string;\n currency: { code: string; symbol: string; decimals: number };\n asset: { symbol: string; network: string; address: string; decimals: number };\n payTo: string;\n resource?: string;\n description?: string;\n scheme: string;\n network: string;\n facilitator: X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport function createX402PaymentRequired(\n definition: X402PaymentDefinition\n): Response {\n const requirement = toX402Requirement(definition);\n\n // Build full payment requirements response\n const body = {\n schemaVersion: 1,\n message: definition.description ?? \"Payment required\",\n resource: definition.resource,\n accepts: [\n {\n id: \"x402\",\n title: `Pay ${definition.amount} ${definition.currency.code}`,\n description: definition.description,\n amount: {\n value: definition.amount,\n currency: {\n code: definition.currency.code,\n symbol: definition.currency.symbol,\n decimals: definition.currency.decimals,\n kind: \"crypto\",\n },\n },\n asset: {\n symbol: definition.asset.symbol,\n network: definition.asset.network,\n address: definition.asset.address,\n decimals: definition.asset.decimals,\n standard: \"erc20\",\n },\n payTo: definition.payTo,\n resource: definition.resource,\n proof: {\n mode: \"x402\",\n scheme: definition.scheme,\n network: definition.network,\n version: X402_VERSION,\n facilitator: definition.facilitator,\n verifier: \"x402:facilitator\",\n },\n },\n ],\n metadata: definition.metadata ?? {},\n x402: {\n x402Version: X402_VERSION,\n error: definition.description ?? \"Payment required\",\n accepts: [requirement],\n },\n };\n\n return new Response(JSON.stringify(body), {\n status: 402,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nexport function extractX402Attempt(request: Request): X402PaymentAttempt | null {\n const raw = request.headers.get(HEADER_X402);\n if (!raw) {\n return null;\n }\n\n try {\n const payload = decodeJson(raw, x402PaymentHeaderSchema);\n return {\n type: \"x402\",\n headerName: HEADER_X402,\n raw,\n payload,\n };\n } catch {\n return null;\n }\n}\n\nexport async function verifyX402Payment(\n attempt: X402PaymentAttempt,\n definition: X402PaymentDefinition,\n options: {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n timeout?: number;\n } = {}\n): Promise<X402VerificationResult> {\n const fetchImpl = options.fetchImpl ?? fetch;\n const timeout = options.timeout ?? 25000; // 25 second default timeout\n const facilitator = definition.facilitator;\n\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n const requirement = toX402Requirement(definition);\n const headers = buildFacilitatorHeaders(facilitator);\n\n try {\n const verifyBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /verify\", {\n url: verifierUrl,\n fullBody: JSON.stringify(verifyBody, null, 2)\n });\n const verifyResponse = await Promise.race([\n fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(verifyBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Verification timeout after ${timeout}ms`)), timeout)\n ),\n ]);\n console.log(\"[x402] Facilitator /verify response\", { status: verifyResponse.status });\n\n if (!verifyResponse.ok) {\n const errorText = await verifyResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /verify error\", { status: verifyResponse.status, body: errorText });\n return {\n success: false,\n failure: {\n reason: `Facilitator verify request failed: ${verifyResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"verification_failed\",\n },\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n failure: {\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n },\n };\n }\n\n const responseHeaders: Record<string, string> = {};\n if (options.settle) {\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url)\n ).toString();\n\n try {\n const settleBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /settle\", {\n url: settleUrl,\n bodyPreview: JSON.stringify(settleBody).substring(0, 300)\n });\n const settleResponse = await Promise.race([\n fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(settleBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Settlement timeout after ${timeout}ms`)), timeout)\n ),\n ]);\n console.log(\"[x402] Facilitator /settle response\", { status: settleResponse.status });\n\n if (!settleResponse.ok) {\n const errorText = await settleResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /settle error\", { status: settleResponse.status, body: errorText });\n return {\n success: false,\n failure: {\n reason: `Facilitator settlement failed: ${settleResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"settlement_failed\",\n },\n };\n }\n\n const settlePayload = (await settleResponse.json()) as {\n txHash?: string;\n [key: string]: unknown;\n };\n console.log(\"[x402] Facilitator /settle success\", { txHash: settlePayload.txHash });\n if (settlePayload.txHash) {\n responseHeaders[HEADER_PAYMENT_RESPONSE] = JSON.stringify({\n settled: true,\n txHash: settlePayload.txHash,\n });\n }\n } catch (error) {\n console.error(\"[x402] Settlement exception\", { error: error instanceof Error ? error.message : String(error) });\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Settlement failed\",\n code: \"settlement_failed\",\n },\n };\n }\n }\n\n const result: X402VerificationResult = {\n success: true,\n metadata: {\n optionId: \"x402\",\n verifier: \"x402:facilitator\",\n amount: definition.amount,\n currency: definition.currency.code,\n network: definition.network,\n },\n };\n\n if (Object.keys(responseHeaders).length > 0) {\n result.responseHeaders = responseHeaders;\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Unknown error\",\n code: \"verification_failed\",\n },\n };\n }\n}\n\nfunction toX402Requirement(definition: X402PaymentDefinition): X402Requirement {\n const decimals = definition.asset.decimals;\n const units = decimalToBaseUnits(definition.amount, decimals);\n\n return x402RequirementSchema.parse({\n scheme: definition.scheme,\n network: definition.network,\n maxAmountRequired: units,\n asset: definition.asset.address,\n payTo: definition.payTo,\n resource: definition.resource,\n description: definition.description,\n mimeType: \"application/json\",\n maxTimeoutSeconds: 900,\n extra: {\n symbol: definition.asset.symbol,\n currencyCode: definition.currency.code,\n decimals,\n },\n });\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nfunction buildFacilitatorHeaders(facilitator: X402FacilitatorConfig): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (facilitator.apiKeyHeader && process.env.X402_FACILITATOR_API_KEY) {\n headers[facilitator.apiKeyHeader] = process.env.X402_FACILITATOR_API_KEY;\n }\n return headers;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nexport const PAYMENT_HEADERS = [HEADER_X402, HEADER_PAYMENT_RESPONSE] as const;\n","import {\n createX402PaymentRequired,\n extractX402Attempt,\n verifyX402Payment,\n PAYMENT_HEADERS,\n type X402PaymentDefinition,\n} from \"./helpers\";\nimport {\n SUPPORTED_CURRENCIES,\n DEFAULT_FACILITATOR,\n type X402FacilitatorConfig,\n type X402VerificationResult,\n type CurrencySpec,\n} from \"./types\";\n\nexport interface DefineX402PaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n network?: string;\n assetAddress?: string;\n scheme?: \"exact\" | \"bounded\";\n facilitator?: string | X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport interface X402Payment {\n definition: X402PaymentDefinition;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequireX402PaymentOptions {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n onFailure?: (result: X402VerificationResult) => Response;\n}\n\nexport interface RequireX402PaymentSuccess {\n payment: {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n };\n headers: Record<string, string>;\n result: X402VerificationResult;\n}\n\nexport type RequireX402PaymentOutcome = Response | RequireX402PaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.x402.context\");\n\nexport class X402PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: X402VerificationResult | undefined;\n\n constructor(response: Response, verification?: X402VerificationResult) {\n super(\"X402 Payment required\");\n this.name = \"X402PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type X402PaymentContext = RequireX402PaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: X402PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getX402PaymentContext(\n request: Request\n): X402PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nexport function defineX402Payment(config: DefineX402PaymentConfig): X402Payment {\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n\n if (!currencySpec) {\n throw new Error(`Unsupported currency for x402 payments: ${currencyCode}`);\n }\n\n const network = config.network ?? currencySpec.network;\n const assetAddress = config.assetAddress ?? currencySpec.assetAddress;\n\n if (!network || !assetAddress) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\"\n );\n }\n\n const facilitator = resolveFacilitator(config.facilitator);\n const value = toDecimalString(config.amount);\n\n const definition: X402PaymentDefinition = {\n amount: value,\n currency: {\n code: currencyCode,\n symbol: currencySpec.symbol,\n decimals: currencySpec.decimals,\n },\n asset: {\n symbol: currencySpec.symbol,\n network,\n address: assetAddress,\n decimals: currencySpec.decimals,\n },\n payTo: config.payTo,\n scheme: config.scheme ?? \"exact\",\n network,\n facilitator,\n };\n\n if (config.resource) {\n definition.resource = config.resource;\n }\n if (config.message) {\n definition.description = config.message;\n }\n if (config.metadata) {\n definition.metadata = config.metadata;\n }\n\n const baseMetadata: Record<string, unknown> = {\n amountUSDC: currencyCode === \"USDC\" ? Number(value) : undefined,\n facilitator: \"x402rs\",\n network,\n };\n\n const metadata = config.metadata\n ? { ...baseMetadata, ...config.metadata }\n : baseMetadata;\n\n return {\n definition,\n metadata,\n };\n}\n\nexport async function requireX402Payment(\n request: Request,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): Promise<RequireX402PaymentOutcome> {\n const definition = isX402Payment(payment) ? payment.definition : payment;\n\n const attempt = extractX402Attempt(request);\n if (!attempt) {\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response);\n }\n\n const verifyOptions: Parameters<typeof verifyX402Payment>[2] = {\n settle: options.settle !== undefined ? options.settle : true,\n };\n if (options.fetchImpl !== undefined) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyX402Payment(attempt, definition, verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata as {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n },\n headers: verification.responseHeaders ?? {},\n result: verification,\n };\n}\n\nexport function withX402Payment(\n handler: (request: Request) => Promise<Response> | Response,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {}\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requireX402Payment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nfunction applyPaymentHeaders(\n response: Response,\n headers: Record<string, string>\n): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nfunction isX402Payment(value: unknown): value is X402Payment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as X402Payment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: string | X402FacilitatorConfig | undefined\n): X402FacilitatorConfig {\n if (!value) {\n return DEFAULT_FACILITATOR;\n }\n if (typeof value === \"string\") {\n return { ...DEFAULT_FACILITATOR, url: value };\n }\n return value;\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nexport { PAYMENT_HEADERS };\nexport type { X402PaymentDefinition, X402VerificationResult, X402FacilitatorConfig, CurrencySpec };\nexport { SUPPORTED_CURRENCIES, DEFAULT_FACILITATOR };\nexport {\n X402Client,\n payX402,\n X402BrowserClient,\n payX402WithWallet,\n type X402ClientConfig,\n type X402PayRequest,\n type X402PayResult,\n type X402BrowserClientConfig,\n type EIP3009Authorization,\n} from \"./client\";\n","import { z, type ZodSchema } from \"zod\";\nimport { X402PaymentRequiredError } from \"../x402/index\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(\n `Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`\n );\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof X402PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\"\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { ToolCategory, ToolProfile } from \"./tool\";\nimport type { X402Payment } from \"../x402/index\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport type ScheduleType = \"cron\" | \"rate\";\n\nexport interface NormalizedSchedule {\n type: ScheduleType;\n expression: string;\n authoredEnabled?: boolean;\n notifyEmail?: boolean;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: X402Payment | null;\n schedule?: NormalizedSchedule | null;\n notifyEmail?: boolean;\n profile?: ToolProfile | null;\n profileDescription?: string | null;\n profileCategory?: ToolCategory;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type { Tool, ToolMetadataOverrides, Metadata, BuildMetadata, PaymentConfig } from \"./metadata\";\n","import { NormalizedSchedule } from \"../types/index\";\n\nconst CRON_WRAPPED_REGEX = /^cron\\((.*)\\)$/i;\nconst CRON_TOKEN_REGEX = /^[A-Za-z0-9*?/,\\-#L]+$/;\n\nexport function normalizeScheduleExpression(raw: string, context: string): NormalizedSchedule {\n const value = raw?.trim();\n if (!value) {\n throw new Error(`${context}: profile.schedule.cron must be a non-empty string`);\n }\n\n const cronBody = extractCronBody(value);\n const cronFields = cronBody.trim().split(/\\s+/).filter(Boolean);\n\n if (cronFields.length !== 5 && cronFields.length !== 6) {\n throw new Error(`${context}: cron expression must have 5 or 6 fields (got ${cronFields.length})`);\n }\n\n validateCronTokens(cronFields, context);\n\n return {\n type: \"cron\",\n expression: cronFields.join(\" \"),\n };\n}\n\nfunction extractCronBody(value: string): string {\n const cronMatch = CRON_WRAPPED_REGEX.exec(value);\n if (cronMatch) {\n return (cronMatch[1] ?? \"\").trim();\n }\n return value;\n}\n\nfunction validateCronTokens(fields: string[], context: string): void {\n fields.forEach((token, idx) => {\n if (!CRON_TOKEN_REGEX.test(token)) {\n throw new Error(`${context}: invalid cron token \"${token}\" at position ${idx + 1}`);\n }\n });\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { z, type ZodSchema } from \"zod\";\nimport { zodToJsonSchema, type JsonSchema7Type } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type NormalizedSchedule,\n} from \"../types/index\";\nimport { Metadata, ToolMetadataOverrides } from \"../types/metadata\";\nimport { withX402Payment, type X402Payment } from \"../x402/index\";\nimport { transpileWithEsbuild } from \"../utils/esbuild\";\nimport { importFresh, resolveCompiledPath } from \"../utils/module-loader\";\nimport { buildMetadataArtifact } from \"./shared/metadata\";\nimport { normalizeScheduleExpression } from \"../utils/schedule\";\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 // Enforce kebab-case filenames (tool key = filename)\n const kebabCase = /^[a-z0-9]+(?:-[a-z0-9]+)*\\.[a-z]+$/;\n for (const f of files) {\n if (!kebabCase.test(f)) {\n throw new Error(`Tool filename must be kebab-case: ${f}`);\n }\n }\n\n const entryPoints = files.map((file) => path.join(toolsDir, file));\n\n const { outDir, cleanup } = await transpileWithEsbuild({\n entryPoints,\n projectRoot,\n format: \"esm\",\n outDir: tempDir,\n bundle: true,\n external: [\"opentool\", \"opentool/*\"],\n });\n\n const tools: InternalToolDefinition[] = [];\n\n try {\n for (const file of files) {\n const compiledPath = resolveCompiledPath(outDir, file);\n if (!fs.existsSync(compiledPath)) {\n throw new Error(`Failed to compile ${file}`);\n }\n\n const moduleExports = await importFresh(compiledPath);\n const toolModule = extractToolModule(moduleExports, file);\n\n const schema = ensureZodSchema(toolModule.schema, file);\n const paymentExport = toolModule.payment as X402Payment | undefined;\n const toolName =\n toolModule.metadata?.name ?? toolModule.metadata?.title ?? toBaseName(file);\n const inputSchemaRaw = schema ? toJsonSchema(toolName, schema) : undefined;\n const inputSchema = normalizeInputSchema(inputSchemaRaw);\n\n const httpHandlersRaw = collectHttpHandlers(toolModule, file);\n // Enforce strict authoring rules: exactly one of GET or POST\n const hasGET = typeof (toolModule as any).GET === \"function\";\n const hasPOST = typeof (toolModule as any).POST === \"function\";\n const otherMethods = HTTP_METHODS.filter((m) => m !== \"GET\" && m !== \"POST\").filter(\n (m) => typeof (toolModule as any)[m] === \"function\"\n );\n if (otherMethods.length > 0) {\n throw new Error(\n `${file} must not export ${otherMethods.join(\", \")}. Only one of GET or POST is allowed.`\n );\n }\n if (hasGET === hasPOST) {\n throw new Error(`${file}: export exactly one of GET or POST`);\n }\n\n let normalizedSchedule: NormalizedSchedule | null = null;\n const schedule = (toolModule as any)?.profile?.schedule;\n const profileNotifyEmail =\n typeof (toolModule as any)?.profile?.notifyEmail === \"boolean\"\n ? (toolModule as any).profile.notifyEmail\n : undefined;\n const profileCategoryRaw =\n typeof (toolModule as any)?.profile?.category === \"string\"\n ? (toolModule as any).profile.category\n : undefined;\n const allowedProfileCategories = new Set([\"strategy\", \"tracker\", \"orchestrator\"]);\n if (profileCategoryRaw && !allowedProfileCategories.has(profileCategoryRaw)) {\n throw new Error(\n `${file}: profile.category must be one of ${Array.from(allowedProfileCategories).join(\", \")}`\n );\n }\n const profileAssetsRaw = (toolModule as any)?.profile?.assets;\n if (profileAssetsRaw !== undefined) {\n if (!Array.isArray(profileAssetsRaw)) {\n throw new Error(`${file}: profile.assets must be an array.`);\n }\n profileAssetsRaw.forEach((entry, index) => {\n if (!entry || typeof entry !== \"object\") {\n throw new Error(\n `${file}: profile.assets[${index}] must be an object.`\n );\n }\n const record = entry as Record<string, unknown>;\n const venue = typeof record.venue === \"string\" ? record.venue.trim() : \"\";\n if (!venue) {\n throw new Error(\n `${file}: profile.assets[${index}].venue must be a non-empty string.`\n );\n }\n const chain = record.chain;\n if (typeof chain !== \"string\" && typeof chain !== \"number\") {\n throw new Error(\n `${file}: profile.assets[${index}].chain must be a string or number.`\n );\n }\n const symbols = record.assetSymbols;\n if (!Array.isArray(symbols) || symbols.length === 0) {\n throw new Error(\n `${file}: profile.assets[${index}].assetSymbols must be a non-empty array.`\n );\n }\n const invalidSymbol = symbols.find(\n (symbol) =>\n typeof symbol !== \"string\" || symbol.trim().length === 0\n );\n if (invalidSymbol !== undefined) {\n throw new Error(\n `${file}: profile.assets[${index}].assetSymbols must be non-empty strings.`\n );\n }\n const walletAddress = record.walletAddress;\n if (\n walletAddress !== undefined &&\n (typeof walletAddress !== \"string\" || walletAddress.trim().length === 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].walletAddress must be a non-empty string when provided.`\n );\n }\n const pair = record.pair;\n if (\n pair !== undefined &&\n (typeof pair !== \"string\" || pair.trim().length === 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].pair must be a non-empty string when provided.`\n );\n }\n const leverage = record.leverage;\n if (\n leverage !== undefined &&\n (typeof leverage !== \"number\" || !Number.isFinite(leverage) || leverage <= 0)\n ) {\n throw new Error(\n `${file}: profile.assets[${index}].leverage must be a positive number when provided.`\n );\n }\n });\n }\n const templateConfigRaw = (toolModule as any)?.profile?.templateConfig;\n if (templateConfigRaw !== undefined) {\n if (!templateConfigRaw || typeof templateConfigRaw !== \"object\") {\n throw new Error(`${file}: profile.templateConfig must be an object.`);\n }\n const record = templateConfigRaw as Record<string, unknown>;\n const version = record.version;\n if (\n typeof version !== \"string\" &&\n typeof version !== \"number\"\n ) {\n throw new Error(\n `${file}: profile.templateConfig.version must be a string or number.`\n );\n }\n const schema = record.schema;\n if (\n schema !== undefined &&\n (!schema || typeof schema !== \"object\" || Array.isArray(schema))\n ) {\n throw new Error(\n `${file}: profile.templateConfig.schema must be an object when provided.`\n );\n }\n const defaults = record.defaults;\n if (\n defaults !== undefined &&\n (!defaults || typeof defaults !== \"object\" || Array.isArray(defaults))\n ) {\n throw new Error(\n `${file}: profile.templateConfig.defaults must be an object when provided.`\n );\n }\n const envVar = record.envVar;\n if (\n envVar !== undefined &&\n (typeof envVar !== \"string\" || envVar.trim().length === 0)\n ) {\n throw new Error(\n `${file}: profile.templateConfig.envVar must be a non-empty string when provided.`\n );\n }\n }\n if (hasGET && schedule && typeof schedule.cron === \"string\" && schedule.cron.trim().length > 0) {\n normalizedSchedule = normalizeScheduleExpression(schedule.cron, file);\n if (typeof schedule.enabled === \"boolean\") {\n normalizedSchedule.authoredEnabled = schedule.enabled;\n }\n if (typeof schedule.notifyEmail === \"boolean\") {\n normalizedSchedule.notifyEmail = schedule.notifyEmail;\n }\n }\n if (hasPOST) {\n if (!schema) {\n throw new Error(`${file}: POST tools must export a Zod schema as 'schema'`);\n }\n if (schedule && typeof schedule.cron === \"string\") {\n throw new Error(`${file}: POST tools must not define profile.schedule; use GET + cron for scheduled tasks.`);\n }\n }\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n throw new Error(\n `${file} must export at least one HTTP handler (e.g. POST)`\n );\n }\n\n if (paymentExport) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, paymentExport),\n };\n }\n }\n\n const httpHandlerMap = toHttpHandlerMap(httpHandlers);\n const defaultMethod =\n typeof toolModule.mcp?.defaultMethod === \"string\"\n ? toolModule.mcp.defaultMethod\n : undefined;\n\n const adapter = createMcpAdapter({\n name: toolName,\n httpHandlers: httpHandlerMap,\n ...(defaultMethod ? { defaultMethod } : {}),\n ...(schema ? { schema } : {}),\n });\n\n let metadataOverrides: ToolMetadataOverrides | null =\n toolModule.metadata ?? null;\n\n if (paymentExport) {\n if (metadataOverrides) {\n metadataOverrides = {\n ...metadataOverrides,\n payment: metadataOverrides.payment ?? (paymentExport as any),\n annotations: {\n ...(metadataOverrides.annotations ?? {}),\n requiresPayment:\n metadataOverrides.annotations?.requiresPayment ?? true,\n },\n };\n } else {\n metadataOverrides = {\n payment: paymentExport as any,\n annotations: { requiresPayment: true },\n } as ToolMetadataOverrides;\n }\n }\n\n const tool: InternalToolDefinition = {\n schema: schema ?? undefined,\n inputSchema,\n metadata: metadataOverrides,\n httpHandlers,\n mcpConfig: normalizeMcpConfig(toolModule.mcp, file),\n filename: toBaseName(file),\n sourcePath: path.join(toolsDir, file),\n handler: async (params: unknown) => adapter(params),\n payment: paymentExport ?? null,\n schedule: normalizedSchedule,\n profile:\n (toolModule as any)?.profile && typeof (toolModule as any).profile === \"object\"\n ? (toolModule as any).profile\n : null,\n ...(profileNotifyEmail !== undefined ? { notifyEmail: profileNotifyEmail } : {}),\n profileDescription:\n typeof (toolModule as any)?.profile?.description === \"string\"\n ? toolModule.profile?.description ?? null\n : null,\n ...(profileCategoryRaw ? { profileCategory: profileCategoryRaw } : {}),\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 toolsManifestPath: string | null;\n sharedModules?: SharedModulesInfo | 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\ninterface ToolsManifestEntry {\n name: string;\n method: string;\n inputSchema?: unknown;\n profile?: Record<string, unknown> | null;\n schedule?: InternalToolDefinition[\"schedule\"] | null;\n toolPath: string;\n}\n\ninterface SharedModulesInfo {\n count: number;\n outputDir: 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 sharedModules = await emitSharedModules({\n projectRoot,\n outputDir,\n });\n\n const toolsManifestPath = await writeToolsManifest({\n tools,\n compiledTools,\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 toolsManifestPath,\n sharedModules,\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 EmitSharedModulesConfig {\n projectRoot: string;\n outputDir: string;\n}\n\nasync function emitSharedModules(\n config: EmitSharedModulesConfig\n): Promise<SharedModulesInfo | null> {\n const srcDir = path.join(config.projectRoot, \"src\");\n if (!fs.existsSync(srcDir)) {\n return null;\n }\n\n const sharedFiles = collectSourceFiles(srcDir);\n if (sharedFiles.length === 0) {\n return null;\n }\n\n const sharedOutDir = path.join(config.outputDir, \"src\");\n\n await transpileWithEsbuild({\n entryPoints: sharedFiles,\n projectRoot: config.projectRoot,\n outDir: sharedOutDir,\n outBase: srcDir,\n format: \"cjs\",\n bundle: false,\n logLevel: \"warning\",\n });\n\n return { count: sharedFiles.length, outputDir: sharedOutDir };\n}\n\nfunction collectSourceFiles(dir: string): string[] {\n const supported = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\"]);\n const results: string[] = [];\n const ignoreDirs = new Set([\"node_modules\", \".git\", \"dist\", \".opentool-temp\"]);\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (ignoreDirs.has(entry.name)) {\n continue;\n }\n results.push(...collectSourceFiles(fullPath));\n continue;\n }\n\n const ext = path.extname(entry.name);\n if (supported.has(ext) && !entry.name.endsWith(\".d.ts\")) {\n results.push(fullPath);\n }\n }\n\n return results;\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 writeToolsManifest(options: {\n tools: InternalToolDefinition[];\n compiledTools: CompiledToolArtifact[];\n outputDir: string;\n}): string | null {\n const manifestPath = path.join(options.outputDir, \"tools.json\");\n const legacyManifestPath = path.join(\n options.outputDir,\n \".well-known\",\n \"opentool\",\n \"cron.json\"\n );\n if (fs.existsSync(legacyManifestPath)) {\n fs.rmSync(legacyManifestPath, { force: true });\n }\n const entries: ToolsManifestEntry[] = options.tools.map((tool) => {\n const compiled = options.compiledTools.find(\n (artifact) => artifact.filename === tool.filename\n );\n if (!compiled) {\n throw new Error(`Internal error: missing compiled artifact for ${tool.filename}`);\n }\n\n const handler = tool.httpHandlers[0];\n const method = handler ? handler.method.toUpperCase() : \"GET\";\n const toolPath = compiled.modulePath.replace(/\\\\/g, \"/\");\n\n const entry: ToolsManifestEntry = {\n name: tool.metadata?.name ?? tool.filename,\n method,\n toolPath,\n };\n\n if (tool.inputSchema) {\n entry.inputSchema = tool.inputSchema;\n }\n if (tool.profile) {\n entry.profile = tool.profile as Record<string, unknown>;\n }\n if (tool.schedule) {\n entry.schedule = tool.schedule;\n }\n\n return entry;\n });\n\n fs.writeFileSync(manifestPath, JSON.stringify(entries, null, 2));\n return manifestPath;\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 if (artifacts.sharedModules) {\n console.log(\n ` ⢠src/ (${artifacts.sharedModules.count} shared module${\n artifacts.sharedModules.count === 1 ? \"\" : \"s\"\n } compiled)`\n );\n }\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.toolsManifestPath) {\n console.log(\" ⢠tools.json (runtime tool manifest)\");\n }\n if (artifacts.workflowBundles) {\n console.log(\" ⢠.well-known/workflow/v1/ (workflow bundles)\");\n console.log(\" - flow.js\");\n console.log(\" - step.js\");\n console.log(\" - webhook.js\");\n if (artifacts.workflowBundles.clientBundlePath) {\n console.log(\" - client.js\");\n }\n if (artifacts.workflowBundles.manifestPath) {\n console.log(\" - manifest.json\");\n }\n }\n if (artifacts.defaultsApplied.length > 0) {\n console.log(\"\\nDefaults applied during metadata synthesis:\");\n artifacts.defaultsApplied.forEach((entry) => console.log(` ⢠${entry}`));\n }\n\n if (!hasMcp) {\n console.log(\"\\nā¹ļø MCP adapter skipped (no tools opted in)\");\n }\n}\n\ninterface WorkflowBuildOptions {\n projectRoot: string;\n outputDir: string;\n workflowsDir?: string;\n}\n\nasync function buildWorkflowsIfPresent(\n options: WorkflowBuildOptions\n): Promise<WorkflowBundleArtifact | null> {\n const workflowsDir =\n options.workflowsDir ?? path.join(options.projectRoot, \"workflows\");\n\n if (!fs.existsSync(workflowsDir)) {\n return null;\n }\n\n if (!hasWorkflowSourceFiles(workflowsDir)) {\n return null;\n }\n\n const nodeVersion = process.versions?.node ?? \"0.0.0\";\n const nodeMajor = Number(nodeVersion.split(\".\")[0] ?? 0);\n\n if (!Number.isFinite(nodeMajor) || nodeMajor < 22) {\n console.warn(\n `[${timestamp()}] Workflow bundles skipped (requires Node >= 22, current ${nodeVersion})`\n );\n return null;\n }\n\n type WorkflowBaseBuilderCtor = new (config: any) => {\n config: any;\n getInputFiles(): Promise<string[]>;\n getTsConfigOptions(): Promise<{\n baseUrl?: string;\n paths?: Record<string, string[]>;\n }>;\n createStepsBundle(options: any): Promise<void>;\n createWorkflowsBundle(options: any): Promise<void>;\n createWebhookBundle(options: any): Promise<void>;\n };\n\n let BaseBuilder: WorkflowBaseBuilderCtor;\n try {\n ({ BaseBuilder } = (await import(\n \"@workflow/cli/dist/lib/builders/base-builder.js\"\n )) as { BaseBuilder: WorkflowBaseBuilderCtor });\n } catch (error) {\n const details =\n error instanceof Error ? `\\nReason: ${error.message}` : \"\";\n throw new Error(\n `[${timestamp()}] Workflow sources detected, but optional dependency ` +\n \"'@workflow/cli' is not installed. Install it with \\\"npm install \" +\n \"@workflow/cli\\\" (or add it to devDependencies) and rerun the build.\" +\n details\n );\n }\n\n class OpenToolWorkflowBuilder extends BaseBuilder {\n constructor(config: ConstructorParameters<WorkflowBaseBuilderCtor>[0]) {\n super(config);\n }\n\n async build(): Promise<void> {\n const inputFiles = await this.getInputFiles();\n const tsConfig = await this.getTsConfigOptions();\n const shared: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n } = {\n inputFiles,\n ...(tsConfig.baseUrl ? { tsBaseUrl: tsConfig.baseUrl } : {}),\n ...(tsConfig.paths ? { tsPaths: tsConfig.paths } : {}),\n };\n\n await this.buildStepsBundle(shared);\n await this.buildWorkflowsBundle(shared);\n await this.buildWebhookRoute();\n await this.buildClientLibrary();\n }\n\n private async buildStepsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow steps bundle at\",\n this.config.stepsBundlePath\n );\n const stepsBundlePath = path.resolve(\n this.config.workingDir,\n this.config.stepsBundlePath\n );\n await fs.promises.mkdir(path.dirname(stepsBundlePath), { recursive: true });\n await this.createStepsBundle({\n outfile: stepsBundlePath,\n ...options,\n });\n }\n\n private async buildWorkflowsBundle(\n options: {\n inputFiles: string[];\n tsBaseUrl?: string;\n tsPaths?: Record<string, string[]>;\n }\n ): Promise<void> {\n console.log(\n \"Creating OpenTool workflow bundle at\",\n this.config.workflowsBundlePath\n );\n const workflowBundlePath = path.resolve(\n this.config.workingDir,\n this.config.workflowsBundlePath\n );\n await fs.promises.mkdir(path.dirname(workflowBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: workflowBundlePath,\n bundleFinalOutput: false,\n ...options,\n });\n }\n\n private async buildWebhookRoute(): Promise<void> {\n console.log(\n \"Creating OpenTool workflow webhook bundle at\",\n this.config.webhookBundlePath\n );\n const webhookBundlePath = path.resolve(\n this.config.workingDir,\n this.config.webhookBundlePath\n );\n await fs.promises.mkdir(path.dirname(webhookBundlePath), {\n recursive: true,\n });\n await this.createWebhookBundle({ outfile: webhookBundlePath });\n }\n\n private async buildClientLibrary(): Promise<void> {\n if (!this.config?.clientBundlePath) {\n return;\n }\n\n // Workflow CLI normally emits a client bundle for UI tooling. OpenTool\n // currently doesn't surface it, but we keep the hook to remain compatible\n // with future versions.\n const clientBundlePath = path.resolve(\n this.config.workingDir,\n this.config.clientBundlePath\n );\n await fs.promises.mkdir(path.dirname(clientBundlePath), {\n recursive: true,\n });\n await this.createWorkflowsBundle({\n outfile: clientBundlePath,\n bundleFinalOutput: true,\n });\n }\n }\n\n const relativeSourceDir = path.relative(options.projectRoot, workflowsDir) || \".\";\n const outputBase = path.join(\n options.outputDir,\n \".well-known\",\n \"workflow\",\n \"v1\"\n );\n\n const stepsBundlePath = path.join(outputBase, \"step.js\");\n const workflowsBundlePath = path.join(outputBase, \"flow.js\");\n const webhookBundlePath = path.join(outputBase, \"webhook.js\");\n const clientBundlePath: string | undefined = undefined;\n const manifestPath = path.join(outputBase, \"manifest.json\");\n\n const builder = new OpenToolWorkflowBuilder({\n workingDir: options.projectRoot,\n dirs: [relativeSourceDir],\n buildTarget: \"standalone\",\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n workflowManifestPath: manifestPath,\n externalPackages: [\n \"workflow\",\n \"workflow/internal/builtins\",\n \"workflow/internal/private\",\n \"workflow/runtime\",\n \"workflow/api\",\n ],\n });\n\n console.log(\n `[${timestamp()}] Building workflows from ${workflowsDir} -> ${outputBase}`\n );\n\n await builder.build();\n\n return {\n sourceDir: workflowsDir,\n outputDir: outputBase,\n stepsBundlePath,\n workflowsBundlePath,\n webhookBundlePath,\n ...(clientBundlePath ? { clientBundlePath } : {}),\n manifestPath,\n };\n}\n\nfunction hasWorkflowSourceFiles(directory: string): boolean {\n const entries = fs.readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (hasWorkflowSourceFiles(path.join(directory, entry.name))) {\n return true;\n }\n continue;\n }\n\n if (entry.isFile()) {\n const extension = path.extname(entry.name).toLowerCase();\n if (WORKFLOW_SOURCE_EXTENSIONS.has(extension)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nconst WORKFLOW_SOURCE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n]);\n\nfunction timestamp(): string {\n return new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n\nfunction escapeForJs(value: string): string {\n return value.replace(/'/g, \"\\\\'\");\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createMcpAdapter } from \"../adapters/mcp\";\nimport { X402PaymentRequiredError } from \"../x402/index\";\nimport {\n HTTP_METHODS,\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n} from \"../types/index\";\nimport { loadAndValidateTools } from \"./validate\";\nimport dotenv from \"dotenv\";\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 loadEnvFiles(projectRoot);\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 X402PaymentRequiredError) {\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\nfunction loadEnvFiles(projectRoot: string): void {\n const envFiles = [\".env.local\", \".env\"];\n for (const file of envFiles) {\n const candidate = path.join(projectRoot, file);\n if (fs.existsSync(candidate)) {\n dotenv.config({ path: candidate, override: false });\n }\n }\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","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype InitOptions = {\n dir?: string;\n name?: string;\n description?: string;\n force?: boolean;\n};\n\nfunction resolveTemplateDir(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n return path.resolve(here, \"../../templates/base\");\n}\n\nasync function directoryIsEmpty(targetDir: string): Promise<boolean> {\n try {\n const entries = await fs.readdir(targetDir);\n return entries.length === 0;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return true;\n }\n throw error;\n }\n}\n\nasync function copyDir(src: string, dest: string) {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nfunction toPackageName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"opentool-project\";\n}\n\nfunction toDisplayName(value: string): string {\n return value\n .trim()\n .replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (ch) => ch.toUpperCase()) || \"OpenTool Project\";\n}\n\nasync function updatePackageJson(\n targetDir: string,\n name: string,\n description?: string\n) {\n const filePath = path.join(targetDir, \"package.json\");\n const raw = await fs.readFile(filePath, \"utf-8\");\n const pkg = JSON.parse(raw) as Record<string, unknown>;\n pkg.name = toPackageName(name);\n if (description) {\n pkg.description = description;\n }\n await fs.writeFile(filePath, `${JSON.stringify(pkg, null, 2)}\\n`, \"utf-8\");\n}\n\nasync function updateMetadata(\n targetDir: string,\n name: string,\n description?: string\n) {\n const filePath = path.join(targetDir, \"metadata.ts\");\n const raw = await fs.readFile(filePath, \"utf-8\");\n const displayName = toDisplayName(name);\n const resolvedDescription = description || \"OpenTool project\";\n const updated = raw\n .replace(/name:\\s*\\\".*?\\\"/, `name: \"${toPackageName(name)}\"`)\n .replace(/displayName:\\s*\\\".*?\\\"/, `displayName: \"${displayName}\"`)\n .replace(/description:\\s*\\\".*?\\\"/, `description: \"${resolvedDescription}\"`);\n await fs.writeFile(filePath, updated, \"utf-8\");\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const targetDir = path.resolve(process.cwd(), options.dir || \".\");\n const templateDir = resolveTemplateDir();\n const empty = await directoryIsEmpty(targetDir);\n\n if (!empty && !options.force) {\n throw new Error(\n `Directory not empty: ${targetDir}. Use --force to overwrite.`\n );\n }\n\n await copyDir(templateDir, targetDir);\n\n const projectName = options.name || path.basename(targetDir);\n const description = options.description;\n await updatePackageJson(targetDir, projectName, description);\n await updateMetadata(targetDir, projectName, description);\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 { initCommand } from \"./init\";\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// Init command\nprogram\n .command(\"init\")\n .description(\"Create a new OpenTool project in the target directory\")\n .option(\"-d, --dir <dir>\", \"Target directory\", \".\")\n .option(\"-n, --name <name>\", \"Project name\")\n .option(\"--description <description>\", \"Project description\")\n .option(\"--force\", \"Overwrite existing files\", false)\n .action(async (cmdOptions) => {\n await initCommand({\n dir: cmdOptions.dir,\n name: cmdOptions.name,\n description: cmdOptions.description,\n force: cmdOptions.force,\n });\n console.log(`Initialized OpenTool project in ${cmdOptions.dir || \".\"}`);\n });\n\n// Parse arguments\nprogram.parse();\n\nexport * from \"./build\";\nexport * from \"./dev\";\nexport * from \"./generate-metadata\";\nexport * from \"./validate\";\n"]}
|