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 +202 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +66 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/broadcasts.d.ts +23 -0
- package/dist/resources/broadcasts.d.ts.map +1 -0
- package/dist/resources/broadcasts.js +39 -0
- package/dist/resources/broadcasts.js.map +1 -0
- package/dist/resources/contacts.d.ts +25 -0
- package/dist/resources/contacts.d.ts.map +1 -0
- package/dist/resources/contacts.js +47 -0
- package/dist/resources/contacts.js.map +1 -0
- package/dist/resources/sms.d.ts +15 -0
- package/dist/resources/sms.d.ts.map +1 -0
- package/dist/resources/sms.js +23 -0
- package/dist/resources/sms.js.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +27 -0
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
|
package/dist/client.d.ts
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|