shipmail 0.1.21 → 0.1.23

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
@@ -126,7 +126,10 @@ await shipmail.mailboxes.get("mbx_...");
126
126
  await shipmail.mailboxes.update("mbx_...", { display_name: "New Name" });
127
127
  await shipmail.mailboxes.resetPassword("mbx_...", { password: "NewPassword1" });
128
128
  const folders = await shipmail.mailboxes.listFolders("mbx_...");
129
- const folder = await shipmail.mailboxes.createFolder("mbx_...", { name: "VIP" });
129
+ const folder = await shipmail.mailboxes.createFolder("mbx_...", {
130
+ name: "VIP",
131
+ parent_id: null,
132
+ });
130
133
  await shipmail.mailboxes.updateFolder("mbx_...", folder.id, { name: "VIP Clients" });
131
134
  await shipmail.mailboxes.deleteFolder("mbx_...", folder.id);
132
135
  const identities = await shipmail.mailboxes.listIdentities("mbx_...");
package/dist/index.cjs CHANGED
@@ -402,6 +402,50 @@ var Mailboxes = class extends ApiResource {
402
402
  methodOptions: options
403
403
  });
404
404
  }
405
+ createImport(id, params, options) {
406
+ return this.client.request({
407
+ method: "POST",
408
+ path: `/mailboxes/${encodeURIComponent(id)}/imports`,
409
+ body: params,
410
+ methodOptions: options
411
+ });
412
+ }
413
+ listImports(id, options) {
414
+ return this.client.request({
415
+ method: "GET",
416
+ path: `/mailboxes/${encodeURIComponent(id)}/imports`,
417
+ methodOptions: options
418
+ });
419
+ }
420
+ getImport(id, importId, options) {
421
+ return this.client.request({
422
+ method: "GET",
423
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}`,
424
+ methodOptions: options
425
+ });
426
+ }
427
+ cancelImport(id, importId, options) {
428
+ return this.client.request({
429
+ method: "POST",
430
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/cancel`,
431
+ methodOptions: options
432
+ });
433
+ }
434
+ undoImport(id, importId, options) {
435
+ return this.client.request({
436
+ method: "POST",
437
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/undo`,
438
+ methodOptions: options
439
+ });
440
+ }
441
+ createImportUpload(id, params, options) {
442
+ return this.client.request({
443
+ method: "POST",
444
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/files`,
445
+ body: params,
446
+ methodOptions: options
447
+ });
448
+ }
405
449
  };
406
450
 
407
451
  // src/resources/messages.ts
@@ -617,7 +661,7 @@ var Webhooks = class extends ApiResource {
617
661
  };
618
662
 
619
663
  // src/version.ts
620
- var VERSION = "0.1.21";
664
+ var VERSION = "0.1.23";
621
665
 
622
666
  // src/client.ts
623
667
  var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
@@ -778,12 +822,14 @@ var WEBHOOK_EVENT_TYPES = [
778
822
  ];
779
823
  var DOMAIN_STATUSES = ["pending", "verifying", "verified", "degraded", "failed"];
780
824
  var MESSAGE_STATUSES = [
825
+ "scheduled",
781
826
  "queued",
782
827
  "sent",
783
828
  "delivered",
784
829
  "bounced",
785
830
  "complained",
786
- "failed"
831
+ "failed",
832
+ "cancelled"
787
833
  ];
788
834
  var MESSAGE_SOURCES = ["api", "dashboard", "inbound", "smtp"];
