@messagebird/sdk 0.2.2 → 0.3.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.d.ts +1043 -124
- package/dist/index.js +524 -12
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -468,11 +468,8 @@ var checkForExistence = (options, name) => {
|
|
|
468
468
|
}
|
|
469
469
|
return false;
|
|
470
470
|
};
|
|
471
|
-
|
|
472
|
-
security
|
|
473
|
-
...options
|
|
474
|
-
}) => {
|
|
475
|
-
for (const auth of security) {
|
|
471
|
+
async function setAuthParams(options) {
|
|
472
|
+
for (const auth of options.security ?? []) {
|
|
476
473
|
if (checkForExistence(options, auth.name)) {
|
|
477
474
|
continue;
|
|
478
475
|
}
|
|
@@ -497,7 +494,7 @@ var setAuthParams = async ({
|
|
|
497
494
|
break;
|
|
498
495
|
}
|
|
499
496
|
}
|
|
500
|
-
}
|
|
497
|
+
}
|
|
501
498
|
var buildUrl = (options) => getUrl({
|
|
502
499
|
baseUrl: options.baseUrl,
|
|
503
500
|
path: options.path,
|
|
@@ -623,10 +620,7 @@ var createClient = (config = {}) => {
|
|
|
623
620
|
serializedBody: void 0
|
|
624
621
|
};
|
|
625
622
|
if (opts.security) {
|
|
626
|
-
await setAuthParams(
|
|
627
|
-
...opts,
|
|
628
|
-
security: opts.security
|
|
629
|
-
});
|
|
623
|
+
await setAuthParams(opts);
|
|
630
624
|
}
|
|
631
625
|
if (opts.requestValidator) {
|
|
632
626
|
await opts.requestValidator(opts);
|
|
@@ -1272,6 +1266,190 @@ var getEmailMessage = (options) => (options.client ?? client).get({
|
|
|
1272
1266
|
url: "/v1/email/messages/{message_id}",
|
|
1273
1267
|
...options
|
|
1274
1268
|
});
|
|
1269
|
+
var listSmsMessages = (options) => (options?.client ?? client).get({
|
|
1270
|
+
security: [
|
|
1271
|
+
{ scheme: "bearer", type: "http" },
|
|
1272
|
+
{
|
|
1273
|
+
in: "cookie",
|
|
1274
|
+
name: "bird_session",
|
|
1275
|
+
type: "apiKey"
|
|
1276
|
+
}
|
|
1277
|
+
],
|
|
1278
|
+
url: "/v1/sms/messages",
|
|
1279
|
+
...options
|
|
1280
|
+
});
|
|
1281
|
+
var createSmsMessage = (options) => (options.client ?? client).post({
|
|
1282
|
+
security: [
|
|
1283
|
+
{ scheme: "bearer", type: "http" },
|
|
1284
|
+
{
|
|
1285
|
+
in: "cookie",
|
|
1286
|
+
name: "bird_session",
|
|
1287
|
+
type: "apiKey"
|
|
1288
|
+
}
|
|
1289
|
+
],
|
|
1290
|
+
url: "/v1/sms/messages",
|
|
1291
|
+
...options,
|
|
1292
|
+
headers: {
|
|
1293
|
+
"Content-Type": "application/json",
|
|
1294
|
+
...options.headers
|
|
1295
|
+
}
|
|
1296
|
+
});
|
|
1297
|
+
var createSmsMessageBatch = (options) => (options.client ?? client).post({
|
|
1298
|
+
security: [
|
|
1299
|
+
{ scheme: "bearer", type: "http" },
|
|
1300
|
+
{
|
|
1301
|
+
in: "cookie",
|
|
1302
|
+
name: "bird_session",
|
|
1303
|
+
type: "apiKey"
|
|
1304
|
+
}
|
|
1305
|
+
],
|
|
1306
|
+
url: "/v1/sms/batches",
|
|
1307
|
+
...options,
|
|
1308
|
+
headers: {
|
|
1309
|
+
"Content-Type": "application/json",
|
|
1310
|
+
...options.headers
|
|
1311
|
+
}
|
|
1312
|
+
});
|
|
1313
|
+
var getSmsMessage = (options) => (options.client ?? client).get({
|
|
1314
|
+
security: [
|
|
1315
|
+
{ scheme: "bearer", type: "http" },
|
|
1316
|
+
{
|
|
1317
|
+
in: "cookie",
|
|
1318
|
+
name: "bird_session",
|
|
1319
|
+
type: "apiKey"
|
|
1320
|
+
}
|
|
1321
|
+
],
|
|
1322
|
+
url: "/v1/sms/messages/{message_id}",
|
|
1323
|
+
...options
|
|
1324
|
+
});
|
|
1325
|
+
var listSmsTemplates = (options) => (options?.client ?? client).get({
|
|
1326
|
+
security: [
|
|
1327
|
+
{ scheme: "bearer", type: "http" },
|
|
1328
|
+
{
|
|
1329
|
+
in: "cookie",
|
|
1330
|
+
name: "bird_session",
|
|
1331
|
+
type: "apiKey"
|
|
1332
|
+
}
|
|
1333
|
+
],
|
|
1334
|
+
url: "/v1/sms/templates",
|
|
1335
|
+
...options
|
|
1336
|
+
});
|
|
1337
|
+
var getSmsTemplate = (options) => (options.client ?? client).get({
|
|
1338
|
+
security: [
|
|
1339
|
+
{ scheme: "bearer", type: "http" },
|
|
1340
|
+
{
|
|
1341
|
+
in: "cookie",
|
|
1342
|
+
name: "bird_session",
|
|
1343
|
+
type: "apiKey"
|
|
1344
|
+
}
|
|
1345
|
+
],
|
|
1346
|
+
url: "/v1/sms/templates/{template_ref}",
|
|
1347
|
+
...options
|
|
1348
|
+
});
|
|
1349
|
+
var listEmailTemplates = (options) => (options?.client ?? client).get({
|
|
1350
|
+
security: [
|
|
1351
|
+
{ scheme: "bearer", type: "http" },
|
|
1352
|
+
{
|
|
1353
|
+
in: "cookie",
|
|
1354
|
+
name: "bird_session",
|
|
1355
|
+
type: "apiKey"
|
|
1356
|
+
}
|
|
1357
|
+
],
|
|
1358
|
+
url: "/v1/email/templates",
|
|
1359
|
+
...options
|
|
1360
|
+
});
|
|
1361
|
+
var createEmailTemplate = (options) => (options.client ?? client).post({
|
|
1362
|
+
security: [
|
|
1363
|
+
{ scheme: "bearer", type: "http" },
|
|
1364
|
+
{
|
|
1365
|
+
in: "cookie",
|
|
1366
|
+
name: "bird_session",
|
|
1367
|
+
type: "apiKey"
|
|
1368
|
+
}
|
|
1369
|
+
],
|
|
1370
|
+
url: "/v1/email/templates",
|
|
1371
|
+
...options,
|
|
1372
|
+
headers: {
|
|
1373
|
+
"Content-Type": "application/json",
|
|
1374
|
+
...options.headers
|
|
1375
|
+
}
|
|
1376
|
+
});
|
|
1377
|
+
var deleteEmailTemplate = (options) => (options.client ?? client).delete({
|
|
1378
|
+
security: [
|
|
1379
|
+
{ scheme: "bearer", type: "http" },
|
|
1380
|
+
{
|
|
1381
|
+
in: "cookie",
|
|
1382
|
+
name: "bird_session",
|
|
1383
|
+
type: "apiKey"
|
|
1384
|
+
}
|
|
1385
|
+
],
|
|
1386
|
+
url: "/v1/email/templates/{template_id}",
|
|
1387
|
+
...options
|
|
1388
|
+
});
|
|
1389
|
+
var getEmailTemplate = (options) => (options.client ?? client).get({
|
|
1390
|
+
security: [
|
|
1391
|
+
{ scheme: "bearer", type: "http" },
|
|
1392
|
+
{
|
|
1393
|
+
in: "cookie",
|
|
1394
|
+
name: "bird_session",
|
|
1395
|
+
type: "apiKey"
|
|
1396
|
+
}
|
|
1397
|
+
],
|
|
1398
|
+
url: "/v1/email/templates/{template_id}",
|
|
1399
|
+
...options
|
|
1400
|
+
});
|
|
1401
|
+
var updateEmailTemplate = (options) => (options.client ?? client).patch({
|
|
1402
|
+
security: [
|
|
1403
|
+
{ scheme: "bearer", type: "http" },
|
|
1404
|
+
{
|
|
1405
|
+
in: "cookie",
|
|
1406
|
+
name: "bird_session",
|
|
1407
|
+
type: "apiKey"
|
|
1408
|
+
}
|
|
1409
|
+
],
|
|
1410
|
+
url: "/v1/email/templates/{template_id}",
|
|
1411
|
+
...options,
|
|
1412
|
+
headers: {
|
|
1413
|
+
"Content-Type": "application/json",
|
|
1414
|
+
...options.headers
|
|
1415
|
+
}
|
|
1416
|
+
});
|
|
1417
|
+
var listEmailTemplateVersions = (options) => (options.client ?? client).get({
|
|
1418
|
+
security: [
|
|
1419
|
+
{ scheme: "bearer", type: "http" },
|
|
1420
|
+
{
|
|
1421
|
+
in: "cookie",
|
|
1422
|
+
name: "bird_session",
|
|
1423
|
+
type: "apiKey"
|
|
1424
|
+
}
|
|
1425
|
+
],
|
|
1426
|
+
url: "/v1/email/templates/{template_id}/versions",
|
|
1427
|
+
...options
|
|
1428
|
+
});
|
|
1429
|
+
var getEmailTemplateVersion = (options) => (options.client ?? client).get({
|
|
1430
|
+
security: [
|
|
1431
|
+
{ scheme: "bearer", type: "http" },
|
|
1432
|
+
{
|
|
1433
|
+
in: "cookie",
|
|
1434
|
+
name: "bird_session",
|
|
1435
|
+
type: "apiKey"
|
|
1436
|
+
}
|
|
1437
|
+
],
|
|
1438
|
+
url: "/v1/email/templates/{template_id}/versions/{version_id}",
|
|
1439
|
+
...options
|
|
1440
|
+
});
|
|
1441
|
+
var publishEmailTemplate = (options) => (options.client ?? client).post({
|
|
1442
|
+
security: [
|
|
1443
|
+
{ scheme: "bearer", type: "http" },
|
|
1444
|
+
{
|
|
1445
|
+
in: "cookie",
|
|
1446
|
+
name: "bird_session",
|
|
1447
|
+
type: "apiKey"
|
|
1448
|
+
}
|
|
1449
|
+
],
|
|
1450
|
+
url: "/v1/email/templates/{template_id}/publish",
|
|
1451
|
+
...options
|
|
1452
|
+
});
|
|
1275
1453
|
|
|
1276
1454
|
// src/resources/base.ts
|
|
1277
1455
|
var Resource = class {
|
|
@@ -1471,6 +1649,331 @@ var EmailResource = class extends Resource {
|
|
|
1471
1649
|
);
|
|
1472
1650
|
}
|
|
1473
1651
|
};
|
|
1652
|
+
|
|
1653
|
+
// src/resources/emailTemplates.ts
|
|
1654
|
+
var EmailTemplatesResource = class extends Resource {
|
|
1655
|
+
/**
|
|
1656
|
+
* Create a template and its initial editable draft. Pick the authoring format
|
|
1657
|
+
* with `source` (`liquid`, `handlebars`, or `html`); the name must be unique
|
|
1658
|
+
* in the workspace or the call throws a `BirdConflictError`.
|
|
1659
|
+
*
|
|
1660
|
+
* @example Create a template
|
|
1661
|
+
* const tpl = await bird.emailTemplates.create({
|
|
1662
|
+
* name: "Welcome",
|
|
1663
|
+
* category: "transactional",
|
|
1664
|
+
* source: "handlebars",
|
|
1665
|
+
* subject: "Welcome, {{ first_name }}!",
|
|
1666
|
+
* html: "<h1>Hi {{ first_name }}</h1>",
|
|
1667
|
+
* });
|
|
1668
|
+
* console.log(tpl.id, tpl.revision); // "emt_…", 0
|
|
1669
|
+
*/
|
|
1670
|
+
create(params, options) {
|
|
1671
|
+
return this.call(
|
|
1672
|
+
"POST",
|
|
1673
|
+
options,
|
|
1674
|
+
({ signal, headers }) => createEmailTemplate({
|
|
1675
|
+
client: this.client,
|
|
1676
|
+
body: params,
|
|
1677
|
+
headers,
|
|
1678
|
+
signal
|
|
1679
|
+
})
|
|
1680
|
+
);
|
|
1681
|
+
}
|
|
1682
|
+
/**
|
|
1683
|
+
* List the workspace's templates, newest first. `await` resolves the first
|
|
1684
|
+
* page; `for await` walks every template across all pages. Filter by
|
|
1685
|
+
* `category`, `source`, or a case-insensitive `name` prefix.
|
|
1686
|
+
*
|
|
1687
|
+
* @example Iterate every template, or take one page
|
|
1688
|
+
* for await (const tpl of bird.emailTemplates.list({ category: "transactional" })) {
|
|
1689
|
+
* console.log(tpl.id, tpl.name);
|
|
1690
|
+
* }
|
|
1691
|
+
* const page = await bird.emailTemplates.list({ limit: 50 }); // page.data, page.next_cursor
|
|
1692
|
+
*/
|
|
1693
|
+
list(query, options) {
|
|
1694
|
+
return this.paginated(
|
|
1695
|
+
"GET",
|
|
1696
|
+
options,
|
|
1697
|
+
({ signal, headers }, cursor) => listEmailTemplates({
|
|
1698
|
+
client: this.client,
|
|
1699
|
+
query: { ...query, starting_after: cursor ?? query?.starting_after },
|
|
1700
|
+
headers,
|
|
1701
|
+
signal
|
|
1702
|
+
})
|
|
1703
|
+
);
|
|
1704
|
+
}
|
|
1705
|
+
/**
|
|
1706
|
+
* Fetch a template with its current draft content (subject, HTML, text), the
|
|
1707
|
+
* draft `revision`, and its draft/published version ids.
|
|
1708
|
+
*
|
|
1709
|
+
* @example
|
|
1710
|
+
* const tpl = await bird.emailTemplates.get("emt_abc123");
|
|
1711
|
+
* tpl.subject;
|
|
1712
|
+
* tpl.published_version_id; // null until first publish
|
|
1713
|
+
*/
|
|
1714
|
+
get(templateId, options) {
|
|
1715
|
+
return this.call(
|
|
1716
|
+
"GET",
|
|
1717
|
+
options,
|
|
1718
|
+
({ signal, headers }) => getEmailTemplate({
|
|
1719
|
+
client: this.client,
|
|
1720
|
+
path: { template_id: templateId },
|
|
1721
|
+
headers,
|
|
1722
|
+
signal
|
|
1723
|
+
})
|
|
1724
|
+
);
|
|
1725
|
+
}
|
|
1726
|
+
/**
|
|
1727
|
+
* Update a template's metadata and draft content. Only the fields you send
|
|
1728
|
+
* change. Pass the draft `revision` you last read; if another edit landed
|
|
1729
|
+
* first the call throws a `BirdConflictError` — reload and retry.
|
|
1730
|
+
*
|
|
1731
|
+
* @example Edit the draft, guarded by the revision you read
|
|
1732
|
+
* const tpl = await bird.emailTemplates.get("emt_abc123");
|
|
1733
|
+
* const updated = await bird.emailTemplates.update("emt_abc123", {
|
|
1734
|
+
* revision: tpl.revision,
|
|
1735
|
+
* subject: "Welcome aboard, {{ first_name }}!",
|
|
1736
|
+
* });
|
|
1737
|
+
*/
|
|
1738
|
+
update(templateId, params, options) {
|
|
1739
|
+
return this.call(
|
|
1740
|
+
"PATCH",
|
|
1741
|
+
options,
|
|
1742
|
+
({ signal, headers }) => updateEmailTemplate({
|
|
1743
|
+
client: this.client,
|
|
1744
|
+
path: { template_id: templateId },
|
|
1745
|
+
body: params,
|
|
1746
|
+
headers,
|
|
1747
|
+
signal
|
|
1748
|
+
})
|
|
1749
|
+
);
|
|
1750
|
+
}
|
|
1751
|
+
/**
|
|
1752
|
+
* Delete a template and all its versions. The name becomes available for
|
|
1753
|
+
* reuse in the workspace.
|
|
1754
|
+
*
|
|
1755
|
+
* @example
|
|
1756
|
+
* await bird.emailTemplates.delete("emt_abc123");
|
|
1757
|
+
*/
|
|
1758
|
+
delete(templateId, options) {
|
|
1759
|
+
return this.call(
|
|
1760
|
+
"DELETE",
|
|
1761
|
+
options,
|
|
1762
|
+
({ signal, headers }) => deleteEmailTemplate({
|
|
1763
|
+
client: this.client,
|
|
1764
|
+
path: { template_id: templateId },
|
|
1765
|
+
headers,
|
|
1766
|
+
signal
|
|
1767
|
+
})
|
|
1768
|
+
);
|
|
1769
|
+
}
|
|
1770
|
+
/**
|
|
1771
|
+
* Publish the current draft as a new immutable, numbered version and make it
|
|
1772
|
+
* the live version used by sends. The draft stays editable. The draft must
|
|
1773
|
+
* have a subject and a body, or the call throws.
|
|
1774
|
+
*
|
|
1775
|
+
* @example Publish, then send by template
|
|
1776
|
+
* const version = await bird.emailTemplates.publish("emt_abc123");
|
|
1777
|
+
* console.log(version.version_number); // 1, 2, 3…
|
|
1778
|
+
* await bird.email.send({
|
|
1779
|
+
* from: "hello@acme.com",
|
|
1780
|
+
* to: ["alice@example.com"],
|
|
1781
|
+
* template: { id: "emt_abc123", parameters: { first_name: "Alice" } },
|
|
1782
|
+
* });
|
|
1783
|
+
*/
|
|
1784
|
+
publish(templateId, options) {
|
|
1785
|
+
return this.call(
|
|
1786
|
+
"POST",
|
|
1787
|
+
options,
|
|
1788
|
+
({ signal, headers }) => publishEmailTemplate({
|
|
1789
|
+
client: this.client,
|
|
1790
|
+
path: { template_id: templateId },
|
|
1791
|
+
headers,
|
|
1792
|
+
signal
|
|
1793
|
+
})
|
|
1794
|
+
);
|
|
1795
|
+
}
|
|
1796
|
+
/**
|
|
1797
|
+
* List every version of a template — the current draft plus all published
|
|
1798
|
+
* versions — newest first. Returns the full set in one response (`.data`);
|
|
1799
|
+
* this list is not paginated.
|
|
1800
|
+
*
|
|
1801
|
+
* @example
|
|
1802
|
+
* const { data } = await bird.emailTemplates.listVersions("emt_abc123");
|
|
1803
|
+
* for (const v of data) console.log(v.version_number, v.status);
|
|
1804
|
+
*/
|
|
1805
|
+
listVersions(templateId, options) {
|
|
1806
|
+
return this.call(
|
|
1807
|
+
"GET",
|
|
1808
|
+
options,
|
|
1809
|
+
({ signal, headers }) => listEmailTemplateVersions({
|
|
1810
|
+
client: this.client,
|
|
1811
|
+
path: { template_id: templateId },
|
|
1812
|
+
headers,
|
|
1813
|
+
signal
|
|
1814
|
+
})
|
|
1815
|
+
);
|
|
1816
|
+
}
|
|
1817
|
+
/**
|
|
1818
|
+
* Fetch a single version of a template.
|
|
1819
|
+
*
|
|
1820
|
+
* @example
|
|
1821
|
+
* const version = await bird.emailTemplates.getVersion("emt_abc123", "emv_def456");
|
|
1822
|
+
* version.status; // "draft" | "published"
|
|
1823
|
+
*/
|
|
1824
|
+
getVersion(templateId, versionId, options) {
|
|
1825
|
+
return this.call(
|
|
1826
|
+
"GET",
|
|
1827
|
+
options,
|
|
1828
|
+
({ signal, headers }) => getEmailTemplateVersion({
|
|
1829
|
+
client: this.client,
|
|
1830
|
+
path: { template_id: templateId, version_id: versionId },
|
|
1831
|
+
headers,
|
|
1832
|
+
signal
|
|
1833
|
+
})
|
|
1834
|
+
);
|
|
1835
|
+
}
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1838
|
+
// src/resources/sms.ts
|
|
1839
|
+
var SmsResource = class extends Resource {
|
|
1840
|
+
/**
|
|
1841
|
+
* Send one SMS to a single recipient. Supply either `text` (with a `category`)
|
|
1842
|
+
* or a stored `template` (by `id` or `alias`, with its `parameters`). The
|
|
1843
|
+
* result is `accepted`, not yet delivered — read it back with `get` to confirm.
|
|
1844
|
+
*
|
|
1845
|
+
* @example Send free text
|
|
1846
|
+
* const msg = await bird.sms.send({
|
|
1847
|
+
* to: "+15551234567",
|
|
1848
|
+
* text: "Your verification code is 123456.",
|
|
1849
|
+
* category: "authentication",
|
|
1850
|
+
* });
|
|
1851
|
+
* console.log(msg.id, msg.status);
|
|
1852
|
+
*
|
|
1853
|
+
* @example Send by template
|
|
1854
|
+
* await bird.sms.send({
|
|
1855
|
+
* to: "+15551234567",
|
|
1856
|
+
* template: { alias: "bird_otp_verification", parameters: { code: "123456" } },
|
|
1857
|
+
* });
|
|
1858
|
+
*/
|
|
1859
|
+
send(params, options) {
|
|
1860
|
+
return this.call(
|
|
1861
|
+
"POST",
|
|
1862
|
+
options,
|
|
1863
|
+
({ signal, headers }) => createSmsMessage({ client: this.client, body: params, headers, signal })
|
|
1864
|
+
);
|
|
1865
|
+
}
|
|
1866
|
+
/**
|
|
1867
|
+
* Send up to 100 independent SMS messages in one call. Each item is a full send
|
|
1868
|
+
* (free text or template); all items are validated before any are queued.
|
|
1869
|
+
*
|
|
1870
|
+
* @example
|
|
1871
|
+
* const result = await bird.sms.sendBatch([
|
|
1872
|
+
* { to: "+15551111111", text: "Hi Alice!", category: "marketing" },
|
|
1873
|
+
* { to: "+15552222222", text: "Hi Bob!", category: "marketing" },
|
|
1874
|
+
* ]);
|
|
1875
|
+
*/
|
|
1876
|
+
sendBatch(params, options) {
|
|
1877
|
+
return this.call(
|
|
1878
|
+
"POST",
|
|
1879
|
+
options,
|
|
1880
|
+
({ signal, headers }) => createSmsMessageBatch({
|
|
1881
|
+
client: this.client,
|
|
1882
|
+
body: params,
|
|
1883
|
+
headers,
|
|
1884
|
+
signal
|
|
1885
|
+
})
|
|
1886
|
+
);
|
|
1887
|
+
}
|
|
1888
|
+
/**
|
|
1889
|
+
* Fetch a single SMS message: its current delivery status, segment breakdown,
|
|
1890
|
+
* cost, and failure detail if it failed.
|
|
1891
|
+
*
|
|
1892
|
+
* @example
|
|
1893
|
+
* const msg = await bird.sms.get("sms_abc123");
|
|
1894
|
+
* msg.status; // "accepted" | "delivered" | …
|
|
1895
|
+
*/
|
|
1896
|
+
get(messageId, options) {
|
|
1897
|
+
return this.call(
|
|
1898
|
+
"GET",
|
|
1899
|
+
options,
|
|
1900
|
+
({ signal, headers }) => getSmsMessage({
|
|
1901
|
+
client: this.client,
|
|
1902
|
+
path: { message_id: messageId },
|
|
1903
|
+
headers,
|
|
1904
|
+
signal
|
|
1905
|
+
})
|
|
1906
|
+
);
|
|
1907
|
+
}
|
|
1908
|
+
/**
|
|
1909
|
+
* List SMS messages, newest first. `await` resolves the first page; `for await`
|
|
1910
|
+
* walks every message across all pages. Filter by direction, status, category,
|
|
1911
|
+
* recipient, sender, or tag.
|
|
1912
|
+
*
|
|
1913
|
+
* @example
|
|
1914
|
+
* for await (const msg of bird.sms.list({ direction: "outbound" })) {
|
|
1915
|
+
* console.log(msg.id, msg.status);
|
|
1916
|
+
* }
|
|
1917
|
+
*/
|
|
1918
|
+
list(query, options) {
|
|
1919
|
+
return this.paginated(
|
|
1920
|
+
"GET",
|
|
1921
|
+
options,
|
|
1922
|
+
({ signal, headers }, cursor) => listSmsMessages({
|
|
1923
|
+
client: this.client,
|
|
1924
|
+
query: { ...query, starting_after: cursor ?? query?.starting_after },
|
|
1925
|
+
headers,
|
|
1926
|
+
signal
|
|
1927
|
+
})
|
|
1928
|
+
);
|
|
1929
|
+
}
|
|
1930
|
+
};
|
|
1931
|
+
|
|
1932
|
+
// src/resources/smsTemplates.ts
|
|
1933
|
+
var SmsTemplatesResource = class extends Resource {
|
|
1934
|
+
/**
|
|
1935
|
+
* List the SMS templates available to the workspace — Bird's built-in
|
|
1936
|
+
* templates plus any the workspace authored. The catalogue is small and
|
|
1937
|
+
* returned in full (`.data`); this list is not paginated. Filter by `scope`,
|
|
1938
|
+
* `category`, or `locale` (a BCP-47 language tag).
|
|
1939
|
+
*
|
|
1940
|
+
* @example List the built-in templates
|
|
1941
|
+
* const { data } = await bird.smsTemplates.list({ scope: "system" });
|
|
1942
|
+
* for (const tpl of data) console.log(tpl.id, tpl.name);
|
|
1943
|
+
*/
|
|
1944
|
+
list(query, options) {
|
|
1945
|
+
return this.call(
|
|
1946
|
+
"GET",
|
|
1947
|
+
options,
|
|
1948
|
+
({ signal, headers }) => listSmsTemplates({
|
|
1949
|
+
client: this.client,
|
|
1950
|
+
query,
|
|
1951
|
+
headers,
|
|
1952
|
+
signal
|
|
1953
|
+
})
|
|
1954
|
+
);
|
|
1955
|
+
}
|
|
1956
|
+
/**
|
|
1957
|
+
* Fetch a single SMS template by its alias or id, including its body and the
|
|
1958
|
+
* variables it expects.
|
|
1959
|
+
*
|
|
1960
|
+
* @example
|
|
1961
|
+
* const tpl = await bird.smsTemplates.get("bird_otp_verification");
|
|
1962
|
+
* console.log(tpl.body, tpl.variables);
|
|
1963
|
+
*/
|
|
1964
|
+
get(templateRef, options) {
|
|
1965
|
+
return this.call(
|
|
1966
|
+
"GET",
|
|
1967
|
+
options,
|
|
1968
|
+
({ signal, headers }) => getSmsTemplate({
|
|
1969
|
+
client: this.client,
|
|
1970
|
+
path: { template_ref: templateRef },
|
|
1971
|
+
headers,
|
|
1972
|
+
signal
|
|
1973
|
+
})
|
|
1974
|
+
);
|
|
1975
|
+
}
|
|
1976
|
+
};
|
|
1474
1977
|
var WebhooksResource = class {
|
|
1475
1978
|
#secret;
|
|
1476
1979
|
constructor(config) {
|
|
@@ -1575,6 +2078,12 @@ var BirdClient = class {
|
|
|
1575
2078
|
#headers;
|
|
1576
2079
|
/** The email channel — `bird.email.send(...)`, `.get(...)`, `.list(...)`. */
|
|
1577
2080
|
email;
|
|
2081
|
+
/** Email templates — `bird.emailTemplates.create(...)`, `.list(...)`, `.publish(...)`, … */
|
|
2082
|
+
emailTemplates;
|
|
2083
|
+
/** The SMS channel — `bird.sms.send(...)`, `.get(...)`, `.list(...)`. */
|
|
2084
|
+
sms;
|
|
2085
|
+
/** SMS templates — `bird.smsTemplates.list(...)`, `.get(...)`. */
|
|
2086
|
+
smsTemplates;
|
|
1578
2087
|
/** Webhooks — `bird.webhooks.unwrap(payload, headers)` verifies an inbound delivery. */
|
|
1579
2088
|
webhooks;
|
|
1580
2089
|
constructor(options) {
|
|
@@ -1584,12 +2093,12 @@ var BirdClient = class {
|
|
|
1584
2093
|
this.#headers = {
|
|
1585
2094
|
...opts.defaultHeaders,
|
|
1586
2095
|
Authorization: `Bearer ${opts.apiKey}`,
|
|
1587
|
-
"User-Agent": `bird-sdk-js/${"0.
|
|
2096
|
+
"User-Agent": `bird-sdk-js/${"0.3.0"}`,
|
|
1588
2097
|
// Bird-* client-identity headers (ADR-0074): the API attributes the SDK
|
|
1589
2098
|
// surface from these, not the User-Agent. Edge-safe, so no os/arch/runtime
|
|
1590
2099
|
// (those need Node globals this SDK must not touch); surface + version only.
|
|
1591
2100
|
"Bird-Surface": "sdk-js",
|
|
1592
|
-
"Bird-Version": "0.
|
|
2101
|
+
"Bird-Version": "0.3.0"
|
|
1593
2102
|
};
|
|
1594
2103
|
this.#client = createClient(
|
|
1595
2104
|
createConfig({
|
|
@@ -1607,6 +2116,9 @@ var BirdClient = class {
|
|
|
1607
2116
|
this.#client,
|
|
1608
2117
|
opts.email
|
|
1609
2118
|
);
|
|
2119
|
+
this.emailTemplates = new EmailTemplatesResource(this.core, this.#client);
|
|
2120
|
+
this.sms = new SmsResource(this.core, this.#client);
|
|
2121
|
+
this.smsTemplates = new SmsTemplatesResource(this.core, this.#client);
|
|
1610
2122
|
this.webhooks = new WebhooksResource(opts.webhooks);
|
|
1611
2123
|
}
|
|
1612
2124
|
/**
|