shipmail 0.1.25 → 0.1.27
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 +40 -4
- package/dist/index.cjs +81 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +241 -2
- package/dist/index.d.ts +241 -2
- package/dist/index.js +81 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -251,16 +251,45 @@ await shipmail.audiences.subscribers.add(audience.id, {
|
|
|
251
251
|
## Newsletters
|
|
252
252
|
|
|
253
253
|
```ts
|
|
254
|
+
import { readFile } from "node:fs/promises";
|
|
255
|
+
|
|
256
|
+
const newsletterDomains = await shipmail.newsletters.domains.list({ limit: 25 });
|
|
257
|
+
const assets = await shipmail.newsletters.assets.list({ kind: "image", limit: 25 });
|
|
258
|
+
const hero = await shipmail.newsletters.assets.upload({
|
|
259
|
+
filename: "hero.png",
|
|
260
|
+
content_type: "image/png",
|
|
261
|
+
data: await readFile("hero.png"),
|
|
262
|
+
});
|
|
263
|
+
const existingHero = await shipmail.newsletters.assets.registerFromUrl({
|
|
264
|
+
url: "https://cdn.shipmail.to/newsletter-images/org_123/hero.png",
|
|
265
|
+
filename: "hero.png",
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
console.log(assets.storage.used_bytes, assets.storage.limit_bytes);
|
|
269
|
+
|
|
254
270
|
const newsletter = await shipmail.newsletters.create({
|
|
255
271
|
audience_id: "aud_...",
|
|
256
|
-
newsletter_domain_id:
|
|
272
|
+
newsletter_domain_id: newsletterDomains.data[0].id,
|
|
257
273
|
name: "July changelog",
|
|
258
274
|
subject: "What shipped in July",
|
|
259
275
|
preview_text: "A quick product update",
|
|
260
|
-
|
|
261
|
-
|
|
276
|
+
blocks: [
|
|
277
|
+
{ type: "heading", level: 1, text: "July updates" },
|
|
278
|
+
{ type: "callout", variant: "info", title: "Quick note", body: "A short intro." },
|
|
279
|
+
{ type: "paragraph", body: "A quick product update." },
|
|
280
|
+
{ type: "image", url: hero.url, alt: "Product screenshot" },
|
|
281
|
+
{ type: "image", url: existingHero.url, alt: "Existing CDN screenshot" },
|
|
282
|
+
{
|
|
283
|
+
type: "columns",
|
|
284
|
+
ratio: "50-50",
|
|
285
|
+
left: { title: "For teams", body: "Shared inbox improvements." },
|
|
286
|
+
right: { title: "For agents", body: "API and MCP improvements." },
|
|
287
|
+
},
|
|
288
|
+
],
|
|
262
289
|
});
|
|
263
290
|
|
|
291
|
+
await shipmail.newsletters.preview(newsletter.id);
|
|
292
|
+
|
|
264
293
|
await shipmail.newsletters.sendTest(newsletter.id, {
|
|
265
294
|
recipient_email: "owner@example.com",
|
|
266
295
|
});
|
|
@@ -272,6 +301,13 @@ await shipmail.newsletters.schedule(newsletter.id, {
|
|
|
272
301
|
});
|
|
273
302
|
```
|
|
274
303
|
|
|
304
|
+
Newsletter test sends and schedules must pass preflight. Guardrail failures throw
|
|
305
|
+
`ValidationError` with the failed preflight items in `error.details`.
|
|
306
|
+
Preflight responses include `url_breakdown` so you can see which links, image
|
|
307
|
+
URLs, and video thumbnails count against the 20 unique URL limit.
|
|
308
|
+
Block prose fields are plain text in API requests. Use newlines for paragraph
|
|
309
|
+
breaks, and use `body_html` or `custom_html` only when you need raw HTML.
|
|
310
|
+
|
|
275
311
|
## Status
|
|
276
312
|
|
|
277
313
|
```ts
|
|
@@ -303,7 +339,7 @@ for await (const domain of shipmail.domains.listAutoPaginating({ limit: 25 })) {
|
|
|
303
339
|
}
|
|
304
340
|
```
|
|
305
341
|
|
|
306
|
-
`listAutoPaginating` is available on `domains`, `mailboxes`, `messages`, `threads`, `webhooks`, `webhooks.listDeliveriesAutoPaginating`, and `
|
|
342
|
+
`listAutoPaginating` is available on `domains`, `mailboxes`, `messages`, `threads`, `webhooks`, `webhooks.listDeliveriesAutoPaginating`, `suppressions`, `newsletters.domains`, and `newsletters.assets`.
|
|
307
343
|
|
|
308
344
|
## Webhook verification
|
|
309
345
|
|
package/dist/index.cjs
CHANGED
|
@@ -623,7 +623,65 @@ var Messages = class extends ApiResource {
|
|
|
623
623
|
function path(id) {
|
|
624
624
|
return `/newsletters/${encodeURIComponent(id)}`;
|
|
625
625
|
}
|
|
626
|
+
var NewsletterDomains = class extends ApiResource {
|
|
627
|
+
list(params, options) {
|
|
628
|
+
return this.client.request({
|
|
629
|
+
method: "GET",
|
|
630
|
+
path: "/newsletter-domains",
|
|
631
|
+
query: { cursor: params?.cursor, limit: params?.limit },
|
|
632
|
+
methodOptions: options
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
listAutoPaginating(params) {
|
|
636
|
+
return new Page(this.client, "/newsletter-domains", { limit: params?.limit });
|
|
637
|
+
}
|
|
638
|
+
};
|
|
639
|
+
var NewsletterAssets = class extends ApiResource {
|
|
640
|
+
list(params, options) {
|
|
641
|
+
return this.client.request({
|
|
642
|
+
method: "GET",
|
|
643
|
+
path: "/newsletter-assets",
|
|
644
|
+
query: {
|
|
645
|
+
cursor: params?.cursor,
|
|
646
|
+
limit: params?.limit,
|
|
647
|
+
kind: params?.kind,
|
|
648
|
+
q: params?.q
|
|
649
|
+
},
|
|
650
|
+
methodOptions: options
|
|
651
|
+
});
|
|
652
|
+
}
|
|
653
|
+
listAutoPaginating(params) {
|
|
654
|
+
return new Page(this.client, "/newsletter-assets", {
|
|
655
|
+
limit: params?.limit,
|
|
656
|
+
kind: params?.kind,
|
|
657
|
+
q: params?.q
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
upload(params, options) {
|
|
661
|
+
return this.client.request({
|
|
662
|
+
method: "POST",
|
|
663
|
+
path: "/newsletter-assets",
|
|
664
|
+
query: { filename: params.filename },
|
|
665
|
+
rawBody: params.data,
|
|
666
|
+
contentType: params.content_type,
|
|
667
|
+
methodOptions: options
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
registerFromUrl(params, options) {
|
|
671
|
+
return this.client.request({
|
|
672
|
+
method: "POST",
|
|
673
|
+
path: "/newsletter-assets",
|
|
674
|
+
body: params,
|
|
675
|
+
methodOptions: options
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
};
|
|
626
679
|
var Newsletters = class extends ApiResource {
|
|
680
|
+
constructor(client) {
|
|
681
|
+
super(client);
|
|
682
|
+
this.domains = new NewsletterDomains(client);
|
|
683
|
+
this.assets = new NewsletterAssets(client);
|
|
684
|
+
}
|
|
627
685
|
create(params, options) {
|
|
628
686
|
return this.client.request({
|
|
629
687
|
method: "POST",
|
|
@@ -632,6 +690,14 @@ var Newsletters = class extends ApiResource {
|
|
|
632
690
|
methodOptions: options
|
|
633
691
|
});
|
|
634
692
|
}
|
|
693
|
+
createFromChangelog(params, options) {
|
|
694
|
+
return this.client.request({
|
|
695
|
+
method: "POST",
|
|
696
|
+
path: "/newsletters/from-changelog",
|
|
697
|
+
body: params,
|
|
698
|
+
methodOptions: options
|
|
699
|
+
});
|
|
700
|
+
}
|
|
635
701
|
list(params, options) {
|
|
636
702
|
return this.client.request({
|
|
637
703
|
method: "GET",
|
|
@@ -665,6 +731,13 @@ var Newsletters = class extends ApiResource {
|
|
|
665
731
|
methodOptions: options
|
|
666
732
|
});
|
|
667
733
|
}
|
|
734
|
+
preview(id, options) {
|
|
735
|
+
return this.client.request({
|
|
736
|
+
method: "POST",
|
|
737
|
+
path: `${path(id)}/preview`,
|
|
738
|
+
methodOptions: options
|
|
739
|
+
});
|
|
740
|
+
}
|
|
668
741
|
sendTest(id, params, options) {
|
|
669
742
|
return this.client.request({
|
|
670
743
|
method: "POST",
|
|
@@ -865,7 +938,7 @@ var Webhooks = class extends ApiResource {
|
|
|
865
938
|
};
|
|
866
939
|
|
|
867
940
|
// src/version.ts
|
|
868
|
-
var VERSION = "0.1.
|
|
941
|
+
var VERSION = "0.1.27";
|
|
869
942
|
|
|
870
943
|
// src/client.ts
|
|
871
944
|
var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
|
|
@@ -889,6 +962,12 @@ function isApiErrorBody(value) {
|
|
|
889
962
|
const error = obj["error"];
|
|
890
963
|
return typeof error["type"] === "string" && typeof error["message"] === "string";
|
|
891
964
|
}
|
|
965
|
+
function rawBodyToBlobPart(rawBody) {
|
|
966
|
+
if (rawBody instanceof ArrayBuffer) return rawBody;
|
|
967
|
+
const buffer = new ArrayBuffer(rawBody.byteLength);
|
|
968
|
+
new Uint8Array(buffer).set(rawBody);
|
|
969
|
+
return buffer;
|
|
970
|
+
}
|
|
892
971
|
var ShipMailClient = class {
|
|
893
972
|
/**
|
|
894
973
|
* Create a new ShipMail client.
|
|
@@ -958,7 +1037,7 @@ var ShipMailClient = class {
|
|
|
958
1037
|
let body = null;
|
|
959
1038
|
if (options.rawBody !== void 0) {
|
|
960
1039
|
headers["Content-Type"] = options.contentType ?? "application/octet-stream";
|
|
961
|
-
body = new Blob([options.rawBody]);
|
|
1040
|
+
body = new Blob([rawBodyToBlobPart(options.rawBody)]);
|
|
962
1041
|
} else if (options.body !== void 0) {
|
|
963
1042
|
headers["Content-Type"] = "application/json";
|
|
964
1043
|
body = JSON.stringify(options.body);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/pagination.ts","../src/resource.ts","../src/resources/audiences.ts","../src/resources/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.ts","../src/resources/newsletters.ts","../src/resources/status.ts","../src/resources/suppressions.ts","../src/resources/threads.ts","../src/resources/webhooks.ts","../src/version.ts","../src/client.ts","../src/types/common.ts","../src/webhook-verification.ts"],"names":["path","base"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiErrorBody, ErrorType } from \"./types/common.js\";\n\nexport class ShipMailError extends Error {\n readonly status: number | undefined;\n readonly type: ErrorType | undefined;\n readonly requestId: string | undefined;\n readonly retryable: boolean;\n\n constructor(\n message: string,\n options?: {\n readonly status?: number | undefined;\n readonly type?: ErrorType | undefined;\n readonly requestId?: string | undefined;\n readonly retryable?: boolean | undefined;\n },\n ) {\n super(message);\n this.name = \"ShipMailError\";\n this.status = options?.status;\n this.type = options?.type;\n this.requestId = options?.requestId;\n this.retryable = options?.retryable ?? false;\n }\n}\n\nexport class AuthenticationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 401, type: \"authentication_error\", requestId, retryable: false });\n this.name = \"AuthenticationError\";\n }\n}\n\nexport class AuthorizationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"authorization_error\", requestId, retryable: false });\n this.name = \"AuthorizationError\";\n }\n}\n\nexport class ValidationError extends ShipMailError {\n readonly details: readonly { readonly field: string; readonly message: string }[] | undefined;\n\n constructor(\n message: string,\n options?: {\n readonly requestId?: string | undefined;\n readonly details?:\n | readonly { readonly field: string; readonly message: string }[]\n | undefined;\n },\n ) {\n super(message, {\n status: 422,\n type: \"validation_error\",\n requestId: options?.requestId,\n retryable: false,\n });\n this.name = \"ValidationError\";\n this.details = options?.details;\n }\n}\n\nexport class QuotaExceededError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"quota_exceeded\", requestId, retryable: false });\n this.name = \"QuotaExceededError\";\n }\n}\n\nexport class NotFoundError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 404, type: \"not_found\", requestId, retryable: false });\n this.name = \"NotFoundError\";\n }\n}\n\nexport class RateLimitError extends ShipMailError {\n readonly retryAfter: number | undefined;\n\n constructor(\n message: string,\n options?: { readonly requestId?: string | undefined; readonly retryAfter?: number | undefined },\n ) {\n super(message, {\n status: 429,\n type: \"rate_limit_error\",\n requestId: options?.requestId,\n retryable: true,\n });\n this.name = \"RateLimitError\";\n this.retryAfter = options?.retryAfter;\n }\n}\n\nexport class ConflictError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 409, type: \"conflict\", requestId, retryable: false });\n this.name = \"ConflictError\";\n }\n}\n\nexport class InternalServerError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 500, type: \"internal_error\", requestId, retryable: true });\n this.name = \"InternalServerError\";\n }\n}\n\nexport class ConnectionError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: true });\n this.name = \"ConnectionError\";\n }\n}\n\nexport class WebhookVerificationError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: false });\n this.name = \"WebhookVerificationError\";\n }\n}\n\nexport function mapErrorFromResponse(\n status: number,\n body: ApiErrorBody,\n requestId?: string,\n): ShipMailError {\n const error = body.error;\n const rid = requestId ?? error.request_id;\n\n switch (error.type) {\n case \"authentication_error\":\n return new AuthenticationError(error.message, rid);\n case \"authorization_error\":\n return new AuthorizationError(error.message, rid);\n case \"quota_exceeded\":\n return new QuotaExceededError(error.message, rid);\n case \"validation_error\":\n return new ValidationError(error.message, { requestId: rid, details: error.details });\n case \"not_found\":\n return new NotFoundError(error.message, rid);\n case \"rate_limit_error\":\n return new RateLimitError(error.message, { requestId: rid, retryAfter: error.retry_after });\n case \"conflict\":\n return new ConflictError(error.message, rid);\n case \"internal_error\":\n return new InternalServerError(error.message, rid);\n default:\n return new ShipMailError(error.message, {\n status,\n type: error.type,\n requestId: rid,\n retryable: status >= 500,\n });\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\nimport type { PaginatedResponse } from \"./types/common.js\";\n\nexport class Page<T> implements AsyncIterable<T> {\n private readonly client: ShipMailClient;\n private readonly path: string;\n private readonly query: Record<string, string | number | boolean | undefined>;\n\n constructor(\n client: ShipMailClient,\n path: string,\n query: Record<string, string | number | boolean | undefined>,\n ) {\n this.client = client;\n this.path = path;\n this.query = query;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let cursor: string | undefined;\n\n do {\n const response = await this.client.request<PaginatedResponse<T>>({\n method: \"GET\",\n path: this.path,\n query: { ...this.query, cursor },\n });\n\n for (const item of response.data) {\n yield item;\n }\n\n cursor = response.pagination.next_cursor ?? undefined;\n if (!response.pagination.has_more) break;\n } while (cursor);\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\n\nexport abstract class ApiResource {\n protected readonly client: ShipMailClient;\n\n constructor(client: ShipMailClient) {\n this.client = client;\n }\n}\n","import type { ShipMailClient } from \"../client.js\";\nimport { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type {\n AddSubscriberParams,\n AddSubscribersBatchParams,\n AddSubscribersBatchResult,\n Audience,\n CreateAudienceParams,\n ListAudiencesParams,\n ListSubscribersParams,\n Subscriber,\n SubscriberResult,\n UpdateAudienceParams,\n UpdateSubscriberParams,\n} from \"../types/audience.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\n\nfunction base(audienceId: string): string {\n return `/audiences/${encodeURIComponent(audienceId)}/subscribers`;\n}\n\nclass Subscribers extends ApiResource {\n add(\n audienceId: string,\n params: AddSubscriberParams,\n options?: MethodOptions,\n ): Promise<SubscriberResult> {\n return this.client.request<SubscriberResult>({\n method: \"POST\",\n path: base(audienceId),\n body: params,\n methodOptions: options,\n });\n }\n\n addBatch(\n audienceId: string,\n params: AddSubscribersBatchParams,\n options?: MethodOptions,\n ): Promise<AddSubscribersBatchResult> {\n return this.client.request<AddSubscribersBatchResult>({\n method: \"POST\",\n path: `${base(audienceId)}/batch`,\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n audienceId: string,\n params?: ListSubscribersParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Subscriber>> {\n return this.client.request<PaginatedResponse<Subscriber>>({\n method: \"GET\",\n path: base(audienceId),\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(\n audienceId: string,\n params?: Omit<ListSubscribersParams, \"cursor\">,\n ): Page<Subscriber> {\n return new Page<Subscriber>(this.client, base(audienceId), {\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n });\n }\n\n get(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n\n getByEmail(audienceId: string, email: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/by-email/${encodeURIComponent(email)}`,\n methodOptions: options,\n });\n }\n\n update(\n audienceId: string,\n subscriberId: string,\n params: UpdateSubscriberParams,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"PATCH\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n unsubscribe(\n audienceId: string,\n subscriberId: string,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"POST\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}/unsubscribe`,\n methodOptions: options,\n });\n }\n\n remove(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n}\n\nexport class Audiences extends ApiResource {\n readonly subscribers: Subscribers;\n\n constructor(client: ShipMailClient) {\n super(client);\n this.subscribers = new Subscribers(client);\n }\n\n create(params: CreateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"POST\",\n path: \"/audiences\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n params?: ListAudiencesParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Audience>> {\n return this.client.request<PaginatedResponse<Audience>>({\n method: \"GET\",\n path: \"/audiences\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListAudiencesParams, \"cursor\">): Page<Audience> {\n return new Page<Audience>(this.client, \"/audiences\", { limit: params?.limit });\n }\n\n get(id: string, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"GET\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"PATCH\",\n path: `/audiences/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateDomainParams,\n Domain,\n DomainSearchResult,\n DomainVerificationResult,\n ListDomainsParams,\n RegisterDomainParams,\n SearchDomainsParams,\n UpdateDomainParams,\n} from \"../types/domain.js\";\n\nexport class Domains extends ApiResource {\n create(params: CreateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListDomainsParams, options?: MethodOptions): Promise<PaginatedResponse<Domain>> {\n return this.client.request<PaginatedResponse<Domain>>({\n method: \"GET\",\n path: \"/domains\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListDomainsParams, \"cursor\">): Page<Domain> {\n return new Page<Domain>(this.client, \"/domains\", {\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"GET\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"PATCH\",\n path: `/domains/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n verify(id: string, options?: MethodOptions): Promise<DomainVerificationResult> {\n return this.client.request<DomainVerificationResult>({\n method: \"POST\",\n path: `/domains/${encodeURIComponent(id)}/verification`,\n methodOptions: options,\n });\n }\n\n search(\n params: SearchDomainsParams,\n options?: MethodOptions,\n ): Promise<{ readonly results: readonly DomainSearchResult[] }> {\n return this.client.request<{ readonly results: readonly DomainSearchResult[] }>({\n method: \"POST\",\n path: \"/domains/search\",\n body: params,\n methodOptions: options,\n });\n }\n\n register(params: RegisterDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains/register\",\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateImportUploadParams,\n CreateMailboxImportParams,\n ImportUpload,\n MailboxImport,\n MailboxImports,\n} from \"../types/import.js\";\nimport type {\n CreateMailboxFolderParams,\n CreateMailboxParams,\n DownloadInboxAttachmentParams,\n InboxMessageAction,\n InboxMessages,\n InboxThread,\n ListInboxMessagesParams,\n ListMailboxesParams,\n Mailbox,\n MailboxFolder,\n MailboxFolders,\n MailboxIdentities,\n MailboxRules,\n MoveInboxMessageParams,\n ResetMailboxPasswordParams,\n UpdateAutoReplyParams,\n UpdateInboxMessageParams,\n UpdateMailboxFolderParams,\n UpdateMailboxParams,\n UpdateMailboxRulesParams,\n UpdateSpamFilterParams,\n} from \"../types/mailbox.js\";\n\nexport class Mailboxes extends ApiResource {\n create(params: CreateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"POST\",\n path: \"/mailboxes\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListMailboxesParams, options?: MethodOptions): Promise<PaginatedResponse<Mailbox>> {\n return this.client.request<PaginatedResponse<Mailbox>>({\n method: \"GET\",\n path: \"/mailboxes\",\n query: {\n domain_id: params?.domain_id,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListMailboxesParams, \"cursor\">): Page<Mailbox> {\n return new Page<Mailbox>(this.client, \"/mailboxes\", {\n domain_id: params?.domain_id,\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n listFolders(id: string, options?: MethodOptions): Promise<MailboxFolders> {\n return this.client.request<MailboxFolders>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n methodOptions: options,\n });\n }\n\n createFolder(\n id: string,\n params: CreateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateFolder(\n id: string,\n folderId: string,\n params: UpdateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteFolder(id: string, folderId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n methodOptions: options,\n });\n }\n\n listIdentities(id: string, options?: MethodOptions): Promise<MailboxIdentities> {\n return this.client.request<MailboxIdentities>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/identities`,\n methodOptions: options,\n });\n }\n\n listInboxMessages(\n id: string,\n params?: ListInboxMessagesParams,\n options?: MethodOptions,\n ): Promise<InboxMessages> {\n return this.client.request<InboxMessages>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages`,\n query: {\n folder_id: params?.folder_id,\n folder_role: params?.folder_role,\n search_text: params?.search_text,\n position: params?.position,\n limit: params?.limit,\n has_keyword: params?.has_keyword,\n not_keyword: params?.not_keyword,\n },\n methodOptions: options,\n });\n }\n\n getInboxThread(id: string, threadId: string, options?: MethodOptions): Promise<InboxThread> {\n return this.client.request<InboxThread>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/threads/${encodeURIComponent(threadId)}`,\n methodOptions: options,\n });\n }\n\n updateInboxMessage(\n id: string,\n messageId: string,\n params: UpdateInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n moveInboxMessage(\n id: string,\n messageId: string,\n params: MoveInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}/move`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteInboxMessage(id: string, messageId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n methodOptions: options,\n });\n }\n\n downloadInboxAttachment(\n id: string,\n params: DownloadInboxAttachmentParams,\n options?: MethodOptions,\n ): Promise<Uint8Array> {\n return this.client.requestBytes({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/attachments`,\n query: {\n blob_id: params.blob_id,\n name: params.name,\n },\n methodOptions: options,\n });\n }\n\n resetPassword(\n id: string,\n params: ResetMailboxPasswordParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/password`,\n body: params,\n methodOptions: options,\n });\n }\n\n getRules(id: string, options?: MethodOptions): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n methodOptions: options,\n });\n }\n\n updateRules(\n id: string,\n params: UpdateMailboxRulesParams,\n options?: MethodOptions,\n ): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"PUT\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateAutoReply(\n id: string,\n params: UpdateAutoReplyParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/auto-reply`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateSpamFilter(\n id: string,\n params: UpdateSpamFilterParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/spam-filter`,\n body: params,\n methodOptions: options,\n });\n }\n\n createImport(\n id: string,\n params: CreateMailboxImportParams,\n options?: MethodOptions,\n ): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n body: params,\n methodOptions: options,\n });\n }\n\n listImports(id: string, options?: MethodOptions): Promise<MailboxImports> {\n return this.client.request<MailboxImports>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n methodOptions: options,\n });\n }\n\n getImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}`,\n methodOptions: options,\n });\n }\n\n cancelImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/cancel`,\n methodOptions: options,\n });\n }\n\n undoImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/undo`,\n methodOptions: options,\n });\n }\n\n createImportUpload(\n id: string,\n params: CreateImportUploadParams,\n options?: MethodOptions,\n ): Promise<ImportUpload> {\n return this.client.request<ImportUpload>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/files`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n ListMessagesParams,\n Message,\n ReplyToMessageParams,\n SendMessageParams,\n} from \"../types/message.js\";\n\nexport class Messages extends ApiResource {\n send(params: SendMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: \"/messages\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params: ListMessagesParams, options?: MethodOptions): Promise<PaginatedResponse<Message>> {\n return this.client.request<PaginatedResponse<Message>>({\n method: \"GET\",\n path: \"/messages\",\n query: {\n mailbox_id: params.mailbox_id,\n cursor: params.cursor,\n limit: params.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params: Omit<ListMessagesParams, \"cursor\">): Page<Message> {\n return new Page<Message>(this.client, \"/messages\", {\n mailbox_id: params.mailbox_id,\n limit: params.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"GET\",\n path: `/messages/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n reply(id: string, params: ReplyToMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: `/messages/${encodeURIComponent(id)}/reply`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateNewsletterParams,\n ListNewslettersParams,\n Newsletter,\n NewsletterPreflight,\n NewsletterTestSend,\n ScheduleNewsletterParams,\n SendNewsletterTestParams,\n UpdateNewsletterParams,\n} from \"../types/newsletter.js\";\n\nfunction path(id: string): string {\n return `/newsletters/${encodeURIComponent(id)}`;\n}\n\nexport class Newsletters extends ApiResource {\n create(params: CreateNewsletterParams, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: \"/newsletters\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n params?: ListNewslettersParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Newsletter>> {\n return this.client.request<PaginatedResponse<Newsletter>>({\n method: \"GET\",\n path: \"/newsletters\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListNewslettersParams, \"cursor\">): Page<Newsletter> {\n return new Page<Newsletter>(this.client, \"/newsletters\", { limit: params?.limit });\n }\n\n get(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"GET\",\n path: path(id),\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateNewsletterParams, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"PATCH\",\n path: path(id),\n body: params,\n methodOptions: options,\n });\n }\n\n preflight(id: string, options?: MethodOptions): Promise<NewsletterPreflight> {\n return this.client.request<NewsletterPreflight>({\n method: \"POST\",\n path: `${path(id)}/preflight`,\n methodOptions: options,\n });\n }\n\n sendTest(\n id: string,\n params: SendNewsletterTestParams,\n options?: MethodOptions,\n ): Promise<NewsletterTestSend> {\n return this.client.request<NewsletterTestSend>({\n method: \"POST\",\n path: `${path(id)}/test-send`,\n body: params,\n methodOptions: options,\n });\n }\n\n schedule(\n id: string,\n params: ScheduleNewsletterParams,\n options?: MethodOptions,\n ): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/schedule`,\n body: params,\n methodOptions: options,\n });\n }\n\n cancel(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/cancel`,\n methodOptions: options,\n });\n }\n\n resume(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/resume`,\n methodOptions: options,\n });\n }\n}\n","import { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, StatusResponse } from \"../types/common.js\";\n\nexport class Status extends ApiResource {\n get(options?: MethodOptions): Promise<StatusResponse> {\n return this.client.request<StatusResponse>({\n method: \"GET\",\n path: \"/status\",\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type { ListSuppressionsParams, Suppression } from \"../types/suppression.js\";\n\nexport class Suppressions extends ApiResource {\n list(\n params?: ListSuppressionsParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Suppression>> {\n return this.client.request<PaginatedResponse<Suppression>>({\n method: \"GET\",\n path: \"/suppressions\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListSuppressionsParams, \"cursor\">): Page<Suppression> {\n return new Page<Suppression>(this.client, \"/suppressions\", {\n limit: params?.limit,\n });\n }\n\n remove(email: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/suppressions/${encodeURIComponent(email)}`,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type { Message } from \"../types/message.js\";\nimport type {\n GetThreadParams,\n ListThreadsParams,\n ReplyToThreadParams,\n Thread,\n} from \"../types/thread.js\";\n\nexport class Threads extends ApiResource {\n list(params: ListThreadsParams, options?: MethodOptions): Promise<PaginatedResponse<Thread>> {\n return this.client.request<PaginatedResponse<Thread>>({\n method: \"GET\",\n path: \"/threads\",\n query: {\n mailbox_id: params.mailbox_id,\n cursor: params.cursor,\n limit: params.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params: Omit<ListThreadsParams, \"cursor\">): Page<Thread> {\n return new Page<Thread>(this.client, \"/threads\", {\n mailbox_id: params.mailbox_id,\n limit: params.limit,\n });\n }\n\n get(\n id: string,\n params?: GetThreadParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Message>> {\n return this.client.request<PaginatedResponse<Message>>({\n method: \"GET\",\n path: `/threads/${encodeURIComponent(id)}`,\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n reply(id: string, params: ReplyToThreadParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: `/threads/${encodeURIComponent(id)}/reply`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateWebhookParams,\n ListDeliveriesParams,\n ListWebhooksParams,\n RotateSecretResponse,\n TestWebhookResponse,\n UpdateWebhookParams,\n Webhook,\n WebhookDelivery,\n WebhookWithSecret,\n} from \"../types/webhook.js\";\n\nexport class Webhooks extends ApiResource {\n create(params: CreateWebhookParams, options?: MethodOptions): Promise<WebhookWithSecret> {\n return this.client.request<WebhookWithSecret>({\n method: \"POST\",\n path: \"/webhooks\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListWebhooksParams, options?: MethodOptions): Promise<PaginatedResponse<Webhook>> {\n return this.client.request<PaginatedResponse<Webhook>>({\n method: \"GET\",\n path: \"/webhooks\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListWebhooksParams, \"cursor\">): Page<Webhook> {\n return new Page<Webhook>(this.client, \"/webhooks\", {\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Webhook> {\n return this.client.request<Webhook>({\n method: \"GET\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateWebhookParams, options?: MethodOptions): Promise<Webhook> {\n return this.client.request<Webhook>({\n method: \"PATCH\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n rotateSecret(id: string, options?: MethodOptions): Promise<RotateSecretResponse> {\n return this.client.request<RotateSecretResponse>({\n method: \"POST\",\n path: `/webhooks/${encodeURIComponent(id)}/rotate-secret`,\n methodOptions: options,\n });\n }\n\n test(id: string, options?: MethodOptions): Promise<TestWebhookResponse> {\n return this.client.request<TestWebhookResponse>({\n method: \"POST\",\n path: `/webhooks/${encodeURIComponent(id)}/test`,\n methodOptions: options,\n });\n }\n\n listDeliveries(\n id: string,\n params?: ListDeliveriesParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<WebhookDelivery>> {\n return this.client.request<PaginatedResponse<WebhookDelivery>>({\n method: \"GET\",\n path: `/webhooks/${encodeURIComponent(id)}/deliveries`,\n query: {\n status: params?.status,\n event_type: params?.event_type,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listDeliveriesAutoPaginating(\n id: string,\n params?: Omit<ListDeliveriesParams, \"cursor\">,\n ): Page<WebhookDelivery> {\n return new Page<WebhookDelivery>(\n this.client,\n `/webhooks/${encodeURIComponent(id)}/deliveries`,\n {\n status: params?.status,\n event_type: params?.event_type,\n limit: params?.limit,\n },\n );\n }\n}\n","export const VERSION = \"0.1.25\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Audiences } from \"./resources/audiences.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.js\";\nimport { Newsletters } from \"./resources/newsletters.js\";\nimport { Status } from \"./resources/status.js\";\nimport { Suppressions } from \"./resources/suppressions.js\";\nimport { Threads } from \"./resources/threads.js\";\nimport { Webhooks } from \"./resources/webhooks.js\";\nimport type { ApiErrorBody, MethodOptions, ShipMailConfig } from \"./types/common.js\";\nimport { VERSION } from \"./version.js\";\n\nconst DEFAULT_BASE_URL = \"https://shipmail.to/api/v1\";\nconst DEFAULT_MAX_RETRIES = 2;\nconst DEFAULT_TIMEOUT = 30_000;\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction calculateBackoff(attempt: number, retryAfterMs?: number): number {\n if (retryAfterMs !== undefined && retryAfterMs > 0) {\n return retryAfterMs;\n }\n const base = Math.min(2 ** attempt * 500, 8000);\n const jitter = Math.random() * base * 0.5;\n return base + jitter;\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n if (typeof obj[\"error\"] !== \"object\" || obj[\"error\"] === null) return false;\n const error = obj[\"error\"] as Record<string, unknown>;\n return typeof error[\"type\"] === \"string\" && typeof error[\"message\"] === \"string\";\n}\n\nexport type RequestOptions = {\n readonly method: string;\n readonly path: string;\n readonly body?: unknown | undefined;\n readonly query?: Record<string, string | number | boolean | undefined> | undefined;\n readonly rawBody?: ArrayBuffer | undefined;\n readonly contentType?: string | undefined;\n readonly methodOptions?: MethodOptions | undefined;\n};\n\n/**\n * Client for the ShipMail API. Handles authentication, retries, and resource access.\n */\nexport class ShipMailClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly maxRetries: number;\n private readonly timeout: number;\n private readonly fetchFn: typeof fetch;\n private readonly defaultHeaders: Record<string, string>;\n\n readonly audiences: Audiences;\n readonly domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\n readonly newsletters: Newsletters;\n readonly suppressions: Suppressions;\n readonly threads: Threads;\n readonly webhooks: Webhooks;\n readonly status: Status;\n\n /**\n * Create a new ShipMail client.\n * @param config - API key string or full configuration object.\n */\n constructor(config: string | ShipMailConfig) {\n if (typeof config === \"string\") {\n this.apiKey = config;\n this.baseUrl = DEFAULT_BASE_URL;\n this.maxRetries = DEFAULT_MAX_RETRIES;\n this.timeout = DEFAULT_TIMEOUT;\n this.fetchFn = globalThis.fetch;\n this.defaultHeaders = {};\n } else {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n this.defaultHeaders = config.defaultHeaders ? { ...config.defaultHeaders } : {};\n }\n\n this.audiences = new Audiences(this);\n this.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(this);\n this.newsletters = new Newsletters(this);\n this.suppressions = new Suppressions(this);\n this.threads = new Threads(this);\n this.webhooks = new Webhooks(this);\n this.status = new Status(this);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n return this.requestWithParser(options, \"application/json\", async (response) => {\n if (response.status === 204) {\n return undefined as T;\n }\n return (await response.json()) as T;\n });\n }\n\n async requestBytes(options: RequestOptions): Promise<Uint8Array> {\n return this.requestWithParser(options, \"application/octet-stream\", async (response) => {\n return new Uint8Array(await response.arrayBuffer());\n });\n }\n\n private async requestWithParser<T>(\n options: RequestOptions,\n accept: string,\n parseSuccess: (response: Response) => Promise<T>,\n ): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n let lastError: ShipMailError | undefined;\n const methodOpts = options.methodOptions;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n if (attempt > 0) {\n const retryAfterMs =\n lastError instanceof RateLimitError && lastError.retryAfter !== undefined\n ? lastError.retryAfter * 1000\n : undefined;\n const delay = calculateBackoff(attempt - 1, retryAfterMs);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n let response: Response;\n try {\n const headers: Record<string, string> = {\n ...this.defaultHeaders,\n Authorization: `Bearer ${this.apiKey}`,\n \"User-Agent\": `shipmail-node/${VERSION}`,\n Accept: accept,\n ...methodOpts?.headers,\n };\n\n if (methodOpts?.idempotencyKey) {\n headers[\"Idempotency-Key\"] = methodOpts.idempotencyKey;\n }\n\n let body: BodyInit | null = null;\n if (options.rawBody !== undefined) {\n headers[\"Content-Type\"] = options.contentType ?? \"application/octet-stream\";\n body = new Blob([options.rawBody]);\n } else if (options.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n body = JSON.stringify(options.body);\n }\n\n const effectiveTimeout = methodOpts?.timeout ?? this.timeout;\n\n response = await this.fetchFn(url, {\n method: options.method,\n headers,\n body,\n signal: methodOpts?.signal ?? AbortSignal.timeout(effectiveTimeout),\n });\n } catch (err) {\n lastError = new ConnectionError(err instanceof Error ? err.message : \"Request failed\");\n if (attempt < this.maxRetries) continue;\n throw lastError;\n }\n\n if (response.ok) {\n return parseSuccess(response);\n }\n\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = null;\n }\n\n if (isApiErrorBody(errorBody)) {\n lastError = mapErrorFromResponse(response.status, errorBody);\n } else {\n lastError = new ShipMailError(`Request failed with status ${response.status}`, {\n status: response.status,\n retryable: isRetryableStatus(response.status),\n });\n }\n\n if (!lastError.retryable || attempt >= this.maxRetries) {\n throw lastError;\n }\n }\n\n throw lastError ?? new ShipMailError(\"Request failed after retries\");\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n ): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n}\n","export type ShipMailConfig = {\n readonly apiKey: string;\n readonly baseUrl?: string | undefined;\n readonly maxRetries?: number | undefined;\n readonly timeout?: number | undefined;\n readonly fetch?: typeof fetch | undefined;\n readonly defaultHeaders?: Record<string, string> | undefined;\n};\n\nexport type PaginationParams = {\n readonly cursor?: string | undefined;\n readonly limit?: number | undefined;\n};\n\nexport type PaginatedResponse<T> = {\n readonly data: readonly T[];\n readonly pagination: {\n readonly next_cursor: string | null;\n readonly has_more: boolean;\n readonly limit: number;\n };\n};\n\nexport type ErrorType =\n | \"validation_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"quota_exceeded\"\n | \"not_found\"\n | \"rate_limit_error\"\n | \"conflict\"\n | \"internal_error\";\n\nexport type ApiErrorBody = {\n readonly error: {\n readonly type: ErrorType;\n readonly message: string;\n readonly request_id?: string | undefined;\n readonly details?: readonly { readonly field: string; readonly message: string }[] | undefined;\n readonly retry_after?: number | undefined;\n };\n};\n\nexport type EmailRecipient = {\n readonly address: string;\n readonly name?: string | null | undefined;\n};\n\nexport type EmailRecipientInput = EmailRecipient | string;\n\nexport const WEBHOOK_EVENT_TYPES = [\n \"message.received\",\n \"message.sent\",\n \"message.delivered\",\n \"message.bounced\",\n \"message.complained\",\n \"domain.verified\",\n \"domain.verification_failed\",\n \"domain.degraded\",\n \"org.reputation_warning\",\n \"org.sending_throttled\",\n \"org.sending_suspended\",\n \"org.reputation_recovered\",\n] as const;\n\nexport type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];\n\nexport type StatusResponse = {\n readonly status: string;\n readonly version: string;\n readonly time: string;\n readonly request_id: string;\n};\n\nexport const DOMAIN_STATUSES = [\"pending\", \"verifying\", \"verified\", \"degraded\", \"failed\"] as const;\nexport type DomainStatus = (typeof DOMAIN_STATUSES)[number];\n\nexport const MESSAGE_STATUSES = [\n \"scheduled\",\n \"queued\",\n \"sent\",\n \"delivered\",\n \"bounced\",\n \"complained\",\n \"failed\",\n \"cancelled\",\n] as const;\nexport type MessageStatus = (typeof MESSAGE_STATUSES)[number];\n\nexport const MESSAGE_SOURCES = [\"api\", \"dashboard\", \"inbound\", \"smtp\"] as const;\nexport type MessageSource = (typeof MESSAGE_SOURCES)[number];\n\nexport const WEBHOOK_DELIVERY_STATUSES = [\"pending\", \"delivered\", \"failed\"] as const;\nexport type WebhookDeliveryStatus = (typeof WEBHOOK_DELIVERY_STATUSES)[number];\n\nexport type MethodOptions = {\n readonly timeout?: number | undefined;\n readonly signal?: AbortSignal | undefined;\n readonly headers?: Record<string, string> | undefined;\n readonly idempotencyKey?: string | undefined;\n};\n","import { WebhookVerificationError } from \"./errors.js\";\nimport type { WebhookEvent } from \"./types/webhook.js\";\n\nconst DEFAULT_TOLERANCE_SECONDS = 300; // 5 minutes\n\ntype WebhookHeaders = {\n readonly \"x-shipmail-signature\"?: string;\n readonly \"x-shipmail-timestamp\"?: string;\n readonly \"x-shipmail-event-id\"?: string;\n readonly [key: string]: string | undefined;\n};\n\nfunction getHeader(headers: WebhookHeaders | Headers, name: string): string | undefined {\n if (headers instanceof Headers) {\n return headers.get(name) ?? undefined;\n }\n return headers[name] ?? headers[name.toLowerCase()];\n}\n\nasync function signPayload(secret: string, timestamp: number, body: string): Promise<string> {\n const { createHmac } = await import(\"crypto\");\n const payload = `v1=${timestamp}\\n${body}`;\n return createHmac(\"sha256\", secret).update(payload).digest(\"hex\");\n}\n\n/**\n * Verify an incoming webhook signature. Throws `WebhookVerificationError` on failure.\n * Returns the parsed webhook event on success.\n */\nexport async function verifyWebhook(\n body: string,\n headers: WebhookHeaders | Headers,\n secret: string,\n options?: { readonly toleranceInSeconds?: number | undefined },\n): Promise<WebhookEvent> {\n const signature = getHeader(headers, \"x-shipmail-signature\");\n const timestampStr = getHeader(headers, \"x-shipmail-timestamp\");\n\n if (!signature) {\n throw new WebhookVerificationError(\"Missing X-ShipMail-Signature header\");\n }\n if (!timestampStr) {\n throw new WebhookVerificationError(\"Missing X-ShipMail-Timestamp header\");\n }\n\n const timestamp = parseInt(timestampStr, 10);\n if (isNaN(timestamp)) {\n throw new WebhookVerificationError(\"Invalid X-ShipMail-Timestamp header\");\n }\n\n const tolerance = options?.toleranceInSeconds ?? DEFAULT_TOLERANCE_SECONDS;\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n throw new WebhookVerificationError(\"Webhook timestamp is outside tolerance window\");\n }\n\n const expected = await signPayload(secret, timestamp, body);\n\n const { timingSafeEqual } = await import(\"crypto\");\n const sigBuffer = Buffer.from(signature, \"hex\");\n const expectedBuffer = Buffer.from(expected, \"hex\");\n\n if (sigBuffer.length !== expectedBuffer.length || !timingSafeEqual(sigBuffer, expectedBuffer)) {\n throw new WebhookVerificationError(\"Webhook signature verification failed\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n throw new WebhookVerificationError(\"Invalid webhook payload: not valid JSON\");\n }\n\n return parsed as WebhookEvent;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/pagination.ts","../src/resource.ts","../src/resources/audiences.ts","../src/resources/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.ts","../src/resources/newsletters.ts","../src/resources/status.ts","../src/resources/suppressions.ts","../src/resources/threads.ts","../src/resources/webhooks.ts","../src/version.ts","../src/client.ts","../src/types/common.ts","../src/webhook-verification.ts"],"names":["path","base"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiErrorBody, ErrorType } from \"./types/common.js\";\n\nexport class ShipMailError extends Error {\n readonly status: number | undefined;\n readonly type: ErrorType | undefined;\n readonly requestId: string | undefined;\n readonly retryable: boolean;\n\n constructor(\n message: string,\n options?: {\n readonly status?: number | undefined;\n readonly type?: ErrorType | undefined;\n readonly requestId?: string | undefined;\n readonly retryable?: boolean | undefined;\n },\n ) {\n super(message);\n this.name = \"ShipMailError\";\n this.status = options?.status;\n this.type = options?.type;\n this.requestId = options?.requestId;\n this.retryable = options?.retryable ?? false;\n }\n}\n\nexport class AuthenticationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 401, type: \"authentication_error\", requestId, retryable: false });\n this.name = \"AuthenticationError\";\n }\n}\n\nexport class AuthorizationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"authorization_error\", requestId, retryable: false });\n this.name = \"AuthorizationError\";\n }\n}\n\nexport class ValidationError extends ShipMailError {\n readonly details:\n | readonly {\n readonly field: string;\n readonly message: string;\n readonly code?: string | undefined;\n }[]\n | undefined;\n\n constructor(\n message: string,\n options?: {\n readonly requestId?: string | undefined;\n readonly details?:\n | readonly {\n readonly field: string;\n readonly message: string;\n readonly code?: string | undefined;\n }[]\n | undefined;\n },\n ) {\n super(message, {\n status: 422,\n type: \"validation_error\",\n requestId: options?.requestId,\n retryable: false,\n });\n this.name = \"ValidationError\";\n this.details = options?.details;\n }\n}\n\nexport class QuotaExceededError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"quota_exceeded\", requestId, retryable: false });\n this.name = \"QuotaExceededError\";\n }\n}\n\nexport class NotFoundError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 404, type: \"not_found\", requestId, retryable: false });\n this.name = \"NotFoundError\";\n }\n}\n\nexport class RateLimitError extends ShipMailError {\n readonly retryAfter: number | undefined;\n\n constructor(\n message: string,\n options?: { readonly requestId?: string | undefined; readonly retryAfter?: number | undefined },\n ) {\n super(message, {\n status: 429,\n type: \"rate_limit_error\",\n requestId: options?.requestId,\n retryable: true,\n });\n this.name = \"RateLimitError\";\n this.retryAfter = options?.retryAfter;\n }\n}\n\nexport class ConflictError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 409, type: \"conflict\", requestId, retryable: false });\n this.name = \"ConflictError\";\n }\n}\n\nexport class InternalServerError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 500, type: \"internal_error\", requestId, retryable: true });\n this.name = \"InternalServerError\";\n }\n}\n\nexport class ConnectionError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: true });\n this.name = \"ConnectionError\";\n }\n}\n\nexport class WebhookVerificationError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: false });\n this.name = \"WebhookVerificationError\";\n }\n}\n\nexport function mapErrorFromResponse(\n status: number,\n body: ApiErrorBody,\n requestId?: string,\n): ShipMailError {\n const error = body.error;\n const rid = requestId ?? error.request_id;\n\n switch (error.type) {\n case \"authentication_error\":\n return new AuthenticationError(error.message, rid);\n case \"authorization_error\":\n return new AuthorizationError(error.message, rid);\n case \"quota_exceeded\":\n return new QuotaExceededError(error.message, rid);\n case \"validation_error\":\n return new ValidationError(error.message, { requestId: rid, details: error.details });\n case \"not_found\":\n return new NotFoundError(error.message, rid);\n case \"rate_limit_error\":\n return new RateLimitError(error.message, { requestId: rid, retryAfter: error.retry_after });\n case \"conflict\":\n return new ConflictError(error.message, rid);\n case \"internal_error\":\n return new InternalServerError(error.message, rid);\n default:\n return new ShipMailError(error.message, {\n status,\n type: error.type,\n requestId: rid,\n retryable: status >= 500,\n });\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\nimport type { PaginatedResponse } from \"./types/common.js\";\n\nexport class Page<T> implements AsyncIterable<T> {\n private readonly client: ShipMailClient;\n private readonly path: string;\n private readonly query: Record<string, string | number | boolean | undefined>;\n\n constructor(\n client: ShipMailClient,\n path: string,\n query: Record<string, string | number | boolean | undefined>,\n ) {\n this.client = client;\n this.path = path;\n this.query = query;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let cursor: string | undefined;\n\n do {\n const response = await this.client.request<PaginatedResponse<T>>({\n method: \"GET\",\n path: this.path,\n query: { ...this.query, cursor },\n });\n\n for (const item of response.data) {\n yield item;\n }\n\n cursor = response.pagination.next_cursor ?? undefined;\n if (!response.pagination.has_more) break;\n } while (cursor);\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\n\nexport abstract class ApiResource {\n protected readonly client: ShipMailClient;\n\n constructor(client: ShipMailClient) {\n this.client = client;\n }\n}\n","import type { ShipMailClient } from \"../client.js\";\nimport { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type {\n AddSubscriberParams,\n AddSubscribersBatchParams,\n AddSubscribersBatchResult,\n Audience,\n CreateAudienceParams,\n ListAudiencesParams,\n ListSubscribersParams,\n Subscriber,\n SubscriberResult,\n UpdateAudienceParams,\n UpdateSubscriberParams,\n} from \"../types/audience.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\n\nfunction base(audienceId: string): string {\n return `/audiences/${encodeURIComponent(audienceId)}/subscribers`;\n}\n\nclass Subscribers extends ApiResource {\n add(\n audienceId: string,\n params: AddSubscriberParams,\n options?: MethodOptions,\n ): Promise<SubscriberResult> {\n return this.client.request<SubscriberResult>({\n method: \"POST\",\n path: base(audienceId),\n body: params,\n methodOptions: options,\n });\n }\n\n addBatch(\n audienceId: string,\n params: AddSubscribersBatchParams,\n options?: MethodOptions,\n ): Promise<AddSubscribersBatchResult> {\n return this.client.request<AddSubscribersBatchResult>({\n method: \"POST\",\n path: `${base(audienceId)}/batch`,\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n audienceId: string,\n params?: ListSubscribersParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Subscriber>> {\n return this.client.request<PaginatedResponse<Subscriber>>({\n method: \"GET\",\n path: base(audienceId),\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(\n audienceId: string,\n params?: Omit<ListSubscribersParams, \"cursor\">,\n ): Page<Subscriber> {\n return new Page<Subscriber>(this.client, base(audienceId), {\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n });\n }\n\n get(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n\n getByEmail(audienceId: string, email: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/by-email/${encodeURIComponent(email)}`,\n methodOptions: options,\n });\n }\n\n update(\n audienceId: string,\n subscriberId: string,\n params: UpdateSubscriberParams,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"PATCH\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n unsubscribe(\n audienceId: string,\n subscriberId: string,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"POST\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}/unsubscribe`,\n methodOptions: options,\n });\n }\n\n remove(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n}\n\nexport class Audiences extends ApiResource {\n readonly subscribers: Subscribers;\n\n constructor(client: ShipMailClient) {\n super(client);\n this.subscribers = new Subscribers(client);\n }\n\n create(params: CreateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"POST\",\n path: \"/audiences\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n params?: ListAudiencesParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Audience>> {\n return this.client.request<PaginatedResponse<Audience>>({\n method: \"GET\",\n path: \"/audiences\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListAudiencesParams, \"cursor\">): Page<Audience> {\n return new Page<Audience>(this.client, \"/audiences\", { limit: params?.limit });\n }\n\n get(id: string, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"GET\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"PATCH\",\n path: `/audiences/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateDomainParams,\n Domain,\n DomainSearchResult,\n DomainVerificationResult,\n ListDomainsParams,\n RegisterDomainParams,\n SearchDomainsParams,\n UpdateDomainParams,\n} from \"../types/domain.js\";\n\nexport class Domains extends ApiResource {\n create(params: CreateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListDomainsParams, options?: MethodOptions): Promise<PaginatedResponse<Domain>> {\n return this.client.request<PaginatedResponse<Domain>>({\n method: \"GET\",\n path: \"/domains\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListDomainsParams, \"cursor\">): Page<Domain> {\n return new Page<Domain>(this.client, \"/domains\", {\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"GET\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"PATCH\",\n path: `/domains/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n verify(id: string, options?: MethodOptions): Promise<DomainVerificationResult> {\n return this.client.request<DomainVerificationResult>({\n method: \"POST\",\n path: `/domains/${encodeURIComponent(id)}/verification`,\n methodOptions: options,\n });\n }\n\n search(\n params: SearchDomainsParams,\n options?: MethodOptions,\n ): Promise<{ readonly results: readonly DomainSearchResult[] }> {\n return this.client.request<{ readonly results: readonly DomainSearchResult[] }>({\n method: \"POST\",\n path: \"/domains/search\",\n body: params,\n methodOptions: options,\n });\n }\n\n register(params: RegisterDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains/register\",\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateImportUploadParams,\n CreateMailboxImportParams,\n ImportUpload,\n MailboxImport,\n MailboxImports,\n} from \"../types/import.js\";\nimport type {\n CreateMailboxFolderParams,\n CreateMailboxParams,\n DownloadInboxAttachmentParams,\n InboxMessageAction,\n InboxMessages,\n InboxThread,\n ListInboxMessagesParams,\n ListMailboxesParams,\n Mailbox,\n MailboxFolder,\n MailboxFolders,\n MailboxIdentities,\n MailboxRules,\n MoveInboxMessageParams,\n ResetMailboxPasswordParams,\n UpdateAutoReplyParams,\n UpdateInboxMessageParams,\n UpdateMailboxFolderParams,\n UpdateMailboxParams,\n UpdateMailboxRulesParams,\n UpdateSpamFilterParams,\n} from \"../types/mailbox.js\";\n\nexport class Mailboxes extends ApiResource {\n create(params: CreateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"POST\",\n path: \"/mailboxes\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListMailboxesParams, options?: MethodOptions): Promise<PaginatedResponse<Mailbox>> {\n return this.client.request<PaginatedResponse<Mailbox>>({\n method: \"GET\",\n path: \"/mailboxes\",\n query: {\n domain_id: params?.domain_id,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListMailboxesParams, \"cursor\">): Page<Mailbox> {\n return new Page<Mailbox>(this.client, \"/mailboxes\", {\n domain_id: params?.domain_id,\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n listFolders(id: string, options?: MethodOptions): Promise<MailboxFolders> {\n return this.client.request<MailboxFolders>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n methodOptions: options,\n });\n }\n\n createFolder(\n id: string,\n params: CreateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateFolder(\n id: string,\n folderId: string,\n params: UpdateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteFolder(id: string, folderId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n methodOptions: options,\n });\n }\n\n listIdentities(id: string, options?: MethodOptions): Promise<MailboxIdentities> {\n return this.client.request<MailboxIdentities>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/identities`,\n methodOptions: options,\n });\n }\n\n listInboxMessages(\n id: string,\n params?: ListInboxMessagesParams,\n options?: MethodOptions,\n ): Promise<InboxMessages> {\n return this.client.request<InboxMessages>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages`,\n query: {\n folder_id: params?.folder_id,\n folder_role: params?.folder_role,\n search_text: params?.search_text,\n position: params?.position,\n limit: params?.limit,\n has_keyword: params?.has_keyword,\n not_keyword: params?.not_keyword,\n },\n methodOptions: options,\n });\n }\n\n getInboxThread(id: string, threadId: string, options?: MethodOptions): Promise<InboxThread> {\n return this.client.request<InboxThread>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/threads/${encodeURIComponent(threadId)}`,\n methodOptions: options,\n });\n }\n\n updateInboxMessage(\n id: string,\n messageId: string,\n params: UpdateInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n moveInboxMessage(\n id: string,\n messageId: string,\n params: MoveInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}/move`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteInboxMessage(id: string, messageId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n methodOptions: options,\n });\n }\n\n downloadInboxAttachment(\n id: string,\n params: DownloadInboxAttachmentParams,\n options?: MethodOptions,\n ): Promise<Uint8Array> {\n return this.client.requestBytes({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/attachments`,\n query: {\n blob_id: params.blob_id,\n name: params.name,\n },\n methodOptions: options,\n });\n }\n\n resetPassword(\n id: string,\n params: ResetMailboxPasswordParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/password`,\n body: params,\n methodOptions: options,\n });\n }\n\n getRules(id: string, options?: MethodOptions): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n methodOptions: options,\n });\n }\n\n updateRules(\n id: string,\n params: UpdateMailboxRulesParams,\n options?: MethodOptions,\n ): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"PUT\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateAutoReply(\n id: string,\n params: UpdateAutoReplyParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/auto-reply`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateSpamFilter(\n id: string,\n params: UpdateSpamFilterParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/spam-filter`,\n body: params,\n methodOptions: options,\n });\n }\n\n createImport(\n id: string,\n params: CreateMailboxImportParams,\n options?: MethodOptions,\n ): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n body: params,\n methodOptions: options,\n });\n }\n\n listImports(id: string, options?: MethodOptions): Promise<MailboxImports> {\n return this.client.request<MailboxImports>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n methodOptions: options,\n });\n }\n\n getImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}`,\n methodOptions: options,\n });\n }\n\n cancelImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/cancel`,\n methodOptions: options,\n });\n }\n\n undoImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/undo`,\n methodOptions: options,\n });\n }\n\n createImportUpload(\n id: string,\n params: CreateImportUploadParams,\n options?: MethodOptions,\n ): Promise<ImportUpload> {\n return this.client.request<ImportUpload>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/files`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n ListMessagesParams,\n Message,\n ReplyToMessageParams,\n SendMessageParams,\n} from \"../types/message.js\";\n\nexport class Messages extends ApiResource {\n send(params: SendMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: \"/messages\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params: ListMessagesParams, options?: MethodOptions): Promise<PaginatedResponse<Message>> {\n return this.client.request<PaginatedResponse<Message>>({\n method: \"GET\",\n path: \"/messages\",\n query: {\n mailbox_id: params.mailbox_id,\n cursor: params.cursor,\n limit: params.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params: Omit<ListMessagesParams, \"cursor\">): Page<Message> {\n return new Page<Message>(this.client, \"/messages\", {\n mailbox_id: params.mailbox_id,\n limit: params.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"GET\",\n path: `/messages/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n reply(id: string, params: ReplyToMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: `/messages/${encodeURIComponent(id)}/reply`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import type { ShipMailClient } from \"../client.js\";\nimport { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateNewsletterFromChangelogParams,\n CreateNewsletterParams,\n ListNewsletterAssetsParams,\n ListNewsletterDomainsParams,\n ListNewslettersParams,\n Newsletter,\n NewsletterAsset,\n NewsletterAssetListResponse,\n NewsletterDomain,\n NewsletterPreflight,\n NewsletterPreview,\n NewsletterTestSend,\n RegisterNewsletterAssetFromUrlParams,\n ScheduleNewsletterParams,\n SendNewsletterTestParams,\n UpdateNewsletterParams,\n UploadNewsletterAssetParams,\n} from \"../types/newsletter.js\";\n\nfunction path(id: string): string {\n return `/newsletters/${encodeURIComponent(id)}`;\n}\n\nclass NewsletterDomains extends ApiResource {\n list(\n params?: ListNewsletterDomainsParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<NewsletterDomain>> {\n return this.client.request<PaginatedResponse<NewsletterDomain>>({\n method: \"GET\",\n path: \"/newsletter-domains\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListNewsletterDomainsParams, \"cursor\">): Page<NewsletterDomain> {\n return new Page<NewsletterDomain>(this.client, \"/newsletter-domains\", { limit: params?.limit });\n }\n}\n\nclass NewsletterAssets extends ApiResource {\n list(\n params?: ListNewsletterAssetsParams,\n options?: MethodOptions,\n ): Promise<NewsletterAssetListResponse> {\n return this.client.request<NewsletterAssetListResponse>({\n method: \"GET\",\n path: \"/newsletter-assets\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n kind: params?.kind,\n q: params?.q,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListNewsletterAssetsParams, \"cursor\">): Page<NewsletterAsset> {\n return new Page<NewsletterAsset>(this.client, \"/newsletter-assets\", {\n limit: params?.limit,\n kind: params?.kind,\n q: params?.q,\n });\n }\n\n upload(params: UploadNewsletterAssetParams, options?: MethodOptions): Promise<NewsletterAsset> {\n return this.client.request<NewsletterAsset>({\n method: \"POST\",\n path: \"/newsletter-assets\",\n query: { filename: params.filename },\n rawBody: params.data,\n contentType: params.content_type,\n methodOptions: options,\n });\n }\n\n registerFromUrl(\n params: RegisterNewsletterAssetFromUrlParams,\n options?: MethodOptions,\n ): Promise<NewsletterAsset> {\n return this.client.request<NewsletterAsset>({\n method: \"POST\",\n path: \"/newsletter-assets\",\n body: params,\n methodOptions: options,\n });\n }\n}\n\nexport class Newsletters extends ApiResource {\n readonly domains: NewsletterDomains;\n readonly assets: NewsletterAssets;\n\n constructor(client: ShipMailClient) {\n super(client);\n this.domains = new NewsletterDomains(client);\n this.assets = new NewsletterAssets(client);\n }\n\n create(params: CreateNewsletterParams, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: \"/newsletters\",\n body: params,\n methodOptions: options,\n });\n }\n\n createFromChangelog(\n params: CreateNewsletterFromChangelogParams,\n options?: MethodOptions,\n ): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: \"/newsletters/from-changelog\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n params?: ListNewslettersParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Newsletter>> {\n return this.client.request<PaginatedResponse<Newsletter>>({\n method: \"GET\",\n path: \"/newsletters\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListNewslettersParams, \"cursor\">): Page<Newsletter> {\n return new Page<Newsletter>(this.client, \"/newsletters\", { limit: params?.limit });\n }\n\n get(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"GET\",\n path: path(id),\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateNewsletterParams, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"PATCH\",\n path: path(id),\n body: params,\n methodOptions: options,\n });\n }\n\n preflight(id: string, options?: MethodOptions): Promise<NewsletterPreflight> {\n return this.client.request<NewsletterPreflight>({\n method: \"POST\",\n path: `${path(id)}/preflight`,\n methodOptions: options,\n });\n }\n\n preview(id: string, options?: MethodOptions): Promise<NewsletterPreview> {\n return this.client.request<NewsletterPreview>({\n method: \"POST\",\n path: `${path(id)}/preview`,\n methodOptions: options,\n });\n }\n\n sendTest(\n id: string,\n params: SendNewsletterTestParams,\n options?: MethodOptions,\n ): Promise<NewsletterTestSend> {\n return this.client.request<NewsletterTestSend>({\n method: \"POST\",\n path: `${path(id)}/test-send`,\n body: params,\n methodOptions: options,\n });\n }\n\n schedule(\n id: string,\n params: ScheduleNewsletterParams,\n options?: MethodOptions,\n ): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/schedule`,\n body: params,\n methodOptions: options,\n });\n }\n\n cancel(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/cancel`,\n methodOptions: options,\n });\n }\n\n resume(id: string, options?: MethodOptions): Promise<Newsletter> {\n return this.client.request<Newsletter>({\n method: \"POST\",\n path: `${path(id)}/resume`,\n methodOptions: options,\n });\n }\n}\n","import { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, StatusResponse } from \"../types/common.js\";\n\nexport class Status extends ApiResource {\n get(options?: MethodOptions): Promise<StatusResponse> {\n return this.client.request<StatusResponse>({\n method: \"GET\",\n path: \"/status\",\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type { ListSuppressionsParams, Suppression } from \"../types/suppression.js\";\n\nexport class Suppressions extends ApiResource {\n list(\n params?: ListSuppressionsParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Suppression>> {\n return this.client.request<PaginatedResponse<Suppression>>({\n method: \"GET\",\n path: \"/suppressions\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListSuppressionsParams, \"cursor\">): Page<Suppression> {\n return new Page<Suppression>(this.client, \"/suppressions\", {\n limit: params?.limit,\n });\n }\n\n remove(email: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/suppressions/${encodeURIComponent(email)}`,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type { Message } from \"../types/message.js\";\nimport type {\n GetThreadParams,\n ListThreadsParams,\n ReplyToThreadParams,\n Thread,\n} from \"../types/thread.js\";\n\nexport class Threads extends ApiResource {\n list(params: ListThreadsParams, options?: MethodOptions): Promise<PaginatedResponse<Thread>> {\n return this.client.request<PaginatedResponse<Thread>>({\n method: \"GET\",\n path: \"/threads\",\n query: {\n mailbox_id: params.mailbox_id,\n cursor: params.cursor,\n limit: params.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params: Omit<ListThreadsParams, \"cursor\">): Page<Thread> {\n return new Page<Thread>(this.client, \"/threads\", {\n mailbox_id: params.mailbox_id,\n limit: params.limit,\n });\n }\n\n get(\n id: string,\n params?: GetThreadParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Message>> {\n return this.client.request<PaginatedResponse<Message>>({\n method: \"GET\",\n path: `/threads/${encodeURIComponent(id)}`,\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n reply(id: string, params: ReplyToThreadParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: `/threads/${encodeURIComponent(id)}/reply`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateWebhookParams,\n ListDeliveriesParams,\n ListWebhooksParams,\n RotateSecretResponse,\n TestWebhookResponse,\n UpdateWebhookParams,\n Webhook,\n WebhookDelivery,\n WebhookWithSecret,\n} from \"../types/webhook.js\";\n\nexport class Webhooks extends ApiResource {\n create(params: CreateWebhookParams, options?: MethodOptions): Promise<WebhookWithSecret> {\n return this.client.request<WebhookWithSecret>({\n method: \"POST\",\n path: \"/webhooks\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListWebhooksParams, options?: MethodOptions): Promise<PaginatedResponse<Webhook>> {\n return this.client.request<PaginatedResponse<Webhook>>({\n method: \"GET\",\n path: \"/webhooks\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListWebhooksParams, \"cursor\">): Page<Webhook> {\n return new Page<Webhook>(this.client, \"/webhooks\", {\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Webhook> {\n return this.client.request<Webhook>({\n method: \"GET\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateWebhookParams, options?: MethodOptions): Promise<Webhook> {\n return this.client.request<Webhook>({\n method: \"PATCH\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/webhooks/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n rotateSecret(id: string, options?: MethodOptions): Promise<RotateSecretResponse> {\n return this.client.request<RotateSecretResponse>({\n method: \"POST\",\n path: `/webhooks/${encodeURIComponent(id)}/rotate-secret`,\n methodOptions: options,\n });\n }\n\n test(id: string, options?: MethodOptions): Promise<TestWebhookResponse> {\n return this.client.request<TestWebhookResponse>({\n method: \"POST\",\n path: `/webhooks/${encodeURIComponent(id)}/test`,\n methodOptions: options,\n });\n }\n\n listDeliveries(\n id: string,\n params?: ListDeliveriesParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<WebhookDelivery>> {\n return this.client.request<PaginatedResponse<WebhookDelivery>>({\n method: \"GET\",\n path: `/webhooks/${encodeURIComponent(id)}/deliveries`,\n query: {\n status: params?.status,\n event_type: params?.event_type,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listDeliveriesAutoPaginating(\n id: string,\n params?: Omit<ListDeliveriesParams, \"cursor\">,\n ): Page<WebhookDelivery> {\n return new Page<WebhookDelivery>(\n this.client,\n `/webhooks/${encodeURIComponent(id)}/deliveries`,\n {\n status: params?.status,\n event_type: params?.event_type,\n limit: params?.limit,\n },\n );\n }\n}\n","export const VERSION = \"0.1.27\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Audiences } from \"./resources/audiences.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.js\";\nimport { Newsletters } from \"./resources/newsletters.js\";\nimport { Status } from \"./resources/status.js\";\nimport { Suppressions } from \"./resources/suppressions.js\";\nimport { Threads } from \"./resources/threads.js\";\nimport { Webhooks } from \"./resources/webhooks.js\";\nimport type { ApiErrorBody, MethodOptions, ShipMailConfig } from \"./types/common.js\";\nimport { VERSION } from \"./version.js\";\n\nconst DEFAULT_BASE_URL = \"https://shipmail.to/api/v1\";\nconst DEFAULT_MAX_RETRIES = 2;\nconst DEFAULT_TIMEOUT = 30_000;\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction calculateBackoff(attempt: number, retryAfterMs?: number): number {\n if (retryAfterMs !== undefined && retryAfterMs > 0) {\n return retryAfterMs;\n }\n const base = Math.min(2 ** attempt * 500, 8000);\n const jitter = Math.random() * base * 0.5;\n return base + jitter;\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n if (typeof obj[\"error\"] !== \"object\" || obj[\"error\"] === null) return false;\n const error = obj[\"error\"] as Record<string, unknown>;\n return typeof error[\"type\"] === \"string\" && typeof error[\"message\"] === \"string\";\n}\n\nfunction rawBodyToBlobPart(rawBody: ArrayBuffer | Uint8Array): BlobPart {\n if (rawBody instanceof ArrayBuffer) return rawBody;\n const buffer = new ArrayBuffer(rawBody.byteLength);\n new Uint8Array(buffer).set(rawBody);\n return buffer;\n}\n\nexport type RequestOptions = {\n readonly method: string;\n readonly path: string;\n readonly body?: unknown | undefined;\n readonly query?: Record<string, string | number | boolean | undefined> | undefined;\n readonly rawBody?: ArrayBuffer | Uint8Array | undefined;\n readonly contentType?: string | undefined;\n readonly methodOptions?: MethodOptions | undefined;\n};\n\n/**\n * Client for the ShipMail API. Handles authentication, retries, and resource access.\n */\nexport class ShipMailClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly maxRetries: number;\n private readonly timeout: number;\n private readonly fetchFn: typeof fetch;\n private readonly defaultHeaders: Record<string, string>;\n\n readonly audiences: Audiences;\n readonly domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\n readonly newsletters: Newsletters;\n readonly suppressions: Suppressions;\n readonly threads: Threads;\n readonly webhooks: Webhooks;\n readonly status: Status;\n\n /**\n * Create a new ShipMail client.\n * @param config - API key string or full configuration object.\n */\n constructor(config: string | ShipMailConfig) {\n if (typeof config === \"string\") {\n this.apiKey = config;\n this.baseUrl = DEFAULT_BASE_URL;\n this.maxRetries = DEFAULT_MAX_RETRIES;\n this.timeout = DEFAULT_TIMEOUT;\n this.fetchFn = globalThis.fetch;\n this.defaultHeaders = {};\n } else {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n this.defaultHeaders = config.defaultHeaders ? { ...config.defaultHeaders } : {};\n }\n\n this.audiences = new Audiences(this);\n this.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(this);\n this.newsletters = new Newsletters(this);\n this.suppressions = new Suppressions(this);\n this.threads = new Threads(this);\n this.webhooks = new Webhooks(this);\n this.status = new Status(this);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n return this.requestWithParser(options, \"application/json\", async (response) => {\n if (response.status === 204) {\n return undefined as T;\n }\n return (await response.json()) as T;\n });\n }\n\n async requestBytes(options: RequestOptions): Promise<Uint8Array> {\n return this.requestWithParser(options, \"application/octet-stream\", async (response) => {\n return new Uint8Array(await response.arrayBuffer());\n });\n }\n\n private async requestWithParser<T>(\n options: RequestOptions,\n accept: string,\n parseSuccess: (response: Response) => Promise<T>,\n ): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n let lastError: ShipMailError | undefined;\n const methodOpts = options.methodOptions;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n if (attempt > 0) {\n const retryAfterMs =\n lastError instanceof RateLimitError && lastError.retryAfter !== undefined\n ? lastError.retryAfter * 1000\n : undefined;\n const delay = calculateBackoff(attempt - 1, retryAfterMs);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n let response: Response;\n try {\n const headers: Record<string, string> = {\n ...this.defaultHeaders,\n Authorization: `Bearer ${this.apiKey}`,\n \"User-Agent\": `shipmail-node/${VERSION}`,\n Accept: accept,\n ...methodOpts?.headers,\n };\n\n if (methodOpts?.idempotencyKey) {\n headers[\"Idempotency-Key\"] = methodOpts.idempotencyKey;\n }\n\n let body: BodyInit | null = null;\n if (options.rawBody !== undefined) {\n headers[\"Content-Type\"] = options.contentType ?? \"application/octet-stream\";\n body = new Blob([rawBodyToBlobPart(options.rawBody)]);\n } else if (options.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n body = JSON.stringify(options.body);\n }\n\n const effectiveTimeout = methodOpts?.timeout ?? this.timeout;\n\n response = await this.fetchFn(url, {\n method: options.method,\n headers,\n body,\n signal: methodOpts?.signal ?? AbortSignal.timeout(effectiveTimeout),\n });\n } catch (err) {\n lastError = new ConnectionError(err instanceof Error ? err.message : \"Request failed\");\n if (attempt < this.maxRetries) continue;\n throw lastError;\n }\n\n if (response.ok) {\n return parseSuccess(response);\n }\n\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = null;\n }\n\n if (isApiErrorBody(errorBody)) {\n lastError = mapErrorFromResponse(response.status, errorBody);\n } else {\n lastError = new ShipMailError(`Request failed with status ${response.status}`, {\n status: response.status,\n retryable: isRetryableStatus(response.status),\n });\n }\n\n if (!lastError.retryable || attempt >= this.maxRetries) {\n throw lastError;\n }\n }\n\n throw lastError ?? new ShipMailError(\"Request failed after retries\");\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n ): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n}\n","export type ShipMailConfig = {\n readonly apiKey: string;\n readonly baseUrl?: string | undefined;\n readonly maxRetries?: number | undefined;\n readonly timeout?: number | undefined;\n readonly fetch?: typeof fetch | undefined;\n readonly defaultHeaders?: Record<string, string> | undefined;\n};\n\nexport type PaginationParams = {\n readonly cursor?: string | undefined;\n readonly limit?: number | undefined;\n};\n\nexport type PaginatedResponse<T> = {\n readonly data: readonly T[];\n readonly pagination: {\n readonly next_cursor: string | null;\n readonly has_more: boolean;\n readonly limit: number;\n };\n};\n\nexport type ErrorType =\n | \"validation_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"quota_exceeded\"\n | \"not_found\"\n | \"rate_limit_error\"\n | \"conflict\"\n | \"internal_error\";\n\nexport type ApiErrorBody = {\n readonly error: {\n readonly type: ErrorType;\n readonly message: string;\n readonly request_id?: string | undefined;\n readonly details?:\n | readonly {\n readonly field: string;\n readonly message: string;\n readonly code?: string | undefined;\n }[]\n | undefined;\n readonly retry_after?: number | undefined;\n };\n};\n\nexport type EmailRecipient = {\n readonly address: string;\n readonly name?: string | null | undefined;\n};\n\nexport type EmailRecipientInput = EmailRecipient | string;\n\nexport const WEBHOOK_EVENT_TYPES = [\n \"message.received\",\n \"message.sent\",\n \"message.delivered\",\n \"message.bounced\",\n \"message.complained\",\n \"domain.verified\",\n \"domain.verification_failed\",\n \"domain.degraded\",\n \"org.reputation_warning\",\n \"org.sending_throttled\",\n \"org.sending_suspended\",\n \"org.reputation_recovered\",\n] as const;\n\nexport type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];\n\nexport type StatusResponse = {\n readonly status: string;\n readonly version: string;\n readonly time: string;\n readonly request_id: string;\n};\n\nexport const DOMAIN_STATUSES = [\"pending\", \"verifying\", \"verified\", \"degraded\", \"failed\"] as const;\nexport type DomainStatus = (typeof DOMAIN_STATUSES)[number];\n\nexport const MESSAGE_STATUSES = [\n \"scheduled\",\n \"queued\",\n \"sent\",\n \"delivered\",\n \"bounced\",\n \"complained\",\n \"failed\",\n \"cancelled\",\n] as const;\nexport type MessageStatus = (typeof MESSAGE_STATUSES)[number];\n\nexport const MESSAGE_SOURCES = [\"api\", \"dashboard\", \"inbound\", \"smtp\"] as const;\nexport type MessageSource = (typeof MESSAGE_SOURCES)[number];\n\nexport const WEBHOOK_DELIVERY_STATUSES = [\"pending\", \"delivered\", \"failed\"] as const;\nexport type WebhookDeliveryStatus = (typeof WEBHOOK_DELIVERY_STATUSES)[number];\n\nexport type MethodOptions = {\n readonly timeout?: number | undefined;\n readonly signal?: AbortSignal | undefined;\n readonly headers?: Record<string, string> | undefined;\n readonly idempotencyKey?: string | undefined;\n};\n","import { WebhookVerificationError } from \"./errors.js\";\nimport type { WebhookEvent } from \"./types/webhook.js\";\n\nconst DEFAULT_TOLERANCE_SECONDS = 300; // 5 minutes\n\ntype WebhookHeaders = {\n readonly \"x-shipmail-signature\"?: string;\n readonly \"x-shipmail-timestamp\"?: string;\n readonly \"x-shipmail-event-id\"?: string;\n readonly [key: string]: string | undefined;\n};\n\nfunction getHeader(headers: WebhookHeaders | Headers, name: string): string | undefined {\n if (headers instanceof Headers) {\n return headers.get(name) ?? undefined;\n }\n return headers[name] ?? headers[name.toLowerCase()];\n}\n\nasync function signPayload(secret: string, timestamp: number, body: string): Promise<string> {\n const { createHmac } = await import(\"crypto\");\n const payload = `v1=${timestamp}\\n${body}`;\n return createHmac(\"sha256\", secret).update(payload).digest(\"hex\");\n}\n\n/**\n * Verify an incoming webhook signature. Throws `WebhookVerificationError` on failure.\n * Returns the parsed webhook event on success.\n */\nexport async function verifyWebhook(\n body: string,\n headers: WebhookHeaders | Headers,\n secret: string,\n options?: { readonly toleranceInSeconds?: number | undefined },\n): Promise<WebhookEvent> {\n const signature = getHeader(headers, \"x-shipmail-signature\");\n const timestampStr = getHeader(headers, \"x-shipmail-timestamp\");\n\n if (!signature) {\n throw new WebhookVerificationError(\"Missing X-ShipMail-Signature header\");\n }\n if (!timestampStr) {\n throw new WebhookVerificationError(\"Missing X-ShipMail-Timestamp header\");\n }\n\n const timestamp = parseInt(timestampStr, 10);\n if (isNaN(timestamp)) {\n throw new WebhookVerificationError(\"Invalid X-ShipMail-Timestamp header\");\n }\n\n const tolerance = options?.toleranceInSeconds ?? DEFAULT_TOLERANCE_SECONDS;\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n throw new WebhookVerificationError(\"Webhook timestamp is outside tolerance window\");\n }\n\n const expected = await signPayload(secret, timestamp, body);\n\n const { timingSafeEqual } = await import(\"crypto\");\n const sigBuffer = Buffer.from(signature, \"hex\");\n const expectedBuffer = Buffer.from(expected, \"hex\");\n\n if (sigBuffer.length !== expectedBuffer.length || !timingSafeEqual(sigBuffer, expectedBuffer)) {\n throw new WebhookVerificationError(\"Webhook signature verification failed\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n throw new WebhookVerificationError(\"Invalid webhook payload: not valid JSON\");\n }\n\n return parsed as WebhookEvent;\n}\n"]}
|