@getnexorai/sdk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat.cjs +62 -26
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.d.cts +2 -2
- package/dist/chat.d.ts +2 -2
- package/dist/chat.js +1 -1
- package/dist/{chunk-ZQT7QEXV.js → chunk-NBE72ISL.js} +64 -28
- package/dist/chunk-NBE72ISL.js.map +1 -0
- package/dist/{config-eTstZgSV.d.cts → config-khGNZDHI.d.cts} +8 -0
- package/dist/{config-eTstZgSV.d.ts → config-khGNZDHI.d.ts} +8 -0
- package/dist/index.cjs +68 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/nexor.iife.js +8 -8
- package/dist/nexor.iife.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-ZQT7QEXV.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { initChat } from './chunk-
|
|
1
|
+
import { initChat } from './chunk-NBE72ISL.js';
|
|
2
2
|
|
|
3
3
|
// src/errors.ts
|
|
4
4
|
var NexorError = class extends Error {
|
|
@@ -91,8 +91,9 @@ async function request(cfg, req) {
|
|
|
91
91
|
body = JSON.stringify(req.body);
|
|
92
92
|
}
|
|
93
93
|
const timeoutMs = req.options?.timeoutMs ?? cfg.timeoutMs;
|
|
94
|
+
const maxRetries = req.options?.maxRetries ?? cfg.maxRetries;
|
|
94
95
|
let lastErr;
|
|
95
|
-
for (let attempt = 0; attempt <=
|
|
96
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
96
97
|
const controller = new AbortController();
|
|
97
98
|
const externalSignal = req.options?.signal;
|
|
98
99
|
const onAbort = () => controller.abort();
|
|
@@ -129,7 +130,7 @@ async function request(cfg, req) {
|
|
|
129
130
|
const errBody = await safeJson(res);
|
|
130
131
|
const message = pickMessage(errBody) ?? `HTTP ${res.status}`;
|
|
131
132
|
const err = makeError(res.status, message, errBody, requestId);
|
|
132
|
-
if (shouldRetry(res.status) && attempt <
|
|
133
|
+
if (shouldRetry(res.status) && attempt < maxRetries) {
|
|
133
134
|
await sleep(backoffMs(attempt, res));
|
|
134
135
|
lastErr = err;
|
|
135
136
|
continue;
|
|
@@ -142,7 +143,7 @@ async function request(cfg, req) {
|
|
|
142
143
|
const isAbort = err instanceof Error && (err.name === "AbortError" || /abort/i.test(err.message));
|
|
143
144
|
if (isAbort && externalSignal?.aborted) throw err;
|
|
144
145
|
lastErr = err;
|
|
145
|
-
if (attempt <
|
|
146
|
+
if (attempt < maxRetries) {
|
|
146
147
|
await sleep(backoffMs(attempt));
|
|
147
148
|
continue;
|
|
148
149
|
}
|
|
@@ -235,7 +236,7 @@ var NexorClient = class {
|
|
|
235
236
|
return request(this.cfg, {
|
|
236
237
|
method: "POST",
|
|
237
238
|
path: `${PUBLIC_PREFIX}/leads`,
|
|
238
|
-
body: input,
|
|
239
|
+
body: { ...input, skip_first_message: true },
|
|
239
240
|
options
|
|
240
241
|
});
|
|
241
242
|
}
|
|
@@ -244,7 +245,7 @@ var NexorClient = class {
|
|
|
244
245
|
return request(this.cfg, {
|
|
245
246
|
method: "POST",
|
|
246
247
|
path: `${PUBLIC_PREFIX}/leads`,
|
|
247
|
-
body: inputs,
|
|
248
|
+
body: inputs.map((i) => ({ ...i, skip_first_message: true })),
|
|
248
249
|
options
|
|
249
250
|
});
|
|
250
251
|
}
|
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 let lastErr: unknown;\n\n for (let attempt = 0; attempt <= cfg.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 < cfg.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 < cfg.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,\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,\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 * 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 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 }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/chat`,\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 { ChatInitOptions, ChatHandle } 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 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 * 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 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 }> {\n return request(this.cfg, {\n method: \"POST\",\n path: `${PUBLIC_PREFIX}/chat`,\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 { ChatInitOptions, ChatHandle } 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"]}
|
package/dist/nexor.iife.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Nexor=(function(exports){'use strict';var
|
|
1
|
+
var Nexor=(function(exports){'use strict';var O=class extends Error{constructor(t){super(t),this.name="NexorError";}},C=class extends O{constructor(t){var n;super(t.message),this.name="NexorAPIError",this.status=t.status,this.code=(n=t.code)!=null?n:Ie(t.status),this.body=t.body,this.requestId=t.requestId;}},H=class extends C{constructor(t){super({status:401,code:"unauthorized",...t}),this.name="NexorAuthError";}},A=class extends C{constructor(t){super({status:400,code:"validation_error",...t}),this.name="NexorValidationError";}},N=class extends O{constructor(t,n){super(t),this.name="NexorNetworkError",this.cause=n;}};function Ie(e){return e===400?"validation_error":e===401?"unauthorized":e===403?"forbidden":e===404?"not_found":e===409?"conflict":e===422?"unprocessable_entity":e===429?"rate_limited":e>=500?"server_error":"http_error"}var Ee="https://api.getnexor.ai",Re=3e4,ke=2,Me="0.1.0";function de(e){var r,i,l,u;if(!e||typeof e.apiKey!="string"||e.apiKey.trim()==="")throw new Error("Nexor SDK: `apiKey` is required. Get one in the dashboard at https://app.getnexor.ai");let t=(r=e.fetch)!=null?r:typeof globalThis!="undefined"&&typeof globalThis.fetch=="function"?globalThis.fetch.bind(globalThis):void 0;if(!t)throw new Error("Nexor SDK: no global fetch found. Pass a `fetch` implementation via init() or upgrade to Node 18+.");let n=`nexor-sdk-js/${Me}${e.userAgentSuffix?` ${e.userAgentSuffix}`:""}`;return {apiKey:e.apiKey.trim(),baseUrl:He((i=e.baseUrl)!=null?i:Ee),timeoutMs:(l=e.timeoutMs)!=null?l:Re,maxRetries:(u=e.maxRetries)!=null?u:ke,fetchImpl:t,userAgent:n}}async function g(e,t){var a,d,p,k,v,L,T,I,M;let n=Ae(e.baseUrl,t.path,t.query),r={"X-API-Key":e.apiKey,Accept:"application/json","User-Agent":e.userAgent};(a=t.options)!=null&&a.idempotencyKey&&(r["Idempotency-Key"]=t.options.idempotencyKey);let i;t.body!==void 0&&(r["Content-Type"]="application/json",i=JSON.stringify(t.body));let l=(p=(d=t.options)==null?void 0:d.timeoutMs)!=null?p:e.timeoutMs,u=(v=(k=t.options)==null?void 0:k.maxRetries)!=null?v:e.maxRetries,s;for(let _=0;_<=u;_++){let w=new AbortController,h=(L=t.options)==null?void 0:L.signal,E=()=>w.abort();h&&(h.aborted?w.abort():h.addEventListener("abort",E));let $=setTimeout(()=>w.abort(),l);try{let c=await e.fetchImpl(n,{method:t.method,headers:r,body:i,signal:w.signal});clearTimeout($),h==null||h.removeEventListener("abort",E);let R=(T=c.headers.get("x-request-id"))!=null?T:void 0;if(c.ok){if(c.status===204)return;let S=await c.text();if(!S)return;try{return JSON.parse(S)}catch(Z){throw new C({status:c.status,message:"Failed to parse JSON response",body:S,requestId:R})}}let G=await Se(c),W=(I=Pe(G))!=null?I:`HTTP ${c.status}`,D=Ne(c.status,W,G,R);if(Oe(c.status)&&_<u){await ae(se(_,c)),s=D;continue}throw D}catch(c){if(clearTimeout($),h==null||h.removeEventListener("abort",E),c instanceof C)throw c;let R=c instanceof Error&&(c.name==="AbortError"||/abort/i.test(c.message));if(R&&(h!=null&&h.aborted))throw c;if(s=c,_<u){await ae(se(_));continue}throw new N(R?`Request timed out after ${l}ms`:`Network error: ${(M=c==null?void 0:c.message)!=null?M:String(c)}`,c)}}throw s!=null?s:new N("Request failed")}function Ne(e,t,n,r){return e===401||e===403?new H({message:t,body:n,requestId:r}):e===400||e===422?new A({message:t,body:n,requestId:r}):new C({status:e,message:t,body:n,requestId:r})}function Pe(e){if(!e||typeof e!="object")return;let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}async function Se(e){try{let t=await e.text();if(!t)return null;try{return JSON.parse(t)}catch(n){return t}}catch(t){return null}}function Oe(e){return e===429||e>=500&&e<=599}function se(e,t){if(t){let r=t.headers.get("retry-after");if(r){let i=Number(r);if(!Number.isNaN(i)&&i>0)return Math.min(i*1e3,1e4)}}return 300*2**e+Math.floor(Math.random()*200)}function ae(e){return new Promise(t=>setTimeout(t,e))}function He(e){return e.endsWith("/")?e.slice(0,-1):e}function Ae(e,t,n){let r=t.startsWith("/")?t:`/${t}`,i=Ue(n);return `${e}${r}${i?`?${i}`:""}`}function Ue(e){if(!e)return "";let t=[];for(let[n,r]of Object.entries(e))if(r!=null)if(Array.isArray(r)){if(r.length===0)continue;t.push(`${encodeURIComponent(n)}=${encodeURIComponent(r.join(","))}`);}else t.push(`${encodeURIComponent(n)}=${encodeURIComponent(String(r))}`);return t.join("&")}var b="/api/public",P=class{constructor(t){this.cfg=de(t);}createLead(t,n){return g(this.cfg,{method:"POST",path:`${b}/leads`,body:{...t,skip_first_message:true},options:n})}createLeadsBulk(t,n){return g(this.cfg,{method:"POST",path:`${b}/leads`,body:t.map(r=>({...r,skip_first_message:true})),options:n})}updateLead(t,n,r){return g(this.cfg,{method:"PUT",path:`${b}/leads/${encodeURIComponent(t)}`,body:n,options:r})}getLead(t,n){return g(this.cfg,{method:"GET",path:`${b}/leads/${encodeURIComponent(t)}`,options:n})}getLeadHistory(t,n={},r){let i=Array.isArray(n.channel)?n.channel:n.channel?[n.channel]:void 0;return g(this.cfg,{method:"GET",path:`${b}/leads/${encodeURIComponent(t)}/history`,query:{channel:i,limit:n.limit,offset:n.offset},options:r})}isLeadPaused(t,n={},r){return g(this.cfg,{method:"GET",path:`${b}/leads/${encodeURIComponent(t)}/is_paused`,query:{workflow_id:n.workflow_id},options:r})}stopAutomation(t,n,r){return g(this.cfg,{method:"POST",path:`${b}/leads/${encodeURIComponent(t)}/automation/stop`,body:n,options:r})}resumeAutomation(t,n,r){return g(this.cfg,{method:"POST",path:`${b}/leads/${encodeURIComponent(t)}/automation/resume`,body:n,options:r})}syncLeadTags(t,n){return g(this.cfg,{method:"POST",path:`${b}/leads/tags`,body:t,options:n})}listLeadMeetings(t,n={},r){let i=Array.isArray(n.status)?n.status.join(","):n.status;return g(this.cfg,{method:"GET",path:`${b}/leads/${encodeURIComponent(t)}/meetings`,query:{status:i},options:r})}listWorkflows(t){return g(this.cfg,{method:"GET",path:`${b}/workflows`,options:t})}listCampaigns(t){return g(this.cfg,{method:"GET",path:`${b}/campaigns`,options:t})}listTemplates(t={},n){return g(this.cfg,{method:"GET",path:`${b}/templates`,query:{status:t.status,category:t.category},options:n})}sendMessage(t,n){return g(this.cfg,{method:"POST",path:`${b}/messages`,body:t,options:n})}createMeeting(t,n){return g(this.cfg,{method:"POST",path:`${b}/meetings`,body:t,options:n})}createMeetingNotes(t,n){return g(this.cfg,{method:"POST",path:`${b}/meeting-notes`,body:t,options:n})}chat(t,n){return g(this.cfg,{method:"POST",path:`${b}/chat`,body:t,options:n})}};function le(e){var t,n,r,i,l,u,s,a,d,p,k,v,L,T,I,M,_,w,h,E;return {workflowId:e.workflowId,title:(t=e.title)!=null?t:"Chat with us",subtitle:(n=e.subtitle)!=null?n:"We typically reply in a few minutes",greeting:(r=e.greeting)!=null?r:"Hi there! \u{1F44B} How can we help?",errorText:(i=e.errorText)!=null?i:"Sorry, something went wrong. Please try again in a moment.",locale:(l=e.locale)!=null?l:typeof navigator!="undefined"?navigator.language:void 0,accentColor:(u=e.accentColor)!=null?u:"#111827",accentTextColor:(s=e.accentTextColor)!=null?s:"#ffffff",showBranding:(a=e.showBranding)!=null?a:true,position:(d=e.position)!=null?d:"bottom-right",openOnLoad:(p=e.openOnLoad)!=null?p:false,debounceMs:(k=e.debounceMs)!=null?k:700,requestTimeoutMs:(v=e.requestTimeoutMs)!=null?v:6e4,container:e.container,systemPrompt:e.systemPrompt,clientPrompt:e.clientPrompt,lead:e.lead,capture:{fields:(T=(L=e.capture)==null?void 0:L.fields)!=null?T:["first_name","email"],mode:(M=(I=e.capture)==null?void 0:I.mode)!=null?M:"before",label:(w=(_=e.capture)==null?void 0:_.label)!=null?w:"Tell us a bit about you to get started:",submitLabel:(E=(h=e.capture)==null?void 0:h.submitLabel)!=null?E:"Start chat"},metadata:e.metadata,onOpen:e.onOpen,onClose:e.onClose,onMessage:e.onMessage,onLeadCaptured:e.onLeadCaptured,onError:e.onError}}function j(e){if(e.capture.mode==="skip")return false;if(e.lead){let t=e.lead;return e.capture.fields.some(n=>!t[n])}return true}var ce="nexor.chat.session_id";function ue(){let e=Date.now();try{let n=me();if(n&&e-n.ts<2592e6)return V(n.id,e),n.id}catch(n){}let t=`sess_${$e(16)}`;try{V(t,e);}catch(n){}return t}function pe(){try{let e=me();e&&V(e.id,Date.now());}catch(e){}}function me(){let e=window.localStorage.getItem(ce);if(!e)return null;try{let t=JSON.parse(e);if(t&&typeof t.id=="string"&&typeof t.ts=="number")return t}catch(t){}return e.startsWith("sess_")?{id:e,ts:Date.now()}:null}function V(e,t){window.localStorage.setItem(ce,JSON.stringify({id:e,ts:t}));}function $e(e){let t=new Uint8Array(e);if(typeof crypto!="undefined"&&crypto.getRandomValues)crypto.getRandomValues(t);else for(let n=0;n<e;n++)t[n]=Math.floor(Math.random()*256);return Array.from(t,n=>n.toString(16).padStart(2,"0")).join("")}var fe=(e,t)=>`
|
|
2
2
|
.nexor-chat,
|
|
3
3
|
.nexor-chat * {
|
|
4
4
|
box-sizing: border-box;
|
|
@@ -400,27 +400,27 @@ var Nexor=(function(exports){'use strict';var P=class extends Error{constructor(
|
|
|
400
400
|
}
|
|
401
401
|
.nexor-chat__status-dot { animation: none; }
|
|
402
402
|
}
|
|
403
|
-
`;var
|
|
403
|
+
`;var he="data-nexor-chat-styles";function xe(e,t){if(document.querySelector(`style[${he}]`))return;let n=document.createElement("style");n.setAttribute(he,"1"),n.textContent=fe(e,t),document.head.appendChild(n);}function be(){let e=document.createElement("button");e.type="button",e.className="nexor-chat__launcher",e.setAttribute("aria-label","Open chat"),e.innerHTML=`
|
|
404
404
|
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
405
405
|
<path d="M4 5.5C4 4.67 4.67 4 5.5 4h13c.83 0 1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5H9l-4 4V5.5Z"
|
|
406
406
|
stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/>
|
|
407
407
|
</svg>
|
|
408
|
-
`;let t=document.createElement("span");return t.className="nexor-chat__unread",t.style.display="none",e.appendChild(t),{el:e,badge:t}}function
|
|
409
|
-
<span class="nexor-chat__status-dot" aria-hidden="true"></span>${
|
|
408
|
+
`;let t=document.createElement("span");return t.className="nexor-chat__unread",t.style.display="none",e.appendChild(t),{el:e,badge:t}}function ye(e){let t=document.createElement("div");t.className="nexor-chat__panel",t.setAttribute("role","dialog"),t.setAttribute("aria-label",e.title);let{header:n,closeBtn:r}=De(e),{body:i,captureForm:l,captureInputs:u}=qe(e),{form:s,input:a,send:d}=Fe(),p=e.showBranding?ze():null;return t.appendChild(n),t.appendChild(i),t.appendChild(s),p&&t.appendChild(p),{el:t,closeBtn:r,body:i,form:s,input:a,send:d,captureForm:l,captureInputs:u}}function De(e){let t=document.createElement("div");t.className="nexor-chat__header";let n=e.subtitle?`<p class="nexor-chat__subtitle">
|
|
409
|
+
<span class="nexor-chat__status-dot" aria-hidden="true"></span>${ge(e.subtitle)}
|
|
410
410
|
</p>`:"";t.innerHTML=`
|
|
411
411
|
<div>
|
|
412
|
-
<p class="nexor-chat__title">${
|
|
412
|
+
<p class="nexor-chat__title">${ge(e.title)}</p>
|
|
413
413
|
${n}
|
|
414
414
|
</div>
|
|
415
415
|
`;let r=document.createElement("button");return r.type="button",r.className="nexor-chat__close",r.setAttribute("aria-label","Close chat"),r.innerHTML=`
|
|
416
416
|
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
417
417
|
<path d="M6 6l12 12M6 18L18 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
418
418
|
</svg>
|
|
419
|
-
`,t.appendChild(r),{header:t,closeBtn:r}}function
|
|
419
|
+
`,t.appendChild(r),{header:t,closeBtn:r}}function qe(e){let t=document.createElement("div");t.className="nexor-chat__body";let n={},r=null;return j(e)&&(r=Be(e,n),t.appendChild(r)),{body:t,captureForm:r,captureInputs:n}}function Be(e,t){var u,s,a,d;let n=document.createElement("form");n.className="nexor-chat__capture",n.noValidate=true;let r=document.createElement("p");r.className="nexor-chat__capture-label",r.textContent=e.capture.label,n.appendChild(r);let i=e.capture.fields;if(i.includes("first_name")||i.includes("last_name")){let p=document.createElement("div");p.className="nexor-chat__capture-row",i.includes("first_name")&&(t.first_name=Y("first_name","First name","text",(u=e.lead)==null?void 0:u.first_name),p.appendChild(t.first_name)),i.includes("last_name")&&(t.last_name=Y("last_name","Last name","text",(s=e.lead)==null?void 0:s.last_name),p.appendChild(t.last_name)),p.childElementCount>0&&n.appendChild(p);}i.includes("email")&&(t.email=Y("email","Email","email",(a=e.lead)==null?void 0:a.email),n.appendChild(t.email)),i.includes("phone")&&(t.phone=Y("phone","Phone","tel",(d=e.lead)==null?void 0:d.phone),n.appendChild(t.phone));let l=document.createElement("button");return l.type="submit",l.className="nexor-chat__capture-submit",l.textContent=e.capture.submitLabel,n.appendChild(l),n}function Fe(){let e=document.createElement("form");e.className="nexor-chat__composer";let t=document.createElement("input");t.type="text",t.className="nexor-chat__input",t.placeholder="Type a message\u2026",t.autocomplete="off";let n=document.createElement("button");return n.type="submit",n.className="nexor-chat__send",n.setAttribute("aria-label","Send message"),n.innerHTML=`
|
|
420
420
|
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
421
421
|
<path d="M3.4 11.2 20.5 4.3c.7-.3 1.4.4 1.1 1.1l-6.9 17.1c-.3.8-1.4.8-1.8 0L10 14l-7.5-3c-.8-.3-.8-1.5 0-1.8Z"
|
|
422
422
|
stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" fill="currentColor"/>
|
|
423
423
|
</svg>
|
|
424
|
-
`,e.appendChild(t),e.appendChild(n),{form:e,input:t,send:n}}function
|
|
425
|
-
`);
|
|
424
|
+
`,e.appendChild(t),e.appendChild(n),{form:e,input:t,send:n}}function ze(){let e=document.createElement("div");return e.className="nexor-chat__footer",e.innerHTML='Powered by <a href="https://www.getnexor.ai" target="_blank" rel="noopener noreferrer">Nexor</a>',e}function _e(e,t,n,r){let i=document.createElement("div");i.className=`nexor-chat__msg nexor-chat__msg--${e}`;let l=document.createElement("span");if(l.className="nexor-chat__msg-text",l.textContent=t,i.appendChild(l),e!=="system"&&n){let u=document.createElement("time");u.className="nexor-chat__msg-time",u.dataset.ts=String(n),u.textContent=X(n,r),i.appendChild(u);}return i}function X(e,t,n=Date.now()){try{let r=Math.max(0,n-e),i=Math.round(r/6e4),l=Math.round(r/36e5),u=Math.round(r/864e5),s=new Intl.RelativeTimeFormat(t,{numeric:"auto"});return r<45e3?s.format(0,"second"):i<60?s.format(-i,"minute"):l<24?s.format(-l,"hour"):u<7?s.format(-u,"day"):new Date(e).toLocaleDateString(t,{day:"numeric",month:"short"})}catch(r){try{return new Date(e).toLocaleTimeString(t,{hour:"2-digit",minute:"2-digit"})}catch(i){return ""}}}function we(){let e=document.createElement("div");return e.className="nexor-chat__typing",e.innerHTML="<span></span><span></span><span></span>",e}function Y(e,t,n,r){let i=document.createElement("input");return i.name=e,i.type=n,i.placeholder=t,r&&(i.value=r),i}function ge(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Ce(e,t){var ne,re,oe;if(Ke(),!t||!t.workflowId)throw new Error("Nexor SDK: initChat() requires `workflowId`.");let n=le(t);xe(n.accentColor,n.accentTextColor);let r=ue(),i=`nexor.chat.history.${r}`,l=je(n),u=be(),s=ye(n);l.appendChild(u.el),l.appendChild(s.el),((ne=n.container)!=null?ne:document.body).appendChild(l);let a={isOpen:false,unread:0,leadId:void 0,captured:!j(n),pendingLead:{...(re=n.lead)!=null?re:{}},history:[]},d={pending:[],timer:0,inFlight:false,typing:null},p={pending:false,timer:0},k=2e3;u.el.addEventListener("click",I),s.closeBtn.addEventListener("click",T),s.form.addEventListener("submit",_),(oe=s.captureForm)==null||oe.addEventListener("submit",M),te();let v=Z();if(v.length){a.history=v;for(let o of v)K(o.role==="user"?"user":"bot",o.text,o.ts);J();}n.openOnLoad&&L();function L(){var o;a.isOpen||(a.isOpen=true,l.setAttribute("data-open","true"),Te(),a.history.length===0&&n.greeting&&a.captured&&h(),s.input.focus(),(o=n.onOpen)==null||o.call(n));}function T(){var o;a.isOpen&&(a.isOpen=false,l.setAttribute("data-open","false"),(o=n.onClose)==null||o.call(n));}function I(){a.isOpen?T():L();}function M(o){var q,B;o.preventDefault();let m=Ye(s),y=n.capture.fields;for(let F of y)if(!m[F]){(q=s.captureInputs[F])==null||q.focus();return}a.pendingLead={...a.pendingLead,...m},a.captured=true,(B=s.captureForm)==null||B.remove(),te(),s.input.focus(),n.greeting&&a.history.length===0&&h();}function _(o){o.preventDefault();let m=s.input.value.trim();m&&(s.input.value="",w(m));}function w(o){var m;if(!a.captured){(m=s.captureInputs.first_name)==null||m.focus();return}E(),W(o),d.pending.push(o),R();}function h(){p.pending||(p.pending=true,$(),p.timer=window.setTimeout(()=>{p.pending=false,p.timer=0,c(),D(n.greeting);},k));}function E(){p.pending&&(p.timer&&window.clearTimeout(p.timer),p.timer=0,p.pending=false,c());}function $(){if(d.typing){s.body.appendChild(d.typing),J();return}d.typing=ee(we());}function c(){var o;(o=d.typing)==null||o.remove(),d.typing=null;}function R(){$(),d.timer&&window.clearTimeout(d.timer),d.timer=window.setTimeout(()=>{G();},n.debounceMs);}async function G(){var y,q,B,F;if(d.inFlight||d.pending.length===0)return;let m=d.pending.splice(0,d.pending.length).join(`
|
|
425
|
+
`);d.inFlight=true;try{let z=await e.chat({workflow_id:n.workflowId,session_id:r,message:m,system_prompt:n.systemPrompt,client_prompt:n.clientPrompt,lead:Object.keys(a.pendingLead).length?a.pendingLead:void 0,metadata:n.metadata},{timeoutMs:n.requestTimeoutMs,maxRetries:0});z.lead_id&&!a.leadId&&(a.leadId=z.lead_id,(y=n.onLeadCaptured)==null||y.call(n,a.leadId));let ie=((q=z.reply)!=null?q:"").trim();c(),ie?D(ie):(Q(n.errorText),(B=n.onError)==null||B.call(n,new Error("Nexor SDK: empty reply from server")));}catch(z){c(),Q(n.errorText),(F=n.onError)==null||F.call(n,z);}finally{c(),d.inFlight=false,s.input.focus(),d.pending.length&&R();}}function W(o){var y;let m=Date.now();K("user",o,m),a.history.push({role:"user",text:o,ts:m}),S(),(y=n.onMessage)==null||y.call(n,{role:"user",text:o});}function D(o){var y;let m=Date.now();K("bot",o,m),a.history.push({role:"bot",text:o,ts:m}),S(),a.isOpen||Le(),(y=n.onMessage)==null||y.call(n,{role:"bot",text:o});}function S(){try{window.localStorage.setItem(i,JSON.stringify({ts:Date.now(),history:a.history})),pe();}catch(o){}}function Z(){try{let o=window.localStorage.getItem(i);if(!o)return [];let m=JSON.parse(o);return !m||!Array.isArray(m.history)?[]:Date.now()-(m.ts||0)>2592e6?(window.localStorage.removeItem(i),[]):m.history}catch(o){return []}}function Q(o){K("system",o);}function K(o,m,y){return ee(_e(o,m,y,n.locale))}let ve=window.setInterval(()=>{s.body.querySelectorAll(".nexor-chat__msg-time[data-ts]").forEach(o=>{let m=Number(o.dataset.ts);m&&(o.textContent=X(m,n.locale));});},6e4);function ee(o){return s.body.appendChild(o),d.typing&&d.typing!==o&&s.body.appendChild(d.typing),J(),o}function J(){s.body.scrollTop=s.body.scrollHeight;}function Le(){a.unread++,u.badge.textContent=String(a.unread),u.badge.style.display="flex";}function Te(){a.unread=0,u.badge.style.display="none";}function te(){let o=!a.captured;s.input.disabled=o,s.send.disabled=o,s.input.placeholder=o?"Complete the form above to start\u2026":"Type a message\u2026";}return {open:L,close:T,toggle:I,send:o=>(w(o),Promise.resolve()),destroy:()=>{d.timer&&window.clearTimeout(d.timer),p.timer&&window.clearTimeout(p.timer),window.clearInterval(ve),l.remove();},getSessionId:()=>r}}function Ke(){if(typeof window=="undefined"||typeof document=="undefined")throw new Error("Nexor SDK: initChat() requires a browser environment.")}function je(e){let t=document.createElement("div");return t.className="nexor-chat",t.setAttribute("data-position",e.position),t.setAttribute("data-open","false"),t}function Ye(e){let t={},n=e.captureInputs;return n.first_name&&(t.first_name=n.first_name.value.trim()),n.last_name&&(t.last_name=n.last_name.value.trim()),n.email&&(t.email=n.email.value.trim()),n.phone&&(t.phone=n.phone.value.trim()),t}function We(e){return new P(e)}var U=null;function x(){if(!U)throw new Error("Nexor SDK: call `nexor.init({ apiKey })` before using the API.");return U}function Je(e){return U=new P(e),U}function Ve(){return U!==null}function Xe(){U=null;}var f={init:Je,isInitialized:Ve,reset:Xe,createLead:((...e)=>x().createLead(...e)),createLeadsBulk:((...e)=>x().createLeadsBulk(...e)),updateLead:((...e)=>x().updateLead(...e)),getLead:((...e)=>x().getLead(...e)),getLeadHistory:((...e)=>x().getLeadHistory(...e)),isLeadPaused:((...e)=>x().isLeadPaused(...e)),stopAutomation:((...e)=>x().stopAutomation(...e)),resumeAutomation:((...e)=>x().resumeAutomation(...e)),syncLeadTags:((...e)=>x().syncLeadTags(...e)),listLeadMeetings:((...e)=>x().listLeadMeetings(...e)),listWorkflows:((...e)=>x().listWorkflows(...e)),listCampaigns:((...e)=>x().listCampaigns(...e)),listTemplates:((...e)=>x().listTemplates(...e)),sendMessage:((...e)=>x().sendMessage(...e)),createMeeting:((...e)=>x().createMeeting(...e)),createMeetingNotes:((...e)=>x().createMeetingNotes(...e)),initChat:e=>Ce(x(),e)};var _t=f.init,wt=f.isInitialized,Ct=f.reset,vt=f.initChat,Lt=f.createLead,Tt=f.createLeadsBulk,It=f.updateLead,Et=f.getLead,Rt=f.getLeadHistory,kt=f.isLeadPaused,Mt=f.stopAutomation,Nt=f.resumeAutomation,Pt=f.syncLeadTags,St=f.listLeadMeetings,Ot=f.listWorkflows,Ht=f.listCampaigns,At=f.listTemplates,Ut=f.sendMessage,$t=f.createMeeting,Dt=f.createMeetingNotes;exports.NexorAPIError=C;exports.NexorAuthError=H;exports.NexorClient=P;exports.NexorError=O;exports.NexorNetworkError=N;exports.NexorValidationError=A;exports.createClient=We;exports.createLead=Lt;exports.createLeadsBulk=Tt;exports.createMeeting=$t;exports.createMeetingNotes=Dt;exports.getLead=Et;exports.getLeadHistory=Rt;exports.init=_t;exports.initChat=vt;exports.isInitialized=wt;exports.isLeadPaused=kt;exports.listCampaigns=Ht;exports.listLeadMeetings=St;exports.listTemplates=At;exports.listWorkflows=Ot;exports.reset=Ct;exports.resumeAutomation=Nt;exports.sendMessage=Ut;exports.stopAutomation=Mt;exports.syncLeadTags=Pt;exports.updateLead=It;return exports;})({});//# sourceMappingURL=nexor.iife.js.map
|
|
426
426
|
//# sourceMappingURL=nexor.iife.js.map
|