@getnexorai/sdk 0.1.5 → 0.1.7

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.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { f as ClientOptions, N as NexorClient, d as ChatInitOptions, c as ChatHandle } from './config-C39P5Aax.cjs';
2
- export { A as AutomationInput, B as BulkResultEntry, C as Campaign, a as ChatChannelKey, b as ChatChannels, e as ChatLeadCapture, g as CreateLeadBulkResponse, h as CreateLeadInput, i as CreateLeadResponse, j as CreateMeetingInput, F as ForceFirstMessage, G as GetLeadHistoryParams, k as GetLeadHistoryResponse, l as GetLeadResponse, I as ISODateString, m as IsPausedResponse, L as Lead, n as LeadHistoryItem, o as ListTemplatesParams, M as MeetingNotesInput, R as RequestOptions, p as ResumeAutomationInput, S as SendMessageInput, q as SyncTagsInput, r as SyncTagsResponse, U as UUID, W as WhatsAppTemplate, s as Workflow, t as WorkflowRunStub } from './config-C39P5Aax.cjs';
1
+ import { g as ClientOptions, N as NexorClient, d as ChatInitOptions, c as ChatHandle } from './config-DBEY3q4Q.cjs';
2
+ export { A as AutomationInput, B as BulkResultEntry, C as Campaign, a as ChatChannelKey, b as ChatChannels, e as ChatLeadCapture, f as ChatMedia, h as CreateLeadBulkResponse, i as CreateLeadInput, j as CreateLeadResponse, k as CreateMeetingInput, F as ForceFirstMessage, G as GetLeadHistoryParams, l as GetLeadHistoryResponse, m as GetLeadResponse, I as ISODateString, n as IsPausedResponse, L as Lead, o as LeadHistoryItem, p as ListTemplatesParams, M as MeetingNotesInput, R as RequestOptions, q as ResumeAutomationInput, S as SendMessageInput, r as SyncTagsInput, s as SyncTagsResponse, U as UUID, W as WhatsAppTemplate, t as Workflow, u as WorkflowRunStub } from './config-DBEY3q4Q.cjs';
3
3
 
