silon-sdk 0.2.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 +560 -0
- package/dist/client.d.ts +141 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +249 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +117 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/utils.d.ts +24 -0
- package/dist/internal/utils.d.ts.map +1 -0
- package/dist/internal/utils.js +58 -0
- package/dist/internal/utils.js.map +1 -0
- package/dist/pagination.d.ts +52 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +80 -0
- package/dist/pagination.js.map +1 -0
- package/dist/resources/auth.d.ts +20 -0
- package/dist/resources/auth.d.ts.map +1 -0
- package/dist/resources/auth.js +41 -0
- package/dist/resources/auth.js.map +1 -0
- package/dist/resources/broadcasts.d.ts +63 -0
- package/dist/resources/broadcasts.d.ts.map +1 -0
- package/dist/resources/broadcasts.js +103 -0
- package/dist/resources/broadcasts.js.map +1 -0
- package/dist/resources/bulk.d.ts +60 -0
- package/dist/resources/bulk.d.ts.map +1 -0
- package/dist/resources/bulk.js +137 -0
- package/dist/resources/bulk.js.map +1 -0
- package/dist/resources/client-groups.d.ts +50 -0
- package/dist/resources/client-groups.d.ts.map +1 -0
- package/dist/resources/client-groups.js +97 -0
- package/dist/resources/client-groups.js.map +1 -0
- package/dist/resources/clients.d.ts +51 -0
- package/dist/resources/clients.d.ts.map +1 -0
- package/dist/resources/clients.js +99 -0
- package/dist/resources/clients.js.map +1 -0
- package/dist/resources/events.d.ts +22 -0
- package/dist/resources/events.d.ts.map +1 -0
- package/dist/resources/events.js +38 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/resources/messages.d.ts +99 -0
- package/dist/resources/messages.d.ts.map +1 -0
- package/dist/resources/messages.js +167 -0
- package/dist/resources/messages.js.map +1 -0
- package/dist/resources/otp.d.ts +26 -0
- package/dist/resources/otp.d.ts.map +1 -0
- package/dist/resources/otp.js +40 -0
- package/dist/resources/otp.js.map +1 -0
- package/dist/resources/profile.d.ts +18 -0
- package/dist/resources/profile.d.ts.map +1 -0
- package/dist/resources/profile.js +40 -0
- package/dist/resources/profile.js.map +1 -0
- package/dist/resources/push.d.ts +45 -0
- package/dist/resources/push.d.ts.map +1 -0
- package/dist/resources/push.js +103 -0
- package/dist/resources/push.js.map +1 -0
- package/dist/resources/reports.d.ts +44 -0
- package/dist/resources/reports.d.ts.map +1 -0
- package/dist/resources/reports.js +127 -0
- package/dist/resources/reports.js.map +1 -0
- package/dist/resources/suppressions.d.ts +54 -0
- package/dist/resources/suppressions.d.ts.map +1 -0
- package/dist/resources/suppressions.js +79 -0
- package/dist/resources/suppressions.js.map +1 -0
- package/dist/resources/templates.d.ts +58 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +96 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/resources/webhook-endpoints.d.ts +54 -0
- package/dist/resources/webhook-endpoints.d.ts.map +1 -0
- package/dist/resources/webhook-endpoints.js +96 -0
- package/dist/resources/webhook-endpoints.js.map +1 -0
- package/dist/resources/whatsapp-templates.d.ts +20 -0
- package/dist/resources/whatsapp-templates.d.ts.map +1 -0
- package/dist/resources/whatsapp-templates.js +33 -0
- package/dist/resources/whatsapp-templates.js.map +1 -0
- package/dist/types/auth.d.ts +34 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +8 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/broadcasts.d.ts +174 -0
- package/dist/types/broadcasts.d.ts.map +1 -0
- package/dist/types/broadcasts.js +8 -0
- package/dist/types/broadcasts.js.map +1 -0
- package/dist/types/bulk.d.ts +161 -0
- package/dist/types/bulk.d.ts.map +1 -0
- package/dist/types/bulk.js +8 -0
- package/dist/types/bulk.js.map +1 -0
- package/dist/types/client-groups.d.ts +52 -0
- package/dist/types/client-groups.d.ts.map +1 -0
- package/dist/types/client-groups.js +8 -0
- package/dist/types/client-groups.js.map +1 -0
- package/dist/types/clients.d.ts +64 -0
- package/dist/types/clients.d.ts.map +1 -0
- package/dist/types/clients.js +8 -0
- package/dist/types/clients.js.map +1 -0
- package/dist/types/events.d.ts +64 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +9 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/messages.d.ts +334 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +8 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/otp.d.ts +61 -0
- package/dist/types/otp.d.ts.map +1 -0
- package/dist/types/otp.js +8 -0
- package/dist/types/otp.js.map +1 -0
- package/dist/types/profile.d.ts +37 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +8 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/types/push.d.ts +90 -0
- package/dist/types/push.d.ts.map +1 -0
- package/dist/types/push.js +8 -0
- package/dist/types/push.js.map +1 -0
- package/dist/types/reports.d.ts +109 -0
- package/dist/types/reports.d.ts.map +1 -0
- package/dist/types/reports.js +8 -0
- package/dist/types/reports.js.map +1 -0
- package/dist/types/suppressions.d.ts +72 -0
- package/dist/types/suppressions.d.ts.map +1 -0
- package/dist/types/suppressions.js +8 -0
- package/dist/types/suppressions.js.map +1 -0
- package/dist/types/templates.d.ts +96 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +9 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/webhook-endpoints.d.ts +123 -0
- package/dist/types/webhook-endpoints.d.ts.map +1 -0
- package/dist/types/webhook-endpoints.js +8 -0
- package/dist/types/webhook-endpoints.js.map +1 -0
- package/dist/types/whatsapp-templates.d.ts +59 -0
- package/dist/types/whatsapp-templates.d.ts.map +1 -0
- package/dist/types/whatsapp-templates.js +8 -0
- package/dist/types/whatsapp-templates.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks.d.ts +48 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +97 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/resources/push.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAEhB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAc1B,6EAA6E;AAC7E,qBAAa,IAAI;;gBAGH,MAAM,EAAE,KAAK;IAIzB;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC;IAMpF;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAU5E;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYhF,2EAA2E;IACrE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAOnE;;;;;;;;;OASG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAU9B;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAcjF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/** The Push resource — device registration and native notification feeds. */
|
|
2
|
+
import { SilonError } from "../errors.js";
|
|
3
|
+
import { dropNull, emitDeprecationWarning } from "../internal/utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the legacy notification-feed path, validating `platform`
|
|
6
|
+
* client-side (before any deprecation warning or HTTP call — SPEC 7).
|
|
7
|
+
*/
|
|
8
|
+
function notificationsPath(slug, platform) {
|
|
9
|
+
const encoded = encodeURIComponent(slug);
|
|
10
|
+
if (platform === "android")
|
|
11
|
+
return `/api/v1/push/android/${encoded}/`;
|
|
12
|
+
if (platform === "ios")
|
|
13
|
+
return `/api/v1/push/ios/${encoded}/`;
|
|
14
|
+
if (platform === null || platform === undefined)
|
|
15
|
+
return `/api/v1/push/list/${encoded}/`;
|
|
16
|
+
throw new SilonError("platform must be 'android', 'ios' or omitted (combined list).");
|
|
17
|
+
}
|
|
18
|
+
/** `client.push` — mobile / web push registration and notification feeds. */
|
|
19
|
+
export class Push {
|
|
20
|
+
#client;
|
|
21
|
+
constructor(client) {
|
|
22
|
+
this.#client = client;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Register an Android device token for the app `slug`
|
|
26
|
+
* (`POST /api/v1/subscribe/android/`).
|
|
27
|
+
*/
|
|
28
|
+
async subscribeAndroid(params) {
|
|
29
|
+
const body = dropNull({ slug: params.slug, token: params.token });
|
|
30
|
+
const data = await this.#client.request("POST", "/api/v1/subscribe/android/", { body });
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register an iOS device token (`POST /api/v1/subscribe/ios/`).
|
|
35
|
+
* `environment`: `"dev"` or `"prod"`.
|
|
36
|
+
*/
|
|
37
|
+
async subscribeIos(params) {
|
|
38
|
+
const body = dropNull({
|
|
39
|
+
slug: params.slug,
|
|
40
|
+
token: params.token,
|
|
41
|
+
environment: params.environment,
|
|
42
|
+
});
|
|
43
|
+
const data = await this.#client.request("POST", "/api/v1/subscribe/ios/", { body });
|
|
44
|
+
return data;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register (or prune, with `keep_devices: false`) a client's devices
|
|
48
|
+
* (`POST /api/v1/push/client/`).
|
|
49
|
+
*/
|
|
50
|
+
async upsertDevices(params) {
|
|
51
|
+
const body = dropNull({
|
|
52
|
+
client_id: params.client_id,
|
|
53
|
+
slug: params.slug,
|
|
54
|
+
device_type: params.device_type,
|
|
55
|
+
device_id: params.device_id,
|
|
56
|
+
keep_devices: params.keep_devices,
|
|
57
|
+
});
|
|
58
|
+
const data = await this.#client.request("POST", "/api/v1/push/client/", { body });
|
|
59
|
+
return data;
|
|
60
|
+
}
|
|
61
|
+
/** Mark a native push notification as read (`POST /api/v1/push/read/`). */
|
|
62
|
+
async markRead(params) {
|
|
63
|
+
const data = await this.#client.request("POST", "/api/v1/push/read/", {
|
|
64
|
+
body: { slug: params.slug },
|
|
65
|
+
});
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* List native push notifications (`GET /api/v1/push/android/{slug}/`,
|
|
70
|
+
* `/api/v1/push/ios/{slug}/`, or the combined `/api/v1/push/list/{slug}/`
|
|
71
|
+
* when `platform` is omitted) — a bare JSON array.
|
|
72
|
+
*
|
|
73
|
+
* @deprecated The native push notification list endpoints are legacy;
|
|
74
|
+
* calling this emits a one-time `DeprecationWarning`.
|
|
75
|
+
* @throws {SilonError} when `platform` is anything other than
|
|
76
|
+
* `"android"`, `"ios"` or omitted.
|
|
77
|
+
*/
|
|
78
|
+
async listNotifications(slug, options = {}) {
|
|
79
|
+
const path = notificationsPath(slug, options.platform);
|
|
80
|
+
emitDeprecationWarning("SILON_PUSH_LIST_NOTIFICATIONS", "silon: push.listNotifications() uses the deprecated native push notification list endpoints.");
|
|
81
|
+
const data = await this.#client.request("GET", path);
|
|
82
|
+
return data;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Register a browser subscription for a client
|
|
86
|
+
* (`POST /api/v1/webpush/client/`).
|
|
87
|
+
*
|
|
88
|
+
* @deprecated Legacy endpoint — register web push subscriptions through
|
|
89
|
+
* the widget instead. Calling this emits a one-time `DeprecationWarning`.
|
|
90
|
+
*/
|
|
91
|
+
async subscribeWeb(params) {
|
|
92
|
+
emitDeprecationWarning("SILON_PUSH_SUBSCRIBE_WEB", "silon: push.subscribeWeb() (POST /api/v1/webpush/client/) is a legacy endpoint; " +
|
|
93
|
+
"register web push subscriptions through the widget instead.");
|
|
94
|
+
const body = dropNull({
|
|
95
|
+
client_id: params.client_id,
|
|
96
|
+
slug: params.slug,
|
|
97
|
+
subscription_info: params.subscription_info,
|
|
98
|
+
});
|
|
99
|
+
const data = await this.#client.request("POST", "/api/v1/webpush/client/", { body });
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/resources/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** The Reports resource — activity reports and provider balances. */
|
|
2
|
+
import type { Silon } from "../client.js";
|
|
3
|
+
import type { ProviderBalance, Report, ReportAwsUsageParams, ReportChannelsParams, ReportClientsParams, ReportDateRangeParams, ReportMessagesParams, ReportSpecificBulksParams, ReportSubscriptionsParams } from "../types/reports.js";
|
|
4
|
+
/** `client.reports` — activity reports (POST endpoints share a date-range filter). */
|
|
5
|
+
export declare class Reports {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(client: Silon);
|
|
8
|
+
/**
|
|
9
|
+
* Messages activity (`POST /api/v1/reports/messages/`). `report_type`:
|
|
10
|
+
* `"phone"` (SMS/TTS/WhatsApp), `"email"`, `"mobile"` (push) or `"web"`
|
|
11
|
+
* (web push).
|
|
12
|
+
*/
|
|
13
|
+
messages(params: ReportMessagesParams): Promise<Report>;
|
|
14
|
+
/** Per-channel activity (`POST /api/v1/reports/channels/`). */
|
|
15
|
+
channels(params?: ReportChannelsParams): Promise<Report>;
|
|
16
|
+
/** Contact activity (`POST /api/v1/reports/clients/`). */
|
|
17
|
+
clients(params?: ReportClientsParams): Promise<Report>;
|
|
18
|
+
/** Dashboard-user activity (`POST /api/v1/reports/users/`). */
|
|
19
|
+
users(params?: ReportDateRangeParams): Promise<Report>;
|
|
20
|
+
/** Bulk-batch activity (`POST /api/v1/reports/bulks/`). */
|
|
21
|
+
bulks(params?: ReportDateRangeParams): Promise<Report>;
|
|
22
|
+
/**
|
|
23
|
+
* Per-recipient rows of one bulk batch
|
|
24
|
+
* (`POST /api/v1/reports/specific-bulks/`).
|
|
25
|
+
*/
|
|
26
|
+
specificBulks(params: ReportSpecificBulksParams): Promise<Report>;
|
|
27
|
+
/**
|
|
28
|
+
* Push-subscription activity (`POST /api/v1/reports/subscriptions/`).
|
|
29
|
+
* `report_type`: `"mobile"` or `"web"`.
|
|
30
|
+
*/
|
|
31
|
+
subscriptions(params: ReportSubscriptionsParams): Promise<Report>;
|
|
32
|
+
/**
|
|
33
|
+
* AWS end-user-messaging usage
|
|
34
|
+
* (`POST /api/v1/reports/aws-usage-statistics/`). `page` travels as a
|
|
35
|
+
* query parameter — the request has no body.
|
|
36
|
+
*/
|
|
37
|
+
awsUsage(params?: ReportAwsUsageParams): Promise<Report>;
|
|
38
|
+
/**
|
|
39
|
+
* Upstream balance for a provider account
|
|
40
|
+
* (`GET /api/v1/reports/balance/{slug}/`).
|
|
41
|
+
*/
|
|
42
|
+
balance(slug: string): Promise<ProviderBalance>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=reports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/resources/reports.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EACV,eAAe,EACf,MAAM,EACN,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAI7B,sFAAsF;AACtF,qBAAa,OAAO;;gBAGN,MAAM,EAAE,KAAK;IAIzB;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAe7D,+DAA+D;IACzD,QAAQ,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE,0DAA0D;IACpD,OAAO,CAAC,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE,+DAA+D;IACzD,KAAK,CAAC,MAAM,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE,2DAA2D;IACrD,KAAK,CAAC,MAAM,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAcvE;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAcvE;;;;OAIG;IACG,QAAQ,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlE;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAOtD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/** The Reports resource — activity reports and provider balances. */
|
|
2
|
+
import { dropNull } from "../internal/utils.js";
|
|
3
|
+
const REPORTS_PATH = "/api/v1/reports";
|
|
4
|
+
/** `client.reports` — activity reports (POST endpoints share a date-range filter). */
|
|
5
|
+
export class Reports {
|
|
6
|
+
#client;
|
|
7
|
+
constructor(client) {
|
|
8
|
+
this.#client = client;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Messages activity (`POST /api/v1/reports/messages/`). `report_type`:
|
|
12
|
+
* `"phone"` (SMS/TTS/WhatsApp), `"email"`, `"mobile"` (push) or `"web"`
|
|
13
|
+
* (web push).
|
|
14
|
+
*/
|
|
15
|
+
async messages(params) {
|
|
16
|
+
const body = dropNull({
|
|
17
|
+
report_type: params.report_type,
|
|
18
|
+
date_from: params.date_from,
|
|
19
|
+
date_to: params.date_to,
|
|
20
|
+
search: params.search,
|
|
21
|
+
device: params.device,
|
|
22
|
+
status: params.status,
|
|
23
|
+
template: params.template,
|
|
24
|
+
source: params.source,
|
|
25
|
+
});
|
|
26
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/messages/`, { body });
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
/** Per-channel activity (`POST /api/v1/reports/channels/`). */
|
|
30
|
+
async channels(params = {}) {
|
|
31
|
+
const body = dropNull({
|
|
32
|
+
date_from: params.date_from,
|
|
33
|
+
date_to: params.date_to,
|
|
34
|
+
channel_name: params.channel_name,
|
|
35
|
+
});
|
|
36
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/channels/`, { body });
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
/** Contact activity (`POST /api/v1/reports/clients/`). */
|
|
40
|
+
async clients(params = {}) {
|
|
41
|
+
const body = dropNull({
|
|
42
|
+
date_from: params.date_from,
|
|
43
|
+
date_to: params.date_to,
|
|
44
|
+
search: params.search,
|
|
45
|
+
language: params.language,
|
|
46
|
+
device: params.device,
|
|
47
|
+
web_subscription: params.web_subscription,
|
|
48
|
+
});
|
|
49
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/clients/`, { body });
|
|
50
|
+
return data;
|
|
51
|
+
}
|
|
52
|
+
/** Dashboard-user activity (`POST /api/v1/reports/users/`). */
|
|
53
|
+
async users(params = {}) {
|
|
54
|
+
const body = dropNull({
|
|
55
|
+
date_from: params.date_from,
|
|
56
|
+
date_to: params.date_to,
|
|
57
|
+
search: params.search,
|
|
58
|
+
});
|
|
59
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/users/`, { body });
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
/** Bulk-batch activity (`POST /api/v1/reports/bulks/`). */
|
|
63
|
+
async bulks(params = {}) {
|
|
64
|
+
const body = dropNull({
|
|
65
|
+
date_from: params.date_from,
|
|
66
|
+
date_to: params.date_to,
|
|
67
|
+
search: params.search,
|
|
68
|
+
});
|
|
69
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/bulks/`, { body });
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Per-recipient rows of one bulk batch
|
|
74
|
+
* (`POST /api/v1/reports/specific-bulks/`).
|
|
75
|
+
*/
|
|
76
|
+
async specificBulks(params) {
|
|
77
|
+
const body = dropNull({
|
|
78
|
+
bulks_file: params.bulks_file,
|
|
79
|
+
date_from: params.date_from,
|
|
80
|
+
date_to: params.date_to,
|
|
81
|
+
search: params.search,
|
|
82
|
+
mobile_app: params.mobile_app,
|
|
83
|
+
web_app: params.web_app,
|
|
84
|
+
status: params.status,
|
|
85
|
+
});
|
|
86
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/specific-bulks/`, { body });
|
|
87
|
+
return data;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Push-subscription activity (`POST /api/v1/reports/subscriptions/`).
|
|
91
|
+
* `report_type`: `"mobile"` or `"web"`.
|
|
92
|
+
*/
|
|
93
|
+
async subscriptions(params) {
|
|
94
|
+
const body = dropNull({
|
|
95
|
+
report_type: params.report_type,
|
|
96
|
+
date_from: params.date_from,
|
|
97
|
+
date_to: params.date_to,
|
|
98
|
+
search: params.search,
|
|
99
|
+
mobile_app: params.mobile_app,
|
|
100
|
+
web_app: params.web_app,
|
|
101
|
+
device_type: params.device_type,
|
|
102
|
+
});
|
|
103
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/subscriptions/`, { body });
|
|
104
|
+
return data;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* AWS end-user-messaging usage
|
|
108
|
+
* (`POST /api/v1/reports/aws-usage-statistics/`). `page` travels as a
|
|
109
|
+
* query parameter — the request has no body.
|
|
110
|
+
*/
|
|
111
|
+
async awsUsage(params = {}) {
|
|
112
|
+
const query = dropNull({ page: params.page });
|
|
113
|
+
const data = await this.#client.request("POST", `${REPORTS_PATH}/aws-usage-statistics/`, {
|
|
114
|
+
query,
|
|
115
|
+
});
|
|
116
|
+
return data;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Upstream balance for a provider account
|
|
120
|
+
* (`GET /api/v1/reports/balance/{slug}/`).
|
|
121
|
+
*/
|
|
122
|
+
async balance(slug) {
|
|
123
|
+
const data = await this.#client.request("GET", `${REPORTS_PATH}/balance/${encodeURIComponent(slug)}/`);
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/resources/reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** The Suppressions resource — the workspace do-not-contact list. */
|
|
2
|
+
import type { Silon } from "../client.js";
|
|
3
|
+
import { Page } from "../pagination.js";
|
|
4
|
+
import type { Suppression, SuppressionCreateParams, SuppressionListParams } from "../types/suppressions.js";
|
|
5
|
+
/**
|
|
6
|
+
* `client.suppressions` — manage the do-not-contact list.
|
|
7
|
+
*
|
|
8
|
+
* A suppression matches sends on (address, channel), or on the address alone
|
|
9
|
+
* when `channel` is null (all channels). Enforcement is automatic on every
|
|
10
|
+
* send path: a single-recipient send (`messages.send` with `to`, `otp.send`)
|
|
11
|
+
* to a suppressed address rejects `422 recipient-suppressed`, while fan-outs
|
|
12
|
+
* (broadcasts, batches, legacy bulk) silently SKIP suppressed recipients and
|
|
13
|
+
* itemise them in the envelope's `skipped.suppressed` count.
|
|
14
|
+
*
|
|
15
|
+
* Rows are livemode-scoped: `sk_test_` keys list, manage and enforce
|
|
16
|
+
* test-mode suppressions only, live keys live ones.
|
|
17
|
+
*/
|
|
18
|
+
export declare class Suppressions {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(client: Silon);
|
|
21
|
+
/**
|
|
22
|
+
* List suppressions, cursor-paginated, newest first
|
|
23
|
+
* (`GET /api/v1/suppressions/`; scope `suppressions:read`). Filter with
|
|
24
|
+
* `address`, `channel` and/or `reason`.
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* const page = await client.suppressions.list({ reason: "stop" });
|
|
28
|
+
* for await (const row of page.autoPaging()) { ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
list(params?: SuppressionListParams): Promise<Page<Suppression>>;
|
|
32
|
+
/**
|
|
33
|
+
* Add an address to the do-not-contact list
|
|
34
|
+
* (`POST /api/v1/suppressions/`; scope `suppressions:write`).
|
|
35
|
+
*
|
|
36
|
+
* `address` is an E.164 phone number or an email. Omit `channel` to
|
|
37
|
+
* suppress across every channel, or pass one (e.g. `"sms"`) to scope the
|
|
38
|
+
* row. `reason` defaults to `"manual"`.
|
|
39
|
+
*
|
|
40
|
+
* Create is IDEMPOTENT BY NATURE: a new row answers `201`; re-creating the
|
|
41
|
+
* same (address, channel) pair in the same mode answers `200` with the
|
|
42
|
+
* EXISTING suppression object — never an error, so no `Idempotency-Key`
|
|
43
|
+
* header is sent (none is needed).
|
|
44
|
+
*/
|
|
45
|
+
create(params: SuppressionCreateParams): Promise<Suppression>;
|
|
46
|
+
/**
|
|
47
|
+
* Remove an address from the do-not-contact list
|
|
48
|
+
* (`DELETE /api/v1/suppressions/{id}/`, 204; scope `suppressions:write`).
|
|
49
|
+
* Sends to it are accepted again immediately. An unknown — or
|
|
50
|
+
* mode-mismatched — id rejects with `404`.
|
|
51
|
+
*/
|
|
52
|
+
delete(suppressionId: string): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=suppressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/resources/suppressions.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAuB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAKlC;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;;gBAGX,MAAM,EAAE,KAAK;IAIzB;;;;;;;;;OASG;IACG,IAAI,CAAC,MAAM,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAc1E;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAUnE;;;;;OAKG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMnD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** The Suppressions resource — the workspace do-not-contact list. */
|
|
2
|
+
import { dropNull } from "../internal/utils.js";
|
|
3
|
+
import { Page } from "../pagination.js";
|
|
4
|
+
// NOTE: trailing slashes on this resource (SPEC 7).
|
|
5
|
+
const SUPPRESSIONS_PATH = "/api/v1/suppressions/";
|
|
6
|
+
/**
|
|
7
|
+
* `client.suppressions` — manage the do-not-contact list.
|
|
8
|
+
*
|
|
9
|
+
* A suppression matches sends on (address, channel), or on the address alone
|
|
10
|
+
* when `channel` is null (all channels). Enforcement is automatic on every
|
|
11
|
+
* send path: a single-recipient send (`messages.send` with `to`, `otp.send`)
|
|
12
|
+
* to a suppressed address rejects `422 recipient-suppressed`, while fan-outs
|
|
13
|
+
* (broadcasts, batches, legacy bulk) silently SKIP suppressed recipients and
|
|
14
|
+
* itemise them in the envelope's `skipped.suppressed` count.
|
|
15
|
+
*
|
|
16
|
+
* Rows are livemode-scoped: `sk_test_` keys list, manage and enforce
|
|
17
|
+
* test-mode suppressions only, live keys live ones.
|
|
18
|
+
*/
|
|
19
|
+
export class Suppressions {
|
|
20
|
+
#client;
|
|
21
|
+
constructor(client) {
|
|
22
|
+
this.#client = client;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* List suppressions, cursor-paginated, newest first
|
|
26
|
+
* (`GET /api/v1/suppressions/`; scope `suppressions:read`). Filter with
|
|
27
|
+
* `address`, `channel` and/or `reason`.
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* const page = await client.suppressions.list({ reason: "stop" });
|
|
31
|
+
* for await (const row of page.autoPaging()) { ... }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
async list(params = {}) {
|
|
35
|
+
const query = dropNull({
|
|
36
|
+
address: params.address,
|
|
37
|
+
channel: params.channel,
|
|
38
|
+
reason: params.reason,
|
|
39
|
+
cursor: params.cursor,
|
|
40
|
+
limit: params.limit,
|
|
41
|
+
});
|
|
42
|
+
const data = (await this.#client.request("GET", SUPPRESSIONS_PATH, {
|
|
43
|
+
query,
|
|
44
|
+
}));
|
|
45
|
+
return new Page(this.#client, SUPPRESSIONS_PATH, query, data);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Add an address to the do-not-contact list
|
|
49
|
+
* (`POST /api/v1/suppressions/`; scope `suppressions:write`).
|
|
50
|
+
*
|
|
51
|
+
* `address` is an E.164 phone number or an email. Omit `channel` to
|
|
52
|
+
* suppress across every channel, or pass one (e.g. `"sms"`) to scope the
|
|
53
|
+
* row. `reason` defaults to `"manual"`.
|
|
54
|
+
*
|
|
55
|
+
* Create is IDEMPOTENT BY NATURE: a new row answers `201`; re-creating the
|
|
56
|
+
* same (address, channel) pair in the same mode answers `200` with the
|
|
57
|
+
* EXISTING suppression object — never an error, so no `Idempotency-Key`
|
|
58
|
+
* header is sent (none is needed).
|
|
59
|
+
*/
|
|
60
|
+
async create(params) {
|
|
61
|
+
const body = dropNull({
|
|
62
|
+
address: params.address,
|
|
63
|
+
channel: params.channel,
|
|
64
|
+
reason: params.reason,
|
|
65
|
+
});
|
|
66
|
+
const data = await this.#client.request("POST", SUPPRESSIONS_PATH, { body });
|
|
67
|
+
return data;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Remove an address from the do-not-contact list
|
|
71
|
+
* (`DELETE /api/v1/suppressions/{id}/`, 204; scope `suppressions:write`).
|
|
72
|
+
* Sends to it are accepted again immediately. An unknown — or
|
|
73
|
+
* mode-mismatched — id rejects with `404`.
|
|
74
|
+
*/
|
|
75
|
+
async delete(suppressionId) {
|
|
76
|
+
await this.#client.request("DELETE", `${SUPPRESSIONS_PATH}${encodeURIComponent(suppressionId)}/`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=suppressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/resources/suppressions.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAGrE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAuB,MAAM,kBAAkB,CAAC;AAO7D,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,YAAY;IACd,OAAO,CAAQ;IAExB,YAAY,MAAa;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,SAAgC,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAgB,CAAC;QAClB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE;YACjE,KAAK;SACN,CAAC,CAAgC,CAAC;QACnC,OAAO,IAAI,IAAI,CAAc,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,MAAM,CAAC,MAA+B;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAmB,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACxB,QAAQ,EACR,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAC5D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** The Templates resource — slug-keyed message templates with immutable versions. */
|
|
2
|
+
import type { Silon } from "../client.js";
|
|
3
|
+
import { Page } from "../pagination.js";
|
|
4
|
+
import type { TemplateCreateParams, TemplateDetail, TemplateListParams, TemplateRow, TemplateUpdateParams } from "../types/templates.js";
|
|
5
|
+
/**
|
|
6
|
+
* `client.templates` — reusable message templates that sends render for
|
|
7
|
+
* `template: {slug}`.
|
|
8
|
+
*
|
|
9
|
+
* Templates carry an IMMUTABLE version spine: content edits mint a new version
|
|
10
|
+
* (starting at 1) rather than mutating the old one, and a send can pin an
|
|
11
|
+
* older revision via `template: {slug, version: N}` (honoured on every send
|
|
12
|
+
* path — `messages.send`, `broadcasts.create`, batch rows/defaults). Deleting
|
|
13
|
+
* is a soft archive: the slug stays reserved and history survives, but the
|
|
14
|
+
* template reads as MISSING everywhere afterwards.
|
|
15
|
+
*/
|
|
16
|
+
export declare class Templates {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(client: Silon);
|
|
19
|
+
/**
|
|
20
|
+
* List templates, cursor-paginated (`GET /api/v1/templates/`; scope
|
|
21
|
+
* `templates:read`). Filter with `channel` and/or `q` (slug-prefix search).
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const page = await client.templates.list({ q: "welcome" });
|
|
25
|
+
* for await (const row of page.autoPaging()) { ... }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
list(params?: TemplateListParams): Promise<Page<TemplateRow>>;
|
|
29
|
+
/**
|
|
30
|
+
* Create a template (`POST /api/v1/templates/`; scope `templates:write`) —
|
|
31
|
+
* returns the detail at version 1. A duplicate slug (including an archived
|
|
32
|
+
* one) rejects `409 template-exists`.
|
|
33
|
+
*/
|
|
34
|
+
create(params: TemplateCreateParams): Promise<TemplateDetail>;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch one template with its content + version history
|
|
37
|
+
* (`GET /api/v1/templates/{slug}/`; scope `templates:read`). An unknown or
|
|
38
|
+
* archived slug rejects `404 template-not-found`.
|
|
39
|
+
*/
|
|
40
|
+
retrieve(slug: string): Promise<TemplateDetail>;
|
|
41
|
+
/**
|
|
42
|
+
* Partial update (`PATCH /api/v1/templates/{slug}/`; scope
|
|
43
|
+
* `templates:write`). Pass at least one field. Changing a CONTENT field
|
|
44
|
+
* (`subject`, `body`, `body_md`) mints a new immutable version; `channel`
|
|
45
|
+
* is metadata and never bumps the version; a no-op content PATCH mints
|
|
46
|
+
* nothing. An unknown or archived slug rejects `404 template-not-found`.
|
|
47
|
+
*/
|
|
48
|
+
update(slug: string, params?: TemplateUpdateParams): Promise<TemplateDetail>;
|
|
49
|
+
/**
|
|
50
|
+
* Soft-archive a template (`DELETE /api/v1/templates/{slug}/`, 204; scope
|
|
51
|
+
* `templates:write`). The slug stays reserved (re-create rejects
|
|
52
|
+
* `409 template-exists`) and history + delivery-log FKs survive, but the
|
|
53
|
+
* template reads as MISSING everywhere afterwards. An unknown or already
|
|
54
|
+
* archived slug rejects `404 template-not-found`.
|
|
55
|
+
*/
|
|
56
|
+
delete(slug: string): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/resources/templates.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAuB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAK/B;;;;;;;;;;GAUG;AACH,qBAAa,SAAS;;gBAGR,MAAM,EAAE,KAAK;IAIzB;;;;;;;;OAQG;IACG,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAavE;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAYnE;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQrD;;;;;;OAMG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAetF;;;;;;OAMG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM1C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** The Templates resource — slug-keyed message templates with immutable versions. */
|
|
2
|
+
import { dropNull } from "../internal/utils.js";
|
|
3
|
+
import { Page } from "../pagination.js";
|
|
4
|
+
// NOTE: trailing slashes on this resource (SPEC 7; trailing-slash-optional).
|
|
5
|
+
const TEMPLATES_PATH = "/api/v1/templates/";
|
|
6
|
+
/**
|
|
7
|
+
* `client.templates` — reusable message templates that sends render for
|
|
8
|
+
* `template: {slug}`.
|
|
9
|
+
*
|
|
10
|
+
* Templates carry an IMMUTABLE version spine: content edits mint a new version
|
|
11
|
+
* (starting at 1) rather than mutating the old one, and a send can pin an
|
|
12
|
+
* older revision via `template: {slug, version: N}` (honoured on every send
|
|
13
|
+
* path — `messages.send`, `broadcasts.create`, batch rows/defaults). Deleting
|
|
14
|
+
* is a soft archive: the slug stays reserved and history survives, but the
|
|
15
|
+
* template reads as MISSING everywhere afterwards.
|
|
16
|
+
*/
|
|
17
|
+
export class Templates {
|
|
18
|
+
#client;
|
|
19
|
+
constructor(client) {
|
|
20
|
+
this.#client = client;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* List templates, cursor-paginated (`GET /api/v1/templates/`; scope
|
|
24
|
+
* `templates:read`). Filter with `channel` and/or `q` (slug-prefix search).
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* const page = await client.templates.list({ q: "welcome" });
|
|
28
|
+
* for await (const row of page.autoPaging()) { ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
async list(params = {}) {
|
|
32
|
+
const query = dropNull({
|
|
33
|
+
channel: params.channel,
|
|
34
|
+
q: params.q,
|
|
35
|
+
cursor: params.cursor,
|
|
36
|
+
limit: params.limit,
|
|
37
|
+
});
|
|
38
|
+
const data = (await this.#client.request("GET", TEMPLATES_PATH, {
|
|
39
|
+
query,
|
|
40
|
+
}));
|
|
41
|
+
return new Page(this.#client, TEMPLATES_PATH, query, data);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a template (`POST /api/v1/templates/`; scope `templates:write`) —
|
|
45
|
+
* returns the detail at version 1. A duplicate slug (including an archived
|
|
46
|
+
* one) rejects `409 template-exists`.
|
|
47
|
+
*/
|
|
48
|
+
async create(params) {
|
|
49
|
+
const body = dropNull({
|
|
50
|
+
slug: params.slug,
|
|
51
|
+
channel: params.channel,
|
|
52
|
+
subject: params.subject,
|
|
53
|
+
body: params.body,
|
|
54
|
+
body_md: params.body_md,
|
|
55
|
+
});
|
|
56
|
+
const data = await this.#client.request("POST", TEMPLATES_PATH, { body });
|
|
57
|
+
return data;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetch one template with its content + version history
|
|
61
|
+
* (`GET /api/v1/templates/{slug}/`; scope `templates:read`). An unknown or
|
|
62
|
+
* archived slug rejects `404 template-not-found`.
|
|
63
|
+
*/
|
|
64
|
+
async retrieve(slug) {
|
|
65
|
+
const data = await this.#client.request("GET", `${TEMPLATES_PATH}${encodeURIComponent(slug)}/`);
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Partial update (`PATCH /api/v1/templates/{slug}/`; scope
|
|
70
|
+
* `templates:write`). Pass at least one field. Changing a CONTENT field
|
|
71
|
+
* (`subject`, `body`, `body_md`) mints a new immutable version; `channel`
|
|
72
|
+
* is metadata and never bumps the version; a no-op content PATCH mints
|
|
73
|
+
* nothing. An unknown or archived slug rejects `404 template-not-found`.
|
|
74
|
+
*/
|
|
75
|
+
async update(slug, params = {}) {
|
|
76
|
+
const body = dropNull({
|
|
77
|
+
channel: params.channel,
|
|
78
|
+
subject: params.subject,
|
|
79
|
+
body: params.body,
|
|
80
|
+
body_md: params.body_md,
|
|
81
|
+
});
|
|
82
|
+
const data = await this.#client.request("PATCH", `${TEMPLATES_PATH}${encodeURIComponent(slug)}/`, { body });
|
|
83
|
+
return data;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Soft-archive a template (`DELETE /api/v1/templates/{slug}/`, 204; scope
|
|
87
|
+
* `templates:write`). The slug stays reserved (re-create rejects
|
|
88
|
+
* `409 template-exists`) and history + delivery-log FKs survive, but the
|
|
89
|
+
* template reads as MISSING everywhere afterwards. An unknown or already
|
|
90
|
+
* archived slug rejects `404 template-not-found`.
|
|
91
|
+
*/
|
|
92
|
+
async delete(slug) {
|
|
93
|
+
await this.#client.request("DELETE", `${TEMPLATES_PATH}${encodeURIComponent(slug)}/`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/resources/templates.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAuB,MAAM,kBAAkB,CAAC;AAS7D,6EAA6E;AAC7E,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SAAS;IACX,OAAO,CAAQ;IAExB,YAAY,MAAa;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,SAA6B,EAAE;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAgB,CAAC;QAClB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE;YAC9D,KAAK;SACN,CAAC,CAAgC,CAAC;QACnC,OAAO,IAAI,IAAI,CAAc,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAA4B;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAsB,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,KAAK,EACL,GAAG,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAChD,CAAC;QACF,OAAO,IAAsB,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,SAA+B,EAAE;QAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,OAAO,EACP,GAAG,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAC/C,EAAE,IAAI,EAAE,CACT,CAAC;QACF,OAAO,IAAsB,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACxB,QAAQ,EACR,GAAG,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAChD,CAAC;IACJ,CAAC;CACF"}
|