@poststack.dev/sdk 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,38 @@
1
+ # @poststack.dev/sdk
2
+
3
+ Official TypeScript SDK for the PostStack Email API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @poststack.dev/sdk
9
+ # or
10
+ bun add @poststack.dev/sdk
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ```typescript
16
+ import { PostStack } from '@poststack.dev/sdk';
17
+
18
+ const client = new PostStack({ apiKey: 'sk_live_...' });
19
+
20
+ // Send an email
21
+ const email = await client.emails.send({
22
+ from: 'hello@yourdomain.com',
23
+ to: ['user@example.com'],
24
+ subject: 'Hello!',
25
+ html: '<p>Welcome!</p>',
26
+ });
27
+ ```
28
+
29
+ ## Resources
30
+
31
+ - `client.emails` — Send, batch, get, list, cancel emails
32
+ - `client.domains` — Manage sending domains
33
+ - `client.contacts` — Manage contacts
34
+ - `client.segments` — Create and manage segments
35
+ - `client.templates` — Email templates with versioning
36
+ - `client.webhooks` — Webhook endpoint management
37
+ - `client.broadcasts` — Marketing broadcasts
38
+ - `client.suppressions` — Suppression list management
package/dist/index.cjs ADDED
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ PostStack: () => PostStack,
24
+ PostStackError: () => PostStackError
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+
28
+ // src/errors.ts
29
+ var PostStackError = class extends Error {
30
+ constructor(statusCode, message, code) {
31
+ super(message);
32
+ this.statusCode = statusCode;
33
+ this.code = code;
34
+ this.name = "PostStackError";
35
+ }
36
+ };
37
+
38
+ // src/client.ts
39
+ var PostStackClient = class {
40
+ baseUrl;
41
+ headers;
42
+ constructor(apiKey, baseUrl) {
43
+ this.baseUrl = baseUrl.replace(/\/$/, "");
44
+ this.headers = {
45
+ Authorization: `Bearer ${apiKey}`,
46
+ "Content-Type": "application/json",
47
+ "User-Agent": "PostStack-SDK/0.1.0"
48
+ };
49
+ }
50
+ async get(path, params) {
51
+ const url = new URL(`${this.baseUrl}${path}`);
52
+ if (params) {
53
+ for (const [key, value] of Object.entries(params)) {
54
+ if (value !== void 0) url.searchParams.set(key, String(value));
55
+ }
56
+ }
57
+ const res = await fetch(url.toString(), { headers: this.headers });
58
+ return this.handleResponse(res);
59
+ }
60
+ async post(path, body) {
61
+ const res = await fetch(`${this.baseUrl}${path}`, {
62
+ method: "POST",
63
+ headers: this.headers,
64
+ body: body ? JSON.stringify(body) : void 0
65
+ });
66
+ return this.handleResponse(res);
67
+ }
68
+ async patch(path, body) {
69
+ const res = await fetch(`${this.baseUrl}${path}`, {
70
+ method: "PATCH",
71
+ headers: this.headers,
72
+ body: JSON.stringify(body)
73
+ });
74
+ return this.handleResponse(res);
75
+ }
76
+ async delete(path) {
77
+ const res = await fetch(`${this.baseUrl}${path}`, {
78
+ method: "DELETE",
79
+ headers: this.headers
80
+ });
81
+ return this.handleResponse(res);
82
+ }
83
+ async handleResponse(res) {
84
+ if (!res.ok) {
85
+ const error = await res.json().catch(() => ({ error: res.statusText }));
86
+ throw new PostStackError(res.status, error.error ?? "Unknown error", error.code);
87
+ }
88
+ return res.json();
89
+ }
90
+ };
91
+
92
+ // src/resources/api-keys.ts
93
+ var ApiKeysResource = class {
94
+ constructor(client) {
95
+ this.client = client;
96
+ }
97
+ async create(input) {
98
+ return this.client.post("/api/api-keys", input);
99
+ }
100
+ async list(params) {
101
+ return this.client.get(
102
+ "/api/api-keys",
103
+ params
104
+ );
105
+ }
106
+ async get(id) {
107
+ return this.client.get(`/api/api-keys/${id}`);
108
+ }
109
+ async revoke(id) {
110
+ return this.client.delete(`/api/api-keys/${id}`);
111
+ }
112
+ };
113
+
114
+ // src/resources/broadcasts.ts
115
+ var BroadcastsResource = class {
116
+ constructor(client) {
117
+ this.client = client;
118
+ }
119
+ async create(input) {
120
+ return this.client.post("/api/broadcasts", input);
121
+ }
122
+ async list(params) {
123
+ return this.client.get(
124
+ "/api/broadcasts",
125
+ params
126
+ );
127
+ }
128
+ async get(id) {
129
+ return this.client.get(`/api/broadcasts/${encodeURIComponent(id)}`);
130
+ }
131
+ async update(id, input) {
132
+ return this.client.patch(`/api/broadcasts/${encodeURIComponent(id)}`, input);
133
+ }
134
+ async send(id) {
135
+ return this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/send`);
136
+ }
137
+ async cancel(id) {
138
+ return this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/cancel`);
139
+ }
140
+ async sendTest(id, input) {
141
+ return this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/test`, input);
142
+ }
143
+ };
144
+
145
+ // src/resources/contacts.ts
146
+ var ContactsResource = class {
147
+ constructor(client) {
148
+ this.client = client;
149
+ }
150
+ async create(input) {
151
+ return this.client.post("/api/contacts", input);
152
+ }
153
+ async list(params) {
154
+ return this.client.get(
155
+ "/api/contacts",
156
+ params
157
+ );
158
+ }
159
+ async get(id) {
160
+ return this.client.get(`/api/contacts/${encodeURIComponent(id)}`);
161
+ }
162
+ async update(id, input) {
163
+ return this.client.patch(`/api/contacts/${encodeURIComponent(id)}`, input);
164
+ }
165
+ async delete(id) {
166
+ return this.client.delete(`/api/contacts/${encodeURIComponent(id)}`);
167
+ }
168
+ async unsubscribe(id) {
169
+ return this.client.post(`/api/contacts/${encodeURIComponent(id)}/unsubscribe`);
170
+ }
171
+ };
172
+
173
+ // src/resources/domains.ts
174
+ var DomainsResource = class {
175
+ constructor(client) {
176
+ this.client = client;
177
+ }
178
+ async create(input) {
179
+ return this.client.post("/api/domains", input);
180
+ }
181
+ async list(params) {
182
+ return this.client.get(
183
+ "/api/domains",
184
+ params
185
+ );
186
+ }
187
+ async get(id) {
188
+ return this.client.get(`/api/domains/${id}`);
189
+ }
190
+ async verify(id) {
191
+ return this.client.post(`/api/domains/${id}/verify`);
192
+ }
193
+ async update(id, input) {
194
+ return this.client.patch(`/api/domains/${id}`, input);
195
+ }
196
+ async delete(id) {
197
+ return this.client.delete(`/api/domains/${id}`);
198
+ }
199
+ };
200
+
201
+ // src/resources/emails.ts
202
+ var EmailsResource = class {
203
+ constructor(client) {
204
+ this.client = client;
205
+ }
206
+ async send(input) {
207
+ return this.client.post("/api/emails", input);
208
+ }
209
+ async batch(input) {
210
+ return this.client.post("/api/emails/batch", input);
211
+ }
212
+ async get(id) {
213
+ return this.client.get(`/api/emails/${encodeURIComponent(id)}`);
214
+ }
215
+ async list(params) {
216
+ return this.client.get(
217
+ "/api/emails",
218
+ params
219
+ );
220
+ }
221
+ async cancel(id) {
222
+ return this.client.post(`/api/emails/${encodeURIComponent(id)}/cancel`);
223
+ }
224
+ };
225
+
226
+ // src/resources/segments.ts
227
+ var SegmentsResource = class {
228
+ constructor(client) {
229
+ this.client = client;
230
+ }
231
+ async create(input) {
232
+ return this.client.post("/api/segments", input);
233
+ }
234
+ async list(params) {
235
+ return this.client.get(
236
+ "/api/segments",
237
+ params
238
+ );
239
+ }
240
+ async get(id) {
241
+ return this.client.get(`/api/segments/${encodeURIComponent(id)}`);
242
+ }
243
+ async update(id, input) {
244
+ return this.client.patch(`/api/segments/${encodeURIComponent(id)}`, input);
245
+ }
246
+ async delete(id) {
247
+ return this.client.delete(`/api/segments/${encodeURIComponent(id)}`);
248
+ }
249
+ async addContacts(id, input) {
250
+ return this.client.post(`/api/segments/${encodeURIComponent(id)}/contacts`, input);
251
+ }
252
+ async removeContact(id, contactId) {
253
+ return this.client.delete(
254
+ `/api/segments/${encodeURIComponent(id)}/contacts/${encodeURIComponent(contactId)}`
255
+ );
256
+ }
257
+ };
258
+
259
+ // src/resources/suppressions.ts
260
+ var SuppressionsResource = class {
261
+ constructor(client) {
262
+ this.client = client;
263
+ }
264
+ async list(params) {
265
+ return this.client.get(
266
+ "/api/suppressions",
267
+ params
268
+ );
269
+ }
270
+ async add(input) {
271
+ return this.client.post("/api/suppressions", input);
272
+ }
273
+ async remove(email) {
274
+ return this.client.delete(`/api/suppressions/${encodeURIComponent(email)}`);
275
+ }
276
+ };
277
+
278
+ // src/resources/templates.ts
279
+ var TemplatesResource = class {
280
+ constructor(client) {
281
+ this.client = client;
282
+ }
283
+ async create(input) {
284
+ return this.client.post("/api/templates", input);
285
+ }
286
+ async list(params) {
287
+ return this.client.get(
288
+ "/api/templates",
289
+ params
290
+ );
291
+ }
292
+ async get(id) {
293
+ return this.client.get(`/api/templates/${encodeURIComponent(id)}`);
294
+ }
295
+ async update(id, input) {
296
+ return this.client.patch(`/api/templates/${encodeURIComponent(id)}`, input);
297
+ }
298
+ async delete(id) {
299
+ return this.client.delete(`/api/templates/${encodeURIComponent(id)}`);
300
+ }
301
+ async publish(id) {
302
+ return this.client.post(`/api/templates/${encodeURIComponent(id)}/publish`);
303
+ }
304
+ async unpublish(id) {
305
+ return this.client.post(`/api/templates/${encodeURIComponent(id)}/unpublish`);
306
+ }
307
+ };
308
+
309
+ // src/resources/webhooks.ts
310
+ var WebhooksResource = class {
311
+ constructor(client) {
312
+ this.client = client;
313
+ }
314
+ async create(input) {
315
+ return this.client.post("/api/webhooks", input);
316
+ }
317
+ async get(id) {
318
+ return this.client.get(`/api/webhooks/${id}`);
319
+ }
320
+ async list(params) {
321
+ return this.client.get(
322
+ "/api/webhooks",
323
+ params
324
+ );
325
+ }
326
+ async update(id, input) {
327
+ return this.client.patch(`/api/webhooks/${id}`, input);
328
+ }
329
+ async delete(id) {
330
+ return this.client.delete(`/api/webhooks/${id}`);
331
+ }
332
+ async test(id) {
333
+ return this.client.post(`/api/webhooks/${id}/test`);
334
+ }
335
+ };
336
+
337
+ // src/index.ts
338
+ var PostStack = class {
339
+ emails;
340
+ domains;
341
+ contacts;
342
+ segments;
343
+ templates;
344
+ webhooks;
345
+ broadcasts;
346
+ suppressions;
347
+ apiKeys;
348
+ constructor(apiKey, options) {
349
+ const client = new PostStackClient(apiKey, options?.baseUrl ?? "https://api.poststack.dev");
350
+ this.emails = new EmailsResource(client);
351
+ this.domains = new DomainsResource(client);
352
+ this.contacts = new ContactsResource(client);
353
+ this.segments = new SegmentsResource(client);
354
+ this.templates = new TemplatesResource(client);
355
+ this.webhooks = new WebhooksResource(client);
356
+ this.broadcasts = new BroadcastsResource(client);
357
+ this.suppressions = new SuppressionsResource(client);
358
+ this.apiKeys = new ApiKeysResource(client);
359
+ }
360
+ };
361
+ // Annotate the CommonJS export names for ESM import in node:
362
+ 0 && (module.exports = {
363
+ PostStack,
364
+ PostStackError
365
+ });
366
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/client.ts","../src/resources/api-keys.ts","../src/resources/broadcasts.ts","../src/resources/contacts.ts","../src/resources/domains.ts","../src/resources/emails.ts","../src/resources/segments.ts","../src/resources/suppressions.ts","../src/resources/templates.ts","../src/resources/webhooks.ts"],"sourcesContent":["import { PostStackClient } from './client.ts';\nimport { ApiKeysResource } from './resources/api-keys.ts';\nimport { BroadcastsResource } from './resources/broadcasts.ts';\nimport { ContactsResource } from './resources/contacts.ts';\nimport { DomainsResource } from './resources/domains.ts';\nimport { EmailsResource } from './resources/emails.ts';\nimport { SegmentsResource } from './resources/segments.ts';\nimport { SuppressionsResource } from './resources/suppressions.ts';\nimport { TemplatesResource } from './resources/templates.ts';\nimport { WebhooksResource } from './resources/webhooks.ts';\n\nexport class PostStack {\n\treadonly emails: EmailsResource;\n\treadonly domains: DomainsResource;\n\treadonly contacts: ContactsResource;\n\treadonly segments: SegmentsResource;\n\treadonly templates: TemplatesResource;\n\treadonly webhooks: WebhooksResource;\n\treadonly broadcasts: BroadcastsResource;\n\treadonly suppressions: SuppressionsResource;\n\treadonly apiKeys: ApiKeysResource;\n\n\tconstructor(apiKey: string, options?: { baseUrl?: string }) {\n\t\tconst client = new PostStackClient(apiKey, options?.baseUrl ?? 'https://api.poststack.dev');\n\t\tthis.emails = new EmailsResource(client);\n\t\tthis.domains = new DomainsResource(client);\n\t\tthis.contacts = new ContactsResource(client);\n\t\tthis.segments = new SegmentsResource(client);\n\t\tthis.templates = new TemplatesResource(client);\n\t\tthis.webhooks = new WebhooksResource(client);\n\t\tthis.broadcasts = new BroadcastsResource(client);\n\t\tthis.suppressions = new SuppressionsResource(client);\n\t\tthis.apiKeys = new ApiKeysResource(client);\n\t}\n}\n\nexport { PostStackError } from './errors.ts';\nexport type * from './types.ts';\n","export class PostStackError extends Error {\n\tconstructor(\n\t\tpublic readonly statusCode: number,\n\t\tmessage: string,\n\t\tpublic readonly code?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'PostStackError';\n\t}\n}\n","import { PostStackError } from './errors.ts';\n\nexport class PostStackClient {\n\tprivate readonly baseUrl: string;\n\tprivate readonly headers: Record<string, string>;\n\n\tconstructor(apiKey: string, baseUrl: string) {\n\t\tthis.baseUrl = baseUrl.replace(/\\/$/, '');\n\t\tthis.headers = {\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t'Content-Type': 'application/json',\n\t\t\t'User-Agent': 'PostStack-SDK/0.1.0',\n\t\t};\n\t}\n\n\tasync get<T>(path: string, params?: Record<string, string | number | undefined>): Promise<T> {\n\t\tconst url = new URL(`${this.baseUrl}${path}`);\n\t\tif (params) {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tif (value !== undefined) url.searchParams.set(key, String(value));\n\t\t\t}\n\t\t}\n\t\tconst res = await fetch(url.toString(), { headers: this.headers });\n\t\treturn this.handleResponse<T>(res);\n\t}\n\n\tasync post<T>(path: string, body?: unknown): Promise<T> {\n\t\tconst res = await fetch(`${this.baseUrl}${path}`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t});\n\t\treturn this.handleResponse<T>(res);\n\t}\n\n\tasync patch<T>(path: string, body: unknown): Promise<T> {\n\t\tconst res = await fetch(`${this.baseUrl}${path}`, {\n\t\t\tmethod: 'PATCH',\n\t\t\theaders: this.headers,\n\t\t\tbody: JSON.stringify(body),\n\t\t});\n\t\treturn this.handleResponse<T>(res);\n\t}\n\n\tasync delete<T>(path: string): Promise<T> {\n\t\tconst res = await fetch(`${this.baseUrl}${path}`, {\n\t\t\tmethod: 'DELETE',\n\t\t\theaders: this.headers,\n\t\t});\n\t\treturn this.handleResponse<T>(res);\n\t}\n\n\tprivate async handleResponse<T>(res: Response): Promise<T> {\n\t\tif (!res.ok) {\n\t\t\tconst error = (await res.json().catch(() => ({ error: res.statusText }))) as {\n\t\t\t\terror?: string;\n\t\t\t\tcode?: string;\n\t\t\t};\n\t\t\tthrow new PostStackError(res.status, error.error ?? 'Unknown error', error.code);\n\t\t}\n\t\treturn res.json() as Promise<T>;\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type { CreateApiKeyInput, ApiKey, ListParams } from '../types.ts';\n\nexport class ApiKeysResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateApiKeyInput): Promise<ApiKey> {\n\t\treturn this.client.post('/api/api-keys', input);\n\t}\n\n\tasync list(params?: ListParams): Promise<{ keys: ApiKey[] }> {\n\t\treturn this.client.get(\n\t\t\t'/api/api-keys',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: number): Promise<ApiKey> {\n\t\treturn this.client.get(`/api/api-keys/${id}`);\n\t}\n\n\tasync revoke(id: number): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/api-keys/${id}`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tBroadcast,\n\tCreateBroadcastInput,\n\tUpdateBroadcastInput,\n\tTestBroadcastInput,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class BroadcastsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateBroadcastInput): Promise<{ broadcast: Broadcast }> {\n\t\treturn this.client.post('/api/broadcasts', input);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Broadcast>> {\n\t\treturn this.client.get(\n\t\t\t'/api/broadcasts',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<{ broadcast: Broadcast }> {\n\t\treturn this.client.get(`/api/broadcasts/${encodeURIComponent(id)}`);\n\t}\n\n\tasync update(id: string, input: UpdateBroadcastInput): Promise<{ broadcast: Broadcast }> {\n\t\treturn this.client.patch(`/api/broadcasts/${encodeURIComponent(id)}`, input);\n\t}\n\n\tasync send(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/send`);\n\t}\n\n\tasync cancel(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/cancel`);\n\t}\n\n\tasync sendTest(id: string, input: TestBroadcastInput): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/broadcasts/${encodeURIComponent(id)}/test`, input);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tCreateContactInput,\n\tUpdateContactInput,\n\tContact,\n\tPaginatedResponse,\n\tListContactsParams,\n} from '../types.ts';\n\nexport class ContactsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateContactInput): Promise<Contact> {\n\t\treturn this.client.post('/api/contacts', input);\n\t}\n\n\tasync list(params?: ListContactsParams): Promise<PaginatedResponse<Contact>> {\n\t\treturn this.client.get(\n\t\t\t'/api/contacts',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<Contact> {\n\t\treturn this.client.get(`/api/contacts/${encodeURIComponent(id)}`);\n\t}\n\n\tasync update(id: string, input: UpdateContactInput): Promise<Contact> {\n\t\treturn this.client.patch(`/api/contacts/${encodeURIComponent(id)}`, input);\n\t}\n\n\tasync delete(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/contacts/${encodeURIComponent(id)}`);\n\t}\n\n\tasync unsubscribe(id: string): Promise<Contact> {\n\t\treturn this.client.post(`/api/contacts/${encodeURIComponent(id)}/unsubscribe`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tCreateDomainInput,\n\tUpdateDomainInput,\n\tDomain,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class DomainsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateDomainInput): Promise<Domain> {\n\t\treturn this.client.post('/api/domains', input);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Domain>> {\n\t\treturn this.client.get(\n\t\t\t'/api/domains',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: number): Promise<Domain> {\n\t\treturn this.client.get(`/api/domains/${id}`);\n\t}\n\n\tasync verify(id: number): Promise<Domain> {\n\t\treturn this.client.post(`/api/domains/${id}/verify`);\n\t}\n\n\tasync update(id: number, input: UpdateDomainInput): Promise<Domain> {\n\t\treturn this.client.patch(`/api/domains/${id}`, input);\n\t}\n\n\tasync delete(id: number): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/domains/${id}`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tSendEmailInput,\n\tBatchSendInput,\n\tEmail,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class EmailsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync send(input: SendEmailInput): Promise<{ id: string }> {\n\t\treturn this.client.post('/api/emails', input);\n\t}\n\n\tasync batch(input: BatchSendInput): Promise<{ data: { id: string }[] }> {\n\t\treturn this.client.post('/api/emails/batch', input);\n\t}\n\n\tasync get(id: string): Promise<Email> {\n\t\treturn this.client.get(`/api/emails/${encodeURIComponent(id)}`);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Email>> {\n\t\treturn this.client.get(\n\t\t\t'/api/emails',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync cancel(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/emails/${encodeURIComponent(id)}/cancel`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tCreateSegmentInput,\n\tUpdateSegmentInput,\n\tAddContactsInput,\n\tSegment,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class SegmentsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateSegmentInput): Promise<Segment> {\n\t\treturn this.client.post('/api/segments', input);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Segment>> {\n\t\treturn this.client.get(\n\t\t\t'/api/segments',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<Segment> {\n\t\treturn this.client.get(`/api/segments/${encodeURIComponent(id)}`);\n\t}\n\n\tasync update(id: string, input: UpdateSegmentInput): Promise<Segment> {\n\t\treturn this.client.patch(`/api/segments/${encodeURIComponent(id)}`, input);\n\t}\n\n\tasync delete(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/segments/${encodeURIComponent(id)}`);\n\t}\n\n\tasync addContacts(id: string, input: AddContactsInput): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/segments/${encodeURIComponent(id)}/contacts`, input);\n\t}\n\n\tasync removeContact(id: string, contactId: string): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(\n\t\t\t`/api/segments/${encodeURIComponent(id)}/contacts/${encodeURIComponent(contactId)}`,\n\t\t);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type { AddSuppressionInput, Suppression, PaginatedResponse, ListParams } from '../types.ts';\n\nexport class SuppressionsResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Suppression>> {\n\t\treturn this.client.get(\n\t\t\t'/api/suppressions',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync add(input: AddSuppressionInput): Promise<{ success: boolean }> {\n\t\treturn this.client.post('/api/suppressions', input);\n\t}\n\n\tasync remove(email: string): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/suppressions/${encodeURIComponent(email)}`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tCreateTemplateInput,\n\tUpdateTemplateInput,\n\tTemplate,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class TemplatesResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateTemplateInput): Promise<Template> {\n\t\treturn this.client.post('/api/templates', input);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Template>> {\n\t\treturn this.client.get(\n\t\t\t'/api/templates',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<Template> {\n\t\treturn this.client.get(`/api/templates/${encodeURIComponent(id)}`);\n\t}\n\n\tasync update(id: string, input: UpdateTemplateInput): Promise<Template> {\n\t\treturn this.client.patch(`/api/templates/${encodeURIComponent(id)}`, input);\n\t}\n\n\tasync delete(id: string): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/templates/${encodeURIComponent(id)}`);\n\t}\n\n\tasync publish(id: string): Promise<Template> {\n\t\treturn this.client.post(`/api/templates/${encodeURIComponent(id)}/publish`);\n\t}\n\n\tasync unpublish(id: string): Promise<Template> {\n\t\treturn this.client.post(`/api/templates/${encodeURIComponent(id)}/unpublish`);\n\t}\n}\n","import type { PostStackClient } from '../client.ts';\nimport type {\n\tCreateWebhookInput,\n\tUpdateWebhookInput,\n\tWebhook,\n\tPaginatedResponse,\n\tListParams,\n} from '../types.ts';\n\nexport class WebhooksResource {\n\tconstructor(private readonly client: PostStackClient) {}\n\n\tasync create(input: CreateWebhookInput): Promise<Webhook> {\n\t\treturn this.client.post('/api/webhooks', input);\n\t}\n\n\tasync get(id: number): Promise<Webhook> {\n\t\treturn this.client.get(`/api/webhooks/${id}`);\n\t}\n\n\tasync list(params?: ListParams): Promise<PaginatedResponse<Webhook>> {\n\t\treturn this.client.get(\n\t\t\t'/api/webhooks',\n\t\t\tparams as Record<string, string | number | undefined>,\n\t\t);\n\t}\n\n\tasync update(id: number, input: UpdateWebhookInput): Promise<Webhook> {\n\t\treturn this.client.patch(`/api/webhooks/${id}`, input);\n\t}\n\n\tasync delete(id: number): Promise<{ success: boolean }> {\n\t\treturn this.client.delete(`/api/webhooks/${id}`);\n\t}\n\n\tasync test(id: number): Promise<{ success: boolean }> {\n\t\treturn this.client.post(`/api/webhooks/${id}/test`);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACzC,YACiB,YAChB,SACgB,MACf;AACD,UAAM,OAAO;AAJG;AAEA;AAGhB,SAAK,OAAO;AAAA,EACb;AACD;;;ACPO,IAAM,kBAAN,MAAsB;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,YAAY,QAAgB,SAAiB;AAC5C,SAAK,UAAU,QAAQ,QAAQ,OAAO,EAAE;AACxC,SAAK,UAAU;AAAA,MACd,eAAe,UAAU,MAAM;AAAA,MAC/B,gBAAgB;AAAA,MAChB,cAAc;AAAA,IACf;AAAA,EACD;AAAA,EAEA,MAAM,IAAO,MAAc,QAAkE;AAC5F,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAAI,EAAE;AAC5C,QAAI,QAAQ;AACX,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,YAAI,UAAU,OAAW,KAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,MACjE;AAAA,IACD;AACA,UAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,SAAS,KAAK,QAAQ,CAAC;AACjE,WAAO,KAAK,eAAkB,GAAG;AAAA,EAClC;AAAA,EAEA,MAAM,KAAQ,MAAc,MAA4B;AACvD,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,MACjD,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,MACd,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACrC,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EAClC;AAAA,EAEA,MAAM,MAAS,MAAc,MAA2B;AACvD,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,MACjD,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,MACd,MAAM,KAAK,UAAU,IAAI;AAAA,IAC1B,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EAClC;AAAA,EAEA,MAAM,OAAU,MAA0B;AACzC,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,MACjD,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,IACf,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EAClC;AAAA,EAEA,MAAc,eAAkB,KAA2B;AAC1D,QAAI,CAAC,IAAI,IAAI;AACZ,YAAM,QAAS,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE;AAIvE,YAAM,IAAI,eAAe,IAAI,QAAQ,MAAM,SAAS,iBAAiB,MAAM,IAAI;AAAA,IAChF;AACA,WAAO,IAAI,KAAK;AAAA,EACjB;AACD;;;AC3DO,IAAM,kBAAN,MAAsB;AAAA,EAC5B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA2C;AACvD,WAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAK,QAAkD;AAC5D,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA6B;AACtC,WAAO,KAAK,OAAO,IAAI,iBAAiB,EAAE,EAAE;AAAA,EAC7C;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,iBAAiB,EAAE,EAAE;AAAA,EAChD;AACD;;;ACdO,IAAM,qBAAN,MAAyB;AAAA,EAC/B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAAgE;AAC5E,WAAO,KAAK,OAAO,KAAK,mBAAmB,KAAK;AAAA,EACjD;AAAA,EAEA,MAAM,KAAK,QAA4D;AACtE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA+C;AACxD,WAAO,KAAK,OAAO,IAAI,mBAAmB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACnE;AAAA,EAEA,MAAM,OAAO,IAAY,OAAgE;AACxF,WAAO,KAAK,OAAO,MAAM,mBAAmB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,EAC5E;AAAA,EAEA,MAAM,KAAK,IAA2C;AACrD,WAAO,KAAK,OAAO,KAAK,mBAAmB,mBAAmB,EAAE,CAAC,OAAO;AAAA,EACzE;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,KAAK,mBAAmB,mBAAmB,EAAE,CAAC,SAAS;AAAA,EAC3E;AAAA,EAEA,MAAM,SAAS,IAAY,OAA0D;AACpF,WAAO,KAAK,OAAO,KAAK,mBAAmB,mBAAmB,EAAE,CAAC,SAAS,KAAK;AAAA,EAChF;AACD;;;AClCO,IAAM,mBAAN,MAAuB;AAAA,EAC7B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA6C;AACzD,WAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAK,QAAkE;AAC5E,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA8B;AACvC,WAAO,KAAK,OAAO,IAAI,iBAAiB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACjE;AAAA,EAEA,MAAM,OAAO,IAAY,OAA6C;AACrE,WAAO,KAAK,OAAO,MAAM,iBAAiB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,EAC1E;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,iBAAiB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACpE;AAAA,EAEA,MAAM,YAAY,IAA8B;AAC/C,WAAO,KAAK,OAAO,KAAK,iBAAiB,mBAAmB,EAAE,CAAC,cAAc;AAAA,EAC9E;AACD;;;AC7BO,IAAM,kBAAN,MAAsB;AAAA,EAC5B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA2C;AACvD,WAAO,KAAK,OAAO,KAAK,gBAAgB,KAAK;AAAA,EAC9C;AAAA,EAEA,MAAM,KAAK,QAAyD;AACnE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA6B;AACtC,WAAO,KAAK,OAAO,IAAI,gBAAgB,EAAE,EAAE;AAAA,EAC5C;AAAA,EAEA,MAAM,OAAO,IAA6B;AACzC,WAAO,KAAK,OAAO,KAAK,gBAAgB,EAAE,SAAS;AAAA,EACpD;AAAA,EAEA,MAAM,OAAO,IAAY,OAA2C;AACnE,WAAO,KAAK,OAAO,MAAM,gBAAgB,EAAE,IAAI,KAAK;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,gBAAgB,EAAE,EAAE;AAAA,EAC/C;AACD;;;AC7BO,IAAM,iBAAN,MAAqB;AAAA,EAC3B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,KAAK,OAAgD;AAC1D,WAAO,KAAK,OAAO,KAAK,eAAe,KAAK;AAAA,EAC7C;AAAA,EAEA,MAAM,MAAM,OAA4D;AACvE,WAAO,KAAK,OAAO,KAAK,qBAAqB,KAAK;AAAA,EACnD;AAAA,EAEA,MAAM,IAAI,IAA4B;AACrC,WAAO,KAAK,OAAO,IAAI,eAAe,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAC/D;AAAA,EAEA,MAAM,KAAK,QAAwD;AAClE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,KAAK,eAAe,mBAAmB,EAAE,CAAC,SAAS;AAAA,EACvE;AACD;;;ACxBO,IAAM,mBAAN,MAAuB;AAAA,EAC7B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA6C;AACzD,WAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAK,QAA0D;AACpE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA8B;AACvC,WAAO,KAAK,OAAO,IAAI,iBAAiB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACjE;AAAA,EAEA,MAAM,OAAO,IAAY,OAA6C;AACrE,WAAO,KAAK,OAAO,MAAM,iBAAiB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,EAC1E;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,iBAAiB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACpE;AAAA,EAEA,MAAM,YAAY,IAAY,OAAwD;AACrF,WAAO,KAAK,OAAO,KAAK,iBAAiB,mBAAmB,EAAE,CAAC,aAAa,KAAK;AAAA,EAClF;AAAA,EAEA,MAAM,cAAc,IAAY,WAAkD;AACjF,WAAO,KAAK,OAAO;AAAA,MAClB,iBAAiB,mBAAmB,EAAE,CAAC,aAAa,mBAAmB,SAAS,CAAC;AAAA,IAClF;AAAA,EACD;AACD;;;AC1CO,IAAM,uBAAN,MAA2B;AAAA,EACjC,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,KAAK,QAA8D;AACxE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,OAA2D;AACpE,WAAO,KAAK,OAAO,KAAK,qBAAqB,KAAK;AAAA,EACnD;AAAA,EAEA,MAAM,OAAO,OAA8C;AAC1D,WAAO,KAAK,OAAO,OAAO,qBAAqB,mBAAmB,KAAK,CAAC,EAAE;AAAA,EAC3E;AACD;;;ACXO,IAAM,oBAAN,MAAwB;AAAA,EAC9B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA+C;AAC3D,WAAO,KAAK,OAAO,KAAK,kBAAkB,KAAK;AAAA,EAChD;AAAA,EAEA,MAAM,KAAK,QAA2D;AACrE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,IAA+B;AACxC,WAAO,KAAK,OAAO,IAAI,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAClE;AAAA,EAEA,MAAM,OAAO,IAAY,OAA+C;AACvE,WAAO,KAAK,OAAO,MAAM,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,EAC3E;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,EACrE;AAAA,EAEA,MAAM,QAAQ,IAA+B;AAC5C,WAAO,KAAK,OAAO,KAAK,kBAAkB,mBAAmB,EAAE,CAAC,UAAU;AAAA,EAC3E;AAAA,EAEA,MAAM,UAAU,IAA+B;AAC9C,WAAO,KAAK,OAAO,KAAK,kBAAkB,mBAAmB,EAAE,CAAC,YAAY;AAAA,EAC7E;AACD;;;ACjCO,IAAM,mBAAN,MAAuB;AAAA,EAC7B,YAA6B,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAM,OAAO,OAA6C;AACzD,WAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,IAAI,IAA8B;AACvC,WAAO,KAAK,OAAO,IAAI,iBAAiB,EAAE,EAAE;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAK,QAA0D;AACpE,WAAO,KAAK,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,OAAO,IAAY,OAA6C;AACrE,WAAO,KAAK,OAAO,MAAM,iBAAiB,EAAE,IAAI,KAAK;AAAA,EACtD;AAAA,EAEA,MAAM,OAAO,IAA2C;AACvD,WAAO,KAAK,OAAO,OAAO,iBAAiB,EAAE,EAAE;AAAA,EAChD;AAAA,EAEA,MAAM,KAAK,IAA2C;AACrD,WAAO,KAAK,OAAO,KAAK,iBAAiB,EAAE,OAAO;AAAA,EACnD;AACD;;;AX3BO,IAAM,YAAN,MAAgB;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAgB,SAAgC;AAC3D,UAAM,SAAS,IAAI,gBAAgB,QAAQ,SAAS,WAAW,2BAA2B;AAC1F,SAAK,SAAS,IAAI,eAAe,MAAM;AACvC,SAAK,UAAU,IAAI,gBAAgB,MAAM;AACzC,SAAK,WAAW,IAAI,iBAAiB,MAAM;AAC3C,SAAK,WAAW,IAAI,iBAAiB,MAAM;AAC3C,SAAK,YAAY,IAAI,kBAAkB,MAAM;AAC7C,SAAK,WAAW,IAAI,iBAAiB,MAAM;AAC3C,SAAK,aAAa,IAAI,mBAAmB,MAAM;AAC/C,SAAK,eAAe,IAAI,qBAAqB,MAAM;AACnD,SAAK,UAAU,IAAI,gBAAgB,MAAM;AAAA,EAC1C;AACD;","names":[]}