4
4
  declare class NexorError extends Error {
5
5
  constructor(message: string);
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { f as ClientOptions, N as NexorClient, d as ChatInitOptions, c as ChatHandle } from './config-C39P5Aax.js';
2
- export { A as AutomationInput, B as BulkResultEntry, C as Campaign, a as ChatChannelKey, b as ChatChannels, e as ChatLeadCapture, g as CreateLeadBulkResponse, h as CreateLeadInput, i as CreateLeadResponse, j as CreateMeetingInput, F as ForceFirstMessage, G as GetLeadHistoryParams, k as GetLeadHistoryResponse, l as GetLeadResponse, I as ISODateString, m as IsPausedResponse, L as Lead, n as LeadHistoryItem, o as ListTemplatesParams, M as MeetingNotesInput, R as RequestOptions, p as ResumeAutomationInput, S as SendMessageInput, q as SyncTagsInput, r as SyncTagsResponse, U as UUID, W as WhatsAppTemplate, s as Workflow, t as WorkflowRunStub } from './config-C39P5Aax.js';
1
+ import { g as ClientOptions, N as NexorClient, d as ChatInitOptions, c as ChatHandle } from './config-DBEY3q4Q.js';
2
+ export { A as AutomationInput, B as BulkResultEntry, C as Campaign, a as ChatChannelKey, b as ChatChannels, e as ChatLeadCapture, f as ChatMedia, h as CreateLeadBulkResponse, i as CreateLeadInput, j as CreateLeadResponse, k as CreateMeetingInput, F as ForceFirstMessage, G as GetLeadHistoryParams, l as GetLeadHistoryResponse, m as GetLeadResponse, I as ISODateString, n as IsPausedResponse, L as Lead, o as LeadHistoryItem, p as ListTemplatesParams, M as MeetingNotesInput, R as RequestOptions, q as ResumeAutomationInput, S as SendMessageInput, r as SyncTagsInput, s as SyncTagsResponse, U as UUID, W as WhatsAppTemplate, t as Workflow, u as WorkflowRunStub } from './config-DBEY3q4Q.js';
3
3
 
4
4
  declare class NexorError extends Error {
5
5
  constructor(message: string);
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { initChat } from './chunk-EGZR7CCR.js';
1
+ import { initChat } from './chunk-DSKP6MXM.js';
2
2
 
3
3
  // src/errors.ts
4
4
  var NexorError = class extends Error {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export class NexorError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NexorError\";\n }\n}\n\nexport class NexorAPIError extends NexorError {\n status: number;\n code: string;\n body: unknown;\n requestId?: string;\n\n constructor(opts: {\n status: number;\n code?: string;\n message: string;\n body?: unknown;\n requestId?: string;\n }) {\n super(opts.message);\n this.name = \"NexorAPIError\";\n this.status = opts.status;\n this.code = opts.code ?? statusToCode(opts.status);\n this.body = opts.body;\n this.requestId = opts.requestId;\n }\n}\n\nexport class NexorAuthError extends NexorAPIError {\n constructor(opts: { message: string; body?: unknown; requestId?: string }) {\n super({ status: 401, code: \"unauthorized\", ...opts });\n this.name = \"NexorAuthError\";\n }\n}\n\nexport class NexorValidationError extends NexorAPIError {\n constructor(opts: { message: string; body?: unknown; requestId?: string }) {\n super({ status: 400, code: \"validation_error\", ...opts });\n this.name = \"NexorValidationError\";\n }\n}\n\nexport class NexorNetworkError extends NexorError {\n cause?: unknown;\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"NexorNetworkError\";\n this.cause = cause;\n }\n}\n\nfunction statusToCode(status: number): string {\n if (status === 400) return \"validation_error\";\n if (status === 401) return \"unauthorized\";\n if (status === 403) return \"forbidden\";\n if (status === 404) return \"not_found\";\n if (status === 409) return \"conflict\";\n if (status === 422) return \"unprocessable_entity\";\n if (status === 429) return \"rate_limited\";\n if (status >= 500) return \"server_error\";\n return \"http_error\";\n}\n","import {\n NexorAPIError,\n NexorAuthError,\n NexorNetworkError,\n NexorValidationError,\n} from \"./errors\";\nimport type { ClientOptions, RequestOptions } from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://api.getnexor.ai\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst SDK_VERSION = \"0.1.0\";\n\nexport interface ResolvedConfig {\n apiKey: string;\n baseUrl: string;\n timeoutMs: number;\n maxRetries: number;\n fetchImpl: typeof fetch;\n userAgent: string;\n}\n\nexport function resolveConfig(opts: ClientOptions): ResolvedConfig {\n if (!opts || typeof opts.apiKey !== \"string\" || opts.apiKey.trim() === \"\") {\n throw new Error(\n \"Nexor SDK: `apiKey` is required. Get one in the dashboard at https://app.getnexor.ai\",\n );\n }\n const fetchImpl =\n opts.fetch ??\n (typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : (undefined as unknown as typeof fetch));\n if (!fetchImpl) {\n throw new Error(\n \"Nexor SDK: no global fetch found. Pass a `fetch` implementation via init() or upgrade to Node 18+.\",\n );\n }\n const ua = `nexor-sdk-js/${SDK_VERSION}${opts.userAgentSuffix ? ` ${opts.userAgentSuffix}` : \"\"}`;\n return {\n apiKey: opts.apiKey.trim(),\n baseUrl: stripTrailingSlash(opts.baseUrl ?? DEFAULT_BASE_URL),\n timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n fetchImpl,\n userAgent: ua,\n };\n}\n\ninterface HttpRequest {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n path: string;\n query?: Record<string, string | number | boolean | string[] | undefined | null>;\n body?: unknown;\n options?: RequestOptions;\n}\n\nexport async function request<T>(\n cfg: ResolvedConfig,\n req: HttpRequest,\n): Promise<T> {\n const url = buildUrl(cfg.baseUrl, req.path, req.query);\n const headers: Record<string, string> = {\n \"X-API-Key\": cfg.apiKey,\n Accept: \"application/json\",\n \"User-Agent\": cfg.userAgent,\n };\n if (req.options?.idempotencyKey) {\n headers[\"Idempotency-Key\"] = req.options.idempotencyKey;\n }\n let body: BodyInit | undefined;\n if (req.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n body = JSON.stringify(req.body);\n }\n\n const timeoutMs = req.options?.timeoutMs ?? cfg.timeoutMs;\n const maxRetries = req.options?.maxRetries ?? cfg.maxRetries;\n let lastErr: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const controller = new AbortController();\n const externalSignal = req.options?.signal;\n const onAbort = () => controller.abort();\n if (externalSignal) {\n if (externalSignal.aborted) controller.abort();\n else externalSignal.addEventListener(\"abort\", onAbort);\n }\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await cfg.fetchImpl(url, {\n method: req.method,\n headers,\n body,\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n externalSignal?.removeEventListener(\"abort\", onAbort);\n\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n const text = await res.text();\n if (!text) return undefined as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new NexorAPIError({\n status: res.status,\n message: \"Failed to parse JSON response\",\n body: text,\n requestId,\n });\n }\n }\n\n // Non-2xx: parse and throw a typed error.\n const errBody = await safeJson(res);\n const message = pickMessage(errBody) ?? `HTTP ${res.status}`;\n const err = makeError(res.status, message, errBody, requestId);\n\n // Retry on 429 + 5xx with exponential backoff.\n if (shouldRetry(res.status) && attempt < maxRetries) {\n await sleep(backoffMs(attempt, res));\n lastErr = err;\n continue;\n }\n throw err;\n } catch (err) {\n clearTimeout(timeoutId);\n externalSignal?.removeEventListener(\"abort\", onAbort);\n if (err instanceof NexorAPIError) throw err;\n const isAbort =\n err instanceof Error &&\n (err.name === \"AbortError\" || /abort/i.test(err.message));\n if (isAbort && externalSignal?.aborted) throw err;\n // Network or timeout: retry.\n lastErr = err;\n if (attempt < maxRetries) {\n await sleep(backoffMs(attempt));\n continue;\n }\n throw new NexorNetworkError(\n isAbort ? `Request timed out after ${timeoutMs}ms` : `Network error: ${(err as Error)?.message ?? String(err)}`,\n err,\n );\n }\n }\n throw lastErr ?? new NexorNetworkError(\"Request failed\");\n}\n\nfunction makeError(\n status: number,\n message: string,\n body: unknown,\n requestId?: string,\n): NexorAPIError {\n if (status === 401 || status === 403) {\n return new NexorAuthError({ message, body, requestId });\n }\n if (status === 400 || status === 422) {\n return new NexorValidationError({ message, body, requestId });\n }\n return new NexorAPIError({ status, message, body, requestId });\n}\n\nfunction pickMessage(body: unknown): string | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const b = body as Record<string, unknown>;\n if (typeof b.message === \"string\") return b.message;\n if (typeof b.error === \"string\") return b.error;\n return undefined;\n}\n\nasync function safeJson(res: Response): Promise<unknown> {\n try {\n const txt = await res.text();\n if (!txt) return null;\n try {\n return JSON.parse(txt);\n } catch {\n return txt;\n }\n } catch {\n return null;\n }\n}\n\nfunction shouldRetry(status: number): boolean {\n return status === 429 || (status >= 500 && status <= 599);\n}\n\nfunction backoffMs(attempt: number, res?: Response): number {\n if (res) {\n const ra = res.headers.get(\"retry-after\");\n if (ra) {\n const n = Number(ra);\n if (!Number.isNaN(n) && n > 0) return Math.min(n * 1000, 10_000);\n }\n }\n const base = 300 * 2 ** attempt;\n return base + Math.floor(Math.random() * 200);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query?: HttpRequest[\"query\"],\n): string {\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n const qs = encodeQuery(query);\n return `${baseUrl}${p}${qs ? `?${qs}` : \"\"}`;\n}\n\nfunction encodeQuery(query?: HttpRequest[\"query\"]): string {\n if (!query) return \"\";\n const parts: string[] = [];\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) {\n if (v.length === 0) continue;\n parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(v.join(\",\"))}`);\n } else {\n parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);\n }\n }\n return parts.join(\"&\");\n}\n","import { request, resolveConfig, type ResolvedConfig } from \"./http\";\nimport type {\n AutomationInput,\n Campaign,\n ClientOptions,\n CreateLeadBulkResponse,\n CreateLeadInput,\n CreateLeadResponse,\n CreateMeetingInput,\n GetLeadHistoryParams,\n GetLeadHistoryResponse,\n GetLeadResponse,\n IsPausedResponse,\n Lead,\n ListTemplatesParams,\n MeetingNotesInput,\n RequestOptions,\n ResumeAutomationInput,\n SendMessageInput,\n SyncTagsInput,\n SyncTagsResponse,\n UUID,\n WhatsAppTemplate,\n Workflow,\n} from \"./types\";\n\nconst PUBLIC_PREFIX = \"/api/public\";\n\n/**\n * Low-level Nexor API client.\n *\n * Most users should call `init()` / `createClient()` instead of instantiating\n * this directly, but it's exported for advanced cases (DI, mocking).\n */\nexport class NexorClient {\n private cfg: ResolvedConfig;\n\n constructor(opts: ClientOptions) {\n this.cfg = resolveConfig(opts);\n }\n\n // ─── Leads ───────────────────────────────────────────────────────────────\n\n /** Create a single lead, optionally assigning it to a workflow. */\n createLead(\n input: CreateLeadInput,\n options?: RequestOptions,\n ): Promise<CreateLeadResponse> {\n return request<CreateLeadResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: { ...input, skip_first_message: true },\n options,\n });\n }\n\n /** Create many leads in one request (max 1000). */\n createLeadsBulk(\n inputs: CreateLeadInput[],\n options?: RequestOptions,\n ): Promise<CreateLeadBulkResponse> {\n return request<CreateLeadBulkResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: inputs.map((i) => ({ ...i, skip_first_message: true })),\n options,\n });\n }\n\n /** Update an existing lead. metadata is shallow-merged server-side. */\n updateLead(\n leadId: UUID,\n updates: Partial<CreateLeadInput>,\n options?: RequestOptions,\n ): Promise<{ success: true; lead: Lead }> {\n return request(this.cfg, {\n method: \"PUT\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,\n body: updates,\n options,\n });\n }\n\n /** Fetch a lead with its captured variables and per-channel engagement. */\n getLead(leadId: UUID, options?: RequestOptions): Promise<GetLeadResponse> {\n return request<GetLeadResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,\n options,\n });\n }\n\n /** Full chronological history: messages, transcripts, activity. */\n getLeadHistory(\n leadId: UUID,\n params: GetLeadHistoryParams = {},\n options?: RequestOptions,\n ): Promise<GetLeadHistoryResponse> {\n const channel = Array.isArray(params.channel)\n ? params.channel\n : params.channel\n ? [params.channel]\n : undefined;\n return request<GetLeadHistoryResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/history`,\n query: { channel, limit: params.limit, offset: params.offset },\n options,\n });\n }\n\n /** Has automation been paused (human takeover) for this lead? */\n isLeadPaused(\n leadId: UUID,\n params: { workflow_id?: UUID } = {},\n options?: RequestOptions,\n ): Promise<IsPausedResponse> {\n return request<IsPausedResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/is_paused`,\n query: { workflow_id: params.workflow_id },\n options,\n });\n }\n\n /** Pause automation (engage human takeover) on a specific workflow run. */\n stopAutomation(\n leadId: UUID,\n input: AutomationInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/stop`,\n body: input,\n options,\n });\n }\n\n /** Resume automation; pass resume_cadence: true to restart scheduled touches. */\n resumeAutomation(\n leadId: UUID,\n input: ResumeAutomationInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/resume`,\n body: input,\n options,\n });\n }\n\n /**\n * Replace the tag set on a lead (identified by lead_id OR email).\n * Tags missing from the input are unassigned; new tags are find-or-created.\n */\n syncLeadTags(\n input: SyncTagsInput,\n options?: RequestOptions,\n ): Promise<SyncTagsResponse> {\n return request<SyncTagsResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/tags`,\n body: input,\n options,\n });\n }\n\n /** All meetings on file for a lead (optionally filter by status). */\n listLeadMeetings(\n leadId: UUID,\n params: { status?: string | string[] } = {},\n options?: RequestOptions,\n ): Promise<unknown> {\n const status = Array.isArray(params.status)\n ? params.status.join(\",\")\n : params.status;\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/meetings`,\n query: { status },\n options,\n });\n }\n\n // ─── Workflows / Campaigns / Templates ──────────────────────────────────\n\n /** Active workflows in your account. */\n listWorkflows(\n options?: RequestOptions,\n ): Promise<{ success: true; workflows: Workflow[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/workflows`,\n options,\n });\n }\n\n /** Campaigns in your account. */\n listCampaigns(\n options?: RequestOptions,\n ): Promise<{ success: true; campaigns: Campaign[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/campaigns`,\n options,\n });\n }\n\n /** Approved WhatsApp templates. */\n listTemplates(\n params: ListTemplatesParams = {},\n options?: RequestOptions,\n ): Promise<{ success: true; templates: WhatsAppTemplate[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/templates`,\n query: { status: params.status, category: params.category },\n options,\n });\n }\n\n // ─── Messages ───────────────────────────────────────────────────────────\n\n /** Send a one-off message (WhatsApp/email) or trigger a call. */\n sendMessage(\n input: SendMessageInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/messages`,\n body: input,\n options,\n });\n }\n\n // ─── Meetings ───────────────────────────────────────────────────────────\n\n /** Log a booked meeting against an existing lead (matched by email). */\n createMeeting(\n input: CreateMeetingInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/meetings`,\n body: input,\n options,\n });\n }\n\n /** Push a note-taker transcript / summary / action items to a meeting. */\n createMeetingNotes(\n input: MeetingNotesInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/meeting-notes`,\n body: input,\n options,\n });\n }\n\n // ─── Chat (used by initChat widget) ─────────────────────────────────────\n\n /**\n * Fetch the dashboard-authored web-chat config for a workflow. Backed by\n * GET /api/public/chat/config. The widget calls this once on init to learn\n * whether web chat is enabled and to get the static opening message\n * (`initial_message`, a RAW template that may contain {{variables}} — the\n * widget substitutes them client-side before painting the greeting).\n *\n * Most users will not call this directly — `initChat()` handles it.\n */\n getChatConfig(\n workflowId: UUID,\n options?: RequestOptions,\n ): Promise<{\n success: true;\n enabled: boolean;\n initial_message: string | null;\n }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/chat/config`,\n query: { workflow_id: workflowId },\n options,\n });\n }\n\n /**\n * Send a turn in a browser-embedded chat session. Backed by\n * POST /api/public/chat on the Nexor API.\n *\n * Most users will not call this directly — `initChat()` handles it.\n */\n chat(\n input: {\n workflow_id: UUID;\n session_id: string;\n message: string;\n system_prompt?: string;\n client_prompt?: string;\n /** The opening message the widget actually displayed (keeps the agent's\n * <webchat_opening> in sync with a per-page override). */\n opening_shown?: string;\n /** Start over as a brand-new lead: the API skips email/phone/session\n * matching and mints a fresh lead with no prior conversation context. */\n new_lead?: boolean;\n /** Keep the same lead but start a fresh conversation episode: the API\n * deactivates the prior run + thread and clears this workflow's collected\n * variables, so the agent sees no prior context. */\n reset_episode?: boolean;\n lead?: {\n first_name?: string;\n last_name?: string;\n email?: string;\n phone?: string;\n metadata?: Record<string, unknown>;\n };\n metadata?: Record<string, unknown>;\n },\n options?: RequestOptions,\n ): Promise<{\n success: true;\n reply: string;\n session_id: string;\n lead_id?: UUID;\n workflow_run_id?: UUID;\n /** True when the API recognised an existing lead (returning visitor). */\n matched_existing?: boolean;\n }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/chat`,\n body: input,\n options,\n });\n }\n\n /**\n * Create (or upsert) a lead from the web chat widget and force its FIRST\n * contact to go out on a chosen channel — used when a visitor clicks\n * \"call me\" / \"email me\" instead of opening the chat. Backed by\n * POST /api/public/leads with `force_first_channel`.\n *\n * Unlike a literal `force_first_message`, `force_first_channel` pins the\n * channel and lets the workflow's own agent compose the first outreach. The\n * `metadata` you pass (page URL, requested channel, a note that the visitor\n * asked to be contacted from the website) is stored on the lead so the agent\n * has that context.\n *\n * Most users will not call this directly — `initChat()`'s contact-request\n * form handles it.\n */\n requestContact(\n input: {\n workflow_id: UUID;\n first_name?: string;\n last_name?: string;\n email?: string;\n phone?: string;\n /** Force the first contact onto this channel (agent composes the message). */\n force_first_channel: \"call\" | \"email\" | \"whatsapp\";\n /** Context stored on the lead (page URL, requested channel, free-form note). */\n metadata?: Record<string, unknown>;\n /** Lead source label. Defaults to \"web-chat\" server-side handling. */\n source?: string;\n },\n options?: RequestOptions,\n ): Promise<{\n success: true;\n lead: { id: UUID; first_name?: string; email?: string; phone?: string };\n existed?: boolean;\n workflow_run?: { id: UUID };\n force_first_channel?: { channel: string; applied: boolean };\n warning?: string;\n }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: input,\n options,\n });\n }\n}\n","import { NexorClient } from \"./client\";\nimport { initChat as initChatImpl, type ChatInitOptions, type ChatHandle } from \"./chat\";\nimport type { ClientOptions } from \"./types\";\n\nexport { NexorClient } from \"./client\";\nexport {\n NexorError,\n NexorAPIError,\n NexorAuthError,\n NexorValidationError,\n NexorNetworkError,\n} from \"./errors\";\nexport * from \"./types\";\nexport type {\n ChatInitOptions,\n ChatHandle,\n ChatLeadCapture,\n ChatChannels,\n ChatChannelKey,\n} from \"./chat\";\n\n/**\n * Singleton API. After `init({apiKey})`, call top-level helpers like\n * `createLead`, `getLead`, `initChat`, etc.\n *\n * import nexor from \"@getnexorai/sdk\";\n * nexor.init({ apiKey: \"nx_live_…\" });\n * await nexor.createLead({ first_name: \"Ada\", email: \"ada@example.com\" });\n *\n * For multi-tenant / server-side use where a singleton doesn't fit, instantiate\n * the underlying client directly:\n *\n * import { NexorClient } from \"@getnexorai/sdk\";\n * const client = new NexorClient({ apiKey });\n */\nexport function createClient(opts: ClientOptions): NexorClient {\n return new NexorClient(opts);\n}\n\nlet _client: NexorClient | null = null;\n\nfunction getClient(): NexorClient {\n if (!_client) {\n throw new Error(\n \"Nexor SDK: call `nexor.init({ apiKey })` before using the API.\",\n );\n }\n return _client;\n}\n\nfunction init(opts: ClientOptions): NexorClient {\n _client = new NexorClient(opts);\n return _client;\n}\n\nfunction isInitialized(): boolean {\n return _client !== null;\n}\n\nfunction reset(): void {\n _client = null;\n}\n\n/**\n * The default export — a ready-to-use, lazily-initialized singleton.\n *\n * Every method below proxies to the underlying NexorClient created by `init()`,\n * so the surface mirrors NexorClient one-for-one with no boilerplate.\n */\nexport const nexor = {\n init,\n isInitialized,\n reset,\n get client(): NexorClient {\n return getClient();\n },\n\n // Leads\n createLead: ((...args) => getClient().createLead(...args)) as NexorClient[\"createLead\"],\n createLeadsBulk: ((...args) =>\n getClient().createLeadsBulk(...args)) as NexorClient[\"createLeadsBulk\"],\n updateLead: ((...args) => getClient().updateLead(...args)) as NexorClient[\"updateLead\"],\n getLead: ((...args) => getClient().getLead(...args)) as NexorClient[\"getLead\"],\n getLeadHistory: ((...args) =>\n getClient().getLeadHistory(...args)) as NexorClient[\"getLeadHistory\"],\n isLeadPaused: ((...args) => getClient().isLeadPaused(...args)) as NexorClient[\"isLeadPaused\"],\n stopAutomation: ((...args) => getClient().stopAutomation(...args)) as NexorClient[\"stopAutomation\"],\n resumeAutomation: ((...args) =>\n getClient().resumeAutomation(...args)) as NexorClient[\"resumeAutomation\"],\n syncLeadTags: ((...args) => getClient().syncLeadTags(...args)) as NexorClient[\"syncLeadTags\"],\n listLeadMeetings: ((...args) =>\n getClient().listLeadMeetings(...args)) as NexorClient[\"listLeadMeetings\"],\n\n // Workflows / Campaigns / Templates\n listWorkflows: ((...args) => getClient().listWorkflows(...args)) as NexorClient[\"listWorkflows\"],\n listCampaigns: ((...args) => getClient().listCampaigns(...args)) as NexorClient[\"listCampaigns\"],\n listTemplates: ((...args) => getClient().listTemplates(...args)) as NexorClient[\"listTemplates\"],\n\n // Messages\n sendMessage: ((...args) => getClient().sendMessage(...args)) as NexorClient[\"sendMessage\"],\n\n // Meetings\n createMeeting: ((...args) => getClient().createMeeting(...args)) as NexorClient[\"createMeeting\"],\n createMeetingNotes: ((...args) =>\n getClient().createMeetingNotes(...args)) as NexorClient[\"createMeetingNotes\"],\n\n // Chat widget\n initChat: (options: ChatInitOptions): ChatHandle =>\n initChatImpl(getClient(), options),\n};\n\nexport default nexor;\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export class NexorError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NexorError\";\n }\n}\n\nexport class NexorAPIError extends NexorError {\n status: number;\n code: string;\n body: unknown;\n requestId?: string;\n\n constructor(opts: {\n status: number;\n code?: string;\n message: string;\n body?: unknown;\n requestId?: string;\n }) {\n super(opts.message);\n this.name = \"NexorAPIError\";\n this.status = opts.status;\n this.code = opts.code ?? statusToCode(opts.status);\n this.body = opts.body;\n this.requestId = opts.requestId;\n }\n}\n\nexport class NexorAuthError extends NexorAPIError {\n constructor(opts: { message: string; body?: unknown; requestId?: string }) {\n super({ status: 401, code: \"unauthorized\", ...opts });\n this.name = \"NexorAuthError\";\n }\n}\n\nexport class NexorValidationError extends NexorAPIError {\n constructor(opts: { message: string; body?: unknown; requestId?: string }) {\n super({ status: 400, code: \"validation_error\", ...opts });\n this.name = \"NexorValidationError\";\n }\n}\n\nexport class NexorNetworkError extends NexorError {\n cause?: unknown;\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"NexorNetworkError\";\n this.cause = cause;\n }\n}\n\nfunction statusToCode(status: number): string {\n if (status === 400) return \"validation_error\";\n if (status === 401) return \"unauthorized\";\n if (status === 403) return \"forbidden\";\n if (status === 404) return \"not_found\";\n if (status === 409) return \"conflict\";\n if (status === 422) return \"unprocessable_entity\";\n if (status === 429) return \"rate_limited\";\n if (status >= 500) return \"server_error\";\n return \"http_error\";\n}\n","import {\n NexorAPIError,\n NexorAuthError,\n NexorNetworkError,\n NexorValidationError,\n} from \"./errors\";\nimport type { ClientOptions, RequestOptions } from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://api.getnexor.ai\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst SDK_VERSION = \"0.1.0\";\n\nexport interface ResolvedConfig {\n apiKey: string;\n baseUrl: string;\n timeoutMs: number;\n maxRetries: number;\n fetchImpl: typeof fetch;\n userAgent: string;\n}\n\nexport function resolveConfig(opts: ClientOptions): ResolvedConfig {\n if (!opts || typeof opts.apiKey !== \"string\" || opts.apiKey.trim() === \"\") {\n throw new Error(\n \"Nexor SDK: `apiKey` is required. Get one in the dashboard at https://app.getnexor.ai\",\n );\n }\n const fetchImpl =\n opts.fetch ??\n (typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : (undefined as unknown as typeof fetch));\n if (!fetchImpl) {\n throw new Error(\n \"Nexor SDK: no global fetch found. Pass a `fetch` implementation via init() or upgrade to Node 18+.\",\n );\n }\n const ua = `nexor-sdk-js/${SDK_VERSION}${opts.userAgentSuffix ? ` ${opts.userAgentSuffix}` : \"\"}`;\n return {\n apiKey: opts.apiKey.trim(),\n baseUrl: stripTrailingSlash(opts.baseUrl ?? DEFAULT_BASE_URL),\n timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n fetchImpl,\n userAgent: ua,\n };\n}\n\ninterface HttpRequest {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n path: string;\n query?: Record<string, string | number | boolean | string[] | undefined | null>;\n body?: unknown;\n options?: RequestOptions;\n}\n\nexport async function request<T>(\n cfg: ResolvedConfig,\n req: HttpRequest,\n): Promise<T> {\n const url = buildUrl(cfg.baseUrl, req.path, req.query);\n const headers: Record<string, string> = {\n \"X-API-Key\": cfg.apiKey,\n Accept: \"application/json\",\n \"User-Agent\": cfg.userAgent,\n };\n if (req.options?.idempotencyKey) {\n headers[\"Idempotency-Key\"] = req.options.idempotencyKey;\n }\n let body: BodyInit | undefined;\n if (req.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n body = JSON.stringify(req.body);\n }\n\n const timeoutMs = req.options?.timeoutMs ?? cfg.timeoutMs;\n const maxRetries = req.options?.maxRetries ?? cfg.maxRetries;\n let lastErr: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const controller = new AbortController();\n const externalSignal = req.options?.signal;\n const onAbort = () => controller.abort();\n if (externalSignal) {\n if (externalSignal.aborted) controller.abort();\n else externalSignal.addEventListener(\"abort\", onAbort);\n }\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await cfg.fetchImpl(url, {\n method: req.method,\n headers,\n body,\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n externalSignal?.removeEventListener(\"abort\", onAbort);\n\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n const text = await res.text();\n if (!text) return undefined as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new NexorAPIError({\n status: res.status,\n message: \"Failed to parse JSON response\",\n body: text,\n requestId,\n });\n }\n }\n\n // Non-2xx: parse and throw a typed error.\n const errBody = await safeJson(res);\n const message = pickMessage(errBody) ?? `HTTP ${res.status}`;\n const err = makeError(res.status, message, errBody, requestId);\n\n // Retry on 429 + 5xx with exponential backoff.\n if (shouldRetry(res.status) && attempt < maxRetries) {\n await sleep(backoffMs(attempt, res));\n lastErr = err;\n continue;\n }\n throw err;\n } catch (err) {\n clearTimeout(timeoutId);\n externalSignal?.removeEventListener(\"abort\", onAbort);\n if (err instanceof NexorAPIError) throw err;\n const isAbort =\n err instanceof Error &&\n (err.name === \"AbortError\" || /abort/i.test(err.message));\n if (isAbort && externalSignal?.aborted) throw err;\n // Network or timeout: retry.\n lastErr = err;\n if (attempt < maxRetries) {\n await sleep(backoffMs(attempt));\n continue;\n }\n throw new NexorNetworkError(\n isAbort ? `Request timed out after ${timeoutMs}ms` : `Network error: ${(err as Error)?.message ?? String(err)}`,\n err,\n );\n }\n }\n throw lastErr ?? new NexorNetworkError(\"Request failed\");\n}\n\nfunction makeError(\n status: number,\n message: string,\n body: unknown,\n requestId?: string,\n): NexorAPIError {\n if (status === 401 || status === 403) {\n return new NexorAuthError({ message, body, requestId });\n }\n if (status === 400 || status === 422) {\n return new NexorValidationError({ message, body, requestId });\n }\n return new NexorAPIError({ status, message, body, requestId });\n}\n\nfunction pickMessage(body: unknown): string | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const b = body as Record<string, unknown>;\n if (typeof b.message === \"string\") return b.message;\n if (typeof b.error === \"string\") return b.error;\n return undefined;\n}\n\nasync function safeJson(res: Response): Promise<unknown> {\n try {\n const txt = await res.text();\n if (!txt) return null;\n try {\n return JSON.parse(txt);\n } catch {\n return txt;\n }\n } catch {\n return null;\n }\n}\n\nfunction shouldRetry(status: number): boolean {\n return status === 429 || (status >= 500 && status <= 599);\n}\n\nfunction backoffMs(attempt: number, res?: Response): number {\n if (res) {\n const ra = res.headers.get(\"retry-after\");\n if (ra) {\n const n = Number(ra);\n if (!Number.isNaN(n) && n > 0) return Math.min(n * 1000, 10_000);\n }\n }\n const base = 300 * 2 ** attempt;\n return base + Math.floor(Math.random() * 200);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query?: HttpRequest[\"query\"],\n): string {\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n const qs = encodeQuery(query);\n return `${baseUrl}${p}${qs ? `?${qs}` : \"\"}`;\n}\n\nfunction encodeQuery(query?: HttpRequest[\"query\"]): string {\n if (!query) return \"\";\n const parts: string[] = [];\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) {\n if (v.length === 0) continue;\n parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(v.join(\",\"))}`);\n } else {\n parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);\n }\n }\n return parts.join(\"&\");\n}\n","import { request, resolveConfig, type ResolvedConfig } from \"./http\";\nimport type {\n AutomationInput,\n Campaign,\n ChatMedia,\n ClientOptions,\n CreateLeadBulkResponse,\n CreateLeadInput,\n CreateLeadResponse,\n CreateMeetingInput,\n GetLeadHistoryParams,\n GetLeadHistoryResponse,\n GetLeadResponse,\n IsPausedResponse,\n Lead,\n ListTemplatesParams,\n MeetingNotesInput,\n RequestOptions,\n ResumeAutomationInput,\n SendMessageInput,\n SyncTagsInput,\n SyncTagsResponse,\n UUID,\n WhatsAppTemplate,\n Workflow,\n} from \"./types\";\n\nconst PUBLIC_PREFIX = \"/api/public\";\n\n/**\n * Low-level Nexor API client.\n *\n * Most users should call `init()` / `createClient()` instead of instantiating\n * this directly, but it's exported for advanced cases (DI, mocking).\n */\nexport class NexorClient {\n private cfg: ResolvedConfig;\n\n constructor(opts: ClientOptions) {\n this.cfg = resolveConfig(opts);\n }\n\n // ─── Leads ───────────────────────────────────────────────────────────────\n\n /** Create a single lead, optionally assigning it to a workflow. */\n createLead(\n input: CreateLeadInput,\n options?: RequestOptions,\n ): Promise<CreateLeadResponse> {\n return request<CreateLeadResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: { ...input, skip_first_message: true },\n options,\n });\n }\n\n /** Create many leads in one request (max 1000). */\n createLeadsBulk(\n inputs: CreateLeadInput[],\n options?: RequestOptions,\n ): Promise<CreateLeadBulkResponse> {\n return request<CreateLeadBulkResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: inputs.map((i) => ({ ...i, skip_first_message: true })),\n options,\n });\n }\n\n /** Update an existing lead. metadata is shallow-merged server-side. */\n updateLead(\n leadId: UUID,\n updates: Partial<CreateLeadInput>,\n options?: RequestOptions,\n ): Promise<{ success: true; lead: Lead }> {\n return request(this.cfg, {\n method: \"PUT\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,\n body: updates,\n options,\n });\n }\n\n /** Fetch a lead with its captured variables and per-channel engagement. */\n getLead(leadId: UUID, options?: RequestOptions): Promise<GetLeadResponse> {\n return request<GetLeadResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,\n options,\n });\n }\n\n /** Full chronological history: messages, transcripts, activity. */\n getLeadHistory(\n leadId: UUID,\n params: GetLeadHistoryParams = {},\n options?: RequestOptions,\n ): Promise<GetLeadHistoryResponse> {\n const channel = Array.isArray(params.channel)\n ? params.channel\n : params.channel\n ? [params.channel]\n : undefined;\n return request<GetLeadHistoryResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/history`,\n query: { channel, limit: params.limit, offset: params.offset },\n options,\n });\n }\n\n /** Has automation been paused (human takeover) for this lead? */\n isLeadPaused(\n leadId: UUID,\n params: { workflow_id?: UUID } = {},\n options?: RequestOptions,\n ): Promise<IsPausedResponse> {\n return request<IsPausedResponse>(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/is_paused`,\n query: { workflow_id: params.workflow_id },\n options,\n });\n }\n\n /** Pause automation (engage human takeover) on a specific workflow run. */\n stopAutomation(\n leadId: UUID,\n input: AutomationInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/stop`,\n body: input,\n options,\n });\n }\n\n /** Resume automation; pass resume_cadence: true to restart scheduled touches. */\n resumeAutomation(\n leadId: UUID,\n input: ResumeAutomationInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/resume`,\n body: input,\n options,\n });\n }\n\n /**\n * Replace the tag set on a lead (identified by lead_id OR email).\n * Tags missing from the input are unassigned; new tags are find-or-created.\n */\n syncLeadTags(\n input: SyncTagsInput,\n options?: RequestOptions,\n ): Promise<SyncTagsResponse> {\n return request<SyncTagsResponse>(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads/tags`,\n body: input,\n options,\n });\n }\n\n /** All meetings on file for a lead (optionally filter by status). */\n listLeadMeetings(\n leadId: UUID,\n params: { status?: string | string[] } = {},\n options?: RequestOptions,\n ): Promise<unknown> {\n const status = Array.isArray(params.status)\n ? params.status.join(\",\")\n : params.status;\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/meetings`,\n query: { status },\n options,\n });\n }\n\n // ─── Workflows / Campaigns / Templates ──────────────────────────────────\n\n /** Active workflows in your account. */\n listWorkflows(\n options?: RequestOptions,\n ): Promise<{ success: true; workflows: Workflow[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/workflows`,\n options,\n });\n }\n\n /** Campaigns in your account. */\n listCampaigns(\n options?: RequestOptions,\n ): Promise<{ success: true; campaigns: Campaign[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/campaigns`,\n options,\n });\n }\n\n /** Approved WhatsApp templates. */\n listTemplates(\n params: ListTemplatesParams = {},\n options?: RequestOptions,\n ): Promise<{ success: true; templates: WhatsAppTemplate[] }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/templates`,\n query: { status: params.status, category: params.category },\n options,\n });\n }\n\n // ─── Messages ───────────────────────────────────────────────────────────\n\n /** Send a one-off message (WhatsApp/email) or trigger a call. */\n sendMessage(\n input: SendMessageInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/messages`,\n body: input,\n options,\n });\n }\n\n // ─── Meetings ───────────────────────────────────────────────────────────\n\n /** Log a booked meeting against an existing lead (matched by email). */\n createMeeting(\n input: CreateMeetingInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/meetings`,\n body: input,\n options,\n });\n }\n\n /** Push a note-taker transcript / summary / action items to a meeting. */\n createMeetingNotes(\n input: MeetingNotesInput,\n options?: RequestOptions,\n ): Promise<unknown> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/meeting-notes`,\n body: input,\n options,\n });\n }\n\n // ─── Chat (used by initChat widget) ─────────────────────────────────────\n\n /**\n * Fetch the dashboard-authored web-chat config for a workflow. Backed by\n * GET /api/public/chat/config. The widget calls this once on init to learn\n * whether web chat is enabled and to get the static opening message\n * (`initial_message`, a RAW template that may contain {{variables}} — the\n * widget substitutes them client-side before painting the greeting).\n *\n * Most users will not call this directly — `initChat()` handles it.\n */\n getChatConfig(\n workflowId: UUID,\n options?: RequestOptions,\n ): Promise<{\n success: true;\n enabled: boolean;\n initial_message: string | null;\n }> {\n return request(this.cfg, {\n method: \"GET\",\n path: `${PUBLIC_PREFIX}/chat/config`,\n query: { workflow_id: workflowId },\n options,\n });\n }\n\n /**\n * Send a turn in a browser-embedded chat session. Backed by\n * POST /api/public/chat on the Nexor API.\n *\n * Most users will not call this directly — `initChat()` handles it.\n */\n chat(\n input: {\n workflow_id: UUID;\n session_id: string;\n message: string;\n system_prompt?: string;\n client_prompt?: string;\n /** The opening message the widget actually displayed (keeps the agent's\n * <webchat_opening> in sync with a per-page override). */\n opening_shown?: string;\n /** Start over as a brand-new lead: the API skips email/phone/session\n * matching and mints a fresh lead with no prior conversation context. */\n new_lead?: boolean;\n /** Keep the same lead but start a fresh conversation episode: the API\n * deactivates the prior run + thread and clears this workflow's collected\n * variables, so the agent sees no prior context. */\n reset_episode?: boolean;\n lead?: {\n first_name?: string;\n last_name?: string;\n email?: string;\n phone?: string;\n metadata?: Record<string, unknown>;\n };\n metadata?: Record<string, unknown>;\n },\n options?: RequestOptions,\n ): Promise<{\n success: true;\n reply: string;\n session_id: string;\n lead_id?: UUID;\n workflow_run_id?: UUID;\n /** True when the API recognised an existing lead (returning visitor). */\n matched_existing?: boolean;\n /** File(s) the AI attached to this reply (inline media channels). */\n media?: ChatMedia[];\n }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/chat`,\n body: input,\n options,\n });\n }\n\n /**\n * Create (or upsert) a lead from the web chat widget and force its FIRST\n * contact to go out on a chosen channel — used when a visitor clicks\n * \"call me\" / \"email me\" instead of opening the chat. Backed by\n * POST /api/public/leads with `force_first_channel`.\n *\n * Unlike a literal `force_first_message`, `force_first_channel` pins the\n * channel and lets the workflow's own agent compose the first outreach. The\n * `metadata` you pass (page URL, requested channel, a note that the visitor\n * asked to be contacted from the website) is stored on the lead so the agent\n * has that context.\n *\n * Most users will not call this directly — `initChat()`'s contact-request\n * form handles it.\n */\n requestContact(\n input: {\n workflow_id: UUID;\n first_name?: string;\n last_name?: string;\n email?: string;\n phone?: string;\n /** Force the first contact onto this channel (agent composes the message). */\n force_first_channel: \"call\" | \"email\" | \"whatsapp\";\n /** Context stored on the lead (page URL, requested channel, free-form note). */\n metadata?: Record<string, unknown>;\n /** Lead source label. Defaults to \"web-chat\" server-side handling. */\n source?: string;\n },\n options?: RequestOptions,\n ): Promise<{\n success: true;\n lead: { id: UUID; first_name?: string; email?: string; phone?: string };\n existed?: boolean;\n workflow_run?: { id: UUID };\n force_first_channel?: { channel: string; applied: boolean };\n warning?: string;\n }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/leads`,\n body: input,\n options,\n });\n }\n}\n","import { NexorClient } from \"./client\";\nimport { initChat as initChatImpl, type ChatInitOptions, type ChatHandle } from \"./chat\";\nimport type { ClientOptions } from \"./types\";\n\nexport { NexorClient } from \"./client\";\nexport {\n NexorError,\n NexorAPIError,\n NexorAuthError,\n NexorValidationError,\n NexorNetworkError,\n} from \"./errors\";\nexport * from \"./types\";\nexport type {\n ChatInitOptions,\n ChatHandle,\n ChatLeadCapture,\n ChatChannels,\n ChatChannelKey,\n} from \"./chat\";\n\n/**\n * Singleton API. After `init({apiKey})`, call top-level helpers like\n * `createLead`, `getLead`, `initChat`, etc.\n *\n * import nexor from \"@getnexorai/sdk\";\n * nexor.init({ apiKey: \"nx_live_…\" });\n * await nexor.createLead({ first_name: \"Ada\", email: \"ada@example.com\" });\n *\n * For multi-tenant / server-side use where a singleton doesn't fit, instantiate\n * the underlying client directly:\n *\n * import { NexorClient } from \"@getnexorai/sdk\";\n * const client = new NexorClient({ apiKey });\n */\nexport function createClient(opts: ClientOptions): NexorClient {\n return new NexorClient(opts);\n}\n\nlet _client: NexorClient | null = null;\n\nfunction getClient(): NexorClient {\n if (!_client) {\n throw new Error(\n \"Nexor SDK: call `nexor.init({ apiKey })` before using the API.\",\n );\n }\n return _client;\n}\n\nfunction init(opts: ClientOptions): NexorClient {\n _client = new NexorClient(opts);\n return _client;\n}\n\nfunction isInitialized(): boolean {\n return _client !== null;\n}\n\nfunction reset(): void {\n _client = null;\n}\n\n/**\n * The default export — a ready-to-use, lazily-initialized singleton.\n *\n * Every method below proxies to the underlying NexorClient created by `init()`,\n * so the surface mirrors NexorClient one-for-one with no boilerplate.\n */\nexport const nexor = {\n init,\n isInitialized,\n reset,\n get client(): NexorClient {\n return getClient();\n },\n\n // Leads\n createLead: ((...args) => getClient().createLead(...args)) as NexorClient[\"createLead\"],\n createLeadsBulk: ((...args) =>\n getClient().createLeadsBulk(...args)) as NexorClient[\"createLeadsBulk\"],\n updateLead: ((...args) => getClient().updateLead(...args)) as NexorClient[\"updateLead\"],\n getLead: ((...args) => getClient().getLead(...args)) as NexorClient[\"getLead\"],\n getLeadHistory: ((...args) =>\n getClient().getLeadHistory(...args)) as NexorClient[\"getLeadHistory\"],\n isLeadPaused: ((...args) => getClient().isLeadPaused(...args)) as NexorClient[\"isLeadPaused\"],\n stopAutomation: ((...args) => getClient().stopAutomation(...args)) as NexorClient[\"stopAutomation\"],\n resumeAutomation: ((...args) =>\n getClient().resumeAutomation(...args)) as NexorClient[\"resumeAutomation\"],\n syncLeadTags: ((...args) => getClient().syncLeadTags(...args)) as NexorClient[\"syncLeadTags\"],\n listLeadMeetings: ((...args) =>\n getClient().listLeadMeetings(...args)) as NexorClient[\"listLeadMeetings\"],\n\n // Workflows / Campaigns / Templates\n listWorkflows: ((...args) => getClient().listWorkflows(...args)) as NexorClient[\"listWorkflows\"],\n listCampaigns: ((...args) => getClient().listCampaigns(...args)) as NexorClient[\"listCampaigns\"],\n listTemplates: ((...args) => getClient().listTemplates(...args)) as NexorClient[\"listTemplates\"],\n\n // Messages\n sendMessage: ((...args) => getClient().sendMessage(...args)) as NexorClient[\"sendMessage\"],\n\n // Meetings\n createMeeting: ((...args) => getClient().createMeeting(...args)) as NexorClient[\"createMeeting\"],\n createMeetingNotes: ((...args) =>\n getClient().createMeetingNotes(...args)) as NexorClient[\"createMeetingNotes\"],\n\n // Chat widget\n initChat: (options: ChatInitOptions): ChatHandle =>\n initChatImpl(getClient(), options),\n};\n\nexport default nexor;\n"]}