shipmail 0.1.23 → 0.1.24
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/dist/index.cjs +131 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +86 -1
- package/dist/index.d.ts +86 -1
- package/dist/index.js +131 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -146,6 +146,132 @@ var ApiResource = class {
|
|
|
146
146
|
}
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
+
// src/resources/audiences.ts
|
|
150
|
+
function base(audienceId) {
|
|
151
|
+
return `/audiences/${encodeURIComponent(audienceId)}/subscribers`;
|
|
152
|
+
}
|
|
153
|
+
var Subscribers = class extends ApiResource {
|
|
154
|
+
add(audienceId, params, options) {
|
|
155
|
+
return this.client.request({
|
|
156
|
+
method: "POST",
|
|
157
|
+
path: base(audienceId),
|
|
158
|
+
body: params,
|
|
159
|
+
methodOptions: options
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
addBatch(audienceId, params, options) {
|
|
163
|
+
return this.client.request({
|
|
164
|
+
method: "POST",
|
|
165
|
+
path: `${base(audienceId)}/batch`,
|
|
166
|
+
body: params,
|
|
167
|
+
methodOptions: options
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
list(audienceId, params, options) {
|
|
171
|
+
return this.client.request({
|
|
172
|
+
method: "GET",
|
|
173
|
+
path: base(audienceId),
|
|
174
|
+
query: {
|
|
175
|
+
cursor: params?.cursor,
|
|
176
|
+
limit: params?.limit,
|
|
177
|
+
status: params?.status,
|
|
178
|
+
email: params?.email
|
|
179
|
+
},
|
|
180
|
+
methodOptions: options
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
listAutoPaginating(audienceId, params) {
|
|
184
|
+
return new Page(this.client, base(audienceId), {
|
|
185
|
+
limit: params?.limit,
|
|
186
|
+
status: params?.status,
|
|
187
|
+
email: params?.email
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
get(audienceId, subscriberId, options) {
|
|
191
|
+
return this.client.request({
|
|
192
|
+
method: "GET",
|
|
193
|
+
path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,
|
|
194
|
+
methodOptions: options
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
getByEmail(audienceId, email, options) {
|
|
198
|
+
return this.client.request({
|
|
199
|
+
method: "GET",
|
|
200
|
+
path: `${base(audienceId)}/by-email/${encodeURIComponent(email)}`,
|
|
201
|
+
methodOptions: options
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
update(audienceId, subscriberId, params, options) {
|
|
205
|
+
return this.client.request({
|
|
206
|
+
method: "PATCH",
|
|
207
|
+
path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,
|
|
208
|
+
body: params,
|
|
209
|
+
methodOptions: options
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
unsubscribe(audienceId, subscriberId, options) {
|
|
213
|
+
return this.client.request({
|
|
214
|
+
method: "POST",
|
|
215
|
+
path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}/unsubscribe`,
|
|
216
|
+
methodOptions: options
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
remove(audienceId, subscriberId, options) {
|
|
220
|
+
return this.client.request({
|
|
221
|
+
method: "DELETE",
|
|
222
|
+
path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,
|
|
223
|
+
methodOptions: options
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
var Audiences = class extends ApiResource {
|
|
228
|
+
constructor(client) {
|
|
229
|
+
super(client);
|
|
230
|
+
this.subscribers = new Subscribers(client);
|
|
231
|
+
}
|
|
232
|
+
create(params, options) {
|
|
233
|
+
return this.client.request({
|
|
234
|
+
method: "POST",
|
|
235
|
+
path: "/audiences",
|
|
236
|
+
body: params,
|
|
237
|
+
methodOptions: options
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
list(params, options) {
|
|
241
|
+
return this.client.request({
|
|
242
|
+
method: "GET",
|
|
243
|
+
path: "/audiences",
|
|
244
|
+
query: { cursor: params?.cursor, limit: params?.limit },
|
|
245
|
+
methodOptions: options
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
listAutoPaginating(params) {
|
|
249
|
+
return new Page(this.client, "/audiences", { limit: params?.limit });
|
|
250
|
+
}
|
|
251
|
+
get(id, options) {
|
|
252
|
+
return this.client.request({
|
|
253
|
+
method: "GET",
|
|
254
|
+
path: `/audiences/${encodeURIComponent(id)}`,
|
|
255
|
+
methodOptions: options
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
update(id, params, options) {
|
|
259
|
+
return this.client.request({
|
|
260
|
+
method: "PATCH",
|
|
261
|
+
path: `/audiences/${encodeURIComponent(id)}`,
|
|
262
|
+
body: params,
|
|
263
|
+
methodOptions: options
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
delete(id, options) {
|
|
267
|
+
return this.client.request({
|
|
268
|
+
method: "DELETE",
|
|
269
|
+
path: `/audiences/${encodeURIComponent(id)}`,
|
|
270
|
+
methodOptions: options
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
|
|
149
275
|
// src/resources/domains.ts
|
|
150
276
|
var Domains = class extends ApiResource {
|
|
151
277
|
create(params, options) {
|
|
@@ -661,7 +787,7 @@ var Webhooks = class extends ApiResource {
|
|
|
661
787
|
};
|
|
662
788
|
|
|
663
789
|
// src/version.ts
|
|
664
|
-
var VERSION = "0.1.
|
|
790
|
+
var VERSION = "0.1.24";
|
|
665
791
|
|
|
666
792
|
// src/client.ts
|
|
667
793
|
var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
|
|
@@ -674,9 +800,9 @@ function calculateBackoff(attempt, retryAfterMs) {
|
|
|
674
800
|
if (retryAfterMs !== void 0 && retryAfterMs > 0) {
|
|
675
801
|
return retryAfterMs;
|
|
676
802
|
}
|
|
677
|
-
const
|
|
678
|
-
const jitter = Math.random() *
|
|
679
|
-
return
|
|
803
|
+
const base2 = Math.min(2 ** attempt * 500, 8e3);
|
|
804
|
+
const jitter = Math.random() * base2 * 0.5;
|
|
805
|
+
return base2 + jitter;
|
|
680
806
|
}
|
|
681
807
|
function isApiErrorBody(value) {
|
|
682
808
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -706,6 +832,7 @@ var ShipMailClient = class {
|
|
|
706
832
|
this.fetchFn = config.fetch ?? globalThis.fetch;
|
|
707
833
|
this.defaultHeaders = config.defaultHeaders ? { ...config.defaultHeaders } : {};
|
|
708
834
|
}
|
|
835
|
+
this.audiences = new Audiences(this);
|
|
709
836
|
this.domains = new Domains(this);
|
|
710
837
|
this.mailboxes = new Mailboxes(this);
|
|
711
838
|
this.messages = new Messages(this);
|
package/dist/index.cjs.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.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"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/pagination.ts","../src/resource.ts","../src/resources/audiences.ts","../src/resources/domains.ts","../src/resources/mailboxes.ts","../src/resources/messages.ts","../src/resources/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":["base"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiErrorBody, ErrorType } from \"./types/common.js\";\n\nexport class ShipMailError extends Error {\n readonly status: number | undefined;\n readonly type: ErrorType | undefined;\n readonly requestId: string | undefined;\n readonly retryable: boolean;\n\n constructor(\n message: string,\n options?: {\n readonly status?: number | undefined;\n readonly type?: ErrorType | undefined;\n readonly requestId?: string | undefined;\n readonly retryable?: boolean | undefined;\n },\n ) {\n super(message);\n this.name = \"ShipMailError\";\n this.status = options?.status;\n this.type = options?.type;\n this.requestId = options?.requestId;\n this.retryable = options?.retryable ?? false;\n }\n}\n\nexport class AuthenticationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 401, type: \"authentication_error\", requestId, retryable: false });\n this.name = \"AuthenticationError\";\n }\n}\n\nexport class AuthorizationError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"authorization_error\", requestId, retryable: false });\n this.name = \"AuthorizationError\";\n }\n}\n\nexport class ValidationError extends ShipMailError {\n readonly details: readonly { readonly field: string; readonly message: string }[] | undefined;\n\n constructor(\n message: string,\n options?: {\n readonly requestId?: string | undefined;\n readonly details?:\n | readonly { readonly field: string; readonly message: string }[]\n | undefined;\n },\n ) {\n super(message, {\n status: 422,\n type: \"validation_error\",\n requestId: options?.requestId,\n retryable: false,\n });\n this.name = \"ValidationError\";\n this.details = options?.details;\n }\n}\n\nexport class QuotaExceededError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 403, type: \"quota_exceeded\", requestId, retryable: false });\n this.name = \"QuotaExceededError\";\n }\n}\n\nexport class NotFoundError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 404, type: \"not_found\", requestId, retryable: false });\n this.name = \"NotFoundError\";\n }\n}\n\nexport class RateLimitError extends ShipMailError {\n readonly retryAfter: number | undefined;\n\n constructor(\n message: string,\n options?: { readonly requestId?: string | undefined; readonly retryAfter?: number | undefined },\n ) {\n super(message, {\n status: 429,\n type: \"rate_limit_error\",\n requestId: options?.requestId,\n retryable: true,\n });\n this.name = \"RateLimitError\";\n this.retryAfter = options?.retryAfter;\n }\n}\n\nexport class ConflictError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 409, type: \"conflict\", requestId, retryable: false });\n this.name = \"ConflictError\";\n }\n}\n\nexport class InternalServerError extends ShipMailError {\n constructor(message: string, requestId?: string) {\n super(message, { status: 500, type: \"internal_error\", requestId, retryable: true });\n this.name = \"InternalServerError\";\n }\n}\n\nexport class ConnectionError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: true });\n this.name = \"ConnectionError\";\n }\n}\n\nexport class WebhookVerificationError extends ShipMailError {\n constructor(message: string) {\n super(message, { retryable: false });\n this.name = \"WebhookVerificationError\";\n }\n}\n\nexport function mapErrorFromResponse(\n status: number,\n body: ApiErrorBody,\n requestId?: string,\n): ShipMailError {\n const error = body.error;\n const rid = requestId ?? error.request_id;\n\n switch (error.type) {\n case \"authentication_error\":\n return new AuthenticationError(error.message, rid);\n case \"authorization_error\":\n return new AuthorizationError(error.message, rid);\n case \"quota_exceeded\":\n return new QuotaExceededError(error.message, rid);\n case \"validation_error\":\n return new ValidationError(error.message, { requestId: rid, details: error.details });\n case \"not_found\":\n return new NotFoundError(error.message, rid);\n case \"rate_limit_error\":\n return new RateLimitError(error.message, { requestId: rid, retryAfter: error.retry_after });\n case \"conflict\":\n return new ConflictError(error.message, rid);\n case \"internal_error\":\n return new InternalServerError(error.message, rid);\n default:\n return new ShipMailError(error.message, {\n status,\n type: error.type,\n requestId: rid,\n retryable: status >= 500,\n });\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\nimport type { PaginatedResponse } from \"./types/common.js\";\n\nexport class Page<T> implements AsyncIterable<T> {\n private readonly client: ShipMailClient;\n private readonly path: string;\n private readonly query: Record<string, string | number | boolean | undefined>;\n\n constructor(\n client: ShipMailClient,\n path: string,\n query: Record<string, string | number | boolean | undefined>,\n ) {\n this.client = client;\n this.path = path;\n this.query = query;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let cursor: string | undefined;\n\n do {\n const response = await this.client.request<PaginatedResponse<T>>({\n method: \"GET\",\n path: this.path,\n query: { ...this.query, cursor },\n });\n\n for (const item of response.data) {\n yield item;\n }\n\n cursor = response.pagination.next_cursor ?? undefined;\n if (!response.pagination.has_more) break;\n } while (cursor);\n }\n}\n","import type { ShipMailClient } from \"./client.js\";\n\nexport abstract class ApiResource {\n protected readonly client: ShipMailClient;\n\n constructor(client: ShipMailClient) {\n this.client = client;\n }\n}\n","import type { ShipMailClient } from \"../client.js\";\nimport { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type {\n AddSubscriberParams,\n AddSubscribersBatchParams,\n AddSubscribersBatchResult,\n Audience,\n CreateAudienceParams,\n ListAudiencesParams,\n ListSubscribersParams,\n Subscriber,\n SubscriberResult,\n UpdateAudienceParams,\n UpdateSubscriberParams,\n} from \"../types/audience.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\n\nfunction base(audienceId: string): string {\n return `/audiences/${encodeURIComponent(audienceId)}/subscribers`;\n}\n\nclass Subscribers extends ApiResource {\n add(\n audienceId: string,\n params: AddSubscriberParams,\n options?: MethodOptions,\n ): Promise<SubscriberResult> {\n return this.client.request<SubscriberResult>({\n method: \"POST\",\n path: base(audienceId),\n body: params,\n methodOptions: options,\n });\n }\n\n addBatch(\n audienceId: string,\n params: AddSubscribersBatchParams,\n options?: MethodOptions,\n ): Promise<AddSubscribersBatchResult> {\n return this.client.request<AddSubscribersBatchResult>({\n method: \"POST\",\n path: `${base(audienceId)}/batch`,\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n audienceId: string,\n params?: ListSubscribersParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Subscriber>> {\n return this.client.request<PaginatedResponse<Subscriber>>({\n method: \"GET\",\n path: base(audienceId),\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(\n audienceId: string,\n params?: Omit<ListSubscribersParams, \"cursor\">,\n ): Page<Subscriber> {\n return new Page<Subscriber>(this.client, base(audienceId), {\n limit: params?.limit,\n status: params?.status,\n email: params?.email,\n });\n }\n\n get(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n\n getByEmail(audienceId: string, email: string, options?: MethodOptions): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"GET\",\n path: `${base(audienceId)}/by-email/${encodeURIComponent(email)}`,\n methodOptions: options,\n });\n }\n\n update(\n audienceId: string,\n subscriberId: string,\n params: UpdateSubscriberParams,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"PATCH\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n unsubscribe(\n audienceId: string,\n subscriberId: string,\n options?: MethodOptions,\n ): Promise<Subscriber> {\n return this.client.request<Subscriber>({\n method: \"POST\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}/unsubscribe`,\n methodOptions: options,\n });\n }\n\n remove(audienceId: string, subscriberId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `${base(audienceId)}/${encodeURIComponent(subscriberId)}`,\n methodOptions: options,\n });\n }\n}\n\nexport class Audiences extends ApiResource {\n readonly subscribers: Subscribers;\n\n constructor(client: ShipMailClient) {\n super(client);\n this.subscribers = new Subscribers(client);\n }\n\n create(params: CreateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"POST\",\n path: \"/audiences\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(\n params?: ListAudiencesParams,\n options?: MethodOptions,\n ): Promise<PaginatedResponse<Audience>> {\n return this.client.request<PaginatedResponse<Audience>>({\n method: \"GET\",\n path: \"/audiences\",\n query: { cursor: params?.cursor, limit: params?.limit },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListAudiencesParams, \"cursor\">): Page<Audience> {\n return new Page<Audience>(this.client, \"/audiences\", { limit: params?.limit });\n }\n\n get(id: string, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"GET\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateAudienceParams, options?: MethodOptions): Promise<Audience> {\n return this.client.request<Audience>({\n method: \"PATCH\",\n path: `/audiences/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/audiences/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateDomainParams,\n Domain,\n DomainSearchResult,\n DomainVerificationResult,\n ListDomainsParams,\n RegisterDomainParams,\n SearchDomainsParams,\n UpdateDomainParams,\n} from \"../types/domain.js\";\n\nexport class Domains extends ApiResource {\n create(params: CreateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListDomainsParams, options?: MethodOptions): Promise<PaginatedResponse<Domain>> {\n return this.client.request<PaginatedResponse<Domain>>({\n method: \"GET\",\n path: \"/domains\",\n query: {\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListDomainsParams, \"cursor\">): Page<Domain> {\n return new Page<Domain>(this.client, \"/domains\", {\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"GET\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"PATCH\",\n path: `/domains/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/domains/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n verify(id: string, options?: MethodOptions): Promise<DomainVerificationResult> {\n return this.client.request<DomainVerificationResult>({\n method: \"POST\",\n path: `/domains/${encodeURIComponent(id)}/verification`,\n methodOptions: options,\n });\n }\n\n search(\n params: SearchDomainsParams,\n options?: MethodOptions,\n ): Promise<{ readonly results: readonly DomainSearchResult[] }> {\n return this.client.request<{ readonly results: readonly DomainSearchResult[] }>({\n method: \"POST\",\n path: \"/domains/search\",\n body: params,\n methodOptions: options,\n });\n }\n\n register(params: RegisterDomainParams, options?: MethodOptions): Promise<Domain> {\n return this.client.request<Domain>({\n method: \"POST\",\n path: \"/domains/register\",\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n CreateImportUploadParams,\n CreateMailboxImportParams,\n ImportUpload,\n MailboxImport,\n MailboxImports,\n} from \"../types/import.js\";\nimport type {\n CreateMailboxFolderParams,\n CreateMailboxParams,\n DownloadInboxAttachmentParams,\n InboxMessageAction,\n InboxMessages,\n InboxThread,\n ListInboxMessagesParams,\n ListMailboxesParams,\n Mailbox,\n MailboxFolder,\n MailboxFolders,\n MailboxIdentities,\n MailboxRules,\n MoveInboxMessageParams,\n ResetMailboxPasswordParams,\n UpdateAutoReplyParams,\n UpdateInboxMessageParams,\n UpdateMailboxFolderParams,\n UpdateMailboxParams,\n UpdateMailboxRulesParams,\n UpdateSpamFilterParams,\n} from \"../types/mailbox.js\";\n\nexport class Mailboxes extends ApiResource {\n create(params: CreateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"POST\",\n path: \"/mailboxes\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params?: ListMailboxesParams, options?: MethodOptions): Promise<PaginatedResponse<Mailbox>> {\n return this.client.request<PaginatedResponse<Mailbox>>({\n method: \"GET\",\n path: \"/mailboxes\",\n query: {\n domain_id: params?.domain_id,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params?: Omit<ListMailboxesParams, \"cursor\">): Page<Mailbox> {\n return new Page<Mailbox>(this.client, \"/mailboxes\", {\n domain_id: params?.domain_id,\n limit: params?.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n update(id: string, params: UpdateMailboxParams, options?: MethodOptions): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n delete(id: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n listFolders(id: string, options?: MethodOptions): Promise<MailboxFolders> {\n return this.client.request<MailboxFolders>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n methodOptions: options,\n });\n }\n\n createFolder(\n id: string,\n params: CreateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateFolder(\n id: string,\n folderId: string,\n params: UpdateMailboxFolderParams,\n options?: MethodOptions,\n ): Promise<MailboxFolder> {\n return this.client.request<MailboxFolder>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteFolder(id: string, folderId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/folders/${encodeURIComponent(folderId)}`,\n methodOptions: options,\n });\n }\n\n listIdentities(id: string, options?: MethodOptions): Promise<MailboxIdentities> {\n return this.client.request<MailboxIdentities>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/identities`,\n methodOptions: options,\n });\n }\n\n listInboxMessages(\n id: string,\n params?: ListInboxMessagesParams,\n options?: MethodOptions,\n ): Promise<InboxMessages> {\n return this.client.request<InboxMessages>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages`,\n query: {\n folder_id: params?.folder_id,\n folder_role: params?.folder_role,\n search_text: params?.search_text,\n position: params?.position,\n limit: params?.limit,\n has_keyword: params?.has_keyword,\n not_keyword: params?.not_keyword,\n },\n methodOptions: options,\n });\n }\n\n getInboxThread(id: string, threadId: string, options?: MethodOptions): Promise<InboxThread> {\n return this.client.request<InboxThread>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/threads/${encodeURIComponent(threadId)}`,\n methodOptions: options,\n });\n }\n\n updateInboxMessage(\n id: string,\n messageId: string,\n params: UpdateInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n body: params,\n methodOptions: options,\n });\n }\n\n moveInboxMessage(\n id: string,\n messageId: string,\n params: MoveInboxMessageParams,\n options?: MethodOptions,\n ): Promise<InboxMessageAction> {\n return this.client.request<InboxMessageAction>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}/move`,\n body: params,\n methodOptions: options,\n });\n }\n\n deleteInboxMessage(id: string, messageId: string, options?: MethodOptions): Promise<void> {\n return this.client.request<void>({\n method: \"DELETE\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/messages/${encodeURIComponent(messageId)}`,\n methodOptions: options,\n });\n }\n\n downloadInboxAttachment(\n id: string,\n params: DownloadInboxAttachmentParams,\n options?: MethodOptions,\n ): Promise<Uint8Array> {\n return this.client.requestBytes({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/inbox/attachments`,\n query: {\n blob_id: params.blob_id,\n name: params.name,\n },\n methodOptions: options,\n });\n }\n\n resetPassword(\n id: string,\n params: ResetMailboxPasswordParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/password`,\n body: params,\n methodOptions: options,\n });\n }\n\n getRules(id: string, options?: MethodOptions): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n methodOptions: options,\n });\n }\n\n updateRules(\n id: string,\n params: UpdateMailboxRulesParams,\n options?: MethodOptions,\n ): Promise<MailboxRules> {\n return this.client.request<MailboxRules>({\n method: \"PUT\",\n path: `/mailboxes/${encodeURIComponent(id)}/rules`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateAutoReply(\n id: string,\n params: UpdateAutoReplyParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/auto-reply`,\n body: params,\n methodOptions: options,\n });\n }\n\n updateSpamFilter(\n id: string,\n params: UpdateSpamFilterParams,\n options?: MethodOptions,\n ): Promise<Mailbox> {\n return this.client.request<Mailbox>({\n method: \"PATCH\",\n path: `/mailboxes/${encodeURIComponent(id)}/spam-filter`,\n body: params,\n methodOptions: options,\n });\n }\n\n createImport(\n id: string,\n params: CreateMailboxImportParams,\n options?: MethodOptions,\n ): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n body: params,\n methodOptions: options,\n });\n }\n\n listImports(id: string, options?: MethodOptions): Promise<MailboxImports> {\n return this.client.request<MailboxImports>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports`,\n methodOptions: options,\n });\n }\n\n getImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"GET\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}`,\n methodOptions: options,\n });\n }\n\n cancelImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/cancel`,\n methodOptions: options,\n });\n }\n\n undoImport(id: string, importId: string, options?: MethodOptions): Promise<MailboxImport> {\n return this.client.request<MailboxImport>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/${encodeURIComponent(importId)}/undo`,\n methodOptions: options,\n });\n }\n\n createImportUpload(\n id: string,\n params: CreateImportUploadParams,\n options?: MethodOptions,\n ): Promise<ImportUpload> {\n return this.client.request<ImportUpload>({\n method: \"POST\",\n path: `/mailboxes/${encodeURIComponent(id)}/imports/files`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { Page } from \"../pagination.js\";\nimport { ApiResource } from \"../resource.js\";\nimport type { MethodOptions, PaginatedResponse } from \"../types/common.js\";\nimport type {\n ListMessagesParams,\n Message,\n ReplyToMessageParams,\n SendMessageParams,\n} from \"../types/message.js\";\n\nexport class Messages extends ApiResource {\n send(params: SendMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: \"/messages\",\n body: params,\n methodOptions: options,\n });\n }\n\n list(params: ListMessagesParams, options?: MethodOptions): Promise<PaginatedResponse<Message>> {\n return this.client.request<PaginatedResponse<Message>>({\n method: \"GET\",\n path: \"/messages\",\n query: {\n mailbox_id: params.mailbox_id,\n cursor: params.cursor,\n limit: params.limit,\n },\n methodOptions: options,\n });\n }\n\n listAutoPaginating(params: Omit<ListMessagesParams, \"cursor\">): Page<Message> {\n return new Page<Message>(this.client, \"/messages\", {\n mailbox_id: params.mailbox_id,\n limit: params.limit,\n });\n }\n\n get(id: string, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"GET\",\n path: `/messages/${encodeURIComponent(id)}`,\n methodOptions: options,\n });\n }\n\n reply(id: string, params: ReplyToMessageParams, options?: MethodOptions): Promise<Message> {\n return this.client.request<Message>({\n method: \"POST\",\n path: `/messages/${encodeURIComponent(id)}/reply`,\n body: params,\n methodOptions: options,\n });\n }\n}\n","import { 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.24\"; // x-release-please-version\n","import { ConnectionError, mapErrorFromResponse, RateLimitError, ShipMailError } from \"./errors.js\";\nimport { Audiences } from \"./resources/audiences.js\";\nimport { Domains } from \"./resources/domains.js\";\nimport { Mailboxes } from \"./resources/mailboxes.js\";\nimport { Messages } from \"./resources/messages.js\";\nimport { Status } from \"./resources/status.js\";\nimport { Suppressions } from \"./resources/suppressions.js\";\nimport { Threads } from \"./resources/threads.js\";\nimport { Webhooks } from \"./resources/webhooks.js\";\nimport type { ApiErrorBody, MethodOptions, ShipMailConfig } from \"./types/common.js\";\nimport { VERSION } from \"./version.js\";\n\nconst DEFAULT_BASE_URL = \"https://shipmail.to/api/v1\";\nconst DEFAULT_MAX_RETRIES = 2;\nconst DEFAULT_TIMEOUT = 30_000;\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction calculateBackoff(attempt: number, retryAfterMs?: number): number {\n if (retryAfterMs !== undefined && retryAfterMs > 0) {\n return retryAfterMs;\n }\n const base = Math.min(2 ** attempt * 500, 8000);\n const jitter = Math.random() * base * 0.5;\n return base + jitter;\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n if (typeof obj[\"error\"] !== \"object\" || obj[\"error\"] === null) return false;\n const error = obj[\"error\"] as Record<string, unknown>;\n return typeof error[\"type\"] === \"string\" && typeof error[\"message\"] === \"string\";\n}\n\nexport type RequestOptions = {\n readonly method: string;\n readonly path: string;\n readonly body?: unknown | undefined;\n readonly query?: Record<string, string | number | boolean | undefined> | undefined;\n readonly rawBody?: ArrayBuffer | undefined;\n readonly contentType?: string | undefined;\n readonly methodOptions?: MethodOptions | undefined;\n};\n\n/**\n * Client for the ShipMail API. Handles authentication, retries, and resource access.\n */\nexport class ShipMailClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly maxRetries: number;\n private readonly timeout: number;\n private readonly fetchFn: typeof fetch;\n private readonly defaultHeaders: Record<string, string>;\n\n readonly audiences: Audiences;\n readonly domains: Domains;\n readonly mailboxes: Mailboxes;\n readonly messages: Messages;\n readonly suppressions: Suppressions;\n readonly threads: Threads;\n readonly webhooks: Webhooks;\n readonly status: Status;\n\n /**\n * Create a new ShipMail client.\n * @param config - API key string or full configuration object.\n */\n constructor(config: string | ShipMailConfig) {\n if (typeof config === \"string\") {\n this.apiKey = config;\n this.baseUrl = DEFAULT_BASE_URL;\n this.maxRetries = DEFAULT_MAX_RETRIES;\n this.timeout = DEFAULT_TIMEOUT;\n this.fetchFn = globalThis.fetch;\n this.defaultHeaders = {};\n } else {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n this.defaultHeaders = config.defaultHeaders ? { ...config.defaultHeaders } : {};\n }\n\n this.audiences = new Audiences(this);\n this.domains = new Domains(this);\n this.mailboxes = new Mailboxes(this);\n this.messages = new Messages(this);\n this.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"]}
|