lane-sdk 0.2.2 → 0.2.8
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.
Potentially problematic release.
This version of lane-sdk might be problematic. Click here for more details.
- package/SKILL.md +24 -0
- package/dist/adapters/crewai/index.cjs +36 -4
- package/dist/adapters/crewai/index.cjs.map +1 -1
- package/dist/adapters/crewai/index.js +36 -4
- package/dist/adapters/crewai/index.js.map +1 -1
- package/dist/adapters/langchain/index.cjs +36 -4
- package/dist/adapters/langchain/index.cjs.map +1 -1
- package/dist/adapters/langchain/index.js +36 -4
- package/dist/adapters/langchain/index.js.map +1 -1
- package/dist/adapters/openai/index.cjs +36 -4
- package/dist/adapters/openai/index.cjs.map +1 -1
- package/dist/adapters/openai/index.js +36 -4
- package/dist/adapters/openai/index.js.map +1 -1
- package/dist/adapters/vercel-ai/index.cjs +36 -4
- package/dist/adapters/vercel-ai/index.cjs.map +1 -1
- package/dist/adapters/vercel-ai/index.js +36 -4
- package/dist/adapters/vercel-ai/index.js.map +1 -1
- package/dist/cli/index.js +214 -40
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +36 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +36 -4
- package/dist/index.js.map +1 -1
- package/dist/server/routes/export.cjs +2 -4
- package/dist/server/routes/export.cjs.map +1 -1
- package/dist/server/routes/export.js +2 -4
- package/dist/server/routes/export.js.map +1 -1
- package/dist/server/vic-demo.js +1052 -0
- package/dist/server/vic-demo.js.map +1 -0
- package/dist/server-http.cjs +36 -4
- package/dist/server-http.cjs.map +1 -1
- package/dist/server-http.js +36 -4
- package/dist/server-http.js.map +1 -1
- package/dist/server-stdio.cjs +36 -4
- package/dist/server-stdio.cjs.map +1 -1
- package/dist/server-stdio.js +36 -4
- package/dist/server-stdio.js.map +1 -1
- package/package.json +6 -3
- package/dist/server/routes/export.d.cts +0 -10
- package/dist/server/routes/export.d.ts +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapters/base.ts","../../../src/resources/agent-instructions.ts","../../../src/errors.ts","../../../src/mcp/tool.ts","../../../src/mcp/tools/get-lane-info.ts","../../../src/mcp/tools/lane-signup.ts","../../../src/crypto/signature.ts","../../../src/client.ts","../../../src/auth/token-store.ts","../../../src/config.ts","../../../src/resources/base.ts","../../../src/resources/auth.ts","../../../src/resources/wallets.ts","../../../src/resources/pay.ts","../../../src/resources/products.ts","../../../src/resources/checkout.ts","../../../src/resources/sell.ts","../../../src/resources/admin.ts","../../../src/resources/webhooks.ts","../../../src/resources/vic.ts","../../../src/resources/metering.ts","../../../src/resources/payouts.ts","../../../src/resources/teams.ts","../../../src/resources/agents.ts","../../../src/resources/audit.ts","../../../src/resources/identity.ts","../../../src/resources/subscriptions.ts","../../../src/resources/merchants.ts","../../../src/resources/cards.ts","../../../src/resources/instructions.ts","../../../src/resources/tokens.ts","../../../src/resources/transactions.ts","../../../src/resources/budgets.ts","../../../src/resources/users.ts","../../../src/resources/fleet.ts","../../../src/merchants/ucp-directory.ts","../../../src/resources/protocol.ts","../../../src/resources/mandates.ts","../../../src/resources/delegations.ts","../../../src/lane.ts","../../../src/mcp/tools/lane-connect.ts","../../../src/mcp/tools/lane-add-card.ts","../../../src/mcp/tools/whoami.ts","../../../src/mcp/tools/list-cards.ts","../../../src/mcp/tools/check-balance.ts","../../../src/auth/biometric.ts","../../../src/auth/confirmation.ts","../../../src/mcp/tools/pay.ts","../../../src/mcp/tools/list-transactions.ts","../../../src/mcp/tools/search-products.ts","../../../src/mcp/tools/checkout.ts","../../../src/mcp/tools/set-budget.ts","../../../src/mcp/tools/request-refund.ts","../../../src/mcp/tools/subscribe.ts","../../../src/mcp/tools/list-subscriptions.ts","../../../src/mcp/tools/search-software.ts","../../../src/mcp/tools/cancel-subscription.ts","../../../src/mcp/tools/discover-merchants.ts","../../../src/mcp/tools/lane-onboarding-status.ts","../../../src/mcp/tools/protocol-pay.ts","../../../src/mcp/tools/create-mandate.ts","../../../src/mcp/tools/pay-with-mandate.ts","../../../src/mcp/tools/get-mandate-budget.ts","../../../src/mcp/tools/get-instruction-budget.ts","../../../src/mcp/tools/register-agent.ts","../../../src/mcp/tools/list-agents.ts","../../../src/mcp/tools/provision-vic-payment.ts","../../../src/mcp/tools/resolve-ucp-merchant.ts","../../../src/mcp/tools/confirm-instruction.ts","../../../src/mcp/server.ts","../../../src/adapters/crewai/index.ts"],"names":["z","createHash","createHmac","timingSafeEqual","EventEmitter","randomUUID","join","homedir","readFile","writeFile","mkdir","stat","chmod","body","res","inputSchema","profile","DEFAULT_REUSE_WINDOW_SECONDS","byDomain","McpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { z } from 'zod';\nimport type { LaneTool } from '../mcp/tool.js';\n\n/**\n * Convert a Zod schema to JSON Schema (OpenAI-compatible format).\n * Handles common Zod types: object, string, number, boolean, array, enum, optional.\n */\nexport function zodToJsonSchema(schema: z.ZodType): Record<string, unknown> {\n // Implementation: walk the Zod schema tree and produce JSON Schema\n // Use (schema as any)._def to access the internal definition\n const def = (schema as any)._def;\n\n if (!def) {\n return { type: 'object' };\n }\n\n return convertZodDef(def);\n}\n\nfunction convertZodDef(def: any): Record<string, unknown> {\n const typeName = def.typeName;\n\n switch (typeName) {\n case 'ZodObject': {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n const shape = def.shape?.() ?? def.shape ?? {};\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldDef = (value as any)._def;\n if (fieldDef?.typeName === 'ZodOptional' || fieldDef?.typeName === 'ZodDefault') {\n properties[key] = convertZodDef(fieldDef.innerType?._def ?? fieldDef);\n } else {\n properties[key] = convertZodDef(fieldDef);\n required.push(key);\n }\n // Include description if present\n const desc = (value as any)._def?.description ?? (value as any).description;\n if (desc && typeof properties[key] === 'object') {\n (properties[key] as any).description = desc;\n }\n }\n\n const result: Record<string, unknown> = { type: 'object', properties };\n if (required.length > 0) result.required = required;\n return result;\n }\n case 'ZodString':\n return { type: 'string' };\n case 'ZodNumber':\n return { type: 'number' };\n case 'ZodBoolean':\n return { type: 'boolean' };\n case 'ZodArray':\n return { type: 'array', items: convertZodDef(def.type._def) };\n case 'ZodEnum':\n return { type: 'string', enum: def.values };\n case 'ZodOptional':\n return convertZodDef(def.innerType._def);\n case 'ZodDefault':\n return convertZodDef(def.innerType._def);\n case 'ZodRecord':\n return { type: 'object', additionalProperties: true };\n default:\n return { type: 'string' };\n }\n}\n\n/**\n * Generic wrapper that adapts a LaneTool for any framework.\n */\nexport function wrapLaneTool<T>(\n tool: LaneTool,\n formatter: (tool: LaneTool) => T,\n): T {\n return formatter(tool);\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP — Agent Instructions Resource\n// ---------------------------------------------------------------------------\n// Returns structured JSON for the `lane://instructions` MCP resource.\n// This is NOT the same as `src/resources/instructions.ts` (VIC instruction API).\n// ---------------------------------------------------------------------------\n\nexport interface LaneInstructions {\n role: string;\n whenToUse: string[];\n capabilities: string[];\n budgetRules: string[];\n merchantCategories: string[];\n exampleFlows: {\n name: string;\n steps: string[];\n }[];\n constraints: string[];\n}\n\n/**\n * Returns structured instructions for AI agents using Lane via MCP.\n *\n * Used by the `lane://instructions` MCP resource and the `--with-instructions` CLI flag.\n */\nexport function getLaneInstructions(): LaneInstructions {\n return {\n role: 'You are an AI agent with access to Lane, a payment wallet and infrastructure for AI agents. You can make payments, manage subscriptions, search for products, and handle spending on behalf of the user.',\n\n whenToUse: [\n 'The user asks you to pay for something, purchase a service, or subscribe to software',\n 'The user wants to check their spending, balance, or transaction history',\n 'The user needs to find a product, service, or merchant',\n 'The user wants to manage their payment cards or wallet',\n 'The user asks about Lane capabilities or wants to sign up',\n ],\n\n capabilities: [\n 'Execute payments to merchants and services',\n 'Subscribe to and manage SaaS products (Vercel, Supabase, GitHub, etc.)',\n 'Search a curated merchant directory for developer tools and cloud services',\n 'Set and enforce spending budgets (daily, weekly, monthly, per-task)',\n 'Add payment cards securely via PCI-compliant VGS-hosted forms',\n 'Track transactions and request refunds',\n 'Checkout with full cart support (multi-item orders)',\n ],\n\n budgetRules: [\n 'Always check the budget before making a payment with check_balance',\n 'If a payment would exceed the budget, inform the user and ask for confirmation',\n 'Suggest setting a budget if the user has not configured one yet',\n 'Budget limits are enforced server-side — you cannot bypass them',\n ],\n\n merchantCategories: [\n 'Cloud & Infrastructure (AWS, GCP, Azure, Vercel, Railway)',\n 'Developer Tools (GitHub, GitLab, Jetbrains, Postman)',\n 'AI & ML (OpenAI, Anthropic, Replicate, Hugging Face)',\n 'Data & Analytics (Snowflake, Databricks, Mixpanel)',\n 'Communication (Twilio, SendGrid, Resend)',\n 'Monitoring (Datadog, Sentry, PagerDuty)',\n ],\n\n exampleFlows: [\n {\n name: 'First-time setup',\n steps: [\n 'Call get_lane_info to learn about Lane',\n 'Call lane_signup to get a signup URL for the user',\n 'User signs up and provides their API key',\n 'Call lane_connect with the API key to authenticate',\n 'Call lane_add_card to securely add a payment card',\n 'Call set_budget to configure spending limits',\n 'Ready to make payments!',\n ],\n },\n {\n name: 'Make a payment',\n steps: [\n 'Call check_balance to verify budget availability',\n 'Call discover_merchants or search_products to find the merchant',\n 'Call pay with the merchant and amount',\n 'Confirm the transaction result to the user',\n ],\n },\n {\n name: 'Subscribe to SaaS',\n steps: [\n 'Call search_software to find the product',\n 'Call subscribe with the plan details',\n 'Confirm the subscription to the user',\n ],\n },\n ],\n\n constraints: [\n 'Never ask the user for their raw card number — always use lane_add_card for PCI-compliant card entry',\n 'Always confirm payment amounts with the user before executing pay or checkout',\n 'Do not store or log API keys — use lane_connect to pass them securely',\n 'If authentication fails, suggest the user check their API key or call lane_signup',\n 'Respect budget limits — do not attempt to circumvent server-side spending controls',\n ],\n };\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Error Hierarchy\n// ---------------------------------------------------------------------------\n// Every error is structured for agent consumption. Agents need codes,\n// categories, and suggested actions — not string messages.\n// ---------------------------------------------------------------------------\n\nexport interface LaneErrorOptions {\n code: string;\n statusCode: number;\n requestId?: string;\n retryable?: boolean;\n suggestedAction?: string;\n}\n\n/**\n * Base error class for all Lane SDK errors.\n *\n * Carries structured metadata so agents can make programmatic decisions\n * without parsing human-readable messages.\n */\nexport class LaneError extends Error {\n /** Machine-readable error code (e.g. 'budget_exceeded'). */\n readonly code: string;\n\n /** HTTP status code from the API (or synthetic for client-side errors). */\n readonly statusCode: number;\n\n /** Request ID for support and audit trail correlation. */\n readonly requestId: string;\n\n /** Whether the caller should retry this request. */\n readonly retryable: boolean;\n\n /** Human-readable suggestion for what the agent should do next. */\n readonly suggestedAction?: string;\n\n /** Executable suggestion for agents (e.g. \"lane.wallet.deposit(2000)\"). */\n fix?: string;\n\n /** Current state context for agent decision-making. */\n currentState?: Record<string, unknown>;\n\n constructor(message: string, options: LaneErrorOptions) {\n super(message);\n this.name = 'LaneError';\n this.code = options.code;\n this.statusCode = options.statusCode;\n this.requestId = options.requestId ?? 'unknown';\n this.retryable = options.retryable ?? false;\n this.suggestedAction = options.suggestedAction;\n\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /** Serialize to a plain object for structured logging / JSON responses. */\n toJSON(): Record<string, unknown> {\n const json: Record<string, unknown> = {\n name: this.name,\n message: this.message,\n code: this.code,\n statusCode: this.statusCode,\n requestId: this.requestId,\n retryable: this.retryable,\n suggestedAction: this.suggestedAction,\n };\n if (this.fix !== undefined) {\n json.fix = this.fix;\n }\n if (this.currentState !== undefined) {\n json.currentState = this.currentState;\n }\n return json;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Authentication Errors (401, 403)\n// ---------------------------------------------------------------------------\n\nexport class LaneAuthError extends LaneError {\n constructor(\n message: string,\n options: Omit<LaneErrorOptions, 'statusCode'> & { statusCode?: number },\n ) {\n super(message, { statusCode: 401, ...options });\n this.name = 'LaneAuthError';\n }\n\n static invalidApiKey(requestId?: string): LaneAuthError {\n return new LaneAuthError('Invalid API key. Check your key and try again.', {\n code: 'invalid_api_key',\n statusCode: 401,\n requestId,\n suggestedAction:\n 'Verify the API key is correct and has not been revoked. Check your API key in the Lane wallet settings.',\n });\n }\n\n static expiredToken(requestId?: string): LaneAuthError {\n return new LaneAuthError('Authentication token has expired.', {\n code: 'expired_token',\n statusCode: 401,\n requestId,\n suggestedAction: 'Re-authenticate by generating a new API key in the Lane wallet settings.',\n });\n }\n\n static insufficientScope(\n requiredScope: string,\n requestId?: string,\n ): LaneAuthError {\n return new LaneAuthError(\n `API key lacks required permission: ${requiredScope}`,\n {\n code: 'insufficient_scope',\n statusCode: 403,\n requestId,\n suggestedAction:\n 'Generate a new API key with the required permissions in the wallet settings.',\n },\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Payment Errors (402, 502)\n// ---------------------------------------------------------------------------\n\nexport class LanePaymentError extends LaneError {\n constructor(message: string, options: LaneErrorOptions) {\n super(message, options);\n this.name = 'LanePaymentError';\n }\n\n static declined(requestId?: string): LanePaymentError {\n return new LanePaymentError('Payment was declined by the card issuer.', {\n code: 'payment_declined',\n statusCode: 402,\n requestId,\n suggestedAction:\n 'The card was declined. Ask the developer to check their card or add a new one.',\n });\n }\n\n static insufficientFunds(currentBalance?: number, required?: number, requestId?: string): LanePaymentError {\n const error = new LanePaymentError('Insufficient wallet balance', {\n code: 'insufficient_funds',\n statusCode: 402,\n requestId,\n suggestedAction:\n 'Check wallet balance and deposit more funds',\n });\n if (currentBalance !== undefined && required !== undefined) {\n error.fix = `lane.wallet.deposit(${required - currentBalance})`;\n error.currentState = { balance: currentBalance, required };\n }\n return error;\n }\n\n static merchantUnavailable(\n merchant: string,\n requestId?: string,\n ): LanePaymentError {\n return new LanePaymentError(\n `Merchant \"${merchant}\" is temporarily unavailable.`,\n {\n code: 'merchant_unavailable',\n statusCode: 502,\n requestId,\n retryable: true,\n suggestedAction:\n 'The merchant endpoint is down. Try again in a few minutes or choose an alternative.',\n },\n );\n }\n\n static serviceError(requestId?: string): LanePaymentError {\n return new LanePaymentError(\n 'Payment service encountered an internal error.',\n {\n code: 'payment_service_error',\n statusCode: 502,\n requestId,\n retryable: true,\n suggestedAction:\n 'Payment service temporarily unavailable. Try again in a few minutes.',\n },\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Budget Errors (402)\n// ---------------------------------------------------------------------------\n\nexport class LaneBudgetError extends LaneError {\n /** The budget limit that was exceeded. */\n readonly limit: number;\n\n /** The amount that was requested. */\n readonly requested: number;\n\n constructor(\n message: string,\n options: LaneErrorOptions & { limit: number; requested: number },\n ) {\n super(message, options);\n this.name = 'LaneBudgetError';\n this.limit = options.limit;\n this.requested = options.requested;\n }\n\n static dailyExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Daily spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'daily_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the daily limit or approve this transaction.',\n },\n );\n }\n\n static taskExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Per-task spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'task_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the per-task limit or approve this transaction.',\n },\n );\n }\n\n static monthlyExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Monthly spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'monthly_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the monthly limit.',\n },\n );\n }\n\n static merchantNotAllowed(\n merchant: string,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Merchant \"${merchant}\" is not on the spending allowlist.`,\n {\n code: 'merchant_not_allowed',\n statusCode: 402,\n requestId,\n limit: 0,\n requested: 0,\n suggestedAction:\n 'This merchant is not on your allowlist. Ask the developer to add it via the wallet settings.',\n },\n );\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n limit: this.limit,\n requested: this.requested,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Not Found Errors (404)\n// ---------------------------------------------------------------------------\n\nexport class LaneNotFoundError extends LaneError {\n constructor(resource: string, id: string, requestId?: string) {\n super(`${resource} \"${id}\" not found.`, {\n code: `${resource.toLowerCase()}_not_found`,\n statusCode: 404,\n requestId,\n suggestedAction: `The ${resource.toLowerCase()} does not exist or you don't have access to it.`,\n });\n this.name = 'LaneNotFoundError';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Rate Limit Errors (429)\n// ---------------------------------------------------------------------------\n\nexport class LaneRateLimitError extends LaneError {\n /** Seconds until the rate limit resets. */\n readonly retryAfter: number;\n\n constructor(retryAfter: number, requestId?: string) {\n super(`Rate limit exceeded. Retry after ${retryAfter} seconds.`, {\n code: 'rate_limit_exceeded',\n statusCode: 429,\n requestId,\n retryable: true,\n suggestedAction: `Wait ${retryAfter} seconds before retrying.`,\n });\n this.name = 'LaneRateLimitError';\n this.retryAfter = retryAfter;\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n retryAfter: this.retryAfter,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Validation Errors (400)\n// ---------------------------------------------------------------------------\n\nexport interface FieldError {\n field: string;\n message: string;\n}\n\nexport class LaneValidationError extends LaneError {\n readonly fields: FieldError[];\n\n constructor(fields: FieldError[], requestId?: string) {\n const fieldMessages = fields\n .map((f) => `${f.field}: ${f.message}`)\n .join('; ');\n super(`Validation error: ${fieldMessages}`, {\n code: 'validation_error',\n statusCode: 400,\n requestId,\n suggestedAction: 'Check the request parameters and try again.',\n });\n this.name = 'LaneValidationError';\n this.fields = fields;\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n fields: this.fields,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Confirmation Errors (403)\n// ---------------------------------------------------------------------------\n\nexport class LaneConfirmationError extends LaneError {\n constructor(message: string, options: Omit<LaneErrorOptions, 'statusCode' | 'code'> & { statusCode?: number; code?: string }) {\n super(message, {\n code: options.code ?? 'confirmation_required',\n statusCode: options.statusCode ?? 403,\n ...options,\n });\n this.name = 'LaneConfirmationError';\n }\n\n static required(instructionId?: string): LaneConfirmationError {\n const error = new LaneConfirmationError(\n 'Biometric confirmation required before executing this payment.',\n {\n suggestedAction:\n 'Verify your identity using Touch ID or passkey before retrieving credentials.',\n },\n );\n if (instructionId) {\n error.fix = `lane.instructions.confirm(\"${instructionId}\")`;\n error.currentState = { instructionId };\n }\n return error;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory: Build typed error from API response\n// ---------------------------------------------------------------------------\n\nexport interface APIErrorBody {\n error: {\n code: string;\n message: string;\n statusCode: number;\n retryable?: boolean;\n suggestedAction?: string;\n retryAfter?: number;\n limit?: number;\n requested?: number;\n fields?: FieldError[];\n };\n requestId: string;\n}\n\n/** Parse an API error response into the appropriate typed LaneError subclass. */\nexport function createErrorFromResponse(body: APIErrorBody): LaneError {\n const { error, requestId } = body;\n\n // Confirmation required\n if (error.code === 'confirmation_required') {\n return new LaneConfirmationError(error.message, {\n requestId,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Authentication\n if (error.statusCode === 401 || error.statusCode === 403) {\n return new LaneAuthError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Rate limiting\n if (error.statusCode === 429) {\n return new LaneRateLimitError(error.retryAfter ?? 60, requestId);\n }\n\n // Validation\n if (error.statusCode === 400 && error.fields) {\n return new LaneValidationError(error.fields, requestId);\n }\n\n // Budget\n if (error.code.includes('limit_exceeded') || error.code === 'merchant_not_allowed') {\n return new LaneBudgetError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n limit: error.limit ?? 0,\n requested: error.requested ?? 0,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Payment\n if (\n error.code.startsWith('payment_') ||\n error.code === 'insufficient_funds' ||\n error.code === 'merchant_unavailable'\n ) {\n return new LanePaymentError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n retryable: error.retryable,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Not found — only map to LaneNotFoundError when the code is a proper *_not_found code\n if (error.statusCode === 404 && error.code.endsWith('_not_found')) {\n return new LaneNotFoundError('Resource', error.code.replace('_not_found', ''), requestId);\n }\n\n // Fallback\n return new LaneError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n retryable: error.retryable,\n suggestedAction: error.suggestedAction,\n });\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP — Abstract Tool Base Class\n// ---------------------------------------------------------------------------\n// Every MCP tool extends this class. It provides:\n// - Typed input/output schemas via Zod\n// - Access to the Lane SDK instance\n// - Consistent error handling for agent consumption\n// - Pre-auth/post-auth tool split: tools can work without Lane instance\n// ---------------------------------------------------------------------------\n\nimport type { z } from 'zod';\nimport type { Lane } from '../lane.js';\nimport { LaneError } from '../errors.js';\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n inputSchema: z.ZodType;\n requiresAuth?: boolean;\n}\n\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n}\n\n/**\n * Abstract base class for all Lane MCP tools.\n *\n * Subclasses implement `definition()` for schema and `run()` for logic.\n * The base class handles error formatting so agents always get structured errors.\n *\n * Tools that don't require authentication override `requiresAuth` to return `false`.\n * These pre-auth tools can be instantiated with `lane: null` and will still work.\n */\nexport abstract class LaneTool<TInput = unknown> {\n protected lane: Lane | null;\n\n constructor(lane: Lane | null) {\n this.lane = lane;\n }\n\n /** Tool name, description, and input schema. */\n abstract get definition(): ToolDefinition;\n\n /** Whether this tool requires an authenticated Lane instance. Default: true. */\n get requiresAuth(): boolean {\n return true;\n }\n\n /** Inject a Lane instance after construction (e.g. after mid-session auth). */\n setLane(lane: Lane): void {\n this.lane = lane;\n }\n\n /**\n * Get the Lane instance, throwing a structured error if not connected.\n * Use this in `run()` methods instead of accessing `this.lane` directly.\n */\n protected getLane(): Lane {\n if (!this.lane) {\n throw new LaneError('Not connected to Lane. Use lane_connect to authenticate first.', {\n code: 'not_connected',\n statusCode: 401,\n suggestedAction: 'Call the lane_connect tool with your API key, or call lane_signup to create an account first.',\n });\n }\n return this.lane;\n }\n\n /** Execute the tool with validated input. */\n protected abstract run(input: TInput): Promise<unknown>;\n\n /**\n * Public entry point — validates input, runs tool, formats output.\n * Catches LaneErrors and formats them as structured agent-readable responses.\n *\n * For auth-required tools called without a Lane instance, returns a helpful\n * \"not connected\" response (not an error) with instructions to authenticate.\n */\n async execute(input: unknown): Promise<ToolResult> {\n try {\n // Pre-flight auth check for post-auth tools\n if (this.requiresAuth && !this.lane) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n status: 'not_connected',\n message: 'Lane is not connected yet. You need to authenticate before using this tool.',\n next_steps: [\n 'Call get_lane_info to learn about Lane',\n 'Call lane_signup to create an account',\n 'Call lane_connect with an API key or session ID to authenticate',\n ],\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n const parsed = this.definition.inputSchema.parse(input);\n const result = await this.run(parsed as TInput);\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n if (err instanceof LaneError) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n error: err.code,\n message: err.message,\n suggestedAction: err.suggestedAction,\n retryable: err.retryable,\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n\n const message = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: 'text', text: JSON.stringify({ error: 'tool_error', message }, null, 2) }],\n isError: true,\n };\n }\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class GetLaneInfoTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'get_lane_info',\n description:\n 'Discover what Lane is and what it can do. Returns capabilities, pricing, ' +\n 'and how to get started. No authentication required.',\n inputSchema: z.object({}),\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(): Promise<unknown> {\n const connected = this.lane !== null;\n\n const gettingStarted = connected\n ? {\n status: 'ready' as const,\n availableTools: [\n 'whoami',\n 'check_balance',\n 'pay',\n 'list_transactions',\n 'search_products',\n 'checkout',\n 'set_budget',\n 'request_refund',\n 'subscribe',\n 'list_subscriptions',\n 'search_software',\n 'cancel_subscription',\n 'discover_merchants',\n 'lane_add_card',\n 'add_card',\n 'lane_onboarding_status',\n 'protocol_pay',\n 'create_mandate',\n 'pay_with_mandate',\n 'register_agent',\n 'list_agents',\n 'provision_vic_payment',\n 'resolve_ucp_merchant',\n ],\n }\n : {\n status: 'not_connected' as const,\n steps: [\n 'Call lane_signup to create a free Lane account',\n 'Call lane_connect with your API key to authenticate this session',\n 'Call lane_add_card to securely add a payment card',\n 'Call set_budget to configure spending limits',\n ],\n };\n\n return {\n name: 'Lane',\n connected,\n tagline: 'Payment wallet and infrastructure for AI agents',\n description:\n 'Lane lets AI agents pay for services, subscribe to SaaS, and manage spending — ' +\n 'all through MCP tools. Card data is secured in a PCI-compliant VGS vault. ' +\n 'Agents never see raw card numbers.',\n capabilities: [\n 'Execute payments to merchants and services',\n 'Subscribe to SaaS products (Vercel, Supabase, etc.)',\n 'Search a merchant directory for developer tools and cloud services',\n 'Manage spending budgets (daily, weekly, monthly, per-task limits)',\n 'Add payment cards securely via VGS-hosted form (PCI compliant)',\n 'Track transactions and request refunds',\n 'Tokenized card billing — customer owns the card, agent charges against tokens',\n ],\n supportedMerchantTypes: ['ecommerce', 'software', 'api', 'saas', 'skill', 'service'],\n supportedRails: ['card (Visa, Mastercard, Amex)', 'VIC (Visa Intelligent Commerce)', 'stablecoins (coming soon)'],\n pricing: {\n free: { transactionLimit: '$100/mo', wallets: 1, description: 'For indie developers and experimentation' },\n pro: { transactionLimit: '$10,000/mo', wallets: 10, description: 'For production agent applications' },\n enterprise: { transactionLimit: 'Unlimited', wallets: 'Unlimited', description: 'Custom terms and SLAs' },\n },\n gettingStarted,\n links: {\n website: 'https://getonlane.com',\n docs: 'https://docs.getonlane.com',\n agentWallet: 'https://agent.getonlane.com',\n },\n security: {\n pciCompliant: true,\n cardVault: 'VGS (Very Good Security)',\n agentCardAccess: 'Agents never see or handle raw card numbers',\n budgetEnforcement: 'Server-side — agents cannot bypass spending limits',\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { LaneError } from '../../errors.js';\nimport type { Lane } from '../../lane.js';\n\nconst inputSchema = z.object({\n email: z.string().email().optional().describe('Pre-fill the signup form with this email address.'),\n plan: z.enum(['free', 'pro']).default('free').optional().describe('Plan to start with. Defaults to free.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class LaneSignupTool extends LaneTool<Input> {\n private readonly apiUrl: string;\n\n constructor(lane: Lane | null, options?: { apiUrl?: string }) {\n super(lane);\n this.apiUrl = options?.apiUrl ?? 'https://api.getonlane.com';\n }\n\n get definition(): ToolDefinition {\n return {\n name: 'lane_signup',\n description:\n 'Create a Lane onboarding session. Returns a signup URL for the user to open in ' +\n 'a browser. After signup, they will receive an API key to use with lane_connect. ' +\n 'No authentication required.',\n inputSchema,\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // If already connected, no need to sign up\n if (this.lane) {\n return { status: 'already_connected' };\n }\n\n const response = await fetch(`${this.apiUrl}/agent/onboarding/sessions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email: input.email,\n plan: input.plan ?? 'free',\n ref: 'mcp',\n flow: 'agent',\n }),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new LaneError(\n (errorBody as any)?.error?.message ?? `Signup API returned ${response.status}`,\n {\n code: 'signup_failed',\n statusCode: response.status,\n suggestedAction: 'Try again later or visit https://agent.getonlane.com/signup to sign up manually.',\n },\n );\n }\n\n const session = await response.json() as {\n sessionId: string;\n signupUrl: string;\n embedUrl: string;\n sessionSecret: string;\n expiresAt: string;\n };\n\n let signupUrl = session.signupUrl;\n if (input.email) {\n signupUrl += `&email=${encodeURIComponent(input.email)}`;\n }\n\n return {\n sessionId: session.sessionId,\n status: 'session_created',\n signupUrl,\n instructions: [\n 'Show this URL to the user — they need to open it in a browser to create their Lane account.',\n 'After signing up, call lane_connect with the sessionId to poll for completion.',\n 'Alternatively, the user can provide their API key directly to lane_connect.',\n ],\n nextStep: 'lane_connect',\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — HMAC-SHA256 Request Signing\n// ---------------------------------------------------------------------------\n// Signs every SDK request to prevent tampering and replay attacks.\n// Mirrors server/middleware/signature.js from the Lane backend.\n//\n// Signature = HMAC-SHA256(key, \"{method}\\n{path}\\n{timestamp}\\n{bodyHash}\")\n// ---------------------------------------------------------------------------\n\nimport { createHmac, createHash, timingSafeEqual } from 'node:crypto';\n\n/** Maximum age of a signed request before it's considered stale (5 minutes). */\nconst TIMESTAMP_TOLERANCE_SECONDS = 300;\n\nexport interface SignatureComponents {\n method: string;\n path: string;\n timestamp: number;\n body?: string;\n}\n\nexport class HMACSignature {\n private readonly secret: string;\n\n constructor(secret: string) {\n this.secret = secret;\n }\n\n /**\n * Sign request components and return the hex-encoded HMAC-SHA256 signature.\n */\n sign(components: SignatureComponents): string {\n const bodyHash = components.body\n ? createHash('sha256').update(components.body).digest('hex')\n : createHash('sha256').update('').digest('hex');\n\n const payload = [\n components.method.toUpperCase(),\n components.path,\n components.timestamp.toString(),\n bodyHash,\n ].join('\\n');\n\n return createHmac('sha256', this.secret).update(payload).digest('hex');\n }\n\n /**\n * Verify a signature against request components.\n * Uses constant-time comparison to prevent timing attacks.\n */\n verify(\n signature: string,\n components: SignatureComponents,\n toleranceSeconds: number = TIMESTAMP_TOLERANCE_SECONDS,\n ): boolean {\n // Reject stale timestamps to prevent replay attacks\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - components.timestamp) > toleranceSeconds) {\n return false;\n }\n\n const expected = this.sign(components);\n return constantTimeEqual(expected, signature);\n }\n\n /**\n * Generate the signature headers for an outgoing request.\n */\n headers(components: SignatureComponents): Record<string, string> {\n const signature = this.sign(components);\n return {\n 'X-Lane-Timestamp': components.timestamp.toString(),\n 'X-Lane-Signature': `sha256=${signature}`,\n };\n }\n}\n\n/**\n * Verify a webhook payload signature.\n *\n * @param payload - Raw webhook body string\n * @param signature - Value of X-Lane-Signature header\n * @param secret - Webhook signing secret\n * @param timestamp - Value of X-Lane-Timestamp header\n */\nexport function verifyWebhookSignature(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n): boolean {\n const hmac = new HMACSignature(secret);\n const sig = signature.startsWith('sha256=')\n ? signature.slice(7)\n : signature;\n\n return hmac.verify(sig, {\n method: 'POST',\n path: '/webhook',\n timestamp,\n body: payload,\n });\n}\n\n/**\n * Constant-time string comparison to prevent timing attacks.\n */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n const bufA = Buffer.from(a, 'utf8');\n const bufB = Buffer.from(b, 'utf8');\n return timingSafeEqual(bufA, bufB);\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — HTTP Client\n// ---------------------------------------------------------------------------\n// Central HTTP client with:\n// - Bearer token authentication\n// - HMAC-SHA256 request signing\n// - Idempotency key support\n// - Automatic retries with exponential backoff\n// - Circuit breaker for downstream resilience\n// - Request ID propagation for audit trails\n// - Structured error parsing\n// ---------------------------------------------------------------------------\n\nimport { EventEmitter } from 'node:events';\nimport { randomUUID } from 'node:crypto';\nimport type { ResolvedConfig, RequestOptions, APIResponse } from './types.js';\nimport { HMACSignature } from './crypto/signature.js';\nimport {\n LaneError,\n LaneRateLimitError,\n createErrorFromResponse,\n type APIErrorBody,\n} from './errors.js';\n\n// ---------------------------------------------------------------------------\n// Circuit Breaker\n// ---------------------------------------------------------------------------\n\ntype CircuitState = 'closed' | 'open' | 'half_open';\n\nclass CircuitBreaker {\n private state: CircuitState = 'closed';\n private failureCount = 0;\n private lastFailureTime = 0;\n\n constructor(\n private readonly failureThreshold: number = 3,\n private readonly resetTimeoutMs: number = 30_000,\n ) {}\n\n get isOpen(): boolean {\n if (this.state === 'open') {\n // Check if reset timeout has elapsed -> move to half-open\n if (Date.now() - this.lastFailureTime >= this.resetTimeoutMs) {\n this.state = 'half_open';\n return false;\n }\n return true;\n }\n return false;\n }\n\n recordSuccess(): void {\n this.failureCount = 0;\n this.state = 'closed';\n }\n\n recordFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n if (this.failureCount >= this.failureThreshold) {\n this.state = 'open';\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// LaneClient\n// ---------------------------------------------------------------------------\n\nexport interface LaneClientEvents {\n request: [{ method: string; path: string; requestId: string }];\n response: [{ statusCode: number; requestId: string; durationMs: number }];\n error: [{ error: LaneError; requestId: string }];\n retry: [{ attempt: number; maxRetries: number; requestId: string }];\n}\n\n/**\n * Low-level HTTP client for the Lane API.\n *\n * Handles authentication, signing, retries, circuit breaking, and error\n * parsing. All Resource classes delegate HTTP calls through this client.\n */\nexport class LaneClient extends EventEmitter<LaneClientEvents> {\n private readonly config: ResolvedConfig;\n private readonly signer: HMACSignature;\n private readonly circuitBreaker: CircuitBreaker;\n\n constructor(config: ResolvedConfig) {\n super();\n this.config = config;\n this.signer = new HMACSignature(config.apiKey);\n this.circuitBreaker = new CircuitBreaker(\n config.circuitBreaker?.failureThreshold,\n config.circuitBreaker?.resetTimeoutMs,\n );\n }\n\n /** Whether this client is operating in test mode. */\n get testMode(): boolean {\n return this.config.testMode;\n }\n\n /** The resolved base URL. */\n get baseUrl(): string {\n return this.config.baseUrl;\n }\n\n // -------------------------------------------------------------------------\n // Public convenience methods\n // -------------------------------------------------------------------------\n\n async get<T>(path: string, query?: RequestOptions['query']): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async post<T>(\n path: string,\n body?: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'POST', path, body, idempotencyKey });\n }\n\n async put<T>(\n path: string,\n body?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(path: string): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'DELETE', path });\n }\n\n // -------------------------------------------------------------------------\n // Core request method with retries\n // -------------------------------------------------------------------------\n\n async request<T>(options: RequestOptions): Promise<APIResponse<T>> {\n const requestId = `req_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n let lastError: Error | undefined;\n\n const maxAttempts = this.isRetryable(options.method)\n ? this.config.maxRetries + 1\n : 1;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n if (attempt > 1) {\n this.emit('retry', {\n attempt,\n maxRetries: this.config.maxRetries,\n requestId,\n });\n await this.backoff(attempt);\n }\n\n try {\n return await this.executeRequest<T>(options, requestId);\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n\n // Don't retry non-retryable errors\n if (err instanceof LaneError && !err.retryable) {\n throw err;\n }\n\n // Respect rate limit retry-after\n if (err instanceof LaneRateLimitError) {\n if (attempt < maxAttempts) {\n await sleep(err.retryAfter * 1000);\n continue;\n }\n throw err;\n }\n }\n }\n\n throw lastError ?? new Error('Request failed with no error details');\n }\n\n // -------------------------------------------------------------------------\n // Private\n // -------------------------------------------------------------------------\n\n private async executeRequest<T>(\n options: RequestOptions,\n requestId: string,\n ): Promise<APIResponse<T>> {\n // Circuit breaker check\n if (this.circuitBreaker.isOpen) {\n throw new LaneError('Service temporarily unavailable (circuit breaker open).', {\n code: 'circuit_breaker_open',\n statusCode: 503,\n requestId,\n retryable: true,\n suggestedAction: 'Payment service temporarily unavailable. Try again in 30 seconds.',\n });\n }\n\n const url = this.buildUrl(options.path, options.query);\n const bodyStr = options.body ? JSON.stringify(options.body) : undefined;\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Sign the request\n const signatureHeaders = this.signer.headers({\n method: options.method,\n path: options.path,\n timestamp,\n body: bodyStr,\n });\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-Lane-Request-Id': requestId,\n 'User-Agent': 'lane-sdk/0.1.0',\n ...signatureHeaders,\n };\n\n if (options.idempotencyKey) {\n headers['X-Idempotency-Key'] = options.idempotencyKey;\n }\n\n this.emit('request', { method: options.method, path: options.path, requestId });\n const startTime = Date.now();\n\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n options.timeout ?? this.config.timeout,\n );\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: bodyStr,\n signal: controller.signal,\n });\n\n const durationMs = Date.now() - startTime;\n this.emit('response', {\n statusCode: response.status,\n requestId,\n durationMs,\n });\n\n if (!response.ok) {\n const errorBody = await this.parseErrorBody(response, requestId);\n const error = createErrorFromResponse(errorBody);\n\n this.emit('error', { error, requestId });\n\n // Record failure for circuit breaker (only server errors)\n if (response.status >= 500) {\n this.circuitBreaker.recordFailure();\n }\n\n throw error;\n }\n\n this.circuitBreaker.recordSuccess();\n\n const data = (await response.json()) as T;\n\n return {\n data,\n requestId,\n testMode: this.config.testMode,\n rateLimitRemaining: parseIntHeader(response, 'X-RateLimit-Remaining'),\n rateLimitLimit: parseIntHeader(response, 'X-RateLimit-Limit'),\n rateLimitReset: parseIntHeader(response, 'X-RateLimit-Reset'),\n };\n } catch (err) {\n if (err instanceof LaneError) throw err;\n\n // AbortController timeout\n if (err instanceof DOMException && err.name === 'AbortError') {\n this.circuitBreaker.recordFailure();\n throw new LaneError('Request timed out.', {\n code: 'request_timeout',\n statusCode: 408,\n requestId,\n retryable: true,\n suggestedAction: 'The request took too long. Try again.',\n });\n }\n\n // Network / DNS errors\n this.circuitBreaker.recordFailure();\n throw new LaneError(\n `Network error: ${err instanceof Error ? err.message : String(err)}`,\n {\n code: 'network_error',\n statusCode: 0,\n requestId,\n retryable: true,\n suggestedAction: 'Check your network connection and try again.',\n },\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n ): string {\n const url = new URL(path, this.config.baseUrl);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async parseErrorBody(\n response: Response,\n requestId: string,\n ): Promise<APIErrorBody> {\n try {\n const body = (await response.json()) as Record<string, unknown>;\n const errorObj = body.error as Record<string, unknown> | undefined;\n\n // Accept error body if it has a valid code, even without requestId\n if (errorObj && typeof errorObj.code === 'string') {\n return {\n error: {\n code: errorObj.code,\n message: typeof errorObj.message === 'string' ? errorObj.message : `HTTP ${response.status}`,\n statusCode: typeof errorObj.statusCode === 'number' ? errorObj.statusCode : response.status,\n retryable: typeof errorObj.retryable === 'boolean' ? errorObj.retryable : undefined,\n suggestedAction: typeof errorObj.suggestedAction === 'string' ? errorObj.suggestedAction : undefined,\n retryAfter: typeof errorObj.retryAfter === 'number' ? errorObj.retryAfter : undefined,\n limit: typeof errorObj.limit === 'number' ? errorObj.limit : undefined,\n requested: typeof errorObj.requested === 'number' ? errorObj.requested : undefined,\n fields: Array.isArray(errorObj.fields) ? errorObj.fields : undefined,\n },\n requestId: typeof body.requestId === 'string' ? body.requestId : requestId,\n };\n }\n\n // API returned JSON but not our error format\n return {\n error: {\n code: 'unknown_error',\n message: JSON.stringify(body),\n statusCode: response.status,\n },\n requestId,\n };\n } catch {\n // Non-JSON response\n return {\n error: {\n code: 'unknown_error',\n message: `HTTP ${response.status}: ${response.statusText}`,\n statusCode: response.status,\n },\n requestId,\n };\n }\n }\n\n private isRetryable(method: string): boolean {\n // Only retry idempotent methods or methods with idempotency keys\n return ['GET', 'PUT', 'DELETE'].includes(method) || method === 'POST';\n }\n\n private async backoff(attempt: number): Promise<void> {\n // Exponential backoff: 1s, 3s (with jitter)\n const baseDelay = Math.min(1000 * Math.pow(2, attempt - 2), 5000);\n const jitter = Math.random() * 500;\n await sleep(baseDelay + jitter);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseIntHeader(response: Response, name: string): number | undefined {\n const value = response.headers.get(name);\n if (value === null) return undefined;\n const parsed = parseInt(value, 10);\n return isNaN(parsed) ? undefined : parsed;\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Token Store\n// ---------------------------------------------------------------------------\n// Reads/writes credentials to ~/.lane/credentials.json.\n// File permissions enforced at 0600 (owner read/write only) for SOC 2.\n// ---------------------------------------------------------------------------\n\nimport { readFile, writeFile, mkdir, stat, chmod } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { Credentials, TokenStore } from '../types.js';\n\nconst LANE_DIR = '.lane';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst SECURE_FILE_MODE = 0o600;\nconst SECURE_DIR_MODE = 0o700;\n\n/**\n * File-system backed token store.\n *\n * Stores credentials at ~/.lane/credentials.json with strict permissions.\n * Implements the TokenStore interface so it can be swapped for Redis,\n * Keychain, etc.\n */\nexport class FileTokenStore implements TokenStore {\n private readonly dirPath: string;\n private readonly filePath: string;\n\n constructor(basePath?: string) {\n this.dirPath = basePath ?? join(homedir(), LANE_DIR);\n this.filePath = join(this.dirPath, CREDENTIALS_FILE);\n }\n\n /**\n * Read credentials from disk. Returns null if file doesn't exist.\n * Warns to stderr if file permissions are too permissive.\n */\n async read(): Promise<Credentials | null> {\n try {\n await this.validatePermissions();\n const raw = await readFile(this.filePath, 'utf-8');\n const parsed: unknown = JSON.parse(raw);\n return this.validateCredentials(parsed);\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n /**\n * Write credentials to disk with secure permissions.\n */\n async write(credentials: Credentials): Promise<void> {\n await this.ensureDirectory();\n\n const data = JSON.stringify(credentials, null, 2) + '\\n';\n await writeFile(this.filePath, data, { mode: SECURE_FILE_MODE });\n }\n\n /**\n * Remove the credentials file.\n */\n async clear(): Promise<void> {\n try {\n const { unlink } = await import('node:fs/promises');\n await unlink(this.filePath);\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') {\n return; // Already gone\n }\n throw err;\n }\n }\n\n /** Return the path to the credentials file (for CLI display). */\n get path(): string {\n return this.filePath;\n }\n\n // -------------------------------------------------------------------------\n // Private\n // -------------------------------------------------------------------------\n\n private async ensureDirectory(): Promise<void> {\n await mkdir(this.dirPath, { recursive: true, mode: SECURE_DIR_MODE });\n }\n\n /**\n * Check file permissions and warn if too open.\n * SOC 2 control: credentials should only be readable by owner.\n */\n private async validatePermissions(): Promise<void> {\n try {\n const stats = await stat(this.filePath);\n const mode = stats.mode & 0o777;\n if (mode !== SECURE_FILE_MODE) {\n process.stderr.write(\n `[lane] Warning: ${this.filePath} has permissions ${mode.toString(8)}. ` +\n `Expected ${SECURE_FILE_MODE.toString(8)}. Fixing...\\n`,\n );\n await chmod(this.filePath, SECURE_FILE_MODE);\n }\n } catch {\n // File might not exist yet — that's fine\n }\n }\n\n private validateCredentials(parsed: unknown): Credentials | null {\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n !('apiKey' in parsed) ||\n typeof (parsed as Record<string, unknown>)['apiKey'] !== 'string'\n ) {\n return null;\n }\n return parsed as Credentials;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isNodeError(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && 'code' in err;\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Config Resolution\n// ---------------------------------------------------------------------------\n// Resolution order (first match wins):\n// 1. Constructor argument: new Lane({ apiKey: 'lane_sk_...' })\n// 2. Environment variable: LANE_API_KEY\n// 3. Credentials file: ~/.lane/credentials.json\n// ---------------------------------------------------------------------------\n\nimport type { LaneConfig, ResolvedConfig, TokenStore } from './types.js';\nimport { FileTokenStore } from './auth/token-store.js';\n\nconst DEFAULT_BASE_URL = 'https://api.getonlane.com';\nconst DEFAULT_API_URL = 'https://api.getonlane.com';\nconst DEFAULT_TIMEOUT = 30_000;\nconst DEFAULT_MAX_RETRIES = 2;\n\n/**\n * Resolve SDK configuration from multiple sources.\n *\n * Immutable after construction — no config drift during a session.\n */\nexport async function resolveConfig(\n options: LaneConfig = {},\n tokenStore?: TokenStore,\n): Promise<ResolvedConfig> {\n // 1. Constructor argument\n let apiKey = options.apiKey;\n\n // 2. Environment variable\n if (!apiKey) {\n apiKey = process.env['LANE_API_KEY'];\n }\n\n // 3. Credentials file\n if (!apiKey) {\n const store = tokenStore ?? new FileTokenStore();\n const creds = await store.read();\n if (creds) {\n apiKey = creds.apiKey;\n }\n }\n\n if (!apiKey) {\n throw new Error(\n 'No API key found. Provide one via:\\n' +\n ' 1. new Lane({ apiKey: \"lane_sk_...\" })\\n' +\n ' 2. LANE_API_KEY environment variable\\n' +\n ' 3. Run `lane login` to authenticate',\n );\n }\n\n const testMode =\n options.testMode ??\n (process.env['LANE_TEST_MODE'] === 'true' ||\n apiKey.startsWith('lane_sk_test_'));\n\n const baseUrl =\n options.baseUrl ??\n process.env['LANE_BASE_URL'] ??\n DEFAULT_BASE_URL;\n\n const apiUrl =\n options.apiUrl ??\n process.env['LANE_API_URL'] ??\n DEFAULT_API_URL;\n\n const timeout =\n options.timeout ??\n (process.env['LANE_TIMEOUT']\n ? parseInt(process.env['LANE_TIMEOUT'], 10)\n : DEFAULT_TIMEOUT);\n\n const maxRetries =\n options.maxRetries ??\n (process.env['LANE_MAX_RETRIES']\n ? parseInt(process.env['LANE_MAX_RETRIES'], 10)\n : DEFAULT_MAX_RETRIES);\n\n return Object.freeze({\n apiKey,\n baseUrl,\n apiUrl,\n testMode,\n timeout,\n maxRetries,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n });\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Abstract Resource Base Class\n// ---------------------------------------------------------------------------\n// Every API resource (Wallets, Pay, Products, etc.) extends this class.\n// Provides typed access to the underlying LaneClient and common patterns.\n// ---------------------------------------------------------------------------\n\nimport type { LaneClient } from '../client.js';\nimport type { APIResponse, PaginatedResponse } from '../types.js';\n\n/**\n * Abstract base class for all Lane API resources.\n *\n * Subclasses focus on domain logic; the base class handles HTTP delegation,\n * pagination helpers, and idempotency key forwarding.\n */\nexport abstract class Resource {\n protected readonly client: LaneClient;\n\n constructor(client: LaneClient) {\n this.client = client;\n }\n\n /** The API path prefix for this resource (e.g. '/agent/wallet'). */\n protected abstract get basePath(): string;\n\n // -----------------------------------------------------------------------\n // Convenience wrappers that prepend basePath\n // -----------------------------------------------------------------------\n\n protected async _get<T>(\n subpath: string = '',\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<APIResponse<T>> {\n return this.client.get<T>(`${this.basePath}${subpath}`, query);\n }\n\n protected async _post<T>(\n subpath: string = '',\n body?: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<APIResponse<T>> {\n return this.client.post<T>(`${this.basePath}${subpath}`, body, idempotencyKey);\n }\n\n protected async _put<T>(\n subpath: string = '',\n body?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n return this.client.put<T>(`${this.basePath}${subpath}`, body);\n }\n\n protected async _delete<T>(subpath: string = ''): Promise<APIResponse<T>> {\n return this.client.delete<T>(`${this.basePath}${subpath}`);\n }\n\n /**\n * Helper for paginated list endpoints.\n */\n protected async _list<T>(\n subpath: string = '',\n params?: { limit?: number; offset?: number } & Record<string, unknown>,\n ): Promise<PaginatedResponse<T>> {\n const query: Record<string, string | number | boolean | undefined> = {};\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n query[key] = typeof value === 'object' ? JSON.stringify(value) : (value as string | number | boolean);\n }\n }\n }\n const response = await this.client.get<PaginatedResponse<T>>(\n `${this.basePath}${subpath}`,\n query,\n );\n return response.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Auth Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { DeveloperProfile, RotateKeyResult } from '../types.js';\n\nexport class Auth extends Resource {\n protected get basePath(): string {\n return '/agent/admin';\n }\n\n /** Get the authenticated developer's profile. */\n async whoami(): Promise<DeveloperProfile> {\n const res = await this._get<DeveloperProfile>('/whoami');\n return res.data;\n }\n\n /**\n * Start a login session. Returns a URL the developer opens in their browser.\n */\n async login(): Promise<{ sessionId: string; authUrl: string; port: number }> {\n const res = await this._post<{ sessionId: string; authUrl: string; port: number }>('/login');\n return res.data;\n }\n\n /**\n * Exchange a one-time code (from browser callback) for an API key.\n */\n async exchangeCode(code: string, sessionId: string): Promise<{ apiKey: string; developerId: string }> {\n const res = await this._post<{ apiKey: string; developerId: string }>('/token', {\n code,\n sessionId,\n });\n return res.data;\n }\n\n /**\n * Rotate the API key. Old key remains valid for 15 minutes.\n */\n async rotateKey(): Promise<RotateKeyResult> {\n const res = await this._post<RotateKeyResult>('/rotate-key');\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Wallets Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Wallet,\n Card,\n CreateWalletParams,\n PaginatedResponse,\n DepositParams,\n DepositResult,\n AutoReloadConfig,\n CardAttributes,\n WalletBalance,\n CheckoutProfile,\n SetCheckoutProfileParams,\n MerchantAccount,\n SaveMerchantAccountParams,\n} from '../types.js';\n\nexport class Wallets extends Resource {\n protected get basePath(): string {\n return '/agent/wallet';\n }\n\n /** Create a new wallet, optionally scoped to an end user. */\n async create(params: CreateWalletParams): Promise<Wallet> {\n const res = await this._post<Wallet>('', {\n label: params.label,\n userId: params.userId,\n budget: params.budget,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Get a wallet by ID. */\n async get(walletId: string): Promise<Wallet> {\n const res = await this._get<Wallet>(`/${walletId}`);\n return res.data;\n }\n\n /** List all wallets for the authenticated developer. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Wallet>> {\n return this._list<Wallet>('', params);\n }\n\n /** List cards in a wallet. Returns last4/brand only — never full PAN. */\n async listCards(walletId: string): Promise<Card[]> {\n const res = await this._get<Card[]>(`/${walletId}/cards`);\n return res.data;\n }\n\n /**\n * Get a secure link for the end user to add a card via VGS Collect.\n * PAN goes directly to VGS vault — Lane never sees it.\n */\n async getAddCardLink(walletId: string): Promise<{ url: string; expiresAt: string }> {\n const res = await this._get<{ url: string; expiresAt: string }>(`/${walletId}/add-card-link`);\n return res.data;\n }\n\n /** Revoke a wallet. All linked tokens are immediately invalidated. */\n async revoke(walletId: string): Promise<void> {\n await this._delete(`/${walletId}`);\n }\n\n /** Remove a specific card from a wallet. */\n async removeCard(walletId: string, cardId: string): Promise<void> {\n await this._delete(`/${walletId}/cards/${cardId}`);\n }\n\n /** Deposit funds into a wallet. */\n async deposit(walletId: string, params: DepositParams): Promise<DepositResult> {\n const res = await this._post<DepositResult>(\n `/${walletId}/deposit`,\n { amount: params.amount } as Record<string, unknown>,\n params.idempotencyKey,\n );\n return res.data;\n }\n\n /** Get wallet balance and metadata. */\n async balance(walletId?: string): Promise<WalletBalance> {\n const res = await this._get<WalletBalance>(`/${walletId ?? 'default'}/balance`);\n return res.data;\n }\n\n /** Configure auto-reload for a wallet. */\n async setAutoReload(walletId: string, config: AutoReloadConfig): Promise<AutoReloadConfig> {\n const res = await this._put<AutoReloadConfig>(\n `/${walletId}/auto-reload`,\n config as unknown as Record<string, unknown>,\n );\n return res.data;\n }\n\n /** Get card attributes for a wallet. */\n async getAttributes(walletId: string): Promise<CardAttributes> {\n const res = await this._get<CardAttributes>(`/${walletId}/card-attributes`);\n return res.data;\n }\n\n /** Set the checkout profile for a wallet (billing, shipping, email). */\n async setProfile(walletId: string, profile: SetCheckoutProfileParams): Promise<CheckoutProfile> {\n const res = await this._post<CheckoutProfile>(`/${walletId}/profile`, profile as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get the checkout profile. Addresses and email are visible; no sensitive data. */\n async getProfile(walletId: string): Promise<CheckoutProfile> {\n const res = await this._get<CheckoutProfile>(`/${walletId}/profile`);\n return res.data;\n }\n\n /** Update the checkout profile (partial). */\n async updateProfile(walletId: string, updates: Partial<SetCheckoutProfileParams>): Promise<CheckoutProfile> {\n const res = await this._put<CheckoutProfile>(`/${walletId}/profile`, updates as Record<string, unknown>);\n return res.data;\n }\n\n /** Save a merchant account (for sites without guest checkout). */\n async saveMerchantAccount(walletId: string, params: SaveMerchantAccountParams): Promise<MerchantAccount> {\n const res = await this._post<MerchantAccount>(`/${walletId}/merchant-accounts`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List saved merchant accounts (domain + email only). */\n async listMerchantAccounts(walletId: string): Promise<MerchantAccount[]> {\n const res = await this._get<MerchantAccount[]>(`/${walletId}/merchant-accounts`);\n return res.data;\n }\n\n /** Remove a saved merchant account. */\n async removeMerchantAccount(walletId: string, accountId: string): Promise<void> {\n await this._delete(`/${walletId}/merchant-accounts/${accountId}`);\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Pay Resource (Agentic Tokens + Payment Execution)\n// ---------------------------------------------------------------------------\n\nimport { createHash } from 'node:crypto';\nimport { Resource } from './base.js';\nimport type {\n AgenticToken,\n CreateTokenParams,\n ExecutePaymentParams,\n Transaction,\n RefundParams,\n Refund,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Pay extends Resource {\n protected get basePath(): string {\n return '/agent/pay';\n }\n\n /**\n * Create a scoped agentic token — amount-limited, merchant-locked,\n * time-bounded. The token can be used to execute a single payment.\n */\n async createToken(params: CreateTokenParams): Promise<AgenticToken> {\n const res = await this._post<AgenticToken>('/tokens', {\n walletId: params.walletId,\n amount: params.amount,\n currency: params.currency ?? 'USD',\n merchant: params.merchant ?? '*',\n expiresIn: params.expiresIn ?? '1h',\n permissions: params.permissions ?? [],\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Execute a payment. Routed via the best available path:\n * 1. Billing API (for services like OpenAI, Replicate, Vercel)\n * 2. ACP-enabled merchant checkout\n * 3. VIC agentic token (when available)\n *\n * Idempotency key is strongly recommended to prevent double charges.\n */\n async execute(params: ExecutePaymentParams): Promise<Transaction> {\n // Auto-generate idempotency key if not provided (amount + recipient + 5-min window)\n const idempotencyKey = params.idempotencyKey ?? this.generateIdempotencyKey(params);\n\n const res = await this._post<Transaction>('', {\n tokenId: params.tokenId,\n recipient: params.recipient,\n amount: params.amount,\n currency: params.currency ?? 'USD',\n description: params.description,\n }, idempotencyKey);\n return res.data;\n }\n\n private generateIdempotencyKey(params: ExecutePaymentParams): string {\n const window = Math.floor(Date.now() / (5 * 60 * 1000)); // 5-minute window\n const input = `${params.amount}:${params.recipient}:${params.currency ?? 'USD'}:${window}`;\n return `auto_${createHash('sha256').update(input).digest('hex').slice(0, 24)}`;\n }\n\n /** Get a transaction by ID. */\n async getTransaction(transactionId: string): Promise<Transaction> {\n const res = await this._get<Transaction>(`/transactions/${transactionId}`);\n return res.data;\n }\n\n /** List transactions with optional filters. */\n async listTransactions(params?: {\n limit?: number;\n offset?: number;\n cardId?: string;\n status?: Transaction['status'];\n }): Promise<PaginatedResponse<Transaction>> {\n return this._list<Transaction>('/transactions', params);\n }\n\n /**\n * Initiate a refund. Full or partial.\n *\n * Refund routing mirrors payment routing:\n * - Billing API merchants: calls their refund API\n * - ACP merchants: initiates refund through PSP\n * - VIC transactions: standard Visa dispute flow\n */\n async refund(params: RefundParams): Promise<Refund> {\n const res = await this._post<Refund>('/refunds', {\n transactionId: params.transactionId,\n amount: params.amount,\n reason: params.reason,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Get a refund by ID. */\n async getRefund(refundId: string): Promise<Refund> {\n const res = await this._get<Refund>(`/refunds/${refundId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Products Resource (Discovery)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Product,\n ProductSearchParams,\n SoftwareProductSearchParams,\n Merchant,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Products extends Resource {\n protected get basePath(): string {\n return '/products';\n }\n\n /** Search the Lane product catalog. */\n async search(params: ProductSearchParams | SoftwareProductSearchParams): Promise<PaginatedResponse<Product>> {\n return this._list<Product>('/search', { ...params });\n }\n\n /** Get a product by ID. */\n async get(productId: string): Promise<Product> {\n const res = await this._get<Product>(`/${productId}`);\n return res.data;\n }\n\n /** List available merchants. */\n async listMerchants(params?: {\n limit?: number;\n offset?: number;\n query?: string;\n }): Promise<PaginatedResponse<Merchant>> {\n return this._list<Merchant>('/merchants', params);\n }\n\n /** Get a merchant by ID or slug. */\n async getMerchant(merchantIdOrSlug: string): Promise<Merchant> {\n const res = await this.client.get<Merchant>(`/agent/merchant/${merchantIdOrSlug}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Checkout Resource (calls lane-repo sell-side)\n// ---------------------------------------------------------------------------\n// Checkout sessions are created and completed on lane-repo (api.getonlane.com),\n// NOT the SDK server. lane-repo handles merchant integration, PSP processing,\n// and order fulfillment.\n//\n// Buy-side (this SDK) → Sell-side (lane-repo):\n// POST /merchants/:id/checkout_sessions → create session\n// GET /merchants/:id/checkout_sessions/:sid → get session\n// POST /merchants/:id/checkout_sessions/:sid/complete → complete with payment\n// POST /agent/checkout/:sid/cancel → cancel session\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n CheckoutSession,\n CreateCheckoutParams,\n SoftwareCheckoutParams,\n Order,\n SoftwareOrder,\n} from '../types.js';\n\nexport class Checkout extends Resource {\n protected get basePath(): string {\n return '/checkout';\n }\n\n /**\n * Create a checkout session with a merchant.\n * Calls lane-repo: POST /merchants/:merchantId/checkout_sessions\n */\n async create(params: CreateCheckoutParams | SoftwareCheckoutParams): Promise<CheckoutSession> {\n const merchantId = (params as any).merchantId;\n\n if (merchantId) {\n // New path: call lane-repo merchant checkout endpoint directly\n const body: Record<string, unknown> = {\n items: (params as any).items,\n buyer: (params as any).buyer ?? { email: (params as any).buyerEmail },\n shipping_address: (params as any).shippingAddress,\n };\n\n const res = await this.client.post<CheckoutSession>(\n `/merchants/${merchantId}/checkout_sessions`,\n body,\n params.idempotencyKey,\n );\n return res.data;\n }\n\n // Legacy path: product-based checkout via SDK server\n const body: Record<string, unknown> = {\n productId: params.productId,\n walletId: params.walletId,\n quantity: params.quantity ?? 1,\n };\n if ('plan' in params && params.plan !== undefined) {\n body.plan = params.plan;\n }\n if ('parameters' in params && params.parameters !== undefined) {\n body.parameters = params.parameters;\n }\n const res = await this._post<CheckoutSession>('', body, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Complete a checkout session — processes payment and returns the order.\n * Calls lane-repo: POST /merchants/:merchantId/checkout_sessions/:sessionId/complete\n */\n async complete(\n sessionId: string,\n options?: {\n merchantId?: string;\n paymentMethodId?: string;\n cardAliases?: {\n pan_alias: string;\n cvc_alias: string;\n exp_month: number;\n exp_year: number;\n };\n networkToken?: {\n number?: string;\n cryptogram?: string;\n exp_month?: number;\n exp_year?: number;\n eci?: string;\n vgs_card_id?: string;\n };\n paymentProvider?: string;\n },\n ): Promise<Order | SoftwareOrder> {\n if (options?.merchantId) {\n // Call lane-repo merchant checkout complete endpoint\n const body: Record<string, unknown> = {};\n if (options.paymentMethodId) body.payment_method_id = options.paymentMethodId;\n if (options.cardAliases) body.card_aliases = options.cardAliases;\n if (options.networkToken) body.network_token = options.networkToken;\n if (options.paymentProvider) body.payment_provider = options.paymentProvider;\n\n const res = await this.client.post<Order | SoftwareOrder>(\n `/merchants/${options.merchantId}/checkout_sessions/${sessionId}/complete`,\n body,\n );\n return res.data;\n }\n\n // Legacy path: via SDK server\n const res = await this._post<Order | SoftwareOrder>(`/${sessionId}/complete`);\n return res.data;\n }\n\n /** Get the status of a checkout session. */\n async get(sessionId: string, merchantId?: string): Promise<CheckoutSession> {\n if (merchantId) {\n const res = await this.client.get<CheckoutSession>(\n `/merchants/${merchantId}/checkout_sessions/${sessionId}`,\n );\n return res.data;\n }\n const res = await this._get<CheckoutSession>(`/${sessionId}`);\n return res.data;\n }\n\n /** Cancel a pending checkout session. */\n async cancel(sessionId: string): Promise<CheckoutSession> {\n const res = await this._post<CheckoutSession>(`/${sessionId}/cancel`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Sell Resource (Make-a-SaaS)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Product,\n CreateProductParams,\n ProductAnalytics,\n AnalyticsParams,\n PaginatedResponse,\n SCPManifest,\n} from '../types.js';\n\nexport class Sell extends Resource {\n protected get basePath(): string {\n return '/agent/sell';\n }\n\n /**\n * List a product for sale on the Lane marketplace.\n *\n * Lane will:\n * 1. List the product in the Product API (discoverable by any agent)\n * 2. Create a proxy endpoint (handles auth + metering)\n * 3. Generate API keys for buyers automatically\n * 4. Meter usage and bill buyer wallets\n * 5. Pay out to seller (minus Lane fee)\n */\n async create(params: CreateProductParams): Promise<Product> {\n const res = await this._post<Product>('/products', {\n name: params.name,\n type: params.type,\n endpoint: params.endpoint,\n mcpEndpoint: params.mcpEndpoint,\n pricing: params.pricing,\n description: params.description,\n auth: params.auth,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Update an existing product listing. */\n async update(productId: string, params: Partial<CreateProductParams>): Promise<Product> {\n const res = await this._put<Product>(`/products/${productId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Deactivate a product listing (soft delete). */\n async deactivate(productId: string): Promise<void> {\n await this._delete(`/products/${productId}`);\n }\n\n /** Get a product you've listed. */\n async get(productId: string): Promise<Product> {\n const res = await this._get<Product>(`/products/${productId}`);\n return res.data;\n }\n\n /** List all products you've listed for sale. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Product>> {\n return this._list<Product>('/products', params);\n }\n\n /** Get analytics for a product you've listed. */\n async analytics(params: AnalyticsParams): Promise<ProductAnalytics> {\n const res = await this._get<ProductAnalytics>(\n `/products/${params.productId}/analytics`,\n { period: params.period },\n );\n return res.data;\n }\n\n /** List a software product using an SCP manifest. */\n async createSoftwareProduct(manifest: SCPManifest): Promise<Product> {\n const res = await this._post<Product>('/software', manifest as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Admin Resource (Enterprise / Team Management)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n BudgetConfig,\n SpendingSummary,\n TeamMember,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Admin extends Resource {\n protected get basePath(): string {\n return '/agent/admin';\n }\n\n // -------------------------------------------------------------------------\n // Spending\n // -------------------------------------------------------------------------\n\n /** Get spending summary with optional grouping by team/developer/agent. */\n async spending(params: {\n period: string;\n groupBy?: 'team' | 'developer' | 'agent';\n }): Promise<SpendingSummary> {\n const res = await this._get<SpendingSummary>('/spending', params);\n return res.data;\n }\n\n // -------------------------------------------------------------------------\n // Budgets\n // -------------------------------------------------------------------------\n\n /** Get current budget configuration. */\n async getBudget(scope?: { teamId?: string; developerId?: string }): Promise<BudgetConfig> {\n const res = await this._get<BudgetConfig>('/budgets', scope);\n return res.data;\n }\n\n /** Update budget limits. */\n async setBudget(\n config: BudgetConfig & { teamId?: string; developerId?: string },\n ): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>('/budgets', config as Record<string, unknown>);\n return res.data;\n }\n\n // -------------------------------------------------------------------------\n // Team Members\n // -------------------------------------------------------------------------\n\n /** List team members. */\n async listMembers(params?: {\n limit?: number;\n offset?: number;\n teamId?: string;\n }): Promise<PaginatedResponse<TeamMember>> {\n return this._list<TeamMember>('/members', params);\n }\n\n /** Invite a team member. */\n async inviteMember(params: {\n email: string;\n role: TeamMember['role'];\n teamId?: string;\n }): Promise<TeamMember> {\n const res = await this._post<TeamMember>('/members', params);\n return res.data;\n }\n\n /** Update a team member's role. */\n async updateMember(memberId: string, params: { role: TeamMember['role'] }): Promise<TeamMember> {\n const res = await this._put<TeamMember>(`/members/${memberId}`, params);\n return res.data;\n }\n\n /** Remove a team member. */\n async removeMember(memberId: string): Promise<void> {\n await this._delete(`/members/${memberId}`);\n }\n\n // -------------------------------------------------------------------------\n // Account Management (GDPR)\n // -------------------------------------------------------------------------\n\n /**\n * Export all developer data as JSON (GDPR data portability).\n */\n async exportData(): Promise<Record<string, unknown>> {\n const res = await this._get<Record<string, unknown>>('/export');\n return res.data;\n }\n\n /**\n * Delete the developer account and purge all PII (GDPR right to erasure).\n * Transaction records are anonymized (amount + merchant retained for regulatory).\n */\n async deleteAccount(): Promise<{ status: string; deletionCompletesAt: string }> {\n const res = await this._delete<{ status: string; deletionCompletesAt: string }>('/account');\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Webhooks Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport { verifyWebhookSignature } from '../crypto/signature.js';\nimport type { WebhookConfig, WebhookPayload, PaginatedResponse } from '../types.js';\n\nexport class Webhooks extends Resource {\n protected get basePath(): string {\n return '/agent/webhook';\n }\n\n /** Register a new webhook endpoint. */\n async create(params: Omit<WebhookConfig, 'id'>): Promise<WebhookConfig> {\n const res = await this._post<WebhookConfig>('', params as Record<string, unknown>);\n return res.data;\n }\n\n /** List registered webhooks. */\n async list(): Promise<PaginatedResponse<WebhookConfig>> {\n return this._list<WebhookConfig>();\n }\n\n /** Get a webhook by ID. */\n async get(webhookId: string): Promise<WebhookConfig> {\n const res = await this._get<WebhookConfig>(`/${webhookId}`);\n return res.data;\n }\n\n /** Update a webhook configuration. */\n async update(webhookId: string, params: Partial<WebhookConfig>): Promise<WebhookConfig> {\n const res = await this._put<WebhookConfig>(`/${webhookId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Delete a webhook endpoint. */\n async delete(webhookId: string): Promise<void> {\n await this._delete(`/${webhookId}`);\n }\n\n /**\n * Verify a webhook payload's signature.\n *\n * Use this in your webhook handler to confirm the payload was sent by Lane.\n *\n * @param payload - Raw request body string\n * @param signature - Value of X-Lane-Signature header\n * @param secret - Your webhook signing secret\n * @param timestamp - Value of X-Lane-Timestamp header (unix seconds)\n */\n verify(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n ): boolean {\n return verifyWebhookSignature(payload, signature, secret, timestamp);\n }\n\n /**\n * Parse and verify a webhook payload in one step.\n * Throws if signature is invalid.\n */\n constructEvent(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n ): WebhookPayload {\n if (!this.verify(payload, signature, secret, timestamp)) {\n throw new Error('Invalid webhook signature');\n }\n return JSON.parse(payload) as WebhookPayload;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — VIC Resource (Visa Intelligent Commerce Agentic Tokens)\n// ---------------------------------------------------------------------------\n// Phase 2: THE MOAT — issue Visa-authenticated credentials that work at\n// any Visa-accepting merchant. Upgrades from \"call billing API\" to\n// \"issue a Visa credential.\"\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n VICToken,\n VICIssuanceParams,\n NetworkTokenPayload,\n PaginatedResponse,\n} from '../types.js';\n\nexport class VIC extends Resource {\n protected get basePath(): string {\n return '/agent/token';\n }\n\n /**\n * Issue a VIC agentic token. This provisions a Visa network token (DPAN)\n * scoped to the agent's constraints: amount limits, merchant restrictions,\n * and time bounds.\n *\n * The token works at any Visa-accepting merchant — not just Lane catalog.\n */\n async issue(params: VICIssuanceParams): Promise<VICToken> {\n const res = await this._post<VICToken>('', {\n walletId: params.walletId,\n cardId: params.cardId,\n maxTransactionAmount: params.maxTransactionAmount,\n allowedMCCs: params.allowedMCCs,\n expiresIn: params.expiresIn ?? '24h',\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Retrieve payment credentials for a VIC token.\n * Returns DPAN, cryptogram, ECI, and expiry — everything needed to pay\n * at any Visa-accepting merchant.\n *\n * Called just before payment execution — the cryptogram is single-use.\n * Pre-validates token status to avoid wasting network calls on\n * revoked/suspended/expired tokens.\n */\n async getPaymentCredentials(tokenId: string, params: {\n amount: number;\n currency: string;\n merchantId: string;\n }): Promise<NetworkTokenPayload> {\n // Pre-validate token status to prevent issuing credentials for inactive tokens\n const token = await this.get(tokenId);\n if (token.status !== 'active') {\n throw new Error(\n `VIC token ${tokenId} is ${token.status} — cannot retrieve credentials. ` +\n (token.status === 'suspended' ? 'Reactivate the token first.' : 'Provision a new token.'),\n );\n }\n\n const res = await this._post<NetworkTokenPayload>(\n `/${tokenId}/cryptogram`,\n params as Record<string, unknown>,\n );\n return res.data;\n }\n\n /**\n * @deprecated Use getPaymentCredentials() instead.\n */\n async getCryptogram(tokenId: string, params: {\n amount: number;\n currency: string;\n merchantId: string;\n }): Promise<NetworkTokenPayload> {\n return this.getPaymentCredentials(tokenId, params);\n }\n\n /** Get a VIC token by ID. */\n async get(tokenId: string): Promise<VICToken> {\n const res = await this._get<VICToken>(`/${tokenId}`);\n return res.data;\n }\n\n /** List VIC tokens for a wallet. */\n async list(params?: {\n walletId?: string;\n status?: VICToken['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<VICToken>> {\n return this._list<VICToken>('', params);\n }\n\n /** Revoke a VIC token immediately. */\n async revoke(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/revoke`);\n return res.data;\n }\n\n /** Suspend a VIC token (can be reactivated). */\n async suspend(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/suspend`);\n return res.data;\n }\n\n /** Reactivate a suspended VIC token. */\n async reactivate(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/reactivate`);\n return res.data;\n }\n\n /**\n * Update a purchase intent (Visa IC Step 3).\n * Optional — update parameters before credential retrieval.\n */\n async updateIntent(intentId: string, params: {\n amount?: number;\n currency?: string;\n merchantId?: string;\n description?: string;\n }): Promise<{ intentId: string }> {\n const res = await this._put<{ intentId: string }>(`/intents/${intentId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /**\n * Cancel a purchase intent (Visa IC Step 4).\n * Optional — cancel before checkout.\n */\n async cancelIntent(intentId: string): Promise<void> {\n await this._delete(`/intents/${intentId}`);\n }\n\n /**\n * Confirm a transaction (Visa IC Step 6).\n * Post-payment confirmation back to Visa.\n */\n async confirmTransaction(intentId: string, txnDetails: {\n transactionId: string;\n status: string;\n }): Promise<void> {\n await this._post(`/intents/${intentId}/confirm`, txnDetails as unknown as Record<string, unknown>);\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Metering Resource (Make-a-SaaS Usage Tracking)\n// ---------------------------------------------------------------------------\n// Phase 4: Sellers track API usage, and Lane handles billing.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n UsageRecord,\n UsageReport,\n MeteringConfig,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Metering extends Resource {\n protected get basePath(): string {\n return '/agent/metering';\n }\n\n /**\n * Record a usage event (API call, token consumption, etc.).\n * Called by the seller's service when a buyer uses it.\n */\n async record(params: {\n productId: string;\n buyerId: string;\n quantity: number;\n unit?: string;\n idempotencyKey?: string;\n }): Promise<UsageRecord> {\n const res = await this._post<UsageRecord>('/usage', {\n productId: params.productId,\n buyerId: params.buyerId,\n quantity: params.quantity,\n unit: params.unit ?? 'calls',\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Record a batch of usage events efficiently.\n */\n async recordBatch(records: {\n productId: string;\n buyerId: string;\n quantity: number;\n unit?: string;\n timestamp?: string;\n }[]): Promise<{ recorded: number; failed: number }> {\n const res = await this._post<{ recorded: number; failed: number }>('/usage/batch', {\n records,\n });\n return res.data;\n }\n\n /** Query usage for a product. */\n async query(params: {\n productId: string;\n buyerId?: string;\n startDate?: string;\n endDate?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<UsageRecord>> {\n return this._list<UsageRecord>('/usage', params);\n }\n\n /** Get an aggregated usage report. */\n async report(params: {\n productId: string;\n period: string;\n }): Promise<UsageReport> {\n const res = await this._get<UsageReport>('/reports', params);\n return res.data;\n }\n\n /** Get or update metering config for a product. */\n async getConfig(productId: string): Promise<MeteringConfig> {\n const res = await this._get<MeteringConfig>(`/config/${productId}`);\n return res.data;\n }\n\n async setConfig(productId: string, config: MeteringConfig): Promise<MeteringConfig> {\n const res = await this._put<MeteringConfig>(`/config/${productId}`, config as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Payouts Resource (Seller Disbursements)\n// ---------------------------------------------------------------------------\n// Phase 4: Sellers receive payouts from Lane for their product sales.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { Payout, PayoutConfig, PaginatedResponse } from '../types.js';\n\nexport class Payouts extends Resource {\n protected get basePath(): string {\n return '/agent/payouts';\n }\n\n /** Get payout configuration. */\n async getConfig(): Promise<PayoutConfig> {\n const res = await this._get<PayoutConfig>('/config');\n return res.data;\n }\n\n /** Set up or update payout configuration. */\n async setConfig(config: {\n destination: PayoutConfig['destination'];\n destinationId: string;\n schedule?: PayoutConfig['schedule'];\n currency?: string;\n minimumPayout?: number;\n }): Promise<PayoutConfig> {\n const res = await this._put<PayoutConfig>('/config', config as Record<string, unknown>);\n return res.data;\n }\n\n /** List payouts. */\n async list(params?: {\n status?: Payout['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<Payout>> {\n return this._list<Payout>('', params);\n }\n\n /** Get a specific payout. */\n async get(payoutId: string): Promise<Payout> {\n const res = await this._get<Payout>(`/${payoutId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Teams Resource (Corporate Agent Spend)\n// ---------------------------------------------------------------------------\n// Phase 5: Hierarchical team management with budget cascading.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Team,\n CreateTeamParams,\n TeamMember,\n BudgetConfig,\n HierarchicalBudget,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Teams extends Resource {\n protected get basePath(): string {\n return '/agent/team';\n }\n\n /** Create a new team. */\n async create(params: CreateTeamParams): Promise<Team> {\n const res = await this._post<Team>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List teams. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Team>> {\n return this._list<Team>('', params);\n }\n\n /** Get a team by ID. */\n async get(teamId: string): Promise<Team> {\n const res = await this._get<Team>(`/${teamId}`);\n return res.data;\n }\n\n /** Update a team. */\n async update(teamId: string, params: { name?: string; budget?: BudgetConfig }): Promise<Team> {\n const res = await this._put<Team>(`/${teamId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Delete a team. */\n async delete(teamId: string): Promise<void> {\n await this._delete(`/${teamId}`);\n }\n\n /** Add a member to a team. */\n async addMember(teamId: string, params: { userId: string; role: TeamMember['role'] }): Promise<TeamMember> {\n const res = await this._post<TeamMember>(`/${teamId}/member`, params);\n return res.data;\n }\n\n /** List team members. */\n async listMembers(teamId: string, params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<TeamMember>> {\n return this._list<TeamMember>(`/${teamId}/member`, params);\n }\n\n /** Remove a member from a team. */\n async removeMember(teamId: string, memberId: string): Promise<void> {\n await this._delete(`/${teamId}/member/${memberId}`);\n }\n\n /** Get the hierarchical budget for a team (org > team > developer > agent). */\n async getHierarchicalBudget(teamId: string): Promise<HierarchicalBudget> {\n const res = await this._get<HierarchicalBudget>(`/${teamId}/budget/hierarchy`);\n return res.data;\n }\n\n /** Set the team-level budget. */\n async setBudget(teamId: string, budget: BudgetConfig): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>(`/${teamId}/budget`, budget as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Agents Resource (Fleet Management)\n// ---------------------------------------------------------------------------\n// Phase 5: Register, manage, and constrain agents in a fleet.\n// Each agent gets a policy governing its capabilities and spending.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n AgentRecord,\n RegisterAgentParams,\n AgentPolicy,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Agents extends Resource {\n protected get basePath(): string {\n return '/agent/fleet';\n }\n\n /** Register a new agent in the fleet. */\n async register(params: RegisterAgentParams): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get an agent by ID. */\n async get(agentId: string): Promise<AgentRecord> {\n const res = await this._get<AgentRecord>(`/${agentId}`);\n return res.data;\n }\n\n /** List agents in the fleet. */\n async list(params?: {\n status?: AgentRecord['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<AgentRecord>> {\n return this._list<AgentRecord>('', params);\n }\n\n /** Update an agent's policy. */\n async setPolicy(agentId: string, policy: AgentPolicy): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/policy`, policy as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Suspend an agent (temporary, can be reactivated). */\n async suspend(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/suspend`);\n return res.data;\n }\n\n /** Reactivate a suspended agent. */\n async reactivate(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/reactivate`);\n return res.data;\n }\n\n /** Permanently revoke an agent. */\n async revoke(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/revoke`);\n return res.data;\n }\n\n /** Assign a wallet to an agent (per-agent wallet). */\n async assignWallet(agentId: string, walletId: string): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/wallet`, { walletId });\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Audit Resource (SOC 2 Audit Trail)\n// ---------------------------------------------------------------------------\n// Phase 5: Immutable audit trail for all SDK actions.\n// Every API call, payment, and admin action is logged.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { AuditEntry, AuditQueryParams, PaginatedResponse } from '../types.js';\n\nexport class Audit extends Resource {\n protected get basePath(): string {\n return '/agent/audit';\n }\n\n /** Query audit log entries. */\n async query(params?: AuditQueryParams): Promise<PaginatedResponse<AuditEntry>> {\n return this._list<AuditEntry>('/logs', params ? { ...params } : undefined);\n }\n\n /** Get a specific audit entry by ID. */\n async get(entryId: string): Promise<AuditEntry> {\n const res = await this._get<AuditEntry>(`/logs/${entryId}`);\n return res.data;\n }\n\n /**\n * Export audit logs for a date range (SOC 2 compliance).\n * Returns a download URL for the audit log archive.\n */\n async export(params: {\n startDate: string;\n endDate: string;\n format?: 'json' | 'csv';\n }): Promise<{ downloadUrl: string; expiresAt: string }> {\n const res = await this._post<{ downloadUrl: string; expiresAt: string }>('/export', params);\n return res.data;\n }\n\n /** Get audit summary/statistics for a period. */\n async summary(params: {\n period: string;\n groupBy?: 'action' | 'actor' | 'resource';\n }): Promise<{\n totalEntries: number;\n byAction: Record<string, number>;\n byActorType: Record<string, number>;\n topActors: { id: string; count: number }[];\n }> {\n const res = await this._get<{\n totalEntries: number;\n byAction: Record<string, number>;\n byActorType: Record<string, number>;\n topActors: { id: string; count: number }[];\n }>('/summary', params);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Identity Resource (Agent Identity)\n// ---------------------------------------------------------------------------\n// Phase 6: Lane-issued agent identity. KYC chain:\n// Human -> Lane -> Agent -> Transaction\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n AgentIdentity,\n RegisterIdentityParams,\n VerifyIdentityParams,\n IdentityAttestation,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Identity extends Resource {\n protected get basePath(): string {\n return '/agent/identity';\n }\n\n /**\n * Register an agent for identity verification.\n * This starts the KYC chain: Human (developer) vouches for Agent.\n */\n async register(params: RegisterIdentityParams): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /**\n * Complete identity verification using a developer-provided code.\n * This establishes the Human -> Lane -> Agent chain.\n */\n async verify(params: VerifyIdentityParams): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(\n `/${params.identityId}/verify`,\n { verificationCode: params.verificationCode },\n );\n return res.data;\n }\n\n /** Get an agent identity by ID. */\n async get(identityId: string): Promise<AgentIdentity> {\n const res = await this._get<AgentIdentity>(`/${identityId}`);\n return res.data;\n }\n\n /** List agent identities. */\n async list(params?: {\n agentId?: string;\n status?: AgentIdentity['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<AgentIdentity>> {\n return this._list<AgentIdentity>('', params);\n }\n\n /**\n * Get the current attestation for a verified identity.\n * The attestation is a cryptographic proof that Lane has verified the\n * Human -> Agent chain.\n */\n async getAttestation(identityId: string): Promise<IdentityAttestation> {\n const res = await this._get<IdentityAttestation>(`/${identityId}/attestation`);\n return res.data;\n }\n\n /**\n * Refresh the attestation (generates a new signed document).\n * Useful when the previous attestation is nearing expiry.\n */\n async refreshAttestation(identityId: string): Promise<IdentityAttestation> {\n const res = await this._post<IdentityAttestation>(`/${identityId}/attestation/refresh`);\n return res.data;\n }\n\n /** Suspend an agent identity. */\n async suspend(identityId: string): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(`/${identityId}/suspend`);\n return res.data;\n }\n\n /** Revoke an agent identity permanently. */\n async revoke(identityId: string): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(`/${identityId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Subscriptions Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Subscription,\n CreateSubscriptionParams,\n UpdateSubscriptionParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Subscriptions extends Resource {\n protected get basePath(): string {\n return '/agent/subscription';\n }\n\n /** Create a new subscription. */\n async create(params: CreateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List subscriptions, optionally filtered by status. */\n async list(params?: { status?: string; limit?: number; offset?: number }): Promise<PaginatedResponse<Subscription>> {\n return this._list<Subscription>('', params);\n }\n\n /** Get a subscription by ID. */\n async get(subscriptionId: string): Promise<Subscription> {\n const res = await this._get<Subscription>(`/${subscriptionId}`);\n return res.data;\n }\n\n /** Cancel a subscription. */\n async cancel(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/cancel`, {});\n return res.data;\n }\n\n /** Upgrade a subscription to a higher plan. */\n async upgrade(subscriptionId: string, params: UpdateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/upgrade`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Downgrade a subscription to a lower plan. */\n async downgrade(subscriptionId: string, params: UpdateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/downgrade`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Pause a subscription. */\n async pause(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/pause`, {});\n return res.data;\n }\n\n /** Resume a paused subscription. */\n async resume(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/resume`, {});\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Merchants Resource (Directory)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n PaginatedResponse,\n DirectoryMerchant,\n MerchantSearchParams,\n ProtocolDiscoveryResult,\n MerchantVerticalSummary,\n} from '../types.js';\n\nexport class Merchants extends Resource {\n protected get basePath(): string {\n return '/merchants';\n }\n\n /** List/search the merchant directory. */\n async list(params?: MerchantSearchParams): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', params as Record<string, unknown>);\n }\n\n /** Get a merchant by ID, slug, or domain. */\n async get(idOrSlug: string): Promise<DirectoryMerchant> {\n const res = await this._get<DirectoryMerchant>(`/${idOrSlug}`);\n return res.data;\n }\n\n /** List merchants that support a specific protocol. */\n async listByProtocol(\n protocol: string,\n params?: Omit<MerchantSearchParams, 'protocol'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, protocol } as Record<string, unknown>);\n }\n\n /** List merchants in a specific vertical. */\n async listByVertical(\n vertical: string,\n params?: Omit<MerchantSearchParams, 'vertical'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, vertical } as Record<string, unknown>);\n }\n\n /** List only Lane-onboarded merchants. */\n async listOnboarded(\n params?: Omit<MerchantSearchParams, 'tier'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, tier: 'lane_onboarded' } as Record<string, unknown>);\n }\n\n /** List all verticals with subcategories and counts. */\n async verticals(): Promise<MerchantVerticalSummary[]> {\n const res = await this._get<MerchantVerticalSummary[]>('/verticals');\n return res.data;\n }\n\n /** Discover a protocol-compatible merchant by domain. */\n async discover(domain: string): Promise<ProtocolDiscoveryResult> {\n const res = await this._post<ProtocolDiscoveryResult>('/discover', { domain });\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, Card } from '../types.js';\n\nexport class Cards extends Resource {\n protected get basePath(): string {\n return '/agent/card';\n }\n\n async list(params?: { limit?: number; offset?: number; walletId?: string }): Promise<PaginatedResponse<Card>> {\n return this._list<Card>('', params);\n }\n\n async get(cardId: string): Promise<Card> {\n const res = await this._get<Card>(`/${cardId}`);\n return res.data;\n }\n\n async delete(cardId: string): Promise<void> {\n await this._delete(`/${cardId}`);\n }\n\n async getAddLink(walletId?: string): Promise<{ url: string; expiresAt: string }> {\n const query = walletId ? { walletId } : undefined;\n const res = await this._get<{ url: string; expiresAt: string }>('/add-link', query);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, InstructionBudgetStatus } from '../types.js';\n\nexport interface Instruction {\n id: string;\n walletId?: string;\n type: string;\n amount?: number;\n currency: string;\n merchant?: string;\n permissions: string[];\n constraints: Record<string, unknown>;\n status: string;\n spentCents: number;\n remainingCents: number | null;\n expiresAt?: string;\n createdAt: string;\n}\n\nexport interface Mandate {\n id: string;\n instructionId: string;\n type: string;\n config: Record<string, unknown>;\n status: string;\n spentCents: number;\n remainingCents: number;\n createdAt: string;\n}\n\nexport interface InstructionCredential {\n id: string;\n instructionId: string;\n credentialType: string;\n credentialData: Record<string, unknown>;\n expiresAt?: string;\n createdAt: string;\n}\n\nexport interface InstructionConfirmation {\n id: string;\n instructionId: string;\n confirmedBy?: string;\n confirmationType: string;\n details: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface CreateInstructionParams {\n walletId?: string;\n type?: string;\n amount?: number;\n currency?: string;\n merchant?: string;\n permissions?: string[];\n constraints?: Record<string, unknown>;\n expiresIn?: string;\n idempotencyKey?: string;\n}\n\nexport interface CreateMandateParams {\n type: string;\n config?: Record<string, unknown>;\n}\n\nexport class Instructions extends Resource {\n protected get basePath(): string {\n return '/agent/instruction';\n }\n\n async create(params: CreateInstructionParams): Promise<Instruction> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<Instruction>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Instruction>> {\n return this._list<Instruction>('', params);\n }\n\n async get(instructionId: string): Promise<Instruction> {\n const res = await this._get<Instruction>(`/${instructionId}`);\n return res.data;\n }\n\n async update(instructionId: string, updates: Partial<CreateInstructionParams>): Promise<Instruction> {\n const res = await this._put<Instruction>(`/${instructionId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async cancel(instructionId: string): Promise<void> {\n await this._post(`/${instructionId}/cancel`);\n }\n\n // Mandate CRUD\n async addMandate(instructionId: string, params: CreateMandateParams): Promise<Mandate> {\n const res = await this._post<Mandate>(`/${instructionId}/mandate`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async listMandates(instructionId: string): Promise<Mandate[]> {\n const res = await this._get<Mandate[]>(`/${instructionId}/mandate`);\n return res.data;\n }\n\n async getMandate(instructionId: string, mandateId: string): Promise<Mandate> {\n const res = await this._get<Mandate>(`/${instructionId}/mandate/${mandateId}`);\n return res.data;\n }\n\n async updateMandate(instructionId: string, mandateId: string, updates: Partial<CreateMandateParams>): Promise<Mandate> {\n const res = await this._put<Mandate>(`/${instructionId}/mandate/${mandateId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async deleteMandate(instructionId: string, mandateId: string): Promise<void> {\n await this._delete(`/${instructionId}/mandate/${mandateId}`);\n }\n\n // Credential\n async getCredential(instructionId: string): Promise<InstructionCredential> {\n const res = await this._post<InstructionCredential>(`/${instructionId}/credential`);\n return res.data;\n }\n\n // Confirmations\n async createConfirmation(instructionId: string, details: Record<string, unknown> = {}): Promise<InstructionConfirmation> {\n const res = await this._post<InstructionConfirmation>(`/${instructionId}/confirmation`, details);\n return res.data;\n }\n\n async listConfirmations(instructionId: string): Promise<InstructionConfirmation[]> {\n const res = await this._get<InstructionConfirmation[]>(`/${instructionId}/confirmation`);\n return res.data;\n }\n\n // Budget\n async getBudget(instructionId: string): Promise<InstructionBudgetStatus> {\n const res = await this._get<InstructionBudgetStatus>(`/${instructionId}/budget`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, AgenticToken } from '../types.js';\n\nexport interface ProvisionTokenParams {\n walletId: string;\n amount: number;\n currency?: string;\n merchant?: string;\n permissions?: string[];\n expiresIn?: string;\n idempotencyKey?: string;\n}\n\nexport class Tokens extends Resource {\n protected get basePath(): string {\n return '/agent/token';\n }\n\n async provision(params: ProvisionTokenParams): Promise<AgenticToken> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<AgenticToken>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgenticToken>> {\n return this._list<AgenticToken>('', params);\n }\n\n async get(tokenId: string): Promise<AgenticToken> {\n const res = await this._get<AgenticToken>(`/${tokenId}`);\n return res.data;\n }\n\n async suspend(tokenId: string): Promise<void> {\n await this._post(`/${tokenId}/suspend`);\n }\n\n async reactivate(tokenId: string): Promise<void> {\n await this._post(`/${tokenId}/reactivate`);\n }\n\n async delete(tokenId: string): Promise<void> {\n await this._delete(`/${tokenId}`);\n }\n\n async getCryptogram(tokenId: string): Promise<{ cryptogram: string; eci: string; expMonth: number; expYear: number }> {\n const res = await this._post<{ cryptogram: string; eci: string; expMonth: number; expYear: number }>(`/${tokenId}/cryptogram`);\n return res.data;\n }\n\n async reProvision(tokenId: string): Promise<AgenticToken> {\n const res = await this._post<AgenticToken>(`/${tokenId}/re-provision`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse, Transaction, Refund } from '../types.js';\n\nexport class Transactions extends Resource {\n protected get basePath(): string {\n return '/agent/transaction';\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Transaction>> {\n return this._list<Transaction>('', params);\n }\n\n async get(transactionId: string): Promise<Transaction> {\n const res = await this._get<Transaction>(`/${transactionId}`);\n return res.data;\n }\n\n async refund(transactionId: string, params?: { amount?: number; reason?: string; idempotencyKey?: string }): Promise<Refund> {\n const { idempotencyKey, ...body } = params ?? {};\n const res = await this._post<Refund>(`/${transactionId}/refund`, body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { BudgetConfig, SpendingSummary } from '../types.js';\n\nexport class Budgets extends Resource {\n protected get basePath(): string {\n return '/agent/budget';\n }\n\n async get(): Promise<BudgetConfig> {\n const res = await this._get<BudgetConfig>('');\n return res.data;\n }\n\n async set(config: BudgetConfig): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>('', config as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async getSpending(params?: { period?: string }): Promise<SpendingSummary> {\n const res = await this._get<SpendingSummary>('/spending', params);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse } from '../types.js';\n\nexport interface AgentUser {\n id: string;\n email?: string;\n name?: string;\n externalId?: string;\n metadata: Record<string, unknown>;\n status: string;\n createdAt: string;\n}\n\nexport interface CreateUserParams {\n email?: string;\n name?: string;\n externalId?: string;\n metadata?: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport class Users extends Resource {\n protected get basePath(): string {\n return '/agent/user';\n }\n\n async create(params: CreateUserParams): Promise<AgentUser> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<AgentUser>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgentUser>> {\n return this._list<AgentUser>('', params);\n }\n\n async get(userId: string): Promise<AgentUser> {\n const res = await this._get<AgentUser>(`/${userId}`);\n return res.data;\n }\n\n async update(userId: string, updates: Partial<CreateUserParams>): Promise<AgentUser> {\n const res = await this._put<AgentUser>(`/${userId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async delete(userId: string): Promise<void> {\n await this._delete(`/${userId}`);\n }\n\n async createSession(userId: string): Promise<{ token: string; expiresAt: string }> {\n const res = await this._post<{ token: string; expiresAt: string }>(`/${userId}/session`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse, AgentRecord, RegisterAgentParams, AgentPolicy } from '../types.js';\n\nexport class Fleet extends Resource {\n protected get basePath(): string {\n return '/agent/fleet';\n }\n\n async register(params: RegisterAgentParams): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgentRecord>> {\n return this._list<AgentRecord>('', params);\n }\n\n async get(agentId: string): Promise<AgentRecord> {\n const res = await this._get<AgentRecord>(`/${agentId}`);\n return res.data;\n }\n\n async suspend(agentId: string): Promise<void> {\n await this._post(`/${agentId}/suspend`);\n }\n\n async revoke(agentId: string): Promise<void> {\n await this._post(`/${agentId}/revoke`);\n }\n\n async reactivate(agentId: string): Promise<void> {\n await this._post(`/${agentId}/reactivate`);\n }\n\n async setPolicy(agentId: string, policy: AgentPolicy): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/policy`, policy as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async assignWallet(agentId: string, walletId: string): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/wallet`, { walletId });\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Built-in UCP Merchant Directory\n// ---------------------------------------------------------------------------\n// Static registry of merchants with known UCP (Universal Checkout Protocol)\n// endpoints. Ships with the SDK so agents can resolve merchants to UCP\n// endpoints offline — no server round-trip required for known merchants.\n//\n// The directory enables instant protocol routing: when an agent encounters a\n// merchant prompt (\"buy from Glossier\"), it can match the brand to a known\n// UCP endpoint and route the VIC credential directly through UCP without\n// falling back to browser automation or Rye.\n//\n// Merchants are indexed by canonical domain AND common brand aliases so that\n// fuzzy prompt matching works (\"alo yoga\" → aloyoga.com → UCP endpoint).\n// ---------------------------------------------------------------------------\n\n/** A merchant with a known UCP endpoint. */\nexport interface UCPMerchant {\n /** Canonical brand name (display). */\n name: string;\n /** Primary domain (e.g. \"glossier.com\"). */\n domain: string;\n /** The full UCP well-known endpoint URL. */\n ucpEndpoint: string;\n /** Merchant category codes (ISO 18245). */\n mccs: string[];\n /** Product vertical for filtering. */\n vertical: string;\n /** Common brand aliases / alternate spellings for fuzzy matching. */\n aliases: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Known UCP Merchants\n// ---------------------------------------------------------------------------\n// These merchants expose a /.well-known/ucp endpoint that accepts structured\n// checkout requests. The list is curated — each entry has been verified.\n// ---------------------------------------------------------------------------\n\nconst UCP_MERCHANTS: readonly UCPMerchant[] = Object.freeze([\n {\n name: 'Monos',\n domain: 'monos.com',\n ucpEndpoint: 'https://monos.com/.well-known/ucp',\n mccs: ['5948'],\n vertical: 'travel',\n aliases: ['monos travel', 'monos luggage'],\n },\n {\n name: 'Gymshark',\n domain: 'gymshark.com',\n ucpEndpoint: 'https://us.checkout.gymshark.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['gym shark', 'gymshark us'],\n },\n {\n name: 'Glossier',\n domain: 'glossier.com',\n ucpEndpoint: 'https://glossier.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'beauty',\n aliases: ['glossier beauty'],\n },\n {\n name: 'Alo Yoga',\n domain: 'aloyoga.com',\n ucpEndpoint: 'https://aloyoga.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['alo', 'alo yoga', 'aloyoga'],\n },\n {\n name: 'Fender',\n domain: 'fender.com',\n ucpEndpoint: 'https://fender.com/.well-known/ucp',\n mccs: ['5733'],\n vertical: 'music',\n aliases: ['fender guitars', 'fender musical'],\n },\n {\n name: 'Outdoor Voices',\n domain: 'outdoorvoices.com',\n ucpEndpoint: 'https://outdoorvoices.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['outdoor voices', 'ov'],\n },\n {\n name: 'Casper',\n domain: 'casper.com',\n ucpEndpoint: 'https://casper.com/.well-known/ucp',\n mccs: ['5712'],\n vertical: 'home',\n aliases: ['casper sleep', 'casper mattress'],\n },\n {\n name: 'UNTUCKit',\n domain: 'untuckit.com',\n ucpEndpoint: 'https://untuckit.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['untuck it', 'untuckit'],\n },\n {\n name: 'Forever 21',\n domain: 'forever21.com',\n ucpEndpoint: 'https://forever21.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['forever 21', 'forever21', 'f21'],\n },\n {\n name: 'Decathlon',\n domain: 'decathlon.com',\n ucpEndpoint: 'https://decathlon.com/.well-known/ucp',\n mccs: ['5941'],\n vertical: 'sports',\n aliases: ['decathlon sports'],\n },\n {\n name: 'Olaplex',\n domain: 'olaplex.com',\n ucpEndpoint: 'https://olaplex.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'beauty',\n aliases: ['olaplex hair'],\n },\n {\n name: 'Grove Collaborative',\n domain: 'grove.co',\n ucpEndpoint: 'https://grove.co/.well-known/ucp',\n mccs: ['5999'],\n vertical: 'home',\n aliases: ['grove', 'grove co', 'grove collaborative'],\n },\n {\n name: \"Harry's\",\n domain: 'harrys.com',\n ucpEndpoint: 'https://harrys.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'grooming',\n aliases: ['harrys', \"harry's\", 'harrys razors'],\n },\n]);\n\n// ---------------------------------------------------------------------------\n// Lookup indexes (built once at module load)\n// ---------------------------------------------------------------------------\n\n/** Domain → UCPMerchant lookup (exact match). */\nconst byDomain = new Map<string, UCPMerchant>();\n\n/** Lowercase alias → UCPMerchant lookup (fuzzy match from prompts). */\nconst byAlias = new Map<string, UCPMerchant>();\n\nfor (const merchant of UCP_MERCHANTS) {\n // Index by domain (strip protocol, lowercase)\n byDomain.set(merchant.domain.toLowerCase(), merchant);\n\n // Index by brand name (lowercase)\n byAlias.set(merchant.name.toLowerCase(), merchant);\n\n // Index by each alias\n for (const alias of merchant.aliases) {\n byAlias.set(alias.toLowerCase(), merchant);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Get all known UCP merchants.\n *\n * Returns a frozen array — safe to expose to agents without copies.\n */\nexport function listUCPMerchants(): readonly UCPMerchant[] {\n return UCP_MERCHANTS;\n}\n\n/**\n * Look up a UCP merchant by exact domain.\n *\n * @example\n * ```ts\n * const m = resolveUCPByDomain('glossier.com');\n * // → { name: 'Glossier', ucpEndpoint: 'https://glossier.com/.well-known/ucp', ... }\n * ```\n */\nexport function resolveUCPByDomain(domain: string): UCPMerchant | undefined {\n // Normalize: strip protocol and trailing slash\n const normalized = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/+$/, '')\n .toLowerCase();\n\n // Try exact match first\n const exact = byDomain.get(normalized);\n if (exact) return exact;\n\n // Try matching base domain (e.g. \"us.checkout.gymshark.com\" → \"gymshark.com\")\n for (const [registeredDomain, merchant] of byDomain) {\n if (normalized.endsWith(registeredDomain) || registeredDomain.endsWith(normalized)) {\n return merchant;\n }\n }\n\n return undefined;\n}\n\n/**\n * Resolve a UCP merchant from a brand name or alias (fuzzy prompt matching).\n *\n * Handles common agent prompt patterns:\n * - \"buy from Glossier\" → extract \"glossier\" → match\n * - \"alo yoga leggings\" → extract \"alo yoga\" → match\n * - \"order from gym shark\" → extract \"gym shark\" → match\n *\n * @example\n * ```ts\n * const m = resolveUCPByBrand('alo yoga');\n * // → { name: 'Alo Yoga', ucpEndpoint: 'https://aloyoga.com/.well-known/ucp', ... }\n * ```\n */\nexport function resolveUCPByBrand(brandQuery: string): UCPMerchant | undefined {\n const normalized = brandQuery.trim().toLowerCase();\n\n // Exact alias match\n const exact = byAlias.get(normalized);\n if (exact) return exact;\n\n // Substring match — check if query contains a known brand name/alias\n for (const [alias, merchant] of byAlias) {\n if (normalized.includes(alias) || alias.includes(normalized)) {\n return merchant;\n }\n }\n\n return undefined;\n}\n\n/**\n * Build a UCP endpoint URL from a domain using the well-known convention.\n *\n * If the domain is in the known directory, returns the verified endpoint.\n * Otherwise, constructs a speculative endpoint for runtime probing.\n *\n * @example\n * ```ts\n * toUCPEndpoint('glossier.com')\n * // → 'https://glossier.com/.well-known/ucp' (verified)\n *\n * toUCPEndpoint('unknown-store.com')\n * // → 'https://unknown-store.com/.well-known/ucp' (speculative)\n * ```\n */\nexport function toUCPEndpoint(domain: string): { endpoint: string; verified: boolean } {\n const known = resolveUCPByDomain(domain);\n if (known) {\n return { endpoint: known.ucpEndpoint, verified: true };\n }\n\n // Construct speculative endpoint for unknown domains\n const normalized = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/+$/, '');\n\n return {\n endpoint: `https://${normalized}/.well-known/ucp`,\n verified: false,\n };\n}\n\n/**\n * Filter UCP merchants by vertical.\n *\n * @example\n * ```ts\n * const fashionMerchants = listUCPByVertical('fashion');\n * // → [Gymshark, Alo Yoga, Outdoor Voices, UNTUCKit, Forever 21]\n * ```\n */\nexport function listUCPByVertical(vertical: string): readonly UCPMerchant[] {\n return UCP_MERCHANTS.filter((m) => m.vertical.toLowerCase() === vertical.toLowerCase());\n}\n\n/**\n * Convert the UCP directory into MerchantCapabilities for the routing engine.\n *\n * This allows the PaymentRouter to immediately know these merchants support\n * UCP without a server round-trip, enabling Tier 3 routing out of the box.\n */\nexport function toMerchantCapabilities(): import('../routing/engine.js').MerchantCapabilities[] {\n return UCP_MERCHANTS.map((m) => ({\n merchantId: m.domain,\n hasBillingAPI: false,\n supportsACP: false,\n supportsUCP: true,\n supportsX402: false,\n supportsVIC: true,\n supportsRye: false,\n acceptsVisa: true,\n acceptsMastercard: true,\n mccs: m.mccs,\n }));\n}\n","import { Resource } from './base.js';\nimport type {\n ProtocolSession,\n CreateProtocolSessionParams,\n ProtocolPaymentData,\n ProtocolPaymentResult,\n ProtocolDiscoveryInfo,\n PaginatedResponse,\n} from '../types.js';\nimport { resolveUCPByDomain } from '../merchants/ucp-directory.js';\n\nexport class Protocol extends Resource {\n protected get basePath(): string {\n return '/agent/protocol';\n }\n\n /**\n * Discover all protocols a merchant domain supports.\n *\n * Checks the built-in UCP merchant directory first — if the domain has a\n * known verified UCP endpoint, returns immediately without a server call.\n * Falls back to server-side discovery for unknown merchants.\n */\n async discover(domain: string): Promise<ProtocolDiscoveryInfo> {\n // Check built-in UCP directory first (no server round-trip)\n const knownUCP = resolveUCPByDomain(domain);\n if (knownUCP) {\n return {\n domain: knownUCP.domain,\n protocols: ['ucp'],\n manifests: {\n ucp: { endpoint: knownUCP.ucpEndpoint, verified: true },\n } as Record<string, Record<string, unknown>>,\n };\n }\n\n const res = await this._post<ProtocolDiscoveryInfo>('/discover', { domain });\n return res.data;\n }\n\n /** Create a checkout session (auto-selects best protocol if not specified). */\n async createSession(params: CreateProtocolSessionParams): Promise<ProtocolSession> {\n const res = await this._post<ProtocolSession>('/sessions', params as unknown as Record<string, unknown>, params.idempotencyKey);\n return res.data;\n }\n\n /** Confirm payment for a session. */\n async confirmPayment(sessionId: string, paymentData?: ProtocolPaymentData): Promise<ProtocolPaymentResult> {\n const res = await this._post<ProtocolPaymentResult>(`/sessions/${sessionId}/confirm`, paymentData as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get session status. */\n async getSession(sessionId: string): Promise<ProtocolSession> {\n const res = await this._get<ProtocolSession>(`/sessions/${sessionId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Mandates Resource (Instruction-Level Mandates)\n// ---------------------------------------------------------------------------\n// Phase 2: Create, retrieve, list, and revoke instruction-level mandates.\n// Mandates encode user purchase intent constraints and are enforced at the\n// infrastructure level — category restrictions, merchant allow/blocklists,\n// amount caps, and attribute requirements.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n InstructionMandate,\n MandateBudgetStatus,\n CreateMandateParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Mandates extends Resource {\n protected get basePath(): string {\n return '/agent/mandate';\n }\n\n /** Create a new instruction-level mandate. */\n async create(params: CreateMandateParams): Promise<InstructionMandate> {\n const res = await this._post<InstructionMandate>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get a mandate by ID. */\n async get(mandateId: string): Promise<InstructionMandate> {\n const res = await this._get<InstructionMandate>(`/${mandateId}`);\n return res.data;\n }\n\n /** List mandates with optional filters and pagination. */\n async list(params?: {\n walletId?: string;\n status?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<InstructionMandate>> {\n return this._list<InstructionMandate>('', params);\n }\n\n /** Get budget status for a mandate. */\n async getBudget(mandateId: string): Promise<MandateBudgetStatus> {\n const res = await this._get<MandateBudgetStatus>(`/${mandateId}/budget`);\n return res.data;\n }\n\n /** Revoke an active mandate. */\n async revoke(mandateId: string): Promise<InstructionMandate> {\n const res = await this._post<InstructionMandate>(`/${mandateId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Delegations Resource\n// ---------------------------------------------------------------------------\n// Phase 3C: Delegate mandate authority from parent to child agents.\n// Supports creation, retrieval, listing, and revocation of delegations.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Delegation,\n CreateDelegationParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Delegations extends Resource {\n protected get basePath(): string {\n return '/agent/delegation';\n }\n\n /** Create a delegation from parent agent to child agent for a mandate. */\n async create(params: CreateDelegationParams): Promise<Delegation> {\n const res = await this._post<Delegation>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get a delegation by ID. */\n async get(delegationId: string): Promise<Delegation> {\n const res = await this._get<Delegation>(`/${delegationId}`);\n return res.data;\n }\n\n /** List delegations with optional filters. */\n async list(params?: {\n agentId?: string;\n mandateId?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<Delegation>> {\n return this._list<Delegation>('', params);\n }\n\n /** Revoke a delegation (cascades to child delegations). */\n async revoke(delegationId: string): Promise<Delegation> {\n const res = await this._post<Delegation>(`/${delegationId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Main Class\n// ---------------------------------------------------------------------------\n// This is the primary entry point for the SDK. It composes all resources\n// and provides a clean, Stripe-like interface:\n//\n// const lane = new Lane({ apiKey: 'lane_sk_...' })\n// const wallet = await lane.wallets.create({ userId: 'u1' })\n// const txn = await lane.pay.execute({ ... })\n// ---------------------------------------------------------------------------\n\nimport { LaneClient } from './client.js';\nimport { resolveConfig } from './config.js';\nimport { Auth } from './resources/auth.js';\nimport { Wallets } from './resources/wallets.js';\nimport { Pay } from './resources/pay.js';\nimport { Products } from './resources/products.js';\nimport { Checkout } from './resources/checkout.js';\nimport { Sell } from './resources/sell.js';\nimport { Admin } from './resources/admin.js';\nimport { Webhooks } from './resources/webhooks.js';\nimport { VIC } from './resources/vic.js';\nimport { Metering } from './resources/metering.js';\nimport { Payouts } from './resources/payouts.js';\nimport { Teams } from './resources/teams.js';\nimport { Agents } from './resources/agents.js';\nimport { Audit } from './resources/audit.js';\nimport { Identity } from './resources/identity.js';\nimport { Subscriptions } from './resources/subscriptions.js';\nimport { Merchants } from './resources/merchants.js';\nimport { Cards } from './resources/cards.js';\nimport { Instructions } from './resources/instructions.js';\nimport { Tokens } from './resources/tokens.js';\nimport { Transactions } from './resources/transactions.js';\nimport { Budgets } from './resources/budgets.js';\nimport { Users } from './resources/users.js';\nimport { Fleet } from './resources/fleet.js';\nimport { Protocol } from './resources/protocol.js';\nimport { Mandates } from './resources/mandates.js';\nimport { Delegations } from './resources/delegations.js';\nimport type { LaneConfig, ResolvedConfig, TokenStore } from './types.js';\n\n/**\n * Lane SDK client.\n *\n * Provides access to all Lane API resources through a composable,\n * object-oriented interface. Resources are lazily initialized on first access.\n *\n * @example\n * ```typescript\n * import Lane from 'lane'\n *\n * const lane = await Lane.create({ apiKey: process.env.LANE_KEY })\n *\n * const wallet = await lane.wallets.create({ userId: 'user_123' })\n * const products = await lane.products.search({ query: 'API credits' })\n * const txn = await lane.pay.execute({ recipient: 'replicate.com', amount: 20 })\n * ```\n */\nexport class Lane {\n private readonly client: LaneClient;\n /** Sell-side client — calls lane-repo (api.getonlane.com) for merchants, products, checkout. */\n private readonly _apiClient: LaneClient;\n private readonly _config: ResolvedConfig;\n\n // Lazily initialized resources\n private _auth?: Auth;\n private _wallets?: Wallets;\n private _pay?: Pay;\n private _products?: Products;\n private _checkout?: Checkout;\n private _sell?: Sell;\n private _admin?: Admin;\n private _webhooks?: Webhooks;\n private _vic?: VIC;\n private _metering?: Metering;\n private _payouts?: Payouts;\n private _teams?: Teams;\n private _agents?: Agents;\n private _audit?: Audit;\n private _identity?: Identity;\n private _subscriptions?: Subscriptions;\n private _merchants?: Merchants;\n private _cards?: Cards;\n private _instructions?: Instructions;\n private _tokens?: Tokens;\n private _transactions?: Transactions;\n private _budget?: Budgets;\n private _users?: Users;\n private _fleet?: Fleet;\n private _protocol?: Protocol;\n private _mandates?: Mandates;\n private _delegations?: Delegations;\n\n /**\n * Private constructor — use `Lane.create()` for async config resolution,\n * or `new Lane(resolvedConfig)` if you've already resolved config.\n */\n private constructor(config: ResolvedConfig) {\n this._config = config;\n this.client = new LaneClient(config);\n // Sell-side client uses apiUrl (lane-repo) instead of baseUrl (SDK server)\n this._apiClient = config.apiUrl !== config.baseUrl\n ? new LaneClient({ ...config, baseUrl: config.apiUrl })\n : this.client;\n }\n\n private static _throwWaitlistError(): never {\n throw new Error(\n '\\n\\n' +\n '╔══════════════════════════════════════════════════════════╗\\n' +\n '║ ║\\n' +\n '║ Lane SDK — Coming Soon ║\\n' +\n '║ ║\\n' +\n '║ The Lane SDK is not yet available for public use. ║\\n' +\n '║ Join the waitlist: https://app.getonlane.com/agents ║\\n' +\n '║ ║\\n' +\n '╚══════════════════════════════════════════════════════════╝\\n'\n );\n }\n\n /**\n * Verify SDK access with the Lane server.\n * The server checks `developers.sdk_access` in Supabase.\n * Whitelisted developers pass; everyone else gets the waitlist error.\n */\n private static async _verifyAccess(config: ResolvedConfig): Promise<void> {\n try {\n const res = await fetch(`${config.baseUrl}/agent/auth/verify-sdk-access`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n },\n signal: AbortSignal.timeout(config.timeout),\n });\n\n if (res.status === 403) {\n Lane._throwWaitlistError();\n }\n\n // 401 = bad key, let it through — LaneClient will throw a proper auth error later\n // 200 = whitelisted, good to go\n // Network error / 5xx = let them through (fail open for connectivity issues)\n } catch (err) {\n // If it's our waitlist error, re-throw it\n if (err instanceof Error && err.message.includes('Coming Soon')) {\n throw err;\n }\n // Network errors / timeouts: fail open so SDK works offline in dev\n }\n }\n\n /**\n * Create a new Lane SDK instance with async config resolution.\n *\n * Resolves API key from: constructor > env var > credentials file.\n * Gated by server-side whitelist — only developers with `sdk_access = true`\n * in Supabase can proceed.\n */\n static async create(options: LaneConfig = {}): Promise<Lane> {\n let config;\n try {\n config = await resolveConfig(options);\n } catch {\n Lane._throwWaitlistError();\n }\n\n await Lane._verifyAccess(config);\n return new Lane(config);\n }\n\n /**\n * Create a Lane SDK instance with explicit apiKey.\n *\n * Gated by server-side whitelist. Use `await Lane.create()` for async\n * config resolution, or this method when you already have the key.\n *\n * Note: This is async because it verifies SDK access with the server.\n */\n static async fromApiKey(apiKey: string, options: Omit<LaneConfig, 'apiKey'> = {}): Promise<Lane> {\n const baseUrl = options.baseUrl ?? 'https://api.getonlane.com';\n const config = Object.freeze({\n apiKey,\n baseUrl,\n apiUrl: options.apiUrl ?? process.env['LANE_API_URL'] ?? baseUrl,\n testMode: options.testMode ?? apiKey.startsWith('lane_sk_test_'),\n timeout: options.timeout ?? 30_000,\n maxRetries: options.maxRetries ?? 2,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n });\n\n await Lane._verifyAccess(config);\n return new Lane(config);\n }\n\n /** @internal — For SDK tests only. Bypasses the waitlist gate. */\n static _unsafeCreate(apiKey: string, options: Omit<LaneConfig, 'apiKey'> = {}): Lane {\n const baseUrl = options.baseUrl ?? 'https://api.getonlane.com';\n return new Lane(Object.freeze({\n apiKey,\n baseUrl,\n apiUrl: options.apiUrl ?? process.env['LANE_API_URL'] ?? 'https://api.getonlane.com',\n testMode: options.testMode ?? apiKey.startsWith('lane_sk_test_'),\n timeout: options.timeout ?? 30_000,\n maxRetries: options.maxRetries ?? 2,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n }));\n }\n\n // -------------------------------------------------------------------------\n // Resource Accessors (lazy initialization)\n // -------------------------------------------------------------------------\n\n /** Authentication — login, whoami, key rotation. */\n get auth(): Auth {\n return (this._auth ??= new Auth(this.client));\n }\n\n /** Wallets — create, list cards, add card, revoke. */\n get wallets(): Wallets {\n return (this._wallets ??= new Wallets(this.client));\n }\n\n /** Pay — agentic tokens, payment execution, refunds. */\n get pay(): Pay {\n return (this._pay ??= new Pay(this.client));\n }\n\n /** Products — search catalog, list merchants. */\n /** Products — search the Lane marketplace catalog (calls lane-repo). */\n get products(): Products {\n return (this._products ??= new Products(this._apiClient));\n }\n\n /** Checkout — create and complete checkout sessions. */\n /** Checkout — create and complete checkout sessions (calls lane-repo). */\n get checkout(): Checkout {\n return (this._checkout ??= new Checkout(this._apiClient));\n }\n\n /** Sell — list products for sale, analytics (Make-a-SaaS). */\n get sell(): Sell {\n return (this._sell ??= new Sell(this.client));\n }\n\n /** Admin — spending, budgets, team management, GDPR. */\n get admin(): Admin {\n return (this._admin ??= new Admin(this.client));\n }\n\n /** Webhooks — register, verify, manage webhook endpoints. */\n get webhooks(): Webhooks {\n return (this._webhooks ??= new Webhooks(this.client));\n }\n\n /** VIC — Visa Intelligent Commerce agentic tokens (Phase 2). */\n get vic(): VIC {\n return (this._vic ??= new VIC(this.client));\n }\n\n /** Metering — usage tracking for Make-a-SaaS sellers (Phase 4). */\n get metering(): Metering {\n return (this._metering ??= new Metering(this.client));\n }\n\n /** Payouts — seller disbursements (Phase 4). */\n get payouts(): Payouts {\n return (this._payouts ??= new Payouts(this.client));\n }\n\n /** Teams — team management with hierarchical budgets (Phase 5). */\n get teams(): Teams {\n return (this._teams ??= new Teams(this.client));\n }\n\n /** Agents — fleet management with per-agent policies (Phase 5). */\n get agents(): Agents {\n return (this._agents ??= new Agents(this.client));\n }\n\n /** Audit — immutable audit trail for SOC 2 compliance (Phase 5). */\n get audit(): Audit {\n return (this._audit ??= new Audit(this.client));\n }\n\n /** Identity — agent identity and KYC chain (Phase 6). */\n get identity(): Identity {\n return (this._identity ??= new Identity(this.client));\n }\n\n /** Subscriptions — manage software subscriptions (SCP). */\n get subscriptions(): Subscriptions {\n return (this._subscriptions ??= new Subscriptions(this.client));\n }\n\n /** Merchants — discover and search the merchant directory. */\n /** Merchants — discover Lane-onboarded merchants (calls lane-repo). */\n get merchants(): Merchants {\n return (this._merchants ??= new Merchants(this._apiClient));\n }\n\n /** Cards — list, get, delete, add-link. */\n get cards(): Cards {\n return (this._cards ??= new Cards(this.client));\n }\n\n /** Instructions — VIC instruction lifecycle. */\n get instructions(): Instructions {\n return (this._instructions ??= new Instructions(this.client));\n }\n\n /** Tokens — provision, suspend, reactivate, delete. */\n get tokens(): Tokens {\n return (this._tokens ??= new Tokens(this.client));\n }\n\n /** Transactions — list, get, refund. */\n get transactions(): Transactions {\n return (this._transactions ??= new Transactions(this.client));\n }\n\n /** Budget — get, set, spending. */\n get budget(): Budgets {\n return (this._budget ??= new Budgets(this.client));\n }\n\n /** Users — create, list, get, update, delete, session. */\n get users(): Users {\n return (this._users ??= new Users(this.client));\n }\n\n /** Fleet — agent fleet management (replaces agents). */\n get fleet(): Fleet {\n return (this._fleet ??= new Fleet(this.client));\n }\n\n /** Protocol — multi-protocol payment sessions (SCP). */\n get protocol(): Protocol {\n return (this._protocol ??= new Protocol(this.client));\n }\n\n /** Mandates — spending mandates and constraints. */\n get mandates(): Mandates {\n return (this._mandates ??= new Mandates(this.client));\n }\n\n /** Delegations — agent-to-agent delegation chains. */\n get delegations(): Delegations {\n return (this._delegations ??= new Delegations(this.client));\n }\n\n // -------------------------------------------------------------------------\n // Observability\n // -------------------------------------------------------------------------\n\n /** Subscribe to SDK events (request, response, error, retry). */\n on(\n event: 'request' | 'response' | 'error' | 'retry',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (...args: any[]) => void,\n ): this {\n this.client.on(event, listener);\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Metadata\n // -------------------------------------------------------------------------\n\n /** Whether this instance is operating in test mode. */\n get testMode(): boolean {\n return this._config.testMode;\n }\n\n /** The resolved base URL. */\n get baseUrl(): string {\n return this._config.baseUrl;\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition, type ToolResult } from '../tool.js';\nimport { LaneError } from '../../errors.js';\nimport { Lane } from '../../lane.js';\n\nconst inputSchema = z.object({\n apiKey: z.string().optional().describe('Your Lane API key (starts with lane_sk_).'),\n sessionId: z.string().optional().describe('Session ID from lane_signup to poll for completion.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\n/**\n * Pre-auth tool that accepts an API key or session ID and triggers SDK reinitialization.\n *\n * Supports two flows:\n * 1. Direct API key — validates format, creates Lane instance, calls onConnect.\n * 2. Session polling — polls the onboarding API until the session is ready.\n */\nexport class LaneConnectTool extends LaneTool<Input> {\n private readonly onConnect: (lane: Lane) => Promise<void>;\n private readonly baseUrl: string;\n private static readonly MAX_POLL_ATTEMPTS = 60;\n private static readonly POLL_INTERVAL_MS = 3000;\n\n constructor(\n lane: Lane | null,\n onConnect: (lane: Lane) => Promise<void>,\n options?: { baseUrl?: string },\n ) {\n super(lane);\n this.onConnect = onConnect;\n this.baseUrl = options?.baseUrl ?? 'https://api.getonlane.com';\n }\n\n get definition(): ToolDefinition {\n return {\n name: 'lane_connect',\n description:\n 'Authenticate this MCP session with a Lane API key or by polling a signup session. ' +\n 'After connecting, all Lane payment tools become available. ' +\n 'Call lane_signup first if the user does not have an API key. ' +\n 'No authentication required.',\n inputSchema,\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Require at least one input\n if (!input.apiKey && !input.sessionId) {\n throw new LaneError('Either apiKey or sessionId is required.', {\n code: 'missing_input',\n statusCode: 400,\n suggestedAction: 'Provide an API key (starts with lane_sk_) or a sessionId from lane_signup.',\n });\n }\n\n // Direct API key flow\n if (input.apiKey) {\n return this.connectWithApiKey(input.apiKey);\n }\n\n // Session polling flow\n return this.pollSession(input.sessionId!);\n }\n\n private async connectWithApiKey(apiKey: string): Promise<unknown> {\n // Validate API key format\n if (!apiKey.startsWith('lane_sk_')) {\n throw new LaneError('Invalid API key format. Lane API keys start with lane_sk_.', {\n code: 'invalid_api_key_format',\n statusCode: 400,\n suggestedAction: 'Check your API key. Valid keys start with lane_sk_.',\n });\n }\n\n // If already connected, return profile\n if (this.lane) {\n const profile = await this.lane.auth.whoami();\n return {\n status: 'already_connected',\n profile,\n };\n }\n\n // Create Lane instance and call onConnect\n const laneInstance = await Lane.fromApiKey(apiKey);\n await this.onConnect(laneInstance);\n\n const profile = await laneInstance.auth.whoami();\n\n return {\n status: 'connected',\n message: 'Successfully authenticated with Lane. All payment tools are now available.',\n profile,\n };\n }\n\n private async pollSession(sessionId: string): Promise<unknown> {\n for (let attempt = 0; attempt < LaneConnectTool.MAX_POLL_ATTEMPTS; attempt++) {\n try {\n const response = await fetch(\n `${this.baseUrl}/agent/onboarding/sessions/${sessionId}`,\n );\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new LaneError('Session not found.', {\n code: 'session_not_found',\n statusCode: 404,\n suggestedAction: 'Call lane_signup to create a new session.',\n });\n }\n // Non-404 errors — continue polling\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n continue;\n }\n\n const data = await response.json() as { status: string; apiKey?: string };\n\n if (data.status === 'ready' && data.apiKey) {\n // Session completed — connect with the API key\n const laneInstance = await Lane.fromApiKey(data.apiKey);\n await this.onConnect(laneInstance);\n\n const profile = await laneInstance.auth.whoami();\n\n return {\n status: 'connected',\n message: 'Successfully authenticated with Lane. All payment tools are now available.',\n profile,\n };\n }\n\n // Not ready yet — wait and try again\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n } catch (err) {\n if (err instanceof LaneError) throw err;\n // Network errors, JSON parse errors — continue polling\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n }\n }\n\n // Exhausted all attempts\n throw new LaneError('Session polling timed out.', {\n code: 'session_timeout',\n statusCode: 408,\n suggestedAction: 'The signup session timed out. Call lane_signup to create a new session.',\n });\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n walletId: z\n .string()\n .optional()\n .describe('Wallet to add the card to. If omitted, uses the default wallet (creates one if needed).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\n/**\n * Post-auth tool that returns a VGS Collect URL for securely adding a payment card.\n */\nexport class LaneAddCardTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'lane_add_card',\n description:\n 'Get a secure link for the user to add a payment card to their Lane wallet. ' +\n 'The link opens a PCI-compliant VGS Collect form — the agent never sees raw card numbers. ' +\n 'Show this URL to the user so they can enter their card details in a browser.',\n inputSchema,\n requiresAuth: true,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n let walletId = input.walletId;\n\n if (!walletId) {\n // Try to find an existing wallet\n const wallets = await lane.wallets.list();\n if (wallets.data.length > 0) {\n walletId = wallets.data[0]!.id;\n } else {\n // Create a default wallet\n const wallet = await lane.wallets.create({ label: 'default' });\n walletId = wallet.id;\n }\n }\n\n const { url, expiresAt } = await lane.wallets.getAddCardLink(walletId);\n\n return {\n cardEntryUrl: url,\n walletId,\n expiresAt,\n instructions: [\n 'Show this URL to the user — they need to open it in a browser to add their card.',\n 'The form is hosted by VGS (Very Good Security) and is PCI DSS compliant.',\n 'After adding a card, the user can start making payments with Lane.',\n ],\n security: {\n pciCompliant: true,\n hostedBy: 'VGS (Very Good Security)',\n agentCardAccess: 'none — agents never see or handle raw card numbers',\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class WhoamiTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'whoami',\n description: 'Get the authenticated developer profile. Returns email, plan, and member since date.',\n inputSchema: z.object({}),\n };\n }\n\n protected async run(): Promise<unknown> {\n return this.getLane().auth.whoami();\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n walletId: z.string().optional().describe('Wallet ID. Uses default wallet if not provided.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListCardsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_cards',\n description:\n 'List available payment cards. Returns last4 and brand only — never full card numbers. ' +\n 'Use this to check what payment methods are available before making a purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await this.getLane().wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return { cards: [], message: 'No wallets found. Ask the developer to run `lane add-card`.' };\n }\n walletId = wallets.data[0]!.id;\n }\n const cards = await this.getLane().wallets.listCards(walletId);\n return { cards };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n cardId: z.string().optional().describe('Specific card ID to check balance for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CheckBalanceTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'check_balance',\n description:\n 'Check remaining spending budget and limits. Returns daily limit, weekly limit, ' +\n 'monthly limit, per-task limit, and how much has been spent today. ' +\n 'Always check balance before making a payment to avoid exceeding limits.',\n inputSchema,\n };\n }\n\n protected async run(_input: Input): Promise<unknown> {\n const lane = this.getLane();\n const [budget, spending] = await Promise.all([\n lane.admin.getBudget(),\n lane.admin.spending({ period: '1d' }),\n ]);\n\n return {\n spentToday: spending.total,\n currency: spending.currency,\n limits: {\n daily: budget.dailyLimit ?? null,\n weekly: budget.weeklyLimit ?? null,\n monthly: budget.monthlyLimit ?? null,\n perTask: budget.perTaskLimit ?? null,\n confirmationThreshold: budget.confirmationThreshold ?? null,\n },\n remaining: budget.dailyLimit\n ? { daily: budget.dailyLimit - spending.total }\n : null,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Biometric Verification (4-tier fallback chain)\n// ---------------------------------------------------------------------------\n// 1. Touch ID via optional `node-mac-auth` dependency (dynamic import)\n// 2. macOS system password via `osascript`\n// 3. Browser WebAuthn passkey via ephemeral port server\n// 4. Interactive CLI PIN via readline\n// ---------------------------------------------------------------------------\n\nexport type BiometricMethod = 'touchid' | 'system_password' | 'webauthn_passkey' | 'pin';\n\nexport interface BiometricOptions {\n reuseWindowSeconds?: number;\n skipMethods?: BiometricMethod[];\n instructionId?: string;\n}\n\nexport interface BiometricProof {\n method: BiometricMethod;\n timestamp: string;\n machineId?: string;\n}\n\ninterface CachedProof {\n proof: BiometricProof;\n expiresAt: number;\n}\n\nconst DEFAULT_REUSE_WINDOW_SECONDS = 60; // 1 minute\n\nexport class BiometricVerifier {\n private cache = new Map<string, CachedProof>();\n\n /** Always true — at minimum, PIN fallback is available. */\n canVerify(): boolean {\n return true;\n }\n\n /**\n * Verify the user's identity using the 4-tier fallback chain.\n * Returns a proof on success; throws on failure.\n */\n async verify(reason: string, opts?: BiometricOptions): Promise<BiometricProof> {\n const reuseWindow = opts?.reuseWindowSeconds ?? DEFAULT_REUSE_WINDOW_SECONDS;\n const skip = new Set(opts?.skipMethods ?? []);\n\n // Check reuse cache\n const cacheKey = 'default';\n const cached = this.cache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.proof;\n }\n\n const methods: { method: BiometricMethod; fn: () => Promise<BiometricProof> }[] = [\n { method: 'touchid', fn: () => this.tryTouchID(reason) },\n { method: 'system_password', fn: () => this.trySystemPassword(reason) },\n { method: 'webauthn_passkey', fn: () => this.tryWebAuthn(reason, opts?.instructionId) },\n { method: 'pin', fn: () => this.tryPIN(reason) },\n ];\n\n let lastError: Error | undefined;\n\n for (const { method, fn } of methods) {\n if (skip.has(method)) continue;\n try {\n const proof = await fn();\n // Cache the proof\n this.cache.set(cacheKey, {\n proof,\n expiresAt: Date.now() + reuseWindow * 1000,\n });\n return proof;\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n // Fall through to next method\n }\n }\n\n throw lastError ?? new Error('All biometric verification methods failed');\n }\n\n /** Clear the reuse cache (e.g. on logout). */\n clearCache(): void {\n this.cache.clear();\n }\n\n // ---------------------------------------------------------------------------\n // Tier 1: Touch ID (macOS only, requires optional `node-mac-auth`)\n // ---------------------------------------------------------------------------\n\n private async tryTouchID(reason: string): Promise<BiometricProof> {\n // Dynamic string prevents bundlers from resolving this optional dependency at build time\n const moduleName = 'node-mac-auth';\n const { canPromptTouchID, promptTouchID } = await import(/* @vite-ignore */ moduleName);\n if (!canPromptTouchID()) throw new Error('Touch ID unavailable');\n await promptTouchID({ reason });\n return { method: 'touchid', timestamp: new Date().toISOString() };\n }\n\n // ---------------------------------------------------------------------------\n // Tier 2: macOS system password dialog via osascript\n // ---------------------------------------------------------------------------\n\n private async trySystemPassword(reason: string): Promise<BiometricProof> {\n const { execFile } = await import('node:child_process');\n const { promisify } = await import('node:util');\n const exec = promisify(execFile);\n await exec('osascript', [\n '-e',\n `display dialog \"${reason}\" with title \"Lane Payment Verification\" with hidden answer default answer \"\"`,\n ]);\n return { method: 'system_password', timestamp: new Date().toISOString() };\n }\n\n // ---------------------------------------------------------------------------\n // Tier 3: Browser WebAuthn passkey via ephemeral local server\n // ---------------------------------------------------------------------------\n\n private async tryWebAuthn(reason: string, instructionId?: string): Promise<BiometricProof> {\n const { createServer } = await import('node:http');\n const open = (await import('open')).default;\n\n return new Promise<BiometricProof>((resolve, reject) => {\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n if (url.pathname === '/callback') {\n const verified = url.searchParams.get('verified');\n if (verified === 'true') {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n '<!DOCTYPE html><html><body style=\"font-family:sans-serif;display:flex;justify-content:center;align-items:center;height:100vh\"><h1 style=\"color:#10b981\">Verified</h1></body></html>',\n );\n cleanup();\n resolve({ method: 'webauthn_passkey', timestamp: new Date().toISOString() });\n return;\n }\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n '<!DOCTYPE html><html><body style=\"font-family:sans-serif;display:flex;justify-content:center;align-items:center;height:100vh\"><h1 style=\"color:#ef4444\">Verification Failed</h1></body></html>',\n );\n cleanup();\n reject(new Error('WebAuthn verification failed'));\n return;\n }\n res.writeHead(404);\n res.end();\n });\n\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error('WebAuthn timed out'));\n }, 120_000);\n\n function cleanup() {\n clearTimeout(timeout);\n server.close();\n }\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n if (!addr || typeof addr === 'string') {\n reject(new Error('Failed to start server'));\n return;\n }\n const port = (addr as { port: number }).port;\n const verifyUrl = `https://agent.getonlane.com/verify?callbackPort=${port}${instructionId ? `&instructionId=${instructionId}` : ''}`;\n process.stderr.write(`\\nOpen this URL to verify: ${verifyUrl}\\n\\n`);\n open(verifyUrl).catch(() => {});\n });\n\n server.on('error', (err) => {\n cleanup();\n reject(err);\n });\n });\n }\n\n // ---------------------------------------------------------------------------\n // Tier 4: Interactive CLI PIN (always available)\n // ---------------------------------------------------------------------------\n\n private async tryPIN(reason: string): Promise<BiometricProof> {\n const { createInterface } = await import('node:readline');\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n\n return new Promise<BiometricProof>((resolve, reject) => {\n process.stderr.write(`\\n${reason}\\n`);\n rl.question('Enter PIN: ', (answer) => {\n rl.close();\n if (!answer || answer.length < 4) {\n reject(new Error('PIN verification cancelled or too short'));\n return;\n }\n resolve({ method: 'pin', timestamp: new Date().toISOString() });\n });\n });\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Biometric Confirmation for Agent Instructions\n// ---------------------------------------------------------------------------\n\nimport type { Lane } from '../lane.js';\nimport { BiometricVerifier, type BiometricOptions } from './biometric.js';\nimport { LaneConfirmationError } from '../errors.js';\n\nconst DEFAULT_REUSE_WINDOW_SECONDS = 60;\n\nconst verifier = new BiometricVerifier();\n\nexport interface InstructionConfirmation {\n id: string;\n instructionId: string;\n method: string;\n timestamp: string;\n}\n\nexport async function requireBiometricConfirmation(\n lane: Lane,\n instructionId: string,\n opts: { amount?: number; merchant?: string; reuseWindowSeconds?: number } = {},\n): Promise<InstructionConfirmation> {\n const reuseWindow = opts.reuseWindowSeconds ?? DEFAULT_REUSE_WINDOW_SECONDS;\n const cutoff = new Date(Date.now() - reuseWindow * 1000).toISOString();\n\n // Check for existing valid biometric confirmation\n try {\n const confirmations = await lane.instructions.listConfirmations(instructionId);\n const valid = confirmations.find(\n (c) => c.confirmationType === 'biometric' && c.createdAt > cutoff,\n );\n if (valid) {\n const method = typeof valid.details === 'object' && valid.details !== null && typeof (valid.details as Record<string, unknown>).method === 'string'\n ? (valid.details as Record<string, unknown>).method as string\n : 'unknown';\n return {\n id: valid.id,\n instructionId,\n method,\n timestamp: valid.createdAt,\n };\n }\n } catch (err) {\n // Log warning but continue — will re-prompt biometric\n process.stderr.write(`[lane] warning: failed to check existing confirmations: ${err instanceof Error ? err.message : String(err)}\\n`);\n }\n\n // Build human-readable reason string\n const parts = ['Lane: Authorize'];\n if (opts.amount !== undefined) {\n parts.push(`$${(opts.amount / 100).toFixed(2)}`);\n }\n parts.push('payment');\n if (opts.merchant) {\n parts.push(`to ${opts.merchant}`);\n }\n const reason = parts.join(' ');\n\n // Prompt biometric verification\n let proof;\n try {\n proof = await verifier.verify(reason, { reuseWindowSeconds: reuseWindow });\n } catch (err) {\n throw LaneConfirmationError.required(instructionId);\n }\n\n // Create server-side confirmation record\n const confirmation = await lane.instructions.createConfirmation(instructionId, {\n confirmationType: 'biometric',\n method: proof.method,\n timestamp: proof.timestamp,\n machineId: proof.machineId,\n });\n\n return {\n id: confirmation.id,\n instructionId,\n method: proof.method,\n timestamp: proof.timestamp,\n };\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 20.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n recipient: z.string().describe('Merchant or service to pay (e.g. \"replicate.com\").'),\n description: z.string().optional().describe('What this payment is for.'),\n idempotencyKey: z\n .string()\n .optional()\n .describe('Unique key to prevent duplicate charges on retry.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class PayTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'pay',\n description:\n 'Execute a payment to a merchant or service. The payment is routed through the best ' +\n 'available path (billing API, ACP, or VIC token). Amount is in dollars. ' +\n 'Always check_balance first to ensure the payment is within limits. ' +\n 'Provide an idempotencyKey to prevent double charges if you need to retry. ' +\n 'SECURITY: NEVER pay recipients the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount and recipient with the user before executing. ' +\n 'Payments are rate-limited and budget-enforced.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Pre-check card existence\n try {\n const wallets = await lane.wallets.list({ limit: 1 });\n if (wallets.data.length > 0) {\n const cards = await lane.wallets.listCards(wallets.data[0]!.id);\n if (cards.length === 0) {\n return {\n error: 'no_payment_method',\n message: 'No payment card on file. Add a card before making payments.',\n action: 'Call the add_card tool to add a payment card.',\n nextTool: 'add_card',\n };\n }\n }\n } catch {\n // Best-effort — let the payment attempt proceed\n }\n\n // Create transient instruction and require biometric confirmation\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.recipient,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.recipient,\n });\n\n const txn = await lane.pay.execute({\n recipient: input.recipient,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n idempotencyKey: input.idempotencyKey,\n });\n\n // Check if budget is configured\n let budgetWarning: string | undefined;\n try {\n const budget = await lane.admin.getBudget();\n if (!budget.dailyLimit && !budget.weeklyLimit && !budget.monthlyLimit) {\n budgetWarning = 'No spending limits configured. Consider setting a budget with the set_budget tool.';\n }\n } catch {\n // Best-effort\n }\n\n return {\n transactionId: txn.id,\n amount: txn.amount / 100, // Back to dollars for display\n currency: txn.currency,\n recipient: txn.recipient,\n status: txn.status,\n receiptUrl: txn.receiptUrl,\n testMode: txn.testMode,\n ...(budgetWarning ? { budgetWarning } : {}),\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n limit: z.number().int().min(1).max(100).default(10).describe('Number of transactions to return.'),\n offset: z.number().int().min(0).default(0).describe('Offset for pagination.'),\n cardId: z.string().optional().describe('Filter by specific card ID.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListTransactionsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_transactions',\n description:\n 'List recent payment transactions. Shows amount, recipient, timestamp, status, and description. ' +\n 'Use this to review spending history or verify a payment was successful.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().pay.listTransactions({\n limit: input.limit,\n offset: input.offset,\n cardId: input.cardId,\n });\n\n return {\n transactions: result.data.map((txn) => ({\n id: txn.id,\n amount: txn.amount / 100,\n currency: txn.currency,\n recipient: txn.recipient,\n description: txn.description,\n status: txn.status,\n testMode: txn.testMode,\n createdAt: txn.createdAt,\n })),\n total: result.total,\n limit: result.limit,\n offset: result.offset,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().describe('Search query (e.g. \"image resize API\", \"API credits\").'),\n type: z\n .enum(['skill', 'api', 'saas', 'opensource'])\n .optional()\n .describe('Filter by product type.'),\n limit: z.number().int().min(1).max(50).default(10).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SearchProductsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'search_products',\n description:\n 'Search the Lane product catalog for APIs, skills, SaaS, and open source tools. ' +\n 'Returns product name, description, pricing, and seller info. ' +\n 'Use this to find services the agent can purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().products.search({\n query: input.query,\n type: input.type,\n limit: input.limit,\n });\n\n return {\n products: result.data.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n type: p.type,\n pricing: p.pricing,\n rating: p.rating,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n productId: z.string().describe('Product ID from search_products results.'),\n walletId: z.string().optional().describe('Wallet ID. Uses default if not provided.'),\n quantity: z.number().int().min(1).default(1).describe('Quantity to purchase.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CheckoutTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'checkout',\n description:\n 'Purchase a product from the Lane catalog. Creates a checkout session and completes ' +\n 'payment in one step. Returns the order details including any API keys or endpoints. ' +\n 'Use search_products first to find the product ID.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await this.getLane().wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return {\n error: 'no_wallet',\n message: 'No wallet found. Ask the developer to run `lane add-card` first.',\n };\n }\n walletId = wallets.data[0]!.id;\n }\n\n // Create and immediately complete checkout\n const lane = this.getLane();\n const session = await lane.checkout.create({\n productId: input.productId,\n walletId,\n quantity: input.quantity,\n });\n\n const order = await lane.checkout.complete(session.id);\n\n return {\n orderId: order.id,\n productId: order.productId,\n amount: order.amount / 100,\n currency: order.currency,\n status: order.status,\n apiKey: order.apiKey,\n endpoint: order.endpoint,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n daily: z.number().positive().max(10000).optional().describe('Daily spending limit in dollars (max $10,000).'),\n weekly: z.number().positive().max(50000).optional().describe('Weekly spending limit in dollars (max $50,000).'),\n monthly: z.number().positive().max(200000).optional().describe('Monthly spending limit in dollars (max $200,000).'),\n perTask: z.number().positive().max(5000).optional().describe('Per-task spending limit in dollars (max $5,000).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SetBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'set_budget',\n description:\n 'Set spending limits for agent payments. Amounts are in dollars. ' +\n 'Only the authenticated developer can change these limits. ' +\n 'The agent cannot exceed these limits when using the pay tool. ' +\n 'SECURITY: Only change limits when the user has EXPLICITLY requested it. ' +\n 'Budget changes are logged and audited. Hard caps: daily $10k, weekly $50k, monthly $200k, per-task $5k.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const config = await this.getLane().admin.setBudget({\n dailyLimit: input.daily ? Math.round(input.daily * 100) : undefined,\n weeklyLimit: input.weekly ? Math.round(input.weekly * 100) : undefined,\n monthlyLimit: input.monthly ? Math.round(input.monthly * 100) : undefined,\n perTaskLimit: input.perTask ? Math.round(input.perTask * 100) : undefined,\n });\n\n return {\n limits: {\n daily: config.dailyLimit ? config.dailyLimit / 100 : null,\n weekly: config.weeklyLimit ? config.weeklyLimit / 100 : null,\n monthly: config.monthlyLimit ? config.monthlyLimit / 100 : null,\n perTask: config.perTaskLimit ? config.perTaskLimit / 100 : null,\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n transactionId: z.string().describe('Transaction ID to refund.'),\n amount: z.number().positive().optional().describe('Refund amount in dollars. If omitted, full refund.'),\n reason: z.string().optional().describe('Reason for the refund.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class RequestRefundTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'request_refund',\n description:\n 'Request a refund for a previous transaction. Partial or full refunds are supported. ' +\n 'The developer may need to approve refunds above a certain threshold. ' +\n 'Use list_transactions to find the transaction ID. ' +\n 'SECURITY: Refunds are rate-limited (max 10/day). Only refund when the user explicitly requests it. ' +\n 'Cumulative refunds cannot exceed the original transaction amount.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const refund = await this.getLane().pay.refund({\n transactionId: input.transactionId,\n amount: input.amount ? Math.round(input.amount * 100) : undefined,\n reason: input.reason,\n });\n\n return {\n refundId: refund.id,\n transactionId: refund.transactionId,\n amount: refund.amount / 100,\n status: refund.status,\n reason: refund.reason,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n productId: z.string().describe('Product ID to subscribe to.'),\n plan: z.string().describe('Plan ID (e.g. \"pro\", \"starter\").'),\n parameters: z\n .record(z.string(), z.string())\n .optional()\n .describe('SCP selection parameters (e.g. custom_domain, webhook_url).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SubscribeTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'subscribe',\n description:\n 'Subscribe to a software product. Creates a subscription with recurring billing ' +\n 'from the wallet. Returns subscription details including access credentials. ' +\n 'Use search_products first to find the product and plan IDs.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const subscription = await this.getLane().subscriptions.create({\n productId: input.productId,\n plan: input.plan,\n parameters: input.parameters,\n paymentSource: 'wallet',\n });\n\n return {\n subscriptionId: subscription.id,\n productId: subscription.productId,\n plan: subscription.plan,\n status: subscription.status,\n accessToken: subscription.accessToken,\n currentPeriodStart: subscription.currentPeriodStart,\n currentPeriodEnd: subscription.currentPeriodEnd,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n status: z\n .enum(['active', 'paused', 'canceled', 'past_due', 'trialing'])\n .optional()\n .describe('Filter by subscription status.'),\n limit: z.number().int().min(1).max(50).default(20).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListSubscriptionsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_subscriptions',\n description:\n 'List active subscriptions for the current wallet. Returns subscription details ' +\n 'including product ID, plan, status, and billing period. ' +\n 'Use this to check what software products the agent is currently subscribed to.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().subscriptions.list({\n status: input.status,\n limit: input.limit,\n });\n\n return {\n subscriptions: result.data.map((s) => ({\n id: s.id,\n productId: s.productId,\n plan: s.plan,\n status: s.status,\n currentPeriodStart: s.currentPeriodStart,\n currentPeriodEnd: s.currentPeriodEnd,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().describe('Search query (e.g. \"monitoring API\", \"email service\").'),\n type: z\n .enum(['software', 'skill', 'oss'])\n .optional()\n .describe('Filter by software type. Defaults to all software types.'),\n pricingModel: z\n .enum(['fixed', 'subscription', 'consumption'])\n .optional()\n .describe('Filter by pricing model.'),\n limit: z.number().int().min(1).max(50).default(10).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SearchSoftwareTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'search_software',\n description:\n 'Search for software products, SaaS tools, skills, and open source tools in the Lane catalog. ' +\n 'Returns product details including SCP manifests, pricing, and plans. ' +\n 'More targeted than search_products — focuses on software and subscribable products.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Map software-specific types to the product search type\n const typeMap: Record<string, 'skill' | 'api' | 'saas' | 'opensource'> = {\n software: 'saas',\n skill: 'skill',\n oss: 'opensource',\n };\n\n const result = await this.getLane().products.search({\n query: input.query,\n type: input.type ? typeMap[input.type] : undefined,\n limit: input.limit,\n });\n\n return {\n products: result.data.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n type: p.type,\n pricing: p.pricing,\n rating: p.rating,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n subscriptionId: z.string().describe('Subscription ID to cancel.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CancelSubscriptionTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'cancel_subscription',\n description:\n 'Cancel an active subscription. The subscription will remain active until the end ' +\n 'of the current billing period. Use list_subscriptions first to find the subscription ID.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const subscription = await this.getLane().subscriptions.cancel(input.subscriptionId);\n\n return {\n subscriptionId: subscription.id,\n productId: subscription.productId,\n plan: subscription.plan,\n status: subscription.status,\n canceledAt: subscription.canceledAt,\n currentPeriodEnd: subscription.currentPeriodEnd,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// MCP Tool — Discover Merchants\n// ---------------------------------------------------------------------------\n\nimport { z } from 'zod';\nimport { LaneTool } from '../tool.js';\nimport type { ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().optional().describe('Search query to find merchants by name or description.'),\n merchantType: z\n .enum(['ecommerce', 'software', 'api', 'saas', 'skill', 'service'])\n .optional()\n .describe('Filter by merchant type.'),\n vertical: z.string().optional().describe('Filter by vertical (e.g. \"fashion\", \"electronics\", \"developer_tools\").'),\n subcategory: z.string().optional().describe('Filter by subcategory (e.g. \"shoes\", \"laptops\", \"hosting\").'),\n limit: z.number().int().min(1).max(50).optional().default(10).describe('Max results to return (default 10).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class DiscoverMerchantsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'discover_merchants',\n description:\n 'Search the Lane merchant directory to find AI-shoppable merchants. ' +\n 'Filter by type (ecommerce, software, api, saas, skill, service), ' +\n 'vertical (fashion, electronics, developer_tools, etc.), ' +\n 'subcategory (shoes, laptops, hosting, etc.), or free-text query. ' +\n 'Returns merchant name, domain, capabilities, and supported payment methods.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().merchants.list({\n query: input.query,\n merchantType: input.merchantType,\n vertical: input.vertical,\n subcategory: input.subcategory,\n limit: input.limit,\n });\n\n return {\n merchants: result.data.map((m) => ({\n name: m.name,\n slug: m.slug,\n domain: m.domain,\n description: m.description,\n merchantType: m.merchantType,\n vertical: m.vertical,\n subcategories: m.subcategories,\n protocols: m.protocols,\n capabilities: m.capabilities,\n productCount: m.productCount,\n })),\n total: result.total,\n showing: result.data.length,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class LaneOnboardingStatusTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'lane_onboarding_status',\n description: 'Check what onboarding steps have been completed. Returns whether the user has an API key, payment card, and budget configured.',\n inputSchema: z.object({}),\n };\n }\n\n protected async run(): Promise<unknown> {\n const lane = this.getLane();\n\n // Check what's been set up\n const [profile, wallets, budget, balanceResult] = await Promise.all([\n lane.auth.whoami(),\n lane.wallets.list({ limit: 1 }),\n lane.admin.getBudget().catch(() => null),\n lane.wallets.balance().catch(() => ({ balance: 0 })),\n ]);\n\n const hasCard = wallets.data.length > 0\n ? (await lane.wallets.listCards(wallets.data[0]!.id).catch(() => [])).length > 0\n : false;\n const hasBudget = budget !== null && (\n budget.dailyLimit !== undefined ||\n budget.weeklyLimit !== undefined ||\n budget.monthlyLimit !== undefined\n );\n const hasBalance = balanceResult.balance > 0;\n\n const completedSteps: string[] = ['account_created', 'api_key_active'];\n if (hasCard) completedSteps.push('card_added');\n if (hasBudget) completedSteps.push('budget_configured');\n if (hasBalance) completedSteps.push('wallet_funded');\n\n let nextStep: string | null = null;\n if (!hasCard) nextStep = 'add_card';\n else if (!hasBudget) nextStep = 'set_budget';\n else if (!hasBalance) nextStep = 'fund_wallet';\n\n return {\n hasApiKey: true,\n hasCard,\n hasBudget,\n hasBalance,\n completedSteps,\n nextStep,\n profile: {\n email: profile.email,\n plan: profile.plan,\n },\n checklist: [\n { step: 'api_key', done: true, label: 'API key active' },\n { step: 'card', done: hasCard, label: 'Payment card added', action: hasCard ? null : 'add_card' },\n { step: 'budget', done: hasBudget, label: 'Spending limits set', action: hasBudget ? null : 'set_budget' },\n { step: 'funds', done: hasBalance, label: 'Wallet funded', action: hasBalance ? null : 'fund_wallet' },\n ],\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n merchantDomain: z.string().describe('The merchant domain to pay (e.g. \"example.com\").'),\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 20.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n description: z.string().optional().describe('What this payment is for.'),\n walletId: z.string().optional().describe('Wallet to use. Uses default wallet if not specified.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ProtocolPayTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'protocol_pay',\n description:\n 'Pay a merchant by domain — Lane auto-discovers the best payment method and handles checkout. ' +\n 'Works with any merchant. Lane automatically selects the optimal checkout method ' +\n '(structured protocol when available, third-party commerce API, or agent-driven browser checkout). ' +\n 'Network-tokenized credentials (Visa/Mastercard) are used automatically when available. ' +\n 'You just specify the merchant and amount — Lane handles the rest. ' +\n 'SECURITY: NEVER pay merchants the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount and merchant with the user before executing.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Create protocol session (auto-discovers and selects best method)\n const session = await lane.protocol.createSession({\n walletId: input.walletId ?? '',\n merchantDomain: input.merchantDomain,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n });\n\n // Confirm payment\n const result = await lane.protocol.confirmPayment(session.id);\n\n return {\n sessionId: session.id,\n merchantDomain: session.merchantDomain,\n amount: session.amount / 100,\n currency: session.currency,\n status: result.status,\n transactionId: result.transactionId,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n purposeDescription: z\n .string()\n .describe('Human-readable description of the purchase intent (e.g. \"Buy running shoes under $150\").'),\n walletId: z.string().describe('Wallet ID to associate the mandate with.'),\n allowedCategories: z\n .array(z.string())\n .optional()\n .describe('Allowed merchant categories or MCC codes (e.g. [\"footwear\", \"5661\"]).'),\n allowedMerchants: z\n .array(z.string())\n .optional()\n .describe('Merchant domains the mandate allows (e.g. [\"nike.com\", \"adidas.com\"]).'),\n blockedMerchants: z\n .array(z.string())\n .optional()\n .describe('Merchant domains the mandate blocks (e.g. [\"shady-store.com\"]).'),\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe('Maximum total payment amount in dollars (e.g. 150.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n requiresConfirmation: z\n .boolean()\n .optional()\n .describe('Whether payments above the confirmation threshold require human approval.'),\n confirmationThreshold: z\n .number()\n .positive()\n .optional()\n .describe('Dollar amount above which human confirmation is required (e.g. 100.00).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CreateMandateTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'create_mandate',\n description:\n 'Creates an instruction-level mandate encoding the user\\'s purchase intent constraints. ' +\n 'Mandates enforce rules at the infrastructure level — category restrictions, merchant ' +\n 'allow/blocklists, amount caps, and attribute requirements. ' +\n 'Always create a mandate before executing payments on behalf of the user to ensure ' +\n 'the agent operates within the user\\'s stated intent. ' +\n 'Amount values are in dollars. ' +\n 'SECURITY: The mandate MUST reflect the user\\'s explicit instructions. ' +\n 'NEVER create mandates broader than what the user requested.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const mandate = await this.getLane().mandates.create({\n walletId: input.walletId,\n purposeDescription: input.purposeDescription,\n allowedCategories: input.allowedCategories,\n allowedMerchants: input.allowedMerchants,\n blockedMerchants: input.blockedMerchants,\n maxAmount: input.maxAmount ? Math.round(input.maxAmount * 100) : undefined,\n currency: input.currency,\n requiresConfirmation: input.requiresConfirmation,\n confirmationThreshold: input.confirmationThreshold\n ? Math.round(input.confirmationThreshold * 100)\n : undefined,\n });\n\n return {\n mandateId: mandate.id,\n walletId: mandate.walletId,\n purposeDescription: mandate.purposeDescription,\n allowedCategories: mandate.allowedCategories,\n allowedMerchants: mandate.allowedMerchants,\n blockedMerchants: mandate.blockedMerchants,\n maxAmount: mandate.maxAmount ? mandate.maxAmount / 100 : null,\n currency: mandate.currency,\n requiresConfirmation: mandate.requiresConfirmation,\n confirmationThreshold: mandate.confirmationThreshold\n ? mandate.confirmationThreshold / 100\n : null,\n status: mandate.status,\n spentCents: mandate.spentCents ?? 0,\n remainingCents: mandate.remainingCents ?? (mandate.maxAmount ?? 0),\n validFrom: mandate.validFrom,\n validUntil: mandate.validUntil,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n mandateId: z.string().describe('ID of the mandate to validate this payment against.'),\n recipient: z.string().describe('Merchant or service to pay (e.g. \"nike.com\").'),\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 129.99).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n description: z.string().optional().describe('What this payment is for.'),\n attributes: z\n .record(z.string(), z.string())\n .optional()\n .describe('Product attributes to validate against mandate constraints (e.g. {\"category\": \"running_shoes\", \"size\": \"10\"}).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class PayWithMandateTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'pay_with_mandate',\n description:\n 'Execute a payment that is validated against a mandate before processing. ' +\n 'The mandate\\'s constraints (category, merchant, amount caps, attributes) are checked ' +\n 'server-side before the payment is routed. If the mandate has requiresConfirmation and ' +\n 'the amount exceeds the threshold, the payment is held for human approval. ' +\n 'Amount is in dollars. ' +\n 'SECURITY: Always use this instead of plain pay when a mandate exists. ' +\n 'NEVER bypass mandate validation — it exists to enforce the user\\'s intent.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Verify the mandate exists and is accessible\n const mandate = await this.getLane().mandates.get(input.mandateId);\n\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Biometric gate — skip for small automatic payments under mandate threshold\n const mandateRequiresConfirmation = mandate.requiresConfirmation !== false;\n const threshold = typeof mandate.confirmationThreshold === 'number' ? mandate.confirmationThreshold : 0;\n const exceedsThreshold = threshold > 0 && amountCents >= threshold;\n\n if (mandateRequiresConfirmation || exceedsThreshold) {\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.recipient,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.recipient,\n });\n }\n\n // Execute the payment — mandate validation happens server-side in the payment flow\n const txn = await lane.pay.execute({\n recipient: input.recipient,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n });\n\n // Fetch updated budget after payment\n let budget;\n try {\n budget = await lane.mandates.getBudget(input.mandateId);\n } catch {\n // Non-fatal — budget query may not be available yet\n }\n\n return {\n transactionId: txn.id,\n mandateId: mandate.id,\n amount: txn.amount / 100, // Back to dollars for display\n currency: txn.currency,\n recipient: txn.recipient,\n status: txn.status,\n receiptUrl: txn.receiptUrl,\n testMode: txn.testMode,\n mandateStatus: budget?.status ?? mandate.status,\n budget: budget ? {\n spent: budget.spentCents / 100,\n remaining: budget.remainingCents / 100,\n maxAmount: budget.maxAmountCents ? budget.maxAmountCents / 100 : null,\n } : undefined,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n mandateId: z.string().describe('ID of the mandate to check budget for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class GetMandateBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'get_mandate_budget',\n description:\n 'Get the budget status of a mandate — how much has been spent, how much remains, ' +\n 'and how many transactions have been recorded. Use this to check if a mandate still ' +\n 'has budget remaining before attempting a purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const budget = await this.getLane().mandates.getBudget(input.mandateId);\n\n return {\n mandateId: input.mandateId,\n maxAmount: budget.maxAmountCents ? budget.maxAmountCents / 100 : null,\n spentAmount: budget.spentCents / 100,\n remainingAmount: budget.remainingCents / 100,\n transactionCount: budget.transactionCount,\n status: budget.status,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n instructionId: z.string().describe('ID of the instruction to check budget for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class GetInstructionBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'get_instruction_budget',\n description:\n 'Get the budget status of an instruction — total budget, aggregate spend across all ' +\n 'mandates, remaining budget, and per-mandate breakdown. Use this to track overall ' +\n 'shopping progress against the global budget.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const budget = await this.getLane().instructions.getBudget(input.instructionId);\n\n return {\n instructionId: input.instructionId,\n totalBudget: budget.amountCents ? budget.amountCents / 100 : null,\n spentAmount: budget.spentCents / 100,\n remainingAmount: budget.remainingCents / 100,\n mandateCount: budget.mandateCount,\n completedMandates: budget.completedMandates,\n mandates: budget.mandates.map((m) => ({\n id: m.id,\n name: m.name,\n spent: m.spentCents / 100,\n remaining: m.remainingCents / 100,\n maxAmount: m.maxAmountCents ? m.maxAmountCents / 100 : null,\n status: m.status,\n })),\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n name: z.string().min(1).describe('Name of the agent to register.'),\n type: z.string().min(1).describe('Agent type (e.g., \"shopping\", \"research\", \"billing\").'),\n walletId: z.string().optional().describe('Optional wallet ID to assign to the agent.'),\n policy: z.object({\n maxDaily: z.number().optional().describe('Max daily spend in dollars.'),\n maxPerTransaction: z.number().optional().describe('Max per-transaction spend in dollars.'),\n allowedCategories: z.array(z.string()).optional().describe('Allowed merchant categories.'),\n allowedMerchants: z.array(z.string()).optional().describe('Allowed merchant domains.'),\n blockedMerchants: z.array(z.string()).optional().describe('Blocked merchant domains.'),\n }).optional().describe('Spending policy for the agent.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class RegisterAgentTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'register_agent',\n description:\n 'Register a new agent in the fleet with optional spending policy. ' +\n 'Each agent gets a unique identity and can be assigned a wallet and policy ' +\n 'governing its capabilities and spending limits.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Convert typed policy to the API format\n const apiPolicy = input.policy ? {\n budget: {\n dailyLimit: input.policy.maxDaily ? Math.round(input.policy.maxDaily * 100) : undefined,\n },\n maxTransactionAmount: input.policy.maxPerTransaction ? Math.round(input.policy.maxPerTransaction * 100) : undefined,\n allowedMCCs: input.policy.allowedCategories,\n allowedMerchants: input.policy.allowedMerchants,\n blockedMerchants: input.policy.blockedMerchants,\n } : undefined;\n\n const result = await this.getLane().agents.register({\n name: input.name,\n type: input.type,\n walletId: input.walletId,\n policy: apiPolicy as never,\n });\n\n return {\n agent: {\n id: result.id,\n name: result.name,\n type: result.type,\n status: result.status,\n walletId: result.walletId,\n policy: result.policy,\n createdAt: result.createdAt,\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n status: z\n .enum(['active', 'suspended', 'revoked'])\n .optional()\n .describe('Filter agents by status.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .default(20)\n .describe('Number of agents to return (max 100).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListAgentsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_agents',\n description:\n 'List registered agents in the fleet with optional status filter. ' +\n 'Returns agent IDs, names, types, statuses, and policies.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().agents.list({\n status: input.status,\n limit: input.limit,\n });\n\n return {\n agents: result.data.map((agent) => ({\n id: agent.id,\n name: agent.name,\n type: agent.type,\n status: agent.status,\n walletId: agent.walletId,\n policy: agent.policy,\n createdAt: agent.createdAt,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 15.00).'),\n merchant: z.string().describe('Merchant domain or identifier (e.g. \"anthropic.com\").'),\n purpose: z.string().describe('Brief description of what this payment is for (e.g. \"Claude Pro subscription\").'),\n singleUse: z.boolean().default(true).describe('Whether the token is single-use and auto-destroyed after one charge (default: true).'),\n walletId: z.string().optional().describe('Wallet ID. Uses default wallet if not specified.'),\n cardId: z.string().optional().describe('Card ID to back the VIC token. Uses first card in wallet if not specified.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ProvisionVICPaymentTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'provision_payment',\n description:\n 'Provision a single-use payment token for autonomous checkout. ' +\n 'Issues a scoped credential (DPAN + cryptogram) for the specified amount and merchant. ' +\n 'The credential can be used to complete checkout at any Visa-accepting merchant. ' +\n 'Returns the payment credential directly (NOT displayed in chat — zero token waste). ' +\n 'SECURITY: NEVER provision tokens for merchants the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount, merchant, and purpose with the user before provisioning. ' +\n 'Tokens are budget-enforced and auto-expire after use.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Step 1: Resolve wallet if not provided\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await lane.wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return {\n error: 'no_wallet',\n message: 'No wallet found. Add a card first using the add_card tool.',\n };\n }\n walletId = wallets.data[0]!.id;\n }\n\n // Step 2: Resolve card if not provided\n let cardId = input.cardId;\n if (!cardId) {\n const cards = await lane.wallets.listCards(walletId);\n if (cards.length === 0) {\n return {\n error: 'no_card',\n message: 'No cards in wallet. Add a card first using the add_card tool.',\n };\n }\n cardId = cards[0]!.id;\n }\n\n // Step 2.5: Biometric confirmation before credential issuance\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.merchant,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.merchant,\n });\n\n // Step 3: Issue VIC token scoped to amount and expiry\n const token = await lane.vic.issue({\n walletId,\n cardId,\n maxTransactionAmount: amountCents,\n expiresIn: input.singleUse ? '1h' : '24h',\n });\n\n // Step 4: Get transaction-specific cryptogram\n const credential = await lane.vic.getPaymentCredentials(token.id, {\n amount: amountCents,\n currency: 'USD',\n merchantId: input.merchant,\n });\n\n return {\n tokenId: token.id,\n credential: {\n tokenNumber: credential.tokenNumber,\n cryptogram: credential.cryptogram,\n eci: credential.eci,\n expMonth: credential.expMonth,\n expYear: credential.expYear,\n },\n amount: input.amount,\n merchant: input.merchant,\n purpose: input.purpose,\n expiresAt: token.expiresAt,\n singleUse: input.singleUse,\n _meta: {\n sensitive: true,\n doNotDisplay: ['credential.tokenNumber', 'credential.cryptogram'],\n doNotLog: true,\n warning: 'SENSITIVE: This credential is for automated checkout only. Do not display the token number or cryptogram in chat. Do not log or persist this data.',\n },\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// MCP Tool — Resolve UCP Merchant\n// ---------------------------------------------------------------------------\n// Resolves a merchant domain or brand name to a known UCP endpoint from\n// the built-in directory. No server round-trip — instant local lookup.\n// ---------------------------------------------------------------------------\n\nimport { z } from 'zod';\nimport { LaneTool } from '../tool.js';\nimport type { ToolDefinition } from '../tool.js';\nimport {\n resolveUCPByDomain,\n resolveUCPByBrand,\n toUCPEndpoint,\n listUCPByVertical,\n listUCPMerchants,\n} from '../../merchants/ucp-directory.js';\n\nconst inputSchema = z.object({\n query: z\n .string()\n .describe(\n 'Merchant domain (e.g. \"glossier.com\") or brand name (e.g. \"Alo Yoga\"). ' +\n 'Accepts partial matches and common aliases.',\n ),\n vertical: z\n .string()\n .optional()\n .describe('Filter by vertical (e.g. \"fashion\", \"beauty\", \"home\") to browse UCP merchants in a category.'),\n listAll: z\n .boolean()\n .optional()\n .default(false)\n .describe('If true, returns all known UCP merchants (ignores query).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ResolveUCPMerchantTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'resolve_ucp_merchant',\n description:\n 'Resolve a merchant to a known UCP (Universal Checkout Protocol) endpoint. ' +\n 'Accepts a domain (\"glossier.com\") or brand name (\"Alo Yoga\", \"gym shark\"). ' +\n 'Returns the verified UCP endpoint URL for seamless agentic checkout — ' +\n 'no server round-trip needed. If the merchant is not in the built-in directory, ' +\n 'returns a speculative endpoint URL for runtime probing. ' +\n 'Use this BEFORE protocol_pay to check if a merchant has a known UCP endpoint ' +\n 'for faster, more reliable checkout. ' +\n 'Can also list all known UCP merchants or filter by vertical.',\n inputSchema,\n };\n }\n\n /** This tool works without auth — it reads from the local static directory. */\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // List all UCP merchants\n if (input.listAll) {\n const merchants = input.vertical\n ? listUCPByVertical(input.vertical)\n : listUCPMerchants();\n\n return {\n merchants: merchants.map((m) => ({\n name: m.name,\n domain: m.domain,\n ucpEndpoint: m.ucpEndpoint,\n vertical: m.vertical,\n })),\n total: merchants.length,\n source: 'built-in UCP directory (verified endpoints)',\n };\n }\n\n // Filter by vertical\n if (input.vertical) {\n const merchants = listUCPByVertical(input.vertical);\n return {\n merchants: merchants.map((m) => ({\n name: m.name,\n domain: m.domain,\n ucpEndpoint: m.ucpEndpoint,\n vertical: m.vertical,\n })),\n total: merchants.length,\n source: 'built-in UCP directory (verified endpoints)',\n };\n }\n\n // Try domain resolution first\n const byDomain = resolveUCPByDomain(input.query);\n if (byDomain) {\n return {\n found: true,\n verified: true,\n name: byDomain.name,\n domain: byDomain.domain,\n ucpEndpoint: byDomain.ucpEndpoint,\n vertical: byDomain.vertical,\n mccs: byDomain.mccs,\n source: 'built-in UCP directory (verified endpoint)',\n hint: 'This merchant has a verified UCP endpoint. Use protocol_pay for seamless checkout.',\n };\n }\n\n // Try brand name resolution\n const byBrand = resolveUCPByBrand(input.query);\n if (byBrand) {\n return {\n found: true,\n verified: true,\n name: byBrand.name,\n domain: byBrand.domain,\n ucpEndpoint: byBrand.ucpEndpoint,\n vertical: byBrand.vertical,\n mccs: byBrand.mccs,\n source: 'built-in UCP directory (verified endpoint, matched by brand name)',\n hint: 'This merchant has a verified UCP endpoint. Use protocol_pay for seamless checkout.',\n };\n }\n\n // Not in directory — construct speculative endpoint\n const speculative = toUCPEndpoint(input.query);\n return {\n found: false,\n verified: false,\n query: input.query,\n speculativeEndpoint: speculative.endpoint,\n source: 'not in built-in directory',\n hint:\n 'This merchant is not in the verified UCP directory. ' +\n 'Use protocol_pay which will probe the endpoint at runtime, or use discover_merchants for server-side discovery.',\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n instructionId: z.string().describe('ID of the instruction to confirm via biometric verification.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ConfirmInstructionTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'confirm_instruction',\n description:\n 'Execute biometric verification (Touch ID, passkey, or PIN) to confirm an instruction. ' +\n 'Use this before retrieving credentials or payments that require human verification. ' +\n 'Returns confirmation valid for 1 minute — multiple payments share one verification.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n\n const confirmation = await requireBiometricConfirmation(lane, input.instructionId);\n\n return {\n confirmed: true,\n method: confirmation.method,\n confirmationId: confirmation.id,\n instructionId: input.instructionId,\n validForSeconds: 60,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP Server — Dual-Mode (Discovery + Authenticated)\n// ---------------------------------------------------------------------------\n// Registers all Lane tools with the @modelcontextprotocol/sdk McpServer.\n// Supports two modes:\n// 1. Discovery mode (no API key): pre-auth tools only (get_lane_info,\n// lane_signup, lane_connect). Post-auth tools return a structured error.\n// 2. Authenticated mode: all tools available.\n//\n// When `lane_connect` is called, the server transitions from discovery to\n// authenticated mode by creating a fresh Lane instance via Lane.fromApiKey().\n// ---------------------------------------------------------------------------\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Lane } from '../lane.js';\nimport type { LaneTool } from './tool.js';\nimport { getLaneInstructions } from '../resources/agent-instructions.js';\n\nimport { GetLaneInfoTool } from './tools/get-lane-info.js';\nimport { LaneSignupTool } from './tools/lane-signup.js';\nimport { LaneConnectTool } from './tools/lane-connect.js';\nimport { LaneAddCardTool } from './tools/lane-add-card.js';\nimport { WhoamiTool } from './tools/whoami.js';\nimport { ListCardsTool } from './tools/list-cards.js';\nimport { CheckBalanceTool } from './tools/check-balance.js';\nimport { PayTool } from './tools/pay.js';\nimport { ListTransactionsTool } from './tools/list-transactions.js';\nimport { SearchProductsTool } from './tools/search-products.js';\nimport { CheckoutTool } from './tools/checkout.js';\nimport { SetBudgetTool } from './tools/set-budget.js';\nimport { RequestRefundTool } from './tools/request-refund.js';\nimport { SubscribeTool } from './tools/subscribe.js';\nimport { ListSubscriptionsTool } from './tools/list-subscriptions.js';\nimport { SearchSoftwareTool } from './tools/search-software.js';\nimport { CancelSubscriptionTool } from './tools/cancel-subscription.js';\nimport { DiscoverMerchantsTool } from './tools/discover-merchants.js';\nimport { LaneOnboardingStatusTool } from './tools/lane-onboarding-status.js';\nimport { ProtocolPayTool } from './tools/protocol-pay.js';\nimport { CreateMandateTool } from './tools/create-mandate.js';\nimport { PayWithMandateTool } from './tools/pay-with-mandate.js';\nimport { GetMandateBudgetTool } from './tools/get-mandate-budget.js';\nimport { GetInstructionBudgetTool } from './tools/get-instruction-budget.js';\nimport { RegisterAgentTool } from './tools/register-agent.js';\nimport { ListAgentsTool } from './tools/list-agents.js';\nimport { ProvisionVICPaymentTool } from './tools/provision-vic-payment.js';\nimport { ResolveUCPMerchantTool } from './tools/resolve-ucp-merchant.js';\nimport { ConfirmInstructionTool } from './tools/confirm-instruction.js';\n\nexport interface LaneMCPServerOptions {\n /** Override the server name shown to clients. */\n name?: string;\n /** Override the server version shown to clients. */\n version?: string;\n}\n\n/**\n * LaneMCPServer wraps @modelcontextprotocol/sdk McpServer and registers\n * all Lane agent tools. Supports dual-mode operation:\n *\n * - Pass `null` for discovery mode (no API key yet).\n * - Pass a `Lane` instance for authenticated mode.\n * - Call `lane_connect` tool at runtime to transition from discovery → authenticated.\n */\nexport class LaneMCPServer {\n readonly mcp: McpServer;\n private lane: Lane | null;\n private tools: LaneTool[];\n\n constructor(\n lane: Lane | null,\n options: LaneMCPServerOptions = {},\n ) {\n this.lane = lane;\n\n this.mcp = new McpServer(\n {\n name: options.name ?? 'lane',\n version: options.version ?? '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n },\n );\n\n // Create all tool instances\n this.tools = this.createAllTools(lane);\n\n this.registerAllTools();\n this.registerResources();\n }\n\n /**\n * Called by LaneConnectTool when a user provides an API key.\n * Updates all tools with the new Lane instance.\n */\n private setLane(lane: Lane): void {\n this.lane = lane;\n for (const tool of this.tools) {\n tool.setLane(lane);\n }\n }\n\n private createAllTools(lane: Lane | null): LaneTool[] {\n const onConnect = async (laneInstance: Lane) => {\n this.setLane(laneInstance);\n };\n\n return [\n // Pre-auth tools (4)\n new GetLaneInfoTool(lane),\n new LaneSignupTool(lane),\n new LaneConnectTool(lane, onConnect),\n new ResolveUCPMerchantTool(lane),\n // Post-auth tools (22)\n new WhoamiTool(lane),\n new ListCardsTool(lane),\n new CheckBalanceTool(lane),\n new PayTool(lane),\n new ListTransactionsTool(lane),\n new SearchProductsTool(lane),\n new CheckoutTool(lane),\n new SetBudgetTool(lane),\n new RequestRefundTool(lane),\n new SubscribeTool(lane),\n new ListSubscriptionsTool(lane),\n new SearchSoftwareTool(lane),\n new CancelSubscriptionTool(lane),\n new DiscoverMerchantsTool(lane),\n new LaneAddCardTool(lane),\n new LaneOnboardingStatusTool(lane),\n new ProtocolPayTool(lane),\n new CreateMandateTool(lane),\n new PayWithMandateTool(lane),\n new GetMandateBudgetTool(lane),\n new GetInstructionBudgetTool(lane),\n new RegisterAgentTool(lane),\n new ListAgentsTool(lane),\n new ProvisionVICPaymentTool(lane),\n new ConfirmInstructionTool(lane),\n ];\n }\n\n private registerAllTools(): void {\n for (const tool of this.tools) {\n this.registerTool(tool);\n }\n }\n\n private registerTool(tool: LaneTool): void {\n const def = tool.definition;\n\n // Cast to any to bypass generic constraints; the MCP SDK will\n // introspect the zod schema to generate JSON Schema for clients.\n (this.mcp as any).registerTool(\n def.name,\n { description: def.description, inputSchema: def.inputSchema },\n async (args: Record<string, unknown>) => {\n const result = await tool.execute(args);\n return { ...result } as Record<string, unknown>;\n },\n );\n }\n\n private registerResources(): void {\n const instructions = getLaneInstructions();\n\n // Register lane://instructions as an MCP resource\n (this.mcp as any).resource(\n 'lane-instructions',\n 'lane://instructions',\n {\n description:\n 'Structured instructions for AI agents using Lane. Includes role, capabilities, ' +\n 'budget rules, example flows, and constraints.',\n mimeType: 'application/json',\n },\n async () => ({\n contents: [\n {\n uri: 'lane://instructions',\n mimeType: 'application/json',\n text: JSON.stringify(instructions, null, 2),\n },\n ],\n }),\n );\n }\n}\n","import type { Lane } from '../../lane.js';\nimport { zodToJsonSchema } from '../base.js';\nimport { LaneMCPServer } from '../../mcp/server.js';\n\nexport interface CrewAITool {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n func: (input: Record<string, unknown>) => Promise<string>;\n}\n\n/**\n * Create CrewAI-compatible tools from a Lane instance.\n */\nexport function createLaneTools(lane: Lane): CrewAITool[] {\n const mcpServer = new LaneMCPServer(lane);\n const tools: any[] = (mcpServer as any).tools;\n\n return tools\n .filter((t: any) => t.requiresAuth)\n .map((tool: any) => ({\n name: tool.definition.name,\n description: tool.definition.description,\n parameters: zodToJsonSchema(tool.definition.inputSchema),\n func: async (input: Record<string, unknown>): Promise<string> => {\n const result = await tool.execute(input);\n return result.content.map((c: any) => c.text).join('\\n');\n },\n }));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/base.ts","../../../src/resources/agent-instructions.ts","../../../src/errors.ts","../../../src/mcp/tool.ts","../../../src/mcp/tools/get-lane-info.ts","../../../src/mcp/tools/lane-signup.ts","../../../src/crypto/signature.ts","../../../src/client.ts","../../../src/auth/token-store.ts","../../../src/config.ts","../../../src/resources/base.ts","../../../src/resources/auth.ts","../../../src/resources/wallets.ts","../../../src/resources/pay.ts","../../../src/resources/products.ts","../../../src/resources/checkout.ts","../../../src/resources/sell.ts","../../../src/resources/admin.ts","../../../src/resources/webhooks.ts","../../../src/resources/vic.ts","../../../src/resources/metering.ts","../../../src/resources/payouts.ts","../../../src/resources/teams.ts","../../../src/resources/agents.ts","../../../src/resources/audit.ts","../../../src/resources/identity.ts","../../../src/resources/subscriptions.ts","../../../src/resources/merchants.ts","../../../src/resources/cards.ts","../../../src/resources/instructions.ts","../../../src/resources/tokens.ts","../../../src/resources/transactions.ts","../../../src/resources/budgets.ts","../../../src/resources/users.ts","../../../src/resources/fleet.ts","../../../src/merchants/ucp-directory.ts","../../../src/resources/protocol.ts","../../../src/resources/mandates.ts","../../../src/resources/delegations.ts","../../../src/lane.ts","../../../src/mcp/tools/lane-connect.ts","../../../src/mcp/tools/lane-add-card.ts","../../../src/mcp/tools/whoami.ts","../../../src/mcp/tools/list-cards.ts","../../../src/mcp/tools/check-balance.ts","../../../src/auth/biometric.ts","../../../src/auth/confirmation.ts","../../../src/mcp/tools/pay.ts","../../../src/mcp/tools/list-transactions.ts","../../../src/mcp/tools/search-products.ts","../../../src/mcp/tools/checkout.ts","../../../src/mcp/tools/set-budget.ts","../../../src/mcp/tools/request-refund.ts","../../../src/mcp/tools/subscribe.ts","../../../src/mcp/tools/list-subscriptions.ts","../../../src/mcp/tools/search-software.ts","../../../src/mcp/tools/cancel-subscription.ts","../../../src/mcp/tools/discover-merchants.ts","../../../src/mcp/tools/lane-onboarding-status.ts","../../../src/mcp/tools/protocol-pay.ts","../../../src/mcp/tools/create-mandate.ts","../../../src/mcp/tools/pay-with-mandate.ts","../../../src/mcp/tools/get-mandate-budget.ts","../../../src/mcp/tools/get-instruction-budget.ts","../../../src/mcp/tools/register-agent.ts","../../../src/mcp/tools/list-agents.ts","../../../src/mcp/tools/provision-vic-payment.ts","../../../src/mcp/tools/resolve-ucp-merchant.ts","../../../src/mcp/tools/confirm-instruction.ts","../../../src/mcp/server.ts","../../../src/adapters/crewai/index.ts"],"names":["z","createHash","createHmac","timingSafeEqual","EventEmitter","randomUUID","join","homedir","readFile","writeFile","mkdir","stat","chmod","body","res","inputSchema","profile","DEFAULT_REUSE_WINDOW_SECONDS","byDomain","McpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { z } from 'zod';\nimport type { LaneTool } from '../mcp/tool.js';\n\n/**\n * Convert a Zod schema to JSON Schema (OpenAI-compatible format).\n * Handles common Zod types: object, string, number, boolean, array, enum, optional.\n */\nexport function zodToJsonSchema(schema: z.ZodType): Record<string, unknown> {\n // Implementation: walk the Zod schema tree and produce JSON Schema\n // Use (schema as any)._def to access the internal definition\n const def = (schema as any)._def;\n\n if (!def) {\n return { type: 'object' };\n }\n\n return convertZodDef(def);\n}\n\nfunction convertZodDef(def: any): Record<string, unknown> {\n const typeName = def.typeName;\n\n switch (typeName) {\n case 'ZodObject': {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n const shape = def.shape?.() ?? def.shape ?? {};\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldDef = (value as any)._def;\n if (fieldDef?.typeName === 'ZodOptional' || fieldDef?.typeName === 'ZodDefault') {\n properties[key] = convertZodDef(fieldDef.innerType?._def ?? fieldDef);\n } else {\n properties[key] = convertZodDef(fieldDef);\n required.push(key);\n }\n // Include description if present\n const desc = (value as any)._def?.description ?? (value as any).description;\n if (desc && typeof properties[key] === 'object') {\n (properties[key] as any).description = desc;\n }\n }\n\n const result: Record<string, unknown> = { type: 'object', properties };\n if (required.length > 0) result.required = required;\n return result;\n }\n case 'ZodString':\n return { type: 'string' };\n case 'ZodNumber':\n return { type: 'number' };\n case 'ZodBoolean':\n return { type: 'boolean' };\n case 'ZodArray':\n return { type: 'array', items: convertZodDef(def.type._def) };\n case 'ZodEnum':\n return { type: 'string', enum: def.values };\n case 'ZodOptional':\n return convertZodDef(def.innerType._def);\n case 'ZodDefault':\n return convertZodDef(def.innerType._def);\n case 'ZodRecord':\n return { type: 'object', additionalProperties: true };\n default:\n return { type: 'string' };\n }\n}\n\n/**\n * Generic wrapper that adapts a LaneTool for any framework.\n */\nexport function wrapLaneTool<T>(\n tool: LaneTool,\n formatter: (tool: LaneTool) => T,\n): T {\n return formatter(tool);\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP — Agent Instructions Resource\n// ---------------------------------------------------------------------------\n// Returns structured JSON for the `lane://instructions` MCP resource.\n// This is NOT the same as `src/resources/instructions.ts` (VIC instruction API).\n// ---------------------------------------------------------------------------\n\nexport interface LaneInstructions {\n role: string;\n whenToUse: string[];\n capabilities: string[];\n budgetRules: string[];\n merchantCategories: string[];\n exampleFlows: {\n name: string;\n steps: string[];\n }[];\n constraints: string[];\n}\n\n/**\n * Returns structured instructions for AI agents using Lane via MCP.\n *\n * Used by the `lane://instructions` MCP resource and the `--with-instructions` CLI flag.\n */\nexport function getLaneInstructions(): LaneInstructions {\n return {\n role: 'You are an AI agent with access to Lane, a payment wallet and infrastructure for AI agents. You can make payments, manage subscriptions, search for products, and handle spending on behalf of the user.',\n\n whenToUse: [\n 'The user asks you to pay for something, purchase a service, or subscribe to software',\n 'The user wants to check their spending, balance, or transaction history',\n 'The user needs to find a product, service, or merchant',\n 'The user wants to manage their payment cards or wallet',\n 'The user asks about Lane capabilities or wants to sign up',\n ],\n\n capabilities: [\n 'Execute payments to merchants and services',\n 'Subscribe to and manage SaaS products (Vercel, Supabase, GitHub, etc.)',\n 'Search a curated merchant directory for developer tools and cloud services',\n 'Set and enforce spending budgets (daily, weekly, monthly, per-task)',\n 'Add payment cards securely via PCI-compliant VGS-hosted forms',\n 'Track transactions and request refunds',\n 'Checkout with full cart support (multi-item orders)',\n ],\n\n budgetRules: [\n 'Always check the budget before making a payment with check_balance',\n 'If a payment would exceed the budget, inform the user and ask for confirmation',\n 'Suggest setting a budget if the user has not configured one yet',\n 'Budget limits are enforced server-side — you cannot bypass them',\n ],\n\n merchantCategories: [\n 'Cloud & Infrastructure (AWS, GCP, Azure, Vercel, Railway)',\n 'Developer Tools (GitHub, GitLab, Jetbrains, Postman)',\n 'AI & ML (OpenAI, Anthropic, Replicate, Hugging Face)',\n 'Data & Analytics (Snowflake, Databricks, Mixpanel)',\n 'Communication (Twilio, SendGrid, Resend)',\n 'Monitoring (Datadog, Sentry, PagerDuty)',\n ],\n\n exampleFlows: [\n {\n name: 'First-time setup',\n steps: [\n 'Call get_lane_info to learn about Lane',\n 'Call lane_signup to get a signup URL for the user',\n 'User signs up and provides their API key',\n 'Call lane_connect with the API key to authenticate',\n 'Call lane_add_card to securely add a payment card',\n 'Call set_budget to configure spending limits',\n 'Ready to make payments!',\n ],\n },\n {\n name: 'Make a payment',\n steps: [\n 'Call check_balance to verify budget availability',\n 'Call discover_merchants or search_products to find the merchant',\n 'Call pay with the merchant and amount',\n 'Confirm the transaction result to the user',\n ],\n },\n {\n name: 'Subscribe to SaaS',\n steps: [\n 'Call search_software to find the product',\n 'Call subscribe with the plan details',\n 'Confirm the subscription to the user',\n ],\n },\n ],\n\n constraints: [\n 'Never ask the user for their raw card number — always use lane_add_card for PCI-compliant card entry',\n 'Always confirm payment amounts with the user before executing pay or checkout',\n 'Do not store or log API keys — use lane_connect to pass them securely',\n 'If authentication fails, suggest the user check their API key or call lane_signup',\n 'Respect budget limits — do not attempt to circumvent server-side spending controls',\n ],\n };\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Error Hierarchy\n// ---------------------------------------------------------------------------\n// Every error is structured for agent consumption. Agents need codes,\n// categories, and suggested actions — not string messages.\n// ---------------------------------------------------------------------------\n\nexport interface LaneErrorOptions {\n code: string;\n statusCode: number;\n requestId?: string;\n retryable?: boolean;\n suggestedAction?: string;\n}\n\n/**\n * Base error class for all Lane SDK errors.\n *\n * Carries structured metadata so agents can make programmatic decisions\n * without parsing human-readable messages.\n */\nexport class LaneError extends Error {\n /** Machine-readable error code (e.g. 'budget_exceeded'). */\n readonly code: string;\n\n /** HTTP status code from the API (or synthetic for client-side errors). */\n readonly statusCode: number;\n\n /** Request ID for support and audit trail correlation. */\n readonly requestId: string;\n\n /** Whether the caller should retry this request. */\n readonly retryable: boolean;\n\n /** Human-readable suggestion for what the agent should do next. */\n readonly suggestedAction?: string;\n\n /** Executable suggestion for agents (e.g. \"lane.wallet.deposit(2000)\"). */\n fix?: string;\n\n /** Current state context for agent decision-making. */\n currentState?: Record<string, unknown>;\n\n constructor(message: string, options: LaneErrorOptions) {\n super(message);\n this.name = 'LaneError';\n this.code = options.code;\n this.statusCode = options.statusCode;\n this.requestId = options.requestId ?? 'unknown';\n this.retryable = options.retryable ?? false;\n this.suggestedAction = options.suggestedAction;\n\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /** Serialize to a plain object for structured logging / JSON responses. */\n toJSON(): Record<string, unknown> {\n const json: Record<string, unknown> = {\n name: this.name,\n message: this.message,\n code: this.code,\n statusCode: this.statusCode,\n requestId: this.requestId,\n retryable: this.retryable,\n suggestedAction: this.suggestedAction,\n };\n if (this.fix !== undefined) {\n json.fix = this.fix;\n }\n if (this.currentState !== undefined) {\n json.currentState = this.currentState;\n }\n return json;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Authentication Errors (401, 403)\n// ---------------------------------------------------------------------------\n\nexport class LaneAuthError extends LaneError {\n constructor(\n message: string,\n options: Omit<LaneErrorOptions, 'statusCode'> & { statusCode?: number },\n ) {\n super(message, { statusCode: 401, ...options });\n this.name = 'LaneAuthError';\n }\n\n static invalidApiKey(requestId?: string): LaneAuthError {\n return new LaneAuthError('Invalid API key. Check your key and try again.', {\n code: 'invalid_api_key',\n statusCode: 401,\n requestId,\n suggestedAction:\n 'Verify the API key is correct and has not been revoked. Check your API key in the Lane wallet settings.',\n });\n }\n\n static expiredToken(requestId?: string): LaneAuthError {\n return new LaneAuthError('Authentication token has expired.', {\n code: 'expired_token',\n statusCode: 401,\n requestId,\n suggestedAction: 'Re-authenticate by generating a new API key in the Lane wallet settings.',\n });\n }\n\n static insufficientScope(\n requiredScope: string,\n requestId?: string,\n ): LaneAuthError {\n return new LaneAuthError(\n `API key lacks required permission: ${requiredScope}`,\n {\n code: 'insufficient_scope',\n statusCode: 403,\n requestId,\n suggestedAction:\n 'Generate a new API key with the required permissions in the wallet settings.',\n },\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Payment Errors (402, 502)\n// ---------------------------------------------------------------------------\n\nexport class LanePaymentError extends LaneError {\n constructor(message: string, options: LaneErrorOptions) {\n super(message, options);\n this.name = 'LanePaymentError';\n }\n\n static declined(requestId?: string): LanePaymentError {\n return new LanePaymentError('Payment was declined by the card issuer.', {\n code: 'payment_declined',\n statusCode: 402,\n requestId,\n suggestedAction:\n 'The card was declined. Ask the developer to check their card or add a new one.',\n });\n }\n\n static insufficientFunds(currentBalance?: number, required?: number, requestId?: string): LanePaymentError {\n const error = new LanePaymentError('Insufficient wallet balance', {\n code: 'insufficient_funds',\n statusCode: 402,\n requestId,\n suggestedAction:\n 'Check wallet balance and deposit more funds',\n });\n if (currentBalance !== undefined && required !== undefined) {\n error.fix = `lane.wallet.deposit(${required - currentBalance})`;\n error.currentState = { balance: currentBalance, required };\n }\n return error;\n }\n\n static merchantUnavailable(\n merchant: string,\n requestId?: string,\n ): LanePaymentError {\n return new LanePaymentError(\n `Merchant \"${merchant}\" is temporarily unavailable.`,\n {\n code: 'merchant_unavailable',\n statusCode: 502,\n requestId,\n retryable: true,\n suggestedAction:\n 'The merchant endpoint is down. Try again in a few minutes or choose an alternative.',\n },\n );\n }\n\n static serviceError(requestId?: string): LanePaymentError {\n return new LanePaymentError(\n 'Payment service encountered an internal error.',\n {\n code: 'payment_service_error',\n statusCode: 502,\n requestId,\n retryable: true,\n suggestedAction:\n 'Payment service temporarily unavailable. Try again in a few minutes.',\n },\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Budget Errors (402)\n// ---------------------------------------------------------------------------\n\nexport class LaneBudgetError extends LaneError {\n /** The budget limit that was exceeded. */\n readonly limit: number;\n\n /** The amount that was requested. */\n readonly requested: number;\n\n constructor(\n message: string,\n options: LaneErrorOptions & { limit: number; requested: number },\n ) {\n super(message, options);\n this.name = 'LaneBudgetError';\n this.limit = options.limit;\n this.requested = options.requested;\n }\n\n static dailyExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Daily spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'daily_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the daily limit or approve this transaction.',\n },\n );\n }\n\n static taskExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Per-task spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'task_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the per-task limit or approve this transaction.',\n },\n );\n }\n\n static monthlyExceeded(\n limit: number,\n requested: number,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Monthly spending limit of $${(limit / 100).toFixed(2)} exceeded. Requested: $${(requested / 100).toFixed(2)}.`,\n {\n code: 'monthly_limit_exceeded',\n statusCode: 402,\n requestId,\n limit,\n requested,\n suggestedAction:\n 'Ask the developer to increase the monthly limit.',\n },\n );\n }\n\n static merchantNotAllowed(\n merchant: string,\n requestId?: string,\n ): LaneBudgetError {\n return new LaneBudgetError(\n `Merchant \"${merchant}\" is not on the spending allowlist.`,\n {\n code: 'merchant_not_allowed',\n statusCode: 402,\n requestId,\n limit: 0,\n requested: 0,\n suggestedAction:\n 'This merchant is not on your allowlist. Ask the developer to add it via the wallet settings.',\n },\n );\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n limit: this.limit,\n requested: this.requested,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Not Found Errors (404)\n// ---------------------------------------------------------------------------\n\nexport class LaneNotFoundError extends LaneError {\n constructor(resource: string, id: string, requestId?: string) {\n super(`${resource} \"${id}\" not found.`, {\n code: `${resource.toLowerCase()}_not_found`,\n statusCode: 404,\n requestId,\n suggestedAction: `The ${resource.toLowerCase()} does not exist or you don't have access to it.`,\n });\n this.name = 'LaneNotFoundError';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Rate Limit Errors (429)\n// ---------------------------------------------------------------------------\n\nexport class LaneRateLimitError extends LaneError {\n /** Seconds until the rate limit resets. */\n readonly retryAfter: number;\n\n constructor(retryAfter: number, requestId?: string) {\n super(`Rate limit exceeded. Retry after ${retryAfter} seconds.`, {\n code: 'rate_limit_exceeded',\n statusCode: 429,\n requestId,\n retryable: true,\n suggestedAction: `Wait ${retryAfter} seconds before retrying.`,\n });\n this.name = 'LaneRateLimitError';\n this.retryAfter = retryAfter;\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n retryAfter: this.retryAfter,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Validation Errors (400)\n// ---------------------------------------------------------------------------\n\nexport interface FieldError {\n field: string;\n message: string;\n}\n\nexport class LaneValidationError extends LaneError {\n readonly fields: FieldError[];\n\n constructor(fields: FieldError[], requestId?: string) {\n const fieldMessages = fields\n .map((f) => `${f.field}: ${f.message}`)\n .join('; ');\n super(`Validation error: ${fieldMessages}`, {\n code: 'validation_error',\n statusCode: 400,\n requestId,\n suggestedAction: 'Check the request parameters and try again.',\n });\n this.name = 'LaneValidationError';\n this.fields = fields;\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n fields: this.fields,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Confirmation Errors (403)\n// ---------------------------------------------------------------------------\n\nexport class LaneConfirmationError extends LaneError {\n constructor(message: string, options: Omit<LaneErrorOptions, 'statusCode' | 'code'> & { statusCode?: number; code?: string }) {\n super(message, {\n code: options.code ?? 'confirmation_required',\n statusCode: options.statusCode ?? 403,\n ...options,\n });\n this.name = 'LaneConfirmationError';\n }\n\n static required(instructionId?: string): LaneConfirmationError {\n const error = new LaneConfirmationError(\n 'Biometric confirmation required before executing this payment.',\n {\n suggestedAction:\n 'Verify your identity using Touch ID or passkey before retrieving credentials.',\n },\n );\n if (instructionId) {\n error.fix = `lane.instructions.confirm(\"${instructionId}\")`;\n error.currentState = { instructionId };\n }\n return error;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory: Build typed error from API response\n// ---------------------------------------------------------------------------\n\nexport interface APIErrorBody {\n error: {\n code: string;\n message: string;\n statusCode: number;\n retryable?: boolean;\n suggestedAction?: string;\n retryAfter?: number;\n limit?: number;\n requested?: number;\n fields?: FieldError[];\n };\n requestId: string;\n}\n\n/** Parse an API error response into the appropriate typed LaneError subclass. */\nexport function createErrorFromResponse(body: APIErrorBody): LaneError {\n const { error, requestId } = body;\n\n // Confirmation required\n if (error.code === 'confirmation_required') {\n return new LaneConfirmationError(error.message, {\n requestId,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Authentication\n if (error.statusCode === 401 || error.statusCode === 403) {\n return new LaneAuthError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Rate limiting\n if (error.statusCode === 429) {\n return new LaneRateLimitError(error.retryAfter ?? 60, requestId);\n }\n\n // Validation\n if (error.statusCode === 400 && error.fields) {\n return new LaneValidationError(error.fields, requestId);\n }\n\n // Budget\n if (error.code.includes('limit_exceeded') || error.code === 'merchant_not_allowed') {\n return new LaneBudgetError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n limit: error.limit ?? 0,\n requested: error.requested ?? 0,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Payment\n if (\n error.code.startsWith('payment_') ||\n error.code === 'insufficient_funds' ||\n error.code === 'merchant_unavailable'\n ) {\n return new LanePaymentError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n retryable: error.retryable,\n suggestedAction: error.suggestedAction,\n });\n }\n\n // Not found — only map to LaneNotFoundError when the code is a proper *_not_found code\n if (error.statusCode === 404 && error.code.endsWith('_not_found')) {\n return new LaneNotFoundError('Resource', error.code.replace('_not_found', ''), requestId);\n }\n\n // Fallback\n return new LaneError(error.message, {\n code: error.code,\n statusCode: error.statusCode,\n requestId,\n retryable: error.retryable,\n suggestedAction: error.suggestedAction,\n });\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP — Abstract Tool Base Class\n// ---------------------------------------------------------------------------\n// Every MCP tool extends this class. It provides:\n// - Typed input/output schemas via Zod\n// - Access to the Lane SDK instance\n// - Consistent error handling for agent consumption\n// - Pre-auth/post-auth tool split: tools can work without Lane instance\n// ---------------------------------------------------------------------------\n\nimport type { z } from 'zod';\nimport type { Lane } from '../lane.js';\nimport { LaneError } from '../errors.js';\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n inputSchema: z.ZodType;\n requiresAuth?: boolean;\n}\n\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n}\n\n/**\n * Abstract base class for all Lane MCP tools.\n *\n * Subclasses implement `definition()` for schema and `run()` for logic.\n * The base class handles error formatting so agents always get structured errors.\n *\n * Tools that don't require authentication override `requiresAuth` to return `false`.\n * These pre-auth tools can be instantiated with `lane: null` and will still work.\n */\nexport abstract class LaneTool<TInput = unknown> {\n protected lane: Lane | null;\n\n constructor(lane: Lane | null) {\n this.lane = lane;\n }\n\n /** Tool name, description, and input schema. */\n abstract get definition(): ToolDefinition;\n\n /** Whether this tool requires an authenticated Lane instance. Default: true. */\n get requiresAuth(): boolean {\n return true;\n }\n\n /** Inject a Lane instance after construction (e.g. after mid-session auth). */\n setLane(lane: Lane): void {\n this.lane = lane;\n }\n\n /**\n * Get the Lane instance, throwing a structured error if not connected.\n * Use this in `run()` methods instead of accessing `this.lane` directly.\n */\n protected getLane(): Lane {\n if (!this.lane) {\n throw new LaneError('Not connected to Lane. Use lane_connect to authenticate first.', {\n code: 'not_connected',\n statusCode: 401,\n suggestedAction: 'Call the lane_connect tool with your API key, or call lane_signup to create an account first.',\n });\n }\n return this.lane;\n }\n\n /** Execute the tool with validated input. */\n protected abstract run(input: TInput): Promise<unknown>;\n\n /**\n * Public entry point — validates input, runs tool, formats output.\n * Catches LaneErrors and formats them as structured agent-readable responses.\n *\n * For auth-required tools called without a Lane instance, returns a helpful\n * \"not connected\" response (not an error) with instructions to authenticate.\n */\n async execute(input: unknown): Promise<ToolResult> {\n try {\n // Pre-flight auth check for post-auth tools\n if (this.requiresAuth && !this.lane) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n status: 'not_connected',\n message: 'Lane is not connected yet. You need to authenticate before using this tool.',\n next_steps: [\n 'Call get_lane_info to learn about Lane',\n 'Call lane_signup to create an account',\n 'Call lane_connect with an API key or session ID to authenticate',\n ],\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n const parsed = this.definition.inputSchema.parse(input);\n const result = await this.run(parsed as TInput);\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n if (err instanceof LaneError) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n error: err.code,\n message: err.message,\n suggestedAction: err.suggestedAction,\n retryable: err.retryable,\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n\n const message = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: 'text', text: JSON.stringify({ error: 'tool_error', message }, null, 2) }],\n isError: true,\n };\n }\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class GetLaneInfoTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'get_lane_info',\n description:\n 'Discover what Lane is and what it can do. Returns capabilities, pricing, ' +\n 'and how to get started. No authentication required.',\n inputSchema: z.object({}),\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(): Promise<unknown> {\n const connected = this.lane !== null;\n\n const gettingStarted = connected\n ? {\n status: 'ready' as const,\n availableTools: [\n 'whoami',\n 'check_balance',\n 'pay',\n 'list_transactions',\n 'search_products',\n 'checkout',\n 'set_budget',\n 'request_refund',\n 'subscribe',\n 'list_subscriptions',\n 'search_software',\n 'cancel_subscription',\n 'discover_merchants',\n 'lane_add_card',\n 'add_card',\n 'lane_onboarding_status',\n 'protocol_pay',\n 'create_mandate',\n 'pay_with_mandate',\n 'register_agent',\n 'list_agents',\n 'provision_vic_payment',\n 'resolve_ucp_merchant',\n ],\n }\n : {\n status: 'not_connected' as const,\n steps: [\n 'Call lane_signup to create a free Lane account',\n 'Call lane_connect with your API key to authenticate this session',\n 'Call lane_add_card to securely add a payment card',\n 'Call set_budget to configure spending limits',\n ],\n };\n\n return {\n name: 'Lane',\n connected,\n tagline: 'Payment wallet and infrastructure for AI agents',\n description:\n 'Lane lets AI agents pay for services, subscribe to SaaS, and manage spending — ' +\n 'all through MCP tools. Card data is secured in a PCI-compliant VGS vault. ' +\n 'Agents never see raw card numbers.',\n capabilities: [\n 'Execute payments to merchants and services',\n 'Subscribe to SaaS products (Vercel, Supabase, etc.)',\n 'Search a merchant directory for developer tools and cloud services',\n 'Manage spending budgets (daily, weekly, monthly, per-task limits)',\n 'Add payment cards securely via VGS-hosted form (PCI compliant)',\n 'Track transactions and request refunds',\n 'Tokenized card billing — customer owns the card, agent charges against tokens',\n ],\n supportedMerchantTypes: ['ecommerce', 'software', 'api', 'saas', 'skill', 'service'],\n supportedRails: ['card (Visa, Mastercard, Amex)', 'VIC (Visa Intelligent Commerce)', 'stablecoins (coming soon)'],\n pricing: {\n free: { transactionLimit: '$100/mo', wallets: 1, description: 'For indie developers and experimentation' },\n pro: { transactionLimit: '$10,000/mo', wallets: 10, description: 'For production agent applications' },\n enterprise: { transactionLimit: 'Unlimited', wallets: 'Unlimited', description: 'Custom terms and SLAs' },\n },\n gettingStarted,\n links: {\n website: 'https://getonlane.com',\n docs: 'https://docs.getonlane.com',\n agentWallet: 'https://agent.getonlane.com',\n },\n security: {\n pciCompliant: true,\n cardVault: 'VGS (Very Good Security)',\n agentCardAccess: 'Agents never see or handle raw card numbers',\n budgetEnforcement: 'Server-side — agents cannot bypass spending limits',\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { LaneError } from '../../errors.js';\nimport type { Lane } from '../../lane.js';\n\nconst inputSchema = z.object({\n email: z.string().email().optional().describe('Pre-fill the signup form with this email address.'),\n plan: z.enum(['free', 'pro']).default('free').optional().describe('Plan to start with. Defaults to free.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class LaneSignupTool extends LaneTool<Input> {\n private readonly apiUrl: string;\n\n constructor(lane: Lane | null, options?: { apiUrl?: string }) {\n super(lane);\n this.apiUrl = options?.apiUrl ?? 'https://api.getonlane.com';\n }\n\n get definition(): ToolDefinition {\n return {\n name: 'lane_signup',\n description:\n 'Create a Lane onboarding session. Returns a signup URL for the user to open in ' +\n 'a browser. After signup, they will receive an API key to use with lane_connect. ' +\n 'No authentication required.',\n inputSchema,\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // If already connected, no need to sign up\n if (this.lane) {\n return { status: 'already_connected' };\n }\n\n const response = await fetch(`${this.apiUrl}/agent/onboarding/sessions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email: input.email,\n plan: input.plan ?? 'free',\n ref: 'mcp',\n flow: 'agent',\n }),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new LaneError(\n (errorBody as any)?.error?.message ?? `Signup API returned ${response.status}`,\n {\n code: 'signup_failed',\n statusCode: response.status,\n suggestedAction: 'Try again later or visit https://agent.getonlane.com/signup to sign up manually.',\n },\n );\n }\n\n const session = await response.json() as {\n sessionId: string;\n signupUrl: string;\n embedUrl: string;\n sessionSecret: string;\n expiresAt: string;\n };\n\n let signupUrl = session.signupUrl;\n if (input.email) {\n signupUrl += `&email=${encodeURIComponent(input.email)}`;\n }\n\n return {\n sessionId: session.sessionId,\n status: 'session_created',\n signupUrl,\n instructions: [\n 'Show this URL to the user — they need to open it in a browser to create their Lane account.',\n 'After signing up, call lane_connect with the sessionId to poll for completion.',\n 'Alternatively, the user can provide their API key directly to lane_connect.',\n ],\n nextStep: 'lane_connect',\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — HMAC-SHA256 Request Signing\n// ---------------------------------------------------------------------------\n// Signs every SDK request to prevent tampering and replay attacks.\n// Mirrors server/middleware/signature.js from the Lane backend.\n//\n// Signature = HMAC-SHA256(key, \"{method}\\n{path}\\n{timestamp}\\n{bodyHash}\")\n// ---------------------------------------------------------------------------\n\nimport { createHmac, createHash, timingSafeEqual } from 'node:crypto';\n\n/** Maximum age of a signed request before it's considered stale (5 minutes). */\nconst TIMESTAMP_TOLERANCE_SECONDS = 300;\n\nexport interface SignatureComponents {\n method: string;\n path: string;\n timestamp: number;\n body?: string;\n}\n\nexport class HMACSignature {\n private readonly secret: string;\n\n constructor(secret: string) {\n this.secret = secret;\n }\n\n /**\n * Sign request components and return the hex-encoded HMAC-SHA256 signature.\n */\n sign(components: SignatureComponents): string {\n const bodyHash = components.body\n ? createHash('sha256').update(components.body).digest('hex')\n : createHash('sha256').update('').digest('hex');\n\n const payload = [\n components.method.toUpperCase(),\n components.path,\n components.timestamp.toString(),\n bodyHash,\n ].join('\\n');\n\n return createHmac('sha256', this.secret).update(payload).digest('hex');\n }\n\n /**\n * Verify a signature against request components.\n * Uses constant-time comparison to prevent timing attacks.\n */\n verify(\n signature: string,\n components: SignatureComponents,\n toleranceSeconds: number = TIMESTAMP_TOLERANCE_SECONDS,\n ): boolean {\n // Reject stale timestamps to prevent replay attacks\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - components.timestamp) > toleranceSeconds) {\n return false;\n }\n\n const expected = this.sign(components);\n return constantTimeEqual(expected, signature);\n }\n\n /**\n * Generate the signature headers for an outgoing request.\n */\n headers(components: SignatureComponents): Record<string, string> {\n const signature = this.sign(components);\n return {\n 'X-Lane-Timestamp': components.timestamp.toString(),\n 'X-Lane-Signature': `sha256=${signature}`,\n };\n }\n}\n\n/**\n * Verify a webhook payload signature.\n *\n * @param payload - Raw webhook body string\n * @param signature - Value of X-Lane-Signature header\n * @param secret - Webhook signing secret\n * @param timestamp - Value of X-Lane-Timestamp header\n */\nexport function verifyWebhookSignature(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n): boolean {\n const hmac = new HMACSignature(secret);\n const sig = signature.startsWith('sha256=')\n ? signature.slice(7)\n : signature;\n\n return hmac.verify(sig, {\n method: 'POST',\n path: '/webhook',\n timestamp,\n body: payload,\n });\n}\n\n/**\n * Constant-time string comparison to prevent timing attacks.\n */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n const bufA = Buffer.from(a, 'utf8');\n const bufB = Buffer.from(b, 'utf8');\n return timingSafeEqual(bufA, bufB);\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — HTTP Client\n// ---------------------------------------------------------------------------\n// Central HTTP client with:\n// - Bearer token authentication\n// - HMAC-SHA256 request signing\n// - Idempotency key support\n// - Automatic retries with exponential backoff\n// - Circuit breaker for downstream resilience\n// - Request ID propagation for audit trails\n// - Structured error parsing\n// ---------------------------------------------------------------------------\n\nimport { EventEmitter } from 'node:events';\nimport { randomUUID } from 'node:crypto';\nimport type { ResolvedConfig, RequestOptions, APIResponse } from './types.js';\nimport { HMACSignature } from './crypto/signature.js';\nimport {\n LaneError,\n LaneRateLimitError,\n createErrorFromResponse,\n type APIErrorBody,\n} from './errors.js';\n\n// ---------------------------------------------------------------------------\n// Circuit Breaker\n// ---------------------------------------------------------------------------\n\ntype CircuitState = 'closed' | 'open' | 'half_open';\n\nclass CircuitBreaker {\n private state: CircuitState = 'closed';\n private failureCount = 0;\n private lastFailureTime = 0;\n\n constructor(\n private readonly failureThreshold: number = 3,\n private readonly resetTimeoutMs: number = 30_000,\n ) {}\n\n get isOpen(): boolean {\n if (this.state === 'open') {\n // Check if reset timeout has elapsed -> move to half-open\n if (Date.now() - this.lastFailureTime >= this.resetTimeoutMs) {\n this.state = 'half_open';\n return false;\n }\n return true;\n }\n return false;\n }\n\n recordSuccess(): void {\n this.failureCount = 0;\n this.state = 'closed';\n }\n\n recordFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n if (this.failureCount >= this.failureThreshold) {\n this.state = 'open';\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// LaneClient\n// ---------------------------------------------------------------------------\n\nexport interface LaneClientEvents {\n request: [{ method: string; path: string; requestId: string }];\n response: [{ statusCode: number; requestId: string; durationMs: number }];\n error: [{ error: LaneError; requestId: string }];\n retry: [{ attempt: number; maxRetries: number; requestId: string }];\n}\n\n/**\n * Low-level HTTP client for the Lane API.\n *\n * Handles authentication, signing, retries, circuit breaking, and error\n * parsing. All Resource classes delegate HTTP calls through this client.\n */\nexport class LaneClient extends EventEmitter<LaneClientEvents> {\n private readonly config: ResolvedConfig;\n private readonly signer: HMACSignature;\n private readonly circuitBreaker: CircuitBreaker;\n\n constructor(config: ResolvedConfig) {\n super();\n this.config = config;\n this.signer = new HMACSignature(config.apiKey);\n this.circuitBreaker = new CircuitBreaker(\n config.circuitBreaker?.failureThreshold,\n config.circuitBreaker?.resetTimeoutMs,\n );\n }\n\n /** Whether this client is operating in test mode. */\n get testMode(): boolean {\n return this.config.testMode;\n }\n\n /** The resolved base URL. */\n get baseUrl(): string {\n return this.config.baseUrl;\n }\n\n // -------------------------------------------------------------------------\n // Public convenience methods\n // -------------------------------------------------------------------------\n\n async get<T>(path: string, query?: RequestOptions['query']): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async post<T>(\n path: string,\n body?: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'POST', path, body, idempotencyKey });\n }\n\n async put<T>(\n path: string,\n body?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(path: string): Promise<APIResponse<T>> {\n return this.request<T>({ method: 'DELETE', path });\n }\n\n // -------------------------------------------------------------------------\n // Core request method with retries\n // -------------------------------------------------------------------------\n\n async request<T>(options: RequestOptions): Promise<APIResponse<T>> {\n const requestId = `req_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n let lastError: Error | undefined;\n\n const maxAttempts = this.isRetryable(options.method)\n ? this.config.maxRetries + 1\n : 1;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n if (attempt > 1) {\n this.emit('retry', {\n attempt,\n maxRetries: this.config.maxRetries,\n requestId,\n });\n await this.backoff(attempt);\n }\n\n try {\n return await this.executeRequest<T>(options, requestId);\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n\n // Don't retry non-retryable errors\n if (err instanceof LaneError && !err.retryable) {\n throw err;\n }\n\n // Respect rate limit retry-after\n if (err instanceof LaneRateLimitError) {\n if (attempt < maxAttempts) {\n await sleep(err.retryAfter * 1000);\n continue;\n }\n throw err;\n }\n }\n }\n\n throw lastError ?? new Error('Request failed with no error details');\n }\n\n // -------------------------------------------------------------------------\n // Private\n // -------------------------------------------------------------------------\n\n private async executeRequest<T>(\n options: RequestOptions,\n requestId: string,\n ): Promise<APIResponse<T>> {\n // Circuit breaker check\n if (this.circuitBreaker.isOpen) {\n throw new LaneError('Service temporarily unavailable (circuit breaker open).', {\n code: 'circuit_breaker_open',\n statusCode: 503,\n requestId,\n retryable: true,\n suggestedAction: 'Payment service temporarily unavailable. Try again in 30 seconds.',\n });\n }\n\n const url = this.buildUrl(options.path, options.query);\n const bodyStr = options.body ? JSON.stringify(options.body) : undefined;\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Sign the request\n const signatureHeaders = this.signer.headers({\n method: options.method,\n path: options.path,\n timestamp,\n body: bodyStr,\n });\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-Lane-Request-Id': requestId,\n 'User-Agent': 'lane-sdk/0.1.0',\n ...signatureHeaders,\n };\n\n if (options.idempotencyKey) {\n headers['X-Idempotency-Key'] = options.idempotencyKey;\n }\n\n this.emit('request', { method: options.method, path: options.path, requestId });\n const startTime = Date.now();\n\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n options.timeout ?? this.config.timeout,\n );\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: bodyStr,\n signal: controller.signal,\n });\n\n const durationMs = Date.now() - startTime;\n this.emit('response', {\n statusCode: response.status,\n requestId,\n durationMs,\n });\n\n if (!response.ok) {\n const errorBody = await this.parseErrorBody(response, requestId);\n const error = createErrorFromResponse(errorBody);\n\n this.emit('error', { error, requestId });\n\n // Record failure for circuit breaker (only server errors)\n if (response.status >= 500) {\n this.circuitBreaker.recordFailure();\n }\n\n throw error;\n }\n\n this.circuitBreaker.recordSuccess();\n\n const data = (await response.json()) as T;\n\n return {\n data,\n requestId,\n testMode: this.config.testMode,\n rateLimitRemaining: parseIntHeader(response, 'X-RateLimit-Remaining'),\n rateLimitLimit: parseIntHeader(response, 'X-RateLimit-Limit'),\n rateLimitReset: parseIntHeader(response, 'X-RateLimit-Reset'),\n };\n } catch (err) {\n if (err instanceof LaneError) throw err;\n\n // AbortController timeout\n if (err instanceof DOMException && err.name === 'AbortError') {\n this.circuitBreaker.recordFailure();\n throw new LaneError('Request timed out.', {\n code: 'request_timeout',\n statusCode: 408,\n requestId,\n retryable: true,\n suggestedAction: 'The request took too long. Try again.',\n });\n }\n\n // Network / DNS errors\n this.circuitBreaker.recordFailure();\n throw new LaneError(\n `Network error: ${err instanceof Error ? err.message : String(err)}`,\n {\n code: 'network_error',\n statusCode: 0,\n requestId,\n retryable: true,\n suggestedAction: 'Check your network connection and try again.',\n },\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n ): string {\n const url = new URL(path, this.config.baseUrl);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async parseErrorBody(\n response: Response,\n requestId: string,\n ): Promise<APIErrorBody> {\n try {\n const body = (await response.json()) as Record<string, unknown>;\n const errorObj = body.error as Record<string, unknown> | undefined;\n\n // Accept error body if it has a valid code, even without requestId\n if (errorObj && typeof errorObj.code === 'string') {\n return {\n error: {\n code: errorObj.code,\n message: typeof errorObj.message === 'string' ? errorObj.message : `HTTP ${response.status}`,\n statusCode: typeof errorObj.statusCode === 'number' ? errorObj.statusCode : response.status,\n retryable: typeof errorObj.retryable === 'boolean' ? errorObj.retryable : undefined,\n suggestedAction: typeof errorObj.suggestedAction === 'string' ? errorObj.suggestedAction : undefined,\n retryAfter: typeof errorObj.retryAfter === 'number' ? errorObj.retryAfter : undefined,\n limit: typeof errorObj.limit === 'number' ? errorObj.limit : undefined,\n requested: typeof errorObj.requested === 'number' ? errorObj.requested : undefined,\n fields: Array.isArray(errorObj.fields) ? errorObj.fields : undefined,\n },\n requestId: typeof body.requestId === 'string' ? body.requestId : requestId,\n };\n }\n\n // API returned JSON but not our error format\n return {\n error: {\n code: 'unknown_error',\n message: JSON.stringify(body),\n statusCode: response.status,\n },\n requestId,\n };\n } catch {\n // Non-JSON response\n return {\n error: {\n code: 'unknown_error',\n message: `HTTP ${response.status}: ${response.statusText}`,\n statusCode: response.status,\n },\n requestId,\n };\n }\n }\n\n private isRetryable(method: string): boolean {\n // Only retry idempotent methods or methods with idempotency keys\n return ['GET', 'PUT', 'DELETE'].includes(method) || method === 'POST';\n }\n\n private async backoff(attempt: number): Promise<void> {\n // Exponential backoff: 1s, 3s (with jitter)\n const baseDelay = Math.min(1000 * Math.pow(2, attempt - 2), 5000);\n const jitter = Math.random() * 500;\n await sleep(baseDelay + jitter);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseIntHeader(response: Response, name: string): number | undefined {\n const value = response.headers.get(name);\n if (value === null) return undefined;\n const parsed = parseInt(value, 10);\n return isNaN(parsed) ? undefined : parsed;\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Token Store\n// ---------------------------------------------------------------------------\n// Reads/writes credentials to ~/.lane/credentials.json.\n// File permissions enforced at 0600 (owner read/write only) for SOC 2.\n// ---------------------------------------------------------------------------\n\nimport { readFile, writeFile, mkdir, stat, chmod } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { Credentials, TokenStore } from '../types.js';\n\nconst LANE_DIR = '.lane';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst SECURE_FILE_MODE = 0o600;\nconst SECURE_DIR_MODE = 0o700;\n\n/**\n * File-system backed token store.\n *\n * Stores credentials at ~/.lane/credentials.json with strict permissions.\n * Implements the TokenStore interface so it can be swapped for Redis,\n * Keychain, etc.\n */\nexport class FileTokenStore implements TokenStore {\n private readonly dirPath: string;\n private readonly filePath: string;\n\n constructor(basePath?: string) {\n this.dirPath = basePath ?? join(homedir(), LANE_DIR);\n this.filePath = join(this.dirPath, CREDENTIALS_FILE);\n }\n\n /**\n * Read credentials from disk. Returns null if file doesn't exist.\n * Warns to stderr if file permissions are too permissive.\n */\n async read(): Promise<Credentials | null> {\n try {\n await this.validatePermissions();\n const raw = await readFile(this.filePath, 'utf-8');\n const parsed: unknown = JSON.parse(raw);\n return this.validateCredentials(parsed);\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n /**\n * Write credentials to disk with secure permissions.\n */\n async write(credentials: Credentials): Promise<void> {\n await this.ensureDirectory();\n\n const data = JSON.stringify(credentials, null, 2) + '\\n';\n await writeFile(this.filePath, data, { mode: SECURE_FILE_MODE });\n }\n\n /**\n * Remove the credentials file.\n */\n async clear(): Promise<void> {\n try {\n const { unlink } = await import('node:fs/promises');\n await unlink(this.filePath);\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') {\n return; // Already gone\n }\n throw err;\n }\n }\n\n /** Return the path to the credentials file (for CLI display). */\n get path(): string {\n return this.filePath;\n }\n\n // -------------------------------------------------------------------------\n // Private\n // -------------------------------------------------------------------------\n\n private async ensureDirectory(): Promise<void> {\n await mkdir(this.dirPath, { recursive: true, mode: SECURE_DIR_MODE });\n }\n\n /**\n * Check file permissions and warn if too open.\n * SOC 2 control: credentials should only be readable by owner.\n */\n private async validatePermissions(): Promise<void> {\n try {\n const stats = await stat(this.filePath);\n const mode = stats.mode & 0o777;\n if (mode !== SECURE_FILE_MODE) {\n process.stderr.write(\n `[lane] Warning: ${this.filePath} has permissions ${mode.toString(8)}. ` +\n `Expected ${SECURE_FILE_MODE.toString(8)}. Fixing...\\n`,\n );\n await chmod(this.filePath, SECURE_FILE_MODE);\n }\n } catch {\n // File might not exist yet — that's fine\n }\n }\n\n private validateCredentials(parsed: unknown): Credentials | null {\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n !('apiKey' in parsed) ||\n typeof (parsed as Record<string, unknown>)['apiKey'] !== 'string'\n ) {\n return null;\n }\n return parsed as Credentials;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isNodeError(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && 'code' in err;\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Config Resolution\n// ---------------------------------------------------------------------------\n// Resolution order (first match wins):\n// 1. Constructor argument: new Lane({ apiKey: 'lane_sk_...' })\n// 2. Environment variable: LANE_API_KEY\n// 3. Credentials file: ~/.lane/credentials.json\n// ---------------------------------------------------------------------------\n\nimport type { LaneConfig, ResolvedConfig, TokenStore } from './types.js';\nimport { FileTokenStore } from './auth/token-store.js';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\n\nconst DEFAULT_BASE_URL = 'https://api.getonlane.com';\nconst DEFAULT_API_URL = 'https://api.getonlane.com';\nconst DEFAULT_TIMEOUT = 30_000;\nconst DEFAULT_MAX_RETRIES = 2;\n\n/**\n * Read persistent config from ~/.lane/config.json.\n * Written by `lane init --demo`. Returns null if absent.\n */\nasync function readPersistentConfig(): Promise<{ demo?: boolean; demoUrl?: string } | null> {\n try {\n const raw = await readFile(join(homedir(), '.lane', 'config.json'), 'utf-8');\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve SDK configuration from multiple sources.\n *\n * Immutable after construction — no config drift during a session.\n */\nexport async function resolveConfig(\n options: LaneConfig = {},\n tokenStore?: TokenStore,\n): Promise<ResolvedConfig> {\n // Persistent config: ~/.lane/config.json (written by `lane init --demo`)\n const persistent = await readPersistentConfig();\n if (persistent?.demo && process.env['LANE_DEMO'] !== 'false') {\n process.env['LANE_DEMO'] = 'true';\n if (persistent.demoUrl && !process.env['LANE_DEMO_URL']) {\n process.env['LANE_DEMO_URL'] = persistent.demoUrl;\n }\n }\n\n // Demo mode: skip credentials lookup, use demo server defaults\n if (process.env['LANE_DEMO'] === 'true') {\n const demoBaseUrl = process.env['LANE_DEMO_URL'] ?? 'http://localhost:3020';\n return Object.freeze({\n apiKey: options.apiKey ?? process.env['LANE_API_KEY'] ?? 'lane_sk_demo_000000000000',\n baseUrl: demoBaseUrl,\n apiUrl: demoBaseUrl,\n testMode: true,\n timeout: options.timeout ?? DEFAULT_TIMEOUT,\n maxRetries: options.maxRetries ?? DEFAULT_MAX_RETRIES,\n circuitBreaker: undefined,\n });\n }\n\n // 1. Constructor argument\n let apiKey = options.apiKey;\n\n // 2. Environment variable\n if (!apiKey) {\n apiKey = process.env['LANE_API_KEY'];\n }\n\n // 3. Credentials file\n if (!apiKey) {\n const store = tokenStore ?? new FileTokenStore();\n const creds = await store.read();\n if (creds) {\n apiKey = creds.apiKey;\n }\n }\n\n if (!apiKey) {\n throw new Error(\n 'No API key found. Provide one via:\\n' +\n ' 1. new Lane({ apiKey: \"lane_sk_...\" })\\n' +\n ' 2. LANE_API_KEY environment variable\\n' +\n ' 3. Run `lane login` to authenticate',\n );\n }\n\n const testMode =\n options.testMode ??\n (process.env['LANE_TEST_MODE'] === 'true' ||\n apiKey.startsWith('lane_sk_test_'));\n\n const baseUrl =\n options.baseUrl ??\n process.env['LANE_BASE_URL'] ??\n DEFAULT_BASE_URL;\n\n const apiUrl =\n options.apiUrl ??\n process.env['LANE_API_URL'] ??\n DEFAULT_API_URL;\n\n const timeout =\n options.timeout ??\n (process.env['LANE_TIMEOUT']\n ? parseInt(process.env['LANE_TIMEOUT'], 10)\n : DEFAULT_TIMEOUT);\n\n const maxRetries =\n options.maxRetries ??\n (process.env['LANE_MAX_RETRIES']\n ? parseInt(process.env['LANE_MAX_RETRIES'], 10)\n : DEFAULT_MAX_RETRIES);\n\n return Object.freeze({\n apiKey,\n baseUrl,\n apiUrl,\n testMode,\n timeout,\n maxRetries,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n });\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Abstract Resource Base Class\n// ---------------------------------------------------------------------------\n// Every API resource (Wallets, Pay, Products, etc.) extends this class.\n// Provides typed access to the underlying LaneClient and common patterns.\n// ---------------------------------------------------------------------------\n\nimport type { LaneClient } from '../client.js';\nimport type { APIResponse, PaginatedResponse } from '../types.js';\n\n/**\n * Abstract base class for all Lane API resources.\n *\n * Subclasses focus on domain logic; the base class handles HTTP delegation,\n * pagination helpers, and idempotency key forwarding.\n */\nexport abstract class Resource {\n protected readonly client: LaneClient;\n\n constructor(client: LaneClient) {\n this.client = client;\n }\n\n /** The API path prefix for this resource (e.g. '/agent/wallet'). */\n protected abstract get basePath(): string;\n\n // -----------------------------------------------------------------------\n // Convenience wrappers that prepend basePath\n // -----------------------------------------------------------------------\n\n protected async _get<T>(\n subpath: string = '',\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<APIResponse<T>> {\n return this.client.get<T>(`${this.basePath}${subpath}`, query);\n }\n\n protected async _post<T>(\n subpath: string = '',\n body?: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<APIResponse<T>> {\n return this.client.post<T>(`${this.basePath}${subpath}`, body, idempotencyKey);\n }\n\n protected async _put<T>(\n subpath: string = '',\n body?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n return this.client.put<T>(`${this.basePath}${subpath}`, body);\n }\n\n protected async _delete<T>(subpath: string = ''): Promise<APIResponse<T>> {\n return this.client.delete<T>(`${this.basePath}${subpath}`);\n }\n\n /**\n * Helper for paginated list endpoints.\n */\n protected async _list<T>(\n subpath: string = '',\n params?: { limit?: number; offset?: number } & Record<string, unknown>,\n ): Promise<PaginatedResponse<T>> {\n const query: Record<string, string | number | boolean | undefined> = {};\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n query[key] = typeof value === 'object' ? JSON.stringify(value) : (value as string | number | boolean);\n }\n }\n }\n const response = await this.client.get<PaginatedResponse<T>>(\n `${this.basePath}${subpath}`,\n query,\n );\n return response.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Auth Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { DeveloperProfile, RotateKeyResult } from '../types.js';\n\nexport class Auth extends Resource {\n protected get basePath(): string {\n return '/agent/admin';\n }\n\n /** Get the authenticated developer's profile. */\n async whoami(): Promise<DeveloperProfile> {\n const res = await this._get<DeveloperProfile>('/whoami');\n return res.data;\n }\n\n /**\n * Start a login session. Returns a URL the developer opens in their browser.\n */\n async login(): Promise<{ sessionId: string; authUrl: string; port: number }> {\n const res = await this._post<{ sessionId: string; authUrl: string; port: number }>('/login');\n return res.data;\n }\n\n /**\n * Exchange a one-time code (from browser callback) for an API key.\n */\n async exchangeCode(code: string, sessionId: string): Promise<{ apiKey: string; developerId: string }> {\n const res = await this._post<{ apiKey: string; developerId: string }>('/token', {\n code,\n sessionId,\n });\n return res.data;\n }\n\n /**\n * Rotate the API key. Old key remains valid for 15 minutes.\n */\n async rotateKey(): Promise<RotateKeyResult> {\n const res = await this._post<RotateKeyResult>('/rotate-key');\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Wallets Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Wallet,\n Card,\n CreateWalletParams,\n PaginatedResponse,\n DepositParams,\n DepositResult,\n AutoReloadConfig,\n CardAttributes,\n WalletBalance,\n CheckoutProfile,\n SetCheckoutProfileParams,\n MerchantAccount,\n SaveMerchantAccountParams,\n} from '../types.js';\n\nexport class Wallets extends Resource {\n protected get basePath(): string {\n return '/agent/wallet';\n }\n\n /** Create a new wallet, optionally scoped to an end user. */\n async create(params: CreateWalletParams): Promise<Wallet> {\n const res = await this._post<Wallet>('', {\n label: params.label,\n userId: params.userId,\n budget: params.budget,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Get a wallet by ID. */\n async get(walletId: string): Promise<Wallet> {\n const res = await this._get<Wallet>(`/${walletId}`);\n return res.data;\n }\n\n /** List all wallets for the authenticated developer. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Wallet>> {\n return this._list<Wallet>('', params);\n }\n\n /** List cards in a wallet. Returns last4/brand only — never full PAN. */\n async listCards(walletId: string): Promise<Card[]> {\n const res = await this._get<Card[]>(`/${walletId}/cards`);\n return res.data;\n }\n\n /**\n * Get a secure link for the end user to add a card via VGS Collect.\n * PAN goes directly to VGS vault — Lane never sees it.\n */\n async getAddCardLink(walletId: string): Promise<{ url: string; expiresAt: string }> {\n const res = await this._get<{ url: string; expiresAt: string }>(`/${walletId}/add-card-link`);\n return res.data;\n }\n\n /** Revoke a wallet. All linked tokens are immediately invalidated. */\n async revoke(walletId: string): Promise<void> {\n await this._delete(`/${walletId}`);\n }\n\n /** Remove a specific card from a wallet. */\n async removeCard(walletId: string, cardId: string): Promise<void> {\n await this._delete(`/${walletId}/cards/${cardId}`);\n }\n\n /** Deposit funds into a wallet. */\n async deposit(walletId: string, params: DepositParams): Promise<DepositResult> {\n const res = await this._post<DepositResult>(\n `/${walletId}/deposit`,\n { amount: params.amount } as Record<string, unknown>,\n params.idempotencyKey,\n );\n return res.data;\n }\n\n /** Get wallet balance and metadata. */\n async balance(walletId?: string): Promise<WalletBalance> {\n const res = await this._get<WalletBalance>(`/${walletId ?? 'default'}/balance`);\n return res.data;\n }\n\n /** Configure auto-reload for a wallet. */\n async setAutoReload(walletId: string, config: AutoReloadConfig): Promise<AutoReloadConfig> {\n const res = await this._put<AutoReloadConfig>(\n `/${walletId}/auto-reload`,\n config as unknown as Record<string, unknown>,\n );\n return res.data;\n }\n\n /** Get card attributes for a wallet. */\n async getAttributes(walletId: string): Promise<CardAttributes> {\n const res = await this._get<CardAttributes>(`/${walletId}/card-attributes`);\n return res.data;\n }\n\n /** Set the checkout profile for a wallet (billing, shipping, email). */\n async setProfile(walletId: string, profile: SetCheckoutProfileParams): Promise<CheckoutProfile> {\n const res = await this._post<CheckoutProfile>(`/${walletId}/profile`, profile as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get the checkout profile. Addresses and email are visible; no sensitive data. */\n async getProfile(walletId: string): Promise<CheckoutProfile> {\n const res = await this._get<CheckoutProfile>(`/${walletId}/profile`);\n return res.data;\n }\n\n /** Update the checkout profile (partial). */\n async updateProfile(walletId: string, updates: Partial<SetCheckoutProfileParams>): Promise<CheckoutProfile> {\n const res = await this._put<CheckoutProfile>(`/${walletId}/profile`, updates as Record<string, unknown>);\n return res.data;\n }\n\n /** Save a merchant account (for sites without guest checkout). */\n async saveMerchantAccount(walletId: string, params: SaveMerchantAccountParams): Promise<MerchantAccount> {\n const res = await this._post<MerchantAccount>(`/${walletId}/merchant-accounts`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List saved merchant accounts (domain + email only). */\n async listMerchantAccounts(walletId: string): Promise<MerchantAccount[]> {\n const res = await this._get<MerchantAccount[]>(`/${walletId}/merchant-accounts`);\n return res.data;\n }\n\n /** Remove a saved merchant account. */\n async removeMerchantAccount(walletId: string, accountId: string): Promise<void> {\n await this._delete(`/${walletId}/merchant-accounts/${accountId}`);\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Pay Resource (Agentic Tokens + Payment Execution)\n// ---------------------------------------------------------------------------\n\nimport { createHash } from 'node:crypto';\nimport { Resource } from './base.js';\nimport type {\n AgenticToken,\n CreateTokenParams,\n ExecutePaymentParams,\n Transaction,\n RefundParams,\n Refund,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Pay extends Resource {\n protected get basePath(): string {\n return '/agent/pay';\n }\n\n /**\n * Create a scoped agentic token — amount-limited, merchant-locked,\n * time-bounded. The token can be used to execute a single payment.\n */\n async createToken(params: CreateTokenParams): Promise<AgenticToken> {\n const res = await this._post<AgenticToken>('/tokens', {\n walletId: params.walletId,\n amount: params.amount,\n currency: params.currency ?? 'USD',\n merchant: params.merchant ?? '*',\n expiresIn: params.expiresIn ?? '1h',\n permissions: params.permissions ?? [],\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Execute a payment. Routed via the best available path:\n * 1. Billing API (for services like OpenAI, Replicate, Vercel)\n * 2. ACP-enabled merchant checkout\n * 3. VIC agentic token (when available)\n *\n * Idempotency key is strongly recommended to prevent double charges.\n */\n async execute(params: ExecutePaymentParams): Promise<Transaction> {\n // Auto-generate idempotency key if not provided (amount + recipient + 5-min window)\n const idempotencyKey = params.idempotencyKey ?? this.generateIdempotencyKey(params);\n\n const res = await this._post<Transaction>('', {\n tokenId: params.tokenId,\n recipient: params.recipient,\n amount: params.amount,\n currency: params.currency ?? 'USD',\n description: params.description,\n }, idempotencyKey);\n return res.data;\n }\n\n private generateIdempotencyKey(params: ExecutePaymentParams): string {\n const window = Math.floor(Date.now() / (5 * 60 * 1000)); // 5-minute window\n const input = `${params.amount}:${params.recipient}:${params.currency ?? 'USD'}:${window}`;\n return `auto_${createHash('sha256').update(input).digest('hex').slice(0, 24)}`;\n }\n\n /** Get a transaction by ID. */\n async getTransaction(transactionId: string): Promise<Transaction> {\n const res = await this._get<Transaction>(`/transactions/${transactionId}`);\n return res.data;\n }\n\n /** List transactions with optional filters. */\n async listTransactions(params?: {\n limit?: number;\n offset?: number;\n cardId?: string;\n status?: Transaction['status'];\n }): Promise<PaginatedResponse<Transaction>> {\n return this._list<Transaction>('/transactions', params);\n }\n\n /**\n * Initiate a refund. Full or partial.\n *\n * Refund routing mirrors payment routing:\n * - Billing API merchants: calls their refund API\n * - ACP merchants: initiates refund through PSP\n * - VIC transactions: standard Visa dispute flow\n */\n async refund(params: RefundParams): Promise<Refund> {\n const res = await this._post<Refund>('/refunds', {\n transactionId: params.transactionId,\n amount: params.amount,\n reason: params.reason,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Get a refund by ID. */\n async getRefund(refundId: string): Promise<Refund> {\n const res = await this._get<Refund>(`/refunds/${refundId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Products Resource (Discovery)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Product,\n ProductSearchParams,\n SoftwareProductSearchParams,\n Merchant,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Products extends Resource {\n protected get basePath(): string {\n return '/products';\n }\n\n /** Search the Lane product catalog. */\n async search(params: ProductSearchParams | SoftwareProductSearchParams): Promise<PaginatedResponse<Product>> {\n return this._list<Product>('/search', { ...params });\n }\n\n /** Get a product by ID. */\n async get(productId: string): Promise<Product> {\n const res = await this._get<Product>(`/${productId}`);\n return res.data;\n }\n\n /** List available merchants. */\n async listMerchants(params?: {\n limit?: number;\n offset?: number;\n query?: string;\n }): Promise<PaginatedResponse<Merchant>> {\n return this._list<Merchant>('/merchants', params);\n }\n\n /** Get a merchant by ID or slug. */\n async getMerchant(merchantIdOrSlug: string): Promise<Merchant> {\n const res = await this.client.get<Merchant>(`/agent/merchant/${merchantIdOrSlug}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Checkout Resource (calls lane-repo sell-side)\n// ---------------------------------------------------------------------------\n// Checkout sessions are created and completed on lane-repo (api.getonlane.com),\n// NOT the SDK server. lane-repo handles merchant integration, PSP processing,\n// and order fulfillment.\n//\n// Buy-side (this SDK) → Sell-side (lane-repo):\n// POST /merchants/:id/checkout_sessions → create session\n// GET /merchants/:id/checkout_sessions/:sid → get session\n// POST /merchants/:id/checkout_sessions/:sid/complete → complete with payment\n// POST /agent/checkout/:sid/cancel → cancel session\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n CheckoutSession,\n CreateCheckoutParams,\n SoftwareCheckoutParams,\n Order,\n SoftwareOrder,\n} from '../types.js';\n\nexport class Checkout extends Resource {\n protected get basePath(): string {\n return '/checkout';\n }\n\n /**\n * Create a checkout session with a merchant.\n * Calls lane-repo: POST /merchants/:merchantId/checkout_sessions\n */\n async create(params: CreateCheckoutParams | SoftwareCheckoutParams): Promise<CheckoutSession> {\n const merchantId = (params as any).merchantId;\n\n if (merchantId) {\n // New path: call lane-repo merchant checkout endpoint directly\n const body: Record<string, unknown> = {\n items: (params as any).items,\n buyer: (params as any).buyer ?? { email: (params as any).buyerEmail },\n shipping_address: (params as any).shippingAddress,\n };\n\n const res = await this.client.post<CheckoutSession>(\n `/merchants/${merchantId}/checkout_sessions`,\n body,\n params.idempotencyKey,\n );\n return res.data;\n }\n\n // Legacy path: product-based checkout via SDK server\n const body: Record<string, unknown> = {\n productId: params.productId,\n walletId: params.walletId,\n quantity: params.quantity ?? 1,\n };\n if ('plan' in params && params.plan !== undefined) {\n body.plan = params.plan;\n }\n if ('parameters' in params && params.parameters !== undefined) {\n body.parameters = params.parameters;\n }\n const res = await this._post<CheckoutSession>('', body, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Complete a checkout session — processes payment and returns the order.\n * Calls lane-repo: POST /merchants/:merchantId/checkout_sessions/:sessionId/complete\n */\n async complete(\n sessionId: string,\n options?: {\n merchantId?: string;\n paymentMethodId?: string;\n cardAliases?: {\n pan_alias: string;\n cvc_alias: string;\n exp_month: number;\n exp_year: number;\n };\n networkToken?: {\n number?: string;\n cryptogram?: string;\n exp_month?: number;\n exp_year?: number;\n eci?: string;\n vgs_card_id?: string;\n };\n paymentProvider?: string;\n },\n ): Promise<Order | SoftwareOrder> {\n if (options?.merchantId) {\n // Call lane-repo merchant checkout complete endpoint\n const body: Record<string, unknown> = {};\n if (options.paymentMethodId) body.payment_method_id = options.paymentMethodId;\n if (options.cardAliases) body.card_aliases = options.cardAliases;\n if (options.networkToken) body.network_token = options.networkToken;\n if (options.paymentProvider) body.payment_provider = options.paymentProvider;\n\n const res = await this.client.post<Order | SoftwareOrder>(\n `/merchants/${options.merchantId}/checkout_sessions/${sessionId}/complete`,\n body,\n );\n return res.data;\n }\n\n // Legacy path: via SDK server\n const res = await this._post<Order | SoftwareOrder>(`/${sessionId}/complete`);\n return res.data;\n }\n\n /** Get the status of a checkout session. */\n async get(sessionId: string, merchantId?: string): Promise<CheckoutSession> {\n if (merchantId) {\n const res = await this.client.get<CheckoutSession>(\n `/merchants/${merchantId}/checkout_sessions/${sessionId}`,\n );\n return res.data;\n }\n const res = await this._get<CheckoutSession>(`/${sessionId}`);\n return res.data;\n }\n\n /** Cancel a pending checkout session. */\n async cancel(sessionId: string): Promise<CheckoutSession> {\n const res = await this._post<CheckoutSession>(`/${sessionId}/cancel`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Sell Resource (Make-a-SaaS)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Product,\n CreateProductParams,\n ProductAnalytics,\n AnalyticsParams,\n PaginatedResponse,\n SCPManifest,\n} from '../types.js';\n\nexport class Sell extends Resource {\n protected get basePath(): string {\n return '/agent/sell';\n }\n\n /**\n * List a product for sale on the Lane marketplace.\n *\n * Lane will:\n * 1. List the product in the Product API (discoverable by any agent)\n * 2. Create a proxy endpoint (handles auth + metering)\n * 3. Generate API keys for buyers automatically\n * 4. Meter usage and bill buyer wallets\n * 5. Pay out to seller (minus Lane fee)\n */\n async create(params: CreateProductParams): Promise<Product> {\n const res = await this._post<Product>('/products', {\n name: params.name,\n type: params.type,\n endpoint: params.endpoint,\n mcpEndpoint: params.mcpEndpoint,\n pricing: params.pricing,\n description: params.description,\n auth: params.auth,\n }, params.idempotencyKey);\n return res.data;\n }\n\n /** Update an existing product listing. */\n async update(productId: string, params: Partial<CreateProductParams>): Promise<Product> {\n const res = await this._put<Product>(`/products/${productId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Deactivate a product listing (soft delete). */\n async deactivate(productId: string): Promise<void> {\n await this._delete(`/products/${productId}`);\n }\n\n /** Get a product you've listed. */\n async get(productId: string): Promise<Product> {\n const res = await this._get<Product>(`/products/${productId}`);\n return res.data;\n }\n\n /** List all products you've listed for sale. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Product>> {\n return this._list<Product>('/products', params);\n }\n\n /** Get analytics for a product you've listed. */\n async analytics(params: AnalyticsParams): Promise<ProductAnalytics> {\n const res = await this._get<ProductAnalytics>(\n `/products/${params.productId}/analytics`,\n { period: params.period },\n );\n return res.data;\n }\n\n /** List a software product using an SCP manifest. */\n async createSoftwareProduct(manifest: SCPManifest): Promise<Product> {\n const res = await this._post<Product>('/software', manifest as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Admin Resource (Enterprise / Team Management)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n BudgetConfig,\n SpendingSummary,\n TeamMember,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Admin extends Resource {\n protected get basePath(): string {\n return '/agent/admin';\n }\n\n // -------------------------------------------------------------------------\n // Spending\n // -------------------------------------------------------------------------\n\n /** Get spending summary with optional grouping by team/developer/agent. */\n async spending(params: {\n period: string;\n groupBy?: 'team' | 'developer' | 'agent';\n }): Promise<SpendingSummary> {\n const res = await this._get<SpendingSummary>('/spending', params);\n return res.data;\n }\n\n // -------------------------------------------------------------------------\n // Budgets\n // -------------------------------------------------------------------------\n\n /** Get current budget configuration. */\n async getBudget(scope?: { teamId?: string; developerId?: string }): Promise<BudgetConfig> {\n const res = await this._get<BudgetConfig>('/budgets', scope);\n return res.data;\n }\n\n /** Update budget limits. */\n async setBudget(\n config: BudgetConfig & { teamId?: string; developerId?: string },\n ): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>('/budgets', config as Record<string, unknown>);\n return res.data;\n }\n\n // -------------------------------------------------------------------------\n // Team Members\n // -------------------------------------------------------------------------\n\n /** List team members. */\n async listMembers(params?: {\n limit?: number;\n offset?: number;\n teamId?: string;\n }): Promise<PaginatedResponse<TeamMember>> {\n return this._list<TeamMember>('/members', params);\n }\n\n /** Invite a team member. */\n async inviteMember(params: {\n email: string;\n role: TeamMember['role'];\n teamId?: string;\n }): Promise<TeamMember> {\n const res = await this._post<TeamMember>('/members', params);\n return res.data;\n }\n\n /** Update a team member's role. */\n async updateMember(memberId: string, params: { role: TeamMember['role'] }): Promise<TeamMember> {\n const res = await this._put<TeamMember>(`/members/${memberId}`, params);\n return res.data;\n }\n\n /** Remove a team member. */\n async removeMember(memberId: string): Promise<void> {\n await this._delete(`/members/${memberId}`);\n }\n\n // -------------------------------------------------------------------------\n // Account Management (GDPR)\n // -------------------------------------------------------------------------\n\n /**\n * Export all developer data as JSON (GDPR data portability).\n */\n async exportData(): Promise<Record<string, unknown>> {\n const res = await this._get<Record<string, unknown>>('/export');\n return res.data;\n }\n\n /**\n * Delete the developer account and purge all PII (GDPR right to erasure).\n * Transaction records are anonymized (amount + merchant retained for regulatory).\n */\n async deleteAccount(): Promise<{ status: string; deletionCompletesAt: string }> {\n const res = await this._delete<{ status: string; deletionCompletesAt: string }>('/account');\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Webhooks Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport { verifyWebhookSignature } from '../crypto/signature.js';\nimport type { WebhookConfig, WebhookPayload, PaginatedResponse } from '../types.js';\n\nexport class Webhooks extends Resource {\n protected get basePath(): string {\n return '/agent/webhook';\n }\n\n /** Register a new webhook endpoint. */\n async create(params: Omit<WebhookConfig, 'id'>): Promise<WebhookConfig> {\n const res = await this._post<WebhookConfig>('', params as Record<string, unknown>);\n return res.data;\n }\n\n /** List registered webhooks. */\n async list(): Promise<PaginatedResponse<WebhookConfig>> {\n return this._list<WebhookConfig>();\n }\n\n /** Get a webhook by ID. */\n async get(webhookId: string): Promise<WebhookConfig> {\n const res = await this._get<WebhookConfig>(`/${webhookId}`);\n return res.data;\n }\n\n /** Update a webhook configuration. */\n async update(webhookId: string, params: Partial<WebhookConfig>): Promise<WebhookConfig> {\n const res = await this._put<WebhookConfig>(`/${webhookId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Delete a webhook endpoint. */\n async delete(webhookId: string): Promise<void> {\n await this._delete(`/${webhookId}`);\n }\n\n /**\n * Verify a webhook payload's signature.\n *\n * Use this in your webhook handler to confirm the payload was sent by Lane.\n *\n * @param payload - Raw request body string\n * @param signature - Value of X-Lane-Signature header\n * @param secret - Your webhook signing secret\n * @param timestamp - Value of X-Lane-Timestamp header (unix seconds)\n */\n verify(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n ): boolean {\n return verifyWebhookSignature(payload, signature, secret, timestamp);\n }\n\n /**\n * Parse and verify a webhook payload in one step.\n * Throws if signature is invalid.\n */\n constructEvent(\n payload: string,\n signature: string,\n secret: string,\n timestamp: number,\n ): WebhookPayload {\n if (!this.verify(payload, signature, secret, timestamp)) {\n throw new Error('Invalid webhook signature');\n }\n return JSON.parse(payload) as WebhookPayload;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — VIC Resource (Visa Intelligent Commerce Agentic Tokens)\n// ---------------------------------------------------------------------------\n// Phase 2: THE MOAT — issue Visa-authenticated credentials that work at\n// any Visa-accepting merchant. Upgrades from \"call billing API\" to\n// \"issue a Visa credential.\"\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n VICToken,\n VICIssuanceParams,\n NetworkTokenPayload,\n PaginatedResponse,\n} from '../types.js';\n\nexport class VIC extends Resource {\n protected get basePath(): string {\n return '/agent/token';\n }\n\n /**\n * Issue a VIC agentic token. This provisions a Visa network token (DPAN)\n * scoped to the agent's constraints: amount limits, merchant restrictions,\n * and time bounds.\n *\n * The token works at any Visa-accepting merchant — not just Lane catalog.\n */\n async issue(params: VICIssuanceParams): Promise<VICToken> {\n const res = await this._post<VICToken>('', {\n walletId: params.walletId,\n cardId: params.cardId,\n maxTransactionAmount: params.maxTransactionAmount,\n allowedMCCs: params.allowedMCCs,\n expiresIn: params.expiresIn ?? '24h',\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Retrieve payment credentials for a VIC token.\n * Returns DPAN, cryptogram, ECI, and expiry — everything needed to pay\n * at any Visa-accepting merchant.\n *\n * Called just before payment execution — the cryptogram is single-use.\n * Pre-validates token status to avoid wasting network calls on\n * revoked/suspended/expired tokens.\n */\n async getPaymentCredentials(tokenId: string, params: {\n amount: number;\n currency: string;\n merchantId: string;\n }): Promise<NetworkTokenPayload> {\n // Pre-validate token status to prevent issuing credentials for inactive tokens\n const token = await this.get(tokenId);\n if (token.status !== 'active') {\n throw new Error(\n `VIC token ${tokenId} is ${token.status} — cannot retrieve credentials. ` +\n (token.status === 'suspended' ? 'Reactivate the token first.' : 'Provision a new token.'),\n );\n }\n\n const res = await this._post<NetworkTokenPayload>(\n `/${tokenId}/cryptogram`,\n params as Record<string, unknown>,\n );\n return res.data;\n }\n\n /**\n * @deprecated Use getPaymentCredentials() instead.\n */\n async getCryptogram(tokenId: string, params: {\n amount: number;\n currency: string;\n merchantId: string;\n }): Promise<NetworkTokenPayload> {\n return this.getPaymentCredentials(tokenId, params);\n }\n\n /** Get a VIC token by ID. */\n async get(tokenId: string): Promise<VICToken> {\n const res = await this._get<VICToken>(`/${tokenId}`);\n return res.data;\n }\n\n /** List VIC tokens for a wallet. */\n async list(params?: {\n walletId?: string;\n status?: VICToken['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<VICToken>> {\n return this._list<VICToken>('', params);\n }\n\n /** Revoke a VIC token immediately. */\n async revoke(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/revoke`);\n return res.data;\n }\n\n /** Suspend a VIC token (can be reactivated). */\n async suspend(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/suspend`);\n return res.data;\n }\n\n /** Reactivate a suspended VIC token. */\n async reactivate(tokenId: string): Promise<VICToken> {\n const res = await this._post<VICToken>(`/${tokenId}/reactivate`);\n return res.data;\n }\n\n /**\n * Update a purchase intent (Visa IC Step 3).\n * Optional — update parameters before credential retrieval.\n */\n async updateIntent(intentId: string, params: {\n amount?: number;\n currency?: string;\n merchantId?: string;\n description?: string;\n }): Promise<{ intentId: string }> {\n const res = await this._put<{ intentId: string }>(`/intents/${intentId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /**\n * Cancel a purchase intent (Visa IC Step 4).\n * Optional — cancel before checkout.\n */\n async cancelIntent(intentId: string): Promise<void> {\n await this._delete(`/intents/${intentId}`);\n }\n\n /**\n * Confirm a transaction (Visa IC Step 6).\n * Post-payment confirmation back to Visa.\n */\n async confirmTransaction(intentId: string, txnDetails: {\n transactionId: string;\n status: string;\n }): Promise<void> {\n await this._post(`/intents/${intentId}/confirm`, txnDetails as unknown as Record<string, unknown>);\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Metering Resource (Make-a-SaaS Usage Tracking)\n// ---------------------------------------------------------------------------\n// Phase 4: Sellers track API usage, and Lane handles billing.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n UsageRecord,\n UsageReport,\n MeteringConfig,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Metering extends Resource {\n protected get basePath(): string {\n return '/agent/metering';\n }\n\n /**\n * Record a usage event (API call, token consumption, etc.).\n * Called by the seller's service when a buyer uses it.\n */\n async record(params: {\n productId: string;\n buyerId: string;\n quantity: number;\n unit?: string;\n idempotencyKey?: string;\n }): Promise<UsageRecord> {\n const res = await this._post<UsageRecord>('/usage', {\n productId: params.productId,\n buyerId: params.buyerId,\n quantity: params.quantity,\n unit: params.unit ?? 'calls',\n }, params.idempotencyKey);\n return res.data;\n }\n\n /**\n * Record a batch of usage events efficiently.\n */\n async recordBatch(records: {\n productId: string;\n buyerId: string;\n quantity: number;\n unit?: string;\n timestamp?: string;\n }[]): Promise<{ recorded: number; failed: number }> {\n const res = await this._post<{ recorded: number; failed: number }>('/usage/batch', {\n records,\n });\n return res.data;\n }\n\n /** Query usage for a product. */\n async query(params: {\n productId: string;\n buyerId?: string;\n startDate?: string;\n endDate?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<UsageRecord>> {\n return this._list<UsageRecord>('/usage', params);\n }\n\n /** Get an aggregated usage report. */\n async report(params: {\n productId: string;\n period: string;\n }): Promise<UsageReport> {\n const res = await this._get<UsageReport>('/reports', params);\n return res.data;\n }\n\n /** Get or update metering config for a product. */\n async getConfig(productId: string): Promise<MeteringConfig> {\n const res = await this._get<MeteringConfig>(`/config/${productId}`);\n return res.data;\n }\n\n async setConfig(productId: string, config: MeteringConfig): Promise<MeteringConfig> {\n const res = await this._put<MeteringConfig>(`/config/${productId}`, config as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Payouts Resource (Seller Disbursements)\n// ---------------------------------------------------------------------------\n// Phase 4: Sellers receive payouts from Lane for their product sales.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { Payout, PayoutConfig, PaginatedResponse } from '../types.js';\n\nexport class Payouts extends Resource {\n protected get basePath(): string {\n return '/agent/payouts';\n }\n\n /** Get payout configuration. */\n async getConfig(): Promise<PayoutConfig> {\n const res = await this._get<PayoutConfig>('/config');\n return res.data;\n }\n\n /** Set up or update payout configuration. */\n async setConfig(config: {\n destination: PayoutConfig['destination'];\n destinationId: string;\n schedule?: PayoutConfig['schedule'];\n currency?: string;\n minimumPayout?: number;\n }): Promise<PayoutConfig> {\n const res = await this._put<PayoutConfig>('/config', config as Record<string, unknown>);\n return res.data;\n }\n\n /** List payouts. */\n async list(params?: {\n status?: Payout['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<Payout>> {\n return this._list<Payout>('', params);\n }\n\n /** Get a specific payout. */\n async get(payoutId: string): Promise<Payout> {\n const res = await this._get<Payout>(`/${payoutId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Teams Resource (Corporate Agent Spend)\n// ---------------------------------------------------------------------------\n// Phase 5: Hierarchical team management with budget cascading.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Team,\n CreateTeamParams,\n TeamMember,\n BudgetConfig,\n HierarchicalBudget,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Teams extends Resource {\n protected get basePath(): string {\n return '/agent/team';\n }\n\n /** Create a new team. */\n async create(params: CreateTeamParams): Promise<Team> {\n const res = await this._post<Team>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List teams. */\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Team>> {\n return this._list<Team>('', params);\n }\n\n /** Get a team by ID. */\n async get(teamId: string): Promise<Team> {\n const res = await this._get<Team>(`/${teamId}`);\n return res.data;\n }\n\n /** Update a team. */\n async update(teamId: string, params: { name?: string; budget?: BudgetConfig }): Promise<Team> {\n const res = await this._put<Team>(`/${teamId}`, params as Record<string, unknown>);\n return res.data;\n }\n\n /** Delete a team. */\n async delete(teamId: string): Promise<void> {\n await this._delete(`/${teamId}`);\n }\n\n /** Add a member to a team. */\n async addMember(teamId: string, params: { userId: string; role: TeamMember['role'] }): Promise<TeamMember> {\n const res = await this._post<TeamMember>(`/${teamId}/member`, params);\n return res.data;\n }\n\n /** List team members. */\n async listMembers(teamId: string, params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<TeamMember>> {\n return this._list<TeamMember>(`/${teamId}/member`, params);\n }\n\n /** Remove a member from a team. */\n async removeMember(teamId: string, memberId: string): Promise<void> {\n await this._delete(`/${teamId}/member/${memberId}`);\n }\n\n /** Get the hierarchical budget for a team (org > team > developer > agent). */\n async getHierarchicalBudget(teamId: string): Promise<HierarchicalBudget> {\n const res = await this._get<HierarchicalBudget>(`/${teamId}/budget/hierarchy`);\n return res.data;\n }\n\n /** Set the team-level budget. */\n async setBudget(teamId: string, budget: BudgetConfig): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>(`/${teamId}/budget`, budget as unknown as Record<string, unknown>);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Agents Resource (Fleet Management)\n// ---------------------------------------------------------------------------\n// Phase 5: Register, manage, and constrain agents in a fleet.\n// Each agent gets a policy governing its capabilities and spending.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n AgentRecord,\n RegisterAgentParams,\n AgentPolicy,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Agents extends Resource {\n protected get basePath(): string {\n return '/agent/fleet';\n }\n\n /** Register a new agent in the fleet. */\n async register(params: RegisterAgentParams): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get an agent by ID. */\n async get(agentId: string): Promise<AgentRecord> {\n const res = await this._get<AgentRecord>(`/${agentId}`);\n return res.data;\n }\n\n /** List agents in the fleet. */\n async list(params?: {\n status?: AgentRecord['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<AgentRecord>> {\n return this._list<AgentRecord>('', params);\n }\n\n /** Update an agent's policy. */\n async setPolicy(agentId: string, policy: AgentPolicy): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/policy`, policy as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Suspend an agent (temporary, can be reactivated). */\n async suspend(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/suspend`);\n return res.data;\n }\n\n /** Reactivate a suspended agent. */\n async reactivate(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/reactivate`);\n return res.data;\n }\n\n /** Permanently revoke an agent. */\n async revoke(agentId: string): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>(`/${agentId}/revoke`);\n return res.data;\n }\n\n /** Assign a wallet to an agent (per-agent wallet). */\n async assignWallet(agentId: string, walletId: string): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/wallet`, { walletId });\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Audit Resource (SOC 2 Audit Trail)\n// ---------------------------------------------------------------------------\n// Phase 5: Immutable audit trail for all SDK actions.\n// Every API call, payment, and admin action is logged.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type { AuditEntry, AuditQueryParams, PaginatedResponse } from '../types.js';\n\nexport class Audit extends Resource {\n protected get basePath(): string {\n return '/agent/audit';\n }\n\n /** Query audit log entries. */\n async query(params?: AuditQueryParams): Promise<PaginatedResponse<AuditEntry>> {\n return this._list<AuditEntry>('/logs', params ? { ...params } : undefined);\n }\n\n /** Get a specific audit entry by ID. */\n async get(entryId: string): Promise<AuditEntry> {\n const res = await this._get<AuditEntry>(`/logs/${entryId}`);\n return res.data;\n }\n\n /**\n * Export audit logs for a date range (SOC 2 compliance).\n * Returns a download URL for the audit log archive.\n */\n async export(params: {\n startDate: string;\n endDate: string;\n format?: 'json' | 'csv';\n }): Promise<{ downloadUrl: string; expiresAt: string }> {\n const res = await this._post<{ downloadUrl: string; expiresAt: string }>('/export', params);\n return res.data;\n }\n\n /** Get audit summary/statistics for a period. */\n async summary(params: {\n period: string;\n groupBy?: 'action' | 'actor' | 'resource';\n }): Promise<{\n totalEntries: number;\n byAction: Record<string, number>;\n byActorType: Record<string, number>;\n topActors: { id: string; count: number }[];\n }> {\n const res = await this._get<{\n totalEntries: number;\n byAction: Record<string, number>;\n byActorType: Record<string, number>;\n topActors: { id: string; count: number }[];\n }>('/summary', params);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Identity Resource (Agent Identity)\n// ---------------------------------------------------------------------------\n// Phase 6: Lane-issued agent identity. KYC chain:\n// Human -> Lane -> Agent -> Transaction\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n AgentIdentity,\n RegisterIdentityParams,\n VerifyIdentityParams,\n IdentityAttestation,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Identity extends Resource {\n protected get basePath(): string {\n return '/agent/identity';\n }\n\n /**\n * Register an agent for identity verification.\n * This starts the KYC chain: Human (developer) vouches for Agent.\n */\n async register(params: RegisterIdentityParams): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /**\n * Complete identity verification using a developer-provided code.\n * This establishes the Human -> Lane -> Agent chain.\n */\n async verify(params: VerifyIdentityParams): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(\n `/${params.identityId}/verify`,\n { verificationCode: params.verificationCode },\n );\n return res.data;\n }\n\n /** Get an agent identity by ID. */\n async get(identityId: string): Promise<AgentIdentity> {\n const res = await this._get<AgentIdentity>(`/${identityId}`);\n return res.data;\n }\n\n /** List agent identities. */\n async list(params?: {\n agentId?: string;\n status?: AgentIdentity['status'];\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<AgentIdentity>> {\n return this._list<AgentIdentity>('', params);\n }\n\n /**\n * Get the current attestation for a verified identity.\n * The attestation is a cryptographic proof that Lane has verified the\n * Human -> Agent chain.\n */\n async getAttestation(identityId: string): Promise<IdentityAttestation> {\n const res = await this._get<IdentityAttestation>(`/${identityId}/attestation`);\n return res.data;\n }\n\n /**\n * Refresh the attestation (generates a new signed document).\n * Useful when the previous attestation is nearing expiry.\n */\n async refreshAttestation(identityId: string): Promise<IdentityAttestation> {\n const res = await this._post<IdentityAttestation>(`/${identityId}/attestation/refresh`);\n return res.data;\n }\n\n /** Suspend an agent identity. */\n async suspend(identityId: string): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(`/${identityId}/suspend`);\n return res.data;\n }\n\n /** Revoke an agent identity permanently. */\n async revoke(identityId: string): Promise<AgentIdentity> {\n const res = await this._post<AgentIdentity>(`/${identityId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Subscriptions Resource\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Subscription,\n CreateSubscriptionParams,\n UpdateSubscriptionParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Subscriptions extends Resource {\n protected get basePath(): string {\n return '/agent/subscription';\n }\n\n /** Create a new subscription. */\n async create(params: CreateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** List subscriptions, optionally filtered by status. */\n async list(params?: { status?: string; limit?: number; offset?: number }): Promise<PaginatedResponse<Subscription>> {\n return this._list<Subscription>('', params);\n }\n\n /** Get a subscription by ID. */\n async get(subscriptionId: string): Promise<Subscription> {\n const res = await this._get<Subscription>(`/${subscriptionId}`);\n return res.data;\n }\n\n /** Cancel a subscription. */\n async cancel(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/cancel`, {});\n return res.data;\n }\n\n /** Upgrade a subscription to a higher plan. */\n async upgrade(subscriptionId: string, params: UpdateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/upgrade`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Downgrade a subscription to a lower plan. */\n async downgrade(subscriptionId: string, params: UpdateSubscriptionParams): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/downgrade`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Pause a subscription. */\n async pause(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/pause`, {});\n return res.data;\n }\n\n /** Resume a paused subscription. */\n async resume(subscriptionId: string): Promise<Subscription> {\n const res = await this._post<Subscription>(`/${subscriptionId}/resume`, {});\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Merchants Resource (Directory)\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n PaginatedResponse,\n DirectoryMerchant,\n MerchantSearchParams,\n ProtocolDiscoveryResult,\n MerchantVerticalSummary,\n} from '../types.js';\n\nexport class Merchants extends Resource {\n protected get basePath(): string {\n return '/merchants';\n }\n\n /** List/search the merchant directory. */\n async list(params?: MerchantSearchParams): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', params as Record<string, unknown>);\n }\n\n /** Get a merchant by ID, slug, or domain. */\n async get(idOrSlug: string): Promise<DirectoryMerchant> {\n const res = await this._get<DirectoryMerchant>(`/${idOrSlug}`);\n return res.data;\n }\n\n /** List merchants that support a specific protocol. */\n async listByProtocol(\n protocol: string,\n params?: Omit<MerchantSearchParams, 'protocol'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, protocol } as Record<string, unknown>);\n }\n\n /** List merchants in a specific vertical. */\n async listByVertical(\n vertical: string,\n params?: Omit<MerchantSearchParams, 'vertical'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, vertical } as Record<string, unknown>);\n }\n\n /** List only Lane-onboarded merchants. */\n async listOnboarded(\n params?: Omit<MerchantSearchParams, 'tier'>,\n ): Promise<PaginatedResponse<DirectoryMerchant>> {\n return this._list<DirectoryMerchant>('', { ...params, tier: 'lane_onboarded' } as Record<string, unknown>);\n }\n\n /** List all verticals with subcategories and counts. */\n async verticals(): Promise<MerchantVerticalSummary[]> {\n const res = await this._get<MerchantVerticalSummary[]>('/verticals');\n return res.data;\n }\n\n /** Discover a protocol-compatible merchant by domain. */\n async discover(domain: string): Promise<ProtocolDiscoveryResult> {\n const res = await this._post<ProtocolDiscoveryResult>('/discover', { domain });\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, Card } from '../types.js';\n\nexport class Cards extends Resource {\n protected get basePath(): string {\n return '/agent/card';\n }\n\n async list(params?: { limit?: number; offset?: number; walletId?: string }): Promise<PaginatedResponse<Card>> {\n return this._list<Card>('', params);\n }\n\n async get(cardId: string): Promise<Card> {\n const res = await this._get<Card>(`/${cardId}`);\n return res.data;\n }\n\n async delete(cardId: string): Promise<void> {\n await this._delete(`/${cardId}`);\n }\n\n async getAddLink(walletId?: string): Promise<{ url: string; expiresAt: string }> {\n const query = walletId ? { walletId } : undefined;\n const res = await this._get<{ url: string; expiresAt: string }>('/add-link', query);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, InstructionBudgetStatus } from '../types.js';\n\nexport interface Instruction {\n id: string;\n walletId?: string;\n type: string;\n amount?: number;\n currency: string;\n merchant?: string;\n permissions: string[];\n constraints: Record<string, unknown>;\n status: string;\n spentCents: number;\n remainingCents: number | null;\n expiresAt?: string;\n createdAt: string;\n}\n\nexport interface Mandate {\n id: string;\n instructionId: string;\n type: string;\n config: Record<string, unknown>;\n status: string;\n spentCents: number;\n remainingCents: number;\n createdAt: string;\n}\n\nexport interface InstructionCredential {\n id: string;\n instructionId: string;\n credentialType: string;\n credentialData: Record<string, unknown>;\n expiresAt?: string;\n createdAt: string;\n}\n\nexport interface InstructionConfirmation {\n id: string;\n instructionId: string;\n confirmedBy?: string;\n confirmationType: string;\n details: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface CreateInstructionParams {\n walletId?: string;\n type?: string;\n amount?: number;\n currency?: string;\n merchant?: string;\n permissions?: string[];\n constraints?: Record<string, unknown>;\n expiresIn?: string;\n idempotencyKey?: string;\n}\n\nexport interface CreateMandateParams {\n type: string;\n config?: Record<string, unknown>;\n}\n\nexport class Instructions extends Resource {\n protected get basePath(): string {\n return '/agent/instruction';\n }\n\n async create(params: CreateInstructionParams): Promise<Instruction> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<Instruction>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Instruction>> {\n return this._list<Instruction>('', params);\n }\n\n async get(instructionId: string): Promise<Instruction> {\n const res = await this._get<Instruction>(`/${instructionId}`);\n return res.data;\n }\n\n async update(instructionId: string, updates: Partial<CreateInstructionParams>): Promise<Instruction> {\n const res = await this._put<Instruction>(`/${instructionId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async cancel(instructionId: string): Promise<void> {\n await this._post(`/${instructionId}/cancel`);\n }\n\n // Mandate CRUD\n async addMandate(instructionId: string, params: CreateMandateParams): Promise<Mandate> {\n const res = await this._post<Mandate>(`/${instructionId}/mandate`, params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async listMandates(instructionId: string): Promise<Mandate[]> {\n const res = await this._get<Mandate[]>(`/${instructionId}/mandate`);\n return res.data;\n }\n\n async getMandate(instructionId: string, mandateId: string): Promise<Mandate> {\n const res = await this._get<Mandate>(`/${instructionId}/mandate/${mandateId}`);\n return res.data;\n }\n\n async updateMandate(instructionId: string, mandateId: string, updates: Partial<CreateMandateParams>): Promise<Mandate> {\n const res = await this._put<Mandate>(`/${instructionId}/mandate/${mandateId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async deleteMandate(instructionId: string, mandateId: string): Promise<void> {\n await this._delete(`/${instructionId}/mandate/${mandateId}`);\n }\n\n // Credential\n async getCredential(instructionId: string): Promise<InstructionCredential> {\n const res = await this._post<InstructionCredential>(`/${instructionId}/credential`);\n return res.data;\n }\n\n // Confirmations\n async createConfirmation(instructionId: string, details: Record<string, unknown> = {}): Promise<InstructionConfirmation> {\n const res = await this._post<InstructionConfirmation>(`/${instructionId}/confirmation`, details);\n return res.data;\n }\n\n async listConfirmations(instructionId: string): Promise<InstructionConfirmation[]> {\n const res = await this._get<InstructionConfirmation[]>(`/${instructionId}/confirmation`);\n return res.data;\n }\n\n // Budget\n async getBudget(instructionId: string): Promise<InstructionBudgetStatus> {\n const res = await this._get<InstructionBudgetStatus>(`/${instructionId}/budget`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { APIResponse, PaginatedResponse, AgenticToken } from '../types.js';\n\nexport interface ProvisionTokenParams {\n walletId: string;\n amount: number;\n currency?: string;\n merchant?: string;\n permissions?: string[];\n expiresIn?: string;\n idempotencyKey?: string;\n}\n\nexport class Tokens extends Resource {\n protected get basePath(): string {\n return '/agent/token';\n }\n\n async provision(params: ProvisionTokenParams): Promise<AgenticToken> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<AgenticToken>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgenticToken>> {\n return this._list<AgenticToken>('', params);\n }\n\n async get(tokenId: string): Promise<AgenticToken> {\n const res = await this._get<AgenticToken>(`/${tokenId}`);\n return res.data;\n }\n\n async suspend(tokenId: string): Promise<void> {\n await this._post(`/${tokenId}/suspend`);\n }\n\n async reactivate(tokenId: string): Promise<void> {\n await this._post(`/${tokenId}/reactivate`);\n }\n\n async delete(tokenId: string): Promise<void> {\n await this._delete(`/${tokenId}`);\n }\n\n async getCryptogram(tokenId: string): Promise<{ cryptogram: string; eci: string; expMonth: number; expYear: number }> {\n const res = await this._post<{ cryptogram: string; eci: string; expMonth: number; expYear: number }>(`/${tokenId}/cryptogram`);\n return res.data;\n }\n\n async reProvision(tokenId: string): Promise<AgenticToken> {\n const res = await this._post<AgenticToken>(`/${tokenId}/re-provision`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse, Transaction, Refund } from '../types.js';\n\nexport class Transactions extends Resource {\n protected get basePath(): string {\n return '/agent/transaction';\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<Transaction>> {\n return this._list<Transaction>('', params);\n }\n\n async get(transactionId: string): Promise<Transaction> {\n const res = await this._get<Transaction>(`/${transactionId}`);\n return res.data;\n }\n\n async refund(transactionId: string, params?: { amount?: number; reason?: string; idempotencyKey?: string }): Promise<Refund> {\n const { idempotencyKey, ...body } = params ?? {};\n const res = await this._post<Refund>(`/${transactionId}/refund`, body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { BudgetConfig, SpendingSummary } from '../types.js';\n\nexport class Budgets extends Resource {\n protected get basePath(): string {\n return '/agent/budget';\n }\n\n async get(): Promise<BudgetConfig> {\n const res = await this._get<BudgetConfig>('');\n return res.data;\n }\n\n async set(config: BudgetConfig): Promise<BudgetConfig> {\n const res = await this._put<BudgetConfig>('', config as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async getSpending(params?: { period?: string }): Promise<SpendingSummary> {\n const res = await this._get<SpendingSummary>('/spending', params);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse } from '../types.js';\n\nexport interface AgentUser {\n id: string;\n email?: string;\n name?: string;\n externalId?: string;\n metadata: Record<string, unknown>;\n status: string;\n createdAt: string;\n}\n\nexport interface CreateUserParams {\n email?: string;\n name?: string;\n externalId?: string;\n metadata?: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport class Users extends Resource {\n protected get basePath(): string {\n return '/agent/user';\n }\n\n async create(params: CreateUserParams): Promise<AgentUser> {\n const { idempotencyKey, ...body } = params;\n const res = await this._post<AgentUser>('', body as Record<string, unknown>, idempotencyKey);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgentUser>> {\n return this._list<AgentUser>('', params);\n }\n\n async get(userId: string): Promise<AgentUser> {\n const res = await this._get<AgentUser>(`/${userId}`);\n return res.data;\n }\n\n async update(userId: string, updates: Partial<CreateUserParams>): Promise<AgentUser> {\n const res = await this._put<AgentUser>(`/${userId}`, updates as Record<string, unknown>);\n return res.data;\n }\n\n async delete(userId: string): Promise<void> {\n await this._delete(`/${userId}`);\n }\n\n async createSession(userId: string): Promise<{ token: string; expiresAt: string }> {\n const res = await this._post<{ token: string; expiresAt: string }>(`/${userId}/session`);\n return res.data;\n }\n}\n","import { Resource } from './base.js';\nimport type { PaginatedResponse, AgentRecord, RegisterAgentParams, AgentPolicy } from '../types.js';\n\nexport class Fleet extends Resource {\n protected get basePath(): string {\n return '/agent/fleet';\n }\n\n async register(params: RegisterAgentParams): Promise<AgentRecord> {\n const res = await this._post<AgentRecord>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async list(params?: { limit?: number; offset?: number }): Promise<PaginatedResponse<AgentRecord>> {\n return this._list<AgentRecord>('', params);\n }\n\n async get(agentId: string): Promise<AgentRecord> {\n const res = await this._get<AgentRecord>(`/${agentId}`);\n return res.data;\n }\n\n async suspend(agentId: string): Promise<void> {\n await this._post(`/${agentId}/suspend`);\n }\n\n async revoke(agentId: string): Promise<void> {\n await this._post(`/${agentId}/revoke`);\n }\n\n async reactivate(agentId: string): Promise<void> {\n await this._post(`/${agentId}/reactivate`);\n }\n\n async setPolicy(agentId: string, policy: AgentPolicy): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/policy`, policy as unknown as Record<string, unknown>);\n return res.data;\n }\n\n async assignWallet(agentId: string, walletId: string): Promise<AgentRecord> {\n const res = await this._put<AgentRecord>(`/${agentId}/wallet`, { walletId });\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Built-in UCP Merchant Directory\n// ---------------------------------------------------------------------------\n// Static registry of merchants with known UCP (Universal Checkout Protocol)\n// endpoints. Ships with the SDK so agents can resolve merchants to UCP\n// endpoints offline — no server round-trip required for known merchants.\n//\n// The directory enables instant protocol routing: when an agent encounters a\n// merchant prompt (\"buy from Glossier\"), it can match the brand to a known\n// UCP endpoint and route the VIC credential directly through UCP without\n// falling back to browser automation or Rye.\n//\n// Merchants are indexed by canonical domain AND common brand aliases so that\n// fuzzy prompt matching works (\"alo yoga\" → aloyoga.com → UCP endpoint).\n// ---------------------------------------------------------------------------\n\n/** A merchant with a known UCP endpoint. */\nexport interface UCPMerchant {\n /** Canonical brand name (display). */\n name: string;\n /** Primary domain (e.g. \"glossier.com\"). */\n domain: string;\n /** The full UCP well-known endpoint URL. */\n ucpEndpoint: string;\n /** Merchant category codes (ISO 18245). */\n mccs: string[];\n /** Product vertical for filtering. */\n vertical: string;\n /** Common brand aliases / alternate spellings for fuzzy matching. */\n aliases: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Known UCP Merchants\n// ---------------------------------------------------------------------------\n// These merchants expose a /.well-known/ucp endpoint that accepts structured\n// checkout requests. The list is curated — each entry has been verified.\n// ---------------------------------------------------------------------------\n\nconst UCP_MERCHANTS: readonly UCPMerchant[] = Object.freeze([\n {\n name: 'Monos',\n domain: 'monos.com',\n ucpEndpoint: 'https://monos.com/.well-known/ucp',\n mccs: ['5948'],\n vertical: 'travel',\n aliases: ['monos travel', 'monos luggage'],\n },\n {\n name: 'Gymshark',\n domain: 'gymshark.com',\n ucpEndpoint: 'https://us.checkout.gymshark.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['gym shark', 'gymshark us'],\n },\n {\n name: 'Glossier',\n domain: 'glossier.com',\n ucpEndpoint: 'https://glossier.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'beauty',\n aliases: ['glossier beauty'],\n },\n {\n name: 'Alo Yoga',\n domain: 'aloyoga.com',\n ucpEndpoint: 'https://aloyoga.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['alo', 'alo yoga', 'aloyoga'],\n },\n {\n name: 'Fender',\n domain: 'fender.com',\n ucpEndpoint: 'https://fender.com/.well-known/ucp',\n mccs: ['5733'],\n vertical: 'music',\n aliases: ['fender guitars', 'fender musical'],\n },\n {\n name: 'Outdoor Voices',\n domain: 'outdoorvoices.com',\n ucpEndpoint: 'https://outdoorvoices.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['outdoor voices', 'ov'],\n },\n {\n name: 'Casper',\n domain: 'casper.com',\n ucpEndpoint: 'https://casper.com/.well-known/ucp',\n mccs: ['5712'],\n vertical: 'home',\n aliases: ['casper sleep', 'casper mattress'],\n },\n {\n name: 'UNTUCKit',\n domain: 'untuckit.com',\n ucpEndpoint: 'https://untuckit.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['untuck it', 'untuckit'],\n },\n {\n name: 'Forever 21',\n domain: 'forever21.com',\n ucpEndpoint: 'https://forever21.com/.well-known/ucp',\n mccs: ['5699'],\n vertical: 'fashion',\n aliases: ['forever 21', 'forever21', 'f21'],\n },\n {\n name: 'Decathlon',\n domain: 'decathlon.com',\n ucpEndpoint: 'https://decathlon.com/.well-known/ucp',\n mccs: ['5941'],\n vertical: 'sports',\n aliases: ['decathlon sports'],\n },\n {\n name: 'Olaplex',\n domain: 'olaplex.com',\n ucpEndpoint: 'https://olaplex.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'beauty',\n aliases: ['olaplex hair'],\n },\n {\n name: 'Grove Collaborative',\n domain: 'grove.co',\n ucpEndpoint: 'https://grove.co/.well-known/ucp',\n mccs: ['5999'],\n vertical: 'home',\n aliases: ['grove', 'grove co', 'grove collaborative'],\n },\n {\n name: \"Harry's\",\n domain: 'harrys.com',\n ucpEndpoint: 'https://harrys.com/.well-known/ucp',\n mccs: ['5977'],\n vertical: 'grooming',\n aliases: ['harrys', \"harry's\", 'harrys razors'],\n },\n]);\n\n// ---------------------------------------------------------------------------\n// Lookup indexes (built once at module load)\n// ---------------------------------------------------------------------------\n\n/** Domain → UCPMerchant lookup (exact match). */\nconst byDomain = new Map<string, UCPMerchant>();\n\n/** Lowercase alias → UCPMerchant lookup (fuzzy match from prompts). */\nconst byAlias = new Map<string, UCPMerchant>();\n\nfor (const merchant of UCP_MERCHANTS) {\n // Index by domain (strip protocol, lowercase)\n byDomain.set(merchant.domain.toLowerCase(), merchant);\n\n // Index by brand name (lowercase)\n byAlias.set(merchant.name.toLowerCase(), merchant);\n\n // Index by each alias\n for (const alias of merchant.aliases) {\n byAlias.set(alias.toLowerCase(), merchant);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Get all known UCP merchants.\n *\n * Returns a frozen array — safe to expose to agents without copies.\n */\nexport function listUCPMerchants(): readonly UCPMerchant[] {\n return UCP_MERCHANTS;\n}\n\n/**\n * Look up a UCP merchant by exact domain.\n *\n * @example\n * ```ts\n * const m = resolveUCPByDomain('glossier.com');\n * // → { name: 'Glossier', ucpEndpoint: 'https://glossier.com/.well-known/ucp', ... }\n * ```\n */\nexport function resolveUCPByDomain(domain: string): UCPMerchant | undefined {\n // Normalize: strip protocol and trailing slash\n const normalized = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/+$/, '')\n .toLowerCase();\n\n // Try exact match first\n const exact = byDomain.get(normalized);\n if (exact) return exact;\n\n // Try matching base domain (e.g. \"us.checkout.gymshark.com\" → \"gymshark.com\")\n for (const [registeredDomain, merchant] of byDomain) {\n if (normalized.endsWith(registeredDomain) || registeredDomain.endsWith(normalized)) {\n return merchant;\n }\n }\n\n return undefined;\n}\n\n/**\n * Resolve a UCP merchant from a brand name or alias (fuzzy prompt matching).\n *\n * Handles common agent prompt patterns:\n * - \"buy from Glossier\" → extract \"glossier\" → match\n * - \"alo yoga leggings\" → extract \"alo yoga\" → match\n * - \"order from gym shark\" → extract \"gym shark\" → match\n *\n * @example\n * ```ts\n * const m = resolveUCPByBrand('alo yoga');\n * // → { name: 'Alo Yoga', ucpEndpoint: 'https://aloyoga.com/.well-known/ucp', ... }\n * ```\n */\nexport function resolveUCPByBrand(brandQuery: string): UCPMerchant | undefined {\n const normalized = brandQuery.trim().toLowerCase();\n\n // Exact alias match\n const exact = byAlias.get(normalized);\n if (exact) return exact;\n\n // Substring match — check if query contains a known brand name/alias\n for (const [alias, merchant] of byAlias) {\n if (normalized.includes(alias) || alias.includes(normalized)) {\n return merchant;\n }\n }\n\n return undefined;\n}\n\n/**\n * Build a UCP endpoint URL from a domain using the well-known convention.\n *\n * If the domain is in the known directory, returns the verified endpoint.\n * Otherwise, constructs a speculative endpoint for runtime probing.\n *\n * @example\n * ```ts\n * toUCPEndpoint('glossier.com')\n * // → 'https://glossier.com/.well-known/ucp' (verified)\n *\n * toUCPEndpoint('unknown-store.com')\n * // → 'https://unknown-store.com/.well-known/ucp' (speculative)\n * ```\n */\nexport function toUCPEndpoint(domain: string): { endpoint: string; verified: boolean } {\n const known = resolveUCPByDomain(domain);\n if (known) {\n return { endpoint: known.ucpEndpoint, verified: true };\n }\n\n // Construct speculative endpoint for unknown domains\n const normalized = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/+$/, '');\n\n return {\n endpoint: `https://${normalized}/.well-known/ucp`,\n verified: false,\n };\n}\n\n/**\n * Filter UCP merchants by vertical.\n *\n * @example\n * ```ts\n * const fashionMerchants = listUCPByVertical('fashion');\n * // → [Gymshark, Alo Yoga, Outdoor Voices, UNTUCKit, Forever 21]\n * ```\n */\nexport function listUCPByVertical(vertical: string): readonly UCPMerchant[] {\n return UCP_MERCHANTS.filter((m) => m.vertical.toLowerCase() === vertical.toLowerCase());\n}\n\n/**\n * Convert the UCP directory into MerchantCapabilities for the routing engine.\n *\n * This allows the PaymentRouter to immediately know these merchants support\n * UCP without a server round-trip, enabling Tier 3 routing out of the box.\n */\nexport function toMerchantCapabilities(): import('../routing/engine.js').MerchantCapabilities[] {\n return UCP_MERCHANTS.map((m) => ({\n merchantId: m.domain,\n hasBillingAPI: false,\n supportsACP: false,\n supportsUCP: true,\n supportsX402: false,\n supportsVIC: true,\n supportsRye: false,\n acceptsVisa: true,\n acceptsMastercard: true,\n mccs: m.mccs,\n }));\n}\n","import { Resource } from './base.js';\nimport type {\n ProtocolSession,\n CreateProtocolSessionParams,\n ProtocolPaymentData,\n ProtocolPaymentResult,\n ProtocolDiscoveryInfo,\n PaginatedResponse,\n} from '../types.js';\nimport { resolveUCPByDomain } from '../merchants/ucp-directory.js';\n\nexport class Protocol extends Resource {\n protected get basePath(): string {\n return '/agent/protocol';\n }\n\n /**\n * Discover all protocols a merchant domain supports.\n *\n * Checks the built-in UCP merchant directory first — if the domain has a\n * known verified UCP endpoint, returns immediately without a server call.\n * Falls back to server-side discovery for unknown merchants.\n */\n async discover(domain: string): Promise<ProtocolDiscoveryInfo> {\n // Check built-in UCP directory first (no server round-trip)\n const knownUCP = resolveUCPByDomain(domain);\n if (knownUCP) {\n return {\n domain: knownUCP.domain,\n protocols: ['ucp'],\n manifests: {\n ucp: { endpoint: knownUCP.ucpEndpoint, verified: true },\n } as Record<string, Record<string, unknown>>,\n };\n }\n\n const res = await this._post<ProtocolDiscoveryInfo>('/discover', { domain });\n return res.data;\n }\n\n /** Create a checkout session (auto-selects best protocol if not specified). */\n async createSession(params: CreateProtocolSessionParams): Promise<ProtocolSession> {\n const res = await this._post<ProtocolSession>('/sessions', params as unknown as Record<string, unknown>, params.idempotencyKey);\n return res.data;\n }\n\n /** Confirm payment for a session. */\n async confirmPayment(sessionId: string, paymentData?: ProtocolPaymentData): Promise<ProtocolPaymentResult> {\n const res = await this._post<ProtocolPaymentResult>(`/sessions/${sessionId}/confirm`, paymentData as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get session status. */\n async getSession(sessionId: string): Promise<ProtocolSession> {\n const res = await this._get<ProtocolSession>(`/sessions/${sessionId}`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Mandates Resource (Instruction-Level Mandates)\n// ---------------------------------------------------------------------------\n// Phase 2: Create, retrieve, list, and revoke instruction-level mandates.\n// Mandates encode user purchase intent constraints and are enforced at the\n// infrastructure level — category restrictions, merchant allow/blocklists,\n// amount caps, and attribute requirements.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n InstructionMandate,\n MandateBudgetStatus,\n CreateMandateParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Mandates extends Resource {\n protected get basePath(): string {\n return '/agent/mandate';\n }\n\n /** Create a new instruction-level mandate. */\n async create(params: CreateMandateParams): Promise<InstructionMandate> {\n const res = await this._post<InstructionMandate>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get a mandate by ID. */\n async get(mandateId: string): Promise<InstructionMandate> {\n const res = await this._get<InstructionMandate>(`/${mandateId}`);\n return res.data;\n }\n\n /** List mandates with optional filters and pagination. */\n async list(params?: {\n walletId?: string;\n status?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<InstructionMandate>> {\n return this._list<InstructionMandate>('', params);\n }\n\n /** Get budget status for a mandate. */\n async getBudget(mandateId: string): Promise<MandateBudgetStatus> {\n const res = await this._get<MandateBudgetStatus>(`/${mandateId}/budget`);\n return res.data;\n }\n\n /** Revoke an active mandate. */\n async revoke(mandateId: string): Promise<InstructionMandate> {\n const res = await this._post<InstructionMandate>(`/${mandateId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Delegations Resource\n// ---------------------------------------------------------------------------\n// Phase 3C: Delegate mandate authority from parent to child agents.\n// Supports creation, retrieval, listing, and revocation of delegations.\n// ---------------------------------------------------------------------------\n\nimport { Resource } from './base.js';\nimport type {\n Delegation,\n CreateDelegationParams,\n PaginatedResponse,\n} from '../types.js';\n\nexport class Delegations extends Resource {\n protected get basePath(): string {\n return '/agent/delegation';\n }\n\n /** Create a delegation from parent agent to child agent for a mandate. */\n async create(params: CreateDelegationParams): Promise<Delegation> {\n const res = await this._post<Delegation>('', params as unknown as Record<string, unknown>);\n return res.data;\n }\n\n /** Get a delegation by ID. */\n async get(delegationId: string): Promise<Delegation> {\n const res = await this._get<Delegation>(`/${delegationId}`);\n return res.data;\n }\n\n /** List delegations with optional filters. */\n async list(params?: {\n agentId?: string;\n mandateId?: string;\n limit?: number;\n offset?: number;\n }): Promise<PaginatedResponse<Delegation>> {\n return this._list<Delegation>('', params);\n }\n\n /** Revoke a delegation (cascades to child delegations). */\n async revoke(delegationId: string): Promise<Delegation> {\n const res = await this._post<Delegation>(`/${delegationId}/revoke`);\n return res.data;\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Main Class\n// ---------------------------------------------------------------------------\n// This is the primary entry point for the SDK. It composes all resources\n// and provides a clean, Stripe-like interface:\n//\n// const lane = new Lane({ apiKey: 'lane_sk_...' })\n// const wallet = await lane.wallets.create({ userId: 'u1' })\n// const txn = await lane.pay.execute({ ... })\n// ---------------------------------------------------------------------------\n\nimport { LaneClient } from './client.js';\nimport { resolveConfig } from './config.js';\nimport { Auth } from './resources/auth.js';\nimport { Wallets } from './resources/wallets.js';\nimport { Pay } from './resources/pay.js';\nimport { Products } from './resources/products.js';\nimport { Checkout } from './resources/checkout.js';\nimport { Sell } from './resources/sell.js';\nimport { Admin } from './resources/admin.js';\nimport { Webhooks } from './resources/webhooks.js';\nimport { VIC } from './resources/vic.js';\nimport { Metering } from './resources/metering.js';\nimport { Payouts } from './resources/payouts.js';\nimport { Teams } from './resources/teams.js';\nimport { Agents } from './resources/agents.js';\nimport { Audit } from './resources/audit.js';\nimport { Identity } from './resources/identity.js';\nimport { Subscriptions } from './resources/subscriptions.js';\nimport { Merchants } from './resources/merchants.js';\nimport { Cards } from './resources/cards.js';\nimport { Instructions } from './resources/instructions.js';\nimport { Tokens } from './resources/tokens.js';\nimport { Transactions } from './resources/transactions.js';\nimport { Budgets } from './resources/budgets.js';\nimport { Users } from './resources/users.js';\nimport { Fleet } from './resources/fleet.js';\nimport { Protocol } from './resources/protocol.js';\nimport { Mandates } from './resources/mandates.js';\nimport { Delegations } from './resources/delegations.js';\nimport type { LaneConfig, ResolvedConfig, TokenStore } from './types.js';\n\n/**\n * Lane SDK client.\n *\n * Provides access to all Lane API resources through a composable,\n * object-oriented interface. Resources are lazily initialized on first access.\n *\n * @example\n * ```typescript\n * import Lane from 'lane'\n *\n * const lane = await Lane.create({ apiKey: process.env.LANE_KEY })\n *\n * const wallet = await lane.wallets.create({ userId: 'user_123' })\n * const products = await lane.products.search({ query: 'API credits' })\n * const txn = await lane.pay.execute({ recipient: 'replicate.com', amount: 20 })\n * ```\n */\nexport class Lane {\n private readonly client: LaneClient;\n /** Sell-side client — calls lane-repo (api.getonlane.com) for merchants, products, checkout. */\n private readonly _apiClient: LaneClient;\n private readonly _config: ResolvedConfig;\n\n // Lazily initialized resources\n private _auth?: Auth;\n private _wallets?: Wallets;\n private _pay?: Pay;\n private _products?: Products;\n private _checkout?: Checkout;\n private _sell?: Sell;\n private _admin?: Admin;\n private _webhooks?: Webhooks;\n private _vic?: VIC;\n private _metering?: Metering;\n private _payouts?: Payouts;\n private _teams?: Teams;\n private _agents?: Agents;\n private _audit?: Audit;\n private _identity?: Identity;\n private _subscriptions?: Subscriptions;\n private _merchants?: Merchants;\n private _cards?: Cards;\n private _instructions?: Instructions;\n private _tokens?: Tokens;\n private _transactions?: Transactions;\n private _budget?: Budgets;\n private _users?: Users;\n private _fleet?: Fleet;\n private _protocol?: Protocol;\n private _mandates?: Mandates;\n private _delegations?: Delegations;\n\n /**\n * Private constructor — use `Lane.create()` for async config resolution,\n * or `new Lane(resolvedConfig)` if you've already resolved config.\n */\n private constructor(config: ResolvedConfig) {\n this._config = config;\n this.client = new LaneClient(config);\n // Sell-side client uses apiUrl (lane-repo) instead of baseUrl (SDK server)\n this._apiClient = config.apiUrl !== config.baseUrl\n ? new LaneClient({ ...config, baseUrl: config.apiUrl })\n : this.client;\n }\n\n private static _throwWaitlistError(): never {\n throw new Error(\n '\\n\\n' +\n '╔══════════════════════════════════════════════════════════╗\\n' +\n '║ ║\\n' +\n '║ Lane SDK — Coming Soon ║\\n' +\n '║ ║\\n' +\n '║ The Lane SDK is not yet available for public use. ║\\n' +\n '║ Join the waitlist: https://app.getonlane.com/agents ║\\n' +\n '║ ║\\n' +\n '╚══════════════════════════════════════════════════════════╝\\n'\n );\n }\n\n /**\n * Verify SDK access with the Lane server.\n * The server checks `developers.sdk_access` in Supabase.\n * Whitelisted developers pass; everyone else gets the waitlist error.\n */\n private static async _verifyAccess(config: ResolvedConfig): Promise<void> {\n try {\n const res = await fetch(`${config.baseUrl}/agent/auth/verify-sdk-access`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n },\n signal: AbortSignal.timeout(config.timeout),\n });\n\n if (res.status === 403) {\n Lane._throwWaitlistError();\n }\n\n // 401 = bad key, let it through — LaneClient will throw a proper auth error later\n // 200 = whitelisted, good to go\n // Network error / 5xx = let them through (fail open for connectivity issues)\n } catch (err) {\n // If it's our waitlist error, re-throw it\n if (err instanceof Error && err.message.includes('Coming Soon')) {\n throw err;\n }\n // Network errors / timeouts: fail open so SDK works offline in dev\n }\n }\n\n /**\n * Create a new Lane SDK instance with async config resolution.\n *\n * Resolves API key from: constructor > env var > credentials file.\n * Gated by server-side whitelist — only developers with `sdk_access = true`\n * in Supabase can proceed.\n */\n static async create(options: LaneConfig = {}): Promise<Lane> {\n let config;\n try {\n config = await resolveConfig(options);\n } catch {\n Lane._throwWaitlistError();\n }\n\n // Skip access verification in demo mode — demo server has no waitlist gate\n if (process.env['LANE_DEMO'] !== 'true') {\n await Lane._verifyAccess(config);\n }\n return new Lane(config);\n }\n\n /**\n * Create a Lane SDK instance with explicit apiKey.\n *\n * Gated by server-side whitelist. Use `await Lane.create()` for async\n * config resolution, or this method when you already have the key.\n *\n * Note: This is async because it verifies SDK access with the server.\n */\n static async fromApiKey(apiKey: string, options: Omit<LaneConfig, 'apiKey'> = {}): Promise<Lane> {\n const baseUrl = options.baseUrl ?? 'https://api.getonlane.com';\n const config = Object.freeze({\n apiKey,\n baseUrl,\n apiUrl: options.apiUrl ?? process.env['LANE_API_URL'] ?? baseUrl,\n testMode: options.testMode ?? apiKey.startsWith('lane_sk_test_'),\n timeout: options.timeout ?? 30_000,\n maxRetries: options.maxRetries ?? 2,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n });\n\n await Lane._verifyAccess(config);\n return new Lane(config);\n }\n\n /** @internal — For SDK tests only. Bypasses the waitlist gate. */\n static _unsafeCreate(apiKey: string, options: Omit<LaneConfig, 'apiKey'> = {}): Lane {\n const baseUrl = options.baseUrl ?? 'https://api.getonlane.com';\n return new Lane(Object.freeze({\n apiKey,\n baseUrl,\n apiUrl: options.apiUrl ?? process.env['LANE_API_URL'] ?? 'https://api.getonlane.com',\n testMode: options.testMode ?? apiKey.startsWith('lane_sk_test_'),\n timeout: options.timeout ?? 30_000,\n maxRetries: options.maxRetries ?? 2,\n circuitBreaker: options.circuitBreaker ? Object.freeze({\n failureThreshold: options.circuitBreaker.failureThreshold ?? 3,\n resetTimeoutMs: options.circuitBreaker.resetTimeoutMs ?? 30_000,\n }) : undefined,\n }));\n }\n\n // -------------------------------------------------------------------------\n // Resource Accessors (lazy initialization)\n // -------------------------------------------------------------------------\n\n /** Authentication — login, whoami, key rotation. */\n get auth(): Auth {\n return (this._auth ??= new Auth(this.client));\n }\n\n /** Wallets — create, list cards, add card, revoke. */\n get wallets(): Wallets {\n return (this._wallets ??= new Wallets(this.client));\n }\n\n /** Pay — agentic tokens, payment execution, refunds. */\n get pay(): Pay {\n return (this._pay ??= new Pay(this.client));\n }\n\n /** Products — search catalog, list merchants. */\n /** Products — search the Lane marketplace catalog (calls lane-repo). */\n get products(): Products {\n return (this._products ??= new Products(this._apiClient));\n }\n\n /** Checkout — create and complete checkout sessions. */\n /** Checkout — create and complete checkout sessions (calls lane-repo). */\n get checkout(): Checkout {\n return (this._checkout ??= new Checkout(this._apiClient));\n }\n\n /** Sell — list products for sale, analytics (Make-a-SaaS). */\n get sell(): Sell {\n return (this._sell ??= new Sell(this.client));\n }\n\n /** Admin — spending, budgets, team management, GDPR. */\n get admin(): Admin {\n return (this._admin ??= new Admin(this.client));\n }\n\n /** Webhooks — register, verify, manage webhook endpoints. */\n get webhooks(): Webhooks {\n return (this._webhooks ??= new Webhooks(this.client));\n }\n\n /** VIC — Visa Intelligent Commerce agentic tokens (Phase 2). */\n get vic(): VIC {\n return (this._vic ??= new VIC(this.client));\n }\n\n /** Metering — usage tracking for Make-a-SaaS sellers (Phase 4). */\n get metering(): Metering {\n return (this._metering ??= new Metering(this.client));\n }\n\n /** Payouts — seller disbursements (Phase 4). */\n get payouts(): Payouts {\n return (this._payouts ??= new Payouts(this.client));\n }\n\n /** Teams — team management with hierarchical budgets (Phase 5). */\n get teams(): Teams {\n return (this._teams ??= new Teams(this.client));\n }\n\n /** Agents — fleet management with per-agent policies (Phase 5). */\n get agents(): Agents {\n return (this._agents ??= new Agents(this.client));\n }\n\n /** Audit — immutable audit trail for SOC 2 compliance (Phase 5). */\n get audit(): Audit {\n return (this._audit ??= new Audit(this.client));\n }\n\n /** Identity — agent identity and KYC chain (Phase 6). */\n get identity(): Identity {\n return (this._identity ??= new Identity(this.client));\n }\n\n /** Subscriptions — manage software subscriptions (SCP). */\n get subscriptions(): Subscriptions {\n return (this._subscriptions ??= new Subscriptions(this.client));\n }\n\n /** Merchants — discover and search the merchant directory. */\n /** Merchants — discover Lane-onboarded merchants (calls lane-repo). */\n get merchants(): Merchants {\n return (this._merchants ??= new Merchants(this._apiClient));\n }\n\n /** Cards — list, get, delete, add-link. */\n get cards(): Cards {\n return (this._cards ??= new Cards(this.client));\n }\n\n /** Instructions — VIC instruction lifecycle. */\n get instructions(): Instructions {\n return (this._instructions ??= new Instructions(this.client));\n }\n\n /** Tokens — provision, suspend, reactivate, delete. */\n get tokens(): Tokens {\n return (this._tokens ??= new Tokens(this.client));\n }\n\n /** Transactions — list, get, refund. */\n get transactions(): Transactions {\n return (this._transactions ??= new Transactions(this.client));\n }\n\n /** Budget — get, set, spending. */\n get budget(): Budgets {\n return (this._budget ??= new Budgets(this.client));\n }\n\n /** Users — create, list, get, update, delete, session. */\n get users(): Users {\n return (this._users ??= new Users(this.client));\n }\n\n /** Fleet — agent fleet management (replaces agents). */\n get fleet(): Fleet {\n return (this._fleet ??= new Fleet(this.client));\n }\n\n /** Protocol — multi-protocol payment sessions (SCP). */\n get protocol(): Protocol {\n return (this._protocol ??= new Protocol(this.client));\n }\n\n /** Mandates — spending mandates and constraints. */\n get mandates(): Mandates {\n return (this._mandates ??= new Mandates(this.client));\n }\n\n /** Delegations — agent-to-agent delegation chains. */\n get delegations(): Delegations {\n return (this._delegations ??= new Delegations(this.client));\n }\n\n // -------------------------------------------------------------------------\n // Observability\n // -------------------------------------------------------------------------\n\n /** Subscribe to SDK events (request, response, error, retry). */\n on(\n event: 'request' | 'response' | 'error' | 'retry',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (...args: any[]) => void,\n ): this {\n this.client.on(event, listener);\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Metadata\n // -------------------------------------------------------------------------\n\n /** Whether this instance is operating in test mode. */\n get testMode(): boolean {\n return this._config.testMode;\n }\n\n /** The resolved base URL. */\n get baseUrl(): string {\n return this._config.baseUrl;\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition, type ToolResult } from '../tool.js';\nimport { LaneError } from '../../errors.js';\nimport { Lane } from '../../lane.js';\n\nconst inputSchema = z.object({\n apiKey: z.string().optional().describe('Your Lane API key (starts with lane_sk_).'),\n sessionId: z.string().optional().describe('Session ID from lane_signup to poll for completion.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\n/**\n * Pre-auth tool that accepts an API key or session ID and triggers SDK reinitialization.\n *\n * Supports two flows:\n * 1. Direct API key — validates format, creates Lane instance, calls onConnect.\n * 2. Session polling — polls the onboarding API until the session is ready.\n */\nexport class LaneConnectTool extends LaneTool<Input> {\n private readonly onConnect: (lane: Lane) => Promise<void>;\n private readonly baseUrl: string;\n private static readonly MAX_POLL_ATTEMPTS = 60;\n private static readonly POLL_INTERVAL_MS = 3000;\n\n constructor(\n lane: Lane | null,\n onConnect: (lane: Lane) => Promise<void>,\n options?: { baseUrl?: string },\n ) {\n super(lane);\n this.onConnect = onConnect;\n this.baseUrl = options?.baseUrl ?? 'https://api.getonlane.com';\n }\n\n get definition(): ToolDefinition {\n return {\n name: 'lane_connect',\n description:\n 'Authenticate this MCP session with a Lane API key or by polling a signup session. ' +\n 'After connecting, all Lane payment tools become available. ' +\n 'Call lane_signup first if the user does not have an API key. ' +\n 'No authentication required.',\n inputSchema,\n requiresAuth: false,\n };\n }\n\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Require at least one input\n if (!input.apiKey && !input.sessionId) {\n throw new LaneError('Either apiKey or sessionId is required.', {\n code: 'missing_input',\n statusCode: 400,\n suggestedAction: 'Provide an API key (starts with lane_sk_) or a sessionId from lane_signup.',\n });\n }\n\n // Direct API key flow\n if (input.apiKey) {\n return this.connectWithApiKey(input.apiKey);\n }\n\n // Session polling flow\n return this.pollSession(input.sessionId!);\n }\n\n private async connectWithApiKey(apiKey: string): Promise<unknown> {\n // Validate API key format\n if (!apiKey.startsWith('lane_sk_')) {\n throw new LaneError('Invalid API key format. Lane API keys start with lane_sk_.', {\n code: 'invalid_api_key_format',\n statusCode: 400,\n suggestedAction: 'Check your API key. Valid keys start with lane_sk_.',\n });\n }\n\n // If already connected, return profile\n if (this.lane) {\n const profile = await this.lane.auth.whoami();\n return {\n status: 'already_connected',\n profile,\n };\n }\n\n // Create Lane instance and call onConnect\n const laneInstance = await Lane.fromApiKey(apiKey);\n await this.onConnect(laneInstance);\n\n const profile = await laneInstance.auth.whoami();\n\n return {\n status: 'connected',\n message: 'Successfully authenticated with Lane. All payment tools are now available.',\n profile,\n };\n }\n\n private async pollSession(sessionId: string): Promise<unknown> {\n for (let attempt = 0; attempt < LaneConnectTool.MAX_POLL_ATTEMPTS; attempt++) {\n try {\n const response = await fetch(\n `${this.baseUrl}/agent/onboarding/sessions/${sessionId}`,\n );\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new LaneError('Session not found.', {\n code: 'session_not_found',\n statusCode: 404,\n suggestedAction: 'Call lane_signup to create a new session.',\n });\n }\n // Non-404 errors — continue polling\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n continue;\n }\n\n const data = await response.json() as { status: string; apiKey?: string };\n\n if (data.status === 'ready' && data.apiKey) {\n // Session completed — connect with the API key\n const laneInstance = await Lane.fromApiKey(data.apiKey);\n await this.onConnect(laneInstance);\n\n const profile = await laneInstance.auth.whoami();\n\n return {\n status: 'connected',\n message: 'Successfully authenticated with Lane. All payment tools are now available.',\n profile,\n };\n }\n\n // Not ready yet — wait and try again\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n } catch (err) {\n if (err instanceof LaneError) throw err;\n // Network errors, JSON parse errors — continue polling\n await this.sleep(LaneConnectTool.POLL_INTERVAL_MS);\n }\n }\n\n // Exhausted all attempts\n throw new LaneError('Session polling timed out.', {\n code: 'session_timeout',\n statusCode: 408,\n suggestedAction: 'The signup session timed out. Call lane_signup to create a new session.',\n });\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n walletId: z\n .string()\n .optional()\n .describe('Wallet to add the card to. If omitted, uses the default wallet (creates one if needed).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\n/**\n * Post-auth tool that returns a VGS Collect URL for securely adding a payment card.\n */\nexport class LaneAddCardTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'lane_add_card',\n description:\n 'Get a secure link for the user to add a payment card to their Lane wallet. ' +\n 'The link opens a PCI-compliant VGS Collect form — the agent never sees raw card numbers. ' +\n 'Show this URL to the user so they can enter their card details in a browser.',\n inputSchema,\n requiresAuth: true,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n let walletId = input.walletId;\n\n if (!walletId) {\n // Try to find an existing wallet\n const wallets = await lane.wallets.list();\n if (wallets.data.length > 0) {\n walletId = wallets.data[0]!.id;\n } else {\n // Create a default wallet\n const wallet = await lane.wallets.create({ label: 'default' });\n walletId = wallet.id;\n }\n }\n\n const { url, expiresAt } = await lane.wallets.getAddCardLink(walletId);\n\n return {\n cardEntryUrl: url,\n walletId,\n expiresAt,\n instructions: [\n 'Show this URL to the user — they need to open it in a browser to add their card.',\n 'The form is hosted by VGS (Very Good Security) and is PCI DSS compliant.',\n 'After adding a card, the user can start making payments with Lane.',\n ],\n security: {\n pciCompliant: true,\n hostedBy: 'VGS (Very Good Security)',\n agentCardAccess: 'none — agents never see or handle raw card numbers',\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class WhoamiTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'whoami',\n description: 'Get the authenticated developer profile. Returns email, plan, and member since date.',\n inputSchema: z.object({}),\n };\n }\n\n protected async run(): Promise<unknown> {\n return this.getLane().auth.whoami();\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n walletId: z.string().optional().describe('Wallet ID. Uses default wallet if not provided.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListCardsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_cards',\n description:\n 'List available payment cards. Returns last4 and brand only — never full card numbers. ' +\n 'Use this to check what payment methods are available before making a purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await this.getLane().wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return { cards: [], message: 'No wallets found. Ask the developer to run `lane add-card`.' };\n }\n walletId = wallets.data[0]!.id;\n }\n const cards = await this.getLane().wallets.listCards(walletId);\n return { cards };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n cardId: z.string().optional().describe('Specific card ID to check balance for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CheckBalanceTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'check_balance',\n description:\n 'Check remaining spending budget and limits. Returns daily limit, weekly limit, ' +\n 'monthly limit, per-task limit, and how much has been spent today. ' +\n 'Always check balance before making a payment to avoid exceeding limits.',\n inputSchema,\n };\n }\n\n protected async run(_input: Input): Promise<unknown> {\n const lane = this.getLane();\n const [budget, spending] = await Promise.all([\n lane.admin.getBudget(),\n lane.admin.spending({ period: '1d' }),\n ]);\n\n return {\n spentToday: spending.total,\n currency: spending.currency,\n limits: {\n daily: budget.dailyLimit ?? null,\n weekly: budget.weeklyLimit ?? null,\n monthly: budget.monthlyLimit ?? null,\n perTask: budget.perTaskLimit ?? null,\n confirmationThreshold: budget.confirmationThreshold ?? null,\n },\n remaining: budget.dailyLimit\n ? { daily: budget.dailyLimit - spending.total }\n : null,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Biometric Verification (4-tier fallback chain)\n// ---------------------------------------------------------------------------\n// 1. Touch ID via optional `node-mac-auth` dependency (dynamic import)\n// 2. macOS system password via `osascript`\n// 3. Browser WebAuthn passkey via ephemeral port server\n// 4. Interactive CLI PIN via readline\n// ---------------------------------------------------------------------------\n\nexport type BiometricMethod = 'touchid' | 'system_password' | 'webauthn_passkey' | 'pin';\n\nexport interface BiometricOptions {\n reuseWindowSeconds?: number;\n skipMethods?: BiometricMethod[];\n instructionId?: string;\n}\n\nexport interface BiometricProof {\n method: BiometricMethod;\n timestamp: string;\n machineId?: string;\n}\n\ninterface CachedProof {\n proof: BiometricProof;\n expiresAt: number;\n}\n\nconst DEFAULT_REUSE_WINDOW_SECONDS = 60; // 1 minute\n\nexport class BiometricVerifier {\n private cache = new Map<string, CachedProof>();\n\n /** Always true — at minimum, PIN fallback is available. */\n canVerify(): boolean {\n return true;\n }\n\n /**\n * Verify the user's identity using the 4-tier fallback chain.\n * Returns a proof on success; throws on failure.\n */\n async verify(reason: string, opts?: BiometricOptions): Promise<BiometricProof> {\n const reuseWindow = opts?.reuseWindowSeconds ?? DEFAULT_REUSE_WINDOW_SECONDS;\n const skip = new Set(opts?.skipMethods ?? []);\n\n // Check reuse cache\n const cacheKey = 'default';\n const cached = this.cache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.proof;\n }\n\n const methods: { method: BiometricMethod; fn: () => Promise<BiometricProof> }[] = [\n { method: 'touchid', fn: () => this.tryTouchID(reason) },\n { method: 'system_password', fn: () => this.trySystemPassword(reason) },\n { method: 'webauthn_passkey', fn: () => this.tryWebAuthn(reason, opts?.instructionId) },\n { method: 'pin', fn: () => this.tryPIN(reason) },\n ];\n\n let lastError: Error | undefined;\n\n for (const { method, fn } of methods) {\n if (skip.has(method)) continue;\n try {\n const proof = await fn();\n // Cache the proof\n this.cache.set(cacheKey, {\n proof,\n expiresAt: Date.now() + reuseWindow * 1000,\n });\n return proof;\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n // Fall through to next method\n }\n }\n\n throw lastError ?? new Error('All biometric verification methods failed');\n }\n\n /** Clear the reuse cache (e.g. on logout). */\n clearCache(): void {\n this.cache.clear();\n }\n\n // ---------------------------------------------------------------------------\n // Tier 1: Touch ID (macOS only, requires optional `node-mac-auth`)\n // ---------------------------------------------------------------------------\n\n private async tryTouchID(reason: string): Promise<BiometricProof> {\n // Dynamic string prevents bundlers from resolving this optional dependency at build time\n const moduleName = 'node-mac-auth';\n const { canPromptTouchID, promptTouchID } = await import(/* @vite-ignore */ moduleName);\n if (!canPromptTouchID()) throw new Error('Touch ID unavailable');\n await promptTouchID({ reason });\n return { method: 'touchid', timestamp: new Date().toISOString() };\n }\n\n // ---------------------------------------------------------------------------\n // Tier 2: macOS system password dialog via osascript\n // ---------------------------------------------------------------------------\n\n private async trySystemPassword(reason: string): Promise<BiometricProof> {\n const { execFile } = await import('node:child_process');\n const { promisify } = await import('node:util');\n const exec = promisify(execFile);\n await exec('osascript', [\n '-e',\n `display dialog \"${reason}\" with title \"Lane Payment Verification\" with hidden answer default answer \"\"`,\n ]);\n return { method: 'system_password', timestamp: new Date().toISOString() };\n }\n\n // ---------------------------------------------------------------------------\n // Tier 3: Browser WebAuthn passkey via ephemeral local server\n // ---------------------------------------------------------------------------\n\n private async tryWebAuthn(reason: string, instructionId?: string): Promise<BiometricProof> {\n const { createServer } = await import('node:http');\n const open = (await import('open')).default;\n const { hostname } = await import('node:os');\n\n return new Promise<BiometricProof>((resolve, reject) => {\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n if (url.pathname === '/callback') {\n const verified = url.searchParams.get('verified');\n if (verified === 'true') {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n '<!DOCTYPE html><html><body style=\"font-family:sans-serif;display:flex;justify-content:center;align-items:center;height:100vh\"><h1 style=\"color:#10b981\">Verified</h1></body></html>',\n );\n cleanup();\n resolve({\n method: 'webauthn_passkey',\n timestamp: new Date().toISOString(),\n machineId: `webauthn_${hostname()}`,\n });\n return;\n }\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n '<!DOCTYPE html><html><body style=\"font-family:sans-serif;display:flex;justify-content:center;align-items:center;height:100vh\"><h1 style=\"color:#ef4444\">Verification Failed</h1></body></html>',\n );\n cleanup();\n reject(new Error('WebAuthn verification failed'));\n return;\n }\n res.writeHead(404);\n res.end();\n });\n\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error('WebAuthn timed out'));\n }, 120_000);\n\n function cleanup() {\n clearTimeout(timeout);\n server.close();\n }\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n if (!addr || typeof addr === 'string') {\n reject(new Error('Failed to start server'));\n return;\n }\n const port = (addr as { port: number }).port;\n const verifyUrl = `https://agent.getonlane.com/verify?callbackPort=${port}${instructionId ? `&instructionId=${instructionId}` : ''}`;\n process.stderr.write(`\\nOpen this URL to verify: ${verifyUrl}\\n\\n`);\n open(verifyUrl).catch(() => {});\n });\n\n server.on('error', (err) => {\n cleanup();\n reject(err);\n });\n });\n }\n\n // ---------------------------------------------------------------------------\n // Tier 4: Interactive CLI PIN (always available)\n // ---------------------------------------------------------------------------\n\n private async tryPIN(reason: string): Promise<BiometricProof> {\n const { createInterface } = await import('node:readline');\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n\n return new Promise<BiometricProof>((resolve, reject) => {\n process.stderr.write(`\\n${reason}\\n`);\n rl.question('Enter PIN: ', (answer) => {\n rl.close();\n if (!answer || answer.length < 4) {\n reject(new Error('PIN verification cancelled or too short'));\n return;\n }\n resolve({ method: 'pin', timestamp: new Date().toISOString() });\n });\n });\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane SDK — Biometric Confirmation for Agent Instructions\n// ---------------------------------------------------------------------------\n\nimport type { Lane } from '../lane.js';\nimport { BiometricVerifier, type BiometricOptions } from './biometric.js';\nimport { LaneConfirmationError } from '../errors.js';\n\nconst DEFAULT_REUSE_WINDOW_SECONDS = 60;\n\nconst verifier = new BiometricVerifier();\n\nexport interface InstructionConfirmation {\n id: string;\n instructionId: string;\n method: string;\n timestamp: string;\n}\n\nexport async function requireBiometricConfirmation(\n lane: Lane,\n instructionId: string,\n opts: { amount?: number; merchant?: string; reuseWindowSeconds?: number } = {},\n): Promise<InstructionConfirmation> {\n const reuseWindow = opts.reuseWindowSeconds ?? DEFAULT_REUSE_WINDOW_SECONDS;\n const cutoff = new Date(Date.now() - reuseWindow * 1000).toISOString();\n\n // Check for existing valid biometric confirmation\n try {\n const confirmations = await lane.instructions.listConfirmations(instructionId);\n const valid = confirmations.find(\n (c) => c.confirmationType === 'biometric' && c.createdAt > cutoff,\n );\n if (valid) {\n const method = typeof valid.details === 'object' && valid.details !== null && typeof (valid.details as Record<string, unknown>).method === 'string'\n ? (valid.details as Record<string, unknown>).method as string\n : 'unknown';\n return {\n id: valid.id,\n instructionId,\n method,\n timestamp: valid.createdAt,\n };\n }\n } catch (err) {\n // Log warning but continue — will re-prompt biometric\n process.stderr.write(`[lane] warning: failed to check existing confirmations: ${err instanceof Error ? err.message : String(err)}\\n`);\n }\n\n // Build human-readable reason string\n const parts = ['Lane: Authorize'];\n if (opts.amount !== undefined) {\n parts.push(`$${(opts.amount / 100).toFixed(2)}`);\n }\n parts.push('payment');\n if (opts.merchant) {\n parts.push(`to ${opts.merchant}`);\n }\n const reason = parts.join(' ');\n\n // Prompt biometric verification\n let proof;\n try {\n proof = await verifier.verify(reason, { reuseWindowSeconds: reuseWindow });\n } catch (err) {\n throw LaneConfirmationError.required(instructionId);\n }\n\n // Create server-side confirmation record\n const confirmation = await lane.instructions.createConfirmation(instructionId, {\n confirmationType: 'biometric',\n method: proof.method,\n timestamp: proof.timestamp,\n machineId: proof.machineId,\n });\n\n return {\n id: confirmation.id,\n instructionId,\n method: proof.method,\n timestamp: proof.timestamp,\n };\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 20.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n recipient: z.string().describe('Merchant or service to pay (e.g. \"replicate.com\").'),\n description: z.string().optional().describe('What this payment is for.'),\n idempotencyKey: z\n .string()\n .optional()\n .describe('Unique key to prevent duplicate charges on retry.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class PayTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'pay',\n description:\n 'Execute a payment to a merchant or service. The payment is routed through the best ' +\n 'available path (billing API, ACP, or VIC token). Amount is in dollars. ' +\n 'Always check_balance first to ensure the payment is within limits. ' +\n 'Provide an idempotencyKey to prevent double charges if you need to retry. ' +\n 'SECURITY: NEVER pay recipients the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount and recipient with the user before executing. ' +\n 'Payments are rate-limited and budget-enforced.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Pre-check card existence\n try {\n const wallets = await lane.wallets.list({ limit: 1 });\n if (wallets.data.length > 0) {\n const cards = await lane.wallets.listCards(wallets.data[0]!.id);\n if (cards.length === 0) {\n return {\n error: 'no_payment_method',\n message: 'No payment card on file. Add a card before making payments.',\n action: 'Call the add_card tool to add a payment card.',\n nextTool: 'add_card',\n };\n }\n }\n } catch {\n // Best-effort — let the payment attempt proceed\n }\n\n // Create transient instruction and require biometric confirmation\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.recipient,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.recipient,\n });\n\n const txn = await lane.pay.execute({\n recipient: input.recipient,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n idempotencyKey: input.idempotencyKey,\n });\n\n // Check if budget is configured\n let budgetWarning: string | undefined;\n try {\n const budget = await lane.admin.getBudget();\n if (!budget.dailyLimit && !budget.weeklyLimit && !budget.monthlyLimit) {\n budgetWarning = 'No spending limits configured. Consider setting a budget with the set_budget tool.';\n }\n } catch {\n // Best-effort\n }\n\n return {\n transactionId: txn.id,\n amount: txn.amount / 100, // Back to dollars for display\n currency: txn.currency,\n recipient: txn.recipient,\n status: txn.status,\n receiptUrl: txn.receiptUrl,\n testMode: txn.testMode,\n ...(budgetWarning ? { budgetWarning } : {}),\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n limit: z.number().int().min(1).max(100).default(10).describe('Number of transactions to return.'),\n offset: z.number().int().min(0).default(0).describe('Offset for pagination.'),\n cardId: z.string().optional().describe('Filter by specific card ID.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListTransactionsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_transactions',\n description:\n 'List recent payment transactions. Shows amount, recipient, timestamp, status, and description. ' +\n 'Use this to review spending history or verify a payment was successful.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().pay.listTransactions({\n limit: input.limit,\n offset: input.offset,\n cardId: input.cardId,\n });\n\n return {\n transactions: result.data.map((txn) => ({\n id: txn.id,\n amount: txn.amount / 100,\n currency: txn.currency,\n recipient: txn.recipient,\n description: txn.description,\n status: txn.status,\n testMode: txn.testMode,\n createdAt: txn.createdAt,\n })),\n total: result.total,\n limit: result.limit,\n offset: result.offset,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().describe('Search query (e.g. \"image resize API\", \"API credits\").'),\n type: z\n .enum(['skill', 'api', 'saas', 'opensource'])\n .optional()\n .describe('Filter by product type.'),\n limit: z.number().int().min(1).max(50).default(10).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SearchProductsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'search_products',\n description:\n 'Search the Lane product catalog for APIs, skills, SaaS, and open source tools. ' +\n 'Returns product name, description, pricing, and seller info. ' +\n 'Use this to find services the agent can purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().products.search({\n query: input.query,\n type: input.type,\n limit: input.limit,\n });\n\n return {\n products: result.data.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n type: p.type,\n pricing: p.pricing,\n rating: p.rating,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n productId: z.string().describe('Product ID from search_products results.'),\n walletId: z.string().optional().describe('Wallet ID. Uses default if not provided.'),\n quantity: z.number().int().min(1).default(1).describe('Quantity to purchase.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CheckoutTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'checkout',\n description:\n 'Purchase a product from the Lane catalog. Creates a checkout session and completes ' +\n 'payment in one step. Returns the order details including any API keys or endpoints. ' +\n 'Use search_products first to find the product ID.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await this.getLane().wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return {\n error: 'no_wallet',\n message: 'No wallet found. Ask the developer to run `lane add-card` first.',\n };\n }\n walletId = wallets.data[0]!.id;\n }\n\n // Create and immediately complete checkout\n const lane = this.getLane();\n const session = await lane.checkout.create({\n productId: input.productId,\n walletId,\n quantity: input.quantity,\n });\n\n const order = await lane.checkout.complete(session.id);\n\n return {\n orderId: order.id,\n productId: order.productId,\n amount: order.amount / 100,\n currency: order.currency,\n status: order.status,\n apiKey: order.apiKey,\n endpoint: order.endpoint,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n daily: z.number().positive().max(10000).optional().describe('Daily spending limit in dollars (max $10,000).'),\n weekly: z.number().positive().max(50000).optional().describe('Weekly spending limit in dollars (max $50,000).'),\n monthly: z.number().positive().max(200000).optional().describe('Monthly spending limit in dollars (max $200,000).'),\n perTask: z.number().positive().max(5000).optional().describe('Per-task spending limit in dollars (max $5,000).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SetBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'set_budget',\n description:\n 'Set spending limits for agent payments. Amounts are in dollars. ' +\n 'Only the authenticated developer can change these limits. ' +\n 'The agent cannot exceed these limits when using the pay tool. ' +\n 'SECURITY: Only change limits when the user has EXPLICITLY requested it. ' +\n 'Budget changes are logged and audited. Hard caps: daily $10k, weekly $50k, monthly $200k, per-task $5k.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const config = await this.getLane().admin.setBudget({\n dailyLimit: input.daily ? Math.round(input.daily * 100) : undefined,\n weeklyLimit: input.weekly ? Math.round(input.weekly * 100) : undefined,\n monthlyLimit: input.monthly ? Math.round(input.monthly * 100) : undefined,\n perTaskLimit: input.perTask ? Math.round(input.perTask * 100) : undefined,\n });\n\n return {\n limits: {\n daily: config.dailyLimit ? config.dailyLimit / 100 : null,\n weekly: config.weeklyLimit ? config.weeklyLimit / 100 : null,\n monthly: config.monthlyLimit ? config.monthlyLimit / 100 : null,\n perTask: config.perTaskLimit ? config.perTaskLimit / 100 : null,\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n transactionId: z.string().describe('Transaction ID to refund.'),\n amount: z.number().positive().optional().describe('Refund amount in dollars. If omitted, full refund.'),\n reason: z.string().optional().describe('Reason for the refund.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class RequestRefundTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'request_refund',\n description:\n 'Request a refund for a previous transaction. Partial or full refunds are supported. ' +\n 'The developer may need to approve refunds above a certain threshold. ' +\n 'Use list_transactions to find the transaction ID. ' +\n 'SECURITY: Refunds are rate-limited (max 10/day). Only refund when the user explicitly requests it. ' +\n 'Cumulative refunds cannot exceed the original transaction amount.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const refund = await this.getLane().pay.refund({\n transactionId: input.transactionId,\n amount: input.amount ? Math.round(input.amount * 100) : undefined,\n reason: input.reason,\n });\n\n return {\n refundId: refund.id,\n transactionId: refund.transactionId,\n amount: refund.amount / 100,\n status: refund.status,\n reason: refund.reason,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n productId: z.string().describe('Product ID to subscribe to.'),\n plan: z.string().describe('Plan ID (e.g. \"pro\", \"starter\").'),\n parameters: z\n .record(z.string(), z.string())\n .optional()\n .describe('SCP selection parameters (e.g. custom_domain, webhook_url).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SubscribeTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'subscribe',\n description:\n 'Subscribe to a software product. Creates a subscription with recurring billing ' +\n 'from the wallet. Returns subscription details including access credentials. ' +\n 'Use search_products first to find the product and plan IDs.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const subscription = await this.getLane().subscriptions.create({\n productId: input.productId,\n plan: input.plan,\n parameters: input.parameters,\n paymentSource: 'wallet',\n });\n\n return {\n subscriptionId: subscription.id,\n productId: subscription.productId,\n plan: subscription.plan,\n status: subscription.status,\n accessToken: subscription.accessToken,\n currentPeriodStart: subscription.currentPeriodStart,\n currentPeriodEnd: subscription.currentPeriodEnd,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n status: z\n .enum(['active', 'paused', 'canceled', 'past_due', 'trialing'])\n .optional()\n .describe('Filter by subscription status.'),\n limit: z.number().int().min(1).max(50).default(20).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListSubscriptionsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_subscriptions',\n description:\n 'List active subscriptions for the current wallet. Returns subscription details ' +\n 'including product ID, plan, status, and billing period. ' +\n 'Use this to check what software products the agent is currently subscribed to.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().subscriptions.list({\n status: input.status,\n limit: input.limit,\n });\n\n return {\n subscriptions: result.data.map((s) => ({\n id: s.id,\n productId: s.productId,\n plan: s.plan,\n status: s.status,\n currentPeriodStart: s.currentPeriodStart,\n currentPeriodEnd: s.currentPeriodEnd,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().describe('Search query (e.g. \"monitoring API\", \"email service\").'),\n type: z\n .enum(['software', 'skill', 'oss'])\n .optional()\n .describe('Filter by software type. Defaults to all software types.'),\n pricingModel: z\n .enum(['fixed', 'subscription', 'consumption'])\n .optional()\n .describe('Filter by pricing model.'),\n limit: z.number().int().min(1).max(50).default(10).describe('Number of results.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class SearchSoftwareTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'search_software',\n description:\n 'Search for software products, SaaS tools, skills, and open source tools in the Lane catalog. ' +\n 'Returns product details including SCP manifests, pricing, and plans. ' +\n 'More targeted than search_products — focuses on software and subscribable products.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Map software-specific types to the product search type\n const typeMap: Record<string, 'skill' | 'api' | 'saas' | 'opensource'> = {\n software: 'saas',\n skill: 'skill',\n oss: 'opensource',\n };\n\n const result = await this.getLane().products.search({\n query: input.query,\n type: input.type ? typeMap[input.type] : undefined,\n limit: input.limit,\n });\n\n return {\n products: result.data.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n type: p.type,\n pricing: p.pricing,\n rating: p.rating,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n subscriptionId: z.string().describe('Subscription ID to cancel.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CancelSubscriptionTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'cancel_subscription',\n description:\n 'Cancel an active subscription. The subscription will remain active until the end ' +\n 'of the current billing period. Use list_subscriptions first to find the subscription ID.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const subscription = await this.getLane().subscriptions.cancel(input.subscriptionId);\n\n return {\n subscriptionId: subscription.id,\n productId: subscription.productId,\n plan: subscription.plan,\n status: subscription.status,\n canceledAt: subscription.canceledAt,\n currentPeriodEnd: subscription.currentPeriodEnd,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// MCP Tool — Discover Merchants\n// ---------------------------------------------------------------------------\n\nimport { z } from 'zod';\nimport { LaneTool } from '../tool.js';\nimport type { ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n query: z.string().optional().describe('Search query to find merchants by name or description.'),\n merchantType: z\n .enum(['ecommerce', 'software', 'api', 'saas', 'skill', 'service'])\n .optional()\n .describe('Filter by merchant type.'),\n vertical: z.string().optional().describe('Filter by vertical (e.g. \"fashion\", \"electronics\", \"developer_tools\").'),\n subcategory: z.string().optional().describe('Filter by subcategory (e.g. \"shoes\", \"laptops\", \"hosting\").'),\n limit: z.number().int().min(1).max(50).optional().default(10).describe('Max results to return (default 10).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class DiscoverMerchantsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'discover_merchants',\n description:\n 'Search the Lane merchant directory to find AI-shoppable merchants. ' +\n 'Filter by type (ecommerce, software, api, saas, skill, service), ' +\n 'vertical (fashion, electronics, developer_tools, etc.), ' +\n 'subcategory (shoes, laptops, hosting, etc.), or free-text query. ' +\n 'Returns merchant name, domain, capabilities, and supported payment methods.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().merchants.list({\n query: input.query,\n merchantType: input.merchantType,\n vertical: input.vertical,\n subcategory: input.subcategory,\n limit: input.limit,\n });\n\n return {\n merchants: result.data.map((m) => ({\n name: m.name,\n slug: m.slug,\n domain: m.domain,\n description: m.description,\n merchantType: m.merchantType,\n vertical: m.vertical,\n subcategories: m.subcategories,\n protocols: m.protocols,\n capabilities: m.capabilities,\n productCount: m.productCount,\n })),\n total: result.total,\n showing: result.data.length,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nexport class LaneOnboardingStatusTool extends LaneTool<Record<string, never>> {\n get definition(): ToolDefinition {\n return {\n name: 'lane_onboarding_status',\n description: 'Check what onboarding steps have been completed. Returns whether the user has an API key, payment card, and budget configured.',\n inputSchema: z.object({}),\n };\n }\n\n protected async run(): Promise<unknown> {\n const lane = this.getLane();\n\n // Check what's been set up\n const [profile, wallets, budget, balanceResult] = await Promise.all([\n lane.auth.whoami(),\n lane.wallets.list({ limit: 1 }),\n lane.admin.getBudget().catch(() => null),\n lane.wallets.balance().catch(() => ({ balance: 0 })),\n ]);\n\n const hasCard = wallets.data.length > 0\n ? (await lane.wallets.listCards(wallets.data[0]!.id).catch(() => [])).length > 0\n : false;\n const hasBudget = budget !== null && (\n budget.dailyLimit !== undefined ||\n budget.weeklyLimit !== undefined ||\n budget.monthlyLimit !== undefined\n );\n const hasBalance = balanceResult.balance > 0;\n\n const completedSteps: string[] = ['account_created', 'api_key_active'];\n if (hasCard) completedSteps.push('card_added');\n if (hasBudget) completedSteps.push('budget_configured');\n if (hasBalance) completedSteps.push('wallet_funded');\n\n let nextStep: string | null = null;\n if (!hasCard) nextStep = 'add_card';\n else if (!hasBudget) nextStep = 'set_budget';\n else if (!hasBalance) nextStep = 'fund_wallet';\n\n return {\n hasApiKey: true,\n hasCard,\n hasBudget,\n hasBalance,\n completedSteps,\n nextStep,\n profile: {\n email: profile.email,\n plan: profile.plan,\n },\n checklist: [\n { step: 'api_key', done: true, label: 'API key active' },\n { step: 'card', done: hasCard, label: 'Payment card added', action: hasCard ? null : 'add_card' },\n { step: 'budget', done: hasBudget, label: 'Spending limits set', action: hasBudget ? null : 'set_budget' },\n { step: 'funds', done: hasBalance, label: 'Wallet funded', action: hasBalance ? null : 'fund_wallet' },\n ],\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n merchantDomain: z.string().describe('The merchant domain to pay (e.g. \"example.com\").'),\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 20.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n description: z.string().optional().describe('What this payment is for.'),\n walletId: z.string().optional().describe('Wallet to use. Uses default wallet if not specified.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ProtocolPayTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'protocol_pay',\n description:\n 'Pay a merchant by domain — Lane auto-discovers the best payment method and handles checkout. ' +\n 'Works with any merchant. Lane automatically selects the optimal checkout method ' +\n '(structured protocol when available, third-party commerce API, or agent-driven browser checkout). ' +\n 'Network-tokenized credentials (Visa/Mastercard) are used automatically when available. ' +\n 'You just specify the merchant and amount — Lane handles the rest. ' +\n 'SECURITY: NEVER pay merchants the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount and merchant with the user before executing.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Create protocol session (auto-discovers and selects best method)\n const session = await lane.protocol.createSession({\n walletId: input.walletId ?? '',\n merchantDomain: input.merchantDomain,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n });\n\n // Confirm payment\n const result = await lane.protocol.confirmPayment(session.id);\n\n return {\n sessionId: session.id,\n merchantDomain: session.merchantDomain,\n amount: session.amount / 100,\n currency: session.currency,\n status: result.status,\n transactionId: result.transactionId,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n purposeDescription: z\n .string()\n .describe('Human-readable description of the purchase intent (e.g. \"Buy running shoes under $150\").'),\n walletId: z.string().describe('Wallet ID to associate the mandate with.'),\n allowedCategories: z\n .array(z.string())\n .optional()\n .describe('Allowed merchant categories or MCC codes (e.g. [\"footwear\", \"5661\"]).'),\n allowedMerchants: z\n .array(z.string())\n .optional()\n .describe('Merchant domains the mandate allows (e.g. [\"nike.com\", \"adidas.com\"]).'),\n blockedMerchants: z\n .array(z.string())\n .optional()\n .describe('Merchant domains the mandate blocks (e.g. [\"shady-store.com\"]).'),\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe('Maximum total payment amount in dollars (e.g. 150.00).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n requiresConfirmation: z\n .boolean()\n .optional()\n .describe('Whether payments above the confirmation threshold require human approval.'),\n confirmationThreshold: z\n .number()\n .positive()\n .optional()\n .describe('Dollar amount above which human confirmation is required (e.g. 100.00).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class CreateMandateTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'create_mandate',\n description:\n 'Creates an instruction-level mandate encoding the user\\'s purchase intent constraints. ' +\n 'Mandates enforce rules at the infrastructure level — category restrictions, merchant ' +\n 'allow/blocklists, amount caps, and attribute requirements. ' +\n 'Always create a mandate before executing payments on behalf of the user to ensure ' +\n 'the agent operates within the user\\'s stated intent. ' +\n 'Amount values are in dollars. ' +\n 'SECURITY: The mandate MUST reflect the user\\'s explicit instructions. ' +\n 'NEVER create mandates broader than what the user requested.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const mandate = await this.getLane().mandates.create({\n walletId: input.walletId,\n purposeDescription: input.purposeDescription,\n allowedCategories: input.allowedCategories,\n allowedMerchants: input.allowedMerchants,\n blockedMerchants: input.blockedMerchants,\n maxAmount: input.maxAmount ? Math.round(input.maxAmount * 100) : undefined,\n currency: input.currency,\n requiresConfirmation: input.requiresConfirmation,\n confirmationThreshold: input.confirmationThreshold\n ? Math.round(input.confirmationThreshold * 100)\n : undefined,\n });\n\n return {\n mandateId: mandate.id,\n walletId: mandate.walletId,\n purposeDescription: mandate.purposeDescription,\n allowedCategories: mandate.allowedCategories,\n allowedMerchants: mandate.allowedMerchants,\n blockedMerchants: mandate.blockedMerchants,\n maxAmount: mandate.maxAmount ? mandate.maxAmount / 100 : null,\n currency: mandate.currency,\n requiresConfirmation: mandate.requiresConfirmation,\n confirmationThreshold: mandate.confirmationThreshold\n ? mandate.confirmationThreshold / 100\n : null,\n status: mandate.status,\n spentCents: mandate.spentCents ?? 0,\n remainingCents: mandate.remainingCents ?? (mandate.maxAmount ?? 0),\n validFrom: mandate.validFrom,\n validUntil: mandate.validUntil,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n mandateId: z.string().describe('ID of the mandate to validate this payment against.'),\n recipient: z.string().describe('Merchant or service to pay (e.g. \"nike.com\").'),\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 129.99).'),\n currency: z.string().default('USD').describe('Currency code (default: USD).'),\n description: z.string().optional().describe('What this payment is for.'),\n attributes: z\n .record(z.string(), z.string())\n .optional()\n .describe('Product attributes to validate against mandate constraints (e.g. {\"category\": \"running_shoes\", \"size\": \"10\"}).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class PayWithMandateTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'pay_with_mandate',\n description:\n 'Execute a payment that is validated against a mandate before processing. ' +\n 'The mandate\\'s constraints (category, merchant, amount caps, attributes) are checked ' +\n 'server-side before the payment is routed. If the mandate has requiresConfirmation and ' +\n 'the amount exceeds the threshold, the payment is held for human approval. ' +\n 'Amount is in dollars. ' +\n 'SECURITY: Always use this instead of plain pay when a mandate exists. ' +\n 'NEVER bypass mandate validation — it exists to enforce the user\\'s intent.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Verify the mandate exists and is accessible\n const mandate = await this.getLane().mandates.get(input.mandateId);\n\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Biometric gate — skip for small automatic payments under mandate threshold\n const mandateRequiresConfirmation = mandate.requiresConfirmation !== false;\n const threshold = typeof mandate.confirmationThreshold === 'number' ? mandate.confirmationThreshold : 0;\n const exceedsThreshold = threshold > 0 && amountCents >= threshold;\n\n if (mandateRequiresConfirmation || exceedsThreshold) {\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.recipient,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.recipient,\n });\n }\n\n // Execute the payment — mandate validation happens server-side in the payment flow\n const txn = await lane.pay.execute({\n recipient: input.recipient,\n amount: amountCents,\n currency: input.currency,\n description: input.description,\n });\n\n // Fetch updated budget after payment\n let budget;\n try {\n budget = await lane.mandates.getBudget(input.mandateId);\n } catch {\n // Non-fatal — budget query may not be available yet\n }\n\n return {\n transactionId: txn.id,\n mandateId: mandate.id,\n amount: txn.amount / 100, // Back to dollars for display\n currency: txn.currency,\n recipient: txn.recipient,\n status: txn.status,\n receiptUrl: txn.receiptUrl,\n testMode: txn.testMode,\n mandateStatus: budget?.status ?? mandate.status,\n budget: budget ? {\n spent: budget.spentCents / 100,\n remaining: budget.remainingCents / 100,\n maxAmount: budget.maxAmountCents ? budget.maxAmountCents / 100 : null,\n } : undefined,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n mandateId: z.string().describe('ID of the mandate to check budget for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class GetMandateBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'get_mandate_budget',\n description:\n 'Get the budget status of a mandate — how much has been spent, how much remains, ' +\n 'and how many transactions have been recorded. Use this to check if a mandate still ' +\n 'has budget remaining before attempting a purchase.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const budget = await this.getLane().mandates.getBudget(input.mandateId);\n\n return {\n mandateId: input.mandateId,\n maxAmount: budget.maxAmountCents ? budget.maxAmountCents / 100 : null,\n spentAmount: budget.spentCents / 100,\n remainingAmount: budget.remainingCents / 100,\n transactionCount: budget.transactionCount,\n status: budget.status,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n instructionId: z.string().describe('ID of the instruction to check budget for.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class GetInstructionBudgetTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'get_instruction_budget',\n description:\n 'Get the budget status of an instruction — total budget, aggregate spend across all ' +\n 'mandates, remaining budget, and per-mandate breakdown. Use this to track overall ' +\n 'shopping progress against the global budget.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const budget = await this.getLane().instructions.getBudget(input.instructionId);\n\n return {\n instructionId: input.instructionId,\n totalBudget: budget.amountCents ? budget.amountCents / 100 : null,\n spentAmount: budget.spentCents / 100,\n remainingAmount: budget.remainingCents / 100,\n mandateCount: budget.mandateCount,\n completedMandates: budget.completedMandates,\n mandates: budget.mandates.map((m) => ({\n id: m.id,\n name: m.name,\n spent: m.spentCents / 100,\n remaining: m.remainingCents / 100,\n maxAmount: m.maxAmountCents ? m.maxAmountCents / 100 : null,\n status: m.status,\n })),\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n name: z.string().min(1).describe('Name of the agent to register.'),\n type: z.string().min(1).describe('Agent type (e.g., \"shopping\", \"research\", \"billing\").'),\n walletId: z.string().optional().describe('Optional wallet ID to assign to the agent.'),\n policy: z.object({\n maxDaily: z.number().optional().describe('Max daily spend in dollars.'),\n maxPerTransaction: z.number().optional().describe('Max per-transaction spend in dollars.'),\n allowedCategories: z.array(z.string()).optional().describe('Allowed merchant categories.'),\n allowedMerchants: z.array(z.string()).optional().describe('Allowed merchant domains.'),\n blockedMerchants: z.array(z.string()).optional().describe('Blocked merchant domains.'),\n }).optional().describe('Spending policy for the agent.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class RegisterAgentTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'register_agent',\n description:\n 'Register a new agent in the fleet with optional spending policy. ' +\n 'Each agent gets a unique identity and can be assigned a wallet and policy ' +\n 'governing its capabilities and spending limits.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n // Convert typed policy to the API format\n const apiPolicy = input.policy ? {\n budget: {\n dailyLimit: input.policy.maxDaily ? Math.round(input.policy.maxDaily * 100) : undefined,\n },\n maxTransactionAmount: input.policy.maxPerTransaction ? Math.round(input.policy.maxPerTransaction * 100) : undefined,\n allowedMCCs: input.policy.allowedCategories,\n allowedMerchants: input.policy.allowedMerchants,\n blockedMerchants: input.policy.blockedMerchants,\n } : undefined;\n\n const result = await this.getLane().agents.register({\n name: input.name,\n type: input.type,\n walletId: input.walletId,\n policy: apiPolicy as never,\n });\n\n return {\n agent: {\n id: result.id,\n name: result.name,\n type: result.type,\n status: result.status,\n walletId: result.walletId,\n policy: result.policy,\n createdAt: result.createdAt,\n },\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\n\nconst inputSchema = z.object({\n status: z\n .enum(['active', 'suspended', 'revoked'])\n .optional()\n .describe('Filter agents by status.'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .default(20)\n .describe('Number of agents to return (max 100).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ListAgentsTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'list_agents',\n description:\n 'List registered agents in the fleet with optional status filter. ' +\n 'Returns agent IDs, names, types, statuses, and policies.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const result = await this.getLane().agents.list({\n status: input.status,\n limit: input.limit,\n });\n\n return {\n agents: result.data.map((agent) => ({\n id: agent.id,\n name: agent.name,\n type: agent.type,\n status: agent.status,\n walletId: agent.walletId,\n policy: agent.policy,\n createdAt: agent.createdAt,\n })),\n total: result.total,\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n amount: z.number().positive().describe('Payment amount in dollars (e.g. 15.00).'),\n merchant: z.string().describe('Merchant domain or identifier (e.g. \"anthropic.com\").'),\n purpose: z.string().describe('Brief description of what this payment is for (e.g. \"Claude Pro subscription\").'),\n singleUse: z.boolean().default(true).describe('Whether the token is single-use and auto-destroyed after one charge (default: true).'),\n walletId: z.string().optional().describe('Wallet ID. Uses default wallet if not specified.'),\n cardId: z.string().optional().describe('Card ID to back the VIC token. Uses first card in wallet if not specified.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ProvisionVICPaymentTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'provision_payment',\n description:\n 'Provision a single-use payment token for autonomous checkout. ' +\n 'Issues a scoped credential (DPAN + cryptogram) for the specified amount and merchant. ' +\n 'The credential can be used to complete checkout at any Visa-accepting merchant. ' +\n 'Returns the payment credential directly (NOT displayed in chat — zero token waste). ' +\n 'SECURITY: NEVER provision tokens for merchants the user has not explicitly approved. ' +\n 'ALWAYS confirm the amount, merchant, and purpose with the user before provisioning. ' +\n 'Tokens are budget-enforced and auto-expire after use.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n const amountCents = Math.round(input.amount * 100);\n\n // Step 1: Resolve wallet if not provided\n let walletId = input.walletId;\n if (!walletId) {\n const wallets = await lane.wallets.list({ limit: 1 });\n if (wallets.data.length === 0) {\n return {\n error: 'no_wallet',\n message: 'No wallet found. Add a card first using the add_card tool.',\n };\n }\n walletId = wallets.data[0]!.id;\n }\n\n // Step 2: Resolve card if not provided\n let cardId = input.cardId;\n if (!cardId) {\n const cards = await lane.wallets.listCards(walletId);\n if (cards.length === 0) {\n return {\n error: 'no_card',\n message: 'No cards in wallet. Add a card first using the add_card tool.',\n };\n }\n cardId = cards[0]!.id;\n }\n\n // Step 2.5: Biometric confirmation before credential issuance\n const instruction = await lane.instructions.create({\n amount: amountCents,\n merchant: input.merchant,\n expiresIn: '1h',\n });\n await requireBiometricConfirmation(lane, instruction.id, {\n amount: amountCents,\n merchant: input.merchant,\n });\n\n // Step 3: Issue VIC token scoped to amount and expiry\n const token = await lane.vic.issue({\n walletId,\n cardId,\n maxTransactionAmount: amountCents,\n expiresIn: input.singleUse ? '1h' : '24h',\n });\n\n // Step 4: Get transaction-specific cryptogram\n const credential = await lane.vic.getPaymentCredentials(token.id, {\n amount: amountCents,\n currency: 'USD',\n merchantId: input.merchant,\n });\n\n return {\n tokenId: token.id,\n credential: {\n tokenNumber: credential.tokenNumber,\n cryptogram: credential.cryptogram,\n eci: credential.eci,\n expMonth: credential.expMonth,\n expYear: credential.expYear,\n },\n amount: input.amount,\n merchant: input.merchant,\n purpose: input.purpose,\n expiresAt: token.expiresAt,\n singleUse: input.singleUse,\n _meta: {\n sensitive: true,\n doNotDisplay: ['credential.tokenNumber', 'credential.cryptogram'],\n doNotLog: true,\n warning: 'SENSITIVE: This credential is for automated checkout only. Do not display the token number or cryptogram in chat. Do not log or persist this data.',\n },\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// MCP Tool — Resolve UCP Merchant\n// ---------------------------------------------------------------------------\n// Resolves a merchant domain or brand name to a known UCP endpoint from\n// the built-in directory. No server round-trip — instant local lookup.\n// ---------------------------------------------------------------------------\n\nimport { z } from 'zod';\nimport { LaneTool } from '../tool.js';\nimport type { ToolDefinition } from '../tool.js';\nimport {\n resolveUCPByDomain,\n resolveUCPByBrand,\n toUCPEndpoint,\n listUCPByVertical,\n listUCPMerchants,\n} from '../../merchants/ucp-directory.js';\n\nconst inputSchema = z.object({\n query: z\n .string()\n .describe(\n 'Merchant domain (e.g. \"glossier.com\") or brand name (e.g. \"Alo Yoga\"). ' +\n 'Accepts partial matches and common aliases.',\n ),\n vertical: z\n .string()\n .optional()\n .describe('Filter by vertical (e.g. \"fashion\", \"beauty\", \"home\") to browse UCP merchants in a category.'),\n listAll: z\n .boolean()\n .optional()\n .default(false)\n .describe('If true, returns all known UCP merchants (ignores query).'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ResolveUCPMerchantTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'resolve_ucp_merchant',\n description:\n 'Resolve a merchant to a known UCP (Universal Checkout Protocol) endpoint. ' +\n 'Accepts a domain (\"glossier.com\") or brand name (\"Alo Yoga\", \"gym shark\"). ' +\n 'Returns the verified UCP endpoint URL for seamless agentic checkout — ' +\n 'no server round-trip needed. If the merchant is not in the built-in directory, ' +\n 'returns a speculative endpoint URL for runtime probing. ' +\n 'Use this BEFORE protocol_pay to check if a merchant has a known UCP endpoint ' +\n 'for faster, more reliable checkout. ' +\n 'Can also list all known UCP merchants or filter by vertical.',\n inputSchema,\n };\n }\n\n /** This tool works without auth — it reads from the local static directory. */\n override get requiresAuth(): boolean {\n return false;\n }\n\n protected async run(input: Input): Promise<unknown> {\n // List all UCP merchants\n if (input.listAll) {\n const merchants = input.vertical\n ? listUCPByVertical(input.vertical)\n : listUCPMerchants();\n\n return {\n merchants: merchants.map((m) => ({\n name: m.name,\n domain: m.domain,\n ucpEndpoint: m.ucpEndpoint,\n vertical: m.vertical,\n })),\n total: merchants.length,\n source: 'built-in UCP directory (verified endpoints)',\n };\n }\n\n // Filter by vertical\n if (input.vertical) {\n const merchants = listUCPByVertical(input.vertical);\n return {\n merchants: merchants.map((m) => ({\n name: m.name,\n domain: m.domain,\n ucpEndpoint: m.ucpEndpoint,\n vertical: m.vertical,\n })),\n total: merchants.length,\n source: 'built-in UCP directory (verified endpoints)',\n };\n }\n\n // Try domain resolution first\n const byDomain = resolveUCPByDomain(input.query);\n if (byDomain) {\n return {\n found: true,\n verified: true,\n name: byDomain.name,\n domain: byDomain.domain,\n ucpEndpoint: byDomain.ucpEndpoint,\n vertical: byDomain.vertical,\n mccs: byDomain.mccs,\n source: 'built-in UCP directory (verified endpoint)',\n hint: 'This merchant has a verified UCP endpoint. Use protocol_pay for seamless checkout.',\n };\n }\n\n // Try brand name resolution\n const byBrand = resolveUCPByBrand(input.query);\n if (byBrand) {\n return {\n found: true,\n verified: true,\n name: byBrand.name,\n domain: byBrand.domain,\n ucpEndpoint: byBrand.ucpEndpoint,\n vertical: byBrand.vertical,\n mccs: byBrand.mccs,\n source: 'built-in UCP directory (verified endpoint, matched by brand name)',\n hint: 'This merchant has a verified UCP endpoint. Use protocol_pay for seamless checkout.',\n };\n }\n\n // Not in directory — construct speculative endpoint\n const speculative = toUCPEndpoint(input.query);\n return {\n found: false,\n verified: false,\n query: input.query,\n speculativeEndpoint: speculative.endpoint,\n source: 'not in built-in directory',\n hint:\n 'This merchant is not in the verified UCP directory. ' +\n 'Use protocol_pay which will probe the endpoint at runtime, or use discover_merchants for server-side discovery.',\n };\n }\n}\n","import { z } from 'zod';\nimport { LaneTool, type ToolDefinition } from '../tool.js';\nimport { requireBiometricConfirmation } from '../../auth/confirmation.js';\n\nconst inputSchema = z.object({\n instructionId: z.string().describe('ID of the instruction to confirm via biometric verification.'),\n});\n\ntype Input = z.infer<typeof inputSchema>;\n\nexport class ConfirmInstructionTool extends LaneTool<Input> {\n get definition(): ToolDefinition {\n return {\n name: 'confirm_instruction',\n description:\n 'Execute biometric verification (Touch ID, passkey, or PIN) to confirm an instruction. ' +\n 'Use this before retrieving credentials or payments that require human verification. ' +\n 'Returns confirmation valid for 1 minute — multiple payments share one verification.',\n inputSchema,\n };\n }\n\n protected async run(input: Input): Promise<unknown> {\n const lane = this.getLane();\n\n const confirmation = await requireBiometricConfirmation(lane, input.instructionId);\n\n return {\n confirmed: true,\n method: confirmation.method,\n confirmationId: confirmation.id,\n instructionId: input.instructionId,\n validForSeconds: 60,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Lane MCP Server — Dual-Mode (Discovery + Authenticated)\n// ---------------------------------------------------------------------------\n// Registers all Lane tools with the @modelcontextprotocol/sdk McpServer.\n// Supports two modes:\n// 1. Discovery mode (no API key): pre-auth tools only (get_lane_info,\n// lane_signup, lane_connect). Post-auth tools return a structured error.\n// 2. Authenticated mode: all tools available.\n//\n// When `lane_connect` is called, the server transitions from discovery to\n// authenticated mode by creating a fresh Lane instance via Lane.fromApiKey().\n// ---------------------------------------------------------------------------\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Lane } from '../lane.js';\nimport type { LaneTool } from './tool.js';\nimport { getLaneInstructions } from '../resources/agent-instructions.js';\n\nimport { GetLaneInfoTool } from './tools/get-lane-info.js';\nimport { LaneSignupTool } from './tools/lane-signup.js';\nimport { LaneConnectTool } from './tools/lane-connect.js';\nimport { LaneAddCardTool } from './tools/lane-add-card.js';\nimport { WhoamiTool } from './tools/whoami.js';\nimport { ListCardsTool } from './tools/list-cards.js';\nimport { CheckBalanceTool } from './tools/check-balance.js';\nimport { PayTool } from './tools/pay.js';\nimport { ListTransactionsTool } from './tools/list-transactions.js';\nimport { SearchProductsTool } from './tools/search-products.js';\nimport { CheckoutTool } from './tools/checkout.js';\nimport { SetBudgetTool } from './tools/set-budget.js';\nimport { RequestRefundTool } from './tools/request-refund.js';\nimport { SubscribeTool } from './tools/subscribe.js';\nimport { ListSubscriptionsTool } from './tools/list-subscriptions.js';\nimport { SearchSoftwareTool } from './tools/search-software.js';\nimport { CancelSubscriptionTool } from './tools/cancel-subscription.js';\nimport { DiscoverMerchantsTool } from './tools/discover-merchants.js';\nimport { LaneOnboardingStatusTool } from './tools/lane-onboarding-status.js';\nimport { ProtocolPayTool } from './tools/protocol-pay.js';\nimport { CreateMandateTool } from './tools/create-mandate.js';\nimport { PayWithMandateTool } from './tools/pay-with-mandate.js';\nimport { GetMandateBudgetTool } from './tools/get-mandate-budget.js';\nimport { GetInstructionBudgetTool } from './tools/get-instruction-budget.js';\nimport { RegisterAgentTool } from './tools/register-agent.js';\nimport { ListAgentsTool } from './tools/list-agents.js';\nimport { ProvisionVICPaymentTool } from './tools/provision-vic-payment.js';\nimport { ResolveUCPMerchantTool } from './tools/resolve-ucp-merchant.js';\nimport { ConfirmInstructionTool } from './tools/confirm-instruction.js';\n\nexport interface LaneMCPServerOptions {\n /** Override the server name shown to clients. */\n name?: string;\n /** Override the server version shown to clients. */\n version?: string;\n}\n\n/**\n * LaneMCPServer wraps @modelcontextprotocol/sdk McpServer and registers\n * all Lane agent tools. Supports dual-mode operation:\n *\n * - Pass `null` for discovery mode (no API key yet).\n * - Pass a `Lane` instance for authenticated mode.\n * - Call `lane_connect` tool at runtime to transition from discovery → authenticated.\n */\nexport class LaneMCPServer {\n readonly mcp: McpServer;\n private lane: Lane | null;\n private tools: LaneTool[];\n\n constructor(\n lane: Lane | null,\n options: LaneMCPServerOptions = {},\n ) {\n this.lane = lane;\n\n this.mcp = new McpServer(\n {\n name: options.name ?? 'lane',\n version: options.version ?? '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n },\n );\n\n // Create all tool instances\n this.tools = this.createAllTools(lane);\n\n this.registerAllTools();\n this.registerResources();\n }\n\n /**\n * Called by LaneConnectTool when a user provides an API key.\n * Updates all tools with the new Lane instance.\n */\n private setLane(lane: Lane): void {\n this.lane = lane;\n for (const tool of this.tools) {\n tool.setLane(lane);\n }\n }\n\n private createAllTools(lane: Lane | null): LaneTool[] {\n const onConnect = async (laneInstance: Lane) => {\n this.setLane(laneInstance);\n };\n\n return [\n // Pre-auth tools (4)\n new GetLaneInfoTool(lane),\n new LaneSignupTool(lane),\n new LaneConnectTool(lane, onConnect),\n new ResolveUCPMerchantTool(lane),\n // Post-auth tools (22)\n new WhoamiTool(lane),\n new ListCardsTool(lane),\n new CheckBalanceTool(lane),\n new PayTool(lane),\n new ListTransactionsTool(lane),\n new SearchProductsTool(lane),\n new CheckoutTool(lane),\n new SetBudgetTool(lane),\n new RequestRefundTool(lane),\n new SubscribeTool(lane),\n new ListSubscriptionsTool(lane),\n new SearchSoftwareTool(lane),\n new CancelSubscriptionTool(lane),\n new DiscoverMerchantsTool(lane),\n new LaneAddCardTool(lane),\n new LaneOnboardingStatusTool(lane),\n new ProtocolPayTool(lane),\n new CreateMandateTool(lane),\n new PayWithMandateTool(lane),\n new GetMandateBudgetTool(lane),\n new GetInstructionBudgetTool(lane),\n new RegisterAgentTool(lane),\n new ListAgentsTool(lane),\n new ProvisionVICPaymentTool(lane),\n new ConfirmInstructionTool(lane),\n ];\n }\n\n private registerAllTools(): void {\n for (const tool of this.tools) {\n this.registerTool(tool);\n }\n }\n\n private registerTool(tool: LaneTool): void {\n const def = tool.definition;\n\n // Cast to any to bypass generic constraints; the MCP SDK will\n // introspect the zod schema to generate JSON Schema for clients.\n (this.mcp as any).registerTool(\n def.name,\n { description: def.description, inputSchema: def.inputSchema },\n async (args: Record<string, unknown>) => {\n const result = await tool.execute(args);\n return { ...result } as Record<string, unknown>;\n },\n );\n }\n\n private registerResources(): void {\n const instructions = getLaneInstructions();\n\n // Register lane://instructions as an MCP resource\n (this.mcp as any).resource(\n 'lane-instructions',\n 'lane://instructions',\n {\n description:\n 'Structured instructions for AI agents using Lane. Includes role, capabilities, ' +\n 'budget rules, example flows, and constraints.',\n mimeType: 'application/json',\n },\n async () => ({\n contents: [\n {\n uri: 'lane://instructions',\n mimeType: 'application/json',\n text: JSON.stringify(instructions, null, 2),\n },\n ],\n }),\n );\n }\n}\n","import type { Lane } from '../../lane.js';\nimport { zodToJsonSchema } from '../base.js';\nimport { LaneMCPServer } from '../../mcp/server.js';\n\nexport interface CrewAITool {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n func: (input: Record<string, unknown>) => Promise<string>;\n}\n\n/**\n * Create CrewAI-compatible tools from a Lane instance.\n */\nexport function createLaneTools(lane: Lane): CrewAITool[] {\n const mcpServer = new LaneMCPServer(lane);\n const tools: any[] = (mcpServer as any).tools;\n\n return tools\n .filter((t: any) => t.requiresAuth)\n .map((tool: any) => ({\n name: tool.definition.name,\n description: tool.definition.description,\n parameters: zodToJsonSchema(tool.definition.inputSchema),\n func: async (input: Record<string, unknown>): Promise<string> => {\n const result = await tool.execute(input);\n return result.content.map((c: any) => c.text).join('\\n');\n },\n }));\n}\n"]}
|