@naturalpay/sdk 0.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/logging.ts","../src/http.ts","../src/resources/base.ts","../src/resources/payments.ts","../src/resources/wallet.ts","../src/resources/transactions.ts","../src/resources/agents.ts","../src/resources/delegations.ts","../src/resources/customers.ts","../src/client.ts","../src/types/transactions.ts","../src/index.ts"],"names":["logger","SDK_VERSION","networkError","TransactionTypeFilter"],"mappings":"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","file":"index.js","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 * 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\n// SDK version\nconst SDK_VERSION = '0.0.1';\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: SDK_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'] = SDK_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: 100 });\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 * 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';\n\nconst logger = getLogger('http');\n\nconst DEFAULT_BASE_URL = 'https://api.natural.co';\nconst DEFAULT_TIMEOUT = 30000;\nconst SDK_VERSION = '0.0.1';\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\n/**\n * Convert snake_case keys to camelCase.\n */\nfunction snakeToCamel(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(snakeToCamel);\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n const camelKey = key.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase());\n result[camelKey] = snakeToCamel(value);\n }\n return result;\n }\n\n return obj;\n}\n\n/**\n * Convert camelCase keys to snake_case.\n */\nfunction camelToSnake(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(camelToSnake);\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n const snakeKey = key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n result[snakeKey] = camelToSnake(value);\n }\n return result;\n }\n\n return obj;\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 pk_* key, use directly (already a JWT)\n if (!this.apiKey.startsWith('pk_')) {\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/partner/token' });\n\n try {\n const response = await fetch(`${this.baseUrl}/auth/partner/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/partner/token',\n });\n throw authError;\n }\n\n const data = (await response.json()) as {\n access_token: string;\n expires_in?: number;\n };\n\n const expiresIn = data.expires_in ?? 900; // Default 15 minutes\n const expiresAt = Date.now() + (expiresIn - 30) * 1000; // 30 second buffer\n\n this.jwtCache.set(cacheKey, { token: data.access_token, expiresAt });\n\n return data.access_token;\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/partner/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/partner/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 const snakeKey = key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n url.searchParams.set(snakeKey, 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 const errorData = data as {\n message?: string;\n error?: string;\n code?: string;\n detail?: string;\n };\n const errorMessage =\n errorData.detail ?? errorData.message ?? errorData.error ?? 'Request failed';\n const errorCode = errorData.code ?? '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 // Convert snake_case to camelCase\n return snakeToCamel(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/${SDK_VERSION}`,\n ...options?.headers,\n };\n\n const response = await fetch(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(camelToSnake(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): Promise<T> {\n return this.request<T>('DELETE', path);\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 * Payments resource.\n */\n\nimport { createHash } from 'node:crypto';\nimport { BaseResource } from './base.js';\nimport type { Payment, PaymentCreateParams, CancellationResult } from '../types/payments.js';\n\nconst IDEMPOTENCY_WINDOW_SECONDS = 300;\n\nexport class PaymentsResource extends BaseResource {\n /**\n * Generate idempotency key based on payment details + time window.\n */\n private generateIdempotencyKey(recipient: string, amount: number, memo?: string): string {\n const timeWindow = Math.floor(Date.now() / 1000 / IDEMPOTENCY_WINDOW_SECONDS);\n const data = [recipient, String(amount), memo ?? '', String(timeWindow)].join(':');\n return createHash('sha256').update(data).digest('hex').slice(0, 32);\n }\n\n /**\n * Create a payment.\n *\n * Must provide exactly one of: recipientEmail, recipientPhone, or recipientPartyId.\n *\n * @param params - Payment creation parameters\n * @returns Payment object with transfer_id, status, etc.\n */\n async create(params: PaymentCreateParams): Promise<Payment> {\n // Validate exactly one recipient is provided\n const recipientCount = [\n params.recipientEmail,\n params.recipientPhone,\n params.recipientPartyId,\n ].filter((r) => r !== undefined).length;\n\n if (recipientCount !== 1) {\n throw new Error(\n 'Must provide exactly one of: recipientEmail, recipientPhone, or recipientPartyId'\n );\n }\n\n const recipient = params.recipientEmail ?? params.recipientPhone ?? params.recipientPartyId;\n\n // Auto-generate idempotency key if not provided\n const idempotencyKey =\n params.idempotencyKey ?? this.generateIdempotencyKey(recipient!, params.amount, params.memo);\n\n const body: Record<string, unknown> = {\n amount: params.amount,\n };\n\n if (params.recipientEmail) body['recipientEmail'] = params.recipientEmail;\n if (params.recipientPhone) body['recipientPhone'] = params.recipientPhone;\n if (params.recipientPartyId) body['recipientPartyId'] = params.recipientPartyId;\n if (params.memo) body['memo'] = params.memo;\n if (params.agentId) body['agentId'] = params.agentId;\n if (params.customerPartyId) body['customerPartyId'] = params.customerPartyId;\n if (params.instanceId) body['instanceId'] = params.instanceId;\n\n return this.http.post<Payment>('/payments/initiate', {\n body,\n headers: { 'Idempotency-Key': idempotencyKey },\n });\n }\n\n /**\n * Get payment status by transfer ID.\n *\n * @param transferId - The transfer ID to look up\n * @returns Payment object with current status\n */\n async retrieve(transferId: string): Promise<Payment> {\n return this.http.get<Payment>(`/payments/${transferId}`);\n }\n\n /**\n * Cancel a pending payment.\n *\n * @param transferId - The transfer ID to cancel\n * @returns Cancellation result with status and message\n */\n async cancel(transferId: string): Promise<CancellationResult> {\n return this.http.post<CancellationResult>(`/payments/${transferId}/cancel`);\n }\n}\n","/**\n * Wallet resource.\n */\n\nimport { BaseResource } from './base.js';\nimport type {\n AccountBalance,\n DepositParams,\n DepositResponse,\n WithdrawParams,\n WithdrawResponse,\n} from '../types/wallet.js';\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(): Promise<AccountBalance> {\n return this.http.get<AccountBalance>('/wallet/balance');\n }\n\n /**\n * Initiate a deposit from a linked bank account.\n *\n * @param params - Deposit parameters\n * @returns DepositResponse with transfer status\n */\n async deposit(params: DepositParams): Promise<DepositResponse> {\n const body: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n paymentInstrumentId: params.paymentInstrumentId,\n };\n\n if (params.description) {\n body['description'] = params.description;\n }\n\n return this.http.post<DepositResponse>('/wallet/deposit', {\n body,\n headers: { 'Idempotency-Key': params.idempotencyKey },\n });\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 const body: Record<string, unknown> = {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n paymentInstrumentId: params.paymentInstrumentId,\n };\n\n if (params.description) {\n body['description'] = params.description;\n }\n\n return this.http.post<WithdrawResponse>('/wallet/withdraw', {\n body,\n headers: { 'Idempotency-Key': params.idempotencyKey },\n });\n }\n}\n","/**\n * Transactions resource.\n */\n\nimport { BaseResource } from './base.js';\nimport type { Transaction, TransactionListParams } from '../types/transactions.js';\n\ninterface TransactionListResponse {\n transfers?: Transaction[];\n transactions?: Transaction[];\n}\n\nexport class TransactionsResource extends BaseResource {\n /**\n * List recent transactions.\n *\n * @param params - List parameters including agent context\n * @returns List of Transaction objects\n */\n async list(params?: TransactionListParams): Promise<Transaction[]> {\n const headers: Record<string, string> = {};\n\n if (params?.agentId) {\n headers['X-Agent-ID'] = params.agentId;\n }\n if (params?.customerPartyId) {\n headers['X-On-Behalf-Of'] = params.customerPartyId;\n }\n\n const data = await this.http.get<TransactionListResponse>('/transactions', {\n params: {\n limit: params?.limit ?? 10,\n offset: params?.offset ?? 0,\n customerFilter: params?.customerFilter,\n type: params?.type,\n },\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n // API returns either \"transfers\" or \"transactions\" array\n return data.transfers ?? data.transactions ?? [];\n }\n}\n","/**\n * Agents resource.\n */\n\nimport { BaseResource } from './base.js';\nimport type {\n Agent,\n AgentCreateParams,\n AgentCreateResponse,\n AgentUpdateParams,\n AgentUpdateResponse,\n AgentListParams,\n AgentListResponse,\n} from '../types/agents.js';\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 return this.http.get<AgentListResponse>('/agents', {\n params: {\n status: params?.status,\n partyId: params?.partyId,\n limit: params?.limit ?? 50,\n offset: params?.offset ?? 0,\n },\n });\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): Promise<Agent> {\n return this.http.get<Agent>(`/agents/${agentId}`);\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 body: Record<string, unknown> = {\n name: params.name,\n partyId: params.partyId,\n };\n\n if (params.description) {\n body['description'] = params.description;\n }\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n\n return this.http.post<AgentCreateResponse>('/agents', {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\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 body: Record<string, unknown> = {};\n\n if (params.name !== undefined) body['name'] = params.name;\n if (params.description !== undefined) body['description'] = params.description;\n if (params.status !== undefined) body['status'] = params.status;\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n\n return this.http.put<AgentUpdateResponse>(`/agents/${agentId}`, {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n }\n\n /**\n * Delete an agent.\n *\n * @param agentId - The agent ID to delete (agt_xxx)\n */\n async delete(agentId: string): Promise<void> {\n await this.http.delete(`/agents/${agentId}`);\n }\n}\n","/**\n * Delegations resource.\n */\n\nimport { BaseResource } from './base.js';\nimport type {\n Delegation,\n DelegationListParams,\n DelegationListResponse,\n DelegationCreateParams,\n DelegationUpdateParams,\n} from '../types/delegations.js';\n\nexport class DelegationsResource extends BaseResource {\n /**\n * List delegations with optional filters.\n *\n * @param params - Filter parameters\n * @returns DelegationListResponse with list of delegations\n */\n async list(params?: DelegationListParams): Promise<DelegationListResponse> {\n return this.http.get<DelegationListResponse>('/delegations', {\n params: {\n status: params?.status,\n delegatingPartyId: params?.delegatingPartyId,\n delegatedPartyId: params?.delegatedPartyId,\n },\n });\n }\n\n /**\n * Get delegation by ID.\n *\n * @param delegationId - The delegation handle (dlg_xxx)\n * @returns Delegation details\n */\n async get(delegationId: string): Promise<Delegation> {\n return this.http.get<Delegation>(`/delegations/${delegationId}`);\n }\n\n /**\n * Create a new delegation (party-to-party trust relationship).\n *\n * @param params - Delegation creation parameters\n * @returns Created Delegation\n */\n async create(params: DelegationCreateParams): Promise<Delegation> {\n const body: Record<string, unknown> = {\n delegatingPartyId: params.delegatingPartyId,\n delegatedPartyId: params.delegatedPartyId,\n permissions: params.permissions,\n };\n\n if (params.expiresAt) {\n body['expiresAt'] = params.expiresAt;\n }\n\n const headers: Record<string, string> = {};\n if (params.idempotencyKey) {\n headers['Idempotency-Key'] = params.idempotencyKey;\n }\n\n return this.http.post<Delegation>('/delegations', {\n body,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n }\n\n /**\n * Update an existing delegation.\n *\n * @param delegationId - Delegation handle (dlg_xxx)\n * @param params - Update parameters\n * @returns Updated Delegation\n */\n async update(delegationId: string, params: DelegationUpdateParams): Promise<Delegation> {\n const body: Record<string, unknown> = {};\n\n if (params.status !== undefined) body['status'] = params.status;\n if (params.permissions !== undefined) body['permissions'] = params.permissions;\n if (params.expiresAt !== undefined) body['expiresAt'] = params.expiresAt;\n\n return this.http.put<Delegation>(`/delegations/${delegationId}`, { body });\n }\n\n /**\n * Revoke a delegation (soft delete by setting status to REVOKED).\n *\n * @param delegationId - Delegation handle (dlg_xxx)\n * @returns Revoked Delegation\n */\n async revoke(delegationId: string): Promise<Delegation> {\n return this.http.put<Delegation>(`/delegations/${delegationId}/revoke`);\n }\n}\n","/**\n * Customers resource.\n */\n\nimport { BaseResource } from './base.js';\nimport type { Customer } from '../types/customers.js';\n\nexport class CustomersResource extends BaseResource {\n /**\n * List customers onboarded by the partner via delegation.\n *\n * @returns List of Customer objects with party info and delegation details\n */\n async list(): Promise<Customer[]> {\n return this.http.get<Customer[]>('/customers');\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: 'pk_sandbox_xxx' });\n *\n * // Create a payment\n * const payment = await client.payments.create({\n * recipientEmail: 'alice@example.com',\n * amount: 50.00,\n * memo: 'For consulting',\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, transfers, deposits, 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 /** Delegations API resource for managing party-to-party delegations. */\n readonly delegations: DelegationsResource;\n\n /** Customers API resource for listing customers onboarded via delegation. */\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 type TransactionType = 'payment_sent' | 'payment_received' | 'deposit' | 'withdrawal';\n\nexport type TransactionStatus = 'pending' | 'processing' | 'completed' | 'failed';\n\nexport interface Transaction {\n transactionId: string;\n type: TransactionType;\n status: TransactionStatus;\n amount: number;\n currency: string;\n counterparty?: string;\n memo?: string;\n createdAt: string;\n completedAt?: string;\n}\n\nexport interface TransactionListParams {\n limit?: number;\n customerFilter?: string;\n offset?: number;\n agentId?: string;\n customerPartyId?: string;\n /** Filter by transaction type (payment, transfer, or all) */\n type?: TransactionTypeFilter;\n}\n","/**\n * Natural Payments SDK - AI agent payment infrastructure.\n *\n * @packageDocumentation\n */\n\n// Client\nexport { NaturalClient, type NaturalClientOptions } from './client.js';\n\n// Logging\nexport {\n configureLogging,\n getLogger,\n bindContext,\n clearContext,\n getContext,\n runWithContext,\n logError,\n logApiCall,\n logToolCall,\n type LogLevel,\n type Logger,\n} from './logging.js';\n\n// Errors\nexport {\n NaturalError,\n AuthenticationError,\n InvalidRequestError,\n PaymentError,\n InsufficientFundsError,\n RecipientNotFoundError,\n RateLimitError,\n ServerError,\n} from './errors.js';\n\n// Types - Enums\nexport { TransactionTypeFilter } from './types/index.js';\n\n// Types - Interfaces\nexport type {\n // Payments\n Payment,\n PaymentCreateParams,\n CancellationResult,\n // Wallet\n AmountInfo,\n BalanceBreakdown,\n AssetBalance,\n AccountBalance,\n DepositParams,\n DepositResponse,\n WithdrawParams,\n WithdrawResponse,\n // Transactions\n Transaction,\n TransactionType,\n TransactionStatus,\n TransactionListParams,\n // Agents\n Agent,\n AgentStatus,\n AgentCreateParams,\n AgentCreateResponse,\n AgentUpdateParams,\n AgentUpdateResponse,\n AgentListParams,\n AgentListResponse,\n // Delegations\n Delegation,\n DelegationStatus,\n DelegationListParams,\n DelegationListResponse,\n DelegationCreateParams,\n DelegationUpdateParams,\n // Customers\n Customer,\n CustomerPartyInfo,\n} from './types/index.js';\n\n// Version\nexport const VERSION = '0.0.1';\n"]}