@naturalpay/sdk 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -231
- package/dist/index.cjs +40 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -4
- package/dist/index.d.ts +21 -4
- package/dist/index.js +39 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/cli.cjs +1 -1
- package/dist/mcp/cli.cjs.map +1 -1
- package/dist/mcp/cli.js +1 -1
- package/dist/mcp/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/logging.ts","../src/tool-call-context.ts","../src/http.ts","../src/resources/base.ts","../src/resources/transactions.ts","../src/resources/payments.ts","../src/resources/wallet.ts","../src/resources/agents.ts","../src/resources/delegations.ts","../src/resources/customers.ts","../src/client.ts","../src/types/transactions.ts"],"names":["AsyncLocalStorage","logger","networkError","TransactionTypeFilter"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Natural Payments SDK error classes.\n */\n\n/**\n * Base error for all Natural SDK errors.\n */\nexport class NaturalError extends Error {\n readonly statusCode?: number;\n readonly code?: string;\n\n constructor(message: string, options?: { statusCode?: number; code?: string }) {\n super(message);\n this.name = 'NaturalError';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Invalid or missing API key.\n */\nexport class AuthenticationError extends NaturalError {\n constructor(message = 'Invalid or missing API key') {\n super(message, { statusCode: 401, code: 'authentication_error' });\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Malformed request parameters.\n */\nexport class InvalidRequestError extends NaturalError {\n constructor(message: string, code = 'invalid_request') {\n super(message, { statusCode: 400, code });\n this.name = 'InvalidRequestError';\n }\n}\n\n/**\n * Payment-specific failure.\n */\nexport class PaymentError extends NaturalError {\n constructor(message: string, code = 'payment_error') {\n super(message, { statusCode: 400, code });\n this.name = 'PaymentError';\n }\n}\n\n/**\n * Not enough balance for payment.\n */\nexport class InsufficientFundsError extends PaymentError {\n constructor(message = 'Insufficient funds') {\n super(message, 'insufficient_funds');\n this.name = 'InsufficientFundsError';\n }\n}\n\n/**\n * Invalid recipient.\n */\nexport class RecipientNotFoundError extends PaymentError {\n constructor(message = 'Recipient not found') {\n super(message, 'recipient_not_found');\n this.name = 'RecipientNotFoundError';\n }\n}\n\n/**\n * Too many requests.\n */\nexport class RateLimitError extends NaturalError {\n readonly retryAfter?: number;\n\n constructor(message = 'Rate limit exceeded', retryAfter?: number) {\n super(message, { statusCode: 429, code: 'rate_limit_exceeded' });\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Internal server error.\n */\nexport class ServerError extends NaturalError {\n constructor(message = 'Internal server error') {\n super(message, { statusCode: 500, code: 'server_error' });\n this.name = 'ServerError';\n }\n}\n","/**\n * Single source of truth for the SDK version string.\n */\nexport const VERSION = '0.1.1';\n","/**\n * Structured logging for Natural Payments SDK.\n *\n * Supports two modes:\n * 1. Plain text logging (default, for local development)\n * 2. JSON logging with Datadog correlation (when NATURAL_LOG_FORMAT=json)\n *\n * Features:\n * - Source info: file, line, function on every log (for error grouping)\n * - Context binding for request_id, agent_id, instance_id\n * - Datadog trace correlation fields\n * - AsyncLocalStorage for proper async context isolation\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport { VERSION } from './version.js';\n\n// Log levels (matching standard levels)\nexport type LogLevel = 'debug' | 'info' | 'warning' | 'error';\n\nconst LOG_LEVEL_VALUES: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warning: 30,\n error: 40,\n};\n\n// AsyncLocalStorage for proper async context isolation\nconst asyncContext = new AsyncLocalStorage<Record<string, unknown>>();\n\n// Fallback global context for environments where AsyncLocalStorage isn't used\nlet globalContext: Record<string, unknown> = {};\n\n/**\n * Get the current logging context.\n * Uses AsyncLocalStorage if available, falls back to global context.\n */\nexport function getContext(): Record<string, unknown> {\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n return { ...asyncStore };\n }\n return { ...globalContext };\n}\n\n/**\n * Sanitize a string for safe logging to prevent log injection.\n */\nfunction sanitizeString(value: string): string {\n let sanitized = '';\n for (const char of value) {\n if (char === '\\r' || char === '\\n') {\n sanitized += '\\\\n';\n } else if (char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127) {\n // Control characters - escape them\n sanitized += `\\\\x${char.charCodeAt(0).toString(16).padStart(2, '0')}`;\n } else {\n sanitized += char;\n }\n }\n // Truncate overly long values to prevent log flooding\n const maxLength = 1000;\n if (sanitized.length > maxLength) {\n sanitized = sanitized.slice(0, maxLength) + '...[truncated]';\n }\n return sanitized;\n}\n\n/**\n * Sanitize a value for safe logging to prevent log injection.\n *\n * Recursively sanitizes strings in objects and arrays.\n * Removes/escapes control characters, newlines, and other potentially\n * dangerous sequences that could be used for log injection attacks.\n */\nfunction sanitizeLogValue(value: unknown, depth = 0): unknown {\n // Prevent infinite recursion on deeply nested objects\n const maxDepth = 10;\n if (depth > maxDepth) {\n return '[max depth exceeded]';\n }\n\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n return sanitizeString(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeLogValue(item, depth + 1));\n }\n\n if (typeof value === 'object') {\n const sanitized: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n const sanitizedKey = sanitizeString(key);\n sanitized[sanitizedKey] = sanitizeLogValue(val, depth + 1);\n }\n return sanitized;\n }\n\n // For functions, symbols, etc. - return type description\n return `[${typeof value}]`;\n}\n\n/**\n * Bind additional context to current scope (e.g., request_id, agent_id).\n *\n * Values are sanitized to prevent log injection attacks.\n * Updates both AsyncLocalStorage (if active) and global context.\n *\n * @example\n * bindContext({ requestId: 'req_123', agentId: 'agt_456' });\n * logger.info('Processing payment'); // Will include requestId and agentId\n */\nexport function bindContext(context: Record<string, unknown>): void {\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n sanitized[key] = sanitizeLogValue(value);\n }\n\n // Update AsyncLocalStorage if active\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n Object.assign(asyncStore, sanitized);\n }\n\n // Always update global context as fallback\n globalContext = { ...globalContext, ...sanitized };\n}\n\n/**\n * Clear all bound context.\n */\nexport function clearContext(): void {\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n for (const key of Object.keys(asyncStore)) {\n delete asyncStore[key];\n }\n }\n globalContext = {};\n}\n\n/**\n * Run a function with isolated logging context.\n *\n * Context bound within the callback is isolated from other async operations.\n * This is the recommended way to set context for request handling.\n *\n * @example\n * await runWithContext({ requestId: 'req_123' }, async () => {\n * logger.info('Processing request'); // Includes requestId\n * await doAsyncWork();\n * logger.info('Request complete'); // Still includes requestId\n * });\n */\nexport function runWithContext<T>(\n context: Record<string, unknown>,\n fn: () => T | Promise<T>\n): T | Promise<T> {\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n sanitized[key] = sanitizeLogValue(value);\n }\n return asyncContext.run(sanitized, fn);\n}\n\n// Logging configuration\ninterface LoggingConfig {\n level: LogLevel;\n jsonFormat: boolean;\n serviceName: string;\n environment: string;\n}\n\nconst loggingConfig: LoggingConfig = {\n level: (process.env['NATURAL_LOG_LEVEL']?.toLowerCase() as LogLevel) || 'info',\n jsonFormat: process.env['NATURAL_LOG_FORMAT']?.toLowerCase() === 'json',\n serviceName: 'naturalpay-sdk',\n environment: process.env['NATURAL_ENV'] || process.env['DD_ENV'] || 'development',\n};\n\n/**\n * Configure logging for the Natural SDK.\n *\n * @param options - Logging configuration options\n * @param options.level - Log level (debug, info, warning, error)\n * @param options.jsonFormat - Use JSON format (default: auto-detect from NATURAL_LOG_FORMAT env var)\n * @param options.serviceName - Service name for structured logs\n *\n * Environment variables:\n * - NATURAL_LOG_LEVEL: Override log level (DEBUG, INFO, WARNING, ERROR)\n * - NATURAL_LOG_FORMAT: Set to \"json\" for JSON output, \"text\" for plain text\n */\nexport function configureLogging(options?: {\n level?: LogLevel;\n jsonFormat?: boolean;\n serviceName?: string;\n}): void {\n if (options?.level) {\n loggingConfig.level = options.level;\n }\n if (options?.jsonFormat !== undefined) {\n loggingConfig.jsonFormat = options.jsonFormat;\n }\n if (options?.serviceName) {\n loggingConfig.serviceName = options.serviceName;\n }\n}\n\n/**\n * Get source location information from stack trace.\n */\nfunction getSourceInfo(): { file: string; line: number; function: string } {\n const stack = new Error().stack;\n if (!stack) {\n return { file: 'unknown', line: 0, function: 'unknown' };\n }\n\n // Parse stack trace - skip the first 3 lines (Error, getSourceInfo, formatLogRecord/log)\n const lines = stack.split('\\n');\n const callerLine = lines[4] || lines[3] || '';\n\n // Match patterns like \"at functionName (/path/to/file.ts:123:45)\" or \"at /path/to/file.ts:123:45\"\n const match = callerLine.match(/at\\s+(?:(.+?)\\s+\\()?(.*?):(\\d+):\\d+\\)?/);\n if (match) {\n return {\n function: match[1] || 'anonymous',\n file: match[2] || 'unknown',\n line: parseInt(match[3] || '0', 10),\n };\n }\n\n return { file: 'unknown', line: 0, function: 'unknown' };\n}\n\ninterface LogRecord {\n timestamp: string;\n level: string;\n logger: string;\n message: string;\n source: { file: string; line: number; function: string };\n service: string;\n environment: string;\n version: string;\n [key: string]: unknown;\n}\n\n/**\n * Format a log record as JSON.\n */\nfunction formatJsonLog(\n level: LogLevel,\n loggerName: string,\n message: string,\n extra?: Record<string, unknown>\n): string {\n const record: LogRecord = {\n timestamp: new Date().toISOString(),\n level: level.toUpperCase(),\n logger: loggerName,\n message,\n source: getSourceInfo(),\n service: loggingConfig.serviceName,\n environment: loggingConfig.environment,\n version: VERSION,\n ...getContext(),\n ...extra,\n };\n\n // Add Datadog trace correlation if available\n const ddTraceId = process.env['DD_TRACE_ID'];\n const ddSpanId = process.env['DD_SPAN_ID'];\n if (ddTraceId) {\n record['dd.trace_id'] = ddTraceId;\n record['dd.span_id'] = ddSpanId;\n record['dd.service'] = loggingConfig.serviceName;\n record['dd.version'] = VERSION;\n record['dd.env'] = loggingConfig.environment;\n }\n\n return JSON.stringify(record);\n}\n\n/**\n * Format a log record as plain text.\n */\nfunction formatTextLog(\n level: LogLevel,\n loggerName: string,\n message: string,\n extra?: Record<string, unknown>\n): string {\n const contextEntries = Object.entries({ ...getContext(), ...extra });\n const contextStr =\n contextEntries.length > 0 ? ` [${contextEntries.map(([k, v]) => `${k}=${v}`).join(', ')}]` : '';\n\n return `${level.toUpperCase().padEnd(8)} ${loggerName}: ${message}${contextStr}`;\n}\n\n/**\n * Logger instance for a specific module/context.\n */\nexport class Logger {\n constructor(private readonly name: string) {}\n\n private log(level: LogLevel, message: string, extra?: Record<string, unknown>): void {\n if (LOG_LEVEL_VALUES[level] < LOG_LEVEL_VALUES[loggingConfig.level]) {\n return;\n }\n\n const formatted = loggingConfig.jsonFormat\n ? formatJsonLog(level, this.name, message, extra)\n : formatTextLog(level, this.name, message, extra);\n\n // Use stderr for logs (best practice for CLI tools)\n if (level === 'error') {\n console.error(formatted);\n } else if (level === 'warning') {\n console.warn(formatted);\n } else {\n console.error(formatted); // All logs to stderr\n }\n }\n\n debug(message: string, extra?: Record<string, unknown>): void {\n this.log('debug', message, extra);\n }\n\n info(message: string, extra?: Record<string, unknown>): void {\n this.log('info', message, extra);\n }\n\n warning(message: string, extra?: Record<string, unknown>): void {\n this.log('warning', message, extra);\n }\n\n warn(message: string, extra?: Record<string, unknown>): void {\n this.warning(message, extra);\n }\n\n error(message: string, extra?: Record<string, unknown>): void {\n this.log('error', message, extra);\n }\n}\n\n/**\n * Get a logger for the given module name.\n *\n * @param name - Module name (e.g., 'naturalpay.http')\n * @returns Logger instance\n *\n * @example\n * const logger = getLogger('naturalpay.payments');\n * logger.info('Payment initiated', { amount: 10000 });\n */\nexport function getLogger(name: string): Logger {\n if (!name.startsWith('naturalpay')) {\n name = `naturalpay.${name}`;\n }\n return new Logger(name);\n}\n\n// Helper functions for common logging patterns\n\n/**\n * Log an error with full context and exception info.\n */\nexport function logError(\n logger: Logger,\n message: string,\n options?: {\n error?: Error;\n statusCode?: number;\n code?: string;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = { ...options };\n\n if (options?.error) {\n extra['errorType'] = options.error.name;\n extra['errorMessage'] = options.error.message;\n if (options.error.stack) {\n extra['errorStack'] = options.error.stack.split('\\n').slice(0, 5).join('\\n');\n }\n delete extra['error'];\n }\n\n logger.error(message, extra);\n}\n\n/**\n * Log an API call with standard fields.\n */\nexport function logApiCall(\n logger: Logger,\n method: string,\n path: string,\n options?: {\n statusCode?: number;\n durationMs?: number;\n error?: Error;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = {\n method,\n path,\n ...options,\n };\n\n if (options?.statusCode) {\n extra['statusCode'] = options.statusCode;\n }\n if (options?.durationMs !== undefined) {\n extra['durationMs'] = Math.round(options.durationMs * 100) / 100;\n }\n\n if (options?.error) {\n logError(logger, `API call failed: ${method} ${path}`, extra);\n } else if (options?.statusCode && options.statusCode >= 400) {\n logger.warning(`API call error: ${method} ${path} -> ${options.statusCode}`, extra);\n } else {\n logger.info(`API call: ${method} ${path} -> ${options?.statusCode}`, extra);\n }\n}\n\n/**\n * Log an MCP tool invocation.\n */\nexport function logToolCall(\n logger: Logger,\n toolName: string,\n options?: {\n success?: boolean;\n durationMs?: number;\n error?: Error;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = {\n toolName,\n ...options,\n };\n\n if (options?.durationMs !== undefined) {\n extra['durationMs'] = Math.round(options.durationMs * 100) / 100;\n }\n\n if (options?.error) {\n logError(logger, `Tool call failed: ${toolName}`, extra);\n } else if (options?.success === false) {\n logger.warning(`Tool call returned error: ${toolName}`, extra);\n } else {\n logger.info(`Tool call: ${toolName}`, extra);\n }\n}\n","/**\n * Tool call context for MCP server → HTTP layer communication.\n *\n * The MCP server sets tool call data (name + arguments) before invoking SDK\n * methods. The HTTP layer reads it and sends the X-Tool-Call header to the BFF\n * for audit/observability. Direct SDK users never interact with this module.\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\ninterface ToolCallData {\n tool: string;\n arguments: Record<string, unknown>;\n timestamp: string;\n}\n\nconst toolCallStorage = new AsyncLocalStorage<ToolCallData>();\n\n/**\n * Get the base64-encoded X-Tool-Call header value, or undefined if not in MCP context.\n */\nexport function getToolCallHeader(): string | undefined {\n const data = toolCallStorage.getStore();\n if (!data) return undefined;\n return btoa(JSON.stringify(data));\n}\n\n/**\n * Run a function within a tool call context. The HTTP layer will automatically\n * pick up the tool call data and send it as the X-Tool-Call header.\n */\nexport function runWithToolCall<T>(name: string, args: Record<string, unknown>, fn: () => T): T {\n return toolCallStorage.run(\n {\n tool: name,\n arguments: args,\n timestamp: new Date().toISOString(),\n },\n fn\n );\n}\n","/**\n * HTTP client for Natural Server API with JWT caching.\n */\n\nimport {\n AuthenticationError,\n InvalidRequestError,\n NaturalError,\n RateLimitError,\n ServerError,\n} from './errors.js';\nimport { getLogger, logApiCall, logError } from './logging.js';\nimport { getToolCallHeader } from './tool-call-context.js';\nimport { VERSION } from './version.js';\n\nconst logger = getLogger('http');\n\nconst DEFAULT_BASE_URL = 'https://api.natural.co';\nconst DEFAULT_TIMEOUT = 30000;\n\nexport interface HTTPClientOptions {\n apiKey?: string;\n baseUrl?: string;\n timeout?: number;\n}\n\ninterface JWTCacheEntry {\n token: string;\n expiresAt: number;\n}\n\ninterface RequestOptions {\n body?: Record<string, unknown>;\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n/**\n * Hash a string using a simple hash function (for cache keys).\n */\nfunction hashString(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash).toString(16).slice(0, 16);\n}\n\nexport class HTTPClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly jwtCache: Map<string, JWTCacheEntry> = new Map();\n\n constructor(options: HTTPClientOptions = {}) {\n this.apiKey = options.apiKey ?? process.env['NATURAL_API_KEY'] ?? '';\n this.baseUrl = (\n options.baseUrl ??\n process.env['NATURAL_SERVER_URL'] ??\n DEFAULT_BASE_URL\n ).replace(/\\/$/, '');\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n }\n\n /**\n * Get a cached JWT or exchange API key for a new one.\n */\n private async getJwt(): Promise<string> {\n if (!this.apiKey) {\n throw new AuthenticationError();\n }\n\n // If not a sk_ntl_* key, use directly (already a JWT)\n if (!this.apiKey.startsWith('sk_ntl_')) {\n return this.apiKey;\n }\n\n // Check cache\n const cacheKey = hashString(this.apiKey);\n const cached = this.jwtCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.token;\n }\n\n // Exchange API key for JWT\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n logger.debug('Exchanging API key for JWT', { path: '/auth/api/token' });\n\n try {\n const response = await fetch(`${this.baseUrl}/auth/api/token`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const authError = new AuthenticationError(\n `Authentication failed (status=${response.status})`\n );\n logError(logger, 'JWT exchange failed', {\n error: authError,\n statusCode: response.status,\n path: '/auth/api/token',\n });\n throw authError;\n }\n\n const data = (await response.json()) as {\n accessToken: string;\n expiresIn?: number;\n };\n\n const expiresIn = data.expiresIn ?? 900; // Default 15 minutes\n const expiresAt = Date.now() + (expiresIn - 30) * 1000; // 30 second buffer\n\n this.jwtCache.set(cacheKey, { token: data.accessToken, expiresAt });\n\n return data.accessToken;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof AuthenticationError) {\n throw error;\n }\n if (error instanceof Error && error.name === 'AbortError') {\n const networkError = new NaturalError('Request timed out during authentication');\n logError(logger, 'JWT exchange network error', {\n error: networkError,\n path: '/auth/api/token',\n });\n throw networkError;\n }\n const networkError = new NaturalError(\n `Network error during authentication: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n logError(logger, 'JWT exchange network error', {\n error: networkError,\n path: '/auth/api/token',\n });\n throw networkError;\n }\n }\n\n /**\n * Build URL with query parameters.\n */\n private buildUrl(path: string, params?: Record<string, unknown>): string {\n const url = new URL(path, this.baseUrl);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n /**\n * Handle API response and throw appropriate errors.\n */\n private async handleResponse<T>(\n response: Response,\n method: string,\n path: string,\n durationMs: number\n ): Promise<T> {\n if (response.status === 401) {\n const authError = new AuthenticationError();\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: authError,\n });\n throw authError;\n }\n\n if (response.status === 429) {\n const retryAfter = response.headers.get('Retry-After');\n const rateError = new RateLimitError(\n 'Rate limit exceeded',\n retryAfter ? parseInt(retryAfter, 10) : undefined\n );\n logger.warning(`Rate limited: ${method} ${path}`, {\n method,\n path,\n statusCode: response.status,\n retryAfter,\n durationMs: Math.round(durationMs * 100) / 100,\n });\n throw rateError;\n }\n\n if (response.status >= 500) {\n const serverError = new ServerError(`Server error: ${response.status}`);\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: serverError,\n });\n throw serverError;\n }\n\n let data: unknown;\n try {\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n } catch {\n if (response.status >= 400) {\n const parseError = new NaturalError(`Request failed: ${response.status}`, {\n statusCode: response.status,\n });\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: parseError,\n });\n throw parseError;\n }\n // Success but no JSON body\n logApiCall(logger, method, path, { statusCode: response.status, durationMs });\n return {} as T;\n }\n\n if (response.status >= 400) {\n // Try JSON:API errors[] envelope first (canonical server format),\n // then fall back to flat fields for defense in depth.\n const errBody = data as Record<string, unknown>;\n const errors = Array.isArray(errBody.errors) ? errBody.errors : [];\n const firstError = (errors[0] ?? {}) as Record<string, unknown>;\n\n const errorMessage =\n (firstError.detail as string) ??\n (errBody.detail as string) ??\n (errBody.message as string) ??\n (errBody.error as string) ??\n 'Request failed';\n const errorCode = (firstError.code as string) ?? (errBody.code as string) ?? 'unknown_error';\n const requestError = new InvalidRequestError(\n `${errorMessage} (status=${response.status})`,\n errorCode\n );\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: requestError,\n });\n throw requestError;\n }\n\n // Success\n logApiCall(logger, method, path, { statusCode: response.status, durationMs });\n return data as T;\n }\n\n /**\n * Make an authenticated request.\n */\n async request<T>(method: string, path: string, options?: RequestOptions): Promise<T> {\n const jwt = await this.getJwt();\n\n const url = this.buildUrl(path, options?.params);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n logger.debug(`API request: ${method} ${path}`, {\n method,\n path,\n hasBody: !!options?.body,\n });\n\n const startTime = Date.now();\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${jwt}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `naturalpay-ts/${VERSION}`,\n };\n const toolCallHeader = getToolCallHeader();\n if (toolCallHeader) {\n headers['X-Tool-Call'] = toolCallHeader;\n }\n if (options?.headers) {\n Object.assign(headers, options.headers);\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n const durationMs = Date.now() - startTime;\n return this.handleResponse<T>(response, method, path, durationMs);\n } catch (error) {\n clearTimeout(timeoutId);\n const durationMs = Date.now() - startTime;\n\n if (\n error instanceof NaturalError ||\n error instanceof AuthenticationError ||\n error instanceof InvalidRequestError ||\n error instanceof RateLimitError ||\n error instanceof ServerError\n ) {\n throw error;\n }\n if (error instanceof Error && error.name === 'AbortError') {\n const networkError = new NaturalError('Request timed out');\n logApiCall(logger, method, path, { durationMs, error: networkError });\n throw networkError;\n }\n const networkError = new NaturalError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n logApiCall(logger, method, path, { durationMs, error: networkError });\n throw networkError;\n }\n }\n\n async get<T>(path: string, options?: Omit<RequestOptions, 'body'>): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n\n async post<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, options);\n }\n\n async put<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, options);\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n}\n","/**\n * Base resource class.\n */\n\nimport type { HTTPClient } from '../http.js';\n\nexport abstract class BaseResource {\n protected readonly http: HTTPClient;\n\n constructor(http: HTTPClient) {\n this.http = http;\n }\n}\n","/**\n * Transactions resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n Transaction,\n TransactionGetParams,\n TransactionListParams,\n TransactionListResponse,\n} from '../types/transactions.js';\nimport type { JsonApiListResponse, JsonApiResource, JsonApiSingleResponse } from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API transaction resource into a flat Transaction object.\n */\nexport function unwrapTransactionResource(resource: JsonApiResource): Transaction {\n if (resource.type !== 'transaction' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"transaction\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n transactionId: id,\n amount: Number(attributes.amount),\n currency: String(attributes.currency),\n status: String(attributes.status),\n description: attributes.description != null ? String(attributes.description) : undefined,\n memo: attributes.memo != null ? String(attributes.memo) : undefined,\n createdAt: String(attributes.createdAt),\n updatedAt: attributes.updatedAt != null ? String(attributes.updatedAt) : undefined,\n isDelegated: Boolean(attributes.isDelegated),\n customerName: attributes.customerName != null ? String(attributes.customerName) : undefined,\n customerAgentId:\n attributes.customerAgentId != null ? String(attributes.customerAgentId) : undefined,\n senderName: attributes.senderName != null ? String(attributes.senderName) : undefined,\n recipientName: attributes.recipientName != null ? String(attributes.recipientName) : undefined,\n transactionType: String(attributes.transactionType),\n category: String(attributes.category),\n direction: String(attributes.direction),\n sourcePartyId: relationships?.sourceParty?.data?.id,\n destinationPartyId: relationships?.destinationParty?.data?.id,\n sourceWalletId: relationships?.sourceWallet?.data?.id,\n destinationWalletId: relationships?.destinationWallet?.data?.id,\n instanceId: attributes.instanceId != null ? String(attributes.instanceId) : undefined,\n claimLink: attributes.claimLink != null ? String(attributes.claimLink) : undefined,\n };\n}\n\nexport class TransactionsResource extends BaseResource {\n /**\n * Get a transaction by ID.\n *\n * @param transactionId - Transaction ID (txn_xxx)\n * @param params - Optional parameters for observability\n * @returns Transaction details\n */\n async get(transactionId: string, params?: TransactionGetParams): Promise<Transaction> {\n const headers: Record<string, string> = {};\n\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, string> = {};\n if (params?.customerPartyId) {\n queryParams['partyId'] = params.customerPartyId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>(`/transactions/${transactionId}`, {\n params: Object.keys(queryParams).length > 0 ? queryParams : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" in transaction response');\n }\n\n return unwrapTransactionResource(response.data);\n }\n\n /**\n * List recent transactions.\n *\n * @param params - List parameters including agent context\n * @returns TransactionListResponse with transactions and pagination info\n */\n async list(params?: TransactionListParams): Promise<TransactionListResponse> {\n const headers: Record<string, string> = {};\n\n if (params?.agentId) {\n if (!params?.instanceId) {\n throw new InvalidRequestError('instanceId is required when agentId is provided');\n }\n headers['X-Agent-ID'] = params.agentId;\n }\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n type: params?.type,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/transactions', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in transaction list response'\n );\n }\n\n const transactions = response.data.map(unwrapTransactionResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n transactions,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n }\n}\n","/**\n * Payments resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport { unwrapTransactionResource } from './transactions.js';\nimport type { PaymentCreateParams } from '../types/payments.js';\nimport type { Transaction } from '../types/transactions.js';\nimport type { JsonApiSingleResponse, JsonApiRequestBody } from './jsonapi.js';\n\nconst PHONE_DIGITS_RE = /^\\d{10,}$/;\nconst PHONE_PLUS_RE = /^\\+\\d{7,}$/;\n\n/**\n * Validate recipient format matches backend expectations.\n * Accepted: party ID (pty_*), email (@), phone (+ prefix with digits, or 10+ digits).\n *\n * Caller must trim the value before passing it here.\n */\nfunction validateRecipient(recipient: string): void {\n if (!recipient) {\n throw new InvalidRequestError('recipient cannot be empty');\n }\n if (recipient.startsWith('pty_')) return;\n if (recipient.includes('@')) return;\n if (PHONE_PLUS_RE.test(recipient)) return;\n if (PHONE_DIGITS_RE.test(recipient)) return;\n throw new InvalidRequestError(\n 'Invalid recipient format. Expected: party ID (pty_*), email (contains @), or phone (+ prefix or 10+ digits)'\n );\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat Transaction object.\n *\n * Delegates to the shared `unwrapTransactionResource` for core field extraction,\n * then applies payment-specific overrides: relationship key mapping\n * (customerParty/counterparty), defaults, and memo mirroring.\n */\nfunction unwrapPaymentResponse(response: JsonApiSingleResponse): Transaction {\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" field in payment response');\n }\n\n const base = unwrapTransactionResource(response.data);\n const { relationships, attributes } = response.data;\n\n return {\n ...base,\n // Payment responses may omit these fields; provide sensible defaults.\n transactionType: String(attributes.transactionType ?? 'payment'),\n category: String(attributes.category ?? 'sent'),\n direction: String(attributes.direction ?? 'OUTBOUND'),\n // Mirror description into memo for payment convenience.\n memo: base.description,\n // Payments use customerParty/counterparty relationship keys,\n // falling back to the generic sourceParty/destinationParty.\n sourcePartyId: relationships?.customerParty?.data?.id ?? base.sourcePartyId,\n destinationPartyId: relationships?.counterparty?.data?.id ?? base.destinationPartyId,\n };\n}\n\nexport class PaymentsResource extends BaseResource {\n /**\n * Create a payment.\n *\n * @param params - Payment creation parameters\n * @returns Transaction object with transaction_id (txn_*), status, etc.\n */\n async create(params: PaymentCreateParams): Promise<Transaction> {\n const recipient = params.recipient.trim();\n validateRecipient(recipient);\n\n if (!Number.isInteger(params.amount) || params.amount <= 0) {\n throw new InvalidRequestError('amount must be a positive integer (minor units in cents)');\n }\n\n // Build JSON:API envelope\n const attributes: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n counterparty: recipient,\n customerPartyId: params.customerPartyId,\n };\n\n attributes['description'] = params.memo;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {\n 'Idempotency-Key': params.idempotencyKey,\n };\n if (params.agentId) {\n if (!params.instanceId) {\n throw new InvalidRequestError('instanceId is required when agentId is provided');\n }\n headers['X-Agent-ID'] = params.agentId;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.post<JsonApiSingleResponse>('/payments', {\n body,\n headers,\n });\n\n return unwrapPaymentResponse(response);\n }\n}\n","/**\n * Wallet resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n AccountBalance,\n AmountInfo,\n BalanceBreakdown,\n BalanceOptions,\n WithdrawParams,\n WithdrawResponse,\n} from '../types/wallet.js';\nimport type { JsonApiSingleResponse, JsonApiRequestBody } from './jsonapi.js';\n\n/**\n * Extract an AmountInfo from a raw attribute value.\n */\nfunction toAmountInfo(raw: unknown): AmountInfo {\n const obj = raw as Record<string, unknown> | undefined;\n return {\n amountMinor: Number(obj?.amountMinor ?? 0),\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat AccountBalance.\n * Validates the envelope structure and extracts fields explicitly.\n */\nfunction unwrapBalance(response: JsonApiSingleResponse): AccountBalance {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in wallet balance response'\n );\n }\n\n const { data } = response;\n if (data.type !== 'walletBalance' || !data.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"walletBalance\", got \"${data.type}\"`\n );\n }\n\n const { id, attributes } = data;\n const rawBreakdown = attributes.breakdown as Record<string, unknown> | undefined;\n\n const breakdown: BalanceBreakdown = {\n operatingFunded: toAmountInfo(rawBreakdown?.operatingFunded),\n operatingAdvanced: toAmountInfo(rawBreakdown?.operatingAdvanced),\n escrowFundedSettled: toAmountInfo(rawBreakdown?.escrowFundedSettled),\n escrowAdvanced: toAmountInfo(rawBreakdown?.escrowAdvanced),\n holdsOutbound: toAmountInfo(rawBreakdown?.holdsOutbound),\n };\n\n return {\n walletId: id,\n breakdown,\n available: toAmountInfo(attributes.available),\n pendingClaimAmountMinor:\n attributes.pendingClaimAmountMinor != null\n ? Number(attributes.pendingClaimAmountMinor)\n : undefined,\n pendingClaimCount:\n attributes.pendingClaimCount != null ? Number(attributes.pendingClaimCount) : undefined,\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat WithdrawResponse.\n * Server returns resource type \"withdrawal\" with id = transfer_id.\n */\nfunction unwrapWithdrawal(response: JsonApiSingleResponse): WithdrawResponse {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in withdrawal response'\n );\n }\n\n const { data } = response;\n if (data.type !== 'withdrawal' || !data.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"withdrawal\", got \"${data.type}\"`\n );\n }\n\n const { id, attributes } = data;\n\n return {\n transferId: id ?? undefined,\n instructionId: attributes.instructionId != null ? String(attributes.instructionId) : undefined,\n status: String(attributes.status),\n amount: attributes.amount != null ? Number(attributes.amount) : 0,\n currency: String(attributes.currency),\n estimatedSettlement:\n attributes.estimatedSettlement != null ? String(attributes.estimatedSettlement) : undefined,\n kycRequired: Boolean(attributes.kycRequired),\n kycStatus: attributes.kycStatus != null ? String(attributes.kycStatus) : undefined,\n kycSessionUrl: attributes.kycSessionUrl != null ? String(attributes.kycSessionUrl) : undefined,\n mfaRequired: Boolean(attributes.mfaRequired),\n mfaChallengeId:\n attributes.mfaChallengeId != null ? String(attributes.mfaChallengeId) : undefined,\n mfaExpiresAt: attributes.mfaExpiresAt != null ? String(attributes.mfaExpiresAt) : undefined,\n error: attributes.error != null ? String(attributes.error) : undefined,\n errorDetails: attributes.errorDetails != null ? String(attributes.errorDetails) : undefined,\n };\n}\n\nexport class WalletResource extends BaseResource {\n /**\n * Get current wallet balance.\n *\n * @returns AccountBalance with available, current, pending amounts\n */\n async balance(options?: BalanceOptions): Promise<AccountBalance> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n const params: Record<string, string> = {};\n if (options?.customerPartyId) {\n params['partyId'] = options.customerPartyId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>('/wallet/balance', {\n params: Object.keys(params).length > 0 ? params : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapBalance(response);\n }\n\n /**\n * Initiate a withdrawal to a linked bank account.\n *\n * @param params - Withdrawal parameters\n * @returns WithdrawResponse with transfer status (may require KYC/MFA)\n */\n async withdraw(params: WithdrawParams): Promise<WithdrawResponse> {\n if (!Number.isInteger(params.amount) || params.amount <= 0) {\n throw new InvalidRequestError('amount must be a positive integer (minor units in cents)');\n }\n\n const attributes: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n externalFundingSourceId: params.externalFundingSourceId,\n };\n if (params.description) attributes['description'] = params.description;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const response = await this.http.post<JsonApiSingleResponse>('/wallet/withdraw', {\n body,\n headers: { 'Idempotency-Key': params.idempotencyKey },\n });\n\n return unwrapWithdrawal(response);\n }\n}\n","/**\n * Agents resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n Agent,\n AgentStatus,\n AgentCreateParams,\n AgentCreateResponse,\n AgentUpdateParams,\n AgentUpdateResponse,\n AgentListParams,\n AgentListResponse,\n AgentGetOptions,\n AgentDeleteOptions,\n} from '../types/agents.js';\nimport type {\n JsonApiSingleResponse,\n JsonApiListResponse,\n JsonApiRequestBody,\n JsonApiResource,\n} from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API agent resource into a flat Agent object.\n * Validates the envelope structure and extracts fields explicitly.\n */\nfunction unwrapAgentResource(resource: JsonApiResource): Agent {\n if (resource.type !== 'agent' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"agent\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n id,\n name: String(attributes.name),\n description: attributes.description != null ? String(attributes.description) : undefined,\n status: String(attributes.status) as AgentStatus,\n partyId: relationships?.party?.data?.id ?? '',\n createdAt: attributes.createdAt != null ? String(attributes.createdAt) : undefined,\n createdBy: attributes.createdBy != null ? String(attributes.createdBy) : undefined,\n updatedAt: attributes.updatedAt != null ? String(attributes.updatedAt) : undefined,\n updatedBy: attributes.updatedBy != null ? String(attributes.updatedBy) : undefined,\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat Agent.\n */\nfunction unwrapAgent(response: JsonApiSingleResponse): Agent {\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" field in agent response');\n }\n return unwrapAgentResource(response.data);\n}\n\n/**\n * Unwrap a JSON:API list response into an AgentListResponse.\n */\nfunction unwrapAgentList(response: JsonApiListResponse): AgentListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in agent list response'\n );\n }\n\n const agents = response.data.map(unwrapAgentResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n agents,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class AgentsResource extends BaseResource {\n /**\n * List agents for the partner.\n *\n * @param params - Filter and pagination parameters\n * @returns AgentListResponse with list of agents\n */\n async list(params?: AgentListParams): Promise<AgentListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n status: params?.status,\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/agents', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgentList(response);\n }\n\n /**\n * Get agent by ID.\n *\n * @param agentId - The agent ID to retrieve (agt_xxx)\n * @returns Agent details\n */\n async get(agentId: string, options?: AgentGetOptions): Promise<Agent> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>(`/agents/${agentId}`, {\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgent(response);\n }\n\n /**\n * Create a new agent.\n *\n * @param params - Agent creation parameters\n * @returns AgentCreateResponse with created agent details\n */\n async create(params: AgentCreateParams): Promise<AgentCreateResponse> {\n const attributes: Record<string, unknown> = {\n name: params.name,\n };\n\n if (params.description) {\n attributes['description'] = params.description;\n }\n\n if (params.limits) {\n attributes['limits'] = params.limits;\n }\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.post<JsonApiSingleResponse>('/agents', {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n return unwrapAgent(response);\n }\n\n /**\n * Update an existing agent.\n *\n * @param agentId - The agent ID to update (agt_xxx)\n * @param params - Update parameters\n * @returns AgentUpdateResponse with updated agent details\n */\n async update(agentId: string, params: AgentUpdateParams): Promise<AgentUpdateResponse> {\n const attributes: Record<string, unknown> = {};\n\n if (params.name !== undefined) attributes['name'] = params.name;\n if (params.description !== undefined) attributes['description'] = params.description;\n if (params.status !== undefined) attributes['status'] = params.status;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.put<JsonApiSingleResponse>(`/agents/${agentId}`, {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n return unwrapAgent(response);\n }\n\n /**\n * Delete an agent.\n *\n * @param agentId - The agent ID to delete (agt_xxx)\n * @param options - Optional observability parameters\n */\n async delete(agentId: string, options?: AgentDeleteOptions): Promise<void> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n await this.http.delete(`/agents/${agentId}`, {\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n }\n}\n","/**\n * Agent delegations resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n AgentDelegation,\n AgentDelegationListParams,\n AgentDelegationListResponse,\n} from '../types/delegations.js';\nimport type { JsonApiSingleResponse, JsonApiListResponse, JsonApiResource } from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API agent delegation resource into a flat AgentDelegation object.\n */\nfunction unwrapAgentDelegationResource(resource: JsonApiResource): AgentDelegation {\n if (resource.type !== 'agentDelegation' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"agentDelegation\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n id,\n agentName: attributes.agentName != null ? String(attributes.agentName) : undefined,\n agentId: relationships?.agent?.data?.id ?? '',\n delegationId: relationships?.delegation?.data?.id ?? '',\n delegatorPartyId: relationships?.delegatorParty?.data?.id,\n delegateePartyId: relationships?.delegateeParty?.data?.id,\n delegatorPartyName:\n attributes.delegatorPartyName != null ? String(attributes.delegatorPartyName) : undefined,\n delegateePartyName:\n attributes.delegateePartyName != null ? String(attributes.delegateePartyName) : undefined,\n permissions: Array.isArray(attributes.permissions) ? (attributes.permissions as string[]) : [],\n limits: attributes.limits != null ? (attributes.limits as Record<string, number>) : undefined,\n expiresAt: attributes.expiresAt != null ? String(attributes.expiresAt) : undefined,\n createdAt: String(attributes.createdAt),\n createdBy: attributes.createdBy != null ? String(attributes.createdBy) : undefined,\n updatedAt: String(attributes.updatedAt),\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat AgentDelegation.\n */\nfunction unwrapAgentDelegation(response: JsonApiSingleResponse): AgentDelegation {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in agent delegation response'\n );\n }\n return unwrapAgentDelegationResource(response.data);\n}\n\n/**\n * Unwrap a JSON:API list response into an AgentDelegationListResponse.\n */\nfunction unwrapAgentDelegationList(response: JsonApiListResponse): AgentDelegationListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in agent delegation list response'\n );\n }\n\n const agentDelegations = response.data.map(unwrapAgentDelegationResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n agentDelegations,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class DelegationsResource extends BaseResource {\n /**\n * List agent delegations with optional filters.\n *\n * @param params - Filter parameters\n * @returns AgentDelegationListResponse with list of agent delegations\n */\n async list(params?: AgentDelegationListParams): Promise<AgentDelegationListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n delegationId: params?.delegationId,\n agentId: params?.agentId,\n delegatorPartyId: params?.delegatorPartyId,\n delegateePartyId: params?.delegateePartyId,\n includeRevoked: params?.includeRevoked,\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/agent-delegations', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgentDelegationList(response);\n }\n\n /**\n * Get agent delegation by ID.\n *\n * @param agentDelegationId - The agent delegation handle (adl_xxx)\n * @returns AgentDelegation details\n */\n async get(agentDelegationId: string): Promise<AgentDelegation> {\n const response = await this.http.get<JsonApiSingleResponse>(\n `/agent-delegations/${agentDelegationId}`\n );\n return unwrapAgentDelegation(response);\n }\n}\n","/**\n * Customers resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type { JsonApiListResponse, JsonApiResource } from './jsonapi.js';\nimport type { Customer, CustomerListParams, CustomerListResponse } from '../types/customers.js';\n\n/**\n * Unwrap a single JSON:API customer resource into a flat Customer.\n */\nconst VALID_CUSTOMER_TYPES = new Set(['party', 'delegationInvitation'] as const);\nconst VALID_WALLET_ACCESS = new Set(['granted', 'denied', 'noWallet'] as const);\n\ntype CustomerType = 'party' | 'delegationInvitation';\ntype WalletAccess = 'granted' | 'denied' | 'noWallet';\n\nfunction isCustomerType(value: string): value is CustomerType {\n return VALID_CUSTOMER_TYPES.has(value as CustomerType);\n}\n\nfunction isWalletAccess(value: unknown): value is WalletAccess {\n return typeof value === 'string' && VALID_WALLET_ACCESS.has(value as WalletAccess);\n}\n\nfunction unwrapCustomerResource(resource: JsonApiResource): Customer {\n if (!isCustomerType(resource.type) || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"party\" or \"delegationInvitation\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes } = resource;\n\n const party =\n typeof attributes.party === 'object' && attributes.party != null\n ? {\n id: String((attributes.party as Record<string, unknown>).id),\n name: String((attributes.party as Record<string, unknown>).name),\n email:\n typeof (attributes.party as Record<string, unknown>).email === 'string'\n ? String((attributes.party as Record<string, unknown>).email)\n : undefined,\n }\n : undefined;\n\n return {\n id,\n type: resource.type,\n party,\n email: typeof attributes.email === 'string' ? attributes.email : undefined,\n status: typeof attributes.status === 'string' ? attributes.status : '',\n permissions: Array.isArray(attributes.permissions) ? attributes.permissions : [],\n createdAt: typeof attributes.createdAt === 'string' ? attributes.createdAt : '',\n walletAvailableMinor:\n typeof attributes.walletAvailableMinor === 'number'\n ? attributes.walletAvailableMinor\n : undefined,\n walletAvailableDollars:\n typeof attributes.walletAvailableDollars === 'string'\n ? attributes.walletAvailableDollars\n : undefined,\n walletAccess: isWalletAccess(attributes.walletAccess) ? attributes.walletAccess : 'denied',\n };\n}\n\n/**\n * Unwrap a JSON:API list response into a CustomerListResponse.\n */\nfunction unwrapCustomerList(response: JsonApiListResponse): CustomerListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in customer list response'\n );\n }\n\n const pagination = response.meta?.pagination ?? {};\n\n return {\n items: response.data.map(unwrapCustomerResource),\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class CustomersResource extends BaseResource {\n /**\n * List customers who have delegated access to the partner.\n *\n * @param params - Pagination parameters\n * @returns CustomerListResponse with items, hasMore, nextCursor\n */\n async list(params?: CustomerListParams): Promise<CustomerListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n limit: params?.limit,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/customers', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapCustomerList(response);\n }\n}\n","/**\n * Natural Payments SDK client.\n */\n\nimport { HTTPClient, type HTTPClientOptions } from './http.js';\nimport { PaymentsResource } from './resources/payments.js';\nimport { WalletResource } from './resources/wallet.js';\nimport { TransactionsResource } from './resources/transactions.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { DelegationsResource } from './resources/delegations.js';\nimport { CustomersResource } from './resources/customers.js';\n\nexport interface NaturalClientOptions extends HTTPClientOptions {}\n\n/**\n * Natural Payments SDK client.\n *\n * @example\n * ```typescript\n * import { NaturalClient } from 'naturalpay';\n *\n * const client = new NaturalClient({ apiKey: 'sk_ntl_sandbox_xxx' });\n *\n * // Create a payment\n * const payment = await client.payments.create({\n * agentId: 'agt_xxx',\n * amount: 5000,\n * customerPartyId: 'pty_xxx',\n * recipient: 'alice@example.com',\n * memo: 'For consulting',\n * idempotencyKey: 'unique-key-for-this-payment',\n * });\n *\n * // Check balance\n * const balance = await client.wallet.balance();\n * ```\n */\nexport class NaturalClient {\n private readonly http: HTTPClient;\n\n /** Payments API resource. */\n readonly payments: PaymentsResource;\n\n /** Wallet API resource for balance and withdrawals. */\n readonly wallet: WalletResource;\n\n /** Transactions API resource. */\n readonly transactions: TransactionsResource;\n\n /** Agents API resource for managing agents. */\n readonly agents: AgentsResource;\n\n /** Agent delegations API resource. */\n readonly delegations: DelegationsResource;\n\n /** Customers API resource for listing parties who delegated access. */\n readonly customers: CustomersResource;\n\n /**\n * Initialize the Natural client.\n *\n * @param options - Client configuration options\n * @param options.apiKey - API key (defaults to NATURAL_API_KEY env var)\n * @param options.baseUrl - API base URL (defaults to https://api.natural.co)\n * @param options.timeout - Request timeout in milliseconds (default: 30000)\n */\n constructor(options: NaturalClientOptions = {}) {\n this.http = new HTTPClient(options);\n\n this.payments = new PaymentsResource(this.http);\n this.wallet = new WalletResource(this.http);\n this.transactions = new TransactionsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.delegations = new DelegationsResource(this.http);\n this.customers = new CustomersResource(this.http);\n }\n}\n","/**\n * Transaction types.\n */\n\n/**\n * Filter for transaction types in list operations.\n */\nexport enum TransactionTypeFilter {\n PAYMENT = 'payment',\n TRANSFER = 'transfer',\n ALL = 'all',\n}\n\nexport interface Transaction {\n transactionId: string;\n amount: number;\n currency: string;\n status: string;\n description?: string;\n memo?: string;\n createdAt: string;\n updatedAt?: string;\n isDelegated: boolean;\n customerName?: string;\n customerAgentId?: string;\n senderName?: string;\n recipientName?: string;\n transactionType: string;\n category: string;\n direction: string;\n sourcePartyId?: string;\n destinationPartyId?: string;\n sourceWalletId?: string;\n destinationWalletId?: string;\n /** Internal instance ID (ins_xxx) assigned by server. */\n instanceId?: string;\n /** Claim link URL for unclaimed payments. */\n claimLink?: string;\n}\n\nexport interface TransactionGetParams {\n /** Customer party ID (pty_xxx) for delegated transaction lookup. */\n customerPartyId?: string;\n /** Developer's session/conversation ID for observability grouping. */\n instanceId?: string;\n}\n\nexport interface TransactionListParams {\n limit?: number;\n cursor?: string;\n agentId?: string;\n /** Filter by transaction type (payment, transfer, or all) */\n type?: TransactionTypeFilter;\n /** Developer's session/conversation ID for observability grouping. */\n instanceId?: string;\n}\n\nexport interface TransactionListResponse {\n transactions: Transaction[];\n hasMore: boolean;\n nextCursor?: string | null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/logging.ts","../src/tool-call-context.ts","../src/http.ts","../src/resources/base.ts","../src/resources/transactions.ts","../src/resources/payments.ts","../src/resources/wallet.ts","../src/resources/agents.ts","../src/resources/delegations.ts","../src/resources/customers.ts","../src/client.ts","../src/types/transactions.ts"],"names":["AsyncLocalStorage","logger","networkError","TransactionTypeFilter"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Natural Payments SDK error classes.\n */\n\n/**\n * Base error for all Natural SDK errors.\n */\nexport class NaturalError extends Error {\n readonly statusCode?: number;\n readonly code?: string;\n\n constructor(message: string, options?: { statusCode?: number; code?: string }) {\n super(message);\n this.name = 'NaturalError';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Invalid or missing API key.\n */\nexport class AuthenticationError extends NaturalError {\n constructor(message = 'Invalid or missing API key') {\n super(message, { statusCode: 401, code: 'authentication_error' });\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Malformed request parameters.\n */\nexport class InvalidRequestError extends NaturalError {\n constructor(message: string, code = 'invalid_request') {\n super(message, { statusCode: 400, code });\n this.name = 'InvalidRequestError';\n }\n}\n\n/**\n * Payment-specific failure.\n */\nexport class PaymentError extends NaturalError {\n constructor(message: string, code = 'payment_error') {\n super(message, { statusCode: 400, code });\n this.name = 'PaymentError';\n }\n}\n\n/**\n * Not enough balance for payment.\n */\nexport class InsufficientFundsError extends PaymentError {\n constructor(message = 'Insufficient funds') {\n super(message, 'insufficient_funds');\n this.name = 'InsufficientFundsError';\n }\n}\n\n/**\n * Invalid recipient.\n */\nexport class RecipientNotFoundError extends PaymentError {\n constructor(message = 'Recipient not found') {\n super(message, 'recipient_not_found');\n this.name = 'RecipientNotFoundError';\n }\n}\n\n/**\n * Too many requests.\n */\nexport class RateLimitError extends NaturalError {\n readonly retryAfter?: number;\n\n constructor(message = 'Rate limit exceeded', retryAfter?: number) {\n super(message, { statusCode: 429, code: 'rate_limit_exceeded' });\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Internal server error.\n */\nexport class ServerError extends NaturalError {\n constructor(message = 'Internal server error') {\n super(message, { statusCode: 500, code: 'server_error' });\n this.name = 'ServerError';\n }\n}\n","/**\n * Single source of truth for the SDK version string.\n */\nexport const VERSION = '0.1.3';\n","/**\n * Structured logging for Natural Payments SDK.\n *\n * Supports two modes:\n * 1. Plain text logging (default, for local development)\n * 2. JSON logging with Datadog correlation (when NATURAL_LOG_FORMAT=json)\n *\n * Features:\n * - Source info: file, line, function on every log (for error grouping)\n * - Context binding for request_id, agent_id, instance_id\n * - Datadog trace correlation fields\n * - AsyncLocalStorage for proper async context isolation\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport { VERSION } from './version.js';\n\n// Log levels (matching standard levels)\nexport type LogLevel = 'debug' | 'info' | 'warning' | 'error';\n\nconst LOG_LEVEL_VALUES: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warning: 30,\n error: 40,\n};\n\n// AsyncLocalStorage for proper async context isolation\nconst asyncContext = new AsyncLocalStorage<Record<string, unknown>>();\n\n// Fallback global context for environments where AsyncLocalStorage isn't used\nlet globalContext: Record<string, unknown> = {};\n\n/**\n * Get the current logging context.\n * Uses AsyncLocalStorage if available, falls back to global context.\n */\nexport function getContext(): Record<string, unknown> {\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n return { ...asyncStore };\n }\n return { ...globalContext };\n}\n\n/**\n * Sanitize a string for safe logging to prevent log injection.\n */\nfunction sanitizeString(value: string): string {\n let sanitized = '';\n for (const char of value) {\n if (char === '\\r' || char === '\\n') {\n sanitized += '\\\\n';\n } else if (char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127) {\n // Control characters - escape them\n sanitized += `\\\\x${char.charCodeAt(0).toString(16).padStart(2, '0')}`;\n } else {\n sanitized += char;\n }\n }\n // Truncate overly long values to prevent log flooding\n const maxLength = 1000;\n if (sanitized.length > maxLength) {\n sanitized = sanitized.slice(0, maxLength) + '...[truncated]';\n }\n return sanitized;\n}\n\n/**\n * Sanitize a value for safe logging to prevent log injection.\n *\n * Recursively sanitizes strings in objects and arrays.\n * Removes/escapes control characters, newlines, and other potentially\n * dangerous sequences that could be used for log injection attacks.\n */\nfunction sanitizeLogValue(value: unknown, depth = 0): unknown {\n // Prevent infinite recursion on deeply nested objects\n const maxDepth = 10;\n if (depth > maxDepth) {\n return '[max depth exceeded]';\n }\n\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n return sanitizeString(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeLogValue(item, depth + 1));\n }\n\n if (typeof value === 'object') {\n const sanitized: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n const sanitizedKey = sanitizeString(key);\n sanitized[sanitizedKey] = sanitizeLogValue(val, depth + 1);\n }\n return sanitized;\n }\n\n // For functions, symbols, etc. - return type description\n return `[${typeof value}]`;\n}\n\n/**\n * Bind additional context to current scope (e.g., request_id, agent_id).\n *\n * Values are sanitized to prevent log injection attacks.\n * Updates both AsyncLocalStorage (if active) and global context.\n *\n * @example\n * bindContext({ requestId: 'req_123', agentId: 'agt_456' });\n * logger.info('Processing payment'); // Will include requestId and agentId\n */\nexport function bindContext(context: Record<string, unknown>): void {\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n sanitized[key] = sanitizeLogValue(value);\n }\n\n // Update AsyncLocalStorage if active\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n Object.assign(asyncStore, sanitized);\n }\n\n // Always update global context as fallback\n globalContext = { ...globalContext, ...sanitized };\n}\n\n/**\n * Clear all bound context.\n */\nexport function clearContext(): void {\n const asyncStore = asyncContext.getStore();\n if (asyncStore) {\n for (const key of Object.keys(asyncStore)) {\n delete asyncStore[key];\n }\n }\n globalContext = {};\n}\n\n/**\n * Run a function with isolated logging context.\n *\n * Context bound within the callback is isolated from other async operations.\n * This is the recommended way to set context for request handling.\n *\n * @example\n * await runWithContext({ requestId: 'req_123' }, async () => {\n * logger.info('Processing request'); // Includes requestId\n * await doAsyncWork();\n * logger.info('Request complete'); // Still includes requestId\n * });\n */\nexport function runWithContext<T>(\n context: Record<string, unknown>,\n fn: () => T | Promise<T>\n): T | Promise<T> {\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n sanitized[key] = sanitizeLogValue(value);\n }\n return asyncContext.run(sanitized, fn);\n}\n\n// Logging configuration\ninterface LoggingConfig {\n level: LogLevel;\n jsonFormat: boolean;\n serviceName: string;\n environment: string;\n}\n\nconst loggingConfig: LoggingConfig = {\n level: (process.env['NATURAL_LOG_LEVEL']?.toLowerCase() as LogLevel) || 'info',\n jsonFormat: process.env['NATURAL_LOG_FORMAT']?.toLowerCase() === 'json',\n serviceName: 'naturalpay-sdk',\n environment: process.env['NATURAL_ENV'] || process.env['DD_ENV'] || 'development',\n};\n\n/**\n * Configure logging for the Natural SDK.\n *\n * @param options - Logging configuration options\n * @param options.level - Log level (debug, info, warning, error)\n * @param options.jsonFormat - Use JSON format (default: auto-detect from NATURAL_LOG_FORMAT env var)\n * @param options.serviceName - Service name for structured logs\n *\n * Environment variables:\n * - NATURAL_LOG_LEVEL: Override log level (DEBUG, INFO, WARNING, ERROR)\n * - NATURAL_LOG_FORMAT: Set to \"json\" for JSON output, \"text\" for plain text\n */\nexport function configureLogging(options?: {\n level?: LogLevel;\n jsonFormat?: boolean;\n serviceName?: string;\n}): void {\n if (options?.level) {\n loggingConfig.level = options.level;\n }\n if (options?.jsonFormat !== undefined) {\n loggingConfig.jsonFormat = options.jsonFormat;\n }\n if (options?.serviceName) {\n loggingConfig.serviceName = options.serviceName;\n }\n}\n\n/**\n * Get source location information from stack trace.\n */\nfunction getSourceInfo(): { file: string; line: number; function: string } {\n const stack = new Error().stack;\n if (!stack) {\n return { file: 'unknown', line: 0, function: 'unknown' };\n }\n\n // Parse stack trace - skip the first 3 lines (Error, getSourceInfo, formatLogRecord/log)\n const lines = stack.split('\\n');\n const callerLine = lines[4] || lines[3] || '';\n\n // Match patterns like \"at functionName (/path/to/file.ts:123:45)\" or \"at /path/to/file.ts:123:45\"\n const match = callerLine.match(/at\\s+(?:(.+?)\\s+\\()?(.*?):(\\d+):\\d+\\)?/);\n if (match) {\n return {\n function: match[1] || 'anonymous',\n file: match[2] || 'unknown',\n line: parseInt(match[3] || '0', 10),\n };\n }\n\n return { file: 'unknown', line: 0, function: 'unknown' };\n}\n\ninterface LogRecord {\n timestamp: string;\n level: string;\n logger: string;\n message: string;\n source: { file: string; line: number; function: string };\n service: string;\n environment: string;\n version: string;\n [key: string]: unknown;\n}\n\n/**\n * Format a log record as JSON.\n */\nfunction formatJsonLog(\n level: LogLevel,\n loggerName: string,\n message: string,\n extra?: Record<string, unknown>\n): string {\n const record: LogRecord = {\n timestamp: new Date().toISOString(),\n level: level.toUpperCase(),\n logger: loggerName,\n message,\n source: getSourceInfo(),\n service: loggingConfig.serviceName,\n environment: loggingConfig.environment,\n version: VERSION,\n ...getContext(),\n ...extra,\n };\n\n // Add Datadog trace correlation if available\n const ddTraceId = process.env['DD_TRACE_ID'];\n const ddSpanId = process.env['DD_SPAN_ID'];\n if (ddTraceId) {\n record['dd.trace_id'] = ddTraceId;\n record['dd.span_id'] = ddSpanId;\n record['dd.service'] = loggingConfig.serviceName;\n record['dd.version'] = VERSION;\n record['dd.env'] = loggingConfig.environment;\n }\n\n return JSON.stringify(record);\n}\n\n/**\n * Format a log record as plain text.\n */\nfunction formatTextLog(\n level: LogLevel,\n loggerName: string,\n message: string,\n extra?: Record<string, unknown>\n): string {\n const contextEntries = Object.entries({ ...getContext(), ...extra });\n const contextStr =\n contextEntries.length > 0 ? ` [${contextEntries.map(([k, v]) => `${k}=${v}`).join(', ')}]` : '';\n\n return `${level.toUpperCase().padEnd(8)} ${loggerName}: ${message}${contextStr}`;\n}\n\n/**\n * Logger instance for a specific module/context.\n */\nexport class Logger {\n constructor(private readonly name: string) {}\n\n private log(level: LogLevel, message: string, extra?: Record<string, unknown>): void {\n if (LOG_LEVEL_VALUES[level] < LOG_LEVEL_VALUES[loggingConfig.level]) {\n return;\n }\n\n const formatted = loggingConfig.jsonFormat\n ? formatJsonLog(level, this.name, message, extra)\n : formatTextLog(level, this.name, message, extra);\n\n // Use stderr for logs (best practice for CLI tools)\n if (level === 'error') {\n console.error(formatted);\n } else if (level === 'warning') {\n console.warn(formatted);\n } else {\n console.error(formatted); // All logs to stderr\n }\n }\n\n debug(message: string, extra?: Record<string, unknown>): void {\n this.log('debug', message, extra);\n }\n\n info(message: string, extra?: Record<string, unknown>): void {\n this.log('info', message, extra);\n }\n\n warning(message: string, extra?: Record<string, unknown>): void {\n this.log('warning', message, extra);\n }\n\n warn(message: string, extra?: Record<string, unknown>): void {\n this.warning(message, extra);\n }\n\n error(message: string, extra?: Record<string, unknown>): void {\n this.log('error', message, extra);\n }\n}\n\n/**\n * Get a logger for the given module name.\n *\n * @param name - Module name (e.g., 'naturalpay.http')\n * @returns Logger instance\n *\n * @example\n * const logger = getLogger('naturalpay.payments');\n * logger.info('Payment initiated', { amount: 10000 });\n */\nexport function getLogger(name: string): Logger {\n if (!name.startsWith('naturalpay')) {\n name = `naturalpay.${name}`;\n }\n return new Logger(name);\n}\n\n// Helper functions for common logging patterns\n\n/**\n * Log an error with full context and exception info.\n */\nexport function logError(\n logger: Logger,\n message: string,\n options?: {\n error?: Error;\n statusCode?: number;\n code?: string;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = { ...options };\n\n if (options?.error) {\n extra['errorType'] = options.error.name;\n extra['errorMessage'] = options.error.message;\n if (options.error.stack) {\n extra['errorStack'] = options.error.stack.split('\\n').slice(0, 5).join('\\n');\n }\n delete extra['error'];\n }\n\n logger.error(message, extra);\n}\n\n/**\n * Log an API call with standard fields.\n */\nexport function logApiCall(\n logger: Logger,\n method: string,\n path: string,\n options?: {\n statusCode?: number;\n durationMs?: number;\n error?: Error;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = {\n method,\n path,\n ...options,\n };\n\n if (options?.statusCode) {\n extra['statusCode'] = options.statusCode;\n }\n if (options?.durationMs !== undefined) {\n extra['durationMs'] = Math.round(options.durationMs * 100) / 100;\n }\n\n if (options?.error) {\n logError(logger, `API call failed: ${method} ${path}`, extra);\n } else if (options?.statusCode && options.statusCode >= 400) {\n logger.warning(`API call error: ${method} ${path} -> ${options.statusCode}`, extra);\n } else {\n logger.info(`API call: ${method} ${path} -> ${options?.statusCode}`, extra);\n }\n}\n\n/**\n * Log an MCP tool invocation.\n */\nexport function logToolCall(\n logger: Logger,\n toolName: string,\n options?: {\n success?: boolean;\n durationMs?: number;\n error?: Error;\n [key: string]: unknown;\n }\n): void {\n const extra: Record<string, unknown> = {\n toolName,\n ...options,\n };\n\n if (options?.durationMs !== undefined) {\n extra['durationMs'] = Math.round(options.durationMs * 100) / 100;\n }\n\n if (options?.error) {\n logError(logger, `Tool call failed: ${toolName}`, extra);\n } else if (options?.success === false) {\n logger.warning(`Tool call returned error: ${toolName}`, extra);\n } else {\n logger.info(`Tool call: ${toolName}`, extra);\n }\n}\n","/**\n * Tool call context for MCP server → HTTP layer communication.\n *\n * The MCP server sets tool call data (name + arguments) before invoking SDK\n * methods. The HTTP layer reads it and sends the X-Tool-Call header to the BFF\n * for audit/observability. Direct SDK users never interact with this module.\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\ninterface ToolCallData {\n tool: string;\n arguments: Record<string, unknown>;\n timestamp: string;\n}\n\nconst toolCallStorage = new AsyncLocalStorage<ToolCallData>();\n\n/**\n * Get the base64-encoded X-Tool-Call header value, or undefined if not in MCP context.\n */\nexport function getToolCallHeader(): string | undefined {\n const data = toolCallStorage.getStore();\n if (!data) return undefined;\n return btoa(JSON.stringify(data));\n}\n\n/**\n * Run a function within a tool call context. The HTTP layer will automatically\n * pick up the tool call data and send it as the X-Tool-Call header.\n */\nexport function runWithToolCall<T>(name: string, args: Record<string, unknown>, fn: () => T): T {\n return toolCallStorage.run(\n {\n tool: name,\n arguments: args,\n timestamp: new Date().toISOString(),\n },\n fn\n );\n}\n","/**\n * HTTP client for Natural Server API with JWT caching.\n */\n\nimport {\n AuthenticationError,\n InvalidRequestError,\n NaturalError,\n RateLimitError,\n ServerError,\n} from './errors.js';\nimport { getLogger, logApiCall, logError } from './logging.js';\nimport { getToolCallHeader } from './tool-call-context.js';\nimport { VERSION } from './version.js';\n\nconst logger = getLogger('http');\n\nconst DEFAULT_BASE_URL = 'https://api.natural.co';\nconst DEFAULT_TIMEOUT = 30000;\n\nconst API_KEY_PREFIX_REGEX = /^sk_ntl_(dev|sandbox|prod)_/;\n\n/**\n * Parse an API key and return its environment label.\n *\n * Accepts keys matching `sk_ntl_(dev|sandbox|prod)_*`. Throws\n * `InvalidRequestError` for anything else. The return type is a narrowed\n * literal union so callers can discriminate on the env without a second\n * parse.\n */\nexport function parseApiKeyEnv(key: string): 'dev' | 'sandbox' | 'prod' {\n const match = API_KEY_PREFIX_REGEX.exec(key);\n if (match) {\n return match[1] as 'dev' | 'sandbox' | 'prod';\n }\n const preview = key.length > 16 ? `${key.slice(0, 16)}...` : key;\n throw new InvalidRequestError(\n `Invalid API key prefix. Expected a key starting with 'sk_ntl_dev_', ` +\n `'sk_ntl_sandbox_', or 'sk_ntl_prod_'. Got: '${preview}'`\n );\n}\n\n/**\n * Validate that a base URL uses HTTPS, with a localhost auto-allow and an\n * `NATURAL_ALLOW_HTTP=1` escape hatch for non-localhost plaintext hosts.\n *\n * Throws `InvalidRequestError` if the URL is not HTTPS and neither escape\n * hatch applies. Runs at client construction, not per-request.\n */\nexport function validateBaseUrl(baseUrl: string): void {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n throw new InvalidRequestError(`Invalid baseUrl: '${baseUrl}'. Must be a valid absolute URL.`);\n }\n if (url.protocol === 'https:') {\n return;\n }\n // url.hostname for IPv6 may return either \"::1\" or \"[::1]\" depending on\n // the runtime; accept both forms.\n const host = url.hostname;\n if (host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]') {\n return;\n }\n const allowHttp = process.env['NATURAL_ALLOW_HTTP'];\n if (allowHttp && allowHttp !== '0' && allowHttp.toLowerCase() !== 'false') {\n return;\n }\n throw new InvalidRequestError(\n `baseUrl must use HTTPS (got '${baseUrl}'). To allow plaintext HTTP for development, set NATURAL_ALLOW_HTTP=1 or use a localhost host.`\n );\n}\n\nexport interface HTTPClientOptions {\n apiKey?: string;\n baseUrl?: string;\n timeout?: number;\n}\n\ninterface JWTCacheEntry {\n token: string;\n expiresAt: number;\n}\n\ninterface RequestOptions {\n body?: Record<string, unknown>;\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n/**\n * Hash a string using a simple hash function (for cache keys).\n */\nfunction hashString(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash).toString(16).slice(0, 16);\n}\n\nexport class HTTPClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly jwtCache: Map<string, JWTCacheEntry> = new Map();\n\n constructor(options: HTTPClientOptions = {}) {\n this.apiKey = options.apiKey ?? process.env['NATURAL_API_KEY'] ?? '';\n this.baseUrl = (\n options.baseUrl ??\n process.env['NATURAL_SERVER_URL'] ??\n DEFAULT_BASE_URL\n ).replace(/\\/$/, '');\n validateBaseUrl(this.baseUrl);\n // Prefix validation runs only when an apiKey was actually resolved.\n // Empty means the caller relies on NATURAL_API_KEY being populated\n // later in the process lifetime; the first API call then raises\n // AuthenticationError through the existing unauthenticated-request path.\n if (this.apiKey) {\n parseApiKeyEnv(this.apiKey);\n }\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n }\n\n /**\n * Get a cached JWT or exchange API key for a new one.\n */\n private async getJwt(): Promise<string> {\n if (!this.apiKey) {\n throw new AuthenticationError();\n }\n\n // Check cache\n const cacheKey = hashString(this.apiKey);\n const cached = this.jwtCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.token;\n }\n\n // Exchange API key for JWT\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n logger.debug('Exchanging API key for JWT', { path: '/auth/api/token' });\n\n try {\n const response = await fetch(`${this.baseUrl}/auth/api/token`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const authError = new AuthenticationError(\n `Authentication failed (status=${response.status})`\n );\n logError(logger, 'JWT exchange failed', {\n error: authError,\n statusCode: response.status,\n path: '/auth/api/token',\n });\n throw authError;\n }\n\n const data = (await response.json()) as {\n accessToken: string;\n expiresIn?: number;\n };\n\n const expiresIn = data.expiresIn ?? 900; // Default 15 minutes\n const expiresAt = Date.now() + (expiresIn - 30) * 1000; // 30 second buffer\n\n this.jwtCache.set(cacheKey, { token: data.accessToken, expiresAt });\n\n return data.accessToken;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof AuthenticationError) {\n throw error;\n }\n if (error instanceof Error && error.name === 'AbortError') {\n const networkError = new NaturalError('Request timed out during authentication');\n logError(logger, 'JWT exchange network error', {\n error: networkError,\n path: '/auth/api/token',\n });\n throw networkError;\n }\n const networkError = new NaturalError(\n `Network error during authentication: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n logError(logger, 'JWT exchange network error', {\n error: networkError,\n path: '/auth/api/token',\n });\n throw networkError;\n }\n }\n\n /**\n * Build URL with query parameters.\n */\n private buildUrl(path: string, params?: Record<string, unknown>): string {\n const url = new URL(path, this.baseUrl);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n /**\n * Handle API response and throw appropriate errors.\n */\n private async handleResponse<T>(\n response: Response,\n method: string,\n path: string,\n durationMs: number\n ): Promise<T> {\n if (response.status === 401) {\n const authError = new AuthenticationError();\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: authError,\n });\n throw authError;\n }\n\n if (response.status === 429) {\n const retryAfter = response.headers.get('Retry-After');\n const rateError = new RateLimitError(\n 'Rate limit exceeded',\n retryAfter ? parseInt(retryAfter, 10) : undefined\n );\n logger.warning(`Rate limited: ${method} ${path}`, {\n method,\n path,\n statusCode: response.status,\n retryAfter,\n durationMs: Math.round(durationMs * 100) / 100,\n });\n throw rateError;\n }\n\n if (response.status >= 500) {\n const serverError = new ServerError(`Server error: ${response.status}`);\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: serverError,\n });\n throw serverError;\n }\n\n let data: unknown;\n try {\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n } catch {\n if (response.status >= 400) {\n const parseError = new NaturalError(`Request failed: ${response.status}`, {\n statusCode: response.status,\n });\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: parseError,\n });\n throw parseError;\n }\n // Success but no JSON body\n logApiCall(logger, method, path, { statusCode: response.status, durationMs });\n return {} as T;\n }\n\n if (response.status >= 400) {\n // Try JSON:API errors[] envelope first (canonical server format),\n // then fall back to flat fields for defense in depth.\n const errBody = data as Record<string, unknown>;\n const errors = Array.isArray(errBody.errors) ? errBody.errors : [];\n const firstError = (errors[0] ?? {}) as Record<string, unknown>;\n\n const errorMessage =\n (firstError.detail as string) ??\n (errBody.detail as string) ??\n (errBody.message as string) ??\n (errBody.error as string) ??\n 'Request failed';\n const errorCode = (firstError.code as string) ?? (errBody.code as string) ?? 'unknown_error';\n const requestError = new InvalidRequestError(\n `${errorMessage} (status=${response.status})`,\n errorCode\n );\n logApiCall(logger, method, path, {\n statusCode: response.status,\n durationMs,\n error: requestError,\n });\n throw requestError;\n }\n\n // Success\n logApiCall(logger, method, path, { statusCode: response.status, durationMs });\n return data as T;\n }\n\n /**\n * Make an authenticated request.\n */\n async request<T>(method: string, path: string, options?: RequestOptions): Promise<T> {\n const jwt = await this.getJwt();\n\n const url = this.buildUrl(path, options?.params);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n logger.debug(`API request: ${method} ${path}`, {\n method,\n path,\n hasBody: !!options?.body,\n });\n\n const startTime = Date.now();\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${jwt}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `naturalpay-ts/${VERSION}`,\n };\n const toolCallHeader = getToolCallHeader();\n if (toolCallHeader) {\n headers['X-Tool-Call'] = toolCallHeader;\n }\n if (options?.headers) {\n Object.assign(headers, options.headers);\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n const durationMs = Date.now() - startTime;\n return this.handleResponse<T>(response, method, path, durationMs);\n } catch (error) {\n clearTimeout(timeoutId);\n const durationMs = Date.now() - startTime;\n\n if (\n error instanceof NaturalError ||\n error instanceof AuthenticationError ||\n error instanceof InvalidRequestError ||\n error instanceof RateLimitError ||\n error instanceof ServerError\n ) {\n throw error;\n }\n if (error instanceof Error && error.name === 'AbortError') {\n const networkError = new NaturalError('Request timed out');\n logApiCall(logger, method, path, { durationMs, error: networkError });\n throw networkError;\n }\n const networkError = new NaturalError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n logApiCall(logger, method, path, { durationMs, error: networkError });\n throw networkError;\n }\n }\n\n async get<T>(path: string, options?: Omit<RequestOptions, 'body'>): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n\n async post<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, options);\n }\n\n async put<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, options);\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n}\n","/**\n * Base resource class.\n */\n\nimport type { HTTPClient } from '../http.js';\n\nexport abstract class BaseResource {\n protected readonly http: HTTPClient;\n\n constructor(http: HTTPClient) {\n this.http = http;\n }\n}\n","/**\n * Transactions resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n Transaction,\n TransactionGetParams,\n TransactionListParams,\n TransactionListResponse,\n} from '../types/transactions.js';\nimport type { JsonApiListResponse, JsonApiResource, JsonApiSingleResponse } from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API transaction resource into a flat Transaction object.\n */\nexport function unwrapTransactionResource(resource: JsonApiResource): Transaction {\n if (resource.type !== 'transaction' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"transaction\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n transactionId: id,\n amount: Number(attributes.amount),\n currency: String(attributes.currency),\n status: String(attributes.status),\n description: attributes.description != null ? String(attributes.description) : undefined,\n memo: attributes.memo != null ? String(attributes.memo) : undefined,\n createdAt: String(attributes.createdAt),\n updatedAt: attributes.updatedAt != null ? String(attributes.updatedAt) : undefined,\n isDelegated: Boolean(attributes.isDelegated),\n customerName: attributes.customerName != null ? String(attributes.customerName) : undefined,\n customerAgentId:\n attributes.customerAgentId != null ? String(attributes.customerAgentId) : undefined,\n senderName: attributes.senderName != null ? String(attributes.senderName) : undefined,\n recipientName: attributes.recipientName != null ? String(attributes.recipientName) : undefined,\n transactionType: String(attributes.transactionType),\n category: String(attributes.category),\n direction: String(attributes.direction),\n sourcePartyId: relationships?.sourceParty?.data?.id,\n destinationPartyId: relationships?.destinationParty?.data?.id,\n sourceWalletId: relationships?.sourceWallet?.data?.id,\n destinationWalletId: relationships?.destinationWallet?.data?.id,\n instanceId: attributes.instanceId != null ? String(attributes.instanceId) : undefined,\n claimLink: attributes.claimLink != null ? String(attributes.claimLink) : undefined,\n };\n}\n\nexport class TransactionsResource extends BaseResource {\n /**\n * Get a transaction by ID.\n *\n * @param transactionId - Transaction ID (txn_xxx)\n * @param params - Optional parameters for observability\n * @returns Transaction details\n */\n async get(transactionId: string, params?: TransactionGetParams): Promise<Transaction> {\n const headers: Record<string, string> = {};\n\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, string> = {};\n if (params?.customerPartyId) {\n queryParams['partyId'] = params.customerPartyId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>(`/transactions/${transactionId}`, {\n params: Object.keys(queryParams).length > 0 ? queryParams : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" in transaction response');\n }\n\n return unwrapTransactionResource(response.data);\n }\n\n /**\n * List recent transactions.\n *\n * @param params - List parameters including agent context\n * @returns TransactionListResponse with transactions and pagination info\n */\n async list(params?: TransactionListParams): Promise<TransactionListResponse> {\n const headers: Record<string, string> = {};\n\n if (params?.agentId) {\n if (!params?.instanceId) {\n throw new InvalidRequestError('instanceId is required when agentId is provided');\n }\n headers['X-Agent-ID'] = params.agentId;\n }\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n type: params?.type,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/transactions', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in transaction list response'\n );\n }\n\n const transactions = response.data.map(unwrapTransactionResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n transactions,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n }\n}\n","/**\n * Payments resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport { unwrapTransactionResource } from './transactions.js';\nimport type { PaymentCreateParams } from '../types/payments.js';\nimport type { Transaction } from '../types/transactions.js';\nimport type { JsonApiSingleResponse, JsonApiRequestBody } from './jsonapi.js';\n\nconst PHONE_DIGITS_RE = /^\\d{10,}$/;\nconst PHONE_PLUS_RE = /^\\+\\d{7,}$/;\n\n/**\n * Validate recipient format matches backend expectations.\n * Accepted: party ID (pty_*), email (@), phone (+ prefix with digits, or 10+ digits).\n *\n * Caller must trim the value before passing it here.\n */\nfunction validateRecipient(recipient: string): void {\n if (!recipient) {\n throw new InvalidRequestError('recipient cannot be empty');\n }\n if (recipient.startsWith('pty_')) return;\n if (recipient.includes('@')) return;\n if (PHONE_PLUS_RE.test(recipient)) return;\n if (PHONE_DIGITS_RE.test(recipient)) return;\n throw new InvalidRequestError(\n 'Invalid recipient format. Expected: party ID (pty_*), email (contains @), or phone (+ prefix or 10+ digits)'\n );\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat Transaction object.\n *\n * Delegates to the shared `unwrapTransactionResource` for core field extraction,\n * then applies payment-specific overrides: relationship key mapping\n * (customerParty/counterparty), defaults, and memo mirroring.\n */\nfunction unwrapPaymentResponse(response: JsonApiSingleResponse): Transaction {\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" field in payment response');\n }\n\n const base = unwrapTransactionResource(response.data);\n const { relationships, attributes } = response.data;\n\n return {\n ...base,\n // Payment responses may omit these fields; provide sensible defaults.\n transactionType: String(attributes.transactionType ?? 'payment'),\n category: String(attributes.category ?? 'sent'),\n direction: String(attributes.direction ?? 'OUTBOUND'),\n // Mirror description into memo for payment convenience.\n memo: base.description,\n // Payments use customerParty/counterparty relationship keys,\n // falling back to the generic sourceParty/destinationParty.\n sourcePartyId: relationships?.customerParty?.data?.id ?? base.sourcePartyId,\n destinationPartyId: relationships?.counterparty?.data?.id ?? base.destinationPartyId,\n };\n}\n\nexport class PaymentsResource extends BaseResource {\n /**\n * Create a payment.\n *\n * @param params - Payment creation parameters\n * @returns Transaction object with transaction_id (txn_*), status, etc.\n */\n async create(params: PaymentCreateParams): Promise<Transaction> {\n const recipient = params.recipient.trim();\n validateRecipient(recipient);\n\n if (!Number.isInteger(params.amount) || params.amount <= 0) {\n throw new InvalidRequestError('amount must be a positive integer (minor units in cents)');\n }\n\n // Build JSON:API envelope\n const attributes: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n counterparty: recipient,\n customerPartyId: params.customerPartyId,\n };\n\n attributes['description'] = params.memo;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {\n 'Idempotency-Key': params.idempotencyKey,\n };\n if (params.agentId) {\n if (!params.instanceId) {\n throw new InvalidRequestError('instanceId is required when agentId is provided');\n }\n headers['X-Agent-ID'] = params.agentId;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.post<JsonApiSingleResponse>('/payments', {\n body,\n headers,\n });\n\n return unwrapPaymentResponse(response);\n }\n}\n","/**\n * Wallet resource.\n */\n\nimport { InvalidRequestError, NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n AccountBalance,\n AmountInfo,\n BalanceBreakdown,\n BalanceOptions,\n WithdrawParams,\n WithdrawResponse,\n} from '../types/wallet.js';\nimport type { JsonApiSingleResponse, JsonApiRequestBody } from './jsonapi.js';\n\n/**\n * Extract an AmountInfo from a raw attribute value.\n */\nfunction toAmountInfo(raw: unknown): AmountInfo {\n const obj = raw as Record<string, unknown> | undefined;\n return {\n amountMinor: Number(obj?.amountMinor ?? 0),\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat AccountBalance.\n * Validates the envelope structure and extracts fields explicitly.\n */\nfunction unwrapBalance(response: JsonApiSingleResponse): AccountBalance {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in wallet balance response'\n );\n }\n\n const { data } = response;\n if (data.type !== 'walletBalance' || !data.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"walletBalance\", got \"${data.type}\"`\n );\n }\n\n const { id, attributes } = data;\n const rawBreakdown = attributes.breakdown as Record<string, unknown> | undefined;\n\n const breakdown: BalanceBreakdown = {\n operatingFunded: toAmountInfo(rawBreakdown?.operatingFunded),\n operatingAdvanced: toAmountInfo(rawBreakdown?.operatingAdvanced),\n escrowFundedSettled: toAmountInfo(rawBreakdown?.escrowFundedSettled),\n escrowAdvanced: toAmountInfo(rawBreakdown?.escrowAdvanced),\n holdsOutbound: toAmountInfo(rawBreakdown?.holdsOutbound),\n };\n\n return {\n walletId: id,\n breakdown,\n available: toAmountInfo(attributes.available),\n pendingClaimAmountMinor:\n attributes.pendingClaimAmountMinor != null\n ? Number(attributes.pendingClaimAmountMinor)\n : undefined,\n pendingClaimCount:\n attributes.pendingClaimCount != null ? Number(attributes.pendingClaimCount) : undefined,\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat WithdrawResponse.\n * Server returns resource type \"withdrawal\" with id = transfer_id.\n */\nfunction unwrapWithdrawal(response: JsonApiSingleResponse): WithdrawResponse {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in withdrawal response'\n );\n }\n\n const { data } = response;\n if (data.type !== 'withdrawal' || !data.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"withdrawal\", got \"${data.type}\"`\n );\n }\n\n const { id, attributes } = data;\n\n return {\n transferId: id ?? undefined,\n instructionId: attributes.instructionId != null ? String(attributes.instructionId) : undefined,\n status: String(attributes.status),\n amount: attributes.amount != null ? Number(attributes.amount) : 0,\n currency: String(attributes.currency),\n estimatedSettlement:\n attributes.estimatedSettlement != null ? String(attributes.estimatedSettlement) : undefined,\n kycRequired: Boolean(attributes.kycRequired),\n kycStatus: attributes.kycStatus != null ? String(attributes.kycStatus) : undefined,\n kycSessionUrl: attributes.kycSessionUrl != null ? String(attributes.kycSessionUrl) : undefined,\n mfaRequired: Boolean(attributes.mfaRequired),\n mfaChallengeId:\n attributes.mfaChallengeId != null ? String(attributes.mfaChallengeId) : undefined,\n mfaExpiresAt: attributes.mfaExpiresAt != null ? String(attributes.mfaExpiresAt) : undefined,\n error: attributes.error != null ? String(attributes.error) : undefined,\n errorDetails: attributes.errorDetails != null ? String(attributes.errorDetails) : undefined,\n };\n}\n\nexport class WalletResource extends BaseResource {\n /**\n * Get current wallet balance.\n *\n * @returns AccountBalance with available, current, pending amounts\n */\n async balance(options?: BalanceOptions): Promise<AccountBalance> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n const params: Record<string, string> = {};\n if (options?.customerPartyId) {\n params['partyId'] = options.customerPartyId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>('/wallet/balance', {\n params: Object.keys(params).length > 0 ? params : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapBalance(response);\n }\n\n /**\n * Initiate a withdrawal to a linked bank account.\n *\n * @param params - Withdrawal parameters\n * @returns WithdrawResponse with transfer status (may require KYC/MFA)\n */\n async withdraw(params: WithdrawParams): Promise<WithdrawResponse> {\n if (!Number.isInteger(params.amount) || params.amount <= 0) {\n throw new InvalidRequestError('amount must be a positive integer (minor units in cents)');\n }\n\n const attributes: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n externalFundingSourceId: params.externalFundingSourceId,\n };\n if (params.description) attributes['description'] = params.description;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const response = await this.http.post<JsonApiSingleResponse>('/wallet/withdraw', {\n body,\n headers: { 'Idempotency-Key': params.idempotencyKey },\n });\n\n return unwrapWithdrawal(response);\n }\n}\n","/**\n * Agents resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n Agent,\n AgentStatus,\n AgentCreateParams,\n AgentCreateResponse,\n AgentUpdateParams,\n AgentUpdateResponse,\n AgentListParams,\n AgentListResponse,\n AgentGetOptions,\n AgentDeleteOptions,\n} from '../types/agents.js';\nimport type {\n JsonApiSingleResponse,\n JsonApiListResponse,\n JsonApiRequestBody,\n JsonApiResource,\n} from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API agent resource into a flat Agent object.\n * Validates the envelope structure and extracts fields explicitly.\n */\nfunction unwrapAgentResource(resource: JsonApiResource): Agent {\n if (resource.type !== 'agent' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"agent\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n id,\n name: String(attributes.name),\n description: attributes.description != null ? String(attributes.description) : undefined,\n status: String(attributes.status) as AgentStatus,\n partyId: relationships?.party?.data?.id ?? '',\n createdAt: attributes.createdAt != null ? String(attributes.createdAt) : undefined,\n createdBy: attributes.createdBy != null ? String(attributes.createdBy) : undefined,\n updatedAt: attributes.updatedAt != null ? String(attributes.updatedAt) : undefined,\n updatedBy: attributes.updatedBy != null ? String(attributes.updatedBy) : undefined,\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat Agent.\n */\nfunction unwrapAgent(response: JsonApiSingleResponse): Agent {\n if (!response?.data) {\n throw new NaturalError('Unexpected response format: missing \"data\" field in agent response');\n }\n return unwrapAgentResource(response.data);\n}\n\n/**\n * Unwrap a JSON:API list response into an AgentListResponse.\n */\nfunction unwrapAgentList(response: JsonApiListResponse): AgentListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in agent list response'\n );\n }\n\n const agents = response.data.map(unwrapAgentResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n agents,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class AgentsResource extends BaseResource {\n /**\n * List agents for the partner.\n *\n * @param params - Filter and pagination parameters\n * @returns AgentListResponse with list of agents\n */\n async list(params?: AgentListParams): Promise<AgentListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n status: params?.status,\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/agents', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgentList(response);\n }\n\n /**\n * Get agent by ID.\n *\n * @param agentId - The agent ID to retrieve (agt_xxx)\n * @returns Agent details\n */\n async get(agentId: string, options?: AgentGetOptions): Promise<Agent> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n const response = await this.http.get<JsonApiSingleResponse>(`/agents/${agentId}`, {\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgent(response);\n }\n\n /**\n * Create a new agent.\n *\n * @param params - Agent creation parameters\n * @returns AgentCreateResponse with created agent details\n */\n async create(params: AgentCreateParams): Promise<AgentCreateResponse> {\n const attributes: Record<string, unknown> = {\n name: params.name,\n };\n\n if (params.description) {\n attributes['description'] = params.description;\n }\n\n if (params.limits) {\n attributes['limits'] = params.limits;\n }\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.post<JsonApiSingleResponse>('/agents', {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n return unwrapAgent(response);\n }\n\n /**\n * Update an existing agent.\n *\n * @param agentId - The agent ID to update (agt_xxx)\n * @param params - Update parameters\n * @returns AgentUpdateResponse with updated agent details\n */\n async update(agentId: string, params: AgentUpdateParams): Promise<AgentUpdateResponse> {\n const attributes: Record<string, unknown> = {};\n\n if (params.name !== undefined) attributes['name'] = params.name;\n if (params.description !== undefined) attributes['description'] = params.description;\n if (params.status !== undefined) attributes['status'] = params.status;\n\n const body: JsonApiRequestBody = { data: { attributes } };\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n if (params.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const response = await this.http.put<JsonApiSingleResponse>(`/agents/${agentId}`, {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n return unwrapAgent(response);\n }\n\n /**\n * Delete an agent.\n *\n * @param agentId - The agent ID to delete (agt_xxx)\n * @param options - Optional observability parameters\n */\n async delete(agentId: string, options?: AgentDeleteOptions): Promise<void> {\n const headers: Record<string, string> = {};\n if (options?.instanceId) {\n headers['X-Instance-ID'] = options.instanceId;\n }\n\n await this.http.delete(`/agents/${agentId}`, {\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n }\n}\n","/**\n * Agent delegations resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type {\n AgentDelegation,\n AgentDelegationListParams,\n AgentDelegationListResponse,\n} from '../types/delegations.js';\nimport type { JsonApiSingleResponse, JsonApiListResponse, JsonApiResource } from './jsonapi.js';\n\n/**\n * Unwrap a single JSON:API agent delegation resource into a flat AgentDelegation object.\n */\nfunction unwrapAgentDelegationResource(resource: JsonApiResource): AgentDelegation {\n if (resource.type !== 'agentDelegation' || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"agentDelegation\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes, relationships } = resource;\n\n return {\n id,\n agentName: attributes.agentName != null ? String(attributes.agentName) : undefined,\n agentId: relationships?.agent?.data?.id ?? '',\n delegationId: relationships?.delegation?.data?.id ?? '',\n delegatorPartyId: relationships?.delegatorParty?.data?.id,\n delegateePartyId: relationships?.delegateeParty?.data?.id,\n delegatorPartyName:\n attributes.delegatorPartyName != null ? String(attributes.delegatorPartyName) : undefined,\n delegateePartyName:\n attributes.delegateePartyName != null ? String(attributes.delegateePartyName) : undefined,\n permissions: Array.isArray(attributes.permissions) ? (attributes.permissions as string[]) : [],\n limits: attributes.limits != null ? (attributes.limits as Record<string, number>) : undefined,\n expiresAt: attributes.expiresAt != null ? String(attributes.expiresAt) : undefined,\n createdAt: String(attributes.createdAt),\n createdBy: attributes.createdBy != null ? String(attributes.createdBy) : undefined,\n updatedAt: String(attributes.updatedAt),\n };\n}\n\n/**\n * Unwrap a JSON:API single-resource response into a flat AgentDelegation.\n */\nfunction unwrapAgentDelegation(response: JsonApiSingleResponse): AgentDelegation {\n if (!response?.data) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" field in agent delegation response'\n );\n }\n return unwrapAgentDelegationResource(response.data);\n}\n\n/**\n * Unwrap a JSON:API list response into an AgentDelegationListResponse.\n */\nfunction unwrapAgentDelegationList(response: JsonApiListResponse): AgentDelegationListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in agent delegation list response'\n );\n }\n\n const agentDelegations = response.data.map(unwrapAgentDelegationResource);\n const pagination = response.meta?.pagination ?? {};\n\n return {\n agentDelegations,\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class DelegationsResource extends BaseResource {\n /**\n * List agent delegations with optional filters.\n *\n * @param params - Filter parameters\n * @returns AgentDelegationListResponse with list of agent delegations\n */\n async list(params?: AgentDelegationListParams): Promise<AgentDelegationListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n delegationId: params?.delegationId,\n agentId: params?.agentId,\n delegatorPartyId: params?.delegatorPartyId,\n delegateePartyId: params?.delegateePartyId,\n includeRevoked: params?.includeRevoked,\n limit: params?.limit ?? 50,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/agent-delegations', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapAgentDelegationList(response);\n }\n\n /**\n * Get agent delegation by ID.\n *\n * @param agentDelegationId - The agent delegation handle (adl_xxx)\n * @returns AgentDelegation details\n */\n async get(agentDelegationId: string): Promise<AgentDelegation> {\n const response = await this.http.get<JsonApiSingleResponse>(\n `/agent-delegations/${agentDelegationId}`\n );\n return unwrapAgentDelegation(response);\n }\n}\n","/**\n * Customers resource.\n */\n\nimport { NaturalError } from '../errors.js';\nimport { BaseResource } from './base.js';\nimport type { JsonApiListResponse, JsonApiResource } from './jsonapi.js';\nimport type { Customer, CustomerListParams, CustomerListResponse } from '../types/customers.js';\n\n/**\n * Unwrap a single JSON:API customer resource into a flat Customer.\n */\nconst VALID_CUSTOMER_TYPES = new Set(['party', 'delegationInvitation'] as const);\nconst VALID_WALLET_ACCESS = new Set(['granted', 'denied', 'noWallet'] as const);\n\ntype CustomerType = 'party' | 'delegationInvitation';\ntype WalletAccess = 'granted' | 'denied' | 'noWallet';\n\nfunction isCustomerType(value: string): value is CustomerType {\n return VALID_CUSTOMER_TYPES.has(value as CustomerType);\n}\n\nfunction isWalletAccess(value: unknown): value is WalletAccess {\n return typeof value === 'string' && VALID_WALLET_ACCESS.has(value as WalletAccess);\n}\n\nfunction unwrapCustomerResource(resource: JsonApiResource): Customer {\n if (!isCustomerType(resource.type) || !resource.attributes) {\n throw new NaturalError(\n `Unexpected resource format: expected type \"party\" or \"delegationInvitation\", got \"${resource.type}\"`\n );\n }\n\n const { id, attributes } = resource;\n\n const party =\n typeof attributes.party === 'object' && attributes.party != null\n ? {\n id: String((attributes.party as Record<string, unknown>).id),\n name: String((attributes.party as Record<string, unknown>).name),\n email:\n typeof (attributes.party as Record<string, unknown>).email === 'string'\n ? String((attributes.party as Record<string, unknown>).email)\n : undefined,\n }\n : undefined;\n\n return {\n id,\n type: resource.type,\n party,\n email: typeof attributes.email === 'string' ? attributes.email : undefined,\n status: typeof attributes.status === 'string' ? attributes.status : '',\n permissions: Array.isArray(attributes.permissions) ? attributes.permissions : [],\n createdAt: typeof attributes.createdAt === 'string' ? attributes.createdAt : '',\n walletAvailableMinor:\n typeof attributes.walletAvailableMinor === 'number'\n ? attributes.walletAvailableMinor\n : undefined,\n walletAvailableDollars:\n typeof attributes.walletAvailableDollars === 'string'\n ? attributes.walletAvailableDollars\n : undefined,\n walletAccess: isWalletAccess(attributes.walletAccess) ? attributes.walletAccess : 'denied',\n };\n}\n\n/**\n * Unwrap a JSON:API list response into a CustomerListResponse.\n */\nfunction unwrapCustomerList(response: JsonApiListResponse): CustomerListResponse {\n if (!response?.data || !Array.isArray(response.data)) {\n throw new NaturalError(\n 'Unexpected response format: missing \"data\" array in customer list response'\n );\n }\n\n const pagination = response.meta?.pagination ?? {};\n\n return {\n items: response.data.map(unwrapCustomerResource),\n hasMore: pagination.hasMore ?? false,\n nextCursor: pagination.nextCursor ?? null,\n };\n}\n\nexport class CustomersResource extends BaseResource {\n /**\n * List customers who have delegated access to the partner.\n *\n * @param params - Pagination parameters\n * @returns CustomerListResponse with items, hasMore, nextCursor\n */\n async list(params?: CustomerListParams): Promise<CustomerListResponse> {\n const headers: Record<string, string> = {};\n if (params?.instanceId) {\n headers['X-Instance-ID'] = params.instanceId;\n }\n\n const queryParams: Record<string, unknown> = {\n limit: params?.limit,\n cursor: params?.cursor,\n };\n\n const response = await this.http.get<JsonApiListResponse>('/customers', {\n params: queryParams,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n return unwrapCustomerList(response);\n }\n}\n","/**\n * Natural Payments SDK client.\n */\n\nimport { HTTPClient, type HTTPClientOptions } from './http.js';\nimport { PaymentsResource } from './resources/payments.js';\nimport { WalletResource } from './resources/wallet.js';\nimport { TransactionsResource } from './resources/transactions.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { DelegationsResource } from './resources/delegations.js';\nimport { CustomersResource } from './resources/customers.js';\n\nexport interface NaturalClientOptions extends HTTPClientOptions {}\n\n/**\n * Natural Payments SDK client.\n *\n * @example\n * ```typescript\n * import { NaturalClient } from '@naturalpay/sdk';\n *\n * const client = new NaturalClient({ apiKey: process.env['NATURAL_API_KEY'] });\n *\n * // Create a payment\n * const payment = await client.payments.create({\n * agentId: 'agt_xxx',\n * amount: 5000,\n * customerPartyId: 'pty_xxx',\n * recipient: 'alice@example.com',\n * memo: 'For consulting',\n * idempotencyKey: 'unique-key-for-this-payment',\n * });\n *\n * // Check balance\n * const balance = await client.wallet.balance();\n * ```\n */\nexport class NaturalClient {\n private readonly http: HTTPClient;\n\n /** Payments API resource. */\n readonly payments: PaymentsResource;\n\n /** Wallet API resource for balance and withdrawals. */\n readonly wallet: WalletResource;\n\n /** Transactions API resource. */\n readonly transactions: TransactionsResource;\n\n /** Agents API resource for managing agents. */\n readonly agents: AgentsResource;\n\n /** Agent delegations API resource. */\n readonly delegations: DelegationsResource;\n\n /** Customers API resource for listing parties who delegated access. */\n readonly customers: CustomersResource;\n\n /**\n * Initialize the Natural client.\n *\n * @param options - Client configuration options\n * @param options.apiKey - API key (defaults to NATURAL_API_KEY env var)\n * @param options.baseUrl - API base URL (defaults to https://api.natural.co)\n * @param options.timeout - Request timeout in milliseconds (default: 30000)\n */\n constructor(options: NaturalClientOptions = {}) {\n this.http = new HTTPClient(options);\n\n this.payments = new PaymentsResource(this.http);\n this.wallet = new WalletResource(this.http);\n this.transactions = new TransactionsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.delegations = new DelegationsResource(this.http);\n this.customers = new CustomersResource(this.http);\n }\n}\n","/**\n * Transaction types.\n */\n\n/**\n * Filter for transaction types in list operations.\n */\nexport enum TransactionTypeFilter {\n PAYMENT = 'payment',\n TRANSFER = 'transfer',\n ALL = 'all',\n}\n\nexport interface Transaction {\n transactionId: string;\n amount: number;\n currency: string;\n status: string;\n description?: string;\n memo?: string;\n createdAt: string;\n updatedAt?: string;\n isDelegated: boolean;\n customerName?: string;\n customerAgentId?: string;\n senderName?: string;\n recipientName?: string;\n transactionType: string;\n category: string;\n direction: string;\n sourcePartyId?: string;\n destinationPartyId?: string;\n sourceWalletId?: string;\n destinationWalletId?: string;\n /** Internal instance ID (ins_xxx) assigned by server. */\n instanceId?: string;\n /** Claim link URL for unclaimed payments. */\n claimLink?: string;\n}\n\nexport interface TransactionGetParams {\n /** Customer party ID (pty_xxx) for delegated transaction lookup. */\n customerPartyId?: string;\n /** Developer's session/conversation ID for observability grouping. */\n instanceId?: string;\n}\n\nexport interface TransactionListParams {\n limit?: number;\n cursor?: string;\n agentId?: string;\n /** Filter by transaction type (payment, transfer, or all) */\n type?: TransactionTypeFilter;\n /** Developer's session/conversation ID for observability grouping. */\n instanceId?: string;\n}\n\nexport interface TransactionListResponse {\n transactions: Transaction[];\n hasMore: boolean;\n nextCursor?: string | null;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP client for Natural Server API with JWT caching.
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse an API key and return its environment label.
|
|
6
|
+
*
|
|
7
|
+
* Accepts keys matching `sk_ntl_(dev|sandbox|prod)_*`. Throws
|
|
8
|
+
* `InvalidRequestError` for anything else. The return type is a narrowed
|
|
9
|
+
* literal union so callers can discriminate on the env without a second
|
|
10
|
+
* parse.
|
|
11
|
+
*/
|
|
12
|
+
declare function parseApiKeyEnv(key: string): 'dev' | 'sandbox' | 'prod';
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a base URL uses HTTPS, with a localhost auto-allow and an
|
|
15
|
+
* `NATURAL_ALLOW_HTTP=1` escape hatch for non-localhost plaintext hosts.
|
|
16
|
+
*
|
|
17
|
+
* Throws `InvalidRequestError` if the URL is not HTTPS and neither escape
|
|
18
|
+
* hatch applies. Runs at client construction, not per-request.
|
|
19
|
+
*/
|
|
20
|
+
declare function validateBaseUrl(baseUrl: string): void;
|
|
4
21
|
interface HTTPClientOptions {
|
|
5
22
|
apiKey?: string;
|
|
6
23
|
baseUrl?: string;
|
|
@@ -450,9 +467,9 @@ interface NaturalClientOptions extends HTTPClientOptions {
|
|
|
450
467
|
*
|
|
451
468
|
* @example
|
|
452
469
|
* ```typescript
|
|
453
|
-
* import { NaturalClient } from 'naturalpay';
|
|
470
|
+
* import { NaturalClient } from '@naturalpay/sdk';
|
|
454
471
|
*
|
|
455
|
-
* const client = new NaturalClient({ apiKey: '
|
|
472
|
+
* const client = new NaturalClient({ apiKey: process.env['NATURAL_API_KEY'] });
|
|
456
473
|
*
|
|
457
474
|
* // Create a payment
|
|
458
475
|
* const payment = await client.payments.create({
|
|
@@ -671,6 +688,6 @@ declare class ServerError extends NaturalError {
|
|
|
671
688
|
/**
|
|
672
689
|
* Single source of truth for the SDK version string.
|
|
673
690
|
*/
|
|
674
|
-
declare const VERSION = "0.1.
|
|
691
|
+
declare const VERSION = "0.1.3";
|
|
675
692
|
|
|
676
|
-
export { type AccountBalance, type Agent, type AgentCreateParams, type AgentCreateResponse, type AgentDelegation, type AgentDelegationListParams, type AgentDelegationListResponse, type AgentDeleteOptions, type AgentGetOptions, type AgentListParams, type AgentListResponse, type AgentStatus, type AgentUpdateParams, type AgentUpdateResponse, type AmountInfo, AuthenticationError, type BalanceBreakdown, type Customer, type CustomerListParams, type CustomerListResponse, type CustomerPartyInfo, InsufficientFundsError, InvalidRequestError, type LogLevel, Logger, NaturalClient, type NaturalClientOptions, NaturalError, type PaymentCreateParams, PaymentError, RateLimitError, RecipientNotFoundError, ServerError, type Transaction, type TransactionGetParams, type TransactionListParams, type TransactionListResponse, TransactionTypeFilter, VERSION, type WithdrawParams, type WithdrawResponse, bindContext, clearContext, configureLogging, getContext, getLogger, logApiCall, logError, logToolCall, runWithContext };
|
|
693
|
+
export { type AccountBalance, type Agent, type AgentCreateParams, type AgentCreateResponse, type AgentDelegation, type AgentDelegationListParams, type AgentDelegationListResponse, type AgentDeleteOptions, type AgentGetOptions, type AgentListParams, type AgentListResponse, type AgentStatus, type AgentUpdateParams, type AgentUpdateResponse, type AmountInfo, AuthenticationError, type BalanceBreakdown, type Customer, type CustomerListParams, type CustomerListResponse, type CustomerPartyInfo, InsufficientFundsError, InvalidRequestError, type LogLevel, Logger, NaturalClient, type NaturalClientOptions, NaturalError, type PaymentCreateParams, PaymentError, RateLimitError, RecipientNotFoundError, ServerError, type Transaction, type TransactionGetParams, type TransactionListParams, type TransactionListResponse, TransactionTypeFilter, VERSION, type WithdrawParams, type WithdrawResponse, bindContext, clearContext, configureLogging, getContext, getLogger, logApiCall, logError, logToolCall, parseApiKeyEnv, runWithContext, validateBaseUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP client for Natural Server API with JWT caching.
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse an API key and return its environment label.
|
|
6
|
+
*
|
|
7
|
+
* Accepts keys matching `sk_ntl_(dev|sandbox|prod)_*`. Throws
|
|
8
|
+
* `InvalidRequestError` for anything else. The return type is a narrowed
|
|
9
|
+
* literal union so callers can discriminate on the env without a second
|
|
10
|
+
* parse.
|
|
11
|
+
*/
|
|
12
|
+
declare function parseApiKeyEnv(key: string): 'dev' | 'sandbox' | 'prod';
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a base URL uses HTTPS, with a localhost auto-allow and an
|
|
15
|
+
* `NATURAL_ALLOW_HTTP=1` escape hatch for non-localhost plaintext hosts.
|
|
16
|
+
*
|
|
17
|
+
* Throws `InvalidRequestError` if the URL is not HTTPS and neither escape
|
|
18
|
+
* hatch applies. Runs at client construction, not per-request.
|
|
19
|
+
*/
|
|
20
|
+
declare function validateBaseUrl(baseUrl: string): void;
|
|
4
21
|
interface HTTPClientOptions {
|
|
5
22
|
apiKey?: string;
|
|
6
23
|
baseUrl?: string;
|
|
@@ -450,9 +467,9 @@ interface NaturalClientOptions extends HTTPClientOptions {
|
|
|
450
467
|
*
|
|
451
468
|
* @example
|
|
452
469
|
* ```typescript
|
|
453
|
-
* import { NaturalClient } from 'naturalpay';
|
|
470
|
+
* import { NaturalClient } from '@naturalpay/sdk';
|
|
454
471
|
*
|
|
455
|
-
* const client = new NaturalClient({ apiKey: '
|
|
472
|
+
* const client = new NaturalClient({ apiKey: process.env['NATURAL_API_KEY'] });
|
|
456
473
|
*
|
|
457
474
|
* // Create a payment
|
|
458
475
|
* const payment = await client.payments.create({
|
|
@@ -671,6 +688,6 @@ declare class ServerError extends NaturalError {
|
|
|
671
688
|
/**
|
|
672
689
|
* Single source of truth for the SDK version string.
|
|
673
690
|
*/
|
|
674
|
-
declare const VERSION = "0.1.
|
|
691
|
+
declare const VERSION = "0.1.3";
|
|
675
692
|
|
|
676
|
-
export { type AccountBalance, type Agent, type AgentCreateParams, type AgentCreateResponse, type AgentDelegation, type AgentDelegationListParams, type AgentDelegationListResponse, type AgentDeleteOptions, type AgentGetOptions, type AgentListParams, type AgentListResponse, type AgentStatus, type AgentUpdateParams, type AgentUpdateResponse, type AmountInfo, AuthenticationError, type BalanceBreakdown, type Customer, type CustomerListParams, type CustomerListResponse, type CustomerPartyInfo, InsufficientFundsError, InvalidRequestError, type LogLevel, Logger, NaturalClient, type NaturalClientOptions, NaturalError, type PaymentCreateParams, PaymentError, RateLimitError, RecipientNotFoundError, ServerError, type Transaction, type TransactionGetParams, type TransactionListParams, type TransactionListResponse, TransactionTypeFilter, VERSION, type WithdrawParams, type WithdrawResponse, bindContext, clearContext, configureLogging, getContext, getLogger, logApiCall, logError, logToolCall, runWithContext };
|
|
693
|
+
export { type AccountBalance, type Agent, type AgentCreateParams, type AgentCreateResponse, type AgentDelegation, type AgentDelegationListParams, type AgentDelegationListResponse, type AgentDeleteOptions, type AgentGetOptions, type AgentListParams, type AgentListResponse, type AgentStatus, type AgentUpdateParams, type AgentUpdateResponse, type AmountInfo, AuthenticationError, type BalanceBreakdown, type Customer, type CustomerListParams, type CustomerListResponse, type CustomerPartyInfo, InsufficientFundsError, InvalidRequestError, type LogLevel, Logger, NaturalClient, type NaturalClientOptions, NaturalError, type PaymentCreateParams, PaymentError, RateLimitError, RecipientNotFoundError, ServerError, type Transaction, type TransactionGetParams, type TransactionListParams, type TransactionListResponse, TransactionTypeFilter, VERSION, type WithdrawParams, type WithdrawResponse, bindContext, clearContext, configureLogging, getContext, getLogger, logApiCall, logError, logToolCall, parseApiKeyEnv, runWithContext, validateBaseUrl };
|