crossbar-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/resources/accounts.ts","../src/types.ts","../src/resources/callflows.ts","../src/resources/cdrs.ts","../src/resources/channels.ts","../src/resources/conferences.ts","../src/resources/devices.ts","../src/resources/faxes.ts","../src/resources/media.ts","../src/resources/menus.ts","../src/resources/phone-numbers.ts","../src/resources/temporal-rules.ts","../src/resources/token.ts","../src/resources/users.ts","../src/resources/voicemails.ts","../src/resources/webhooks.ts","../src/client.ts"],"sourcesContent":["export class CrossbarError extends Error {\n constructor(public message: string, public status: number, public requestId?: string, public body?: unknown) {\n super(message);\n this.name = \"CrossbarError\";\n this.status = status;\n this.requestId = requestId;\n this.body = body;\n }\n}\n\nexport class CrossbarAuthError extends CrossbarError {\n constructor(message: string, requestId?: string, body?: unknown) {\n super(message, 401, requestId, body);\n this.name = \"CrossbarAuthError\";\n }\n}\n","import type { CrossbarHttpClient, CrossbarResponse, RequestOptions } from \"../types.js\";\nimport type { Account, AccountSummary } from \"./types.js\";\n\nexport class AccountsResource<T extends Account = Account> {\n constructor(private readonly client: CrossbarHttpClient) { }\n\n async get(accountId: string, options?: RequestOptions): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}`, options);\n }\n\n async create(\n parentAccountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${parentAccountId}`, data, options);\n }\n\n async update(\n accountId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}`, data, options);\n }\n\n async patch(\n accountId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}`, data, options);\n }\n\n async remove(accountId: string, options?: RequestOptions): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}`, options);\n }\n\n async children<S extends AccountSummary = AccountSummary>(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<S[]>> {\n return this.client.get<S[]>(`/accounts/${accountId}/children`, options);\n }\n\n async descendants<S extends AccountSummary = AccountSummary>(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<S[]>> {\n return this.client.get<S[]>(`/accounts/${accountId}/descendants`, options);\n }\n\n async siblings<S extends AccountSummary = AccountSummary>(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<S[]>> {\n return this.client.get<S[]>(`/accounts/${accountId}/siblings`, options);\n }\n\n async parents(accountId: string, options?: RequestOptions): Promise<CrossbarResponse<string[]>> {\n return this.client.get<string[]>(`/accounts/${accountId}/parents`, options);\n }\n\n async tree(accountId: string, options?: RequestOptions): Promise<CrossbarResponse<string[]>> {\n return this.client.get<string[]>(`/accounts/${accountId}/tree`, options);\n }\n\n async getApiKey(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<{ api_key: string }>> {\n return this.client.get<{ api_key: string }>(`/accounts/${accountId}/api_key`, options);\n }\n\n async regenerateApiKey(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<{ api_key: string }>> {\n return this.client.put<{ api_key: string }>(\n `/accounts/${accountId}/api_key`,\n undefined,\n options,\n );\n }\n\n async move(\n accountId: string,\n toAccountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/move`, { to: toAccountId }, options);\n }\n\n async promoteReseller(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.put(`/accounts/${accountId}/reseller`, undefined, options);\n }\n\n async demoteReseller(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(`/accounts/${accountId}/reseller`, options);\n }\n}\n","export interface CredentialsAuth {\n type: \"credentials\";\n credentials: string;\n accountName?: string;\n accountId?: string;\n}\n\nexport interface ApiKeyAuth {\n type: \"api_key\";\n apiKey: string;\n}\n\nexport interface TokenAuth {\n type: \"token\";\n token: string;\n}\n\nexport type AuthConfig = CredentialsAuth | ApiKeyAuth | TokenAuth;\n\nexport interface RetryConfig {\n /** Number of times to retry on 5xx server errors. Default: 1 */\n maxRetries?: number;\n /** Re-authenticate and retry once on 401 Unauthorized. Requires credentials or api_key auth. Default: true */\n reAuthOn401?: boolean;\n /** Delay in ms between retries. Default: 0 */\n retryDelay?: number;\n}\n\nexport interface CrossbarConfig {\n url: string;\n version?: string;\n headers?: Record<string, string>;\n auth?: AuthConfig;\n timeout?: number;\n retry?: RetryConfig;\n}\n\nexport interface RequestOptions {\n headers?: Record<string, string>;\n query?: Record<string, string | number | boolean | undefined>;\n timeout?: number;\n signal?: AbortSignal;\n}\n\nexport interface CrossbarResponse<T = unknown> {\n data: T;\n auth_token?: string;\n status: string;\n request_id: string;\n page_size?: number;\n next_start_key?: string;\n start_key?: string;\n}\n\nexport interface ListOptions extends RequestOptions {\n paginate?: boolean;\n}\n\nexport function mergePaginate(options?: ListOptions): RequestOptions | undefined {\n if (!options) return undefined;\n const { paginate, ...rest } = options;\n if (paginate === false) {\n return { ...rest, query: { ...rest.query, paginate: \"false\" } };\n }\n return rest;\n}\n\nexport interface CrossbarHttpClient {\n get<T = unknown>(path: string, options?: RequestOptions): Promise<CrossbarResponse<T>>;\n put<T = unknown>(\n path: string,\n data?: unknown,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>>;\n post<T = unknown>(\n path: string,\n data?: unknown,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>>;\n patch<T = unknown>(\n path: string,\n data?: unknown,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>>;\n delete<T = unknown>(path: string, options?: RequestOptions): Promise<CrossbarResponse<T>>;\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Callflow } from \"./types.js\";\n\nexport class CallflowsResource<T extends Callflow = Callflow> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/callflows`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n callflowId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/callflows/${callflowId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/callflows`, data, options);\n }\n\n async update(\n accountId: string,\n callflowId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/callflows/${callflowId}`, data, options);\n }\n\n async patch(\n accountId: string,\n callflowId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/callflows/${callflowId}`, data, options);\n }\n\n async remove(\n accountId: string,\n callflowId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/callflows/${callflowId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Cdr } from \"./types.js\";\n\nexport interface CdrListOptions extends ListOptions {\n created_from?: number;\n created_to?: number;\n}\n\nfunction mergeCdrOptions(options?: CdrListOptions): RequestOptions | undefined {\n if (!options) return undefined;\n const { created_from, created_to, ...rest } = options;\n const merged = mergePaginate(rest);\n if (created_from === undefined && created_to === undefined) return merged;\n return {\n ...merged,\n query: {\n ...merged?.query,\n ...(created_from !== undefined && { created_from }),\n ...(created_to !== undefined && { created_to }),\n },\n };\n}\n\nexport class CdrsResource<T extends Cdr = Cdr> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: CdrListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/cdrs`, mergeCdrOptions(options));\n }\n\n async get(\n accountId: string,\n cdrId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/cdrs/${cdrId}`, options);\n }\n\n async listByUser(\n accountId: string,\n userId: string,\n options?: CdrListOptions,\n ): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(\n `/accounts/${accountId}/users/${userId}/cdrs`,\n mergeCdrOptions(options),\n );\n }\n}\n","import type { CrossbarHttpClient, CrossbarResponse, RequestOptions } from \"../types.js\";\nimport type { Channel } from \"./types.js\";\n\nexport class ChannelsResource {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: RequestOptions): Promise<CrossbarResponse<Channel[]>> {\n return this.client.get<Channel[]>(`/accounts/${accountId}/channels`, options);\n }\n\n async get(\n accountId: string,\n callId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<Channel>> {\n return this.client.get<Channel>(`/accounts/${accountId}/channels/${callId}`, options);\n }\n\n async hangup(\n accountId: string,\n callId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(`/accounts/${accountId}/channels/${callId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Conference, ConferenceParticipant } from \"./types.js\";\n\nexport class ConferencesResource<T extends Conference = Conference> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/conferences`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n conferenceId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/conferences/${conferenceId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/conferences`, data, options);\n }\n\n async update(\n accountId: string,\n conferenceId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/conferences/${conferenceId}`, data, options);\n }\n\n async patch(\n accountId: string,\n conferenceId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(\n `/accounts/${accountId}/conferences/${conferenceId}`,\n data,\n options,\n );\n }\n\n async remove(\n accountId: string,\n conferenceId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/conferences/${conferenceId}`, options);\n }\n\n async participants(\n accountId: string,\n conferenceId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<ConferenceParticipant[]>> {\n return this.client.get<ConferenceParticipant[]>(\n `/accounts/${accountId}/conferences/${conferenceId}/participants`,\n options,\n );\n }\n\n async muteParticipant(\n accountId: string,\n conferenceId: string,\n participantId: number,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.post(\n `/accounts/${accountId}/conferences/${conferenceId}/participants/${participantId}/mute`,\n undefined,\n options,\n );\n }\n\n async unmuteParticipant(\n accountId: string,\n conferenceId: string,\n participantId: number,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.post(\n `/accounts/${accountId}/conferences/${conferenceId}/participants/${participantId}/unmute`,\n undefined,\n options,\n );\n }\n\n async deafParticipant(\n accountId: string,\n conferenceId: string,\n participantId: number,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.post(\n `/accounts/${accountId}/conferences/${conferenceId}/participants/${participantId}/deaf`,\n undefined,\n options,\n );\n }\n\n async undeafParticipant(\n accountId: string,\n conferenceId: string,\n participantId: number,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.post(\n `/accounts/${accountId}/conferences/${conferenceId}/participants/${participantId}/undeaf`,\n undefined,\n options,\n );\n }\n\n async kickParticipant(\n accountId: string,\n conferenceId: string,\n participantId: number,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(\n `/accounts/${accountId}/conferences/${conferenceId}/participants/${participantId}`,\n options,\n );\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Device, DeviceStatus } from \"./types.js\";\n\nexport class DevicesResource<T extends Device = Device> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/devices`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n deviceId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/devices/${deviceId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/devices`, data, options);\n }\n\n async update(\n accountId: string,\n deviceId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/devices/${deviceId}`, data, options);\n }\n\n async patch(\n accountId: string,\n deviceId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/devices/${deviceId}`, data, options);\n }\n\n async remove(\n accountId: string,\n deviceId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/devices/${deviceId}`, options);\n }\n\n async status(\n accountId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<DeviceStatus[]>> {\n return this.client.get<DeviceStatus[]>(`/accounts/${accountId}/devices/status`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Fax } from \"./types.js\";\n\nexport class FaxesResource<T extends Fax = Fax> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async listInbox(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/faxes/inbox`, mergePaginate(options));\n }\n\n async listOutbox(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/faxes/outbox`, mergePaginate(options));\n }\n\n async getInbox(\n accountId: string,\n faxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/faxes/inbox/${faxId}`, options);\n }\n\n async getOutbox(\n accountId: string,\n faxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/faxes/outbox/${faxId}`, options);\n }\n\n async send(\n accountId: string,\n data: { to_number: string; from_number?: string; document_url?: string },\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/faxes`, data, options);\n }\n\n async removeInbox(\n accountId: string,\n faxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(`/accounts/${accountId}/faxes/inbox/${faxId}`, options);\n }\n\n async removeOutbox(\n accountId: string,\n faxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(`/accounts/${accountId}/faxes/outbox/${faxId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Media } from \"./types.js\";\n\nexport class MediaResource<T extends Media = Media> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/media`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n mediaId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/media/${mediaId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/media`, data, options);\n }\n\n async update(\n accountId: string,\n mediaId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/media/${mediaId}`, data, options);\n }\n\n async patch(\n accountId: string,\n mediaId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/media/${mediaId}`, data, options);\n }\n\n async remove(\n accountId: string,\n mediaId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/media/${mediaId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Menu } from \"./types.js\";\n\nexport class MenusResource<T extends Menu = Menu> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/menus`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n menuId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/menus/${menuId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/menus`, data, options);\n }\n\n async update(\n accountId: string,\n menuId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/menus/${menuId}`, data, options);\n }\n\n async patch(\n accountId: string,\n menuId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/menus/${menuId}`, data, options);\n }\n\n async remove(\n accountId: string,\n menuId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/menus/${menuId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { PhoneNumber } from \"./types.js\";\n\nexport class PhoneNumbersResource<T extends PhoneNumber = PhoneNumber> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/phone_numbers`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n number: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}`,\n options,\n );\n }\n\n async create(\n accountId: string,\n number: string,\n data?: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}`,\n data,\n options,\n );\n }\n\n async update(\n accountId: string,\n number: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}`,\n data,\n options,\n );\n }\n\n async patch(\n accountId: string,\n number: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}`,\n data,\n options,\n );\n }\n\n async remove(\n accountId: string,\n number: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}`,\n options,\n );\n }\n\n async activate(\n accountId: string,\n number: string,\n data?: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}/activate`,\n data,\n options,\n );\n }\n\n async reserve(\n accountId: string,\n number: string,\n data?: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}/reserve`,\n data,\n options,\n );\n }\n\n async portIn(\n accountId: string,\n number: string,\n data?: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(\n `/accounts/${accountId}/phone_numbers/${encodeURIComponent(number)}/port_in`,\n data,\n options,\n );\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { TemporalRule } from \"./types.js\";\n\nexport class TemporalRulesResource<T extends TemporalRule = TemporalRule> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/temporal_rules`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n ruleId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/temporal_rules/${ruleId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/temporal_rules`, data, options);\n }\n\n async update(\n accountId: string,\n ruleId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/temporal_rules/${ruleId}`, data, options);\n }\n\n async patch(\n accountId: string,\n ruleId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/temporal_rules/${ruleId}`, data, options);\n }\n\n async remove(\n accountId: string,\n ruleId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/temporal_rules/${ruleId}`, options);\n }\n}\n","import type { CrossbarHttpClient, CrossbarResponse, RequestOptions } from \"../types.js\";\nimport type { TokenInfo } from \"./types.js\";\n\nexport class TokenResource<T extends TokenInfo = TokenInfo> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async info(options?: RequestOptions): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(\"/token_auth\", options);\n }\n\n async invalidate(options?: RequestOptions): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(\"/token_auth\", options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { User } from \"./types.js\";\n\nexport class UsersResource<T extends User = User> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/users`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n userId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/users/${userId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"username\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/users`, data, options);\n }\n\n async update(\n accountId: string,\n userId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/users/${userId}`, data, options);\n }\n\n async patch(\n accountId: string,\n userId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/users/${userId}`, data, options);\n }\n\n async remove(\n accountId: string,\n userId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/users/${userId}`, options);\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { VoicemailBox, VoicemailMessage } from \"./types.js\";\n\nexport class VoicemailsResource<T extends VoicemailBox = VoicemailBox> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/vmboxes`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n vmboxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/vmboxes/${vmboxId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\" | \"mailbox\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/vmboxes`, data, options);\n }\n\n async update(\n accountId: string,\n vmboxId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/vmboxes/${vmboxId}`, data, options);\n }\n\n async patch(\n accountId: string,\n vmboxId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/vmboxes/${vmboxId}`, data, options);\n }\n\n async remove(\n accountId: string,\n vmboxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/vmboxes/${vmboxId}`, options);\n }\n\n async messages(\n accountId: string,\n vmboxId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<VoicemailMessage[]>> {\n return this.client.get<VoicemailMessage[]>(\n `/accounts/${accountId}/vmboxes/${vmboxId}/messages`,\n options,\n );\n }\n\n async getMessage(\n accountId: string,\n vmboxId: string,\n messageId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<VoicemailMessage>> {\n return this.client.get<VoicemailMessage>(\n `/accounts/${accountId}/vmboxes/${vmboxId}/messages/${messageId}`,\n options,\n );\n }\n\n async updateMessage(\n accountId: string,\n vmboxId: string,\n messageId: string,\n data: { folder: \"new\" | \"saved\" | \"deleted\" },\n options?: RequestOptions,\n ): Promise<CrossbarResponse<VoicemailMessage>> {\n return this.client.post<VoicemailMessage>(\n `/accounts/${accountId}/vmboxes/${vmboxId}/messages/${messageId}`,\n data,\n options,\n );\n }\n\n async deleteMessage(\n accountId: string,\n vmboxId: string,\n messageId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<unknown>> {\n return this.client.delete(\n `/accounts/${accountId}/vmboxes/${vmboxId}/messages/${messageId}`,\n options,\n );\n }\n}\n","import type {\n CrossbarHttpClient,\n CrossbarResponse,\n ListOptions,\n RequestOptions,\n} from \"../types.js\";\nimport { mergePaginate } from \"../types.js\";\nimport type { Webhook } from \"./types.js\";\n\nexport class WebhooksResource<T extends Webhook = Webhook> {\n constructor(private readonly client: CrossbarHttpClient) {}\n\n async list(accountId: string, options?: ListOptions): Promise<CrossbarResponse<T[]>> {\n return this.client.get<T[]>(`/accounts/${accountId}/webhooks`, mergePaginate(options));\n }\n\n async get(\n accountId: string,\n webhookId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.get<T>(`/accounts/${accountId}/webhooks/${webhookId}`, options);\n }\n\n async create(\n accountId: string,\n data: Partial<T> & Pick<T, \"name\" | \"uri\">,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.put<T>(`/accounts/${accountId}/webhooks`, data, options);\n }\n\n async update(\n accountId: string,\n webhookId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.post<T>(`/accounts/${accountId}/webhooks/${webhookId}`, data, options);\n }\n\n async patch(\n accountId: string,\n webhookId: string,\n data: Partial<T>,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.patch<T>(`/accounts/${accountId}/webhooks/${webhookId}`, data, options);\n }\n\n async remove(\n accountId: string,\n webhookId: string,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n return this.client.delete<T>(`/accounts/${accountId}/webhooks/${webhookId}`, options);\n }\n}\n","import { CrossbarAuthError, CrossbarError } from \"./errors.js\";\nimport { AccountsResource } from \"./resources/accounts.js\";\nimport { CallflowsResource } from \"./resources/callflows.js\";\nimport { CdrsResource } from \"./resources/cdrs.js\";\nimport { ChannelsResource } from \"./resources/channels.js\";\nimport { ConferencesResource } from \"./resources/conferences.js\";\nimport { DevicesResource } from \"./resources/devices.js\";\nimport { FaxesResource } from \"./resources/faxes.js\";\nimport { MediaResource } from \"./resources/media.js\";\nimport { MenusResource } from \"./resources/menus.js\";\nimport { PhoneNumbersResource } from \"./resources/phone-numbers.js\";\nimport { TemporalRulesResource } from \"./resources/temporal-rules.js\";\nimport { TokenResource } from \"./resources/token.js\";\nimport type {\n Account,\n Callflow,\n Cdr,\n Conference,\n Device,\n Fax,\n Media,\n Menu,\n PhoneNumber,\n TemporalRule,\n TokenInfo,\n User,\n VoicemailBox,\n Webhook,\n} from \"./resources/types.js\";\nimport { UsersResource } from \"./resources/users.js\";\nimport { VoicemailsResource } from \"./resources/voicemails.js\";\nimport { WebhooksResource } from \"./resources/webhooks.js\";\nimport type {\n AuthConfig,\n CrossbarConfig,\n CrossbarHttpClient,\n CrossbarResponse,\n RequestOptions,\n RetryConfig,\n} from \"./types.js\";\n\nexport interface CrossbarTypes {\n account: Account;\n tokenInfo: TokenInfo;\n user: User;\n device: Device;\n callflow: Callflow;\n voicemailBox: VoicemailBox;\n phoneNumber: PhoneNumber;\n cdr: Cdr;\n conference: Conference;\n fax: Fax;\n media: Media;\n menu: Menu;\n temporalRule: TemporalRule;\n webhook: Webhook;\n}\n\nexport type WithCrossbarTypes<T extends Partial<CrossbarTypes>> = Omit<CrossbarTypes, keyof T> & T;\n\ntype HttpMethod = \"GET\" | \"PUT\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\nconst DEFAULT_VERSION = \"v2\";\n\nexport class CrossbarClient<T extends CrossbarTypes = CrossbarTypes> {\n private readonly baseUrl: string;\n private readonly version: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly defaultTimeout: number | undefined;\n private readonly retryConfig: RetryConfig;\n private authConfig: AuthConfig | undefined;\n private authToken: string | undefined;\n\n private readonly _http: CrossbarHttpClient;\n\n private _accounts: AccountsResource<T[\"account\"]> | undefined;\n private _tokenAuth: TokenResource<T[\"tokenInfo\"]> | undefined;\n private _users: UsersResource<T[\"user\"]> | undefined;\n private _devices: DevicesResource<T[\"device\"]> | undefined;\n private _callflows: CallflowsResource<T[\"callflow\"]> | undefined;\n private _voicemails: VoicemailsResource<T[\"voicemailBox\"]> | undefined;\n private _phoneNumbers: PhoneNumbersResource<T[\"phoneNumber\"]> | undefined;\n private _cdrs: CdrsResource<T[\"cdr\"]> | undefined;\n private _channels: ChannelsResource | undefined;\n private _conferences: ConferencesResource<T[\"conference\"]> | undefined;\n private _faxes: FaxesResource<T[\"fax\"]> | undefined;\n private _media: MediaResource<T[\"media\"]> | undefined;\n private _menus: MenusResource<T[\"menu\"]> | undefined;\n private _temporalRules: TemporalRulesResource<T[\"temporalRule\"]> | undefined;\n private _webhooks: WebhooksResource<T[\"webhook\"]> | undefined;\n\n constructor(config: CrossbarConfig) {\n this.baseUrl = config.url.replace(/\\/+$/, \"\");\n this.version = config.version ?? DEFAULT_VERSION;\n this.defaultHeaders = { ...config.headers };\n this.defaultTimeout = config.timeout;\n this.retryConfig = config.retry ?? {};\n this.authConfig = config.auth;\n\n if (config.auth?.type === \"token\") {\n this.authToken = config.auth.token;\n }\n\n this._http = {\n get: (path, options) => this.request(\"GET\", path, undefined, options),\n put: (path, data, options) => this.request(\"PUT\", path, data, options),\n post: (path, data, options) => this.request(\"POST\", path, data, options),\n patch: (path, data, options) => this.request(\"PATCH\", path, data, options),\n delete: (path, options) => this.request(\"DELETE\", path, undefined, options),\n };\n }\n\n get http(): CrossbarHttpClient {\n return this._http;\n }\n\n get accounts(): AccountsResource<T[\"account\"]> {\n this._accounts ??= new AccountsResource<T[\"account\"]>(this._http);\n return this._accounts;\n }\n\n get tokenAuth(): TokenResource<T[\"tokenInfo\"]> {\n this._tokenAuth ??= new TokenResource<T[\"tokenInfo\"]>(this._http);\n return this._tokenAuth;\n }\n\n get users(): UsersResource<T[\"user\"]> {\n this._users ??= new UsersResource<T[\"user\"]>(this._http);\n return this._users;\n }\n\n get devices(): DevicesResource<T[\"device\"]> {\n this._devices ??= new DevicesResource<T[\"device\"]>(this._http);\n return this._devices;\n }\n\n get callflows(): CallflowsResource<T[\"callflow\"]> {\n this._callflows ??= new CallflowsResource<T[\"callflow\"]>(this._http);\n return this._callflows;\n }\n\n get voicemails(): VoicemailsResource<T[\"voicemailBox\"]> {\n this._voicemails ??= new VoicemailsResource<T[\"voicemailBox\"]>(this._http);\n return this._voicemails;\n }\n\n get phoneNumbers(): PhoneNumbersResource<T[\"phoneNumber\"]> {\n this._phoneNumbers ??= new PhoneNumbersResource<T[\"phoneNumber\"]>(this._http);\n return this._phoneNumbers;\n }\n\n get cdrs(): CdrsResource<T[\"cdr\"]> {\n this._cdrs ??= new CdrsResource<T[\"cdr\"]>(this._http);\n return this._cdrs;\n }\n\n get channels(): ChannelsResource {\n this._channels ??= new ChannelsResource(this._http);\n return this._channels;\n }\n\n get conferences(): ConferencesResource<T[\"conference\"]> {\n this._conferences ??= new ConferencesResource<T[\"conference\"]>(this._http);\n return this._conferences;\n }\n\n get faxes(): FaxesResource<T[\"fax\"]> {\n this._faxes ??= new FaxesResource<T[\"fax\"]>(this._http);\n return this._faxes;\n }\n\n get media(): MediaResource<T[\"media\"]> {\n this._media ??= new MediaResource<T[\"media\"]>(this._http);\n return this._media;\n }\n\n get menus(): MenusResource<T[\"menu\"]> {\n this._menus ??= new MenusResource<T[\"menu\"]>(this._http);\n return this._menus;\n }\n\n get temporalRules(): TemporalRulesResource<T[\"temporalRule\"]> {\n this._temporalRules ??= new TemporalRulesResource<T[\"temporalRule\"]>(this._http);\n return this._temporalRules;\n }\n\n get webhooks(): WebhooksResource<T[\"webhook\"]> {\n this._webhooks ??= new WebhooksResource<T[\"webhook\"]>(this._http);\n return this._webhooks;\n }\n\n get token(): string | undefined {\n return this.authToken;\n }\n\n set token(value: string | undefined) {\n this.authToken = value;\n }\n\n async authenticate<T = unknown>(): Promise<CrossbarResponse<T>> {\n if (!this.authConfig) {\n throw new CrossbarError(\"No auth configuration provided\", 0);\n }\n\n if (this.authConfig.type === \"token\") {\n this.authToken = this.authConfig.token;\n return {\n data: {} as T,\n status: \"success\",\n request_id: \"\",\n auth_token: this.authToken,\n };\n }\n\n if (this.authConfig.type === \"credentials\") {\n const body: Record<string, unknown> = {\n credentials: this.authConfig.credentials,\n };\n if (this.authConfig.accountName) {\n body.account_name = this.authConfig.accountName;\n }\n if (this.authConfig.accountId) {\n body.account_id = this.authConfig.accountId;\n }\n return this.executeRequest<T>(\"PUT\", \"/user_auth\", body);\n }\n\n return this.executeRequest<T>(\"PUT\", \"/api_auth\", {\n api_key: this.authConfig.apiKey,\n });\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n data?: unknown,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n const { maxRetries = 1, reAuthOn401 = true, retryDelay = 0 } = this.retryConfig;\n\n let serverErrorAttempts = 0;\n let reAuthed = false;\n\n for (;;) {\n try {\n return await this.executeRequest<T>(method, path, data, options);\n } catch (err) {\n if (\n err instanceof CrossbarAuthError &&\n reAuthOn401 &&\n !reAuthed &&\n this.canReAuth()\n ) {\n reAuthed = true;\n await this.authenticate();\n continue;\n }\n\n if (\n err instanceof CrossbarError &&\n err.status >= 500 &&\n serverErrorAttempts < maxRetries\n ) {\n serverErrorAttempts++;\n if (retryDelay > 0) {\n await new Promise<void>((res) => setTimeout(res, retryDelay));\n }\n continue;\n }\n\n throw err;\n }\n }\n }\n\n private canReAuth(): boolean {\n return this.authConfig?.type === \"credentials\" || this.authConfig?.type === \"api_key\";\n }\n\n private async executeRequest<T>(\n method: HttpMethod,\n path: string,\n data?: unknown,\n options?: RequestOptions,\n ): Promise<CrossbarResponse<T>> {\n const url = this.buildUrl(path, options?.query);\n const headers = this.buildHeaders(options);\n const fetchOptions: RequestInit = { method, headers };\n\n if (data !== undefined) {\n fetchOptions.body = JSON.stringify({ data });\n }\n\n const timeout = options?.timeout ?? this.defaultTimeout;\n if (timeout || options?.signal) {\n const signals: AbortSignal[] = [];\n if (timeout) signals.push(AbortSignal.timeout(timeout));\n if (options?.signal) signals.push(options.signal);\n fetchOptions.signal = signals.length === 1 ? signals[0] : AbortSignal.any(signals);\n }\n\n const response = await fetch(url, fetchOptions);\n const body = (await response.json()) as Record<string, unknown>;\n\n if (body.auth_token) {\n this.authToken = body.auth_token as string;\n }\n\n if (!response.ok) {\n const message = (body.message ?? body.error ?? `HTTP ${response.status}`) as string;\n if (response.status === 401) {\n throw new CrossbarAuthError(message, body.request_id as string | undefined, body);\n }\n throw new CrossbarError(\n message,\n response.status,\n body.request_id as string | undefined,\n body,\n );\n }\n\n return {\n data: body.data as T,\n status: body.status as string,\n request_id: (body.request_id as string) ?? \"\",\n auth_token: body.auth_token as string | undefined,\n page_size: body.page_size as number | undefined,\n next_start_key: body.next_start_key as string | undefined,\n start_key: body.start_key as string | undefined,\n };\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n ): string {\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n let url = `${this.baseUrl}/${this.version}${normalizedPath}`;\n\n if (query) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) params.set(key, String(value));\n }\n const qs = params.toString();\n if (qs) url += `?${qs}`;\n }\n\n return url;\n }\n\n private buildHeaders(options?: RequestOptions): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...this.defaultHeaders,\n ...options?.headers,\n };\n\n if (this.authToken) {\n headers[\"X-Auth-Token\"] = this.authToken;\n }\n\n return headers;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "crossbar-client",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript HTTP client for the Kazoo (2600hz) Crossbar REST API",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup",
21
+ "dev": "tsup --watch",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "typecheck": "tsgo --noEmit",
25
+ "lint": "biome lint src/",
26
+ "format": "biome format --write src/",
27
+ "check": "biome check src/",
28
+ "prepublishOnly": "pnpm run build"
29
+ },
30
+ "engines": {
31
+ "node": ">=22.0.0"
32
+ },
33
+ "keywords": [
34
+ "kazoo",
35
+ "2600hz",
36
+ "crossbar",
37
+ "voip",
38
+ "telecom",
39
+ "typescript",
40
+ "api-client"
41
+ ],
42
+ "author": "",
43
+ "license": "ISC",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": ""
47
+ },
48
+ "devDependencies": {
49
+ "@biomejs/biome": "^2.0.0",
50
+ "@types/node": "^22.0.0",
51
+ "@typescript/native-preview": "7.0.0-dev.20260329.1",
52
+ "tsup": "^8.0.0",
53
+ "vitest": "^3.0.0"
54
+ },
55
+ "packageManager": "pnpm@10.30.3",
56
+ "pnpm": {
57
+ "onlyBuiltDependencies": [
58
+ "esbuild"
59
+ ]
60
+ }
61
+ }