789
835
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "delivered", "failed"];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/pagination.ts","../src/resource.ts","../src/resources/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.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":[],"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 { 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 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","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 { 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.21\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.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 domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\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.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(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 \"queued\",\n \"sent\",\n \"delivered\",\n \"bounced\",\n \"complained\",\n \"failed\",\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/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.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":[],"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 { 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 { 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.23\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.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 domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\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.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(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"]}
package/dist/index.d.cts CHANGED
@@ -59,7 +59,7 @@ type StatusResponse = {
59
59
  };
60
60
  declare const DOMAIN_STATUSES: readonly ["pending", "verifying", "verified", "degraded", "failed"];
61
61
  type DomainStatus = (typeof DOMAIN_STATUSES)[number];
62
- declare const MESSAGE_STATUSES: readonly ["queued", "sent", "delivered", "bounced", "complained", "failed"];
62
+ declare const MESSAGE_STATUSES: readonly ["scheduled", "queued", "sent", "delivered", "bounced", "complained", "failed", "cancelled"];
63
63
  type MessageStatus = (typeof MESSAGE_STATUSES)[number];
64
64
  declare const MESSAGE_SOURCES: readonly ["api", "dashboard", "inbound", "smtp"];
65
65
  type MessageSource = (typeof MESSAGE_SOURCES)[number];
@@ -167,6 +167,100 @@ declare class Domains extends ApiResource {
167
167
  register(params: RegisterDomainParams, options?: MethodOptions): Promise<Domain>;
168
168
  }
169
169
 
170
+ declare const MAILBOX_IMPORT_STATUSES: readonly ["queued", "running", "paused_throttle", "paused_quota", "completed", "failed", "cancelled", "undo_queued", "undoing", "undone", "undo_failed"];
171
+ type MailboxImportStatus = (typeof MAILBOX_IMPORT_STATUSES)[number];
172
+ declare const MAILBOX_IMPORT_PROVIDERS: readonly ["gmail", "outlook", "yahoo", "aol", "icloud", "fastmail", "zoho", "imap", "takeout", "proton", "tuta", "file"];
173
+ type MailboxImportProvider = (typeof MAILBOX_IMPORT_PROVIDERS)[number];
174
+ declare const MAILBOX_IMPORT_IMAP_PROVIDERS: readonly ["gmail", "yahoo", "aol", "icloud", "fastmail", "zoho", "imap"];
175
+ type MailboxImportImapProvider = (typeof MAILBOX_IMPORT_IMAP_PROVIDERS)[number];
176
+ declare const MAILBOX_IMPORT_FILE_PROVIDERS: readonly ["takeout", "proton", "tuta", "file"];
177
+ type MailboxImportFileProvider = (typeof MAILBOX_IMPORT_FILE_PROVIDERS)[number];
178
+ declare const MAILBOX_IMPORT_FOLDER_STATES: readonly ["pending", "importing", "completed", "failed"];
179
+ type MailboxImportFolderState = (typeof MAILBOX_IMPORT_FOLDER_STATES)[number];
180
+ declare const MAILBOX_IMPORT_RANGES: readonly ["all", "12m", "3m", "1m"];
181
+ type MailboxImportRange = (typeof MAILBOX_IMPORT_RANGES)[number];
182
+ type MailboxImportKind = "imap" | "file";
183
+ type MailboxImportCounts = {
184
+ readonly found: number;
185
+ readonly imported: number;
186
+ readonly undone: number;
187
+ readonly duplicates_skipped: number;
188
+ readonly oversize_skipped: number;
189
+ readonly failed: number;
190
+ readonly contacts_imported: number;
191
+ };
192
+ type MailboxImportBytes = {
193
+ readonly total: number;
194
+ readonly imported: number;
195
+ };
196
+ type MailboxImportFolder = {
197
+ readonly source_folder: string;
198
+ readonly target_folder: string | null;
199
+ readonly role: string | null;
200
+ readonly state: MailboxImportFolderState;
201
+ readonly found: number;
202
+ readonly imported: number;
203
+ readonly duplicates: number;
204
+ readonly oversize: number;
205
+ readonly failed: number;
206
+ };
207
+ type MailboxImport = {
208
+ readonly object: "import";
209
+ readonly id: string;
210
+ readonly mailbox_id: string;
211
+ readonly kind: MailboxImportKind;
212
+ readonly provider: MailboxImportProvider;
213
+ readonly source_address: string | null;
214
+ readonly status: MailboxImportStatus;
215
+ readonly status_detail: string | null;
216
+ readonly error: string | null;
217
+ readonly resume_at: string | null;
218
+ readonly counts: MailboxImportCounts;
219
+ readonly bytes: MailboxImportBytes;
220
+ readonly created_at: string;
221
+ readonly started_at: string | null;
222
+ readonly completed_at: string | null;
223
+ readonly folders?: readonly MailboxImportFolder[] | undefined;
224
+ };
225
+ type MailboxImports = {
226
+ readonly object: "imports";
227
+ readonly mailbox_id: string;
228
+ readonly data: readonly MailboxImport[];
229
+ };
230
+ type MailboxImportImapSource = {
231
+ readonly type: "imap";
232
+ readonly provider: MailboxImportImapProvider;
233
+ readonly email: string;
234
+ readonly password: string;
235
+ readonly host?: string | undefined;
236
+ readonly port?: number | undefined;
237
+ };
238
+ type MailboxImportFileSource = {
239
+ readonly type: "files";
240
+ readonly provider: MailboxImportFileProvider;
241
+ readonly file_ids: readonly string[];
242
+ };
243
+ type MailboxImportOptions = {
244
+ readonly folders?: readonly string[] | null | undefined;
245
+ readonly range?: MailboxImportRange | undefined;
246
+ readonly include_spam?: boolean | undefined;
247
+ readonly include_trash?: boolean | undefined;
248
+ };
249
+ type CreateMailboxImportParams = {
250
+ readonly source: MailboxImportImapSource | MailboxImportFileSource;
251
+ readonly options?: MailboxImportOptions | undefined;
252
+ };
253
+ type CreateImportUploadParams = {
254
+ readonly file_name: string;
255
+ readonly size_bytes: number;
256
+ };
257
+ type ImportUpload = {
258
+ readonly object: "import_upload";
259
+ readonly file_id: string;
260
+ readonly upload_url: string;
261
+ readonly expires_in_seconds: number;
262
+ };
263
+
170
264
  type AutoReply = {
171
265
  readonly enabled: boolean;
172
266
  readonly subject: string | null;
@@ -190,6 +284,7 @@ type MailboxFolder = {
190
284
  readonly object: "mailbox_folder";
191
285
  readonly id: string;
192
286
  readonly name: string;
287
+ readonly parent_id: string | null;
193
288
  readonly role: string | null;
194
289
  readonly kind: "custom" | "system";
195
290
  readonly total_emails: number;
@@ -268,7 +363,7 @@ type InboxMessages = {
268
363
  readonly object: "inbox_messages";
269
364
  readonly mailbox_id: string;
270
365
  readonly address: string;
271
- readonly data: readonly InboxMessage[];
366
+ readonly data: readonly InboxFullMessage[];
272
367
  readonly pagination: {
273
368
  readonly position: number;
274
369
  readonly limit: number;
@@ -316,6 +411,12 @@ type MailboxRuleAction = {
316
411
  readonly type: "mark_read";
317
412
  } | {
318
413
  readonly type: "star";
414
+ } | {
415
+ readonly type: "send_webhook";
416
+ } | {
417
+ readonly type: "ai_draft_reply";
418
+ readonly instructions: string;
419
+ readonly reply_mode: "reply" | "reply_all";
319
420
  };
320
421
  type MailboxRule = {
321
422
  readonly id: string;
@@ -330,6 +431,7 @@ type MailboxRule = {
330
431
  type MailboxRuleFolder = {
331
432
  readonly id: string;
332
433
  readonly name: string;
434
+ readonly parent_id: string | null;
333
435
  readonly role: string | null;
334
436
  readonly kind: "custom" | "system";
335
437
  };
@@ -350,6 +452,7 @@ type UpdateMailboxParams = {
350
452
  };
351
453
  type CreateMailboxFolderParams = {
352
454
  readonly name: string;
455
+ readonly parent_id: string | null;
353
456
  };
354
457
  type UpdateMailboxFolderParams = {
355
458
  readonly name: string;
@@ -419,6 +522,12 @@ declare class Mailboxes extends ApiResource {
419
522
  updateRules(id: string, params: UpdateMailboxRulesParams, options?: MethodOptions): Promise<MailboxRules>;
420
523
  updateAutoReply(id: string, params: UpdateAutoReplyParams, options?: MethodOptions): Promise<Mailbox>;
421
524
  updateSpamFilter(id: string, params: UpdateSpamFilterParams, options?: MethodOptions): Promise<Mailbox>;
525
+ createImport(id: string, params: CreateMailboxImportParams, options?: MethodOptions): Promise<MailboxImport>;
526
+ listImports(id: string, options?: MethodOptions): Promise<MailboxImports>;
527
+ getImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
528
+ cancelImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
529
+ undoImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
530
+ createImportUpload(id: string, params: CreateImportUploadParams, options?: MethodOptions): Promise<ImportUpload>;
422
531
  }
423
532
 
424
533
  type Message = {
@@ -447,6 +556,7 @@ type Message = {
447
556
  }[] | null;
448
557
  readonly source: MessageSource;
449
558
  readonly status: MessageStatus;
559
+ readonly scheduled_at: string | null;
450
560
  readonly created_at: string;
451
561
  readonly updated_at: string;
452
562
  };
@@ -468,6 +578,7 @@ type SendMessageParams = {
468
578
  readonly in_reply_to?: string | undefined;
469
579
  readonly references?: readonly string[] | undefined;
470
580
  readonly attachments?: readonly Attachment[] | undefined;
581
+ readonly scheduled_at?: string | undefined;
471
582
  };
472
583
  type ListMessagesParams = PaginationParams & {
473
584
  readonly mailbox_id: string;
@@ -477,6 +588,7 @@ type ReplyToMessageParams = {
477
588
  readonly text?: string | undefined;
478
589
  readonly to: readonly EmailRecipientInput[];
479
590
  readonly cc?: readonly EmailRecipientInput[] | undefined;
591
+ readonly scheduled_at?: string | undefined;
480
592
  };
481
593
 
482
594
  declare class Messages extends ApiResource {
@@ -527,6 +639,7 @@ type ReplyToThreadParams = {
527
639
  readonly text?: string | undefined;
528
640
  readonly to?: readonly EmailRecipientInput[] | undefined;
529
641
  readonly cc?: readonly EmailRecipientInput[] | undefined;
642
+ readonly scheduled_at?: string | undefined;
530
643
  };
531
644
 
532
645
  declare class Threads extends ApiResource {
package/dist/index.d.ts CHANGED
@@ -59,7 +59,7 @@ type StatusResponse = {
59
59
  };
60
60
  declare const DOMAIN_STATUSES: readonly ["pending", "verifying", "verified", "degraded", "failed"];
61
61
  type DomainStatus = (typeof DOMAIN_STATUSES)[number];
62
- declare const MESSAGE_STATUSES: readonly ["queued", "sent", "delivered", "bounced", "complained", "failed"];
62
+ declare const MESSAGE_STATUSES: readonly ["scheduled", "queued", "sent", "delivered", "bounced", "complained", "failed", "cancelled"];
63
63
  type MessageStatus = (typeof MESSAGE_STATUSES)[number];
64
64
  declare const MESSAGE_SOURCES: readonly ["api", "dashboard", "inbound", "smtp"];
65
65
  type MessageSource = (typeof MESSAGE_SOURCES)[number];
@@ -167,6 +167,100 @@ declare class Domains extends ApiResource {
167
167
  register(params: RegisterDomainParams, options?: MethodOptions): Promise<Domain>;
168
168
  }
169
169
 
170
+ declare const MAILBOX_IMPORT_STATUSES: readonly ["queued", "running", "paused_throttle", "paused_quota", "completed", "failed", "cancelled", "undo_queued", "undoing", "undone", "undo_failed"];
171
+ type MailboxImportStatus = (typeof MAILBOX_IMPORT_STATUSES)[number];
172
+ declare const MAILBOX_IMPORT_PROVIDERS: readonly ["gmail", "outlook", "yahoo", "aol", "icloud", "fastmail", "zoho", "imap", "takeout", "proton", "tuta", "file"];
173
+ type MailboxImportProvider = (typeof MAILBOX_IMPORT_PROVIDERS)[number];
174
+ declare const MAILBOX_IMPORT_IMAP_PROVIDERS: readonly ["gmail", "yahoo", "aol", "icloud", "fastmail", "zoho", "imap"];
175
+ type MailboxImportImapProvider = (typeof MAILBOX_IMPORT_IMAP_PROVIDERS)[number];
176
+ declare const MAILBOX_IMPORT_FILE_PROVIDERS: readonly ["takeout", "proton", "tuta", "file"];
177
+ type MailboxImportFileProvider = (typeof MAILBOX_IMPORT_FILE_PROVIDERS)[number];
178
+ declare const MAILBOX_IMPORT_FOLDER_STATES: readonly ["pending", "importing", "completed", "failed"];
179
+ type MailboxImportFolderState = (typeof MAILBOX_IMPORT_FOLDER_STATES)[number];
180
+ declare const MAILBOX_IMPORT_RANGES: readonly ["all", "12m", "3m", "1m"];
181
+ type MailboxImportRange = (typeof MAILBOX_IMPORT_RANGES)[number];
182
+ type MailboxImportKind = "imap" | "file";
183
+ type MailboxImportCounts = {
184
+ readonly found: number;
185
+ readonly imported: number;
186
+ readonly undone: number;
187
+ readonly duplicates_skipped: number;
188
+ readonly oversize_skipped: number;
189
+ readonly failed: number;
190
+ readonly contacts_imported: number;
191
+ };
192
+ type MailboxImportBytes = {
193
+ readonly total: number;
194
+ readonly imported: number;
195
+ };
196
+ type MailboxImportFolder = {
197
+ readonly source_folder: string;
198
+ readonly target_folder: string | null;
199
+ readonly role: string | null;
200
+ readonly state: MailboxImportFolderState;
201
+ readonly found: number;
202
+ readonly imported: number;
203
+ readonly duplicates: number;
204
+ readonly oversize: number;
205
+ readonly failed: number;
206
+ };
207
+ type MailboxImport = {
208
+ readonly object: "import";
209
+ readonly id: string;
210
+ readonly mailbox_id: string;
211
+ readonly kind: MailboxImportKind;
212
+ readonly provider: MailboxImportProvider;
213
+ readonly source_address: string | null;
214
+ readonly status: MailboxImportStatus;
215
+ readonly status_detail: string | null;
216
+ readonly error: string | null;
217
+ readonly resume_at: string | null;
218
+ readonly counts: MailboxImportCounts;
219
+ readonly bytes: MailboxImportBytes;
220
+ readonly created_at: string;
221
+ readonly started_at: string | null;
222
+ readonly completed_at: string | null;
223
+ readonly folders?: readonly MailboxImportFolder[] | undefined;
224
+ };
225
+ type MailboxImports = {
226
+ readonly object: "imports";
227
+ readonly mailbox_id: string;
228
+ readonly data: readonly MailboxImport[];
229
+ };
230
+ type MailboxImportImapSource = {
231
+ readonly type: "imap";
232
+ readonly provider: MailboxImportImapProvider;
233
+ readonly email: string;
234
+ readonly password: string;
235
+ readonly host?: string | undefined;
236
+ readonly port?: number | undefined;
237
+ };
238
+ type MailboxImportFileSource = {
239
+ readonly type: "files";
240
+ readonly provider: MailboxImportFileProvider;
241
+ readonly file_ids: readonly string[];
242
+ };
243
+ type MailboxImportOptions = {
244
+ readonly folders?: readonly string[] | null | undefined;
245
+ readonly range?: MailboxImportRange | undefined;
246
+ readonly include_spam?: boolean | undefined;
247
+ readonly include_trash?: boolean | undefined;
248
+ };
249
+ type CreateMailboxImportParams = {
250
+ readonly source: MailboxImportImapSource | MailboxImportFileSource;
251
+ readonly options?: MailboxImportOptions | undefined;
252
+ };
253
+ type CreateImportUploadParams = {
254
+ readonly file_name: string;
255
+ readonly size_bytes: number;
256
+ };
257
+ type ImportUpload = {
258
+ readonly object: "import_upload";
259
+ readonly file_id: string;
260
+ readonly upload_url: string;
261
+ readonly expires_in_seconds: number;
262
+ };
263
+
170
264
  type AutoReply = {
171
265
  readonly enabled: boolean;
172
266
  readonly subject: string | null;
@@ -190,6 +284,7 @@ type MailboxFolder = {
190
284
  readonly object: "mailbox_folder";
191
285
  readonly id: string;
192
286
  readonly name: string;
287
+ readonly parent_id: string | null;
193
288
  readonly role: string | null;
194
289
  readonly kind: "custom" | "system";
195
290
  readonly total_emails: number;
@@ -268,7 +363,7 @@ type InboxMessages = {
268
363
  readonly object: "inbox_messages";
269
364
  readonly mailbox_id: string;
270
365
  readonly address: string;
271
- readonly data: readonly InboxMessage[];
366
+ readonly data: readonly InboxFullMessage[];
272
367
  readonly pagination: {
273
368
  readonly position: number;
274
369
  readonly limit: number;
@@ -316,6 +411,12 @@ type MailboxRuleAction = {
316
411
  readonly type: "mark_read";
317
412
  } | {
318
413
  readonly type: "star";
414
+ } | {
415
+ readonly type: "send_webhook";
416
+ } | {
417
+ readonly type: "ai_draft_reply";
418
+ readonly instructions: string;
419
+ readonly reply_mode: "reply" | "reply_all";
319
420
  };
320
421
  type MailboxRule = {
321
422
  readonly id: string;
@@ -330,6 +431,7 @@ type MailboxRule = {
330
431
  type MailboxRuleFolder = {
331
432
  readonly id: string;
332
433
  readonly name: string;
434
+ readonly parent_id: string | null;
333
435
  readonly role: string | null;
334
436
  readonly kind: "custom" | "system";
335
437
  };
@@ -350,6 +452,7 @@ type UpdateMailboxParams = {
350
452
  };
351
453
  type CreateMailboxFolderParams = {
352
454
  readonly name: string;
455
+ readonly parent_id: string | null;
353
456
  };
354
457
  type UpdateMailboxFolderParams = {
355
458
  readonly name: string;
@@ -419,6 +522,12 @@ declare class Mailboxes extends ApiResource {
419
522
  updateRules(id: string, params: UpdateMailboxRulesParams, options?: MethodOptions): Promise<MailboxRules>;
420
523
  updateAutoReply(id: string, params: UpdateAutoReplyParams, options?: MethodOptions): Promise<Mailbox>;
421
524
  updateSpamFilter(id: string, params: UpdateSpamFilterParams, options?: MethodOptions): Promise<Mailbox>;
525
+ createImport(id: string, params: CreateMailboxImportParams, options?: MethodOptions): Promise<MailboxImport>;
526
+ listImports(id: string, options?: MethodOptions): Promise<MailboxImports>;
527
+ getImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
528
+ cancelImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
529
+ undoImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport>;
530
+ createImportUpload(id: string, params: CreateImportUploadParams, options?: MethodOptions): Promise<ImportUpload>;
422
531
  }
423
532
 
424
533
  type Message = {
@@ -447,6 +556,7 @@ type Message = {
447
556
  }[] | null;
448
557
  readonly source: MessageSource;
449
558
  readonly status: MessageStatus;
559
+ readonly scheduled_at: string | null;
450
560
  readonly created_at: string;
451
561
  readonly updated_at: string;
452
562
  };
@@ -468,6 +578,7 @@ type SendMessageParams = {
468
578
  readonly in_reply_to?: string | undefined;
469
579
  readonly references?: readonly string[] | undefined;
470
580
  readonly attachments?: readonly Attachment[] | undefined;
581
+ readonly scheduled_at?: string | undefined;
471
582
  };
472
583
  type ListMessagesParams = PaginationParams & {
473
584
  readonly mailbox_id: string;
@@ -477,6 +588,7 @@ type ReplyToMessageParams = {
477
588
  readonly text?: string | undefined;
478
589
  readonly to: readonly EmailRecipientInput[];
479
590
  readonly cc?: readonly EmailRecipientInput[] | undefined;
591
+ readonly scheduled_at?: string | undefined;
480
592
  };
481
593
 
482
594
  declare class Messages extends ApiResource {
@@ -527,6 +639,7 @@ type ReplyToThreadParams = {
527
639
  readonly text?: string | undefined;
528
640
  readonly to?: readonly EmailRecipientInput[] | undefined;
529
641
  readonly cc?: readonly EmailRecipientInput[] | undefined;
642
+ readonly scheduled_at?: string | undefined;
530
643
  };
531
644
 
532
645
  declare class Threads extends ApiResource {
package/dist/index.js CHANGED
@@ -398,6 +398,50 @@ var Mailboxes = class extends ApiResource {
398
398
  methodOptions: options
399
399
  });
400
400
  }
401
+ createImport(id, params, options) {
402
+ return this.client.request({
403
+ method: "POST",
404
+ path: `/mailboxes/${encodeURIComponent(id)}/imports`,
405
+ body: params,
406
+ methodOptions: options
407
+ });
408
+ }
409
+ listImports(id, options) {
410
+ return this.client.request({
411
+ method: "GET",
412
+ path: `/mailboxes/${encodeURIComponent(id)}/imports`,
413
+ methodOptions: options
414
+ });
415
+ }
416
+ getImport(id, importId, options) {
417
+ return this.client.request({
418
+ method: "GET",
419
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}`,
420
+ methodOptions: options
421
+ });
422
+ }
423
+ cancelImport(id, importId, options) {
424
+ return this.client.request({
425
+ method: "POST",
426
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/cancel`,
427
+ methodOptions: options
428
+ });
429
+ }
430
+ undoImport(id, importId, options) {
431
+ return this.client.request({
432
+ method: "POST",
433
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/undo`,
434
+ methodOptions: options
435
+ });
436
+ }
437
+ createImportUpload(id, params, options) {
438
+ return this.client.request({
439
+ method: "POST",
440
+ path: `/mailboxes/${encodeURIComponent(id)}/imports/files`,
441
+ body: params,
442
+ methodOptions: options
443
+ });
444
+ }
401
445
  };
402
446
 
403
447
  // src/resources/messages.ts
@@ -613,7 +657,7 @@ var Webhooks = class extends ApiResource {
613
657
  };
614
658
 
615
659
  // src/version.ts
616
- var VERSION = "0.1.21";
660
+ var VERSION = "0.1.23";
617
661
 
618
662
  // src/client.ts
619
663
  var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
@@ -774,12 +818,14 @@ var WEBHOOK_EVENT_TYPES = [
774
818
  ];
775
819
  var DOMAIN_STATUSES = ["pending", "verifying", "verified", "degraded", "failed"];
776
820
  var MESSAGE_STATUSES = [
821
+ "scheduled",
777
822
  "queued",
778
823
  "sent",
779
824
  "delivered",
780
825
  "bounced",
781
826
  "complained",
782
- "failed"
827
+ "failed",
828
+ "cancelled"
783
829
  ];
784
830
  var MESSAGE_SOURCES = ["api", "dashboard", "inbound", "smtp"];
785
831
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "delivered", "failed"];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/pagination.ts","../src/resource.ts","../src/resources/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.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":[],"mappings":"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","file":"index.js","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 { 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 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","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 { 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.21\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.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 domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\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.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(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 \"queued\",\n \"sent\",\n \"delivered\",\n \"bounced\",\n \"complained\",\n \"failed\",\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/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.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":[],"mappings":"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","file":"index.js","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 { 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 { 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.23\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.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 domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\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.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipmail",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Official TypeScript SDK for the ShipMail API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",