@primitivedotdev/sdk 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +65 -2
  2. package/bin/run.js +5 -0
  3. package/dist/api/generated/client/client.gen.js +235 -0
  4. package/dist/api/generated/client/index.js +6 -0
  5. package/dist/api/generated/client/types.gen.js +2 -0
  6. package/dist/api/generated/client/utils.gen.js +228 -0
  7. package/dist/api/generated/client.gen.js +3 -0
  8. package/dist/api/generated/core/auth.gen.js +14 -0
  9. package/dist/api/generated/core/bodySerializer.gen.js +57 -0
  10. package/dist/api/generated/core/params.gen.js +100 -0
  11. package/dist/api/generated/core/pathSerializer.gen.js +106 -0
  12. package/dist/api/generated/core/queryKeySerializer.gen.js +92 -0
  13. package/dist/api/generated/core/serverSentEvents.gen.js +132 -0
  14. package/dist/api/generated/core/types.gen.js +2 -0
  15. package/dist/api/generated/core/utils.gen.js +87 -0
  16. package/dist/api/generated/index.js +2 -0
  17. package/dist/api/generated/sdk.gen.js +344 -0
  18. package/dist/api/generated/types.gen.js +2 -0
  19. package/dist/api/index.d.ts +1832 -0
  20. package/dist/api/index.js +39 -0
  21. package/dist/chunk-Cl8Af3a2.js +11 -0
  22. package/dist/contract/index.d.ts +3 -3
  23. package/dist/contract/index.js +2 -2
  24. package/dist/{index-BdRIHaXz.d.ts → index-D2OuDGVz.d.ts} +81 -5
  25. package/dist/index.d.ts +3 -3
  26. package/dist/index.js +2 -2
  27. package/dist/oclif/api-command.js +154 -0
  28. package/dist/oclif/fish-completion.js +87 -0
  29. package/dist/oclif/index.js +42 -0
  30. package/dist/openapi/index.d.ts +41 -0
  31. package/dist/openapi/index.js +8 -0
  32. package/dist/openapi/openapi.generated.js +2644 -0
  33. package/dist/openapi/operations.generated.js +632 -0
  34. package/dist/parser/index.d.ts +1 -1
  35. package/dist/parser/index.js +40 -25
  36. package/dist/{types-B5IgP-Zx.d.ts → types-C3ms4R0d.d.ts} +4 -0
  37. package/dist/webhook/index.d.ts +3 -3
  38. package/dist/webhook/index.js +2 -2
  39. package/dist/{webhook-Be2vM0F-.js → webhook-uSco6pyX.js} +176 -11
  40. package/oclif.manifest.json +1255 -0
  41. package/package.json +81 -13
