castbrick-js 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/README.md ADDED
@@ -0,0 +1,202 @@
1
+ # @castbrick/js
2
+
3
+ Official JavaScript/TypeScript SDK for the [CastBrick](https://castbrick.com) API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @castbrick/js
9
+ ```
10
+
11
+ ## Requirements
12
+
13
+ - Node.js 18+ (uses native `fetch`)
14
+ - Any modern browser, Next.js, SvelteKit, or Vite project
15
+
16
+ ## Quick Start
17
+
18
+ ```ts
19
+ import { CastBrick } from "@castbrick/js";
20
+
21
+ const cb = new CastBrick({ apiKey: "your_api_key_here" });
22
+
23
+ // Send an SMS
24
+ await cb.sms.send({
25
+ recipients: ["+244923000000"],
26
+ content: "Hello from CastBrick!",
27
+ });
28
+ ```
29
+
30
+ Get your API key from the [CastBrick dashboard](https://app.castbrick.com/apikeys).
31
+
32
+ ---
33
+
34
+ ## SMS
35
+
36
+ ### Send an SMS
37
+
38
+ ```ts
39
+ const result = await cb.sms.send({
40
+ recipients: ["+244923000000", "+244912000000"],
41
+ content: "Your verification code is 1234",
42
+ senderId: "MyApp", // optional
43
+ scheduledAt: "2026-04-01T10:00:00Z", // optional — schedule for later
44
+ });
45
+
46
+ console.log(result.messageId, result.recipientCount);
47
+ ```
48
+
49
+ ### Send to a Contact List
50
+
51
+ ```ts
52
+ await cb.sms.send({
53
+ recipients: [],
54
+ content: "Promo: 50% off this weekend!",
55
+ contactListId: "list-uuid-here",
56
+ });
57
+ ```
58
+
59
+ ### Get a message
60
+
61
+ ```ts
62
+ const message = await cb.sms.get("message-id");
63
+ console.log(message.status); // "queued" | "sent" | "delivered" | "failed"
64
+ ```
65
+
66
+ ### List messages
67
+
68
+ ```ts
69
+ const { items, totalCount } = await cb.sms.list(1, 20);
70
+ ```
71
+
72
+ ### Cancel a scheduled SMS
73
+
74
+ ```ts
75
+ await cb.sms.cancelScheduled("message-id");
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Contacts
81
+
82
+ ### List contacts
83
+
84
+ ```ts
85
+ const { items } = await cb.contacts.list(1, 20, "search term");
86
+ ```
87
+
88
+ ### Create contacts
89
+
90
+ ```ts
91
+ // Accepts comma or newline-separated values
92
+ await cb.contacts.create({
93
+ phoneNumbers: "+244923000000, +244912000000",
94
+ emails: "user@example.com",
95
+ });
96
+ ```
97
+
98
+ ### Delete a contact
99
+
100
+ ```ts
101
+ await cb.contacts.delete("contact-id");
102
+ ```
103
+
104
+ ### Contact Lists
105
+
106
+ ```ts
107
+ // List all contact lists
108
+ const { items } = await cb.contacts.listLists();
109
+
110
+ // Create a list
111
+ const list = await cb.contacts.createList("VIP Customers");
112
+
113
+ // Add / remove a contact from a list
114
+ await cb.contacts.addToList(list.id, "contact-id");
115
+ await cb.contacts.removeFromList(list.id, "contact-id");
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Broadcasts
121
+
122
+ ### Create and send a broadcast
123
+
124
+ ```ts
125
+ const id = await cb.broadcasts.create({
126
+ name: "Weekend Promo",
127
+ message: "50% off this weekend!",
128
+ contactListId: "list-uuid-here", // optional
129
+ senderId: "MyApp", // optional
130
+ });
131
+
132
+ await cb.broadcasts.send(id);
133
+ ```
134
+
135
+ ### Schedule a broadcast
136
+
137
+ ```ts
138
+ await cb.broadcasts.update(id, {
139
+ name: "Weekend Promo",
140
+ message: "50% off this weekend!",
141
+ scheduleAt: "2026-04-05T08:00:00Z",
142
+ });
143
+
144
+ await cb.broadcasts.send(id); // sends at the scheduled time
145
+ ```
146
+
147
+ ### Other broadcast operations
148
+
149
+ ```ts
150
+ await cb.broadcasts.cancel(id);
151
+ await cb.broadcasts.duplicate(id);
152
+ await cb.broadcasts.delete(id);
153
+
154
+ const { items } = await cb.broadcasts.list();
155
+ const broadcast = await cb.broadcasts.get(id);
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Error Handling
161
+
162
+ ```ts
163
+ import { CastBrick, CastBrickApiError } from "@castbrick/js";
164
+
165
+ try {
166
+ await cb.sms.send({ recipients: ["+244923000000"], content: "Hello!" });
167
+ } catch (err) {
168
+ if (err instanceof CastBrickApiError) {
169
+ console.error(`API error ${err.status}:`, err.message);
170
+ // 401 → invalid or revoked API key
171
+ // 402 → insufficient credits
172
+ // 422 → validation error
173
+ }
174
+ }
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Custom Base URL
180
+
181
+ ```ts
182
+ const cb = new CastBrick({
183
+ apiKey: "your_api_key_here",
184
+ baseUrl: "http://localhost:5000", // point to a local or staging instance
185
+ });
186
+ ```
187
+
188
+ ---
189
+
190
+ ## TypeScript
191
+
192
+ The SDK is written in TypeScript and exports all types:
193
+
194
+ ```ts
195
+ import type { SendSmsRequest, Broadcast, Contact, PagedResult } from "@castbrick/js";
196
+ ```
197
+
198
+ ---
199
+
200
+ ## License
201
+
202
+ MIT
@@ -0,0 +1,16 @@
1
+ import type { CastBrickOptions } from "./types.js";
2
+ export declare class CastBrickClient {
3
+ readonly baseUrl: string;
4
+ private readonly headers;
5
+ constructor(options: CastBrickOptions);
6
+ get<T>(path: string, params?: Record<string, string | number | boolean>): Promise<T>;
7
+ post<T>(path: string, body: unknown): Promise<T>;
8
+ put<T>(path: string, body: unknown): Promise<T>;
9
+ delete(path: string): Promise<void>;
10
+ private handleResponse;
11
+ }
12
+ export declare class CastBrickApiError extends Error {
13
+ readonly status: number;
14
+ constructor(status: number, message: string);
15
+ }
16
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,gBAAgB;IAS/B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWpF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAShD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAS/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ3B,cAAc;CAQ7B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB"}
package/dist/client.js ADDED
@@ -0,0 +1,66 @@
1
+ export class CastBrickClient {
2
+ baseUrl;
3
+ headers;
4
+ constructor(options) {
5
+ if (!options.apiKey)
6
+ throw new Error("CastBrick: apiKey is required");
7
+ this.baseUrl = (options.baseUrl ?? "https://api.castbrick.com").replace(/\/$/, "");
8
+ this.headers = {
9
+ Authorization: `Bearer ${options.apiKey}`,
10
+ "Content-Type": "application/json",
11
+ };
12
+ }
13
+ async get(path, params) {
14
+ const url = new URL(this.baseUrl + path);
15
+ if (params) {
16
+ for (const [k, v] of Object.entries(params)) {
17
+ if (v !== undefined && v !== null)
18
+ url.searchParams.set(k, String(v));
19
+ }
20
+ }
21
+ const res = await fetch(url.toString(), { headers: this.headers });
22
+ return this.handleResponse(res);
23
+ }
24
+ async post(path, body) {
25
+ const res = await fetch(this.baseUrl + path, {
26
+ method: "POST",
27
+ headers: this.headers,
28
+ body: JSON.stringify(body),
29
+ });
30
+ return this.handleResponse(res);
31
+ }
32
+ async put(path, body) {
33
+ const res = await fetch(this.baseUrl + path, {
34
+ method: "PUT",
35
+ headers: this.headers,
36
+ body: JSON.stringify(body),
37
+ });
38
+ return this.handleResponse(res);
39
+ }
40
+ async delete(path) {
41
+ const res = await fetch(this.baseUrl + path, {
42
+ method: "DELETE",
43
+ headers: this.headers,
44
+ });
45
+ if (!res.ok && res.status !== 204)
46
+ await this.handleResponse(res);
47
+ }
48
+ async handleResponse(res) {
49
+ if (res.ok) {
50
+ if (res.status === 204)
51
+ return undefined;
52
+ return (await res.json());
53
+ }
54
+ const body = await res.text().catch(() => res.statusText);
55
+ throw new CastBrickApiError(res.status, body);
56
+ }
57
+ }
58
+ export class CastBrickApiError extends Error {
59
+ status;
60
+ constructor(status, message) {
61
+ super(`CastBrick API error ${status}: ${message}`);
62
+ this.status = status;
63
+ this.name = "CastBrickApiError";
64
+ }
65
+ }
66
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { SmsResource } from "./resources/sms.js";
2
+ import { ContactsResource } from "./resources/contacts.js";
3
+ import { BroadcastsResource } from "./resources/broadcasts.js";
4
+ import type { CastBrickOptions } from "./types.js";
5
+ export { CastBrickApiError } from "./client.js";
6
+ export type * from "./types.js";
7
+ /**
8
+ * CastBrick SDK client.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { CastBrick } from "castbrick-sdk";
13
+ *
14
+ * const cb = new CastBrick({ apiKey: "your_api_key_here" });
15
+ *
16
+ * // Send an SMS
17
+ * await cb.sms.send({ recipients: ["+244923000000"], content: "Hello from CastBrick!" });
18
+ *
19
+ * // List contacts
20
+ * const { items } = await cb.contacts.list();
21
+ *
22
+ * // Create and send a broadcast
23
+ * const id = await cb.broadcasts.create({ name: "Promo", message: "50% off today!" });
24
+ * await cb.broadcasts.send(id);
25
+ * ```
26
+ */
27
+ export declare class CastBrick {
28
+ readonly sms: SmsResource;
29
+ readonly contacts: ContactsResource;
30
+ readonly broadcasts: BroadcastsResource;
31
+ constructor(options: CastBrickOptions);
32
+ }
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,mBAAmB,YAAY,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;gBAE5B,OAAO,EAAE,gBAAgB;CAMtC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ import { CastBrickClient } from "./client.js";
2
+ import { SmsResource } from "./resources/sms.js";
3
+ import { ContactsResource } from "./resources/contacts.js";
4
+ import { BroadcastsResource } from "./resources/broadcasts.js";
5
+ export { CastBrickApiError } from "./client.js";
6
+ /**
7
+ * CastBrick SDK client.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { CastBrick } from "castbrick-sdk";
12
+ *
13
+ * const cb = new CastBrick({ apiKey: "your_api_key_here" });
14
+ *
15
+ * // Send an SMS
16
+ * await cb.sms.send({ recipients: ["+244923000000"], content: "Hello from CastBrick!" });
17
+ *
18
+ * // List contacts
19
+ * const { items } = await cb.contacts.list();
20
+ *
21
+ * // Create and send a broadcast
22
+ * const id = await cb.broadcasts.create({ name: "Promo", message: "50% off today!" });
23
+ * await cb.broadcasts.send(id);
24
+ * ```
25
+ */
26
+ export class CastBrick {
27
+ sms;
28
+ contacts;
29
+ broadcasts;
30
+ constructor(options) {
31
+ const client = new CastBrickClient(options);
32
+ this.sms = new SmsResource(client);
33
+ this.contacts = new ContactsResource(client);
34
+ this.broadcasts = new BroadcastsResource(client);
35
+ }
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,SAAS;IACX,GAAG,CAAc;IACjB,QAAQ,CAAmB;IAC3B,UAAU,CAAqB;IAExC,YAAY,OAAyB;QACnC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { CastBrickClient } from "../client.js";
2
+ import type { Broadcast, CreateBroadcastRequest, PagedResult, UpdateBroadcastRequest } from "../types.js";
3
+ export declare class BroadcastsResource {
4
+ private readonly client;
5
+ constructor(client: CastBrickClient);
6
+ /** List broadcasts */
7
+ list(page?: number, pageSize?: number): Promise<PagedResult<Broadcast>>;
8
+ /** Get a broadcast by ID */
9
+ get(id: string): Promise<Broadcast>;
10
+ /** Create a new broadcast */
11
+ create(data: CreateBroadcastRequest): Promise<string>;
12
+ /** Update an existing broadcast */
13
+ update(id: string, data: UpdateBroadcastRequest): Promise<string>;
14
+ /** Send a broadcast immediately (or schedule it if scheduledAt is set) */
15
+ send(id: string): Promise<void>;
16
+ /** Cancel a scheduled or queued broadcast */
17
+ cancel(id: string): Promise<void>;
18
+ /** Duplicate an existing broadcast */
19
+ duplicate(id: string): Promise<string>;
20
+ /** Delete a broadcast */
21
+ delete(id: string): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=broadcasts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcasts.d.ts","sourceRoot":"","sources":["../../src/resources/broadcasts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1G,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD,sBAAsB;IACtB,IAAI,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAI9D,4BAA4B;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAInC,6BAA6B;IAC7B,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,mCAAmC;IACnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE,0EAA0E;IAC1E,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,sCAAsC;IACtC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItC,yBAAyB;IACzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -0,0 +1,39 @@
1
+ export class BroadcastsResource {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /** List broadcasts */
7
+ list(page = 1, pageSize = 20) {
8
+ return this.client.get("/broadcasts", { pageNumber: page, pageSize });
9
+ }
10
+ /** Get a broadcast by ID */
11
+ get(id) {
12
+ return this.client.get(`/broadcasts/${id}`);
13
+ }
14
+ /** Create a new broadcast */
15
+ create(data) {
16
+ return this.client.post("/broadcasts", data);
17
+ }
18
+ /** Update an existing broadcast */
19
+ update(id, data) {
20
+ return this.client.put(`/broadcasts/${id}`, data);
21
+ }
22
+ /** Send a broadcast immediately (or schedule it if scheduledAt is set) */
23
+ send(id) {
24
+ return this.client.post(`/broadcasts/${id}/send`, {});
25
+ }
26
+ /** Cancel a scheduled or queued broadcast */
27
+ cancel(id) {
28
+ return this.client.post(`/broadcasts/${id}/cancel`, {});
29
+ }
30
+ /** Duplicate an existing broadcast */
31
+ duplicate(id) {
32
+ return this.client.post(`/broadcasts/${id}/duplicate`, {});
33
+ }
34
+ /** Delete a broadcast */
35
+ delete(id) {
36
+ return this.client.delete(`/broadcasts/${id}`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=broadcasts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcasts.js","sourceRoot":"","sources":["../../src/resources/broadcasts.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,sBAAsB;IACtB,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAyB,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,4BAA4B;IAC5B,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAY,eAAe,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,IAA4B;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAS,aAAa,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,mCAAmC;IACnC,MAAM,CAAC,EAAU,EAAE,IAA4B;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAS,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,0EAA0E;IAC1E,IAAI,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,sCAAsC;IACtC,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAS,eAAe,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { CastBrickClient } from "../client.js";
2
+ import type { Contact, ContactList, CreateContactRequest, PagedResult } from "../types.js";
3
+ export declare class ContactsResource {
4
+ private readonly client;
5
+ constructor(client: CastBrickClient);
6
+ /** List contacts with optional search */
7
+ list(page?: number, pageSize?: number, search?: string): Promise<PagedResult<Contact>>;
8
+ /** Get a single contact by ID */
9
+ get(id: string): Promise<Contact>;
10
+ /** Create one or more contacts from comma/newline-separated emails or phone numbers */
11
+ create(data: CreateContactRequest): Promise<number>;
12
+ /** Delete a contact */
13
+ delete(id: string): Promise<void>;
14
+ /** List all contact lists */
15
+ listLists(page?: number, pageSize?: number): Promise<PagedResult<ContactList>>;
16
+ /** Get a contact list by ID */
17
+ getList(id: string): Promise<ContactList>;
18
+ /** Create a contact list */
19
+ createList(name: string): Promise<ContactList>;
20
+ /** Add a contact to a list */
21
+ addToList(listId: string, contactId: string): Promise<void>;
22
+ /** Remove a contact from a list */
23
+ removeFromList(listId: string, contactId: string): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/resources/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3F,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD,yCAAyC;IACzC,IAAI,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAM7E,iCAAiC;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjC,uFAAuF;IACvF,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,uBAAuB;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjC,6BAA6B;IAC7B,SAAS,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAIrE,+BAA+B;IAC/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzC,4BAA4B;IAC5B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI9C,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,mCAAmC;IACnC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjE"}
@@ -0,0 +1,47 @@
1
+ export class ContactsResource {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /** List contacts with optional search */
7
+ list(page = 1, pageSize = 20, search) {
8
+ const params = { pageNumber: page, pageSize };
9
+ if (search)
10
+ params.search = search;
11
+ return this.client.get("/audience/contacts", params);
12
+ }
13
+ /** Get a single contact by ID */
14
+ get(id) {
15
+ return this.client.get(`/audience/contacts/${id}`);
16
+ }
17
+ /** Create one or more contacts from comma/newline-separated emails or phone numbers */
18
+ create(data) {
19
+ return this.client.post("/audience/contacts", data);
20
+ }
21
+ /** Delete a contact */
22
+ delete(id) {
23
+ return this.client.delete(`/audience/contacts/${id}`);
24
+ }
25
+ // ─── Lists ───────────────────────────────────────────────────────────────
26
+ /** List all contact lists */
27
+ listLists(page = 1, pageSize = 20) {
28
+ return this.client.get("/audience/lists", { pageNumber: page, pageSize });
29
+ }
30
+ /** Get a contact list by ID */
31
+ getList(id) {
32
+ return this.client.get(`/audience/lists/${id}`);
33
+ }
34
+ /** Create a contact list */
35
+ createList(name) {
36
+ return this.client.post("/audience/lists", { name });
37
+ }
38
+ /** Add a contact to a list */
39
+ addToList(listId, contactId) {
40
+ return this.client.post(`/audience/lists/${listId}/contacts`, { contactId });
41
+ }
42
+ /** Remove a contact from a list */
43
+ removeFromList(listId, contactId) {
44
+ return this.client.delete(`/audience/lists/${listId}/contacts/${contactId}`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/resources/contacts.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,yCAAyC;IACzC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,MAAe;QAC3C,MAAM,MAAM,GAAoC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC/E,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuB,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,iCAAiC;IACjC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAU,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,uFAAuF;IACvF,MAAM,CAAC,IAA0B;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAS,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,4EAA4E;IAE5E,6BAA6B;IAC7B,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAA2B,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAc,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,4BAA4B;IAC5B,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAc,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,8BAA8B;IAC9B,SAAS,CAAC,MAAc,EAAE,SAAiB;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,mBAAmB,MAAM,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,mCAAmC;IACnC,cAAc,CAAC,MAAc,EAAE,SAAiB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,MAAM,aAAa,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { CastBrickClient } from "../client.js";
2
+ import type { PagedResult, SendSmsRequest, SendSmsResponse, SmsMessage } from "../types.js";
3
+ export declare class SmsResource {
4
+ private readonly client;
5
+ constructor(client: CastBrickClient);
6
+ /** Send an SMS to one or more recipients */
7
+ send(request: SendSmsRequest): Promise<SendSmsResponse>;
8
+ /** Get a single SMS message by ID */
9
+ get(id: string): Promise<SmsMessage>;
10
+ /** List SMS messages */
11
+ list(page?: number, pageSize?: number): Promise<PagedResult<SmsMessage>>;
12
+ /** Cancel a scheduled SMS */
13
+ cancelScheduled(messageId: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=sms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms.d.ts","sourceRoot":"","sources":["../../src/resources/sms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5F,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD,4CAA4C;IAC5C,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAIvD,qCAAqC;IACrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpC,wBAAwB;IACxB,IAAI,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAI/D,6BAA6B;IAC7B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
@@ -0,0 +1,23 @@
1
+ export class SmsResource {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /** Send an SMS to one or more recipients */
7
+ send(request) {
8
+ return this.client.post("/sms/send", request);
9
+ }
10
+ /** Get a single SMS message by ID */
11
+ get(id) {
12
+ return this.client.get(`/sms/${id}`);
13
+ }
14
+ /** List SMS messages */
15
+ list(page = 1, pageSize = 20) {
16
+ return this.client.get("/sms", { pageNumber: page, pageSize });
17
+ }
18
+ /** Cancel a scheduled SMS */
19
+ cancelScheduled(messageId) {
20
+ return this.client.post("/sms/cancel-scheduled", { messageId });
21
+ }
22
+ }
23
+ //# sourceMappingURL=sms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms.js","sourceRoot":"","sources":["../../src/resources/sms.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,4CAA4C;IAC5C,IAAI,CAAC,OAAuB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAkB,WAAW,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,qCAAqC;IACrC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAa,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAA0B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,6BAA6B;IAC7B,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,uBAAuB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -0,0 +1,89 @@
1
+ export type ApiKeyPermission = "Email" | "Sms" | "Full";
2
+ export interface CastBrickOptions {
3
+ /** Your CastBrick API key */
4
+ apiKey: string;
5
+ /** Override the API base URL (defaults to https://api.castbrick.com) */
6
+ baseUrl?: string;
7
+ }
8
+ export interface PagedResult<T> {
9
+ items: T[];
10
+ totalCount: number;
11
+ pageNumber: number;
12
+ totalPages: number;
13
+ hasNextPage: boolean;
14
+ hasPreviousPage: boolean;
15
+ }
16
+ export interface SendSmsRequest {
17
+ /** Array of E.164 phone numbers, e.g. ["+244923000000"] */
18
+ recipients: string[];
19
+ /** Message content (max 1600 chars) */
20
+ content: string;
21
+ /** Optional SMS sender ID */
22
+ senderId?: string;
23
+ /** Schedule the message for future delivery (ISO 8601) */
24
+ scheduledAt?: string;
25
+ /** Send to all contacts in this list instead of/in addition to `recipients` */
26
+ contactListId?: string;
27
+ }
28
+ export interface SendSmsResponse {
29
+ messageId: string;
30
+ status: "queued" | "scheduled";
31
+ recipientCount: number;
32
+ error: string | null;
33
+ timestamp: string;
34
+ }
35
+ export interface SmsMessage {
36
+ id: string;
37
+ phoneNumber: string;
38
+ message: string;
39
+ status: string;
40
+ tenantId: string;
41
+ sentAt: string | null;
42
+ deliveredAt: string | null;
43
+ createdAt: string;
44
+ }
45
+ export interface Contact {
46
+ id: string;
47
+ name: string | null;
48
+ phoneNumber: string | null;
49
+ email: string | null;
50
+ tenantId: string;
51
+ createdAt: string;
52
+ }
53
+ export interface CreateContactRequest {
54
+ /** One or more email addresses (comma/newline separated) */
55
+ emails?: string;
56
+ /** One or more phone numbers (comma/newline separated) */
57
+ phoneNumbers?: string;
58
+ }
59
+ export interface ContactList {
60
+ id: string;
61
+ name: string;
62
+ tenantId: string;
63
+ contactCount: number;
64
+ createdAt: string;
65
+ }
66
+ export interface Broadcast {
67
+ id: string;
68
+ name: string;
69
+ status: string;
70
+ message: string;
71
+ senderId: string | null;
72
+ contactListId: string | null;
73
+ scheduledAt: string | null;
74
+ createdAt: string;
75
+ }
76
+ export interface CreateBroadcastRequest {
77
+ name: string;
78
+ message: string;
79
+ contactListId?: string;
80
+ senderId?: string;
81
+ }
82
+ export interface UpdateBroadcastRequest {
83
+ name: string;
84
+ message: string;
85
+ contactListId?: string;
86
+ senderId?: string;
87
+ scheduleAt?: string;
88
+ }
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "castbrick-js",
3
+ "version": "0.1.0",
4
+ "description": "Official JavaScript/TypeScript SDK for the CastBrick API",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "typecheck": "tsc --noEmit"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md"
21
+ ],
22
+ "devDependencies": {
23
+ "typescript": "^5.4.0"
24
+ },
25
+ "keywords": ["castbrick", "sms", "api", "sdk"],
26
+ "license": "MIT"
27
+ }