@veroai/sdk 0.1.2 → 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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/errors.ts","../src/utils/http.ts","../src/resources/channels.ts","../src/resources/events.ts","../src/resources/messages.ts","../src/resources/webhooks.ts","../src/resources/api-keys.ts","../src/resources/domains.ts","../src/resources/voice/numbers.ts","../src/resources/voice/calls.ts","../src/resources/voice/rooms.ts","../src/resources/voice/index.ts","../src/resources/chat.ts","../src/resources/agents.ts","../src/realtime/realtime.ts","../src/client.ts"],"names":["transformAgent"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * VeroAI SDK Error Classes\n */\n\nimport type { VeroAIErrorDetails } from '../types';\n\n/**\n * Base error class for all VeroAI SDK errors\n */\nexport class VeroAIError extends Error {\n readonly code: string;\n readonly details?: Record<string, unknown>;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n code: string = 'UNKNOWN_ERROR',\n statusCode?: number,\n details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'VeroAIError';\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n\n // Maintains proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): VeroAIErrorDetails {\n return {\n code: this.code,\n message: this.message,\n details: this.details,\n };\n }\n}\n\n/**\n * Thrown when the API returns an error response\n */\nexport class APIError extends VeroAIError {\n readonly response?: Response;\n\n constructor(\n message: string,\n code: string,\n statusCode: number,\n details?: Record<string, unknown>,\n response?: Response\n ) {\n super(message, code, statusCode, details);\n this.name = 'APIError';\n this.response = response;\n }\n}\n\n/**\n * Thrown when authentication fails (401)\n */\nexport class AuthenticationError extends APIError {\n constructor(message: string = 'Invalid API key or token', details?: Record<string, unknown>) {\n super(message, 'AUTHENTICATION_ERROR', 401, details);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Thrown when authorization fails (403)\n */\nexport class AuthorizationError extends APIError {\n constructor(message: string = 'Insufficient permissions', details?: Record<string, unknown>) {\n super(message, 'AUTHORIZATION_ERROR', 403, details);\n this.name = 'AuthorizationError';\n }\n}\n\n/**\n * Thrown when a resource is not found (404)\n */\nexport class NotFoundError extends APIError {\n constructor(message: string = 'Resource not found', details?: Record<string, unknown>) {\n super(message, 'NOT_FOUND', 404, details);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Thrown when request validation fails (400)\n */\nexport class ValidationError extends APIError {\n constructor(message: string = 'Invalid request', details?: Record<string, unknown>) {\n super(message, 'VALIDATION_ERROR', 400, details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Thrown when rate limit is exceeded (429)\n */\nexport class RateLimitError extends APIError {\n readonly retryAfter?: number;\n\n constructor(\n message: string = 'Rate limit exceeded',\n retryAfter?: number,\n details?: Record<string, unknown>\n ) {\n super(message, 'RATE_LIMIT_EXCEEDED', 429, details);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Thrown when the server returns an error (5xx)\n */\nexport class ServerError extends APIError {\n constructor(\n message: string = 'Internal server error',\n statusCode: number = 500,\n details?: Record<string, unknown>\n ) {\n super(message, 'SERVER_ERROR', statusCode, details);\n this.name = 'ServerError';\n }\n}\n\n/**\n * Thrown when a request times out\n */\nexport class TimeoutError extends VeroAIError {\n constructor(message: string = 'Request timed out') {\n super(message, 'TIMEOUT_ERROR');\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Thrown when there's a network connectivity issue\n */\nexport class NetworkError extends VeroAIError {\n constructor(message: string = 'Network error', cause?: Error) {\n super(message, 'NETWORK_ERROR');\n this.name = 'NetworkError';\n this.cause = cause;\n }\n}\n","/**\n * HTTP Client for VeroAI SDK\n */\n\nimport type { VeroAIConfig } from '../types';\nimport {\n APIError,\n AuthenticationError,\n AuthorizationError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServerError,\n TimeoutError,\n NetworkError,\n} from './errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n timeout?: number;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: VeroAIConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, '') || 'https://api.veroai.dev';\n this.timeout = config.timeout || 30000;\n this.maxRetries = config.maxRetries ?? 3;\n this.fetchFn = config.fetch || globalThis.fetch;\n\n if (!this.apiKey) {\n throw new Error('API key is required');\n }\n\n if (!this.fetchFn) {\n throw new Error(\n 'fetch is not available. Please provide a fetch implementation or use Node.js >= 18.'\n );\n }\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n const timeout = options.timeout || this.timeout;\n\n let lastError: Error | null = null;\n let attempt = 0;\n\n while (attempt <= this.maxRetries) {\n try {\n const response = await this.executeRequest(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n timeout,\n });\n\n if (!response.ok) {\n const error = await this.handleErrorResponse(response);\n\n // Only retry on 5xx errors or rate limits with retry-after\n if (response.status >= 500 || response.status === 429) {\n const retryAfter = this.getRetryAfter(response, attempt);\n if (attempt < this.maxRetries && retryAfter > 0) {\n await this.sleep(retryAfter);\n attempt++;\n continue;\n }\n }\n\n throw error;\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return await response.json() as T;\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n\n lastError = error as Error;\n\n // Retry on network errors\n if (attempt < this.maxRetries) {\n await this.sleep(this.calculateBackoff(attempt));\n attempt++;\n continue;\n }\n\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new NetworkError('Failed to connect to API', error);\n }\n\n throw error;\n }\n }\n\n throw lastError || new NetworkError('Request failed after retries');\n }\n\n private async executeRequest(\n url: string,\n options: {\n method: string;\n headers: Headers;\n body?: string;\n timeout: number;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), options.timeout);\n\n try {\n return await this.fetchFn(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new TimeoutError(`Request timed out after ${options.timeout}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(path.startsWith('/') ? path : `/${path}`, this.baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n private buildHeaders(custom?: Record<string, string>): Headers {\n const headers = new Headers({\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': '@veroai/sdk/0.1.0',\n });\n\n if (custom) {\n for (const [key, value] of Object.entries(custom)) {\n headers.set(key, value);\n }\n }\n\n return headers;\n }\n\n private async handleErrorResponse(response: Response): Promise<APIError> {\n let errorData: { error?: { code?: string; message?: string; details?: Record<string, unknown> } } = {};\n\n try {\n const json = await response.json();\n if (json && typeof json === 'object') {\n errorData = json as typeof errorData;\n }\n } catch {\n // Response body is not JSON\n }\n\n const code = errorData.error?.code || 'API_ERROR';\n const message = errorData.error?.message || response.statusText || 'Unknown error';\n const details = errorData.error?.details;\n\n switch (response.status) {\n case 400:\n return new ValidationError(message, details);\n case 401:\n return new AuthenticationError(message, details);\n case 403:\n return new AuthorizationError(message, details);\n case 404:\n return new NotFoundError(message, details);\n case 429: {\n const retryAfter = parseInt(response.headers.get('Retry-After') || '60', 10);\n return new RateLimitError(message, retryAfter, details);\n }\n default:\n if (response.status >= 500) {\n return new ServerError(message, response.status, details);\n }\n return new APIError(message, code, response.status, details, response);\n }\n }\n\n private getRetryAfter(response: Response, attempt: number): number {\n const retryAfterHeader = response.headers.get('Retry-After');\n if (retryAfterHeader) {\n const retryAfter = parseInt(retryAfterHeader, 10);\n if (!isNaN(retryAfter)) {\n return retryAfter * 1000; // Convert to ms\n }\n }\n return this.calculateBackoff(attempt);\n }\n\n private calculateBackoff(attempt: number): number {\n // Exponential backoff with jitter: 1s, 2s, 4s, 8s...\n const baseDelay = Math.min(1000 * Math.pow(2, attempt), 30000);\n const jitter = Math.random() * 1000;\n return baseDelay + jitter;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n // Convenience methods\n async get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'PATCH', path, body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path });\n }\n}\n","/**\n * Channels Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Channel,\n CreateChannelParams,\n UpdateChannelParams,\n ChannelHealth,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiChannel {\n id: string;\n tenant_id: string;\n name: string;\n description: string | null;\n adapter_type: string;\n direction: string;\n status: string;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListChannelsApiResponse {\n channels: ApiChannel[];\n total: number;\n}\n\ninterface CreateChannelApiResponse {\n channel: ApiChannel;\n oauth_url?: string;\n}\n\ninterface ChannelHealthApiResponse {\n status: string;\n last_event_at: string | null;\n error_count_24h: number;\n success_rate: number;\n}\n\nfunction transformChannel(data: ApiChannel): Channel {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n description: data.description,\n adapterType: data.adapter_type as Channel['adapterType'],\n direction: data.direction as Channel['direction'],\n status: data.status as Channel['status'],\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nexport class ChannelsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all channels\n */\n async list(): Promise<PaginatedResponse<Channel>> {\n const response = await this.http.get<ListChannelsApiResponse>('/v1/channels');\n return {\n data: response.channels.map(transformChannel),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a channel by ID\n */\n async get(channelId: string): Promise<Channel> {\n const response = await this.http.get<{ channel: ApiChannel }>(`/v1/channels/${channelId}`);\n return transformChannel(response.channel);\n }\n\n /**\n * Create a new channel\n * @returns The created channel and optionally an OAuth URL for OAuth-based adapters\n */\n async create(params: CreateChannelParams): Promise<{ channel: Channel; oauthUrl?: string }> {\n const response = await this.http.post<CreateChannelApiResponse>('/v1/channels', {\n name: params.name,\n description: params.description,\n adapter_type: params.adapterType,\n direction: params.direction,\n config: params.config,\n });\n return {\n channel: transformChannel(response.channel),\n oauthUrl: response.oauth_url,\n };\n }\n\n /**\n * Update a channel\n */\n async update(channelId: string, params: UpdateChannelParams): Promise<Channel> {\n const response = await this.http.put<{ channel: ApiChannel }>(`/v1/channels/${channelId}`, {\n name: params.name,\n description: params.description,\n status: params.status,\n config: params.config,\n });\n return transformChannel(response.channel);\n }\n\n /**\n * Delete a channel\n */\n async delete(channelId: string): Promise<void> {\n await this.http.delete(`/v1/channels/${channelId}`);\n }\n\n /**\n * Test channel connectivity\n */\n async test(channelId: string): Promise<{ success: boolean; message?: string }> {\n return this.http.post<{ success: boolean; message?: string }>(`/v1/channels/${channelId}/test`);\n }\n\n /**\n * Get channel health metrics\n */\n async health(channelId: string): Promise<ChannelHealth> {\n const response = await this.http.get<ChannelHealthApiResponse>(`/v1/channels/${channelId}/health`);\n return {\n status: response.status as ChannelHealth['status'],\n lastEventAt: response.last_event_at,\n errorCount24h: response.error_count_24h,\n successRate: response.success_rate,\n };\n }\n}\n","/**\n * Events Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n ActivityEvent,\n ListEventsParams,\n EventStats,\n TimeSeriesDataPoint,\n TimeSeriesGranularity,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiActivityEvent {\n event_id: string;\n tenant_id: string;\n channel_id: string;\n event_type: string;\n canonical_type: string;\n direction: string;\n adapter_type: string;\n occurred_at: string;\n ingested_at: string;\n payload: Record<string, unknown>;\n}\n\ninterface ListEventsApiResponse {\n events: ApiActivityEvent[];\n total: number;\n next_offset?: number;\n}\n\ninterface EventStatsApiResponse {\n total_events: number;\n events_by_type: Record<string, number>;\n events_by_channel: Record<string, number>;\n}\n\ninterface TimeSeriesApiResponse {\n data: Array<{ timestamp: string; value: number }>;\n granularity: string;\n period_days: number;\n}\n\nfunction transformEvent(data: ApiActivityEvent): ActivityEvent {\n return {\n eventId: data.event_id,\n tenantId: data.tenant_id,\n channelId: data.channel_id,\n eventType: data.event_type,\n canonicalType: data.canonical_type as ActivityEvent['canonicalType'],\n direction: data.direction as ActivityEvent['direction'],\n adapterType: data.adapter_type,\n occurredAt: data.occurred_at,\n ingestedAt: data.ingested_at,\n payload: data.payload,\n };\n}\n\nexport class EventsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List activity events with optional filters\n */\n async list(params: ListEventsParams = {}): Promise<PaginatedResponse<ActivityEvent>> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit,\n offset: params.offset,\n channel_id: params.channelId,\n event_type: params.eventType,\n canonical_type: params.canonicalType,\n direction: params.direction,\n };\n\n if (params.startDate) {\n query.start_date = params.startDate instanceof Date\n ? params.startDate.toISOString()\n : params.startDate;\n }\n\n if (params.endDate) {\n query.end_date = params.endDate instanceof Date\n ? params.endDate.toISOString()\n : params.endDate;\n }\n\n const response = await this.http.get<ListEventsApiResponse>('/v1/events', query);\n\n return {\n data: response.events.map(transformEvent),\n total: response.total,\n hasMore: response.next_offset !== undefined,\n nextOffset: response.next_offset,\n };\n }\n\n /**\n * Get a single event by ID\n */\n async get(eventId: string): Promise<ActivityEvent> {\n const response = await this.http.get<ApiActivityEvent>(`/v1/events/${eventId}`);\n return transformEvent(response);\n }\n\n /**\n * Get event statistics summary\n */\n async stats(options: { days?: number } = {}): Promise<EventStats> {\n const response = await this.http.get<EventStatsApiResponse>('/v1/events/stats/summary', {\n days: options.days || 7,\n });\n\n return {\n totalEvents: response.total_events,\n eventsByType: response.events_by_type,\n eventsByChannel: response.events_by_channel,\n };\n }\n\n /**\n * Get time series data for charts\n */\n async timeseries(options: {\n days?: number;\n granularity?: TimeSeriesGranularity;\n } = {}): Promise<TimeSeriesDataPoint[]> {\n const response = await this.http.get<TimeSeriesApiResponse>('/v1/events/stats/timeseries', {\n days: options.days || 7,\n granularity: options.granularity || 'hour',\n });\n\n return response.data;\n }\n}\n","/**\n * Messages Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type { SendMessageParams, SendMessageResult } from '../types';\n\ninterface SendMessageApiResponse {\n message_id: string;\n event_id: string;\n status: 'queued' | 'sent';\n provider_message_id?: string;\n}\n\nexport class MessagesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Send a message through a channel\n *\n * @example\n * ```typescript\n * // Send an SMS\n * const result = await veroai.messages.send({\n * channelId: 'ch_abc123',\n * to: '+15551234567',\n * content: { type: 'text', text: 'Hello from VeroAI!' }\n * });\n *\n * // Send an email\n * const result = await veroai.messages.send({\n * channelId: 'ch_def456',\n * to: 'user@example.com',\n * subject: 'Welcome!',\n * content: {\n * type: 'html',\n * html: '<h1>Welcome to our platform</h1>'\n * }\n * });\n * ```\n */\n async send(params: SendMessageParams): Promise<SendMessageResult> {\n const response = await this.http.post<SendMessageApiResponse>('/v1/messages', {\n channel_id: params.channelId,\n to: params.to,\n subject: params.subject,\n content: params.content,\n metadata: params.metadata,\n });\n\n return {\n messageId: response.message_id,\n eventId: response.event_id,\n status: response.status,\n providerMessageId: response.provider_message_id,\n };\n }\n\n /**\n * Send a message to multiple recipients (batch)\n *\n * @example\n * ```typescript\n * const results = await veroai.messages.sendBatch({\n * channelId: 'ch_abc123',\n * messages: [\n * { to: '+15551234567', content: { type: 'text', text: 'Hello!' } },\n * { to: '+15559876543', content: { type: 'text', text: 'Hi there!' } },\n * ]\n * });\n * ```\n */\n async sendBatch(params: {\n channelId: string;\n messages: Array<{\n to: string;\n subject?: string;\n content: SendMessageParams['content'];\n metadata?: Record<string, unknown>;\n }>;\n }): Promise<SendMessageResult[]> {\n const results: SendMessageResult[] = [];\n\n // Process in batches of 100\n const batchSize = 100;\n for (let i = 0; i < params.messages.length; i += batchSize) {\n const batch = params.messages.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map(msg =>\n this.send({\n channelId: params.channelId,\n to: msg.to,\n subject: msg.subject,\n content: msg.content,\n metadata: msg.metadata,\n })\n )\n );\n results.push(...batchResults);\n }\n\n return results;\n }\n}\n","/**\n * Webhooks Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Webhook,\n CreateWebhookParams,\n UpdateWebhookParams,\n WebhookDelivery,\n WebhookStats,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiWebhook {\n id: string;\n tenant_id: string;\n name: string;\n url: string;\n events: string[];\n channel_id: string | null;\n headers: Record<string, string>;\n status: string;\n retry_config: {\n enabled: boolean;\n max_attempts: number;\n backoff: string;\n };\n created_at: string;\n updated_at: string;\n}\n\ninterface ApiWebhookDelivery {\n id: string;\n webhook_id: string;\n event_id: string;\n event_type?: string;\n status: string;\n attempts: number;\n response_code: number | null;\n response_body: string | null;\n response_time_ms: number | null;\n created_at: string;\n completed_at: string | null;\n}\n\ninterface ListWebhooksApiResponse {\n webhooks: ApiWebhook[];\n total: number;\n}\n\ninterface CreateWebhookApiResponse {\n webhook: ApiWebhook;\n secret: string;\n}\n\ninterface WebhookDeliveriesApiResponse {\n deliveries: ApiWebhookDelivery[];\n total: number;\n has_more: boolean;\n next_cursor?: string;\n}\n\ninterface WebhookStatsApiResponse {\n total: number;\n success: number;\n failed: number;\n pending: number;\n success_rate: number;\n average_response_time_ms: number;\n time_range: string;\n}\n\nfunction transformWebhook(data: ApiWebhook): Webhook {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n url: data.url,\n events: data.events,\n channelId: data.channel_id,\n headers: data.headers,\n status: data.status as Webhook['status'],\n retryConfig: {\n enabled: data.retry_config?.enabled,\n maxAttempts: data.retry_config?.max_attempts,\n backoff: data.retry_config?.backoff as 'linear' | 'exponential',\n },\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nfunction transformDelivery(data: ApiWebhookDelivery): WebhookDelivery {\n return {\n id: data.id,\n webhookId: data.webhook_id,\n eventId: data.event_id,\n eventType: data.event_type,\n status: data.status as WebhookDelivery['status'],\n attempts: data.attempts,\n responseCode: data.response_code,\n responseBody: data.response_body,\n responseTimeMs: data.response_time_ms,\n createdAt: data.created_at,\n completedAt: data.completed_at,\n };\n}\n\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all webhooks\n */\n async list(): Promise<PaginatedResponse<Webhook>> {\n const response = await this.http.get<ListWebhooksApiResponse>('/v1/webhooks');\n return {\n data: response.webhooks.map(transformWebhook),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a webhook by ID\n */\n async get(webhookId: string): Promise<Webhook> {\n const response = await this.http.get<{ webhook: ApiWebhook }>(`/v1/webhooks/${webhookId}`);\n return transformWebhook(response.webhook);\n }\n\n /**\n * Create a new webhook\n * @returns The created webhook and the signing secret (only returned once)\n */\n async create(params: CreateWebhookParams): Promise<{ webhook: Webhook; secret: string }> {\n const response = await this.http.post<CreateWebhookApiResponse>('/v1/webhooks', {\n name: params.name,\n url: params.url,\n events: params.events,\n channel_id: params.channelId,\n headers: params.headers,\n retry_config: params.retryConfig ? {\n enabled: params.retryConfig.enabled ?? true,\n max_attempts: params.retryConfig.maxAttempts ?? 5,\n backoff: params.retryConfig.backoff ?? 'exponential',\n } : undefined,\n });\n return {\n webhook: transformWebhook(response.webhook),\n secret: response.secret,\n };\n }\n\n /**\n * Update a webhook\n */\n async update(webhookId: string, params: UpdateWebhookParams): Promise<Webhook> {\n const response = await this.http.patch<{ webhook: ApiWebhook }>(`/v1/webhooks/${webhookId}`, {\n name: params.name,\n url: params.url,\n events: params.events,\n channel_id: params.channelId,\n headers: params.headers,\n status: params.status,\n retry_config: params.retryConfig ? {\n enabled: params.retryConfig.enabled,\n max_attempts: params.retryConfig.maxAttempts,\n backoff: params.retryConfig.backoff,\n } : undefined,\n });\n return transformWebhook(response.webhook);\n }\n\n /**\n * Delete a webhook\n */\n async delete(webhookId: string): Promise<void> {\n await this.http.delete(`/v1/webhooks/${webhookId}`);\n }\n\n /**\n * Regenerate webhook signing secret\n * @returns The new signing secret (only returned once)\n */\n async regenerateSecret(webhookId: string): Promise<{ webhook: Webhook; secret: string }> {\n const response = await this.http.post<CreateWebhookApiResponse>(\n `/v1/webhooks/${webhookId}/regenerate-secret`\n );\n return {\n webhook: transformWebhook(response.webhook),\n secret: response.secret,\n };\n }\n\n /**\n * List delivery history for a webhook\n */\n async deliveries(\n webhookId: string,\n options: { limit?: number; cursor?: string } = {}\n ): Promise<PaginatedResponse<WebhookDelivery> & { nextCursor?: string }> {\n const response = await this.http.get<WebhookDeliveriesApiResponse>(\n `/v1/webhooks/${webhookId}/deliveries`,\n {\n limit: options.limit || 50,\n cursor: options.cursor,\n }\n );\n return {\n data: response.deliveries.map(transformDelivery),\n total: response.total,\n hasMore: response.has_more,\n nextCursor: response.next_cursor,\n };\n }\n\n /**\n * Get webhook delivery statistics\n */\n async stats(\n webhookId: string,\n options: { timeRange?: '1h' | '24h' | '7d' } = {}\n ): Promise<WebhookStats> {\n const response = await this.http.get<WebhookStatsApiResponse>(\n `/v1/webhooks/${webhookId}/stats`,\n {\n time_range: options.timeRange || '24h',\n }\n );\n return {\n total: response.total,\n success: response.success,\n failed: response.failed,\n pending: response.pending,\n successRate: response.success_rate,\n averageResponseTimeMs: response.average_response_time_ms,\n timeRange: response.time_range as WebhookStats['timeRange'],\n };\n }\n}\n","/**\n * API Keys Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n ApiKey,\n CreateApiKeyParams,\n CreateApiKeyResult,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiApiKey {\n id: string;\n tenant_id: string;\n name: string;\n key_prefix: string;\n environment: string;\n scopes: string[];\n expires_at: string | null;\n last_used_at: string | null;\n created_at: string;\n}\n\ninterface ListApiKeysApiResponse {\n api_keys: ApiApiKey[];\n total: number;\n}\n\ninterface CreateApiKeyApiResponse {\n api_key: ApiApiKey;\n key: string;\n}\n\nfunction transformApiKey(data: ApiApiKey): ApiKey {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n keyPrefix: data.key_prefix,\n environment: data.environment as ApiKey['environment'],\n scopes: data.scopes,\n expiresAt: data.expires_at,\n lastUsedAt: data.last_used_at,\n createdAt: data.created_at,\n };\n}\n\nexport class ApiKeysResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all API keys\n */\n async list(): Promise<PaginatedResponse<ApiKey>> {\n const response = await this.http.get<ListApiKeysApiResponse>('/v1/api-keys');\n return {\n data: response.api_keys.map(transformApiKey),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get an API key by ID\n */\n async get(keyId: string): Promise<ApiKey> {\n const response = await this.http.get<{ api_key: ApiApiKey }>(`/v1/api-keys/${keyId}`);\n return transformApiKey(response.api_key);\n }\n\n /**\n * Create a new API key\n * @returns The created API key and the plaintext key (only returned once)\n *\n * @example\n * ```typescript\n * const { apiKey, key } = await veroai.apiKeys.create({\n * name: 'Production Key',\n * environment: 'production',\n * scopes: ['channels:read', 'channels:write', 'messages:send'],\n * });\n *\n * // Save this key securely - it won't be shown again!\n * console.log('API Key:', key); // sk_live_abc123...\n * ```\n */\n async create(params: CreateApiKeyParams): Promise<CreateApiKeyResult> {\n const response = await this.http.post<CreateApiKeyApiResponse>('/v1/api-keys', {\n name: params.name,\n environment: params.environment,\n scopes: params.scopes,\n expires_at: params.expiresAt instanceof Date\n ? params.expiresAt.toISOString()\n : params.expiresAt,\n });\n return {\n apiKey: transformApiKey(response.api_key),\n key: response.key,\n };\n }\n\n /**\n * Delete (revoke) an API key\n */\n async delete(keyId: string): Promise<void> {\n await this.http.delete(`/v1/api-keys/${keyId}`);\n }\n\n /**\n * Alias for delete - revoke an API key\n */\n async revoke(keyId: string): Promise<void> {\n return this.delete(keyId);\n }\n}\n","/**\n * Domains Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Domain,\n CreateDomainParams,\n VerifyDomainResult,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiDomain {\n id: string;\n tenant_id: string;\n domain: string;\n status: string;\n verification_record: string | null;\n verification_status: {\n dkim: boolean;\n spf: boolean;\n dmarc: boolean;\n mx: boolean;\n last_checked_at?: string | null;\n };\n dns_records: Array<{\n type: string;\n name: string;\n value: string;\n priority?: number;\n verified: boolean;\n }>;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListDomainsApiResponse {\n domains: ApiDomain[];\n total: number;\n}\n\ninterface CreateDomainApiResponse {\n domain: ApiDomain;\n verification_record?: {\n type: string;\n name: string;\n value: string;\n };\n}\n\ninterface VerifyDomainApiResponse {\n domain: ApiDomain;\n verification_results: {\n dkim: { verified: boolean; error?: string };\n spf: { verified: boolean; error?: string };\n dmarc: { verified: boolean; error?: string };\n mx: { verified: boolean; error?: string };\n };\n}\n\nfunction transformDomain(data: ApiDomain): Domain {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n domain: data.domain,\n status: data.status as Domain['status'],\n verificationRecord: data.verification_record,\n verificationStatus: {\n dkim: data.verification_status.dkim,\n spf: data.verification_status.spf,\n dmarc: data.verification_status.dmarc,\n mx: data.verification_status.mx,\n lastCheckedAt: data.verification_status.last_checked_at,\n },\n dnsRecords: data.dns_records.map(record => ({\n type: record.type as 'MX' | 'TXT' | 'CNAME',\n name: record.name,\n value: record.value,\n priority: record.priority,\n verified: record.verified,\n })),\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nexport class DomainsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all domains\n */\n async list(): Promise<PaginatedResponse<Domain>> {\n const response = await this.http.get<ListDomainsApiResponse>('/v1/domains');\n return {\n data: response.domains.map(transformDomain),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a domain by ID\n */\n async get(domainId: string): Promise<Domain> {\n const response = await this.http.get<{ domain: ApiDomain }>(`/v1/domains/${domainId}`);\n return transformDomain(response.domain);\n }\n\n /**\n * Add a new domain\n *\n * @example\n * ```typescript\n * // Manual DNS verification\n * const { domain } = await veroai.domains.create({\n * domain: 'example.com',\n * verificationMethod: 'manual',\n * });\n *\n * // Automatic via Cloudflare\n * const { domain } = await veroai.domains.create({\n * domain: 'example.com',\n * verificationMethod: 'cloudflare',\n * cloudflareApiToken: 'your_cf_token',\n * });\n * ```\n */\n async create(params: CreateDomainParams): Promise<{ domain: Domain; verificationRecord?: { type: string; name: string; value: string } }> {\n const response = await this.http.post<CreateDomainApiResponse>('/v1/domains', {\n domain: params.domain,\n verification_method: params.verificationMethod,\n cloudflare_api_token: params.cloudflareApiToken,\n });\n return {\n domain: transformDomain(response.domain),\n verificationRecord: response.verification_record,\n };\n }\n\n /**\n * Delete a domain\n */\n async delete(domainId: string): Promise<void> {\n await this.http.delete(`/v1/domains/${domainId}`);\n }\n\n /**\n * Verify domain DNS records\n */\n async verify(domainId: string): Promise<VerifyDomainResult> {\n const response = await this.http.post<VerifyDomainApiResponse>(\n `/v1/domains/${domainId}/verify`\n );\n return {\n domain: transformDomain(response.domain),\n verificationResults: response.verification_results,\n };\n }\n\n /**\n * Get DNS records that need to be configured\n */\n async dnsRecords(domainId: string): Promise<Domain['dnsRecords']> {\n const domain = await this.get(domainId);\n return domain.dnsRecords;\n }\n}\n","/**\n * Voice Numbers Resource\n *\n * Manages phone number operations for voice channels\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n PhoneNumber,\n AvailableNumber,\n SearchNumbersParams,\n PurchaseNumberParams,\n UpdateNumberParams,\n ListNumbersParams,\n PaginatedResponse,\n} from '../../types';\n\n// API response types (snake_case)\ninterface ApiPhoneNumber {\n id: string;\n number: string;\n country: string;\n region: string | null;\n locality: string | null;\n capabilities: string[];\n channel_id: string | null;\n channel_name?: string | null;\n status: string;\n monthly_cost_cents: number | null;\n setup_cost_cents: number | null;\n created_at: string;\n updated_at: string;\n}\n\ninterface ApiAvailableNumber {\n number: string;\n country: string;\n region: string | null;\n locality: string | null;\n capabilities: string[];\n monthly_cost_cents: number;\n setup_cost_cents: number;\n provider: string;\n}\n\ninterface ListNumbersApiResponse {\n numbers: ApiPhoneNumber[];\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface SearchNumbersApiResponse {\n available_numbers: ApiAvailableNumber[];\n total: number;\n search_params: Record<string, unknown>;\n}\n\ninterface PurchaseNumberApiResponse {\n number: ApiPhoneNumber;\n message: string;\n}\n\ninterface UpdateNumberApiResponse {\n number: ApiPhoneNumber;\n}\n\n/**\n * Transform API phone number to SDK phone number\n */\nfunction transformPhoneNumber(data: ApiPhoneNumber): PhoneNumber {\n return {\n id: data.id,\n number: data.number,\n country: data.country,\n region: data.region,\n locality: data.locality,\n capabilities: data.capabilities as PhoneNumber['capabilities'],\n channelId: data.channel_id,\n channelName: data.channel_name,\n status: data.status as PhoneNumber['status'],\n monthlyCostCents: data.monthly_cost_cents,\n setupCostCents: data.setup_cost_cents,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\n/**\n * Transform API available number to SDK available number\n */\nfunction transformAvailableNumber(data: ApiAvailableNumber): AvailableNumber {\n return {\n number: data.number,\n country: data.country,\n region: data.region,\n locality: data.locality,\n capabilities: data.capabilities as AvailableNumber['capabilities'],\n monthlyCostCents: data.monthly_cost_cents,\n setupCostCents: data.setup_cost_cents,\n provider: data.provider,\n };\n}\n\nexport class VoiceNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Search for available phone numbers to purchase\n */\n async search(params: SearchNumbersParams): Promise<AvailableNumber[]> {\n const response = await this.http.get<SearchNumbersApiResponse>('/v1/voice/numbers/search', {\n country: params.country,\n area_code: params.areaCode,\n contains: params.contains,\n capabilities: params.capabilities?.join(','),\n limit: params.limit,\n });\n return response.available_numbers.map(transformAvailableNumber);\n }\n\n /**\n * Purchase a phone number\n */\n async purchase(params: PurchaseNumberParams): Promise<PhoneNumber> {\n const response = await this.http.post<PurchaseNumberApiResponse>('/v1/voice/numbers/purchase', {\n number: params.number,\n channel_id: params.channelId,\n });\n return transformPhoneNumber(response.number);\n }\n\n /**\n * List owned phone numbers\n */\n async list(params?: ListNumbersParams): Promise<PaginatedResponse<PhoneNumber>> {\n const response = await this.http.get<ListNumbersApiResponse>('/v1/voice/numbers', {\n channel_id: params?.channelId,\n status: params?.status,\n country: params?.country,\n capabilities: params?.capabilities?.join(','),\n limit: params?.limit,\n offset: params?.offset,\n });\n return {\n data: response.numbers.map(transformPhoneNumber),\n total: response.total,\n hasMore: (response.offset + response.numbers.length) < response.total,\n nextOffset: response.offset + response.numbers.length,\n };\n }\n\n /**\n * Get a phone number by ID\n */\n async get(numberId: string): Promise<PhoneNumber> {\n const response = await this.http.get<ApiPhoneNumber>(`/v1/voice/numbers/${numberId}`);\n return transformPhoneNumber(response);\n }\n\n /**\n * Update a phone number (assign/unassign to channel)\n */\n async update(numberId: string, params: UpdateNumberParams): Promise<PhoneNumber> {\n const response = await this.http.patch<UpdateNumberApiResponse>(`/v1/voice/numbers/${numberId}`, {\n channel_id: params.channelId,\n });\n return transformPhoneNumber(response.number);\n }\n\n /**\n * Release a phone number\n */\n async release(numberId: string): Promise<void> {\n await this.http.delete(`/v1/voice/numbers/${numberId}`);\n }\n\n /**\n * Assign a phone number to a channel\n */\n async assignToChannel(numberId: string, channelId: string): Promise<PhoneNumber> {\n return this.update(numberId, { channelId });\n }\n\n /**\n * Unassign a phone number from its channel\n */\n async unassignFromChannel(numberId: string): Promise<PhoneNumber> {\n return this.update(numberId, { channelId: null });\n }\n}\n","/**\n * Voice Calls Resource\n *\n * Manages voice call operations\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n Call,\n DialParams,\n ListCallsParams,\n PaginatedResponse,\n} from '../../types';\n\n// API response types (snake_case)\ninterface ApiCall {\n id: string;\n channel_id: string;\n provider_call_sid: string;\n from_number: string;\n to_number: string;\n direction: string;\n status: string;\n end_reason: string | null;\n initiated_at: string;\n ringing_at: string | null;\n answered_at: string | null;\n ended_at: string | null;\n duration_seconds: number | null;\n recording_url: string | null;\n transcription_url: string | null;\n agent_id: string | null;\n metadata: Record<string, unknown> | null;\n}\n\ninterface ListCallsApiResponse {\n calls: ApiCall[];\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface DialCallApiResponse {\n call: ApiCall;\n message: string;\n}\n\ninterface HangupCallApiResponse {\n message: string;\n call_id: string;\n previous_status: string;\n}\n\n/**\n * Transform API call to SDK call\n */\nfunction transformCall(data: ApiCall): Call {\n return {\n id: data.id,\n channelId: data.channel_id,\n providerCallSid: data.provider_call_sid,\n fromNumber: data.from_number,\n toNumber: data.to_number,\n direction: data.direction as Call['direction'],\n status: data.status as Call['status'],\n endReason: data.end_reason as Call['endReason'],\n initiatedAt: data.initiated_at,\n ringingAt: data.ringing_at,\n answeredAt: data.answered_at,\n endedAt: data.ended_at,\n durationSeconds: data.duration_seconds,\n recordingUrl: data.recording_url,\n transcriptionUrl: data.transcription_url,\n agentId: data.agent_id,\n metadata: data.metadata,\n };\n}\n\nexport class VoiceCallsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Initiate an outbound call\n */\n async dial(params: DialParams): Promise<Call> {\n const response = await this.http.post<DialCallApiResponse>('/v1/voice/calls', {\n channel_id: params.channelId,\n to: params.to,\n from: params.from,\n timeout: params.timeout,\n metadata: params.metadata,\n });\n return transformCall(response.call);\n }\n\n /**\n * List calls\n */\n async list(params?: ListCallsParams): Promise<PaginatedResponse<Call>> {\n const response = await this.http.get<ListCallsApiResponse>('/v1/voice/calls', {\n channel_id: params?.channelId,\n direction: params?.direction,\n status: params?.status,\n from_number: params?.fromNumber,\n to_number: params?.toNumber,\n start_date: params?.startDate instanceof Date ? params.startDate.toISOString() : params?.startDate,\n end_date: params?.endDate instanceof Date ? params.endDate.toISOString() : params?.endDate,\n limit: params?.limit,\n offset: params?.offset,\n });\n return {\n data: response.calls.map(transformCall),\n total: response.total,\n hasMore: (response.offset + response.calls.length) < response.total,\n nextOffset: response.offset + response.calls.length,\n };\n }\n\n /**\n * Get a call by ID\n */\n async get(callId: string): Promise<Call> {\n const response = await this.http.get<ApiCall>(`/v1/voice/calls/${callId}`);\n return transformCall(response);\n }\n\n /**\n * Hang up an active call\n */\n async hangup(callId: string): Promise<void> {\n await this.http.post<HangupCallApiResponse>(`/v1/voice/calls/${callId}/hangup`);\n }\n}\n","/**\n * Voice Rooms Resource\n *\n * LiveKit WebRTC room management for browser-based voice/video calls\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n CreateRoomParams,\n JoinRoomParams,\n LiveKitRoomInfo,\n LiveKitRoom,\n LiveKitParticipant,\n ListRoomsParams,\n} from '../../types';\n\n// API response types (snake_case from server)\ninterface CreateRoomResponse {\n room: {\n id: string;\n name: string;\n display_name: string;\n channel_id: string | null;\n empty_timeout: number;\n max_participants: number;\n ws_url: string;\n token: string;\n created_at: string;\n };\n message: string;\n}\n\ninterface JoinRoomResponse {\n room_name: string;\n ws_url: string;\n token: string;\n participant: {\n identity: string;\n name: string;\n can_publish: boolean;\n can_subscribe: boolean;\n };\n}\n\ninterface ListRoomsResponse {\n rooms: Array<{\n name: string;\n ws_url: string;\n }>;\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface GetRoomResponse {\n room: {\n name: string;\n ws_url: string;\n };\n}\n\nexport class VoiceRoomsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new WebRTC room\n *\n * @example\n * ```typescript\n * const roomInfo = await veroai.voice.rooms.create({\n * name: 'support-call-123',\n * emptyTimeout: 300,\n * maxParticipants: 2,\n * });\n * // Connect to room using roomInfo.wsUrl and roomInfo.token\n * ```\n */\n async create(params: CreateRoomParams): Promise<LiveKitRoomInfo> {\n const response = await this.http.post<CreateRoomResponse>('/voice/rooms', {\n name: params.name,\n empty_timeout: params.emptyTimeout,\n max_participants: params.maxParticipants,\n metadata: params.metadata,\n });\n\n return {\n sid: response.room.id,\n name: response.room.name,\n wsUrl: response.room.ws_url,\n token: response.room.token,\n numParticipants: 0,\n metadata: params.metadata,\n };\n }\n\n /**\n * Join an existing room or create and join if it doesn't exist\n *\n * @example\n * ```typescript\n * const roomInfo = await veroai.voice.rooms.join({\n * roomName: 'support-call-123',\n * participantName: 'Agent Smith',\n * });\n * // Use roomInfo.token to connect via LiveKit client SDK\n * ```\n */\n async join(params: JoinRoomParams): Promise<LiveKitRoomInfo> {\n const response = await this.http.post<JoinRoomResponse>(\n `/voice/rooms/${encodeURIComponent(params.roomName)}/join`,\n {\n participant_name: params.participantName,\n can_publish: params.canPublish,\n can_subscribe: params.canSubscribe,\n metadata: params.metadata,\n }\n );\n\n return {\n sid: '',\n name: response.room_name,\n wsUrl: response.ws_url,\n token: response.token,\n numParticipants: 0,\n };\n }\n\n /**\n * Get room details\n *\n * @example\n * ```typescript\n * const room = await veroai.voice.rooms.get('support-call-123');\n * console.log(`Room: ${room.name}`);\n * ```\n */\n async get(roomName: string): Promise<LiveKitRoom> {\n const response = await this.http.get<GetRoomResponse>(\n `/voice/rooms/${encodeURIComponent(roomName)}`\n );\n\n return {\n sid: '',\n name: response.room.name,\n emptyTimeout: 300,\n maxParticipants: 10,\n creationTime: '',\n numParticipants: 0,\n };\n }\n\n /**\n * List all active rooms\n *\n * @example\n * ```typescript\n * const rooms = await veroai.voice.rooms.list();\n * for (const room of rooms) {\n * console.log(`${room.name}`);\n * }\n * ```\n */\n async list(params?: ListRoomsParams): Promise<LiveKitRoom[]> {\n const searchParams = new URLSearchParams();\n if (params?.names) {\n for (const name of params.names) {\n searchParams.append('names', name);\n }\n }\n const query = searchParams.toString();\n const response = await this.http.get<ListRoomsResponse>(\n `/voice/rooms${query ? `?${query}` : ''}`\n );\n\n return response.rooms.map((room) => ({\n sid: '',\n name: room.name,\n emptyTimeout: 300,\n maxParticipants: 10,\n creationTime: '',\n numParticipants: 0,\n }));\n }\n\n /**\n * Delete a room and disconnect all participants\n *\n * @example\n * ```typescript\n * await veroai.voice.rooms.delete('support-call-123');\n * ```\n */\n async delete(roomName: string): Promise<void> {\n await this.http.delete(`/voice/rooms/${encodeURIComponent(roomName)}`);\n }\n\n /**\n * List participants in a room\n *\n * @example\n * ```typescript\n * const participants = await veroai.voice.rooms.listParticipants('support-call-123');\n * for (const p of participants) {\n * console.log(`${p.name} (${p.state})`);\n * }\n * ```\n */\n async listParticipants(roomName: string): Promise<LiveKitParticipant[]> {\n return this.http.get<LiveKitParticipant[]>(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants`\n );\n }\n\n /**\n * Remove a participant from a room\n *\n * @example\n * ```typescript\n * await veroai.voice.rooms.removeParticipant('support-call-123', 'user-456');\n * ```\n */\n async removeParticipant(roomName: string, identity: string): Promise<void> {\n await this.http.delete(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants/${encodeURIComponent(identity)}`\n );\n }\n\n /**\n * Mute or unmute a participant's audio\n *\n * @example\n * ```typescript\n * // Mute participant\n * await veroai.voice.rooms.muteParticipant('support-call-123', 'user-456', true);\n *\n * // Unmute participant\n * await veroai.voice.rooms.muteParticipant('support-call-123', 'user-456', false);\n * ```\n */\n async muteParticipant(roomName: string, identity: string, muted: boolean): Promise<void> {\n await this.http.post(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants/${encodeURIComponent(identity)}/mute`,\n { muted }\n );\n }\n\n /**\n * Send a data message to participants in a room\n *\n * @example\n * ```typescript\n * // Send to all participants\n * await veroai.voice.rooms.sendData('support-call-123', { type: 'notification', message: 'Recording started' });\n *\n * // Send to specific participants\n * await veroai.voice.rooms.sendData('support-call-123', { type: 'private' }, ['user-456']);\n * ```\n */\n async sendData(\n roomName: string,\n data: Record<string, unknown>,\n destinationIdentities?: string[]\n ): Promise<void> {\n await this.http.post(`/voice/rooms/${encodeURIComponent(roomName)}/data`, {\n data,\n destinationIdentities,\n });\n }\n}\n","/**\n * Voice Resource\n *\n * Combines voice numbers, calls, and rooms resources\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport { VoiceNumbersResource } from './numbers';\nimport { VoiceCallsResource } from './calls';\nimport { VoiceRoomsResource } from './rooms';\n\nexport class VoiceResource {\n /**\n * Phone number management\n */\n readonly numbers: VoiceNumbersResource;\n\n /**\n * Call management\n */\n readonly calls: VoiceCallsResource;\n\n /**\n * LiveKit WebRTC room management for browser-based voice/video calls\n */\n readonly rooms: VoiceRoomsResource;\n\n constructor(http: HttpClient) {\n this.numbers = new VoiceNumbersResource(http);\n this.calls = new VoiceCallsResource(http);\n this.rooms = new VoiceRoomsResource(http);\n }\n}\n\n// Re-export sub-resources\nexport { VoiceNumbersResource } from './numbers';\nexport { VoiceCallsResource } from './calls';\nexport { VoiceRoomsResource } from './rooms';\n","/**\n * Chat Resources\n *\n * Conversations, messages, participants, and user presence management\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Conversation,\n ConversationParticipant,\n ChatMessage,\n ChatUser,\n ChatUserWithPresence,\n CreateConversationParams,\n SendChatMessageParams,\n ListMessagesParams,\n MessagesResponse,\n AddAgentParams,\n ConversationAgent,\n UserPresence,\n UpdatePresenceParams,\n ListUsersParams,\n PaginatedResponse,\n} from '../types';\n\n// ============================================================================\n// API Response Types (snake_case from server)\n// ============================================================================\n\ninterface ApiChatUser {\n id: string;\n email: string;\n first_name: string | null;\n last_name: string | null;\n is_virtual: boolean;\n agent_config_id?: string | null;\n}\n\ninterface ApiChatUserWithPresence extends ApiChatUser {\n status: string;\n status_message: string | null;\n last_seen: string | null;\n created_at: string;\n}\n\ninterface ApiParticipant {\n user_id: string;\n role: string;\n is_active: boolean;\n joined_at: string;\n last_seen?: string | null;\n user?: ApiChatUser;\n}\n\ninterface ApiMessageRead {\n user_id: string;\n read_at: string;\n}\n\ninterface ApiMessage {\n id: string;\n conversation_id: string;\n content: string;\n message_type: string;\n sender_id: string;\n sender?: ApiChatUser;\n read_by?: ApiMessageRead[];\n metadata?: Record<string, unknown>;\n created_at: string;\n edited_at?: string | null;\n}\n\ninterface ApiConversation {\n id: string;\n name: string | null;\n type: string;\n is_active: boolean;\n last_message_at: string | null;\n agent_enabled: boolean;\n agent_config_id: string | null;\n participants?: ApiParticipant[];\n unread_count: number;\n metadata?: Record<string, unknown>;\n created_at: string;\n updated_at?: string;\n}\n\ninterface ApiPresence {\n user_id: string;\n status: string;\n status_message: string | null;\n last_seen: string | null;\n metadata?: Record<string, unknown>;\n}\n\ninterface ApiAgent {\n config_id: string;\n name: string;\n user_id: string | null;\n enabled: boolean;\n}\n\n// ============================================================================\n// Transform Functions\n// ============================================================================\n\nfunction transformUser(data: ApiChatUser): ChatUser {\n return {\n id: data.id,\n email: data.email,\n firstName: data.first_name,\n lastName: data.last_name,\n isVirtual: data.is_virtual,\n agentConfigId: data.agent_config_id,\n };\n}\n\nfunction transformUserWithPresence(data: ApiChatUserWithPresence): ChatUserWithPresence {\n return {\n ...transformUser(data),\n status: data.status as ChatUserWithPresence['status'],\n statusMessage: data.status_message,\n lastSeen: data.last_seen,\n createdAt: data.created_at,\n };\n}\n\nfunction transformParticipant(data: ApiParticipant): ConversationParticipant {\n return {\n userId: data.user_id,\n role: data.role as ConversationParticipant['role'],\n isActive: data.is_active,\n joinedAt: data.joined_at,\n lastSeen: data.last_seen,\n user: data.user ? transformUser(data.user) : undefined,\n };\n}\n\nfunction transformMessage(data: ApiMessage): ChatMessage {\n return {\n id: data.id,\n conversationId: data.conversation_id,\n content: data.content,\n messageType: data.message_type as ChatMessage['messageType'],\n senderId: data.sender_id,\n sender: data.sender ? transformUser(data.sender) : undefined,\n readBy: data.read_by?.map((r) => ({\n userId: r.user_id,\n readAt: r.read_at,\n })),\n metadata: data.metadata,\n createdAt: data.created_at,\n editedAt: data.edited_at,\n };\n}\n\nfunction transformConversation(data: ApiConversation): Conversation {\n return {\n id: data.id,\n name: data.name,\n type: data.type as Conversation['type'],\n isActive: data.is_active,\n lastMessageAt: data.last_message_at,\n agentEnabled: data.agent_enabled,\n agentConfigId: data.agent_config_id,\n participants: data.participants?.map(transformParticipant),\n unreadCount: data.unread_count,\n metadata: data.metadata,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nfunction transformPresence(data: ApiPresence): UserPresence {\n return {\n userId: data.user_id,\n status: data.status as UserPresence['status'],\n statusMessage: data.status_message,\n lastSeen: data.last_seen,\n metadata: data.metadata,\n };\n}\n\nfunction transformAgent(data: ApiAgent): ConversationAgent {\n return {\n configId: data.config_id,\n name: data.name,\n userId: data.user_id,\n enabled: data.enabled,\n };\n}\n\n// ============================================================================\n// Conversations Resource\n// ============================================================================\n\nexport class ConversationsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all conversations for the current user\n */\n async list(): Promise<PaginatedResponse<Conversation>> {\n const response = await this.http.get<{\n conversations: ApiConversation[];\n total: number;\n }>('/v1/chat/conversations');\n\n return {\n data: response.conversations.map(transformConversation),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a conversation by ID\n */\n async get(conversationId: string): Promise<Conversation> {\n const response = await this.http.get<{ conversation: ApiConversation }>(\n `/v1/chat/conversations/${conversationId}`\n );\n return transformConversation(response.conversation);\n }\n\n /**\n * Create a new conversation\n */\n async create(params: CreateConversationParams): Promise<Conversation> {\n const response = await this.http.post<{ conversation: ApiConversation }>(\n '/v1/chat/conversations',\n {\n type: params.type || 'direct',\n name: params.name,\n participant_ids: params.participantIds,\n agent_config_id: params.agentConfigId,\n metadata: params.metadata,\n }\n );\n return transformConversation(response.conversation);\n }\n\n /**\n * Get messages for a conversation\n */\n async getMessages(\n conversationId: string,\n params?: ListMessagesParams\n ): Promise<MessagesResponse> {\n const query: Record<string, string | number> = {};\n if (params?.limit) query.limit = params.limit;\n if (params?.offset) query.offset = params.offset;\n if (params?.before) {\n query.before =\n params.before instanceof Date\n ? params.before.toISOString()\n : params.before;\n }\n\n const response = await this.http.get<{\n messages: ApiMessage[];\n total: number;\n has_more: boolean;\n }>(`/v1/chat/conversations/${conversationId}/messages`, query);\n\n return {\n messages: response.messages.map(transformMessage),\n total: response.total,\n hasMore: response.has_more,\n };\n }\n\n /**\n * Send a message to a conversation\n */\n async sendMessage(\n conversationId: string,\n params: SendChatMessageParams\n ): Promise<ChatMessage> {\n const response = await this.http.post<{ message: ApiMessage }>(\n `/v1/chat/conversations/${conversationId}/messages`,\n {\n content: params.content,\n message_type: params.messageType || 'text',\n metadata: params.metadata,\n }\n );\n return transformMessage(response.message);\n }\n\n /**\n * Mark conversation as read\n */\n async markRead(conversationId: string): Promise<void> {\n await this.http.post(`/v1/chat/conversations/${conversationId}/read`);\n }\n\n /**\n * Add participants to a conversation\n */\n async addParticipants(\n conversationId: string,\n userIds: string[]\n ): Promise<ConversationParticipant[]> {\n const response = await this.http.post<{\n participants: ApiParticipant[];\n }>(`/v1/chat/conversations/${conversationId}/participants`, {\n user_ids: userIds,\n });\n return response.participants.map(transformParticipant);\n }\n\n /**\n * Leave a conversation\n */\n async leave(conversationId: string): Promise<void> {\n await this.http.delete(\n `/v1/chat/conversations/${conversationId}/participants/me`\n );\n }\n\n /**\n * Add an agent to a conversation\n */\n async addAgent(\n conversationId: string,\n params: AddAgentParams\n ): Promise<ConversationAgent | null> {\n const response = await this.http.post<{ agent: ApiAgent | null }>(\n `/v1/chat/conversations/${conversationId}/agent`,\n {\n agent_config_id: params.agentConfigId,\n add_as_participant: params.addAsParticipant ?? true,\n }\n );\n return response.agent ? transformAgent(response.agent) : null;\n }\n\n /**\n * Remove agent from a conversation\n */\n async removeAgent(conversationId: string): Promise<void> {\n await this.http.delete(`/v1/chat/conversations/${conversationId}/agent`);\n }\n\n /**\n * Toggle agent enabled/disabled\n */\n async setAgentEnabled(\n conversationId: string,\n enabled: boolean\n ): Promise<void> {\n await this.http.patch(`/v1/chat/conversations/${conversationId}/agent`, {\n enabled,\n });\n }\n}\n\n// ============================================================================\n// Chat Users Resource\n// ============================================================================\n\nexport class ChatUsersResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all users in the tenant\n */\n async list(params?: ListUsersParams): Promise<PaginatedResponse<ChatUserWithPresence>> {\n const query: Record<string, string | number | boolean> = {};\n if (params?.limit) query.limit = params.limit;\n if (params?.offset) query.offset = params.offset;\n if (params?.includeVirtual !== undefined) {\n query.include_virtual = params.includeVirtual;\n }\n\n const response = await this.http.get<{\n users: ApiChatUserWithPresence[];\n total: number;\n }>('/v1/chat/users', query);\n\n return {\n data: response.users.map(transformUserWithPresence),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get online users\n */\n async online(): Promise<ChatUserWithPresence[]> {\n const response = await this.http.get<{\n users: ApiChatUserWithPresence[];\n }>('/v1/chat/users/online');\n\n return response.users.map(transformUserWithPresence);\n }\n\n /**\n * Get current user profile and presence\n */\n async me(): Promise<ChatUserWithPresence> {\n const response = await this.http.get<{ user: ApiChatUserWithPresence }>(\n '/v1/chat/users/me'\n );\n return transformUserWithPresence(response.user);\n }\n\n /**\n * Update current user's presence status\n */\n async updateStatus(params: UpdatePresenceParams): Promise<void> {\n await this.http.put('/v1/chat/users/me/status', {\n status: params.status,\n status_message: params.statusMessage,\n metadata: params.metadata,\n });\n }\n\n /**\n * Get a user by ID\n */\n async get(userId: string): Promise<ChatUserWithPresence> {\n const response = await this.http.get<{ user: ApiChatUserWithPresence }>(\n `/v1/chat/users/${userId}`\n );\n return transformUserWithPresence(response.user);\n }\n\n /**\n * Get presence for a specific user\n */\n async getPresence(userId: string): Promise<UserPresence> {\n const response = await this.http.get<{ presence: ApiPresence }>(\n `/v1/chat/users/${userId}/presence`\n );\n return transformPresence(response.presence);\n }\n}\n\n// ============================================================================\n// Chat Resource (combines Conversations and Users)\n// ============================================================================\n\nexport class ChatResource {\n /** Conversation management */\n readonly conversations: ConversationsResource;\n\n /** User listing and presence */\n readonly users: ChatUsersResource;\n\n constructor(http: HttpClient) {\n this.conversations = new ConversationsResource(http);\n this.users = new ChatUsersResource(http);\n }\n}\n","/**\n * Agents Resource\n *\n * Manage AI agent configurations for voice and messaging\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n AgentConfig,\n ListAgentsParams,\n CreateAgentParams,\n UpdateAgentParams,\n PaginatedResponse,\n} from '../types';\n\n// API response types (snake_case from server)\ninterface AgentResponse {\n id: string;\n tenant_id: string;\n name: string;\n description: string | null;\n enabled: boolean;\n is_default: boolean;\n model_config: {\n provider: 'anthropic' | 'openai';\n model_id: string;\n temperature: number;\n max_tokens: number;\n };\n system_prompt: string;\n status: 'draft' | 'active' | 'archived';\n version: number;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListAgentsResponse {\n agents: AgentResponse[];\n total: number;\n limit: number;\n offset: number;\n}\n\nfunction transformAgent(agent: AgentResponse): AgentConfig {\n return {\n id: agent.id,\n name: agent.name,\n description: agent.description,\n enabled: agent.enabled,\n modelConfig: {\n provider: agent.model_config.provider,\n modelId: agent.model_config.model_id,\n temperature: agent.model_config.temperature,\n maxTokens: agent.model_config.max_tokens,\n },\n systemPrompt: agent.system_prompt,\n status: agent.status,\n };\n}\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List AI agents\n *\n * @example\n * ```typescript\n * const agents = await veroai.agents.list({ status: 'active' });\n * for (const agent of agents.data) {\n * console.log(`${agent.name} (${agent.modelConfig.provider})`);\n * }\n * ```\n */\n async list(params?: ListAgentsParams): Promise<PaginatedResponse<AgentConfig>> {\n const searchParams = new URLSearchParams();\n if (params?.status) searchParams.set('status', params.status);\n if (params?.enabled !== undefined) searchParams.set('enabled', String(params.enabled));\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.offset) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const response = await this.http.get<ListAgentsResponse>(\n `/agents${query ? `?${query}` : ''}`\n );\n\n return {\n data: response.agents.map(transformAgent),\n total: response.total,\n hasMore: response.offset + response.agents.length < response.total,\n nextOffset: response.offset + response.agents.length < response.total\n ? response.offset + response.limit\n : undefined,\n };\n }\n\n /**\n * Get an agent by ID\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.get('agent_123');\n * console.log(`System prompt: ${agent.systemPrompt}`);\n * ```\n */\n async get(agentId: string): Promise<AgentConfig> {\n const response = await this.http.get<{ agent: AgentResponse }>(\n `/agents/${encodeURIComponent(agentId)}`\n );\n return transformAgent(response.agent);\n }\n\n /**\n * Create a new AI agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.create({\n * name: 'Support Agent',\n * modelConfig: {\n * provider: 'anthropic',\n * modelId: 'claude-3-5-sonnet-20241022',\n * temperature: 0.7,\n * },\n * systemPrompt: 'You are a helpful support agent...',\n * enabled: true,\n * });\n * ```\n */\n async create(params: CreateAgentParams): Promise<AgentConfig> {\n const response = await this.http.post<{ agent: AgentResponse }>('/agents', {\n name: params.name,\n description: params.description,\n model_config: {\n provider: params.modelConfig.provider,\n model_id: params.modelConfig.modelId,\n temperature: params.modelConfig.temperature ?? 0.7,\n max_tokens: params.modelConfig.maxTokens ?? 4096,\n },\n system_prompt: params.systemPrompt,\n enabled: params.enabled ?? false,\n });\n return transformAgent(response.agent);\n }\n\n /**\n * Update an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.update('agent_123', {\n * systemPrompt: 'Updated prompt...',\n * enabled: true,\n * });\n * ```\n */\n async update(agentId: string, params: UpdateAgentParams): Promise<AgentConfig> {\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.systemPrompt !== undefined) body.system_prompt = params.systemPrompt;\n if (params.enabled !== undefined) body.enabled = params.enabled;\n if (params.status !== undefined) body.status = params.status;\n\n if (params.modelConfig) {\n body.model_config = {\n ...(params.modelConfig.provider && { provider: params.modelConfig.provider }),\n ...(params.modelConfig.modelId && { model_id: params.modelConfig.modelId }),\n ...(params.modelConfig.temperature !== undefined && { temperature: params.modelConfig.temperature }),\n ...(params.modelConfig.maxTokens !== undefined && { max_tokens: params.modelConfig.maxTokens }),\n };\n }\n\n const response = await this.http.patch<{ agent: AgentResponse }>(\n `/agents/${encodeURIComponent(agentId)}`,\n body\n );\n return transformAgent(response.agent);\n }\n\n /**\n * Delete an agent\n *\n * @example\n * ```typescript\n * await veroai.agents.delete('agent_123');\n * ```\n */\n async delete(agentId: string): Promise<void> {\n await this.http.delete(`/agents/${encodeURIComponent(agentId)}`);\n }\n\n /**\n * Enable an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.enable('agent_123');\n * ```\n */\n async enable(agentId: string): Promise<AgentConfig> {\n return this.update(agentId, { enabled: true });\n }\n\n /**\n * Disable an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.disable('agent_123');\n * ```\n */\n async disable(agentId: string): Promise<AgentConfig> {\n return this.update(agentId, { enabled: false });\n }\n}\n","/**\n * Realtime Resource\n *\n * WebSocket-based real-time event subscription for the VeroAI SDK.\n * Supports subscribing to channels, event types, or all events.\n */\n\nimport type {\n ConnectionState,\n EventHandler,\n StateChangeHandler,\n ErrorHandler,\n RealtimeConfig,\n RealtimeEvent,\n SubscribeOptions,\n SubscriptionCommand,\n SubscriptionConfirmation,\n TokenFetcher,\n} from './types';\n\nconst DEFAULT_REALTIME_URL = 'wss://wss.veroai.dev/ws';\nconst DEFAULT_RECONNECT_INTERVAL = 1000;\nconst MAX_RECONNECT_INTERVAL = 30000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 10;\nconst DEFAULT_HEARTBEAT_INTERVAL = 30000;\n\n// Declare global types for cross-environment compatibility\ndeclare const window: { WebSocket?: typeof WebSocket } | undefined;\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.WebSocket !== 'undefined';\n}\n\n/**\n * Get WebSocket implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function getWebSocket(): Promise<any> {\n if (isBrowser()) {\n return window!.WebSocket;\n }\n // Node.js environment - dynamically import ws package\n try {\n const ws = await import('ws');\n return ws.default || ws;\n } catch {\n throw new Error(\n 'WebSocket is not available. In Node.js, install the \"ws\" package: npm install ws'\n );\n }\n}\n\nexport class RealtimeResource {\n private readonly config: Required<RealtimeConfig>;\n private readonly tokenFetcher: TokenFetcher;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private ws: any = null;\n private state: ConnectionState = 'disconnected';\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private heartbeatInterval: ReturnType<typeof setInterval> | null = null;\n\n // Event handlers\n private eventHandlers: Set<EventHandler> = new Set();\n private stateHandlers: Set<StateChangeHandler> = new Set();\n private errorHandlers: Set<ErrorHandler> = new Set();\n\n // Active subscriptions for reconnection\n private activeSubscriptions: {\n eventTypes: Set<string>;\n channels: Set<string>;\n subscribedToAll: boolean;\n } = {\n eventTypes: new Set(),\n channels: new Set(),\n subscribedToAll: false,\n };\n\n // Pending subscription confirmations\n private pendingSubscriptions: Map<\n string,\n { resolve: (confirmation: SubscriptionConfirmation) => void; reject: (error: Error) => void }\n > = new Map();\n\n constructor(tokenFetcher: TokenFetcher, config?: RealtimeConfig) {\n this.tokenFetcher = tokenFetcher;\n this.config = {\n url: config?.url ?? DEFAULT_REALTIME_URL,\n autoReconnect: config?.autoReconnect ?? true,\n reconnectInterval: config?.reconnectInterval ?? DEFAULT_RECONNECT_INTERVAL,\n maxReconnectAttempts: config?.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS,\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_HEARTBEAT_INTERVAL,\n };\n }\n\n /**\n * Get current connection state\n */\n getState(): ConnectionState {\n return this.state;\n }\n\n /**\n * Connect to the WebSocket server\n */\n async connect(): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n return;\n }\n\n this.setState('connecting');\n\n return new Promise(async (resolve, reject) => {\n try {\n // Get a short-lived WebSocket token from the API\n const token = await this.tokenFetcher();\n\n const WS = await getWebSocket();\n const url = new URL(this.config.url);\n url.searchParams.set('token', token);\n\n this.ws = new WS(url.toString());\n\n this.ws.onopen = () => {\n this.setState('connected');\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n this.resubscribe();\n resolve();\n };\n\n this.ws.onclose = (event: { reason?: string }) => {\n this.stopHeartbeat();\n this.ws = null;\n\n if (this.state === 'connecting') {\n reject(new Error(`Connection failed: ${event.reason || 'Unknown reason'}`));\n this.setState('disconnected');\n return;\n }\n\n this.setState('disconnected');\n\n if (this.config.autoReconnect && this.shouldReconnect()) {\n this.scheduleReconnect();\n }\n };\n\n this.ws.onerror = (event: { message?: string }) => {\n const error = new Error(\n 'WebSocket error' + (event.message ? `: ${event.message}` : '')\n );\n this.emitError(error);\n\n if (this.state === 'connecting') {\n reject(error);\n }\n };\n\n this.ws.onmessage = (event: { data: string | Buffer }) => {\n this.handleMessage(event.data);\n };\n } catch (error) {\n this.setState('disconnected');\n reject(error);\n }\n });\n }\n\n /**\n * Disconnect from the WebSocket server\n */\n disconnect(): void {\n this.config.autoReconnect = false;\n this.clearReconnectTimeout();\n this.stopHeartbeat();\n\n if (this.ws) {\n this.ws.close(1000, 'Client disconnect');\n this.ws = null;\n }\n\n this.setState('disconnected');\n }\n\n /**\n * Subscribe to all events for the tenant\n */\n async subscribeAll(): Promise<SubscriptionConfirmation> {\n this.activeSubscriptions.subscribedToAll = true;\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'all',\n });\n }\n\n /**\n * Unsubscribe from all events\n */\n async unsubscribeAll(): Promise<SubscriptionConfirmation> {\n this.activeSubscriptions.subscribedToAll = false;\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'all',\n });\n }\n\n /**\n * Subscribe to specific channels\n */\n async subscribeChannels(channelIds: string[]): Promise<SubscriptionConfirmation> {\n for (const id of channelIds) {\n this.activeSubscriptions.channels.add(id);\n }\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'channel',\n channels: channelIds,\n });\n }\n\n /**\n * Unsubscribe from specific channels\n */\n async unsubscribeChannels(channelIds: string[]): Promise<SubscriptionConfirmation> {\n for (const id of channelIds) {\n this.activeSubscriptions.channels.delete(id);\n }\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'channel',\n channels: channelIds,\n });\n }\n\n /**\n * Subscribe to specific event types\n */\n async subscribeEventTypes(eventTypes: string[]): Promise<SubscriptionConfirmation> {\n for (const type of eventTypes) {\n this.activeSubscriptions.eventTypes.add(type);\n }\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'event_type',\n eventTypes,\n });\n }\n\n /**\n * Unsubscribe from specific event types\n */\n async unsubscribeEventTypes(eventTypes: string[]): Promise<SubscriptionConfirmation> {\n for (const type of eventTypes) {\n this.activeSubscriptions.eventTypes.delete(type);\n }\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'event_type',\n eventTypes,\n });\n }\n\n /**\n * Subscribe to channels and/or event types\n */\n async subscribe(options: SubscribeOptions): Promise<void> {\n const promises: Promise<SubscriptionConfirmation>[] = [];\n\n if (options.channels?.length) {\n promises.push(this.subscribeChannels(options.channels));\n }\n\n if (options.eventTypes?.length) {\n promises.push(this.subscribeEventTypes(options.eventTypes));\n }\n\n if (promises.length === 0) {\n throw new Error('Must specify at least one channel or event type');\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Unsubscribe from channels and/or event types\n */\n async unsubscribe(options: SubscribeOptions): Promise<void> {\n const promises: Promise<SubscriptionConfirmation>[] = [];\n\n if (options.channels?.length) {\n promises.push(this.unsubscribeChannels(options.channels));\n }\n\n if (options.eventTypes?.length) {\n promises.push(this.unsubscribeEventTypes(options.eventTypes));\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Add event handler\n */\n onEvent(handler: EventHandler): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n\n /**\n * Add connection state change handler\n */\n onStateChange(handler: StateChangeHandler): () => void {\n this.stateHandlers.add(handler);\n return () => this.stateHandlers.delete(handler);\n }\n\n /**\n * Add error handler\n */\n onError(handler: ErrorHandler): () => void {\n this.errorHandlers.add(handler);\n return () => this.errorHandlers.delete(handler);\n }\n\n /**\n * Remove all handlers\n */\n removeAllHandlers(): void {\n this.eventHandlers.clear();\n this.stateHandlers.clear();\n this.errorHandlers.clear();\n }\n\n // Private methods\n\n private setState(state: ConnectionState): void {\n if (this.state === state) return;\n this.state = state;\n for (const handler of this.stateHandlers) {\n try {\n handler(state);\n } catch (error) {\n console.error('State handler error:', error);\n }\n }\n }\n\n private emitError(error: Error): void {\n for (const handler of this.errorHandlers) {\n try {\n handler(error);\n } catch (e) {\n console.error('Error handler error:', e);\n }\n }\n }\n\n private emitEvent(event: RealtimeEvent): void {\n for (const handler of this.eventHandlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Event handler error:', error);\n }\n }\n }\n\n private handleMessage(data: string | Buffer): void {\n try {\n const message = JSON.parse(typeof data === 'string' ? data : data.toString());\n\n // Handle connection confirmation\n if (message.type === 'connected') {\n // Server sends: { type: 'connected', clientId, tenantId, message }\n // Connection already established, just log/ignore\n return;\n }\n\n // Handle subscription confirmations\n if (message.type === 'subscription_confirmed' || message.type === 'subscription_error') {\n const confirmation = message as SubscriptionConfirmation;\n const key = this.getSubscriptionKey(confirmation);\n const pending = this.pendingSubscriptions.get(key);\n if (pending) {\n this.pendingSubscriptions.delete(key);\n if (confirmation.type === 'subscription_error') {\n pending.reject(new Error(confirmation.error || 'Subscription failed'));\n } else {\n pending.resolve(confirmation);\n }\n }\n return;\n }\n\n // Handle events - server wraps events as: { type: 'event', data: {...}, metadata: {...} }\n if (message.type === 'event' && message.data) {\n const eventData = message.data;\n // Transform snake_case to camelCase\n const event: RealtimeEvent = {\n id: eventData.id,\n tenantId: eventData.tenant_id || eventData.tenantId,\n channelId: eventData.channel_id || eventData.channelId,\n canonicalType: eventData.canonical_type || eventData.canonicalType,\n eventType: eventData.event_type || eventData.eventType,\n direction: eventData.direction,\n payload: eventData.payload,\n enrichment: eventData.enrichment,\n timestamp: eventData.timestamp,\n processedAt: eventData.processed_at || eventData.processedAt,\n };\n this.emitEvent(event);\n }\n } catch (error) {\n this.emitError(new Error(`Failed to parse message: ${error}`));\n }\n }\n\n private async sendSubscription(command: SubscriptionCommand): Promise<SubscriptionConfirmation> {\n if (!this.ws || this.state !== 'connected') {\n throw new Error('Not connected');\n }\n\n return new Promise((resolve, reject) => {\n const key = this.getSubscriptionKey({\n action: command.type,\n subscriptionType: command.subscriptionType,\n });\n\n // Set timeout for response\n const timeout = setTimeout(() => {\n this.pendingSubscriptions.delete(key);\n reject(new Error('Subscription timeout'));\n }, 10000);\n\n this.pendingSubscriptions.set(key, {\n resolve: (confirmation) => {\n clearTimeout(timeout);\n resolve(confirmation);\n },\n reject: (error) => {\n clearTimeout(timeout);\n reject(error);\n },\n });\n\n this.ws!.send(JSON.stringify(command));\n });\n }\n\n private getSubscriptionKey(confirmation: Pick<SubscriptionConfirmation, 'action' | 'subscriptionType'>): string {\n return `${confirmation.action}:${confirmation.subscriptionType}`;\n }\n\n private shouldReconnect(): boolean {\n if (this.config.maxReconnectAttempts === 0) {\n return true; // Infinite reconnection\n }\n return this.reconnectAttempts < this.config.maxReconnectAttempts;\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) return;\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n\n // Exponential backoff\n const delay = Math.min(\n this.config.reconnectInterval * Math.pow(2, this.reconnectAttempts - 1),\n MAX_RECONNECT_INTERVAL\n );\n\n this.reconnectTimeout = setTimeout(async () => {\n this.reconnectTimeout = null;\n try {\n await this.connect();\n } catch {\n // Error already handled in connect()\n }\n }, delay);\n }\n\n private clearReconnectTimeout(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n }\n\n private async resubscribe(): Promise<void> {\n // Re-establish subscriptions after reconnection\n try {\n if (this.activeSubscriptions.subscribedToAll) {\n await this.subscribeAll();\n }\n\n if (this.activeSubscriptions.channels.size > 0) {\n await this.subscribeChannels(Array.from(this.activeSubscriptions.channels));\n }\n\n if (this.activeSubscriptions.eventTypes.size > 0) {\n await this.subscribeEventTypes(Array.from(this.activeSubscriptions.eventTypes));\n }\n } catch (error) {\n this.emitError(new Error(`Failed to resubscribe: ${error}`));\n }\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatInterval = setInterval(() => {\n if (this.ws && this.state === 'connected') {\n // Send ping frame (for ws library in Node.js)\n if (typeof (this.ws as unknown as { ping?: () => void }).ping === 'function') {\n (this.ws as unknown as { ping: () => void }).ping();\n }\n }\n }, this.config.heartbeatInterval);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n }\n }\n}\n\n/**\n * Factory function to create a realtime resource\n */\nexport function createRealtimeResource(tokenFetcher: TokenFetcher, config?: RealtimeConfig): RealtimeResource {\n return new RealtimeResource(tokenFetcher, config);\n}\n","/**\n * VeroAI SDK Client\n *\n * The main entry point for interacting with the VeroAI API.\n *\n * @example\n * ```typescript\n * import { VeroAI } from '@veroai/sdk';\n *\n * const veroai = new VeroAI({ apiKey: 'sk_live_...' });\n *\n * // List channels\n * const { data: channels } = await veroai.channels.list();\n *\n * // Send a message\n * const result = await veroai.messages.send({\n * channelId: 'ch_abc123',\n * to: '+15551234567',\n * content: { type: 'text', text: 'Hello from VeroAI!' }\n * });\n *\n * // Query events\n * const { data: events } = await veroai.events.list({\n * channelId: 'ch_abc123',\n * startDate: new Date('2024-01-01'),\n * });\n * ```\n */\n\nimport type { VeroAIConfig } from './types';\nimport { HttpClient } from './utils/http';\nimport {\n ChannelsResource,\n EventsResource,\n MessagesResource,\n WebhooksResource,\n ApiKeysResource,\n DomainsResource,\n VoiceResource,\n ChatResource,\n} from './resources';\nimport { AgentsResource } from './resources/agents';\nimport { RealtimeResource } from './realtime';\nimport type { RealtimeConfig } from './realtime';\n\nexport class VeroAI {\n private readonly http: HttpClient;\n\n /** Manage communication channels (email, SMS, WhatsApp, etc.) */\n readonly channels: ChannelsResource;\n\n /** Query activity events and analytics */\n readonly events: EventsResource;\n\n /** Send messages through channels */\n readonly messages: MessagesResource;\n\n /** Manage webhook endpoints for real-time notifications */\n readonly webhooks: WebhooksResource;\n\n /** Manage API keys for authentication */\n readonly apiKeys: ApiKeysResource;\n\n /** Manage email domains for sending */\n readonly domains: DomainsResource;\n\n /** Voice phone numbers and call management */\n readonly voice: VoiceResource;\n\n /** AI agent configurations */\n readonly agents: AgentsResource;\n\n /** Chat conversations and users */\n readonly chat: ChatResource;\n\n /** Real-time event subscriptions via WebSocket */\n readonly realtime: RealtimeResource;\n\n /**\n * Create a new VeroAI client instance\n *\n * @param config - Configuration options\n * @param config.apiKey - Your API key (required)\n * @param config.baseUrl - Custom API base URL (optional)\n * @param config.timeout - Request timeout in ms (default: 30000)\n * @param config.maxRetries - Max retry attempts (default: 3)\n * @param config.realtime - Realtime WebSocket configuration\n *\n * @example\n * ```typescript\n * // Basic usage\n * const veroai = new VeroAI({ apiKey: 'sk_live_...' });\n *\n * // With custom options\n * const veroai = new VeroAI({\n * apiKey: 'sk_test_...',\n * baseUrl: 'https://api.staging.veroai.dev',\n * timeout: 60000,\n * maxRetries: 5,\n * });\n * ```\n */\n constructor(config: VeroAIConfig & { realtime?: RealtimeConfig }) {\n this.http = new HttpClient(config);\n\n this.channels = new ChannelsResource(this.http);\n this.events = new EventsResource(this.http);\n this.messages = new MessagesResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.apiKeys = new ApiKeysResource(this.http);\n this.domains = new DomainsResource(this.http);\n this.voice = new VoiceResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.chat = new ChatResource(this.http);\n\n // Create token fetcher for realtime - exchanges API key for short-lived WebSocket JWT\n const tokenFetcher = async (): Promise<string> => {\n const response = await this.http.post<{ token: string }>('/v1/realtime/auth', {});\n return response.token;\n };\n this.realtime = new RealtimeResource(tokenFetcher, config.realtime);\n }\n\n /**\n * Create a client from environment variables\n *\n * Looks for VEROAI_API_KEY environment variable\n *\n * @example\n * ```typescript\n * // Reads VEROAI_API_KEY from environment\n * const veroai = VeroAI.fromEnv();\n * ```\n */\n static fromEnv(overrides?: Partial<VeroAIConfig & { realtime?: RealtimeConfig }>): VeroAI {\n const apiKey = process.env.VEROAI_API_KEY;\n if (!apiKey) {\n throw new Error('VEROAI_API_KEY environment variable is not set');\n }\n\n return new VeroAI({\n apiKey,\n baseUrl: process.env.VEROAI_BASE_URL,\n ...overrides,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/errors.ts","../src/utils/http.ts","../src/resources/channels.ts","../src/resources/events.ts","../src/resources/messages.ts","../src/resources/webhooks.ts","../src/resources/api-keys.ts","../src/resources/domains.ts","../src/resources/voice/numbers.ts","../src/resources/voice/calls.ts","../src/resources/voice/rooms.ts","../src/resources/voice/index.ts","../src/resources/agents.ts","../src/realtime/realtime.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * VeroAI SDK Error Classes\n */\n\nimport type { VeroAIErrorDetails } from '../types';\n\n/**\n * Base error class for all VeroAI SDK errors\n */\nexport class VeroAIError extends Error {\n readonly code: string;\n readonly details?: Record<string, unknown>;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n code: string = 'UNKNOWN_ERROR',\n statusCode?: number,\n details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'VeroAIError';\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n\n // Maintains proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): VeroAIErrorDetails {\n return {\n code: this.code,\n message: this.message,\n details: this.details,\n };\n }\n}\n\n/**\n * Thrown when the API returns an error response\n */\nexport class APIError extends VeroAIError {\n readonly response?: Response;\n\n constructor(\n message: string,\n code: string,\n statusCode: number,\n details?: Record<string, unknown>,\n response?: Response\n ) {\n super(message, code, statusCode, details);\n this.name = 'APIError';\n this.response = response;\n }\n}\n\n/**\n * Thrown when authentication fails (401)\n */\nexport class AuthenticationError extends APIError {\n constructor(message: string = 'Invalid API key or token', details?: Record<string, unknown>) {\n super(message, 'AUTHENTICATION_ERROR', 401, details);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Thrown when authorization fails (403)\n */\nexport class AuthorizationError extends APIError {\n constructor(message: string = 'Insufficient permissions', details?: Record<string, unknown>) {\n super(message, 'AUTHORIZATION_ERROR', 403, details);\n this.name = 'AuthorizationError';\n }\n}\n\n/**\n * Thrown when a resource is not found (404)\n */\nexport class NotFoundError extends APIError {\n constructor(message: string = 'Resource not found', details?: Record<string, unknown>) {\n super(message, 'NOT_FOUND', 404, details);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Thrown when request validation fails (400)\n */\nexport class ValidationError extends APIError {\n constructor(message: string = 'Invalid request', details?: Record<string, unknown>) {\n super(message, 'VALIDATION_ERROR', 400, details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Thrown when rate limit is exceeded (429)\n */\nexport class RateLimitError extends APIError {\n readonly retryAfter?: number;\n\n constructor(\n message: string = 'Rate limit exceeded',\n retryAfter?: number,\n details?: Record<string, unknown>\n ) {\n super(message, 'RATE_LIMIT_EXCEEDED', 429, details);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Thrown when the server returns an error (5xx)\n */\nexport class ServerError extends APIError {\n constructor(\n message: string = 'Internal server error',\n statusCode: number = 500,\n details?: Record<string, unknown>\n ) {\n super(message, 'SERVER_ERROR', statusCode, details);\n this.name = 'ServerError';\n }\n}\n\n/**\n * Thrown when a request times out\n */\nexport class TimeoutError extends VeroAIError {\n constructor(message: string = 'Request timed out') {\n super(message, 'TIMEOUT_ERROR');\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Thrown when there's a network connectivity issue\n */\nexport class NetworkError extends VeroAIError {\n constructor(message: string = 'Network error', cause?: Error) {\n super(message, 'NETWORK_ERROR');\n this.name = 'NetworkError';\n this.cause = cause;\n }\n}\n","/**\n * HTTP Client for VeroAI SDK\n */\n\nimport type { VeroAIConfig } from '../types';\nimport {\n APIError,\n AuthenticationError,\n AuthorizationError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServerError,\n TimeoutError,\n NetworkError,\n} from './errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n timeout?: number;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: VeroAIConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, '') || 'https://api.veroai.dev';\n this.timeout = config.timeout || 30000;\n this.maxRetries = config.maxRetries ?? 3;\n this.fetchFn = config.fetch || globalThis.fetch;\n\n if (!this.apiKey) {\n throw new Error('API key is required');\n }\n\n if (!this.fetchFn) {\n throw new Error(\n 'fetch is not available. Please provide a fetch implementation or use Node.js >= 18.'\n );\n }\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n const timeout = options.timeout || this.timeout;\n\n let lastError: Error | null = null;\n let attempt = 0;\n\n while (attempt <= this.maxRetries) {\n try {\n const response = await this.executeRequest(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n timeout,\n });\n\n if (!response.ok) {\n const error = await this.handleErrorResponse(response);\n\n // Only retry on 5xx errors or rate limits with retry-after\n if (response.status >= 500 || response.status === 429) {\n const retryAfter = this.getRetryAfter(response, attempt);\n if (attempt < this.maxRetries && retryAfter > 0) {\n await this.sleep(retryAfter);\n attempt++;\n continue;\n }\n }\n\n throw error;\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return await response.json() as T;\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n\n lastError = error as Error;\n\n // Retry on network errors\n if (attempt < this.maxRetries) {\n await this.sleep(this.calculateBackoff(attempt));\n attempt++;\n continue;\n }\n\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new NetworkError('Failed to connect to API', error);\n }\n\n throw error;\n }\n }\n\n throw lastError || new NetworkError('Request failed after retries');\n }\n\n private async executeRequest(\n url: string,\n options: {\n method: string;\n headers: Headers;\n body?: string;\n timeout: number;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), options.timeout);\n\n try {\n return await this.fetchFn(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new TimeoutError(`Request timed out after ${options.timeout}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(path.startsWith('/') ? path : `/${path}`, this.baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n private buildHeaders(custom?: Record<string, string>): Headers {\n const headers = new Headers({\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': '@veroai/sdk/0.1.0',\n });\n\n if (custom) {\n for (const [key, value] of Object.entries(custom)) {\n headers.set(key, value);\n }\n }\n\n return headers;\n }\n\n private async handleErrorResponse(response: Response): Promise<APIError> {\n let errorData: { error?: { code?: string; message?: string; details?: Record<string, unknown> } } = {};\n\n try {\n const json = await response.json();\n if (json && typeof json === 'object') {\n errorData = json as typeof errorData;\n }\n } catch {\n // Response body is not JSON\n }\n\n const code = errorData.error?.code || 'API_ERROR';\n const message = errorData.error?.message || response.statusText || 'Unknown error';\n const details = errorData.error?.details;\n\n switch (response.status) {\n case 400:\n return new ValidationError(message, details);\n case 401:\n return new AuthenticationError(message, details);\n case 403:\n return new AuthorizationError(message, details);\n case 404:\n return new NotFoundError(message, details);\n case 429: {\n const retryAfter = parseInt(response.headers.get('Retry-After') || '60', 10);\n return new RateLimitError(message, retryAfter, details);\n }\n default:\n if (response.status >= 500) {\n return new ServerError(message, response.status, details);\n }\n return new APIError(message, code, response.status, details, response);\n }\n }\n\n private getRetryAfter(response: Response, attempt: number): number {\n const retryAfterHeader = response.headers.get('Retry-After');\n if (retryAfterHeader) {\n const retryAfter = parseInt(retryAfterHeader, 10);\n if (!isNaN(retryAfter)) {\n return retryAfter * 1000; // Convert to ms\n }\n }\n return this.calculateBackoff(attempt);\n }\n\n private calculateBackoff(attempt: number): number {\n // Exponential backoff with jitter: 1s, 2s, 4s, 8s...\n const baseDelay = Math.min(1000 * Math.pow(2, attempt), 30000);\n const jitter = Math.random() * 1000;\n return baseDelay + jitter;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n // Convenience methods\n async get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: 'PATCH', path, body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path });\n }\n}\n","/**\n * Channels Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Channel,\n CreateChannelParams,\n UpdateChannelParams,\n ChannelHealth,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiChannel {\n id: string;\n tenant_id: string;\n name: string;\n description: string | null;\n adapter_type: string;\n direction: string;\n status: string;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListChannelsApiResponse {\n channels: ApiChannel[];\n total: number;\n}\n\ninterface CreateChannelApiResponse {\n channel: ApiChannel;\n oauth_url?: string;\n}\n\ninterface ChannelHealthApiResponse {\n status: string;\n last_event_at: string | null;\n error_count_24h: number;\n success_rate: number;\n}\n\nfunction transformChannel(data: ApiChannel): Channel {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n description: data.description,\n adapterType: data.adapter_type as Channel['adapterType'],\n direction: data.direction as Channel['direction'],\n status: data.status as Channel['status'],\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nexport class ChannelsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all channels\n */\n async list(): Promise<PaginatedResponse<Channel>> {\n const response = await this.http.get<ListChannelsApiResponse>('/v1/channels');\n return {\n data: response.channels.map(transformChannel),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a channel by ID\n */\n async get(channelId: string): Promise<Channel> {\n const response = await this.http.get<{ channel: ApiChannel }>(`/v1/channels/${channelId}`);\n return transformChannel(response.channel);\n }\n\n /**\n * Create a new channel\n * @returns The created channel and optionally an OAuth URL for OAuth-based adapters\n */\n async create(params: CreateChannelParams): Promise<{ channel: Channel; oauthUrl?: string }> {\n const response = await this.http.post<CreateChannelApiResponse>('/v1/channels', {\n name: params.name,\n description: params.description,\n adapter_type: params.adapterType,\n direction: params.direction,\n config: params.config,\n });\n return {\n channel: transformChannel(response.channel),\n oauthUrl: response.oauth_url,\n };\n }\n\n /**\n * Update a channel\n */\n async update(channelId: string, params: UpdateChannelParams): Promise<Channel> {\n const response = await this.http.put<{ channel: ApiChannel }>(`/v1/channels/${channelId}`, {\n name: params.name,\n description: params.description,\n status: params.status,\n config: params.config,\n });\n return transformChannel(response.channel);\n }\n\n /**\n * Delete a channel\n */\n async delete(channelId: string): Promise<void> {\n await this.http.delete(`/v1/channels/${channelId}`);\n }\n\n /**\n * Test channel connectivity\n */\n async test(channelId: string): Promise<{ success: boolean; message?: string }> {\n return this.http.post<{ success: boolean; message?: string }>(`/v1/channels/${channelId}/test`);\n }\n\n /**\n * Get channel health metrics\n */\n async health(channelId: string): Promise<ChannelHealth> {\n const response = await this.http.get<ChannelHealthApiResponse>(`/v1/channels/${channelId}/health`);\n return {\n status: response.status as ChannelHealth['status'],\n lastEventAt: response.last_event_at,\n errorCount24h: response.error_count_24h,\n successRate: response.success_rate,\n };\n }\n}\n","/**\n * Events Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n ActivityEvent,\n ListEventsParams,\n EventStats,\n TimeSeriesDataPoint,\n TimeSeriesGranularity,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiActivityEvent {\n event_id: string;\n tenant_id: string;\n channel_id: string;\n event_type: string;\n canonical_type: string;\n direction: string;\n adapter_type: string;\n occurred_at: string;\n ingested_at: string;\n payload: Record<string, unknown>;\n}\n\ninterface ListEventsApiResponse {\n events: ApiActivityEvent[];\n total: number;\n next_offset?: number;\n}\n\ninterface EventStatsApiResponse {\n total_events: number;\n events_by_type: Record<string, number>;\n events_by_channel: Record<string, number>;\n}\n\ninterface TimeSeriesApiResponse {\n data: Array<{ timestamp: string; value: number }>;\n granularity: string;\n period_days: number;\n}\n\nfunction transformEvent(data: ApiActivityEvent): ActivityEvent {\n return {\n eventId: data.event_id,\n tenantId: data.tenant_id,\n channelId: data.channel_id,\n eventType: data.event_type,\n canonicalType: data.canonical_type as ActivityEvent['canonicalType'],\n direction: data.direction as ActivityEvent['direction'],\n adapterType: data.adapter_type,\n occurredAt: data.occurred_at,\n ingestedAt: data.ingested_at,\n payload: data.payload,\n };\n}\n\nexport class EventsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List activity events with optional filters\n */\n async list(params: ListEventsParams = {}): Promise<PaginatedResponse<ActivityEvent>> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit,\n offset: params.offset,\n channel_id: params.channelId,\n event_type: params.eventType,\n canonical_type: params.canonicalType,\n direction: params.direction,\n };\n\n if (params.startDate) {\n query.start_date = params.startDate instanceof Date\n ? params.startDate.toISOString()\n : params.startDate;\n }\n\n if (params.endDate) {\n query.end_date = params.endDate instanceof Date\n ? params.endDate.toISOString()\n : params.endDate;\n }\n\n const response = await this.http.get<ListEventsApiResponse>('/v1/events', query);\n\n return {\n data: response.events.map(transformEvent),\n total: response.total,\n hasMore: response.next_offset !== undefined,\n nextOffset: response.next_offset,\n };\n }\n\n /**\n * Get a single event by ID\n */\n async get(eventId: string): Promise<ActivityEvent> {\n const response = await this.http.get<ApiActivityEvent>(`/v1/events/${eventId}`);\n return transformEvent(response);\n }\n\n /**\n * Get event statistics summary\n */\n async stats(options: { days?: number } = {}): Promise<EventStats> {\n const response = await this.http.get<EventStatsApiResponse>('/v1/events/stats/summary', {\n days: options.days || 7,\n });\n\n return {\n totalEvents: response.total_events,\n eventsByType: response.events_by_type,\n eventsByChannel: response.events_by_channel,\n };\n }\n\n /**\n * Get time series data for charts\n */\n async timeseries(options: {\n days?: number;\n granularity?: TimeSeriesGranularity;\n } = {}): Promise<TimeSeriesDataPoint[]> {\n const response = await this.http.get<TimeSeriesApiResponse>('/v1/events/stats/timeseries', {\n days: options.days || 7,\n granularity: options.granularity || 'hour',\n });\n\n return response.data;\n }\n}\n","/**\n * Messages Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type { SendMessageParams, SendMessageResult } from '../types';\n\ninterface SendMessageApiResponse {\n message_id: string;\n event_id: string;\n status: 'queued' | 'sent';\n provider_message_id?: string;\n}\n\nexport class MessagesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Send a message through a channel\n *\n * @example\n * ```typescript\n * // Send an SMS\n * const result = await veroai.messages.send({\n * channelId: 'ch_abc123',\n * to: '+15551234567',\n * content: { type: 'text', text: 'Hello from VeroAI!' }\n * });\n *\n * // Send an email\n * const result = await veroai.messages.send({\n * channelId: 'ch_def456',\n * to: 'user@example.com',\n * subject: 'Welcome!',\n * content: {\n * type: 'html',\n * html: '<h1>Welcome to our platform</h1>'\n * }\n * });\n * ```\n */\n async send(params: SendMessageParams): Promise<SendMessageResult> {\n const response = await this.http.post<SendMessageApiResponse>('/v1/messages', {\n channel_id: params.channelId,\n to: params.to,\n subject: params.subject,\n content: params.content,\n metadata: params.metadata,\n });\n\n return {\n messageId: response.message_id,\n eventId: response.event_id,\n status: response.status,\n providerMessageId: response.provider_message_id,\n };\n }\n\n /**\n * Send a message to multiple recipients (batch)\n *\n * @example\n * ```typescript\n * const results = await veroai.messages.sendBatch({\n * channelId: 'ch_abc123',\n * messages: [\n * { to: '+15551234567', content: { type: 'text', text: 'Hello!' } },\n * { to: '+15559876543', content: { type: 'text', text: 'Hi there!' } },\n * ]\n * });\n * ```\n */\n async sendBatch(params: {\n channelId: string;\n messages: Array<{\n to: string;\n subject?: string;\n content: SendMessageParams['content'];\n metadata?: Record<string, unknown>;\n }>;\n }): Promise<SendMessageResult[]> {\n const results: SendMessageResult[] = [];\n\n // Process in batches of 100\n const batchSize = 100;\n for (let i = 0; i < params.messages.length; i += batchSize) {\n const batch = params.messages.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map(msg =>\n this.send({\n channelId: params.channelId,\n to: msg.to,\n subject: msg.subject,\n content: msg.content,\n metadata: msg.metadata,\n })\n )\n );\n results.push(...batchResults);\n }\n\n return results;\n }\n}\n","/**\n * Webhooks Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Webhook,\n CreateWebhookParams,\n UpdateWebhookParams,\n WebhookDelivery,\n WebhookStats,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiWebhook {\n id: string;\n tenant_id: string;\n name: string;\n url: string;\n events: string[];\n channel_id: string | null;\n headers: Record<string, string>;\n status: string;\n retry_config: {\n enabled: boolean;\n max_attempts: number;\n backoff: string;\n };\n created_at: string;\n updated_at: string;\n}\n\ninterface ApiWebhookDelivery {\n id: string;\n webhook_id: string;\n event_id: string;\n event_type?: string;\n status: string;\n attempts: number;\n response_code: number | null;\n response_body: string | null;\n response_time_ms: number | null;\n created_at: string;\n completed_at: string | null;\n}\n\ninterface ListWebhooksApiResponse {\n webhooks: ApiWebhook[];\n total: number;\n}\n\ninterface CreateWebhookApiResponse {\n webhook: ApiWebhook;\n secret: string;\n}\n\ninterface WebhookDeliveriesApiResponse {\n deliveries: ApiWebhookDelivery[];\n total: number;\n has_more: boolean;\n next_cursor?: string;\n}\n\ninterface WebhookStatsApiResponse {\n total: number;\n success: number;\n failed: number;\n pending: number;\n success_rate: number;\n average_response_time_ms: number;\n time_range: string;\n}\n\nfunction transformWebhook(data: ApiWebhook): Webhook {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n url: data.url,\n events: data.events,\n channelId: data.channel_id,\n headers: data.headers,\n status: data.status as Webhook['status'],\n retryConfig: {\n enabled: data.retry_config?.enabled,\n maxAttempts: data.retry_config?.max_attempts,\n backoff: data.retry_config?.backoff as 'linear' | 'exponential',\n },\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nfunction transformDelivery(data: ApiWebhookDelivery): WebhookDelivery {\n return {\n id: data.id,\n webhookId: data.webhook_id,\n eventId: data.event_id,\n eventType: data.event_type,\n status: data.status as WebhookDelivery['status'],\n attempts: data.attempts,\n responseCode: data.response_code,\n responseBody: data.response_body,\n responseTimeMs: data.response_time_ms,\n createdAt: data.created_at,\n completedAt: data.completed_at,\n };\n}\n\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all webhooks\n */\n async list(): Promise<PaginatedResponse<Webhook>> {\n const response = await this.http.get<ListWebhooksApiResponse>('/v1/webhooks');\n return {\n data: response.webhooks.map(transformWebhook),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a webhook by ID\n */\n async get(webhookId: string): Promise<Webhook> {\n const response = await this.http.get<{ webhook: ApiWebhook }>(`/v1/webhooks/${webhookId}`);\n return transformWebhook(response.webhook);\n }\n\n /**\n * Create a new webhook\n * @returns The created webhook and the signing secret (only returned once)\n */\n async create(params: CreateWebhookParams): Promise<{ webhook: Webhook; secret: string }> {\n const response = await this.http.post<CreateWebhookApiResponse>('/v1/webhooks', {\n name: params.name,\n url: params.url,\n events: params.events,\n channel_id: params.channelId,\n headers: params.headers,\n retry_config: params.retryConfig ? {\n enabled: params.retryConfig.enabled ?? true,\n max_attempts: params.retryConfig.maxAttempts ?? 5,\n backoff: params.retryConfig.backoff ?? 'exponential',\n } : undefined,\n });\n return {\n webhook: transformWebhook(response.webhook),\n secret: response.secret,\n };\n }\n\n /**\n * Update a webhook\n */\n async update(webhookId: string, params: UpdateWebhookParams): Promise<Webhook> {\n const response = await this.http.patch<{ webhook: ApiWebhook }>(`/v1/webhooks/${webhookId}`, {\n name: params.name,\n url: params.url,\n events: params.events,\n channel_id: params.channelId,\n headers: params.headers,\n status: params.status,\n retry_config: params.retryConfig ? {\n enabled: params.retryConfig.enabled,\n max_attempts: params.retryConfig.maxAttempts,\n backoff: params.retryConfig.backoff,\n } : undefined,\n });\n return transformWebhook(response.webhook);\n }\n\n /**\n * Delete a webhook\n */\n async delete(webhookId: string): Promise<void> {\n await this.http.delete(`/v1/webhooks/${webhookId}`);\n }\n\n /**\n * Regenerate webhook signing secret\n * @returns The new signing secret (only returned once)\n */\n async regenerateSecret(webhookId: string): Promise<{ webhook: Webhook; secret: string }> {\n const response = await this.http.post<CreateWebhookApiResponse>(\n `/v1/webhooks/${webhookId}/regenerate-secret`\n );\n return {\n webhook: transformWebhook(response.webhook),\n secret: response.secret,\n };\n }\n\n /**\n * List delivery history for a webhook\n */\n async deliveries(\n webhookId: string,\n options: { limit?: number; cursor?: string } = {}\n ): Promise<PaginatedResponse<WebhookDelivery> & { nextCursor?: string }> {\n const response = await this.http.get<WebhookDeliveriesApiResponse>(\n `/v1/webhooks/${webhookId}/deliveries`,\n {\n limit: options.limit || 50,\n cursor: options.cursor,\n }\n );\n return {\n data: response.deliveries.map(transformDelivery),\n total: response.total,\n hasMore: response.has_more,\n nextCursor: response.next_cursor,\n };\n }\n\n /**\n * Get webhook delivery statistics\n */\n async stats(\n webhookId: string,\n options: { timeRange?: '1h' | '24h' | '7d' } = {}\n ): Promise<WebhookStats> {\n const response = await this.http.get<WebhookStatsApiResponse>(\n `/v1/webhooks/${webhookId}/stats`,\n {\n time_range: options.timeRange || '24h',\n }\n );\n return {\n total: response.total,\n success: response.success,\n failed: response.failed,\n pending: response.pending,\n successRate: response.success_rate,\n averageResponseTimeMs: response.average_response_time_ms,\n timeRange: response.time_range as WebhookStats['timeRange'],\n };\n }\n}\n","/**\n * API Keys Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n ApiKey,\n CreateApiKeyParams,\n CreateApiKeyResult,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiApiKey {\n id: string;\n tenant_id: string;\n name: string;\n key_prefix: string;\n environment: string;\n scopes: string[];\n expires_at: string | null;\n last_used_at: string | null;\n created_at: string;\n}\n\ninterface ListApiKeysApiResponse {\n api_keys: ApiApiKey[];\n total: number;\n}\n\ninterface CreateApiKeyApiResponse {\n api_key: ApiApiKey;\n key: string;\n}\n\nfunction transformApiKey(data: ApiApiKey): ApiKey {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n name: data.name,\n keyPrefix: data.key_prefix,\n environment: data.environment as ApiKey['environment'],\n scopes: data.scopes,\n expiresAt: data.expires_at,\n lastUsedAt: data.last_used_at,\n createdAt: data.created_at,\n };\n}\n\nexport class ApiKeysResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all API keys\n */\n async list(): Promise<PaginatedResponse<ApiKey>> {\n const response = await this.http.get<ListApiKeysApiResponse>('/v1/api-keys');\n return {\n data: response.api_keys.map(transformApiKey),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get an API key by ID\n */\n async get(keyId: string): Promise<ApiKey> {\n const response = await this.http.get<{ api_key: ApiApiKey }>(`/v1/api-keys/${keyId}`);\n return transformApiKey(response.api_key);\n }\n\n /**\n * Create a new API key\n * @returns The created API key and the plaintext key (only returned once)\n *\n * @example\n * ```typescript\n * const { apiKey, key } = await veroai.apiKeys.create({\n * name: 'Production Key',\n * environment: 'production',\n * scopes: ['channels:read', 'channels:write', 'messages:send'],\n * });\n *\n * // Save this key securely - it won't be shown again!\n * console.log('API Key:', key); // sk_live_abc123...\n * ```\n */\n async create(params: CreateApiKeyParams): Promise<CreateApiKeyResult> {\n const response = await this.http.post<CreateApiKeyApiResponse>('/v1/api-keys', {\n name: params.name,\n environment: params.environment,\n scopes: params.scopes,\n expires_at: params.expiresAt instanceof Date\n ? params.expiresAt.toISOString()\n : params.expiresAt,\n });\n return {\n apiKey: transformApiKey(response.api_key),\n key: response.key,\n };\n }\n\n /**\n * Delete (revoke) an API key\n */\n async delete(keyId: string): Promise<void> {\n await this.http.delete(`/v1/api-keys/${keyId}`);\n }\n\n /**\n * Alias for delete - revoke an API key\n */\n async revoke(keyId: string): Promise<void> {\n return this.delete(keyId);\n }\n}\n","/**\n * Domains Resource\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n Domain,\n CreateDomainParams,\n VerifyDomainResult,\n PaginatedResponse,\n} from '../types';\n\ninterface ApiDomain {\n id: string;\n tenant_id: string;\n domain: string;\n status: string;\n verification_record: string | null;\n verification_status: {\n dkim: boolean;\n spf: boolean;\n dmarc: boolean;\n mx: boolean;\n last_checked_at?: string | null;\n };\n dns_records: Array<{\n type: string;\n name: string;\n value: string;\n priority?: number;\n verified: boolean;\n }>;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListDomainsApiResponse {\n domains: ApiDomain[];\n total: number;\n}\n\ninterface CreateDomainApiResponse {\n domain: ApiDomain;\n verification_record?: {\n type: string;\n name: string;\n value: string;\n };\n}\n\ninterface VerifyDomainApiResponse {\n domain: ApiDomain;\n verification_results: {\n dkim: { verified: boolean; error?: string };\n spf: { verified: boolean; error?: string };\n dmarc: { verified: boolean; error?: string };\n mx: { verified: boolean; error?: string };\n };\n}\n\nfunction transformDomain(data: ApiDomain): Domain {\n return {\n id: data.id,\n tenantId: data.tenant_id,\n domain: data.domain,\n status: data.status as Domain['status'],\n verificationRecord: data.verification_record,\n verificationStatus: {\n dkim: data.verification_status.dkim,\n spf: data.verification_status.spf,\n dmarc: data.verification_status.dmarc,\n mx: data.verification_status.mx,\n lastCheckedAt: data.verification_status.last_checked_at,\n },\n dnsRecords: data.dns_records.map(record => ({\n type: record.type as 'MX' | 'TXT' | 'CNAME',\n name: record.name,\n value: record.value,\n priority: record.priority,\n verified: record.verified,\n })),\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\nexport class DomainsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all domains\n */\n async list(): Promise<PaginatedResponse<Domain>> {\n const response = await this.http.get<ListDomainsApiResponse>('/v1/domains');\n return {\n data: response.domains.map(transformDomain),\n total: response.total,\n hasMore: false,\n };\n }\n\n /**\n * Get a domain by ID\n */\n async get(domainId: string): Promise<Domain> {\n const response = await this.http.get<{ domain: ApiDomain }>(`/v1/domains/${domainId}`);\n return transformDomain(response.domain);\n }\n\n /**\n * Add a new domain\n *\n * @example\n * ```typescript\n * // Manual DNS verification\n * const { domain } = await veroai.domains.create({\n * domain: 'example.com',\n * verificationMethod: 'manual',\n * });\n *\n * // Automatic via Cloudflare\n * const { domain } = await veroai.domains.create({\n * domain: 'example.com',\n * verificationMethod: 'cloudflare',\n * cloudflareApiToken: 'your_cf_token',\n * });\n * ```\n */\n async create(params: CreateDomainParams): Promise<{ domain: Domain; verificationRecord?: { type: string; name: string; value: string } }> {\n const response = await this.http.post<CreateDomainApiResponse>('/v1/domains', {\n domain: params.domain,\n verification_method: params.verificationMethod,\n cloudflare_api_token: params.cloudflareApiToken,\n });\n return {\n domain: transformDomain(response.domain),\n verificationRecord: response.verification_record,\n };\n }\n\n /**\n * Delete a domain\n */\n async delete(domainId: string): Promise<void> {\n await this.http.delete(`/v1/domains/${domainId}`);\n }\n\n /**\n * Verify domain DNS records\n */\n async verify(domainId: string): Promise<VerifyDomainResult> {\n const response = await this.http.post<VerifyDomainApiResponse>(\n `/v1/domains/${domainId}/verify`\n );\n return {\n domain: transformDomain(response.domain),\n verificationResults: response.verification_results,\n };\n }\n\n /**\n * Get DNS records that need to be configured\n */\n async dnsRecords(domainId: string): Promise<Domain['dnsRecords']> {\n const domain = await this.get(domainId);\n return domain.dnsRecords;\n }\n}\n","/**\n * Voice Numbers Resource\n *\n * Manages phone number operations for voice channels\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n PhoneNumber,\n AvailableNumber,\n SearchNumbersParams,\n PurchaseNumberParams,\n UpdateNumberParams,\n ListNumbersParams,\n PaginatedResponse,\n} from '../../types';\n\n// API response types (snake_case)\ninterface ApiPhoneNumber {\n id: string;\n number: string;\n country: string;\n region: string | null;\n locality: string | null;\n capabilities: string[];\n channel_id: string | null;\n channel_name?: string | null;\n status: string;\n monthly_cost_cents: number | null;\n setup_cost_cents: number | null;\n created_at: string;\n updated_at: string;\n}\n\ninterface ApiAvailableNumber {\n number: string;\n country: string;\n region: string | null;\n locality: string | null;\n capabilities: string[];\n monthly_cost_cents: number;\n setup_cost_cents: number;\n provider: string;\n}\n\ninterface ListNumbersApiResponse {\n numbers: ApiPhoneNumber[];\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface SearchNumbersApiResponse {\n available_numbers: ApiAvailableNumber[];\n total: number;\n search_params: Record<string, unknown>;\n}\n\ninterface PurchaseNumberApiResponse {\n number: ApiPhoneNumber;\n message: string;\n}\n\ninterface UpdateNumberApiResponse {\n number: ApiPhoneNumber;\n}\n\n/**\n * Transform API phone number to SDK phone number\n */\nfunction transformPhoneNumber(data: ApiPhoneNumber): PhoneNumber {\n return {\n id: data.id,\n number: data.number,\n country: data.country,\n region: data.region,\n locality: data.locality,\n capabilities: data.capabilities as PhoneNumber['capabilities'],\n channelId: data.channel_id,\n channelName: data.channel_name,\n status: data.status as PhoneNumber['status'],\n monthlyCostCents: data.monthly_cost_cents,\n setupCostCents: data.setup_cost_cents,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n };\n}\n\n/**\n * Transform API available number to SDK available number\n */\nfunction transformAvailableNumber(data: ApiAvailableNumber): AvailableNumber {\n return {\n number: data.number,\n country: data.country,\n region: data.region,\n locality: data.locality,\n capabilities: data.capabilities as AvailableNumber['capabilities'],\n monthlyCostCents: data.monthly_cost_cents,\n setupCostCents: data.setup_cost_cents,\n provider: data.provider,\n };\n}\n\nexport class VoiceNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Search for available phone numbers to purchase\n */\n async search(params: SearchNumbersParams): Promise<AvailableNumber[]> {\n const response = await this.http.get<SearchNumbersApiResponse>('/v1/voice/numbers/search', {\n country: params.country,\n area_code: params.areaCode,\n contains: params.contains,\n capabilities: params.capabilities?.join(','),\n limit: params.limit,\n });\n return response.available_numbers.map(transformAvailableNumber);\n }\n\n /**\n * Purchase a phone number\n */\n async purchase(params: PurchaseNumberParams): Promise<PhoneNumber> {\n const response = await this.http.post<PurchaseNumberApiResponse>('/v1/voice/numbers/purchase', {\n number: params.number,\n channel_id: params.channelId,\n });\n return transformPhoneNumber(response.number);\n }\n\n /**\n * List owned phone numbers\n */\n async list(params?: ListNumbersParams): Promise<PaginatedResponse<PhoneNumber>> {\n const response = await this.http.get<ListNumbersApiResponse>('/v1/voice/numbers', {\n channel_id: params?.channelId,\n status: params?.status,\n country: params?.country,\n capabilities: params?.capabilities?.join(','),\n limit: params?.limit,\n offset: params?.offset,\n });\n return {\n data: response.numbers.map(transformPhoneNumber),\n total: response.total,\n hasMore: (response.offset + response.numbers.length) < response.total,\n nextOffset: response.offset + response.numbers.length,\n };\n }\n\n /**\n * Get a phone number by ID\n */\n async get(numberId: string): Promise<PhoneNumber> {\n const response = await this.http.get<ApiPhoneNumber>(`/v1/voice/numbers/${numberId}`);\n return transformPhoneNumber(response);\n }\n\n /**\n * Update a phone number (assign/unassign to channel)\n */\n async update(numberId: string, params: UpdateNumberParams): Promise<PhoneNumber> {\n const response = await this.http.patch<UpdateNumberApiResponse>(`/v1/voice/numbers/${numberId}`, {\n channel_id: params.channelId,\n });\n return transformPhoneNumber(response.number);\n }\n\n /**\n * Release a phone number\n */\n async release(numberId: string): Promise<void> {\n await this.http.delete(`/v1/voice/numbers/${numberId}`);\n }\n\n /**\n * Assign a phone number to a channel\n */\n async assignToChannel(numberId: string, channelId: string): Promise<PhoneNumber> {\n return this.update(numberId, { channelId });\n }\n\n /**\n * Unassign a phone number from its channel\n */\n async unassignFromChannel(numberId: string): Promise<PhoneNumber> {\n return this.update(numberId, { channelId: null });\n }\n}\n","/**\n * Voice Calls Resource\n *\n * Manages voice call operations\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n Call,\n DialParams,\n ListCallsParams,\n PaginatedResponse,\n} from '../../types';\n\n// API response types (snake_case)\ninterface ApiCall {\n id: string;\n channel_id: string;\n provider_call_sid: string;\n from_number: string;\n to_number: string;\n direction: string;\n status: string;\n end_reason: string | null;\n initiated_at: string;\n ringing_at: string | null;\n answered_at: string | null;\n ended_at: string | null;\n duration_seconds: number | null;\n recording_url: string | null;\n transcription_url: string | null;\n agent_id: string | null;\n metadata: Record<string, unknown> | null;\n}\n\ninterface ListCallsApiResponse {\n calls: ApiCall[];\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface DialCallApiResponse {\n call: ApiCall;\n message: string;\n}\n\ninterface HangupCallApiResponse {\n message: string;\n call_id: string;\n previous_status: string;\n}\n\n/**\n * Transform API call to SDK call\n */\nfunction transformCall(data: ApiCall): Call {\n return {\n id: data.id,\n channelId: data.channel_id,\n providerCallSid: data.provider_call_sid,\n fromNumber: data.from_number,\n toNumber: data.to_number,\n direction: data.direction as Call['direction'],\n status: data.status as Call['status'],\n endReason: data.end_reason as Call['endReason'],\n initiatedAt: data.initiated_at,\n ringingAt: data.ringing_at,\n answeredAt: data.answered_at,\n endedAt: data.ended_at,\n durationSeconds: data.duration_seconds,\n recordingUrl: data.recording_url,\n transcriptionUrl: data.transcription_url,\n agentId: data.agent_id,\n metadata: data.metadata,\n };\n}\n\nexport class VoiceCallsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Initiate an outbound call\n */\n async dial(params: DialParams): Promise<Call> {\n const response = await this.http.post<DialCallApiResponse>('/v1/voice/calls', {\n channel_id: params.channelId,\n to: params.to,\n from: params.from,\n timeout: params.timeout,\n metadata: params.metadata,\n });\n return transformCall(response.call);\n }\n\n /**\n * List calls\n */\n async list(params?: ListCallsParams): Promise<PaginatedResponse<Call>> {\n const response = await this.http.get<ListCallsApiResponse>('/v1/voice/calls', {\n channel_id: params?.channelId,\n direction: params?.direction,\n status: params?.status,\n from_number: params?.fromNumber,\n to_number: params?.toNumber,\n start_date: params?.startDate instanceof Date ? params.startDate.toISOString() : params?.startDate,\n end_date: params?.endDate instanceof Date ? params.endDate.toISOString() : params?.endDate,\n limit: params?.limit,\n offset: params?.offset,\n });\n return {\n data: response.calls.map(transformCall),\n total: response.total,\n hasMore: (response.offset + response.calls.length) < response.total,\n nextOffset: response.offset + response.calls.length,\n };\n }\n\n /**\n * Get a call by ID\n */\n async get(callId: string): Promise<Call> {\n const response = await this.http.get<ApiCall>(`/v1/voice/calls/${callId}`);\n return transformCall(response);\n }\n\n /**\n * Hang up an active call\n */\n async hangup(callId: string): Promise<void> {\n await this.http.post<HangupCallApiResponse>(`/v1/voice/calls/${callId}/hangup`);\n }\n}\n","/**\n * Voice Rooms Resource\n *\n * LiveKit WebRTC room management for browser-based voice/video calls\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport type {\n CreateRoomParams,\n JoinRoomParams,\n LiveKitRoomInfo,\n LiveKitRoom,\n LiveKitParticipant,\n ListRoomsParams,\n} from '../../types';\n\n// API response types (snake_case from server)\ninterface CreateRoomResponse {\n room: {\n id: string;\n name: string;\n display_name: string;\n channel_id: string | null;\n empty_timeout: number;\n max_participants: number;\n ws_url: string;\n token: string;\n created_at: string;\n };\n message: string;\n}\n\ninterface JoinRoomResponse {\n room_name: string;\n ws_url: string;\n token: string;\n participant: {\n identity: string;\n name: string;\n can_publish: boolean;\n can_subscribe: boolean;\n };\n}\n\ninterface ListRoomsResponse {\n rooms: Array<{\n name: string;\n ws_url: string;\n }>;\n total: number;\n limit: number;\n offset: number;\n}\n\ninterface GetRoomResponse {\n room: {\n name: string;\n ws_url: string;\n };\n}\n\nexport class VoiceRoomsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new WebRTC room\n *\n * @example\n * ```typescript\n * const roomInfo = await veroai.voice.rooms.create({\n * name: 'support-call-123',\n * emptyTimeout: 300,\n * maxParticipants: 2,\n * });\n * // Connect to room using roomInfo.wsUrl and roomInfo.token\n * ```\n */\n async create(params: CreateRoomParams): Promise<LiveKitRoomInfo> {\n const response = await this.http.post<CreateRoomResponse>('/voice/rooms', {\n name: params.name,\n empty_timeout: params.emptyTimeout,\n max_participants: params.maxParticipants,\n metadata: params.metadata,\n });\n\n return {\n sid: response.room.id,\n name: response.room.name,\n wsUrl: response.room.ws_url,\n token: response.room.token,\n numParticipants: 0,\n metadata: params.metadata,\n };\n }\n\n /**\n * Join an existing room or create and join if it doesn't exist\n *\n * @example\n * ```typescript\n * const roomInfo = await veroai.voice.rooms.join({\n * roomName: 'support-call-123',\n * participantName: 'Agent Smith',\n * });\n * // Use roomInfo.token to connect via LiveKit client SDK\n * ```\n */\n async join(params: JoinRoomParams): Promise<LiveKitRoomInfo> {\n const response = await this.http.post<JoinRoomResponse>(\n `/voice/rooms/${encodeURIComponent(params.roomName)}/join`,\n {\n participant_name: params.participantName,\n can_publish: params.canPublish,\n can_subscribe: params.canSubscribe,\n metadata: params.metadata,\n }\n );\n\n return {\n sid: '',\n name: response.room_name,\n wsUrl: response.ws_url,\n token: response.token,\n numParticipants: 0,\n };\n }\n\n /**\n * Get room details\n *\n * @example\n * ```typescript\n * const room = await veroai.voice.rooms.get('support-call-123');\n * console.log(`Room: ${room.name}`);\n * ```\n */\n async get(roomName: string): Promise<LiveKitRoom> {\n const response = await this.http.get<GetRoomResponse>(\n `/voice/rooms/${encodeURIComponent(roomName)}`\n );\n\n return {\n sid: '',\n name: response.room.name,\n emptyTimeout: 300,\n maxParticipants: 10,\n creationTime: '',\n numParticipants: 0,\n };\n }\n\n /**\n * List all active rooms\n *\n * @example\n * ```typescript\n * const rooms = await veroai.voice.rooms.list();\n * for (const room of rooms) {\n * console.log(`${room.name}`);\n * }\n * ```\n */\n async list(params?: ListRoomsParams): Promise<LiveKitRoom[]> {\n const searchParams = new URLSearchParams();\n if (params?.names) {\n for (const name of params.names) {\n searchParams.append('names', name);\n }\n }\n const query = searchParams.toString();\n const response = await this.http.get<ListRoomsResponse>(\n `/voice/rooms${query ? `?${query}` : ''}`\n );\n\n return response.rooms.map((room) => ({\n sid: '',\n name: room.name,\n emptyTimeout: 300,\n maxParticipants: 10,\n creationTime: '',\n numParticipants: 0,\n }));\n }\n\n /**\n * Delete a room and disconnect all participants\n *\n * @example\n * ```typescript\n * await veroai.voice.rooms.delete('support-call-123');\n * ```\n */\n async delete(roomName: string): Promise<void> {\n await this.http.delete(`/voice/rooms/${encodeURIComponent(roomName)}`);\n }\n\n /**\n * List participants in a room\n *\n * @example\n * ```typescript\n * const participants = await veroai.voice.rooms.listParticipants('support-call-123');\n * for (const p of participants) {\n * console.log(`${p.name} (${p.state})`);\n * }\n * ```\n */\n async listParticipants(roomName: string): Promise<LiveKitParticipant[]> {\n return this.http.get<LiveKitParticipant[]>(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants`\n );\n }\n\n /**\n * Remove a participant from a room\n *\n * @example\n * ```typescript\n * await veroai.voice.rooms.removeParticipant('support-call-123', 'user-456');\n * ```\n */\n async removeParticipant(roomName: string, identity: string): Promise<void> {\n await this.http.delete(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants/${encodeURIComponent(identity)}`\n );\n }\n\n /**\n * Mute or unmute a participant's audio\n *\n * @example\n * ```typescript\n * // Mute participant\n * await veroai.voice.rooms.muteParticipant('support-call-123', 'user-456', true);\n *\n * // Unmute participant\n * await veroai.voice.rooms.muteParticipant('support-call-123', 'user-456', false);\n * ```\n */\n async muteParticipant(roomName: string, identity: string, muted: boolean): Promise<void> {\n await this.http.post(\n `/voice/rooms/${encodeURIComponent(roomName)}/participants/${encodeURIComponent(identity)}/mute`,\n { muted }\n );\n }\n\n /**\n * Send a data message to participants in a room\n *\n * @example\n * ```typescript\n * // Send to all participants\n * await veroai.voice.rooms.sendData('support-call-123', { type: 'notification', message: 'Recording started' });\n *\n * // Send to specific participants\n * await veroai.voice.rooms.sendData('support-call-123', { type: 'private' }, ['user-456']);\n * ```\n */\n async sendData(\n roomName: string,\n data: Record<string, unknown>,\n destinationIdentities?: string[]\n ): Promise<void> {\n await this.http.post(`/voice/rooms/${encodeURIComponent(roomName)}/data`, {\n data,\n destinationIdentities,\n });\n }\n}\n","/**\n * Voice Resource\n *\n * Combines voice numbers, calls, and rooms resources\n */\n\nimport type { HttpClient } from '../../utils/http';\nimport { VoiceNumbersResource } from './numbers';\nimport { VoiceCallsResource } from './calls';\nimport { VoiceRoomsResource } from './rooms';\n\nexport class VoiceResource {\n /**\n * Phone number management\n */\n readonly numbers: VoiceNumbersResource;\n\n /**\n * Call management\n */\n readonly calls: VoiceCallsResource;\n\n /**\n * LiveKit WebRTC room management for browser-based voice/video calls\n */\n readonly rooms: VoiceRoomsResource;\n\n constructor(http: HttpClient) {\n this.numbers = new VoiceNumbersResource(http);\n this.calls = new VoiceCallsResource(http);\n this.rooms = new VoiceRoomsResource(http);\n }\n}\n\n// Re-export sub-resources\nexport { VoiceNumbersResource } from './numbers';\nexport { VoiceCallsResource } from './calls';\nexport { VoiceRoomsResource } from './rooms';\n","/**\n * Agents Resource\n *\n * Manage AI agent configurations for voice and messaging\n */\n\nimport type { HttpClient } from '../utils/http';\nimport type {\n AgentConfig,\n ListAgentsParams,\n CreateAgentParams,\n UpdateAgentParams,\n PaginatedResponse,\n} from '../types';\n\n// API response types (snake_case from server)\ninterface AgentResponse {\n id: string;\n tenant_id: string;\n name: string;\n description: string | null;\n enabled: boolean;\n is_default: boolean;\n model_config: {\n provider: 'anthropic' | 'openai';\n model_id: string;\n temperature: number;\n max_tokens: number;\n };\n system_prompt: string;\n status: 'draft' | 'active' | 'archived';\n version: number;\n created_at: string;\n updated_at: string;\n}\n\ninterface ListAgentsResponse {\n agents: AgentResponse[];\n total: number;\n limit: number;\n offset: number;\n}\n\nfunction transformAgent(agent: AgentResponse): AgentConfig {\n return {\n id: agent.id,\n name: agent.name,\n description: agent.description,\n enabled: agent.enabled,\n modelConfig: {\n provider: agent.model_config.provider,\n modelId: agent.model_config.model_id,\n temperature: agent.model_config.temperature,\n maxTokens: agent.model_config.max_tokens,\n },\n systemPrompt: agent.system_prompt,\n status: agent.status,\n };\n}\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List AI agents\n *\n * @example\n * ```typescript\n * const agents = await veroai.agents.list({ status: 'active' });\n * for (const agent of agents.data) {\n * console.log(`${agent.name} (${agent.modelConfig.provider})`);\n * }\n * ```\n */\n async list(params?: ListAgentsParams): Promise<PaginatedResponse<AgentConfig>> {\n const searchParams = new URLSearchParams();\n if (params?.status) searchParams.set('status', params.status);\n if (params?.enabled !== undefined) searchParams.set('enabled', String(params.enabled));\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.offset) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const response = await this.http.get<ListAgentsResponse>(\n `/agents${query ? `?${query}` : ''}`\n );\n\n return {\n data: response.agents.map(transformAgent),\n total: response.total,\n hasMore: response.offset + response.agents.length < response.total,\n nextOffset: response.offset + response.agents.length < response.total\n ? response.offset + response.limit\n : undefined,\n };\n }\n\n /**\n * Get an agent by ID\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.get('agent_123');\n * console.log(`System prompt: ${agent.systemPrompt}`);\n * ```\n */\n async get(agentId: string): Promise<AgentConfig> {\n const response = await this.http.get<{ agent: AgentResponse }>(\n `/agents/${encodeURIComponent(agentId)}`\n );\n return transformAgent(response.agent);\n }\n\n /**\n * Create a new AI agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.create({\n * name: 'Support Agent',\n * modelConfig: {\n * provider: 'anthropic',\n * modelId: 'claude-3-5-sonnet-20241022',\n * temperature: 0.7,\n * },\n * systemPrompt: 'You are a helpful support agent...',\n * enabled: true,\n * });\n * ```\n */\n async create(params: CreateAgentParams): Promise<AgentConfig> {\n const response = await this.http.post<{ agent: AgentResponse }>('/agents', {\n name: params.name,\n description: params.description,\n model_config: {\n provider: params.modelConfig.provider,\n model_id: params.modelConfig.modelId,\n temperature: params.modelConfig.temperature ?? 0.7,\n max_tokens: params.modelConfig.maxTokens ?? 4096,\n },\n system_prompt: params.systemPrompt,\n enabled: params.enabled ?? false,\n });\n return transformAgent(response.agent);\n }\n\n /**\n * Update an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.update('agent_123', {\n * systemPrompt: 'Updated prompt...',\n * enabled: true,\n * });\n * ```\n */\n async update(agentId: string, params: UpdateAgentParams): Promise<AgentConfig> {\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.systemPrompt !== undefined) body.system_prompt = params.systemPrompt;\n if (params.enabled !== undefined) body.enabled = params.enabled;\n if (params.status !== undefined) body.status = params.status;\n\n if (params.modelConfig) {\n body.model_config = {\n ...(params.modelConfig.provider && { provider: params.modelConfig.provider }),\n ...(params.modelConfig.modelId && { model_id: params.modelConfig.modelId }),\n ...(params.modelConfig.temperature !== undefined && { temperature: params.modelConfig.temperature }),\n ...(params.modelConfig.maxTokens !== undefined && { max_tokens: params.modelConfig.maxTokens }),\n };\n }\n\n const response = await this.http.patch<{ agent: AgentResponse }>(\n `/agents/${encodeURIComponent(agentId)}`,\n body\n );\n return transformAgent(response.agent);\n }\n\n /**\n * Delete an agent\n *\n * @example\n * ```typescript\n * await veroai.agents.delete('agent_123');\n * ```\n */\n async delete(agentId: string): Promise<void> {\n await this.http.delete(`/agents/${encodeURIComponent(agentId)}`);\n }\n\n /**\n * Enable an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.enable('agent_123');\n * ```\n */\n async enable(agentId: string): Promise<AgentConfig> {\n return this.update(agentId, { enabled: true });\n }\n\n /**\n * Disable an agent\n *\n * @example\n * ```typescript\n * const agent = await veroai.agents.disable('agent_123');\n * ```\n */\n async disable(agentId: string): Promise<AgentConfig> {\n return this.update(agentId, { enabled: false });\n }\n}\n","/**\n * Realtime Resource\n *\n * WebSocket-based real-time event subscription for the VeroAI SDK.\n * Supports subscribing to channels, event types, or all events.\n */\n\nimport type {\n ConnectionState,\n EventHandler,\n StateChangeHandler,\n ErrorHandler,\n RealtimeConfig,\n RealtimeEvent,\n SubscribeOptions,\n SubscriptionCommand,\n SubscriptionConfirmation,\n TokenFetcher,\n} from './types';\n\nconst DEFAULT_REALTIME_URL = 'wss://wss.veroai.dev/ws';\nconst DEFAULT_RECONNECT_INTERVAL = 1000;\nconst MAX_RECONNECT_INTERVAL = 30000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 10;\nconst DEFAULT_HEARTBEAT_INTERVAL = 30000;\n\n// Declare global types for cross-environment compatibility\ndeclare const window: { WebSocket?: typeof WebSocket } | undefined;\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.WebSocket !== 'undefined';\n}\n\n/**\n * Get WebSocket implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function getWebSocket(): Promise<any> {\n if (isBrowser()) {\n return window!.WebSocket;\n }\n // Node.js environment - dynamically import ws package\n try {\n const ws = await import('ws');\n return ws.default || ws;\n } catch {\n throw new Error(\n 'WebSocket is not available. In Node.js, install the \"ws\" package: npm install ws'\n );\n }\n}\n\nexport class RealtimeResource {\n private readonly config: Required<RealtimeConfig>;\n private readonly tokenFetcher: TokenFetcher;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private ws: any = null;\n private state: ConnectionState = 'disconnected';\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private heartbeatInterval: ReturnType<typeof setInterval> | null = null;\n\n // Event handlers\n private eventHandlers: Set<EventHandler> = new Set();\n private stateHandlers: Set<StateChangeHandler> = new Set();\n private errorHandlers: Set<ErrorHandler> = new Set();\n\n // Active subscriptions for reconnection\n private activeSubscriptions: {\n eventTypes: Set<string>;\n channels: Set<string>;\n subscribedToAll: boolean;\n } = {\n eventTypes: new Set(),\n channels: new Set(),\n subscribedToAll: false,\n };\n\n // Pending subscription confirmations\n private pendingSubscriptions: Map<\n string,\n { resolve: (confirmation: SubscriptionConfirmation) => void; reject: (error: Error) => void }\n > = new Map();\n\n constructor(tokenFetcher: TokenFetcher, config?: RealtimeConfig) {\n this.tokenFetcher = tokenFetcher;\n this.config = {\n url: config?.url ?? DEFAULT_REALTIME_URL,\n autoReconnect: config?.autoReconnect ?? true,\n reconnectInterval: config?.reconnectInterval ?? DEFAULT_RECONNECT_INTERVAL,\n maxReconnectAttempts: config?.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS,\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_HEARTBEAT_INTERVAL,\n };\n }\n\n /**\n * Get current connection state\n */\n getState(): ConnectionState {\n return this.state;\n }\n\n /**\n * Connect to the WebSocket server\n */\n async connect(): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n return;\n }\n\n this.setState('connecting');\n\n return new Promise(async (resolve, reject) => {\n try {\n // Get a short-lived WebSocket token from the API\n const token = await this.tokenFetcher();\n\n const WS = await getWebSocket();\n const url = new URL(this.config.url);\n url.searchParams.set('token', token);\n\n this.ws = new WS(url.toString());\n\n this.ws.onopen = () => {\n this.setState('connected');\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n this.resubscribe();\n resolve();\n };\n\n this.ws.onclose = (event: { reason?: string }) => {\n this.stopHeartbeat();\n this.ws = null;\n\n if (this.state === 'connecting') {\n reject(new Error(`Connection failed: ${event.reason || 'Unknown reason'}`));\n this.setState('disconnected');\n return;\n }\n\n this.setState('disconnected');\n\n if (this.config.autoReconnect && this.shouldReconnect()) {\n this.scheduleReconnect();\n }\n };\n\n this.ws.onerror = (event: { message?: string }) => {\n const error = new Error(\n 'WebSocket error' + (event.message ? `: ${event.message}` : '')\n );\n this.emitError(error);\n\n if (this.state === 'connecting') {\n reject(error);\n }\n };\n\n this.ws.onmessage = (event: { data: string | Buffer }) => {\n this.handleMessage(event.data);\n };\n } catch (error) {\n this.setState('disconnected');\n reject(error);\n }\n });\n }\n\n /**\n * Disconnect from the WebSocket server\n */\n disconnect(): void {\n this.config.autoReconnect = false;\n this.clearReconnectTimeout();\n this.stopHeartbeat();\n\n if (this.ws) {\n this.ws.close(1000, 'Client disconnect');\n this.ws = null;\n }\n\n this.setState('disconnected');\n }\n\n /**\n * Subscribe to all events for the tenant\n */\n async subscribeAll(): Promise<SubscriptionConfirmation> {\n this.activeSubscriptions.subscribedToAll = true;\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'all',\n });\n }\n\n /**\n * Unsubscribe from all events\n */\n async unsubscribeAll(): Promise<SubscriptionConfirmation> {\n this.activeSubscriptions.subscribedToAll = false;\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'all',\n });\n }\n\n /**\n * Subscribe to specific channels\n */\n async subscribeChannels(channelIds: string[]): Promise<SubscriptionConfirmation> {\n for (const id of channelIds) {\n this.activeSubscriptions.channels.add(id);\n }\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'channel',\n channels: channelIds,\n });\n }\n\n /**\n * Unsubscribe from specific channels\n */\n async unsubscribeChannels(channelIds: string[]): Promise<SubscriptionConfirmation> {\n for (const id of channelIds) {\n this.activeSubscriptions.channels.delete(id);\n }\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'channel',\n channels: channelIds,\n });\n }\n\n /**\n * Subscribe to specific event types\n */\n async subscribeEventTypes(eventTypes: string[]): Promise<SubscriptionConfirmation> {\n for (const type of eventTypes) {\n this.activeSubscriptions.eventTypes.add(type);\n }\n return this.sendSubscription({\n type: 'subscribe',\n subscriptionType: 'event_type',\n eventTypes,\n });\n }\n\n /**\n * Unsubscribe from specific event types\n */\n async unsubscribeEventTypes(eventTypes: string[]): Promise<SubscriptionConfirmation> {\n for (const type of eventTypes) {\n this.activeSubscriptions.eventTypes.delete(type);\n }\n return this.sendSubscription({\n type: 'unsubscribe',\n subscriptionType: 'event_type',\n eventTypes,\n });\n }\n\n /**\n * Subscribe to channels and/or event types\n */\n async subscribe(options: SubscribeOptions): Promise<void> {\n const promises: Promise<SubscriptionConfirmation>[] = [];\n\n if (options.channels?.length) {\n promises.push(this.subscribeChannels(options.channels));\n }\n\n if (options.eventTypes?.length) {\n promises.push(this.subscribeEventTypes(options.eventTypes));\n }\n\n if (promises.length === 0) {\n throw new Error('Must specify at least one channel or event type');\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Unsubscribe from channels and/or event types\n */\n async unsubscribe(options: SubscribeOptions): Promise<void> {\n const promises: Promise<SubscriptionConfirmation>[] = [];\n\n if (options.channels?.length) {\n promises.push(this.unsubscribeChannels(options.channels));\n }\n\n if (options.eventTypes?.length) {\n promises.push(this.unsubscribeEventTypes(options.eventTypes));\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Add event handler\n */\n onEvent(handler: EventHandler): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n\n /**\n * Add connection state change handler\n */\n onStateChange(handler: StateChangeHandler): () => void {\n this.stateHandlers.add(handler);\n return () => this.stateHandlers.delete(handler);\n }\n\n /**\n * Add error handler\n */\n onError(handler: ErrorHandler): () => void {\n this.errorHandlers.add(handler);\n return () => this.errorHandlers.delete(handler);\n }\n\n /**\n * Remove all handlers\n */\n removeAllHandlers(): void {\n this.eventHandlers.clear();\n this.stateHandlers.clear();\n this.errorHandlers.clear();\n }\n\n // Private methods\n\n private setState(state: ConnectionState): void {\n if (this.state === state) return;\n this.state = state;\n for (const handler of this.stateHandlers) {\n try {\n handler(state);\n } catch (error) {\n console.error('State handler error:', error);\n }\n }\n }\n\n private emitError(error: Error): void {\n for (const handler of this.errorHandlers) {\n try {\n handler(error);\n } catch (e) {\n console.error('Error handler error:', e);\n }\n }\n }\n\n private emitEvent(event: RealtimeEvent): void {\n for (const handler of this.eventHandlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Event handler error:', error);\n }\n }\n }\n\n private handleMessage(data: string | Buffer): void {\n try {\n const message = JSON.parse(typeof data === 'string' ? data : data.toString());\n\n // Handle connection confirmation\n if (message.type === 'connected') {\n // Server sends: { type: 'connected', clientId, tenantId, message }\n // Connection already established, just log/ignore\n return;\n }\n\n // Handle subscription confirmations\n if (message.type === 'subscription_confirmed' || message.type === 'subscription_error') {\n const confirmation = message as SubscriptionConfirmation;\n const key = this.getSubscriptionKey(confirmation);\n const pending = this.pendingSubscriptions.get(key);\n if (pending) {\n this.pendingSubscriptions.delete(key);\n if (confirmation.type === 'subscription_error') {\n pending.reject(new Error(confirmation.error || 'Subscription failed'));\n } else {\n pending.resolve(confirmation);\n }\n }\n return;\n }\n\n // Handle events - server wraps events as: { type: 'event', data: {...}, metadata: {...} }\n if (message.type === 'event' && message.data) {\n const eventData = message.data;\n // Transform snake_case to camelCase\n const event: RealtimeEvent = {\n id: eventData.id,\n tenantId: eventData.tenant_id || eventData.tenantId,\n channelId: eventData.channel_id || eventData.channelId,\n canonicalType: eventData.canonical_type || eventData.canonicalType,\n eventType: eventData.event_type || eventData.eventType,\n direction: eventData.direction,\n payload: eventData.payload,\n enrichment: eventData.enrichment,\n timestamp: eventData.timestamp,\n processedAt: eventData.processed_at || eventData.processedAt,\n };\n this.emitEvent(event);\n }\n } catch (error) {\n this.emitError(new Error(`Failed to parse message: ${error}`));\n }\n }\n\n private async sendSubscription(command: SubscriptionCommand): Promise<SubscriptionConfirmation> {\n if (!this.ws || this.state !== 'connected') {\n throw new Error('Not connected');\n }\n\n return new Promise((resolve, reject) => {\n const key = this.getSubscriptionKey({\n action: command.type,\n subscriptionType: command.subscriptionType,\n });\n\n // Set timeout for response\n const timeout = setTimeout(() => {\n this.pendingSubscriptions.delete(key);\n reject(new Error('Subscription timeout'));\n }, 10000);\n\n this.pendingSubscriptions.set(key, {\n resolve: (confirmation) => {\n clearTimeout(timeout);\n resolve(confirmation);\n },\n reject: (error) => {\n clearTimeout(timeout);\n reject(error);\n },\n });\n\n this.ws!.send(JSON.stringify(command));\n });\n }\n\n private getSubscriptionKey(confirmation: Pick<SubscriptionConfirmation, 'action' | 'subscriptionType'>): string {\n return `${confirmation.action}:${confirmation.subscriptionType}`;\n }\n\n private shouldReconnect(): boolean {\n if (this.config.maxReconnectAttempts === 0) {\n return true; // Infinite reconnection\n }\n return this.reconnectAttempts < this.config.maxReconnectAttempts;\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) return;\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n\n // Exponential backoff\n const delay = Math.min(\n this.config.reconnectInterval * Math.pow(2, this.reconnectAttempts - 1),\n MAX_RECONNECT_INTERVAL\n );\n\n this.reconnectTimeout = setTimeout(async () => {\n this.reconnectTimeout = null;\n try {\n await this.connect();\n } catch {\n // Error already handled in connect()\n }\n }, delay);\n }\n\n private clearReconnectTimeout(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n }\n\n private async resubscribe(): Promise<void> {\n // Re-establish subscriptions after reconnection\n try {\n if (this.activeSubscriptions.subscribedToAll) {\n await this.subscribeAll();\n }\n\n if (this.activeSubscriptions.channels.size > 0) {\n await this.subscribeChannels(Array.from(this.activeSubscriptions.channels));\n }\n\n if (this.activeSubscriptions.eventTypes.size > 0) {\n await this.subscribeEventTypes(Array.from(this.activeSubscriptions.eventTypes));\n }\n } catch (error) {\n this.emitError(new Error(`Failed to resubscribe: ${error}`));\n }\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatInterval = setInterval(() => {\n if (this.ws && this.state === 'connected') {\n // Send ping frame (for ws library in Node.js)\n if (typeof (this.ws as unknown as { ping?: () => void }).ping === 'function') {\n (this.ws as unknown as { ping: () => void }).ping();\n }\n }\n }, this.config.heartbeatInterval);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n }\n }\n}\n\n/**\n * Factory function to create a realtime resource\n */\nexport function createRealtimeResource(tokenFetcher: TokenFetcher, config?: RealtimeConfig): RealtimeResource {\n return new RealtimeResource(tokenFetcher, config);\n}\n","/**\n * VeroAI SDK Client\n *\n * The main entry point for interacting with the VeroAI API.\n *\n * @example\n * ```typescript\n * import { VeroAI } from '@veroai/sdk';\n *\n * const veroai = new VeroAI({ apiKey: 'sk_live_...' });\n *\n * // List channels\n * const { data: channels } = await veroai.channels.list();\n *\n * // Send a message\n * const result = await veroai.messages.send({\n * channelId: 'ch_abc123',\n * to: '+15551234567',\n * content: { type: 'text', text: 'Hello from VeroAI!' }\n * });\n *\n * // Query events\n * const { data: events } = await veroai.events.list({\n * channelId: 'ch_abc123',\n * startDate: new Date('2024-01-01'),\n * });\n * ```\n */\n\nimport type { VeroAIConfig } from './types';\nimport { HttpClient } from './utils/http';\nimport {\n ChannelsResource,\n EventsResource,\n MessagesResource,\n WebhooksResource,\n ApiKeysResource,\n DomainsResource,\n VoiceResource,\n} from './resources';\nimport { AgentsResource } from './resources/agents';\nimport { RealtimeResource } from './realtime';\nimport type { RealtimeConfig } from './realtime';\n\nexport class VeroAI {\n private readonly http: HttpClient;\n\n /** Manage communication channels (email, SMS, WhatsApp, etc.) */\n readonly channels: ChannelsResource;\n\n /** Query activity events and analytics */\n readonly events: EventsResource;\n\n /** Send messages through channels */\n readonly messages: MessagesResource;\n\n /** Manage webhook endpoints for real-time notifications */\n readonly webhooks: WebhooksResource;\n\n /** Manage API keys for authentication */\n readonly apiKeys: ApiKeysResource;\n\n /** Manage email domains for sending */\n readonly domains: DomainsResource;\n\n /** Voice phone numbers and call management */\n readonly voice: VoiceResource;\n\n /** AI agent configurations */\n readonly agents: AgentsResource;\n\n /** Real-time event subscriptions via WebSocket */\n readonly realtime: RealtimeResource;\n\n /**\n * Create a new VeroAI client instance\n *\n * @param config - Configuration options\n * @param config.apiKey - Your API key (required)\n * @param config.baseUrl - Custom API base URL (optional)\n * @param config.timeout - Request timeout in ms (default: 30000)\n * @param config.maxRetries - Max retry attempts (default: 3)\n * @param config.realtime - Realtime WebSocket configuration\n *\n * @example\n * ```typescript\n * // Basic usage\n * const veroai = new VeroAI({ apiKey: 'sk_live_...' });\n *\n * // With custom options\n * const veroai = new VeroAI({\n * apiKey: 'sk_test_...',\n * baseUrl: 'https://api.staging.veroai.dev',\n * timeout: 60000,\n * maxRetries: 5,\n * });\n * ```\n */\n constructor(config: VeroAIConfig & { realtime?: RealtimeConfig }) {\n this.http = new HttpClient(config);\n\n this.channels = new ChannelsResource(this.http);\n this.events = new EventsResource(this.http);\n this.messages = new MessagesResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.apiKeys = new ApiKeysResource(this.http);\n this.domains = new DomainsResource(this.http);\n this.voice = new VoiceResource(this.http);\n this.agents = new AgentsResource(this.http);\n\n // Create token fetcher for realtime - exchanges API key for short-lived WebSocket JWT\n const tokenFetcher = async (): Promise<string> => {\n const response = await this.http.post<{ token: string }>('/v1/realtime/auth', {});\n return response.token;\n };\n this.realtime = new RealtimeResource(tokenFetcher, config.realtime);\n }\n\n /**\n * Create a client from environment variables\n *\n * Looks for VEROAI_API_KEY environment variable\n *\n * @example\n * ```typescript\n * // Reads VEROAI_API_KEY from environment\n * const veroai = VeroAI.fromEnv();\n * ```\n */\n static fromEnv(overrides?: Partial<VeroAIConfig & { realtime?: RealtimeConfig }>): VeroAI {\n const apiKey = process.env.VEROAI_API_KEY;\n if (!apiKey) {\n throw new Error('VEROAI_API_KEY environment variable is not set');\n }\n\n return new VeroAI({\n apiKey,\n baseUrl: process.env.VEROAI_BASE_URL,\n ...overrides,\n });\n }\n}\n"]}