@@ -0,0 +1,1832 @@
1
+ import { __export } from "../chunk-Cl8Af3a2.js";
2
+
3
+ //#region src/api/generated/core/auth.gen.d.ts
4
+ type AuthToken = string | undefined;
5
+ interface Auth {
6
+ /**
7
+ * Which part of the request do we use to send the auth?
8
+ *
9
+ * @default 'header'
10
+ */
11
+ in?: 'header' | 'query' | 'cookie';
12
+ /**
13
+ * Header or query parameter name.
14
+ *
15
+ * @default 'Authorization'
16
+ */
17
+ name?: string;
18
+ scheme?: 'basic' | 'bearer';
19
+ type: 'apiKey' | 'http';
20
+ } //#endregion
21
+ //#region src/api/generated/core/pathSerializer.gen.d.ts
22
+ interface SerializerOptions<T> {
23
+ /**
24
+ * @default true
25
+ */
26
+ explode: boolean;
27
+ style: T;
28
+ }
29
+ type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';
30
+ type ObjectStyle = 'form' | 'deepObject'; //#endregion
31
+ //#region src/api/generated/core/bodySerializer.gen.d.ts
32
+ type QuerySerializer = (query: Record<string, unknown>) => string;
33
+ type BodySerializer = (body: unknown) => unknown;
34
+ type QuerySerializerOptionsObject = {
35
+ allowReserved?: boolean;
36
+ array?: Partial<SerializerOptions<ArrayStyle>>;
37
+ object?: Partial<SerializerOptions<ObjectStyle>>;
38
+ };
39
+ type QuerySerializerOptions = QuerySerializerOptionsObject & {
40
+ /**
41
+ * Per-parameter serialization overrides. When provided, these settings
42
+ * override the global array/object settings for specific parameter names.
43
+ */
44
+ parameters?: Record<string, QuerySerializerOptionsObject>;
45
+ };
46
+
47
+ //#endregion
48
+ //#region src/api/generated/core/types.gen.d.ts
49
+ type HttpMethod = 'connect' | 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace';
50
+ type Client$1<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
51
+ /**
52
+ * Returns the final request URL.
53
+ */
54
+ buildUrl: BuildUrlFn;
55
+ getConfig: () => Config$1;
56
+ request: RequestFn;
57
+ setConfig: (config: Config$1) => Config$1;
58
+ } & { [K in HttpMethod]: MethodFn } & ([SseFn] extends [never] ? {
59
+ sse?: never;
60
+ } : {
61
+ sse: { [K in HttpMethod]: SseFn };
62
+ });
63
+ interface Config$1 {
64
+ /**
65
+ * Auth token or a function returning auth token. The resolved value will be
66
+ * added to the request payload as defined by its `security` array.
67
+ */
68
+ auth?: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken;
69
+ /**
70
+ * A function for serializing request body parameter. By default,
71
+ * {@link JSON.stringify()} will be used.
72
+ */
73
+ bodySerializer?: BodySerializer | null;
74
+ /**
75
+ * An object containing any HTTP headers that you want to pre-populate your
76
+ * `Headers` object with.
77
+ *
78
+ * {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more}
79
+ */
80
+ headers?: RequestInit['headers'] | Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined | unknown>;
81
+ /**
82
+ * The request method.
83
+ *
84
+ * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
85
+ */
86
+ method?: Uppercase<HttpMethod>;
87
+ /**
88
+ * A function for serializing request query parameters. By default, arrays
89
+ * will be exploded in form style, objects will be exploded in deepObject
90
+ * style, and reserved characters are percent-encoded.
91
+ *
92
+ * This method will have no effect if the native `paramsSerializer()` Axios
93
+ * API function is used.
94
+ *
95
+ * {@link https://swagger.io/docs/specification/serialization/#query View examples}
96
+ */
97
+ querySerializer?: QuerySerializer | QuerySerializerOptions;
98
+ /**
99
+ * A function validating request data. This is useful if you want to ensure
100
+ * the request conforms to the desired shape, so it can be safely sent to
101
+ * the server.
102
+ */
103
+ requestValidator?: (data: unknown) => Promise<unknown>;
104
+ /**
105
+ * A function transforming response data before it's returned. This is useful
106
+ * for post-processing data, e.g., converting ISO strings into Date objects.
107
+ */
108
+ responseTransformer?: (data: unknown) => Promise<unknown>;
109
+ /**
110
+ * A function validating response data. This is useful if you want to ensure
111
+ * the response conforms to the desired shape, so it can be safely passed to
112
+ * the transformers and returned to the user.
113
+ */
114
+ responseValidator?: (data: unknown) => Promise<unknown>;
115
+ } //#endregion
116
+ //#region src/api/generated/core/serverSentEvents.gen.d.ts
117
+ type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> & Pick<Config$1, 'method' | 'responseTransformer' | 'responseValidator'> & {
118
+ /**
119
+ * Fetch API implementation. You can use this option to provide a custom
120
+ * fetch instance.
121
+ *
122
+ * @default globalThis.fetch
123
+ */
124
+ fetch?: typeof fetch;
125
+ /**
126
+ * Implementing clients can call request interceptors inside this hook.
127
+ */
128
+ onRequest?: (url: string, init: RequestInit) => Promise<Request>;
129
+ /**
130
+ * Callback invoked when a network or parsing error occurs during streaming.
131
+ *
132
+ * This option applies only if the endpoint returns a stream of events.
133
+ *
134
+ * @param error The error that occurred.
135
+ */
136
+ onSseError?: (error: unknown) => void;
137
+ /**
138
+ * Callback invoked when an event is streamed from the server.
139
+ *
140
+ * This option applies only if the endpoint returns a stream of events.
141
+ *
142
+ * @param event Event streamed from the server.
143
+ * @returns Nothing (void).
144
+ */
145
+ onSseEvent?: (event: StreamEvent<TData>) => void;
146
+ serializedBody?: RequestInit['body'];
147
+ /**
148
+ * Default retry delay in milliseconds.
149
+ *
150
+ * This option applies only if the endpoint returns a stream of events.
151
+ *
152
+ * @default 3000
153
+ */
154
+ sseDefaultRetryDelay?: number;
155
+ /**
156
+ * Maximum number of retry attempts before giving up.
157
+ */
158
+ sseMaxRetryAttempts?: number;
159
+ /**
160
+ * Maximum retry delay in milliseconds.
161
+ *
162
+ * Applies only when exponential backoff is used.
163
+ *
164
+ * This option applies only if the endpoint returns a stream of events.
165
+ *
166
+ * @default 30000
167
+ */
168
+ sseMaxRetryDelay?: number;
169
+ /**
170
+ * Optional sleep function for retry backoff.
171
+ *
172
+ * Defaults to using `setTimeout`.
173
+ */
174
+ sseSleepFn?: (ms: number) => Promise<void>;
175
+ url: string;
176
+ };
177
+ interface StreamEvent<TData = unknown> {
178
+ data: TData;
179
+ event?: string;
180
+ id?: string;
181
+ retry?: number;
182
+ }
183
+ type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {
184
+ stream: AsyncGenerator<TData extends Record<string, unknown> ? TData[keyof TData] : TData, TReturn, TNext>;
185
+ };
186
+
187
+ //#endregion
188
+ //#region src/api/generated/client/utils.gen.d.ts
189
+ type ErrInterceptor<Err, Res, Req, Options> = (error: Err, response: Res, request: Req, options: Options) => Err | Promise<Err>;
190
+ type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;
191
+ type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>;
192
+ declare class Interceptors<Interceptor> {
193
+ fns: Array<Interceptor | null>;
194
+ clear(): void;
195
+ eject(id: number | Interceptor): void;
196
+ exists(id: number | Interceptor): boolean;
197
+ getInterceptorIndex(id: number | Interceptor): number;
198
+ update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false;
199
+ use(fn: Interceptor): number;
200
+ }
201
+ interface Middleware<Req, Res, Err, Options> {
202
+ error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
203
+ request: Interceptors<ReqInterceptor<Req, Options>>;
204
+ response: Interceptors<ResInterceptor<Res, Req, Options>>;
205
+ }
206
+
207
+ //#endregion
208
+ //#region src/api/generated/client/types.gen.d.ts
209
+ type ResponseStyle = 'data' | 'fields';
210
+ interface Config<T extends ClientOptions$1 = ClientOptions$1> extends Omit<RequestInit, 'body' | 'headers' | 'method'>, Config$1 {
211
+ /**
212
+ * Base URL for all requests made by this client.
213
+ */
214
+ baseUrl?: T['baseUrl'];
215
+ /**
216
+ * Fetch API implementation. You can use this option to provide a custom
217
+ * fetch instance.
218
+ *
219
+ * @default globalThis.fetch
220
+ */
221
+ fetch?: typeof fetch;
222
+ /**
223
+ * Please don't use the Fetch client for Next.js applications. The `next`
224
+ * options won't have any effect.
225
+ *
226
+ * Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead.
227
+ */
228
+ next?: never;
229
+ /**
230
+ * Return the response data parsed in a specified format. By default, `auto`
231
+ * will infer the appropriate method from the `Content-Type` response header.
232
+ * You can override this behavior with any of the {@link Body} methods.
233
+ * Select `stream` if you don't want to parse response data at all.
234
+ *
235
+ * @default 'auto'
236
+ */
237
+ parseAs?: 'arrayBuffer' | 'auto' | 'blob' | 'formData' | 'json' | 'stream' | 'text';
238
+ /**
239
+ * Should we return only data or multiple fields (data, error, response, etc.)?
240
+ *
241
+ * @default 'fields'
242
+ */
243
+ responseStyle?: ResponseStyle;
244
+ /**
245
+ * Throw an error instead of returning it in the response?
246
+ *
247
+ * @default false
248
+ */
249
+ throwOnError?: T['throwOnError'];
250
+ }
251
+ interface RequestOptions<TData = unknown, TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends Config<{
252
+ responseStyle: TResponseStyle;
253
+ throwOnError: ThrowOnError;
254
+ }>, Pick<ServerSentEventsOptions<TData>, 'onRequest' | 'onSseError' | 'onSseEvent' | 'sseDefaultRetryDelay' | 'sseMaxRetryAttempts' | 'sseMaxRetryDelay'> {
255
+ /**
256
+ * Any body that you want to add to your request.
257
+ *
258
+ * {@link https://developer.mozilla.org/docs/Web/API/fetch#body}
259
+ */
260
+ body?: unknown;
261
+ path?: Record<string, unknown>;
262
+ query?: Record<string, unknown>;
263
+ /**
264
+ * Security mechanism(s) to use for the request.
265
+ */
266
+ security?: ReadonlyArray<Auth>;
267
+ url: Url;
268
+ }
269
+ interface ResolvedRequestOptions<TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
270
+ serializedBody?: string;
271
+ }
272
+ type RequestResult<TData = unknown, TError = unknown, ThrowOnError extends boolean = boolean, TResponseStyle extends ResponseStyle = 'fields'> = ThrowOnError extends true ? Promise<TResponseStyle extends 'data' ? TData extends Record<string, unknown> ? TData[keyof TData] : TData : {
273
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
274
+ request: Request;
275
+ response: Response;
276
+ }> : Promise<TResponseStyle extends 'data' ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined : ({
277
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
278
+ error: undefined;
279
+ } | {
280
+ data: undefined;
281
+ error: TError extends Record<string, unknown> ? TError[keyof TError] : TError;
282
+ }) & {
283
+ request: Request;
284
+ response: Response;
285
+ }>;
286
+ interface ClientOptions$1 {
287
+ baseUrl?: string;
288
+ responseStyle?: ResponseStyle;
289
+ throwOnError?: boolean;
290
+ }
291
+ type MethodFn$1 = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
292
+ type SseFn$1 = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<never, TResponseStyle, ThrowOnError>, 'method'>) => Promise<ServerSentEventsResult<TData, TError>>;
293
+ type RequestFn$1 = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> & Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
294
+ type BuildUrlFn$1 = <TData extends {
295
+ body?: unknown;
296
+ path?: Record<string, unknown>;
297
+ query?: Record<string, unknown>;
298
+ url: string;
299
+ }>(options: TData & Options$2<TData>) => string;
300
+ type Client = Client$1<RequestFn$1, Config, MethodFn$1, BuildUrlFn$1, SseFn$1> & {
301
+ interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
302
+ };
303
+ /**
304
+ * The `createClientConfig()` function will be called on client initialization
305
+ * and the returned object will become the client's initial configuration.
306
+ *
307
+ * You may want to initialize your client this way instead of calling
308
+ * `setConfig()`. This is useful for example if you're using Next.js
309
+ * to ensure your client always has the correct values.
310
+ */
311
+ type CreateClientConfig<T extends ClientOptions$1 = ClientOptions$1> = (override?: Config<ClientOptions$1 & T>) => Config<Required<ClientOptions$1> & T>;
312
+ interface TDataShape {
313
+ body?: unknown;
314
+ headers?: unknown;
315
+ path?: unknown;
316
+ query?: unknown;
317
+ url: string;
318
+ }
319
+ type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>;
320
+ type Options$2<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown, TResponseStyle extends ResponseStyle = 'fields'> = OmitKeys<RequestOptions<TResponse, TResponseStyle, ThrowOnError>, 'body' | 'path' | 'query' | 'url'> & ([TData] extends [never] ? unknown : Omit<TData, 'url'>);
321
+
322
+ //#endregion
323
+ //#region src/api/generated/types.gen.d.ts
324
+ type ClientOptions = {
325
+ baseUrl: 'https://www.primitive.dev/api/v1' | (string & {});
326
+ };
327
+ type SuccessEnvelope = {
328
+ success: boolean;
329
+ };
330
+ type ListEnvelope = {
331
+ success: boolean;
332
+ meta: PaginationMeta;
333
+ };
334
+ type PaginationMeta = {
335
+ /**
336
+ * Total number of matching records
337
+ */
338
+ total: number;
339
+ /**
340
+ * Page size used for this request
341
+ */
342
+ limit: number;
343
+ /**
344
+ * Cursor for the next page, or null if no more results
345
+ */
346
+ cursor: string | null;
347
+ };
348
+ type ErrorResponse = {
349
+ success: boolean;
350
+ error: {
351
+ code: 'unauthorized' | 'forbidden' | 'not_found' | 'validation_error' | 'rate_limit_exceeded' | 'internal_error';
352
+ message: string;
353
+ };
354
+ };
355
+ type Account = {
356
+ id: string;
357
+ email: string;
358
+ plan: string;
359
+ created_at: string;
360
+ onboarding_completed?: boolean;
361
+ onboarding_step?: string | null;
362
+ stripe_subscription_status?: string | null;
363
+ subscription_current_period_end?: string | null;
364
+ subscription_cancel_at_period_end?: boolean | null;
365
+ spam_threshold?: number | null;
366
+ discard_content_on_webhook_confirmed: boolean;
367
+ webhook_secret_rotated_at?: string | null;
368
+ };
369
+ type AccountUpdated = {
370
+ id: string;
371
+ email: string;
372
+ plan: string;
373
+ spam_threshold?: number | null;
374
+ discard_content_on_webhook_confirmed: boolean;
375
+ };
376
+ type UpdateAccountInput = {
377
+ /**
378
+ * Global spam score threshold (0-15). Emails scoring above this are rejected. Set to null to disable.
379
+ */
380
+ spam_threshold?: number | null;
381
+ /**
382
+ * Whether to discard email content after the webhook endpoint confirms receipt.
383
+ */
384
+ discard_content_on_webhook_confirmed?: boolean;
385
+ };
386
+ type StorageStats = {
387
+ /**
388
+ * Total storage used in bytes
389
+ */
390
+ used_bytes: number;
391
+ /**
392
+ * Total storage used in kilobytes (1 decimal)
393
+ */
394
+ used_kb: number;
395
+ /**
396
+ * Total storage used in megabytes (2 decimals)
397
+ */
398
+ used_mb: number;
399
+ /**
400
+ * Storage quota in megabytes (based on plan)
401
+ */
402
+ quota_mb: number;
403
+ /**
404
+ * Percentage of quota used (1 decimal)
405
+ */
406
+ percentage: number;
407
+ /**
408
+ * Number of stored emails
409
+ */
410
+ emails_count: number;
411
+ };
412
+ type WebhookSecret = {
413
+ /**
414
+ * The webhook signing secret value
415
+ */
416
+ secret: string;
417
+ };
418
+ /**
419
+ * A domain can be either verified or unverified. Verified domains have
420
+ * `is_active` and `spam_threshold` fields. Unverified domains have a
421
+ * `verification_token` for DNS verification.
422
+ *
423
+ */
424
+ type Domain = VerifiedDomain | UnverifiedDomain;
425
+ type VerifiedDomain = {
426
+ id: string;
427
+ org_id: string;
428
+ domain: string;
429
+ verified: boolean;
430
+ is_active: boolean;
431
+ spam_threshold?: number | null;
432
+ verification_token?: string | null;
433
+ created_at: string;
434
+ };
435
+ type UnverifiedDomain = {
436
+ id: string;
437
+ org_id: string;
438
+ domain: string;
439
+ verified: boolean;
440
+ /**
441
+ * Add this value as a TXT record to verify ownership
442
+ */
443
+ verification_token: string;
444
+ created_at: string;
445
+ };
446
+ type AddDomainInput = {
447
+ /**
448
+ * The domain name to claim (e.g. "example.com")
449
+ */
450
+ domain: string;
451
+ };
452
+ type UpdateDomainInput = {
453
+ /**
454
+ * Whether the domain accepts incoming emails
455
+ */
456
+ is_active?: boolean;
457
+ /**
458
+ * Per-domain spam threshold override (Pro plan required)
459
+ */
460
+ spam_threshold?: number | null;
461
+ };
462
+ type DomainVerifyResult = {
463
+ verified: boolean;
464
+ } | {
465
+ verified: boolean;
466
+ /**
467
+ * Whether MX records point to Primitive
468
+ */
469
+ mxFound: boolean;
470
+ /**
471
+ * Whether the TXT verification record was found
472
+ */
473
+ txtFound: boolean;
474
+ /**
475
+ * Human-readable verification failure reason
476
+ */
477
+ error: string;
478
+ };
479
+ type EmailSummary = {
480
+ id: string;
481
+ message_id?: string | null;
482
+ domain_id?: string | null;
483
+ org_id?: string | null;
484
+ status: 'pending' | 'accepted' | 'completed' | 'rejected';
485
+ sender: string;
486
+ recipient: string;
487
+ subject?: string | null;
488
+ domain: string;
489
+ spam_score?: number | null;
490
+ created_at: string;
491
+ received_at: string;
492
+ raw_size_bytes?: number | null;
493
+ webhook_status?: 'pending' | 'in_flight' | 'fired' | 'failed' | 'exhausted' | null;
494
+ webhook_attempt_count: number;
495
+ };
496
+ type EmailDetail = {
497
+ id: string;
498
+ message_id?: string | null;
499
+ domain_id?: string | null;
500
+ org_id?: string | null;
501
+ sender: string;
502
+ recipient: string;
503
+ subject?: string | null;
504
+ status: 'pending' | 'accepted' | 'completed' | 'rejected';
505
+ domain: string;
506
+ spam_score?: number | null;
507
+ raw_size_bytes?: number | null;
508
+ raw_sha256?: string | null;
509
+ created_at: string;
510
+ received_at: string;
511
+ rejection_reason?: string | null;
512
+ webhook_status?: 'pending' | 'in_flight' | 'fired' | 'failed' | 'exhausted' | null;
513
+ webhook_attempt_count: number;
514
+ webhook_last_attempt_at?: string | null;
515
+ webhook_last_status_code?: number | null;
516
+ webhook_last_error?: string | null;
517
+ webhook_fired_at?: string | null;
518
+ smtp_helo?: string | null;
519
+ smtp_mail_from?: string | null;
520
+ smtp_rcpt_to?: Array<string> | null;
521
+ from_header?: string | null;
522
+ content_discarded_at?: string | null;
523
+ content_discarded_by_delivery_id?: string | null;
524
+ /**
525
+ * Parsed from address (from_header or sender fallback)
526
+ */
527
+ from_email: string;
528
+ /**
529
+ * Parsed to address (same as recipient)
530
+ */
531
+ to_email: string;
532
+ };
533
+ type Endpoint = {
534
+ id: string;
535
+ org_id: string;
536
+ url?: string | null;
537
+ enabled: boolean;
538
+ /**
539
+ * Restrict this endpoint to emails from a specific domain
540
+ */
541
+ domain_id?: string | null;
542
+ /**
543
+ * Endpoint-specific filtering rules
544
+ */
545
+ rules: {
546
+ [key: string]: unknown;
547
+ };
548
+ created_at: string;
549
+ updated_at: string;
550
+ /**
551
+ * Total webhook deliveries attempted
552
+ */
553
+ delivery_count: number;
554
+ /**
555
+ * Successful deliveries
556
+ */
557
+ success_count: number;
558
+ /**
559
+ * Failed deliveries
560
+ */
561
+ failure_count: number;
562
+ /**
563
+ * Current streak of consecutive failures
564
+ */
565
+ consecutive_fails: number;
566
+ last_delivery_at?: string | null;
567
+ last_success_at?: string | null;
568
+ last_failure_at?: string | null;
569
+ deactivated_at?: string | null;
570
+ };
571
+ type CreateEndpointInput = {
572
+ /**
573
+ * The webhook URL to deliver events to
574
+ */
575
+ url: string;
576
+ /**
577
+ * Whether the endpoint is active
578
+ */
579
+ enabled?: boolean;
580
+ /**
581
+ * Restrict to emails from a specific domain
582
+ */
583
+ domain_id?: string | null;
584
+ /**
585
+ * Endpoint-specific filtering rules
586
+ */
587
+ rules?: {
588
+ [key: string]: unknown;
589
+ };
590
+ };
591
+ type UpdateEndpointInput = {
592
+ /**
593
+ * New webhook URL (triggers endpoint rotation)
594
+ */
595
+ url?: string;
596
+ enabled?: boolean;
597
+ domain_id?: string | null;
598
+ rules?: {
599
+ [key: string]: unknown;
600
+ };
601
+ };
602
+ type TestResult = {
603
+ /**
604
+ * HTTP status code returned by the endpoint
605
+ */
606
+ status: number;
607
+ /**
608
+ * Response body (truncated to 1000 characters)
609
+ */
610
+ body: string;
611
+ /**
612
+ * The signature header value sent (if webhook secret is configured)
613
+ */
614
+ signature?: string;
615
+ };
616
+ type Filter = {
617
+ id: string;
618
+ org_id: string;
619
+ /**
620
+ * If set, filter applies only to this domain
621
+ */
622
+ domain_id?: string | null;
623
+ type: 'whitelist' | 'blocklist';
624
+ /**
625
+ * Email address or pattern to match (stored lowercase)
626
+ */
627
+ pattern: string;
628
+ enabled: boolean;
629
+ created_at: string;
630
+ };
631
+ type CreateFilterInput = {
632
+ type: 'whitelist' | 'blocklist';
633
+ /**
634
+ * Email address or pattern to filter
635
+ */
636
+ pattern: string;
637
+ /**
638
+ * Restrict filter to a specific domain (Pro plan required)
639
+ */
640
+ domain_id?: string | null;
641
+ };
642
+ type UpdateFilterInput = {
643
+ enabled: boolean;
644
+ };
645
+ type DeliverySummary = {
646
+ /**
647
+ * Delivery ID (numeric string)
648
+ */
649
+ id: string;
650
+ email_id: string;
651
+ org_id: string;
652
+ endpoint_id: string;
653
+ endpoint_url: string;
654
+ status: 'pending' | 'delivered' | 'header_confirmed' | 'failed';
655
+ attempt_count: number;
656
+ duration_ms?: number | null;
657
+ last_error?: string | null;
658
+ created_at: string;
659
+ updated_at: string;
660
+ email?: {
661
+ sender: string;
662
+ recipient: string;
663
+ subject?: string | null;
664
+ } | null;
665
+ };
666
+ type ReplayResult = {
667
+ /**
668
+ * Number of successful deliveries
669
+ */
670
+ delivered: number;
671
+ /**
672
+ * Number of failed deliveries
673
+ */
674
+ failed: number;
675
+ };
676
+ /**
677
+ * Resource UUID
678
+ */
679
+ type ResourceId = string;
680
+ /**
681
+ * Pagination cursor from a previous response's `meta.cursor` field.
682
+ * Format: `{ISO-datetime}|{id}`
683
+ *
684
+ */
685
+ type Cursor = string;
686
+ /**
687
+ * Number of results per page
688
+ */
689
+ type Limit = number;
690
+ type GetAccountData = {
691
+ body?: never;
692
+ path?: never;
693
+ query?: never;
694
+ url: '/account';
695
+ };
696
+ type GetAccountErrors = {
697
+ /**
698
+ * Invalid or missing API key
699
+ */
700
+ 401: ErrorResponse;
701
+ /**
702
+ * Resource not found
703
+ */
704
+ 404: ErrorResponse;
705
+ };
706
+ type GetAccountError = GetAccountErrors[keyof GetAccountErrors];
707
+ type GetAccountResponses = {
708
+ /**
709
+ * Account details
710
+ */
711
+ 200: SuccessEnvelope & {
712
+ data?: Account;
713
+ };
714
+ };
715
+ type GetAccountResponse = GetAccountResponses[keyof GetAccountResponses];
716
+ type UpdateAccountData = {
717
+ body: UpdateAccountInput;
718
+ path?: never;
719
+ query?: never;
720
+ url: '/account';
721
+ };
722
+ type UpdateAccountErrors = {
723
+ /**
724
+ * Invalid request parameters
725
+ */
726
+ 400: ErrorResponse;
727
+ /**
728
+ * Invalid or missing API key
729
+ */
730
+ 401: ErrorResponse;
731
+ /**
732
+ * Resource not found
733
+ */
734
+ 404: ErrorResponse;
735
+ };
736
+ type UpdateAccountError = UpdateAccountErrors[keyof UpdateAccountErrors];
737
+ type UpdateAccountResponses = {
738
+ /**
739
+ * Updated account
740
+ */
741
+ 200: SuccessEnvelope & {
742
+ data?: AccountUpdated;
743
+ };
744
+ };
745
+ type UpdateAccountResponse = UpdateAccountResponses[keyof UpdateAccountResponses];
746
+ type GetStorageStatsData = {
747
+ body?: never;
748
+ path?: never;
749
+ query?: never;
750
+ url: '/account/storage';
751
+ };
752
+ type GetStorageStatsErrors = {
753
+ /**
754
+ * Invalid or missing API key
755
+ */
756
+ 401: ErrorResponse;
757
+ /**
758
+ * Resource not found
759
+ */
760
+ 404: ErrorResponse;
761
+ };
762
+ type GetStorageStatsError = GetStorageStatsErrors[keyof GetStorageStatsErrors];
763
+ type GetStorageStatsResponses = {
764
+ /**
765
+ * Storage statistics
766
+ */
767
+ 200: SuccessEnvelope & {
768
+ data?: StorageStats;
769
+ };
770
+ };
771
+ type GetStorageStatsResponse = GetStorageStatsResponses[keyof GetStorageStatsResponses];
772
+ type GetWebhookSecretData = {
773
+ body?: never;
774
+ path?: never;
775
+ query?: never;
776
+ url: '/account/webhook-secret';
777
+ };
778
+ type GetWebhookSecretErrors = {
779
+ /**
780
+ * Invalid or missing API key
781
+ */
782
+ 401: ErrorResponse;
783
+ /**
784
+ * Resource not found
785
+ */
786
+ 404: ErrorResponse;
787
+ };
788
+ type GetWebhookSecretError = GetWebhookSecretErrors[keyof GetWebhookSecretErrors];
789
+ type GetWebhookSecretResponses = {
790
+ /**
791
+ * Webhook secret
792
+ */
793
+ 200: SuccessEnvelope & {
794
+ data?: WebhookSecret;
795
+ };
796
+ };
797
+ type GetWebhookSecretResponse = GetWebhookSecretResponses[keyof GetWebhookSecretResponses];
798
+ type RotateWebhookSecretData = {
799
+ body?: never;
800
+ path?: never;
801
+ query?: never;
802
+ url: '/account/webhook-secret/rotate';
803
+ };
804
+ type RotateWebhookSecretErrors = {
805
+ /**
806
+ * Invalid request parameters
807
+ */
808
+ 400: ErrorResponse;
809
+ /**
810
+ * Invalid or missing API key
811
+ */
812
+ 401: ErrorResponse;
813
+ /**
814
+ * Resource not found
815
+ */
816
+ 404: ErrorResponse;
817
+ /**
818
+ * Rate limit exceeded
819
+ */
820
+ 429: ErrorResponse;
821
+ };
822
+ type RotateWebhookSecretError = RotateWebhookSecretErrors[keyof RotateWebhookSecretErrors];
823
+ type RotateWebhookSecretResponses = {
824
+ /**
825
+ * New webhook secret
826
+ */
827
+ 200: SuccessEnvelope & {
828
+ data?: WebhookSecret;
829
+ };
830
+ };
831
+ type RotateWebhookSecretResponse = RotateWebhookSecretResponses[keyof RotateWebhookSecretResponses];
832
+ type ListDomainsData = {
833
+ body?: never;
834
+ path?: never;
835
+ query?: never;
836
+ url: '/domains';
837
+ };
838
+ type ListDomainsErrors = {
839
+ /**
840
+ * Invalid or missing API key
841
+ */
842
+ 401: ErrorResponse;
843
+ };
844
+ type ListDomainsError = ListDomainsErrors[keyof ListDomainsErrors];
845
+ type ListDomainsResponses = {
846
+ /**
847
+ * List of domains
848
+ */
849
+ 200: SuccessEnvelope & {
850
+ data?: Array<Domain>;
851
+ };
852
+ };
853
+ type ListDomainsResponse = ListDomainsResponses[keyof ListDomainsResponses];
854
+ type AddDomainData = {
855
+ body: AddDomainInput;
856
+ path?: never;
857
+ query?: never;
858
+ url: '/domains';
859
+ };
860
+ type AddDomainErrors = {
861
+ /**
862
+ * Invalid request parameters
863
+ */
864
+ 400: ErrorResponse;
865
+ /**
866
+ * Invalid or missing API key
867
+ */
868
+ 401: ErrorResponse;
869
+ };
870
+ type AddDomainError = AddDomainErrors[keyof AddDomainErrors];
871
+ type AddDomainResponses = {
872
+ /**
873
+ * Domain claim created
874
+ */
875
+ 201: SuccessEnvelope & {
876
+ data?: UnverifiedDomain;
877
+ };
878
+ };
879
+ type AddDomainResponse = AddDomainResponses[keyof AddDomainResponses];
880
+ type DeleteDomainData = {
881
+ body?: never;
882
+ path: {
883
+ /**
884
+ * Resource UUID
885
+ */
886
+ id: string;
887
+ };
888
+ query?: never;
889
+ url: '/domains/{id}';
890
+ };
891
+ type DeleteDomainErrors = {
892
+ /**
893
+ * Invalid request parameters
894
+ */
895
+ 400: ErrorResponse;
896
+ /**
897
+ * Invalid or missing API key
898
+ */
899
+ 401: ErrorResponse;
900
+ /**
901
+ * Resource not found
902
+ */
903
+ 404: ErrorResponse;
904
+ };
905
+ type DeleteDomainError = DeleteDomainErrors[keyof DeleteDomainErrors];
906
+ type DeleteDomainResponses = {
907
+ /**
908
+ * Resource deleted
909
+ */
910
+ 200: SuccessEnvelope & {
911
+ data?: {
912
+ deleted: boolean;
913
+ };
914
+ };
915
+ };
916
+ type DeleteDomainResponse = DeleteDomainResponses[keyof DeleteDomainResponses];
917
+ type UpdateDomainData = {
918
+ body: UpdateDomainInput;
919
+ path: {
920
+ /**
921
+ * Resource UUID
922
+ */
923
+ id: string;
924
+ };
925
+ query?: never;
926
+ url: '/domains/{id}';
927
+ };
928
+ type UpdateDomainErrors = {
929
+ /**
930
+ * Invalid request parameters
931
+ */
932
+ 400: ErrorResponse;
933
+ /**
934
+ * Invalid or missing API key
935
+ */
936
+ 401: ErrorResponse;
937
+ /**
938
+ * Resource not found
939
+ */
940
+ 404: ErrorResponse;
941
+ };
942
+ type UpdateDomainError = UpdateDomainErrors[keyof UpdateDomainErrors];
943
+ type UpdateDomainResponses = {
944
+ /**
945
+ * Updated domain
946
+ */
947
+ 200: SuccessEnvelope & {
948
+ data?: VerifiedDomain;
949
+ };
950
+ };
951
+ type UpdateDomainResponse = UpdateDomainResponses[keyof UpdateDomainResponses];
952
+ type VerifyDomainData = {
953
+ body?: never;
954
+ path: {
955
+ /**
956
+ * Resource UUID
957
+ */
958
+ id: string;
959
+ };
960
+ query?: never;
961
+ url: '/domains/{id}/verify';
962
+ };
963
+ type VerifyDomainErrors = {
964
+ /**
965
+ * Invalid request parameters
966
+ */
967
+ 400: ErrorResponse;
968
+ /**
969
+ * Invalid or missing API key
970
+ */
971
+ 401: ErrorResponse;
972
+ /**
973
+ * Resource not found
974
+ */
975
+ 404: ErrorResponse;
976
+ };
977
+ type VerifyDomainError = VerifyDomainErrors[keyof VerifyDomainErrors];
978
+ type VerifyDomainResponses = {
979
+ /**
980
+ * Verification result
981
+ */
982
+ 200: SuccessEnvelope & {
983
+ data?: DomainVerifyResult;
984
+ };
985
+ };
986
+ type VerifyDomainResponse = VerifyDomainResponses[keyof VerifyDomainResponses];
987
+ type ListEmailsData = {
988
+ body?: never;
989
+ path?: never;
990
+ query?: {
991
+ /**
992
+ * Pagination cursor from a previous response's `meta.cursor` field.
993
+ * Format: `{ISO-datetime}|{id}`
994
+ *
995
+ */
996
+ cursor?: string;
997
+ /**
998
+ * Number of results per page
999
+ */
1000
+ limit?: number;
1001
+ /**
1002
+ * Filter by domain ID
1003
+ */
1004
+ domain_id?: string;
1005
+ /**
1006
+ * Filter by email status
1007
+ */
1008
+ status?: 'pending' | 'accepted' | 'completed' | 'rejected';
1009
+ /**
1010
+ * Search subject, sender, and recipient (case-insensitive)
1011
+ */
1012
+ search?: string;
1013
+ /**
1014
+ * Filter emails created on or after this timestamp
1015
+ */
1016
+ date_from?: string;
1017
+ /**
1018
+ * Filter emails created on or before this timestamp
1019
+ */
1020
+ date_to?: string;
1021
+ };
1022
+ url: '/emails';
1023
+ };
1024
+ type ListEmailsErrors = {
1025
+ /**
1026
+ * Invalid request parameters
1027
+ */
1028
+ 400: ErrorResponse;
1029
+ /**
1030
+ * Invalid or missing API key
1031
+ */
1032
+ 401: ErrorResponse;
1033
+ };
1034
+ type ListEmailsError = ListEmailsErrors[keyof ListEmailsErrors];
1035
+ type ListEmailsResponses = {
1036
+ /**
1037
+ * Paginated list of emails
1038
+ */
1039
+ 200: ListEnvelope & {
1040
+ data?: Array<EmailSummary>;
1041
+ };
1042
+ };
1043
+ type ListEmailsResponse = ListEmailsResponses[keyof ListEmailsResponses];
1044
+ type DeleteEmailData = {
1045
+ body?: never;
1046
+ path: {
1047
+ /**
1048
+ * Resource UUID
1049
+ */
1050
+ id: string;
1051
+ };
1052
+ query?: never;
1053
+ url: '/emails/{id}';
1054
+ };
1055
+ type DeleteEmailErrors = {
1056
+ /**
1057
+ * Invalid request parameters
1058
+ */
1059
+ 400: ErrorResponse;
1060
+ /**
1061
+ * Invalid or missing API key
1062
+ */
1063
+ 401: ErrorResponse;
1064
+ /**
1065
+ * Resource not found
1066
+ */
1067
+ 404: ErrorResponse;
1068
+ };
1069
+ type DeleteEmailError = DeleteEmailErrors[keyof DeleteEmailErrors];
1070
+ type DeleteEmailResponses = {
1071
+ /**
1072
+ * Resource deleted
1073
+ */
1074
+ 200: SuccessEnvelope & {
1075
+ data?: {
1076
+ deleted: boolean;
1077
+ };
1078
+ };
1079
+ };
1080
+ type DeleteEmailResponse = DeleteEmailResponses[keyof DeleteEmailResponses];
1081
+ type GetEmailData = {
1082
+ body?: never;
1083
+ path: {
1084
+ /**
1085
+ * Resource UUID
1086
+ */
1087
+ id: string;
1088
+ };
1089
+ query?: never;
1090
+ url: '/emails/{id}';
1091
+ };
1092
+ type GetEmailErrors = {
1093
+ /**
1094
+ * Invalid request parameters
1095
+ */
1096
+ 400: ErrorResponse;
1097
+ /**
1098
+ * Invalid or missing API key
1099
+ */
1100
+ 401: ErrorResponse;
1101
+ /**
1102
+ * Resource not found
1103
+ */
1104
+ 404: ErrorResponse;
1105
+ };
1106
+ type GetEmailError = GetEmailErrors[keyof GetEmailErrors];
1107
+ type GetEmailResponses = {
1108
+ /**
1109
+ * Email details
1110
+ */
1111
+ 200: SuccessEnvelope & {
1112
+ data?: EmailDetail;
1113
+ };
1114
+ };
1115
+ type GetEmailResponse = GetEmailResponses[keyof GetEmailResponses];
1116
+ type DownloadRawEmailData = {
1117
+ body?: never;
1118
+ path: {
1119
+ /**
1120
+ * Resource UUID
1121
+ */
1122
+ id: string;
1123
+ };
1124
+ query?: {
1125
+ /**
1126
+ * Signed download token from webhook payload
1127
+ */
1128
+ token?: string;
1129
+ };
1130
+ url: '/emails/{id}/raw';
1131
+ };
1132
+ type DownloadRawEmailErrors = {
1133
+ /**
1134
+ * Invalid request parameters
1135
+ */
1136
+ 400: ErrorResponse;
1137
+ /**
1138
+ * Invalid or missing API key
1139
+ */
1140
+ 401: ErrorResponse;
1141
+ /**
1142
+ * Resource not found
1143
+ */
1144
+ 404: ErrorResponse;
1145
+ };
1146
+ type DownloadRawEmailError = DownloadRawEmailErrors[keyof DownloadRawEmailErrors];
1147
+ type DownloadRawEmailResponses = {
1148
+ /**
1149
+ * Raw email file
1150
+ */
1151
+ 200: Blob | File;
1152
+ };
1153
+ type DownloadRawEmailResponse = DownloadRawEmailResponses[keyof DownloadRawEmailResponses];
1154
+ type DownloadAttachmentsData = {
1155
+ body?: never;
1156
+ path: {
1157
+ /**
1158
+ * Resource UUID
1159
+ */
1160
+ id: string;
1161
+ };
1162
+ query?: {
1163
+ /**
1164
+ * Signed download token from webhook payload
1165
+ */
1166
+ token?: string;
1167
+ };
1168
+ url: '/emails/{id}/attachments.tar.gz';
1169
+ };
1170
+ type DownloadAttachmentsErrors = {
1171
+ /**
1172
+ * Invalid request parameters
1173
+ */
1174
+ 400: ErrorResponse;
1175
+ /**
1176
+ * Invalid or missing API key
1177
+ */
1178
+ 401: ErrorResponse;
1179
+ /**
1180
+ * Resource not found
1181
+ */
1182
+ 404: ErrorResponse;
1183
+ };
1184
+ type DownloadAttachmentsError = DownloadAttachmentsErrors[keyof DownloadAttachmentsErrors];
1185
+ type DownloadAttachmentsResponses = {
1186
+ /**
1187
+ * Attachments archive
1188
+ */
1189
+ 200: Blob | File;
1190
+ };
1191
+ type DownloadAttachmentsResponse = DownloadAttachmentsResponses[keyof DownloadAttachmentsResponses];
1192
+ type ReplayEmailWebhooksData = {
1193
+ body?: never;
1194
+ path: {
1195
+ /**
1196
+ * Resource UUID
1197
+ */
1198
+ id: string;
1199
+ };
1200
+ query?: never;
1201
+ url: '/emails/{id}/replay';
1202
+ };
1203
+ type ReplayEmailWebhooksErrors = {
1204
+ /**
1205
+ * Invalid request parameters
1206
+ */
1207
+ 400: ErrorResponse;
1208
+ /**
1209
+ * Invalid or missing API key
1210
+ */
1211
+ 401: ErrorResponse;
1212
+ /**
1213
+ * Resource not found
1214
+ */
1215
+ 404: ErrorResponse;
1216
+ };
1217
+ type ReplayEmailWebhooksError = ReplayEmailWebhooksErrors[keyof ReplayEmailWebhooksErrors];
1218
+ type ReplayEmailWebhooksResponses = {
1219
+ /**
1220
+ * Replay result
1221
+ */
1222
+ 200: SuccessEnvelope & {
1223
+ data?: ReplayResult;
1224
+ };
1225
+ };
1226
+ type ReplayEmailWebhooksResponse = ReplayEmailWebhooksResponses[keyof ReplayEmailWebhooksResponses];
1227
+ type ListEndpointsData = {
1228
+ body?: never;
1229
+ path?: never;
1230
+ query?: never;
1231
+ url: '/endpoints';
1232
+ };
1233
+ type ListEndpointsErrors = {
1234
+ /**
1235
+ * Invalid or missing API key
1236
+ */
1237
+ 401: ErrorResponse;
1238
+ };
1239
+ type ListEndpointsError = ListEndpointsErrors[keyof ListEndpointsErrors];
1240
+ type ListEndpointsResponses = {
1241
+ /**
1242
+ * List of endpoints
1243
+ */
1244
+ 200: SuccessEnvelope & {
1245
+ data?: Array<Endpoint>;
1246
+ };
1247
+ };
1248
+ type ListEndpointsResponse = ListEndpointsResponses[keyof ListEndpointsResponses];
1249
+ type CreateEndpointData = {
1250
+ body: CreateEndpointInput;
1251
+ path?: never;
1252
+ query?: never;
1253
+ url: '/endpoints';
1254
+ };
1255
+ type CreateEndpointErrors = {
1256
+ /**
1257
+ * Invalid request parameters
1258
+ */
1259
+ 400: ErrorResponse;
1260
+ /**
1261
+ * Invalid or missing API key
1262
+ */
1263
+ 401: ErrorResponse;
1264
+ };
1265
+ type CreateEndpointError = CreateEndpointErrors[keyof CreateEndpointErrors];
1266
+ type CreateEndpointResponses = {
1267
+ /**
1268
+ * Endpoint created (or reactivated)
1269
+ */
1270
+ 201: SuccessEnvelope & {
1271
+ data?: Endpoint;
1272
+ };
1273
+ };
1274
+ type CreateEndpointResponse = CreateEndpointResponses[keyof CreateEndpointResponses];
1275
+ type DeleteEndpointData = {
1276
+ body?: never;
1277
+ path: {
1278
+ /**
1279
+ * Resource UUID
1280
+ */
1281
+ id: string;
1282
+ };
1283
+ query?: never;
1284
+ url: '/endpoints/{id}';
1285
+ };
1286
+ type DeleteEndpointErrors = {
1287
+ /**
1288
+ * Invalid request parameters
1289
+ */
1290
+ 400: ErrorResponse;
1291
+ /**
1292
+ * Invalid or missing API key
1293
+ */
1294
+ 401: ErrorResponse;
1295
+ /**
1296
+ * Resource not found
1297
+ */
1298
+ 404: ErrorResponse;
1299
+ };
1300
+ type DeleteEndpointError = DeleteEndpointErrors[keyof DeleteEndpointErrors];
1301
+ type DeleteEndpointResponses = {
1302
+ /**
1303
+ * Resource deleted
1304
+ */
1305
+ 200: SuccessEnvelope & {
1306
+ data?: {
1307
+ deleted: boolean;
1308
+ };
1309
+ };
1310
+ };
1311
+ type DeleteEndpointResponse = DeleteEndpointResponses[keyof DeleteEndpointResponses];
1312
+ type UpdateEndpointData = {
1313
+ body: UpdateEndpointInput;
1314
+ path: {
1315
+ /**
1316
+ * Resource UUID
1317
+ */
1318
+ id: string;
1319
+ };
1320
+ query?: never;
1321
+ url: '/endpoints/{id}';
1322
+ };
1323
+ type UpdateEndpointErrors = {
1324
+ /**
1325
+ * Invalid request parameters
1326
+ */
1327
+ 400: ErrorResponse;
1328
+ /**
1329
+ * Invalid or missing API key
1330
+ */
1331
+ 401: ErrorResponse;
1332
+ /**
1333
+ * Resource not found
1334
+ */
1335
+ 404: ErrorResponse;
1336
+ };
1337
+ type UpdateEndpointError = UpdateEndpointErrors[keyof UpdateEndpointErrors];
1338
+ type UpdateEndpointResponses = {
1339
+ /**
1340
+ * Updated endpoint
1341
+ */
1342
+ 200: SuccessEnvelope & {
1343
+ data?: Endpoint;
1344
+ };
1345
+ };
1346
+ type UpdateEndpointResponse = UpdateEndpointResponses[keyof UpdateEndpointResponses];
1347
+ type TestEndpointData = {
1348
+ body?: never;
1349
+ path: {
1350
+ /**
1351
+ * Resource UUID
1352
+ */
1353
+ id: string;
1354
+ };
1355
+ query?: never;
1356
+ url: '/endpoints/{id}/test';
1357
+ };
1358
+ type TestEndpointErrors = {
1359
+ /**
1360
+ * Invalid request parameters
1361
+ */
1362
+ 400: ErrorResponse;
1363
+ /**
1364
+ * Invalid or missing API key
1365
+ */
1366
+ 401: ErrorResponse;
1367
+ /**
1368
+ * Resource not found
1369
+ */
1370
+ 404: ErrorResponse;
1371
+ /**
1372
+ * Rate limit exceeded
1373
+ */
1374
+ 429: ErrorResponse;
1375
+ };
1376
+ type TestEndpointError = TestEndpointErrors[keyof TestEndpointErrors];
1377
+ type TestEndpointResponses = {
1378
+ /**
1379
+ * Test result
1380
+ */
1381
+ 200: SuccessEnvelope & {
1382
+ data?: TestResult;
1383
+ };
1384
+ };
1385
+ type TestEndpointResponse = TestEndpointResponses[keyof TestEndpointResponses];
1386
+ type ListFiltersData = {
1387
+ body?: never;
1388
+ path?: never;
1389
+ query?: never;
1390
+ url: '/filters';
1391
+ };
1392
+ type ListFiltersErrors = {
1393
+ /**
1394
+ * Invalid or missing API key
1395
+ */
1396
+ 401: ErrorResponse;
1397
+ };
1398
+ type ListFiltersError = ListFiltersErrors[keyof ListFiltersErrors];
1399
+ type ListFiltersResponses = {
1400
+ /**
1401
+ * List of filters
1402
+ */
1403
+ 200: SuccessEnvelope & {
1404
+ data?: Array<Filter>;
1405
+ };
1406
+ };
1407
+ type ListFiltersResponse = ListFiltersResponses[keyof ListFiltersResponses];
1408
+ type CreateFilterData = {
1409
+ body: CreateFilterInput;
1410
+ path?: never;
1411
+ query?: never;
1412
+ url: '/filters';
1413
+ };
1414
+ type CreateFilterErrors = {
1415
+ /**
1416
+ * Invalid request parameters
1417
+ */
1418
+ 400: ErrorResponse;
1419
+ /**
1420
+ * Invalid or missing API key
1421
+ */
1422
+ 401: ErrorResponse;
1423
+ /**
1424
+ * Resource not found
1425
+ */
1426
+ 404: ErrorResponse;
1427
+ };
1428
+ type CreateFilterError = CreateFilterErrors[keyof CreateFilterErrors];
1429
+ type CreateFilterResponses = {
1430
+ /**
1431
+ * Filter created
1432
+ */
1433
+ 201: SuccessEnvelope & {
1434
+ data?: Filter;
1435
+ };
1436
+ };
1437
+ type CreateFilterResponse = CreateFilterResponses[keyof CreateFilterResponses];
1438
+ type DeleteFilterData = {
1439
+ body?: never;
1440
+ path: {
1441
+ /**
1442
+ * Resource UUID
1443
+ */
1444
+ id: string;
1445
+ };
1446
+ query?: never;
1447
+ url: '/filters/{id}';
1448
+ };
1449
+ type DeleteFilterErrors = {
1450
+ /**
1451
+ * Invalid request parameters
1452
+ */
1453
+ 400: ErrorResponse;
1454
+ /**
1455
+ * Invalid or missing API key
1456
+ */
1457
+ 401: ErrorResponse;
1458
+ /**
1459
+ * Resource not found
1460
+ */
1461
+ 404: ErrorResponse;
1462
+ };
1463
+ type DeleteFilterError = DeleteFilterErrors[keyof DeleteFilterErrors];
1464
+ type DeleteFilterResponses = {
1465
+ /**
1466
+ * Resource deleted
1467
+ */
1468
+ 200: SuccessEnvelope & {
1469
+ data?: {
1470
+ deleted: boolean;
1471
+ };
1472
+ };
1473
+ };
1474
+ type DeleteFilterResponse = DeleteFilterResponses[keyof DeleteFilterResponses];
1475
+ type UpdateFilterData = {
1476
+ body: UpdateFilterInput;
1477
+ path: {
1478
+ /**
1479
+ * Resource UUID
1480
+ */
1481
+ id: string;
1482
+ };
1483
+ query?: never;
1484
+ url: '/filters/{id}';
1485
+ };
1486
+ type UpdateFilterErrors = {
1487
+ /**
1488
+ * Invalid request parameters
1489
+ */
1490
+ 400: ErrorResponse;
1491
+ /**
1492
+ * Invalid or missing API key
1493
+ */
1494
+ 401: ErrorResponse;
1495
+ /**
1496
+ * Resource not found
1497
+ */
1498
+ 404: ErrorResponse;
1499
+ };
1500
+ type UpdateFilterError = UpdateFilterErrors[keyof UpdateFilterErrors];
1501
+ type UpdateFilterResponses = {
1502
+ /**
1503
+ * Updated filter
1504
+ */
1505
+ 200: SuccessEnvelope & {
1506
+ data?: Filter;
1507
+ };
1508
+ };
1509
+ type UpdateFilterResponse = UpdateFilterResponses[keyof UpdateFilterResponses];
1510
+ type ListDeliveriesData = {
1511
+ body?: never;
1512
+ path?: never;
1513
+ query?: {
1514
+ /**
1515
+ * Pagination cursor from a previous response's `meta.cursor` field.
1516
+ * Format: `{ISO-datetime}|{id}`
1517
+ *
1518
+ */
1519
+ cursor?: string;
1520
+ /**
1521
+ * Number of results per page
1522
+ */
1523
+ limit?: number;
1524
+ /**
1525
+ * Filter by email ID
1526
+ */
1527
+ email_id?: string;
1528
+ /**
1529
+ * Filter by delivery status
1530
+ */
1531
+ status?: 'pending' | 'delivered' | 'header_confirmed' | 'failed';
1532
+ /**
1533
+ * Filter deliveries created on or after this timestamp
1534
+ */
1535
+ date_from?: string;
1536
+ /**
1537
+ * Filter deliveries created on or before this timestamp
1538
+ */
1539
+ date_to?: string;
1540
+ };
1541
+ url: '/webhooks/deliveries';
1542
+ };
1543
+ type ListDeliveriesErrors = {
1544
+ /**
1545
+ * Invalid request parameters
1546
+ */
1547
+ 400: ErrorResponse;
1548
+ /**
1549
+ * Invalid or missing API key
1550
+ */
1551
+ 401: ErrorResponse;
1552
+ };
1553
+ type ListDeliveriesError = ListDeliveriesErrors[keyof ListDeliveriesErrors];
1554
+ type ListDeliveriesResponses = {
1555
+ /**
1556
+ * Paginated list of deliveries
1557
+ */
1558
+ 200: ListEnvelope & {
1559
+ data?: Array<DeliverySummary>;
1560
+ };
1561
+ };
1562
+ type ListDeliveriesResponse = ListDeliveriesResponses[keyof ListDeliveriesResponses];
1563
+ type ReplayDeliveryData = {
1564
+ body?: never;
1565
+ path: {
1566
+ /**
1567
+ * Delivery ID (numeric)
1568
+ */
1569
+ id: string;
1570
+ };
1571
+ query?: never;
1572
+ url: '/webhooks/deliveries/{id}/replay';
1573
+ };
1574
+ type ReplayDeliveryErrors = {
1575
+ /**
1576
+ * Invalid request parameters
1577
+ */
1578
+ 400: ErrorResponse;
1579
+ /**
1580
+ * Invalid or missing API key
1581
+ */
1582
+ 401: ErrorResponse;
1583
+ /**
1584
+ * Resource not found
1585
+ */
1586
+ 404: ErrorResponse;
1587
+ };
1588
+ type ReplayDeliveryError = ReplayDeliveryErrors[keyof ReplayDeliveryErrors];
1589
+ type ReplayDeliveryResponses = {
1590
+ /**
1591
+ * Replay result
1592
+ */
1593
+ 200: SuccessEnvelope & {
1594
+ data?: ReplayResult;
1595
+ };
1596
+ };
1597
+ type ReplayDeliveryResponse = ReplayDeliveryResponses[keyof ReplayDeliveryResponses]; //#endregion
1598
+ //#region src/api/generated/sdk.gen.d.ts
1599
+ declare namespace sdk_gen_d_exports {
1600
+ export { Options$1 as Options, addDomain, createEndpoint, createFilter, deleteDomain, deleteEmail, deleteEndpoint, deleteFilter, downloadAttachments, downloadRawEmail, getAccount, getEmail, getStorageStats, getWebhookSecret, listDeliveries, listDomains, listEmails, listEndpoints, listFilters, replayDelivery, replayEmailWebhooks, rotateWebhookSecret, testEndpoint, updateAccount, updateDomain, updateEndpoint, updateFilter, verifyDomain };
1601
+ }
1602
+ type Options$1<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options$2<TData, ThrowOnError, TResponse> & {
1603
+ /**
1604
+ * You can provide a client instance returned by `createClient()` instead of
1605
+ * individual options. This might be also useful if you want to implement a
1606
+ * custom client.
1607
+ */
1608
+ client?: Client;
1609
+ /**
1610
+ * You can pass arbitrary values through the `meta` object. This can be
1611
+ * used to access values that aren't defined as part of the SDK function.
1612
+ */
1613
+ meta?: Record<string, unknown>;
1614
+ };
1615
+ /**
1616
+ * Get account info
1617
+ */
1618
+ declare const getAccount: <ThrowOnError extends boolean = false>(options?: Options$1<GetAccountData, ThrowOnError>) => RequestResult<GetAccountResponses, GetAccountErrors, ThrowOnError, "fields">;
1619
+ /**
1620
+ * Update account settings
1621
+ */
1622
+ declare const updateAccount: <ThrowOnError extends boolean = false>(options: Options$1<UpdateAccountData, ThrowOnError>) => RequestResult<UpdateAccountResponses, UpdateAccountErrors, ThrowOnError, "fields">;
1623
+ /**
1624
+ * Get storage usage
1625
+ */
1626
+ declare const getStorageStats: <ThrowOnError extends boolean = false>(options?: Options$1<GetStorageStatsData, ThrowOnError>) => RequestResult<GetStorageStatsResponses, GetStorageStatsErrors, ThrowOnError, "fields">;
1627
+ /**
1628
+ * Get webhook signing secret
1629
+ *
1630
+ * Returns the webhook signing secret for your account. If no secret
1631
+ * exists yet, one is generated automatically on first access.
1632
+ *
1633
+ */
1634
+ declare const getWebhookSecret: <ThrowOnError extends boolean = false>(options?: Options$1<GetWebhookSecretData, ThrowOnError>) => RequestResult<GetWebhookSecretResponses, GetWebhookSecretErrors, ThrowOnError, "fields">;
1635
+ /**
1636
+ * Rotate webhook signing secret
1637
+ *
1638
+ * Generates a new webhook signing secret, replacing the current one.
1639
+ * Rate limited to once per 60 minutes.
1640
+ *
1641
+ */
1642
+ declare const rotateWebhookSecret: <ThrowOnError extends boolean = false>(options?: Options$1<RotateWebhookSecretData, ThrowOnError>) => RequestResult<RotateWebhookSecretResponses, RotateWebhookSecretErrors, ThrowOnError, "fields">;
1643
+ /**
1644
+ * List all domains
1645
+ *
1646
+ * Returns all verified and unverified domains for your organization,
1647
+ * sorted by creation date (newest first). Each domain includes a
1648
+ * `verified` boolean to distinguish between the two states.
1649
+ *
1650
+ */
1651
+ declare const listDomains: <ThrowOnError extends boolean = false>(options?: Options$1<ListDomainsData, ThrowOnError>) => RequestResult<ListDomainsResponses, ListDomainsErrors, ThrowOnError, "fields">;
1652
+ /**
1653
+ * Claim a new domain
1654
+ *
1655
+ * Creates an unverified domain claim. You will receive a
1656
+ * `verification_token` to add as a DNS TXT record before
1657
+ * calling the verify endpoint.
1658
+ *
1659
+ */
1660
+ declare const addDomain: <ThrowOnError extends boolean = false>(options: Options$1<AddDomainData, ThrowOnError>) => RequestResult<AddDomainResponses, AddDomainErrors, ThrowOnError, "fields">;
1661
+ /**
1662
+ * Delete a domain
1663
+ *
1664
+ * Deletes a verified or unverified domain claim.
1665
+ */
1666
+ declare const deleteDomain: <ThrowOnError extends boolean = false>(options: Options$1<DeleteDomainData, ThrowOnError>) => RequestResult<DeleteDomainResponses, DeleteDomainErrors, ThrowOnError, "fields">;
1667
+ /**
1668
+ * Update domain settings
1669
+ *
1670
+ * Update a verified domain's settings. Only verified domains can be
1671
+ * updated. Per-domain spam thresholds require a Pro plan.
1672
+ *
1673
+ */
1674
+ declare const updateDomain: <ThrowOnError extends boolean = false>(options: Options$1<UpdateDomainData, ThrowOnError>) => RequestResult<UpdateDomainResponses, UpdateDomainErrors, ThrowOnError, "fields">;
1675
+ /**
1676
+ * Verify domain ownership
1677
+ *
1678
+ * Checks DNS records (MX and TXT) to verify domain ownership.
1679
+ * On success, the domain is promoted from unverified to verified.
1680
+ * On failure, returns which checks passed and which failed.
1681
+ *
1682
+ */
1683
+ declare const verifyDomain: <ThrowOnError extends boolean = false>(options: Options$1<VerifyDomainData, ThrowOnError>) => RequestResult<VerifyDomainResponses, VerifyDomainErrors, ThrowOnError, "fields">;
1684
+ /**
1685
+ * List emails
1686
+ *
1687
+ * Returns a paginated list of received emails. Supports filtering by
1688
+ * domain, status, date range, and free-text search across subject,
1689
+ * sender, and recipient fields.
1690
+ *
1691
+ */
1692
+ declare const listEmails: <ThrowOnError extends boolean = false>(options?: Options$1<ListEmailsData, ThrowOnError>) => RequestResult<ListEmailsResponses, ListEmailsErrors, ThrowOnError, "fields">;
1693
+ /**
1694
+ * Delete an email
1695
+ */
1696
+ declare const deleteEmail: <ThrowOnError extends boolean = false>(options: Options$1<DeleteEmailData, ThrowOnError>) => RequestResult<DeleteEmailResponses, DeleteEmailErrors, ThrowOnError, "fields">;
1697
+ /**
1698
+ * Get email details
1699
+ */
1700
+ declare const getEmail: <ThrowOnError extends boolean = false>(options: Options$1<GetEmailData, ThrowOnError>) => RequestResult<GetEmailResponses, GetEmailErrors, ThrowOnError, "fields">;
1701
+ /**
1702
+ * Download raw email
1703
+ *
1704
+ * Downloads the raw RFC 822 email file (.eml). Authenticates via
1705
+ * a signed download token (provided in webhook payloads) or a
1706
+ * valid session.
1707
+ *
1708
+ */
1709
+ declare const downloadRawEmail: <ThrowOnError extends boolean = false>(options: Options$1<DownloadRawEmailData, ThrowOnError>) => RequestResult<DownloadRawEmailResponses, DownloadRawEmailErrors, ThrowOnError, "fields">;
1710
+ /**
1711
+ * Download email attachments
1712
+ *
1713
+ * Downloads all attachments as a gzip-compressed tar archive.
1714
+ * Authenticates via a signed download token (provided in webhook
1715
+ * payloads) or a valid session.
1716
+ *
1717
+ */
1718
+ declare const downloadAttachments: <ThrowOnError extends boolean = false>(options: Options$1<DownloadAttachmentsData, ThrowOnError>) => RequestResult<DownloadAttachmentsResponses, DownloadAttachmentsErrors, ThrowOnError, "fields">;
1719
+ /**
1720
+ * Replay email webhooks
1721
+ *
1722
+ * Re-delivers the webhook payload for this email to all active
1723
+ * endpoints matching the email's domain. Includes rate limiting
1724
+ * to prevent stampeding.
1725
+ *
1726
+ */
1727
+ declare const replayEmailWebhooks: <ThrowOnError extends boolean = false>(options: Options$1<ReplayEmailWebhooksData, ThrowOnError>) => RequestResult<ReplayEmailWebhooksResponses, ReplayEmailWebhooksErrors, ThrowOnError, "fields">;
1728
+ /**
1729
+ * List webhook endpoints
1730
+ *
1731
+ * Returns all active (non-deleted) webhook endpoints.
1732
+ */
1733
+ declare const listEndpoints: <ThrowOnError extends boolean = false>(options?: Options$1<ListEndpointsData, ThrowOnError>) => RequestResult<ListEndpointsResponses, ListEndpointsErrors, ThrowOnError, "fields">;
1734
+ /**
1735
+ * Create a webhook endpoint
1736
+ *
1737
+ * Creates a new webhook endpoint. If a deactivated endpoint with the
1738
+ * same URL and domain exists, it is reactivated instead.
1739
+ * Subject to plan limits on the number of active endpoints.
1740
+ *
1741
+ */
1742
+ declare const createEndpoint: <ThrowOnError extends boolean = false>(options: Options$1<CreateEndpointData, ThrowOnError>) => RequestResult<CreateEndpointResponses, CreateEndpointErrors, ThrowOnError, "fields">;
1743
+ /**
1744
+ * Delete a webhook endpoint
1745
+ *
1746
+ * Soft-deletes a webhook endpoint. The endpoint will no longer
1747
+ * receive webhook deliveries.
1748
+ *
1749
+ */
1750
+ declare const deleteEndpoint: <ThrowOnError extends boolean = false>(options: Options$1<DeleteEndpointData, ThrowOnError>) => RequestResult<DeleteEndpointResponses, DeleteEndpointErrors, ThrowOnError, "fields">;
1751
+ /**
1752
+ * Update a webhook endpoint
1753
+ *
1754
+ * Updates an active webhook endpoint. If the URL is changed, the old
1755
+ * endpoint is deactivated and a new one is created (or an existing
1756
+ * deactivated endpoint with the new URL is reactivated).
1757
+ *
1758
+ */
1759
+ declare const updateEndpoint: <ThrowOnError extends boolean = false>(options: Options$1<UpdateEndpointData, ThrowOnError>) => RequestResult<UpdateEndpointResponses, UpdateEndpointErrors, ThrowOnError, "fields">;
1760
+ /**
1761
+ * Send a test webhook
1762
+ *
1763
+ * Sends a sample `email.received` event to the endpoint. The request
1764
+ * includes SSRF protection (private IP rejection and DNS pinning).
1765
+ * Rate limited to 4 per minute and 30 per hour (non-exempt).
1766
+ * Successful deliveries and verified-domain endpoints are exempt
1767
+ * from the rate limit.
1768
+ *
1769
+ */
1770
+ declare const testEndpoint: <ThrowOnError extends boolean = false>(options: Options$1<TestEndpointData, ThrowOnError>) => RequestResult<TestEndpointResponses, TestEndpointErrors, ThrowOnError, "fields">;
1771
+ /**
1772
+ * List filter rules
1773
+ *
1774
+ * Returns all whitelist and blocklist filter rules.
1775
+ */
1776
+ declare const listFilters: <ThrowOnError extends boolean = false>(options?: Options$1<ListFiltersData, ThrowOnError>) => RequestResult<ListFiltersResponses, ListFiltersErrors, ThrowOnError, "fields">;
1777
+ /**
1778
+ * Create a filter rule
1779
+ *
1780
+ * Creates a new whitelist or blocklist filter. Per-domain filters
1781
+ * require a Pro plan. Patterns are stored as lowercase.
1782
+ *
1783
+ */
1784
+ declare const createFilter: <ThrowOnError extends boolean = false>(options: Options$1<CreateFilterData, ThrowOnError>) => RequestResult<CreateFilterResponses, CreateFilterErrors, ThrowOnError, "fields">;
1785
+ /**
1786
+ * Delete a filter rule
1787
+ */
1788
+ declare const deleteFilter: <ThrowOnError extends boolean = false>(options: Options$1<DeleteFilterData, ThrowOnError>) => RequestResult<DeleteFilterResponses, DeleteFilterErrors, ThrowOnError, "fields">;
1789
+ /**
1790
+ * Update a filter rule
1791
+ *
1792
+ * Toggle a filter's enabled state.
1793
+ */
1794
+ declare const updateFilter: <ThrowOnError extends boolean = false>(options: Options$1<UpdateFilterData, ThrowOnError>) => RequestResult<UpdateFilterResponses, UpdateFilterErrors, ThrowOnError, "fields">;
1795
+ /**
1796
+ * List webhook deliveries
1797
+ *
1798
+ * Returns a paginated list of webhook delivery attempts. Each delivery
1799
+ * includes a nested `email` object with sender, recipient, and subject.
1800
+ *
1801
+ */
1802
+ declare const listDeliveries: <ThrowOnError extends boolean = false>(options?: Options$1<ListDeliveriesData, ThrowOnError>) => RequestResult<ListDeliveriesResponses, ListDeliveriesErrors, ThrowOnError, "fields">;
1803
+ /**
1804
+ * Replay a webhook delivery
1805
+ *
1806
+ * Re-sends the stored webhook payload from a previous delivery attempt.
1807
+ * If the original endpoint is still active, it is targeted. If the
1808
+ * original endpoint was deleted, the first active endpoint is used.
1809
+ * Deactivated endpoints cannot be replayed to.
1810
+ *
1811
+ */
1812
+ declare const replayDelivery: <ThrowOnError extends boolean = false>(options: Options$1<ReplayDeliveryData, ThrowOnError>) => RequestResult<ReplayDeliveryResponses, ReplayDeliveryErrors, ThrowOnError, "fields">;
1813
+
1814
+ //#endregion
1815
+ //#region src/api/index.d.ts
1816
+ declare const DEFAULT_BASE_URL = "https://www.primitive.dev/api/v1";
1817
+ interface PrimitiveApiClientOptions extends Omit<Config, "auth" | "baseUrl"> {
1818
+ apiKey?: string;
1819
+ auth?: Config["auth"];
1820
+ baseUrl?: string;
1821
+ }
1822
+ declare class PrimitiveApiClient {
1823
+ readonly client: Client;
1824
+ constructor(options?: PrimitiveApiClientOptions);
1825
+ getConfig(): Config<ClientOptions$1>;
1826
+ setConfig(config: Config): Config<ClientOptions$1>;
1827
+ }
1828
+ declare function createPrimitiveApiClient(options?: PrimitiveApiClientOptions): PrimitiveApiClient;
1829
+ declare const operations: typeof sdk_gen_d_exports;
1830
+
1831
+ //#endregion
1832
+ export { Account, AccountUpdated, AddDomainData, AddDomainError, AddDomainErrors, AddDomainInput, AddDomainResponse, AddDomainResponses, Auth, ClientOptions, CreateClientConfig, CreateEndpointData, CreateEndpointError, CreateEndpointErrors, CreateEndpointInput, CreateEndpointResponse, CreateEndpointResponses, CreateFilterData, CreateFilterError, CreateFilterErrors, CreateFilterInput, CreateFilterResponse, CreateFilterResponses, Cursor, DEFAULT_BASE_URL, DeleteDomainData, DeleteDomainError, DeleteDomainErrors, DeleteDomainResponse, DeleteDomainResponses, DeleteEmailData, DeleteEmailError, DeleteEmailErrors, DeleteEmailResponse, DeleteEmailResponses, DeleteEndpointData, DeleteEndpointError, DeleteEndpointErrors, DeleteEndpointResponse, DeleteEndpointResponses, DeleteFilterData, DeleteFilterError, DeleteFilterErrors, DeleteFilterResponse, DeleteFilterResponses, DeliverySummary, Domain, DomainVerifyResult, DownloadAttachmentsData, DownloadAttachmentsError, DownloadAttachmentsErrors, DownloadAttachmentsResponse, DownloadAttachmentsResponses, DownloadRawEmailData, DownloadRawEmailError, DownloadRawEmailErrors, DownloadRawEmailResponse, DownloadRawEmailResponses, EmailDetail, EmailSummary, Endpoint, ErrorResponse, Filter, GetAccountData, GetAccountError, GetAccountErrors, GetAccountResponse, GetAccountResponses, GetEmailData, GetEmailError, GetEmailErrors, GetEmailResponse, GetEmailResponses, GetStorageStatsData, GetStorageStatsError, GetStorageStatsErrors, GetStorageStatsResponse, GetStorageStatsResponses, GetWebhookSecretData, GetWebhookSecretError, GetWebhookSecretErrors, GetWebhookSecretResponse, GetWebhookSecretResponses, Limit, ListDeliveriesData, ListDeliveriesError, ListDeliveriesErrors, ListDeliveriesResponse, ListDeliveriesResponses, ListDomainsData, ListDomainsError, ListDomainsErrors, ListDomainsResponse, ListDomainsResponses, ListEmailsData, ListEmailsError, ListEmailsErrors, ListEmailsResponse, ListEmailsResponses, ListEndpointsData, ListEndpointsError, ListEndpointsErrors, ListEndpointsResponse, ListEndpointsResponses, ListEnvelope, ListFiltersData, ListFiltersError, ListFiltersErrors, ListFiltersResponse, ListFiltersResponses, Options$1 as Options, PaginationMeta, PrimitiveApiClient, PrimitiveApiClientOptions, Client as PrimitiveGeneratedApiClient, ClientOptions$1 as PrimitiveGeneratedApiClientOptions, Config as PrimitiveGeneratedApiConfig, Options$2 as PrimitiveGeneratedApiOptions, RequestOptions as PrimitiveGeneratedApiRequestOptions, RequestResult as PrimitiveGeneratedApiRequestResult, ReplayDeliveryData, ReplayDeliveryError, ReplayDeliveryErrors, ReplayDeliveryResponse, ReplayDeliveryResponses, ReplayEmailWebhooksData, ReplayEmailWebhooksError, ReplayEmailWebhooksErrors, ReplayEmailWebhooksResponse, ReplayEmailWebhooksResponses, ReplayResult, ResourceId, ResponseStyle, RotateWebhookSecretData, RotateWebhookSecretError, RotateWebhookSecretErrors, RotateWebhookSecretResponse, RotateWebhookSecretResponses, StorageStats, SuccessEnvelope, TestEndpointData, TestEndpointError, TestEndpointErrors, TestEndpointResponse, TestEndpointResponses, TestResult, UnverifiedDomain, UpdateAccountData, UpdateAccountError, UpdateAccountErrors, UpdateAccountInput, UpdateAccountResponse, UpdateAccountResponses, UpdateDomainData, UpdateDomainError, UpdateDomainErrors, UpdateDomainInput, UpdateDomainResponse, UpdateDomainResponses, UpdateEndpointData, UpdateEndpointError, UpdateEndpointErrors, UpdateEndpointInput, UpdateEndpointResponse, UpdateEndpointResponses, UpdateFilterData, UpdateFilterError, UpdateFilterErrors, UpdateFilterInput, UpdateFilterResponse, UpdateFilterResponses, VerifiedDomain, VerifyDomainData, VerifyDomainError, VerifyDomainErrors, VerifyDomainResponse, VerifyDomainResponses, WebhookSecret, addDomain, createEndpoint, createFilter, createPrimitiveApiClient, deleteDomain, deleteEmail, deleteEndpoint, deleteFilter, downloadAttachments, downloadRawEmail, getAccount, getEmail, getStorageStats, getWebhookSecret, listDeliveries, listDomains, listEmails, listEndpoints, listFilters, operations, replayDelivery, replayEmailWebhooks, rotateWebhookSecret, testEndpoint, updateAccount, updateDomain, updateEndpoint, updateFilter, verifyDomain };