@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/dist/index.js CHANGED
@@ -179,7 +179,8 @@ function createHttp(cfg) {
179
179
  }
180
180
  return res;
181
181
  } catch (e) {
182
- if (e.name === "AbortError") throw new TimeoutError(timeout, targetUrl);
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 Query((qb) => qb.eq("type", type));
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,