@getnexorai/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +281 -0
- package/dist/chat.cjs +962 -0
- package/dist/chat.cjs.map +1 -0
- package/dist/chat.d.cts +29 -0
- package/dist/chat.d.ts +29 -0
- package/dist/chat.js +3 -0
- package/dist/chat.js.map +1 -0
- package/dist/chunk-ZQT7QEXV.js +960 -0
- package/dist/chunk-ZQT7QEXV.js.map +1 -0
- package/dist/config-eTstZgSV.d.cts +440 -0
- package/dist/config-eTstZgSV.d.ts +440 -0
- package/dist/index.cjs +1423 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +87 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.js +456 -0
- package/dist/index.js.map +1 -0
- package/dist/nexor.iife.js +426 -0
- package/dist/nexor.iife.js.map +1 -0
- package/package.json +58 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { initChat } from './chunk-ZQT7QEXV.js';
|
|
2
|
+
|
|
3
|
+
// src/errors.ts
|
|
4
|
+
var NexorError = class extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "NexorError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var NexorAPIError = class extends NexorError {
|
|
11
|
+
constructor(opts) {
|
|
12
|
+
super(opts.message);
|
|
13
|
+
this.name = "NexorAPIError";
|
|
14
|
+
this.status = opts.status;
|
|
15
|
+
this.code = opts.code ?? statusToCode(opts.status);
|
|
16
|
+
this.body = opts.body;
|
|
17
|
+
this.requestId = opts.requestId;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var NexorAuthError = class extends NexorAPIError {
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
super({ status: 401, code: "unauthorized", ...opts });
|
|
23
|
+
this.name = "NexorAuthError";
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var NexorValidationError = class extends NexorAPIError {
|
|
27
|
+
constructor(opts) {
|
|
28
|
+
super({ status: 400, code: "validation_error", ...opts });
|
|
29
|
+
this.name = "NexorValidationError";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var NexorNetworkError = class extends NexorError {
|
|
33
|
+
constructor(message, cause) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = "NexorNetworkError";
|
|
36
|
+
this.cause = cause;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
function statusToCode(status) {
|
|
40
|
+
if (status === 400) return "validation_error";
|
|
41
|
+
if (status === 401) return "unauthorized";
|
|
42
|
+
if (status === 403) return "forbidden";
|
|
43
|
+
if (status === 404) return "not_found";
|
|
44
|
+
if (status === 409) return "conflict";
|
|
45
|
+
if (status === 422) return "unprocessable_entity";
|
|
46
|
+
if (status === 429) return "rate_limited";
|
|
47
|
+
if (status >= 500) return "server_error";
|
|
48
|
+
return "http_error";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/http.ts
|
|
52
|
+
var DEFAULT_BASE_URL = "https://api.getnexor.ai";
|
|
53
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
54
|
+
var DEFAULT_MAX_RETRIES = 2;
|
|
55
|
+
var SDK_VERSION = "0.1.0";
|
|
56
|
+
function resolveConfig(opts) {
|
|
57
|
+
if (!opts || typeof opts.apiKey !== "string" || opts.apiKey.trim() === "") {
|
|
58
|
+
throw new Error(
|
|
59
|
+
"Nexor SDK: `apiKey` is required. Get one in the dashboard at https://app.getnexor.ai"
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
const fetchImpl = opts.fetch ?? (typeof globalThis !== "undefined" && typeof globalThis.fetch === "function" ? globalThis.fetch.bind(globalThis) : void 0);
|
|
63
|
+
if (!fetchImpl) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
"Nexor SDK: no global fetch found. Pass a `fetch` implementation via init() or upgrade to Node 18+."
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const ua = `nexor-sdk-js/${SDK_VERSION}${opts.userAgentSuffix ? ` ${opts.userAgentSuffix}` : ""}`;
|
|
69
|
+
return {
|
|
70
|
+
apiKey: opts.apiKey.trim(),
|
|
71
|
+
baseUrl: stripTrailingSlash(opts.baseUrl ?? DEFAULT_BASE_URL),
|
|
72
|
+
timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
73
|
+
maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
74
|
+
fetchImpl,
|
|
75
|
+
userAgent: ua
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function request(cfg, req) {
|
|
79
|
+
const url = buildUrl(cfg.baseUrl, req.path, req.query);
|
|
80
|
+
const headers = {
|
|
81
|
+
"X-API-Key": cfg.apiKey,
|
|
82
|
+
Accept: "application/json",
|
|
83
|
+
"User-Agent": cfg.userAgent
|
|
84
|
+
};
|
|
85
|
+
if (req.options?.idempotencyKey) {
|
|
86
|
+
headers["Idempotency-Key"] = req.options.idempotencyKey;
|
|
87
|
+
}
|
|
88
|
+
let body;
|
|
89
|
+
if (req.body !== void 0) {
|
|
90
|
+
headers["Content-Type"] = "application/json";
|
|
91
|
+
body = JSON.stringify(req.body);
|
|
92
|
+
}
|
|
93
|
+
const timeoutMs = req.options?.timeoutMs ?? cfg.timeoutMs;
|
|
94
|
+
let lastErr;
|
|
95
|
+
for (let attempt = 0; attempt <= cfg.maxRetries; attempt++) {
|
|
96
|
+
const controller = new AbortController();
|
|
97
|
+
const externalSignal = req.options?.signal;
|
|
98
|
+
const onAbort = () => controller.abort();
|
|
99
|
+
if (externalSignal) {
|
|
100
|
+
if (externalSignal.aborted) controller.abort();
|
|
101
|
+
else externalSignal.addEventListener("abort", onAbort);
|
|
102
|
+
}
|
|
103
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
104
|
+
try {
|
|
105
|
+
const res = await cfg.fetchImpl(url, {
|
|
106
|
+
method: req.method,
|
|
107
|
+
headers,
|
|
108
|
+
body,
|
|
109
|
+
signal: controller.signal
|
|
110
|
+
});
|
|
111
|
+
clearTimeout(timeoutId);
|
|
112
|
+
externalSignal?.removeEventListener("abort", onAbort);
|
|
113
|
+
const requestId = res.headers.get("x-request-id") ?? void 0;
|
|
114
|
+
if (res.ok) {
|
|
115
|
+
if (res.status === 204) return void 0;
|
|
116
|
+
const text = await res.text();
|
|
117
|
+
if (!text) return void 0;
|
|
118
|
+
try {
|
|
119
|
+
return JSON.parse(text);
|
|
120
|
+
} catch {
|
|
121
|
+
throw new NexorAPIError({
|
|
122
|
+
status: res.status,
|
|
123
|
+
message: "Failed to parse JSON response",
|
|
124
|
+
body: text,
|
|
125
|
+
requestId
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const errBody = await safeJson(res);
|
|
130
|
+
const message = pickMessage(errBody) ?? `HTTP ${res.status}`;
|
|
131
|
+
const err = makeError(res.status, message, errBody, requestId);
|
|
132
|
+
if (shouldRetry(res.status) && attempt < cfg.maxRetries) {
|
|
133
|
+
await sleep(backoffMs(attempt, res));
|
|
134
|
+
lastErr = err;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
throw err;
|
|
138
|
+
} catch (err) {
|
|
139
|
+
clearTimeout(timeoutId);
|
|
140
|
+
externalSignal?.removeEventListener("abort", onAbort);
|
|
141
|
+
if (err instanceof NexorAPIError) throw err;
|
|
142
|
+
const isAbort = err instanceof Error && (err.name === "AbortError" || /abort/i.test(err.message));
|
|
143
|
+
if (isAbort && externalSignal?.aborted) throw err;
|
|
144
|
+
lastErr = err;
|
|
145
|
+
if (attempt < cfg.maxRetries) {
|
|
146
|
+
await sleep(backoffMs(attempt));
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
throw new NexorNetworkError(
|
|
150
|
+
isAbort ? `Request timed out after ${timeoutMs}ms` : `Network error: ${err?.message ?? String(err)}`,
|
|
151
|
+
err
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
throw lastErr ?? new NexorNetworkError("Request failed");
|
|
156
|
+
}
|
|
157
|
+
function makeError(status, message, body, requestId) {
|
|
158
|
+
if (status === 401 || status === 403) {
|
|
159
|
+
return new NexorAuthError({ message, body, requestId });
|
|
160
|
+
}
|
|
161
|
+
if (status === 400 || status === 422) {
|
|
162
|
+
return new NexorValidationError({ message, body, requestId });
|
|
163
|
+
}
|
|
164
|
+
return new NexorAPIError({ status, message, body, requestId });
|
|
165
|
+
}
|
|
166
|
+
function pickMessage(body) {
|
|
167
|
+
if (!body || typeof body !== "object") return void 0;
|
|
168
|
+
const b = body;
|
|
169
|
+
if (typeof b.message === "string") return b.message;
|
|
170
|
+
if (typeof b.error === "string") return b.error;
|
|
171
|
+
return void 0;
|
|
172
|
+
}
|
|
173
|
+
async function safeJson(res) {
|
|
174
|
+
try {
|
|
175
|
+
const txt = await res.text();
|
|
176
|
+
if (!txt) return null;
|
|
177
|
+
try {
|
|
178
|
+
return JSON.parse(txt);
|
|
179
|
+
} catch {
|
|
180
|
+
return txt;
|
|
181
|
+
}
|
|
182
|
+
} catch {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function shouldRetry(status) {
|
|
187
|
+
return status === 429 || status >= 500 && status <= 599;
|
|
188
|
+
}
|
|
189
|
+
function backoffMs(attempt, res) {
|
|
190
|
+
if (res) {
|
|
191
|
+
const ra = res.headers.get("retry-after");
|
|
192
|
+
if (ra) {
|
|
193
|
+
const n = Number(ra);
|
|
194
|
+
if (!Number.isNaN(n) && n > 0) return Math.min(n * 1e3, 1e4);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const base = 300 * 2 ** attempt;
|
|
198
|
+
return base + Math.floor(Math.random() * 200);
|
|
199
|
+
}
|
|
200
|
+
function sleep(ms) {
|
|
201
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
202
|
+
}
|
|
203
|
+
function stripTrailingSlash(s) {
|
|
204
|
+
return s.endsWith("/") ? s.slice(0, -1) : s;
|
|
205
|
+
}
|
|
206
|
+
function buildUrl(baseUrl, path, query) {
|
|
207
|
+
const p = path.startsWith("/") ? path : `/${path}`;
|
|
208
|
+
const qs = encodeQuery(query);
|
|
209
|
+
return `${baseUrl}${p}${qs ? `?${qs}` : ""}`;
|
|
210
|
+
}
|
|
211
|
+
function encodeQuery(query) {
|
|
212
|
+
if (!query) return "";
|
|
213
|
+
const parts = [];
|
|
214
|
+
for (const [k, v] of Object.entries(query)) {
|
|
215
|
+
if (v === void 0 || v === null) continue;
|
|
216
|
+
if (Array.isArray(v)) {
|
|
217
|
+
if (v.length === 0) continue;
|
|
218
|
+
parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(v.join(","))}`);
|
|
219
|
+
} else {
|
|
220
|
+
parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return parts.join("&");
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// src/client.ts
|
|
227
|
+
var PUBLIC_PREFIX = "/api/public";
|
|
228
|
+
var NexorClient = class {
|
|
229
|
+
constructor(opts) {
|
|
230
|
+
this.cfg = resolveConfig(opts);
|
|
231
|
+
}
|
|
232
|
+
// ─── Leads ───────────────────────────────────────────────────────────────
|
|
233
|
+
/** Create a single lead, optionally assigning it to a workflow. */
|
|
234
|
+
createLead(input, options) {
|
|
235
|
+
return request(this.cfg, {
|
|
236
|
+
method: "POST",
|
|
237
|
+
path: `${PUBLIC_PREFIX}/leads`,
|
|
238
|
+
body: input,
|
|
239
|
+
options
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/** Create many leads in one request (max 1000). */
|
|
243
|
+
createLeadsBulk(inputs, options) {
|
|
244
|
+
return request(this.cfg, {
|
|
245
|
+
method: "POST",
|
|
246
|
+
path: `${PUBLIC_PREFIX}/leads`,
|
|
247
|
+
body: inputs,
|
|
248
|
+
options
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
/** Update an existing lead. metadata is shallow-merged server-side. */
|
|
252
|
+
updateLead(leadId, updates, options) {
|
|
253
|
+
return request(this.cfg, {
|
|
254
|
+
method: "PUT",
|
|
255
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,
|
|
256
|
+
body: updates,
|
|
257
|
+
options
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/** Fetch a lead with its captured variables and per-channel engagement. */
|
|
261
|
+
getLead(leadId, options) {
|
|
262
|
+
return request(this.cfg, {
|
|
263
|
+
method: "GET",
|
|
264
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}`,
|
|
265
|
+
options
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/** Full chronological history: messages, transcripts, activity. */
|
|
269
|
+
getLeadHistory(leadId, params = {}, options) {
|
|
270
|
+
const channel = Array.isArray(params.channel) ? params.channel : params.channel ? [params.channel] : void 0;
|
|
271
|
+
return request(this.cfg, {
|
|
272
|
+
method: "GET",
|
|
273
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/history`,
|
|
274
|
+
query: { channel, limit: params.limit, offset: params.offset },
|
|
275
|
+
options
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
/** Has automation been paused (human takeover) for this lead? */
|
|
279
|
+
isLeadPaused(leadId, params = {}, options) {
|
|
280
|
+
return request(this.cfg, {
|
|
281
|
+
method: "GET",
|
|
282
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/is_paused`,
|
|
283
|
+
query: { workflow_id: params.workflow_id },
|
|
284
|
+
options
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/** Pause automation (engage human takeover) on a specific workflow run. */
|
|
288
|
+
stopAutomation(leadId, input, options) {
|
|
289
|
+
return request(this.cfg, {
|
|
290
|
+
method: "POST",
|
|
291
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/stop`,
|
|
292
|
+
body: input,
|
|
293
|
+
options
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/** Resume automation; pass resume_cadence: true to restart scheduled touches. */
|
|
297
|
+
resumeAutomation(leadId, input, options) {
|
|
298
|
+
return request(this.cfg, {
|
|
299
|
+
method: "POST",
|
|
300
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/automation/resume`,
|
|
301
|
+
body: input,
|
|
302
|
+
options
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Replace the tag set on a lead (identified by lead_id OR email).
|
|
307
|
+
* Tags missing from the input are unassigned; new tags are find-or-created.
|
|
308
|
+
*/
|
|
309
|
+
syncLeadTags(input, options) {
|
|
310
|
+
return request(this.cfg, {
|
|
311
|
+
method: "POST",
|
|
312
|
+
path: `${PUBLIC_PREFIX}/leads/tags`,
|
|
313
|
+
body: input,
|
|
314
|
+
options
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
/** All meetings on file for a lead (optionally filter by status). */
|
|
318
|
+
listLeadMeetings(leadId, params = {}, options) {
|
|
319
|
+
const status = Array.isArray(params.status) ? params.status.join(",") : params.status;
|
|
320
|
+
return request(this.cfg, {
|
|
321
|
+
method: "GET",
|
|
322
|
+
path: `${PUBLIC_PREFIX}/leads/${encodeURIComponent(leadId)}/meetings`,
|
|
323
|
+
query: { status },
|
|
324
|
+
options
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
// ─── Workflows / Campaigns / Templates ──────────────────────────────────
|
|
328
|
+
/** Active workflows in your account. */
|
|
329
|
+
listWorkflows(options) {
|
|
330
|
+
return request(this.cfg, {
|
|
331
|
+
method: "GET",
|
|
332
|
+
path: `${PUBLIC_PREFIX}/workflows`,
|
|
333
|
+
options
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/** Campaigns in your account. */
|
|
337
|
+
listCampaigns(options) {
|
|
338
|
+
return request(this.cfg, {
|
|
339
|
+
method: "GET",
|
|
340
|
+
path: `${PUBLIC_PREFIX}/campaigns`,
|
|
341
|
+
options
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
/** Approved WhatsApp templates. */
|
|
345
|
+
listTemplates(params = {}, options) {
|
|
346
|
+
return request(this.cfg, {
|
|
347
|
+
method: "GET",
|
|
348
|
+
path: `${PUBLIC_PREFIX}/templates`,
|
|
349
|
+
query: { status: params.status, category: params.category },
|
|
350
|
+
options
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
// ─── Messages ───────────────────────────────────────────────────────────
|
|
354
|
+
/** Send a one-off message (WhatsApp/email) or trigger a call. */
|
|
355
|
+
sendMessage(input, options) {
|
|
356
|
+
return request(this.cfg, {
|
|
357
|
+
method: "POST",
|
|
358
|
+
path: `${PUBLIC_PREFIX}/messages`,
|
|
359
|
+
body: input,
|
|
360
|
+
options
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
// ─── Meetings ───────────────────────────────────────────────────────────
|
|
364
|
+
/** Log a booked meeting against an existing lead (matched by email). */
|
|
365
|
+
createMeeting(input, options) {
|
|
366
|
+
return request(this.cfg, {
|
|
367
|
+
method: "POST",
|
|
368
|
+
path: `${PUBLIC_PREFIX}/meetings`,
|
|
369
|
+
body: input,
|
|
370
|
+
options
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
/** Push a note-taker transcript / summary / action items to a meeting. */
|
|
374
|
+
createMeetingNotes(input, options) {
|
|
375
|
+
return request(this.cfg, {
|
|
376
|
+
method: "POST",
|
|
377
|
+
path: `${PUBLIC_PREFIX}/meeting-notes`,
|
|
378
|
+
body: input,
|
|
379
|
+
options
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
// ─── Chat (used by initChat widget) ─────────────────────────────────────
|
|
383
|
+
/**
|
|
384
|
+
* Send a turn in a browser-embedded chat session. Backed by
|
|
385
|
+
* POST /api/public/chat on the Nexor API.
|
|
386
|
+
*
|
|
387
|
+
* Most users will not call this directly — `initChat()` handles it.
|
|
388
|
+
*/
|
|
389
|
+
chat(input, options) {
|
|
390
|
+
return request(this.cfg, {
|
|
391
|
+
method: "POST",
|
|
392
|
+
path: `${PUBLIC_PREFIX}/chat`,
|
|
393
|
+
body: input,
|
|
394
|
+
options
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
// src/index.ts
|
|
400
|
+
function createClient(opts) {
|
|
401
|
+
return new NexorClient(opts);
|
|
402
|
+
}
|
|
403
|
+
var _client = null;
|
|
404
|
+
function getClient() {
|
|
405
|
+
if (!_client) {
|
|
406
|
+
throw new Error(
|
|
407
|
+
"Nexor SDK: call `nexor.init({ apiKey })` before using the API."
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
return _client;
|
|
411
|
+
}
|
|
412
|
+
function init(opts) {
|
|
413
|
+
_client = new NexorClient(opts);
|
|
414
|
+
return _client;
|
|
415
|
+
}
|
|
416
|
+
function isInitialized() {
|
|
417
|
+
return _client !== null;
|
|
418
|
+
}
|
|
419
|
+
function reset() {
|
|
420
|
+
_client = null;
|
|
421
|
+
}
|
|
422
|
+
var nexor = {
|
|
423
|
+
init,
|
|
424
|
+
isInitialized,
|
|
425
|
+
reset,
|
|
426
|
+
get client() {
|
|
427
|
+
return getClient();
|
|
428
|
+
},
|
|
429
|
+
// Leads
|
|
430
|
+
createLead: ((...args) => getClient().createLead(...args)),
|
|
431
|
+
createLeadsBulk: ((...args) => getClient().createLeadsBulk(...args)),
|
|
432
|
+
updateLead: ((...args) => getClient().updateLead(...args)),
|
|
433
|
+
getLead: ((...args) => getClient().getLead(...args)),
|
|
434
|
+
getLeadHistory: ((...args) => getClient().getLeadHistory(...args)),
|
|
435
|
+
isLeadPaused: ((...args) => getClient().isLeadPaused(...args)),
|
|
436
|
+
stopAutomation: ((...args) => getClient().stopAutomation(...args)),
|
|
437
|
+
resumeAutomation: ((...args) => getClient().resumeAutomation(...args)),
|
|
438
|
+
syncLeadTags: ((...args) => getClient().syncLeadTags(...args)),
|
|
439
|
+
listLeadMeetings: ((...args) => getClient().listLeadMeetings(...args)),
|
|
440
|
+
// Workflows / Campaigns / Templates
|
|
441
|
+
listWorkflows: ((...args) => getClient().listWorkflows(...args)),
|
|
442
|
+
listCampaigns: ((...args) => getClient().listCampaigns(...args)),
|
|
443
|
+
listTemplates: ((...args) => getClient().listTemplates(...args)),
|
|
444
|
+
// Messages
|
|
445
|
+
sendMessage: ((...args) => getClient().sendMessage(...args)),
|
|
446
|
+
// Meetings
|
|
447
|
+
createMeeting: ((...args) => getClient().createMeeting(...args)),
|
|
448
|
+
createMeetingNotes: ((...args) => getClient().createMeetingNotes(...args)),
|
|
449
|
+
// Chat widget
|
|
450
|
+
initChat: (options) => initChat(getClient(), options)
|
|
451
|
+
};
|
|
452
|
+
var src_default = nexor;
|
|
453
|
+
|
|
454
|
+
export { NexorAPIError, NexorAuthError, NexorClient, NexorError, NexorNetworkError, NexorValidationError, createClient, src_default as default, nexor };
|
|
455
|
+
//# sourceMappingURL=index.js.map
|
|
456
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"]}
|