shipmail 0.1.25 → 0.1.26

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 CHANGED
@@ -251,16 +251,37 @@ 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 hero = await shipmail.newsletters.assets.upload({
258
+ filename: "hero.png",
259
+ content_type: "image/png",
260
+ data: await readFile("hero.png"),
261
+ });
262
+
254
263
  const newsletter = await shipmail.newsletters.create({
255
264
  audience_id: "aud_...",
256
- newsletter_domain_id: "nwsdom_...",
265
+ newsletter_domain_id: newsletterDomains.data[0].id,
257
266
  name: "July changelog",
258
267
  subject: "What shipped in July",
259
268
  preview_text: "A quick product update",
260
- body_html: "<h1>July updates</h1><p>...</p>",
261
- body_text: "July updates\n...",
269
+ blocks: [
270
+ { type: "heading", level: 1, text: "July updates" },
271
+ { type: "callout", variant: "info", title: "Quick note", body: "A short intro." },
272
+ { type: "paragraph", body: "A quick product update." },
273
+ { type: "image", url: hero.url, alt: "Product screenshot" },
274
+ {
275
+ type: "columns",
276
+ ratio: "50-50",
277
+ left: { title: "For teams", body: "Shared inbox improvements." },
278
+ right: { title: "For agents", body: "API and MCP improvements." },
279
+ },
280
+ ],
262
281
  });
263
282
 
283
+ await shipmail.newsletters.preview(newsletter.id);
284
+
264
285
  await shipmail.newsletters.sendTest(newsletter.id, {
265
286
  recipient_email: "owner@example.com",
266
287
  });
@@ -272,6 +293,13 @@ await shipmail.newsletters.schedule(newsletter.id, {
272
293
  });
273
294
  ```
274
295
 
296
+ Newsletter test sends and schedules must pass preflight. Guardrail failures throw
297
+ `ValidationError` with the failed preflight items in `error.details`.
298
+ Preflight responses include `url_breakdown` so you can see which links, image
299
+ URLs, and video thumbnails count against the 20 unique URL limit.
300
+ Block prose fields are plain text in API requests. Use newlines for paragraph
301
+ breaks, and use `body_html` or `custom_html` only when you need raw HTML.
302
+
275
303
  ## Status
276
304
 
277
305
  ```ts
@@ -303,7 +331,7 @@ for await (const domain of shipmail.domains.listAutoPaginating({ limit: 25 })) {
303
331
  }
304
332
  ```
305
333
 
306
- `listAutoPaginating` is available on `domains`, `mailboxes`, `messages`, `threads`, `webhooks`, `webhooks.listDeliveriesAutoPaginating`, and `suppressions`.
334
+ `listAutoPaginating` is available on `domains`, `mailboxes`, `messages`, `threads`, `webhooks`, `webhooks.listDeliveriesAutoPaginating`, `suppressions`, `newsletters.domains`, and `newsletters.assets`.
307
335
 
308
336
  ## Webhook verification
309
337
 
package/dist/index.cjs CHANGED
@@ -623,7 +623,57 @@ 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
+ };
626
671
  var Newsletters = class extends ApiResource {
672
+ constructor(client) {
673
+ super(client);
674
+ this.domains = new NewsletterDomains(client);
675
+ this.assets = new NewsletterAssets(client);
676
+ }
627
677
  create(params, options) {
628
678
  return this.client.request({
629
679
  method: "POST",
@@ -632,6 +682,14 @@ var Newsletters = class extends ApiResource {
632
682
  methodOptions: options
633
683
  });
634
684
  }
685
+ createFromChangelog(params, options) {
686
+ return this.client.request({
687
+ method: "POST",
688
+ path: "/newsletters/from-changelog",
689
+ body: params,
690
+ methodOptions: options
691
+ });
692
+ }
635
693
  list(params, options) {
636
694
  return this.client.request({
637
695
  method: "GET",
@@ -665,6 +723,13 @@ var Newsletters = class extends ApiResource {
665
723
  methodOptions: options
666
724
  });
667
725
  }
726
+ preview(id, options) {
727
+ return this.client.request({
728
+ method: "POST",
729
+ path: `${path(id)}/preview`,
730
+ methodOptions: options
731
+ });
732
+ }
668
733
  sendTest(id, params, options) {
669
734
  return this.client.request({
670
735
  method: "POST",
@@ -865,7 +930,7 @@ var Webhooks = class extends ApiResource {
865
930
  };
866
931
 
867
932
  // src/version.ts
868
- var VERSION = "0.1.25";
933
+ var VERSION = "0.1.26";
869
934
 
870
935
  // src/client.ts
871
936
  var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
@@ -889,6 +954,12 @@ function isApiErrorBody(value) {
889
954
  const error = obj["error"];
890
955
  return typeof error["type"] === "string" && typeof error["message"] === "string";
891
956
  }
957
+ function rawBodyToBlobPart(rawBody) {
958
+ if (rawBody instanceof ArrayBuffer) return rawBody;
959
+ const buffer = new ArrayBuffer(rawBody.byteLength);
960
+ new Uint8Array(buffer).set(rawBody);
961
+ return buffer;
962
+ }
892
963
  var ShipMailClient = class {
893
964
  /**
894
965
  * Create a new ShipMail client.
@@ -958,7 +1029,7 @@ var ShipMailClient = class {
958
1029
  let body = null;
959
1030
  if (options.rawBody !== void 0) {
960
1031
  headers["Content-Type"] = options.contentType ?? "application/octet-stream";
961
- body = new Blob([options.rawBody]);
1032
+ body = new Blob([rawBodyToBlobPart(options.rawBody)]);
962
1033
  } else if (options.body !== void 0) {
963
1034
  headers["Content-Type"] = "application/json";
964
1035
  body = JSON.stringify(options.body);
@@ -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 NewsletterDomain,\n NewsletterPreflight,\n NewsletterPreview,\n NewsletterTestSend,\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<PaginatedResponse<NewsletterAsset>> {\n return this.client.request<PaginatedResponse<NewsletterAsset>>({\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\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.26\"; // 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"]}