@getnexorai/sdk 0.1.1 → 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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { initChat } from './chunk-YDWD2Q5S.js';
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 <= cfg.maxRetries; 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 < cfg.maxRetries) {
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 < cfg.maxRetries) {
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"]}
@@ -1,4 +1,4 @@
1
- var Nexor=(function(exports){'use strict';var P=class extends Error{constructor(t){super(t),this.name="NexorError";}},w=class extends P{constructor(t){var n;super(t.message),this.name="NexorAPIError",this.status=t.status,this.code=(n=t.code)!=null?n:we(t.status),this.body=t.body,this.requestId=t.requestId;}},S=class extends w{constructor(t){super({status:401,code:"unauthorized",...t}),this.name="NexorAuthError";}},O=class extends w{constructor(t){super({status:400,code:"validation_error",...t}),this.name="NexorValidationError";}},M=class extends P{constructor(t,n){super(t),this.name="NexorNetworkError",this.cause=n;}};function we(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 Ce="https://api.getnexor.ai",ve=3e4,Le=2,Te="0.1.0";function oe(e){var r,o,c,l;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/${Te}${e.userAgentSuffix?` ${e.userAgentSuffix}`:""}`;return {apiKey:e.apiKey.trim(),baseUrl:Me((o=e.baseUrl)!=null?o:Ce),timeoutMs:(c=e.timeoutMs)!=null?c:ve,maxRetries:(l=e.maxRetries)!=null?l:Le,fetchImpl:t,userAgent:n}}async function g(e,t){var i,a,y,f,C,I,R;let n=Ne(e.baseUrl,t.path,t.query),r={"X-API-Key":e.apiKey,Accept:"application/json","User-Agent":e.userAgent};(i=t.options)!=null&&i.idempotencyKey&&(r["Idempotency-Key"]=t.options.idempotencyKey);let o;t.body!==void 0&&(r["Content-Type"]="application/json",o=JSON.stringify(t.body));let c=(y=(a=t.options)==null?void 0:a.timeoutMs)!=null?y:e.timeoutMs,l;for(let d=0;d<=e.maxRetries;d++){let v=new AbortController,h=(f=t.options)==null?void 0:f.signal,L=()=>v.abort();h&&(h.aborted?v.abort():h.addEventListener("abort",L));let k=setTimeout(()=>v.abort(),c);try{let u=await e.fetchImpl(n,{method:t.method,headers:r,body:o,signal:v.signal});clearTimeout(k),h==null||h.removeEventListener("abort",L);let T=(C=u.headers.get("x-request-id"))!=null?C:void 0;if(u.ok){if(u.status===204)return;let E=await u.text();if(!E)return;try{return JSON.parse(E)}catch(Y){throw new w({status:u.status,message:"Failed to parse JSON response",body:E,requestId:T})}}let A=await Re(u),K=(I=Ee(A))!=null?I:`HTTP ${u.status}`,U=Ie(u.status,K,A,T);if(ke(u.status)&&d<e.maxRetries){await re(ne(d,u)),l=U;continue}throw U}catch(u){if(clearTimeout(k),h==null||h.removeEventListener("abort",L),u instanceof w)throw u;let T=u instanceof Error&&(u.name==="AbortError"||/abort/i.test(u.message));if(T&&(h!=null&&h.aborted))throw u;if(l=u,d<e.maxRetries){await re(ne(d));continue}throw new M(T?`Request timed out after ${c}ms`:`Network error: ${(R=u==null?void 0:u.message)!=null?R:String(u)}`,u)}}throw l!=null?l:new M("Request failed")}function Ie(e,t,n,r){return e===401||e===403?new S({message:t,body:n,requestId:r}):e===400||e===422?new O({message:t,body:n,requestId:r}):new w({status:e,message:t,body:n,requestId:r})}function Ee(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 Re(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 ke(e){return e===429||e>=500&&e<=599}function ne(e,t){if(t){let r=t.headers.get("retry-after");if(r){let o=Number(r);if(!Number.isNaN(o)&&o>0)return Math.min(o*1e3,1e4)}}return 300*2**e+Math.floor(Math.random()*200)}function re(e){return new Promise(t=>setTimeout(t,e))}function Me(e){return e.endsWith("/")?e.slice(0,-1):e}function Ne(e,t,n){let r=t.startsWith("/")?t:`/${t}`,o=Pe(n);return `${e}${r}${o?`?${o}`:""}`}function Pe(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",N=class{constructor(t){this.cfg=oe(t);}createLead(t,n){return g(this.cfg,{method:"POST",path:`${b}/leads`,body:t,options:n})}createLeadsBulk(t,n){return g(this.cfg,{method:"POST",path:`${b}/leads`,body:t,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 o=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:o,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 o=Array.isArray(n.status)?n.status.join(","):n.status;return g(this.cfg,{method:"GET",path:`${b}/leads/${encodeURIComponent(t)}/meetings`,query:{status:o},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 se(e){var t,n,r,o,c,l,i,a,y,f,C,I,R,d,v,h,L,k,u;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:(o=e.errorText)!=null?o:"Sorry, something went wrong. Please try again in a moment.",locale:(c=e.locale)!=null?c:typeof navigator!="undefined"?navigator.language:void 0,accentColor:(l=e.accentColor)!=null?l:"#111827",accentTextColor:(i=e.accentTextColor)!=null?i:"#ffffff",showBranding:(a=e.showBranding)!=null?a:true,position:(y=e.position)!=null?y:"bottom-right",openOnLoad:(f=e.openOnLoad)!=null?f:false,debounceMs:(C=e.debounceMs)!=null?C:700,container:e.container,systemPrompt:e.systemPrompt,clientPrompt:e.clientPrompt,lead:e.lead,capture:{fields:(R=(I=e.capture)==null?void 0:I.fields)!=null?R:["first_name","email"],mode:(v=(d=e.capture)==null?void 0:d.mode)!=null?v:"before",label:(L=(h=e.capture)==null?void 0:h.label)!=null?L:"Tell us a bit about you to get started:",submitLabel:(u=(k=e.capture)==null?void 0:k.submitLabel)!=null?u:"Start chat"},metadata:e.metadata,onOpen:e.onOpen,onClose:e.onClose,onMessage:e.onMessage,onLeadCaptured:e.onLeadCaptured,onError:e.onError}}function F(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 ie="nexor.chat.session_id";function ae(){let e=Date.now();try{let n=le();if(n&&e-n.ts<2592e6)return j(n.id,e),n.id}catch(n){}let t=`sess_${Se(16)}`;try{j(t,e);}catch(n){}return t}function de(){try{let e=le();e&&j(e.id,Date.now());}catch(e){}}function le(){let e=window.localStorage.getItem(ie);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 j(e,t){window.localStorage.setItem(ie,JSON.stringify({id:e,ts:t}));}function Se(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 ce=(e,t)=>`
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 ue="data-nexor-chat-styles";function me(e,t){if(document.querySelector(`style[${ue}]`))return;let n=document.createElement("style");n.setAttribute(ue,"1"),n.textContent=ce(e,t),document.head.appendChild(n);}function fe(){let e=document.createElement("button");e.type="button",e.className="nexor-chat__launcher",e.setAttribute("aria-label","Open chat"),e.innerHTML=`
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 he(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}=Oe(e),{body:o,captureForm:c,captureInputs:l}=He(e),{form:i,input:a,send:y}=Ue(),f=e.showBranding?$e():null;return t.appendChild(n),t.appendChild(o),t.appendChild(i),f&&t.appendChild(f),{el:t,closeBtn:r,body:o,form:i,input:a,send:y,captureForm:c,captureInputs:l}}function Oe(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>${pe(e.subtitle)}
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">${pe(e.title)}</p>
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 He(e){let t=document.createElement("div");t.className="nexor-chat__body";let n={},r=null;return F(e)&&(r=Ae(e,n),t.appendChild(r)),{body:t,captureForm:r,captureInputs:n}}function Ae(e,t){var l,i,a,y;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 o=e.capture.fields;if(o.includes("first_name")||o.includes("last_name")){let f=document.createElement("div");f.className="nexor-chat__capture-row",o.includes("first_name")&&(t.first_name=z("first_name","First name","text",(l=e.lead)==null?void 0:l.first_name),f.appendChild(t.first_name)),o.includes("last_name")&&(t.last_name=z("last_name","Last name","text",(i=e.lead)==null?void 0:i.last_name),f.appendChild(t.last_name)),f.childElementCount>0&&n.appendChild(f);}o.includes("email")&&(t.email=z("email","Email","email",(a=e.lead)==null?void 0:a.email),n.appendChild(t.email)),o.includes("phone")&&(t.phone=z("phone","Phone","tel",(y=e.lead)==null?void 0:y.phone),n.appendChild(t.phone));let c=document.createElement("button");return c.type="submit",c.className="nexor-chat__capture-submit",c.textContent=e.capture.submitLabel,n.appendChild(c),n}function Ue(){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=`
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 $e(){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 ge(e,t,n,r){let o=document.createElement("div");o.className=`nexor-chat__msg nexor-chat__msg--${e}`;let c=document.createElement("span");if(c.className="nexor-chat__msg-text",c.textContent=t,o.appendChild(c),e!=="system"&&n){let l=document.createElement("time");l.className="nexor-chat__msg-time",l.dataset.ts=String(n),l.textContent=G(n,r),o.appendChild(l);}return o}function G(e,t,n=Date.now()){try{let r=Math.max(0,n-e),o=Math.round(r/6e4),c=Math.round(r/36e5),l=Math.round(r/864e5),i=new Intl.RelativeTimeFormat(t,{numeric:"auto"});return r<45e3?i.format(0,"second"):o<60?i.format(-o,"minute"):c<24?i.format(-c,"hour"):l<7?i.format(-l,"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(o){return ""}}}function xe(){let e=document.createElement("div");return e.className="nexor-chat__typing",e.innerHTML="<span></span><span></span><span></span>",e}function z(e,t,n,r){let o=document.createElement("input");return o.name=e,o.type=n,o.placeholder=t,r&&(o.value=r),o}function pe(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}var qe=220;function be(e,t){var X,Z,Q;if(Be(),!t||!t.workflowId)throw new Error("Nexor SDK: initChat() requires `workflowId`.");let n=se(t);me(n.accentColor,n.accentTextColor);let r=ae(),o=`nexor.chat.history.${r}`,c=Fe(n),l=fe(),i=he(n);c.appendChild(l.el),c.appendChild(i.el),((X=n.container)!=null?X:document.body).appendChild(c);let a={isOpen:false,unread:0,leadId:void 0,captured:!F(n),pendingLead:{...(Z=n.lead)!=null?Z:{}},history:[]};l.el.addEventListener("click",I),i.closeBtn.addEventListener("click",C),i.form.addEventListener("submit",v),(Q=i.captureForm)==null||Q.addEventListener("submit",R),V();let y=K();if(y.length){a.history=y;for(let s of y)E(s.role==="user"?"user":"bot",s.text,s.ts);J();}n.openOnLoad&&f();function f(){var s;a.isOpen||(a.isOpen=true,c.setAttribute("data-open","true"),_e(),a.history.length===0&&n.greeting&&a.captured&&T(n.greeting),i.input.focus(),(s=n.onOpen)==null||s.call(n));}function C(){var s;a.isOpen&&(a.isOpen=false,c.setAttribute("data-open","false"),(s=n.onClose)==null||s.call(n));}function I(){a.isOpen?C():f();}function R(s){var $,D;s.preventDefault();let p=ze(i),_=n.capture.fields;for(let q of _)if(!p[q]){($=i.captureInputs[q])==null||$.focus();return}a.pendingLead={...a.pendingLead,...p},a.captured=true,(D=i.captureForm)==null||D.remove(),V(),i.input.focus(),n.greeting&&a.history.length===0&&T(n.greeting);}let d={pending:[],timer:0,typingTimer:0,inFlight:false,typing:null};function v(s){s.preventDefault();let p=i.input.value.trim();p&&(i.input.value="",h(p));}function h(s){var p;if(!a.captured){(p=i.captureInputs.first_name)==null||p.focus();return}u(s),d.pending.push(s),L();}function L(){d.timer&&window.clearTimeout(d.timer),d.timer=window.setTimeout(()=>{k();},n.debounceMs);}async function k(){var _,$,D,q,ee;if(d.inFlight||d.pending.length===0)return;let p=d.pending.splice(0,d.pending.length).join(`
425
- `);d.inFlight=true,d.typingTimer=window.setTimeout(()=>{d.typing=W(xe());},qe);try{let B=await e.chat({workflow_id:n.workflowId,session_id:r,message:p,system_prompt:n.systemPrompt,client_prompt:n.clientPrompt,lead:Object.keys(a.pendingLead).length?a.pendingLead:void 0,metadata:n.metadata});B.lead_id&&!a.leadId&&(a.leadId=B.lead_id,(_=n.onLeadCaptured)==null||_.call(n,a.leadId));let te=(($=B.reply)!=null?$:"").trim();te?T(te):(U(n.errorText),(D=n.onError)==null||D.call(n,new Error("Nexor SDK: empty reply from server")));}catch(B){U(n.errorText),(q=n.onError)==null||q.call(n,B);}finally{window.clearTimeout(d.typingTimer),(ee=d.typing)==null||ee.remove(),d.typing=null,d.inFlight=false,i.input.focus(),d.pending.length&&L();}}function u(s){var _;let p=Date.now();E("user",s,p),a.history.push({role:"user",text:s,ts:p}),A(),(_=n.onMessage)==null||_.call(n,{role:"user",text:s});}function T(s){var _;let p=Date.now();E("bot",s,p),a.history.push({role:"bot",text:s,ts:p}),A(),a.isOpen||ye(),(_=n.onMessage)==null||_.call(n,{role:"bot",text:s});}function A(){try{window.localStorage.setItem(o,JSON.stringify({ts:Date.now(),history:a.history})),de();}catch(s){}}function K(){try{let s=window.localStorage.getItem(o);if(!s)return [];let p=JSON.parse(s);return !p||!Array.isArray(p.history)?[]:Date.now()-(p.ts||0)>2592e6?(window.localStorage.removeItem(o),[]):p.history}catch(s){return []}}function U(s){E("system",s);}function E(s,p,_){return W(ge(s,p,_,n.locale))}let Y=window.setInterval(()=>{i.body.querySelectorAll(".nexor-chat__msg-time[data-ts]").forEach(s=>{let p=Number(s.dataset.ts);p&&(s.textContent=G(p,n.locale));});},6e4);function W(s){return i.body.appendChild(s),d.typing&&d.typing!==s&&i.body.appendChild(d.typing),J(),s}function J(){i.body.scrollTop=i.body.scrollHeight;}function ye(){a.unread++,l.badge.textContent=String(a.unread),l.badge.style.display="flex";}function _e(){a.unread=0,l.badge.style.display="none";}function V(){let s=!a.captured;i.input.disabled=s,i.send.disabled=s,i.input.placeholder=s?"Complete the form above to start\u2026":"Type a message\u2026";}return {open:f,close:C,toggle:I,send:s=>(h(s),Promise.resolve()),destroy:()=>{d.timer&&window.clearTimeout(d.timer),d.typingTimer&&window.clearTimeout(d.typingTimer),window.clearInterval(Y),c.remove();},getSessionId:()=>r}}function Be(){if(typeof window=="undefined"||typeof document=="undefined")throw new Error("Nexor SDK: initChat() requires a browser environment.")}function Fe(e){let t=document.createElement("div");return t.className="nexor-chat",t.setAttribute("data-position",e.position),t.setAttribute("data-open","false"),t}function ze(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 Ke(e){return new N(e)}var H=null;function x(){if(!H)throw new Error("Nexor SDK: call `nexor.init({ apiKey })` before using the API.");return H}function je(e){return H=new N(e),H}function Ge(){return H!==null}function Ye(){H=null;}var m={init:je,isInitialized:Ge,reset:Ye,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=>be(x(),e)};var gt=m.init,xt=m.isInitialized,bt=m.reset,yt=m.initChat,_t=m.createLead,wt=m.createLeadsBulk,Ct=m.updateLead,vt=m.getLead,Lt=m.getLeadHistory,Tt=m.isLeadPaused,It=m.stopAutomation,Et=m.resumeAutomation,Rt=m.syncLeadTags,kt=m.listLeadMeetings,Mt=m.listWorkflows,Nt=m.listCampaigns,Pt=m.listTemplates,St=m.sendMessage,Ot=m.createMeeting,Ht=m.createMeetingNotes;exports.NexorAPIError=w;exports.NexorAuthError=S;exports.NexorClient=N;exports.NexorError=P;exports.NexorNetworkError=M;exports.NexorValidationError=O;exports.createClient=Ke;exports.createLead=_t;exports.createLeadsBulk=wt;exports.createMeeting=Ot;exports.createMeetingNotes=Ht;exports.getLead=vt;exports.getLeadHistory=Lt;exports.init=gt;exports.initChat=yt;exports.isInitialized=xt;exports.isLeadPaused=Tt;exports.listCampaigns=Nt;exports.listLeadMeetings=kt;exports.listTemplates=Pt;exports.listWorkflows=Mt;exports.reset=bt;exports.resumeAutomation=Et;exports.sendMessage=St;exports.stopAutomation=It;exports.syncLeadTags=Rt;exports.updateLead=Ct;return exports;})({});//# sourceMappingURL=nexor.iife.js.map
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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}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