@getsupervisor/agents-studio-sdk 1.41.2-patch.9 → 1.42.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/CHANGELOG.md +52 -0
- package/README.md +39 -0
- package/dist/index.cjs +205 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +327 -56
- package/dist/index.d.ts +327 -56
- package/dist/index.js +202 -7
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
package/dist/index.js
CHANGED
|
@@ -179,7 +179,8 @@ function createHttp(cfg) {
|
|
|
179
179
|
}
|
|
180
180
|
return res;
|
|
181
181
|
} catch (e) {
|
|
182
|
-
if (e
|
|
182
|
+
if (e?.name === "AbortError")
|
|
183
|
+
throw new TimeoutError(timeout, targetUrl);
|
|
183
184
|
if (e instanceof HttpError) throw e;
|
|
184
185
|
throw new NetworkError(e, targetUrl);
|
|
185
186
|
}
|
|
@@ -1319,6 +1320,19 @@ function createApiKeysApi(cfg) {
|
|
|
1319
1320
|
};
|
|
1320
1321
|
}
|
|
1321
1322
|
|
|
1323
|
+
// src/api/billing.ts
|
|
1324
|
+
function createBillingApi(cfg) {
|
|
1325
|
+
const { base, doFetch } = createHttp(cfg);
|
|
1326
|
+
return {
|
|
1327
|
+
async getBalance() {
|
|
1328
|
+
const res = await doFetch(`${base}/billing/balance`, {
|
|
1329
|
+
method: "GET"
|
|
1330
|
+
});
|
|
1331
|
+
return res.json();
|
|
1332
|
+
}
|
|
1333
|
+
};
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1322
1336
|
// src/api/calls.ts
|
|
1323
1337
|
function createCallsApi(cfg) {
|
|
1324
1338
|
const { base, doFetch } = createHttp(cfg);
|
|
@@ -1397,10 +1411,7 @@ function createCampaignsApi(cfg) {
|
|
|
1397
1411
|
return res.json();
|
|
1398
1412
|
};
|
|
1399
1413
|
const fetchExecutionsPage = async (campaignId, options = {}) => {
|
|
1400
|
-
const query = serializeListOptions({
|
|
1401
|
-
page: options.page,
|
|
1402
|
-
limit: options.limit
|
|
1403
|
-
});
|
|
1414
|
+
const query = serializeListOptions(options ?? {});
|
|
1404
1415
|
const res = await doFetch(`${base}/campaigns/${campaignId}/executions`, {
|
|
1405
1416
|
method: "GET",
|
|
1406
1417
|
query
|
|
@@ -1454,6 +1465,51 @@ function createCampaignsApi(cfg) {
|
|
|
1454
1465
|
const response = await fetchExecutionsPage(campaignId, normalizedOptions);
|
|
1455
1466
|
const fetchPage = (opts) => fetchExecutionsPage(campaignId, opts);
|
|
1456
1467
|
return attachPaginator(response, fetchPage, normalizedOptions);
|
|
1468
|
+
},
|
|
1469
|
+
/**
|
|
1470
|
+
* Pausa una campaña en curso. Los reintentos ya programados se
|
|
1471
|
+
* reagendan al ejecutarse (sin consumir intentos) hasta `resume()`.
|
|
1472
|
+
*/
|
|
1473
|
+
async pause(campaignId) {
|
|
1474
|
+
const res = await doFetch(`${base}/campaigns/${campaignId}/pause`, {
|
|
1475
|
+
method: "POST"
|
|
1476
|
+
});
|
|
1477
|
+
return res.json();
|
|
1478
|
+
},
|
|
1479
|
+
/**
|
|
1480
|
+
* Reanuda una campaña pausada. Re-encola los reintentos pendientes
|
|
1481
|
+
* según su `nextRetryAt`.
|
|
1482
|
+
*/
|
|
1483
|
+
async resume(campaignId) {
|
|
1484
|
+
const res = await doFetch(`${base}/campaigns/${campaignId}/resume`, {
|
|
1485
|
+
method: "POST"
|
|
1486
|
+
});
|
|
1487
|
+
return res.json();
|
|
1488
|
+
},
|
|
1489
|
+
/**
|
|
1490
|
+
* Cancela definitivamente una campaña no terminal. Los reintentos
|
|
1491
|
+
* pendientes se descartan — operación destructiva.
|
|
1492
|
+
*/
|
|
1493
|
+
async cancel(campaignId) {
|
|
1494
|
+
const res = await doFetch(`${base}/campaigns/${campaignId}/cancel`, {
|
|
1495
|
+
method: "POST"
|
|
1496
|
+
});
|
|
1497
|
+
return res.json();
|
|
1498
|
+
},
|
|
1499
|
+
/**
|
|
1500
|
+
* Descarga el CSV con todas las ejecuciones de la campaña. Devuelve un
|
|
1501
|
+
* `Blob` con `text/csv; charset=utf-8` (BOM UTF-8 incluido). Para
|
|
1502
|
+
* campañas > 20,000 filas la API responde 413.
|
|
1503
|
+
*/
|
|
1504
|
+
async exportExecutions(campaignId) {
|
|
1505
|
+
const res = await doFetch(
|
|
1506
|
+
`${base}/campaigns/${campaignId}/executions/export`,
|
|
1507
|
+
{
|
|
1508
|
+
method: "GET",
|
|
1509
|
+
headers: { Accept: "text/csv" }
|
|
1510
|
+
}
|
|
1511
|
+
);
|
|
1512
|
+
return res.blob();
|
|
1457
1513
|
}
|
|
1458
1514
|
};
|
|
1459
1515
|
}
|
|
@@ -1534,6 +1590,42 @@ function createCatalogsApi(cfg) {
|
|
|
1534
1590
|
};
|
|
1535
1591
|
}
|
|
1536
1592
|
|
|
1593
|
+
// src/api/sip-trunks.ts
|
|
1594
|
+
function createSipTrunksApi(cfg) {
|
|
1595
|
+
const { base, doFetch } = createHttp(cfg);
|
|
1596
|
+
return {
|
|
1597
|
+
async list() {
|
|
1598
|
+
const res = await doFetch(`${base}/sip/trunks`, { method: "GET" });
|
|
1599
|
+
return res.json();
|
|
1600
|
+
},
|
|
1601
|
+
async get(trunkId) {
|
|
1602
|
+
const res = await doFetch(`${base}/sip/trunks/${trunkId}`, {
|
|
1603
|
+
method: "GET"
|
|
1604
|
+
});
|
|
1605
|
+
return res.json();
|
|
1606
|
+
},
|
|
1607
|
+
async create(body) {
|
|
1608
|
+
const res = await doFetch(`${base}/sip/trunks`, {
|
|
1609
|
+
method: "POST",
|
|
1610
|
+
headers: { "Content-Type": "application/json" },
|
|
1611
|
+
body: JSON.stringify(body)
|
|
1612
|
+
});
|
|
1613
|
+
return res.json();
|
|
1614
|
+
},
|
|
1615
|
+
async update(trunkId, body) {
|
|
1616
|
+
const res = await doFetch(`${base}/sip/trunks/${trunkId}`, {
|
|
1617
|
+
method: "PATCH",
|
|
1618
|
+
headers: { "Content-Type": "application/json" },
|
|
1619
|
+
body: JSON.stringify(body)
|
|
1620
|
+
});
|
|
1621
|
+
return res.json();
|
|
1622
|
+
},
|
|
1623
|
+
async delete(trunkId) {
|
|
1624
|
+
await doFetch(`${base}/sip/trunks/${trunkId}`, { method: "DELETE" });
|
|
1625
|
+
}
|
|
1626
|
+
};
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1537
1629
|
// src/api/tools.ts
|
|
1538
1630
|
var IDEMPOTENCY_HEADER = "Idempotency-Key";
|
|
1539
1631
|
var generateIdempotencyKey = (explicit) => {
|
|
@@ -1723,6 +1815,74 @@ function createToolsApi(cfg) {
|
|
|
1723
1815
|
};
|
|
1724
1816
|
}
|
|
1725
1817
|
|
|
1818
|
+
// src/api/usage.ts
|
|
1819
|
+
import { Query } from "@getsupervisor/api-query-builder";
|
|
1820
|
+
function createUsageApi(cfg) {
|
|
1821
|
+
const { base, doFetch } = createHttp(cfg);
|
|
1822
|
+
const fetchUsageAgentsPage = async (options = {}) => {
|
|
1823
|
+
const { resource, from, to, ...listOptions } = options;
|
|
1824
|
+
const query = serializeListOptions({
|
|
1825
|
+
...listOptions,
|
|
1826
|
+
filter: resolveFilter(
|
|
1827
|
+
buildUsageFilter(resource, from, to),
|
|
1828
|
+
listOptions.filter
|
|
1829
|
+
)
|
|
1830
|
+
});
|
|
1831
|
+
const res = await doFetch(`${base}/usage/agents`, {
|
|
1832
|
+
method: "GET",
|
|
1833
|
+
query
|
|
1834
|
+
});
|
|
1835
|
+
return res.json();
|
|
1836
|
+
};
|
|
1837
|
+
return {
|
|
1838
|
+
async agents(options = {}) {
|
|
1839
|
+
const normalizedOptions = {
|
|
1840
|
+
...options
|
|
1841
|
+
};
|
|
1842
|
+
const response = await fetchUsageAgentsPage(normalizedOptions);
|
|
1843
|
+
return attachPaginator(response, fetchUsageAgentsPage, normalizedOptions);
|
|
1844
|
+
}
|
|
1845
|
+
};
|
|
1846
|
+
}
|
|
1847
|
+
function resolveFilter(usageFilter, fallback) {
|
|
1848
|
+
if (usageFilter) {
|
|
1849
|
+
return usageFilter;
|
|
1850
|
+
}
|
|
1851
|
+
return fallback;
|
|
1852
|
+
}
|
|
1853
|
+
function appendCondition(query, factory) {
|
|
1854
|
+
if (query) {
|
|
1855
|
+
query.and(factory);
|
|
1856
|
+
return query;
|
|
1857
|
+
}
|
|
1858
|
+
return new Query(factory);
|
|
1859
|
+
}
|
|
1860
|
+
var DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
1861
|
+
function toISOString(value) {
|
|
1862
|
+
const input = DATE_ONLY.test(value) ? `${value}T00:00:00` : value;
|
|
1863
|
+
const date = new Date(input);
|
|
1864
|
+
if (Number.isNaN(date.getTime())) {
|
|
1865
|
+
return value;
|
|
1866
|
+
}
|
|
1867
|
+
return date.toISOString();
|
|
1868
|
+
}
|
|
1869
|
+
function buildUsageFilter(resource, from, to) {
|
|
1870
|
+
let query;
|
|
1871
|
+
if (resource) {
|
|
1872
|
+
query = appendCondition(query, (qb) => qb.eq("resource", resource));
|
|
1873
|
+
}
|
|
1874
|
+
if (from) {
|
|
1875
|
+
query = appendCondition(
|
|
1876
|
+
query,
|
|
1877
|
+
(qb) => qb.mte("createdAt", toISOString(from))
|
|
1878
|
+
);
|
|
1879
|
+
}
|
|
1880
|
+
if (to) {
|
|
1881
|
+
query = appendCondition(query, (qb) => qb.lt("createdAt", toISOString(to)));
|
|
1882
|
+
}
|
|
1883
|
+
return query;
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1726
1886
|
// src/utils/catalog-voices.ts
|
|
1727
1887
|
var FALLBACK_LOCALE = "und";
|
|
1728
1888
|
var FALLBACK_PROVIDER = "catalog";
|
|
@@ -1781,9 +1941,9 @@ function pickGender(value) {
|
|
|
1781
1941
|
}
|
|
1782
1942
|
|
|
1783
1943
|
// src/utils/catalog-filter.ts
|
|
1784
|
-
import { Query } from "@getsupervisor/api-query-builder";
|
|
1944
|
+
import { Query as Query2 } from "@getsupervisor/api-query-builder";
|
|
1785
1945
|
function createCatalogTypeQuery(type) {
|
|
1786
|
-
return new
|
|
1946
|
+
return new Query2((qb) => qb.eq("type", type));
|
|
1787
1947
|
}
|
|
1788
1948
|
function ensureCatalogTypeFilter(filter, type) {
|
|
1789
1949
|
const requiredQuery = createCatalogTypeQuery(type);
|
|
@@ -2019,6 +2179,35 @@ function createWebhooksApi(cfg) {
|
|
|
2019
2179
|
`${base}/webhooks/${webhookId}/subscriptions/${subscriptionId}`,
|
|
2020
2180
|
{ method: "DELETE" }
|
|
2021
2181
|
);
|
|
2182
|
+
},
|
|
2183
|
+
// Deliveries
|
|
2184
|
+
async listDeliveries(webhookId, options = {}) {
|
|
2185
|
+
const fetchPage = async (opts) => {
|
|
2186
|
+
const query = serializeListOptions({
|
|
2187
|
+
page: opts.page,
|
|
2188
|
+
limit: opts.limit,
|
|
2189
|
+
sort: opts.sort,
|
|
2190
|
+
fields: opts.fields,
|
|
2191
|
+
include: opts.include,
|
|
2192
|
+
search: opts.search,
|
|
2193
|
+
filter: opts.filter
|
|
2194
|
+
});
|
|
2195
|
+
const res = await doFetch(`${base}/webhooks/${webhookId}/deliveries`, {
|
|
2196
|
+
method: "GET",
|
|
2197
|
+
query
|
|
2198
|
+
});
|
|
2199
|
+
return res.json();
|
|
2200
|
+
};
|
|
2201
|
+
const normalized = { ...options ?? {} };
|
|
2202
|
+
const response = await fetchPage(normalized);
|
|
2203
|
+
return attachPaginator(response, fetchPage, normalized);
|
|
2204
|
+
},
|
|
2205
|
+
async getDelivery(webhookId, deliveryId) {
|
|
2206
|
+
const res = await doFetch(
|
|
2207
|
+
`${base}/webhooks/${webhookId}/deliveries/${deliveryId}`,
|
|
2208
|
+
{ method: "GET" }
|
|
2209
|
+
);
|
|
2210
|
+
return res.json();
|
|
2022
2211
|
}
|
|
2023
2212
|
};
|
|
2024
2213
|
}
|
|
@@ -2201,7 +2390,10 @@ function createClient(initialCfg) {
|
|
|
2201
2390
|
campaigns: createCampaignsApi(runtimeCfg),
|
|
2202
2391
|
voices: voicesApi,
|
|
2203
2392
|
apiKeys: apiKeysApi,
|
|
2393
|
+
billing: createBillingApi(runtimeCfg),
|
|
2204
2394
|
calls: callsApi,
|
|
2395
|
+
usage: createUsageApi(runtimeCfg),
|
|
2396
|
+
sip: createSipTrunksApi(runtimeCfg),
|
|
2205
2397
|
webhooks: webhooksApi
|
|
2206
2398
|
};
|
|
2207
2399
|
return {
|
|
@@ -2284,13 +2476,16 @@ export {
|
|
|
2284
2476
|
createAgentVersionsApi,
|
|
2285
2477
|
createAgentsApi,
|
|
2286
2478
|
createApiKeysApi,
|
|
2479
|
+
createBillingApi,
|
|
2287
2480
|
createCallsApi,
|
|
2288
2481
|
createCampaignsApi,
|
|
2289
2482
|
createCatalogTemplatesApi,
|
|
2290
2483
|
createCatalogsApi,
|
|
2291
2484
|
createClient,
|
|
2292
2485
|
createHttp,
|
|
2486
|
+
createSipTrunksApi,
|
|
2293
2487
|
createToolsApi,
|
|
2488
|
+
createUsageApi,
|
|
2294
2489
|
createVoicesApi,
|
|
2295
2490
|
createWebhooksApi,
|
|
2296
2491
|
createWorkspacesApi,
|