@messagebird/sdk 0.2.1 → 0.2.2

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.d.ts CHANGED
@@ -78,6 +78,15 @@ interface ErrorDetail {
78
78
  /** What is wrong with this field. */
79
79
  message: string;
80
80
  }
81
+ /** One recovery step: an operation to call to resolve the error (ADR-0073). */
82
+ interface ErrorNextAction {
83
+ /** operationId of the follow-up operation that resolves this error. */
84
+ operation: string;
85
+ /** Short human-readable label for the recovery step. */
86
+ description?: string;
87
+ /** Permission scope the recovery operation requires, when it is scoped. */
88
+ scope?: string;
89
+ }
81
90
  /** Constructor fields shared by every API error, mapped from the wire body. */
82
91
  interface BirdAPIErrorFields {
83
92
  statusCode: number;
@@ -96,6 +105,10 @@ interface BirdAPIErrorFields {
96
105
  param?: string;
97
106
  /** Verbatim code from a downstream system (SMTP reply, payment decline). */
98
107
  vendorCode?: string;
108
+ /** Human recovery line for this error, when a recovery is known (ADR-0073). */
109
+ remediation?: string;
110
+ /** Operations that resolve this error, in the order to try them (ADR-0073). */
111
+ next?: ErrorNextAction[];
99
112
  }
100
113
  /** The server returned an error body. Base for every `type`-specific class. */
101
114
  declare class BirdAPIError extends BirdError {
@@ -107,6 +120,8 @@ declare class BirdAPIError extends BirdError {
107
120
  readonly requestId: string;
108
121
  readonly param?: string;
109
122
  readonly vendorCode?: string;
123
+ readonly remediation?: string;
124
+ readonly next?: ErrorNextAction[];
110
125
  constructor(fields: BirdAPIErrorFields);
111
126
  }
112
127
  /** 401 — authentication failed or missing. */
@@ -567,12 +582,60 @@ type EventEmailUnsubscribed = {
567
582
  timestamp: string;
568
583
  data: EventEmailUnsubscribedData;
569
584
  };
585
+ /**
586
+ * Payload of the email.scheduled event.
587
+ */
588
+ type EventEmailScheduledData = EventEmailMessageBase & {
589
+ /**
590
+ * When the message is scheduled to send.
591
+ */
592
+ scheduled_at: string;
593
+ };
594
+ /**
595
+ * Identity fields shared by the message-level email lifecycle events (scheduled, canceled), which are not tied to a single recipient.
596
+ */
597
+ type EventEmailMessageBase = {
598
+ /**
599
+ * ID of the email send.
600
+ */
601
+ email_id: EmailId;
602
+ /**
603
+ * ID of the workspace.
604
+ */
605
+ workspace_id: WorkspaceId;
606
+ /**
607
+ * Tags provided on the send request, echoed on the event so you can route and correlate without an extra lookup. Null when the send carried no tags.
608
+ *
609
+ */
610
+ tags: Array<EmailTag> | null;
611
+ /**
612
+ * The metadata object provided on the send request, echoed on the event so you can correlate events with your own records. Null when the send carried no metadata.
613
+ *
614
+ */
615
+ metadata: {
616
+ [key: string]: unknown;
617
+ } | null;
618
+ };
619
+ /**
620
+ * Bird accepted a send scheduled for a future time. Fires once per message when the schedule is created, not per recipient.
621
+ */
622
+ type EventEmailScheduled = {
623
+ /**
624
+ * Event type.
625
+ */
626
+ type: "email.scheduled";
627
+ /**
628
+ * Time the send was scheduled.
629
+ */
630
+ timestamp: string;
631
+ data: EventEmailScheduledData;
632
+ };
570
633
  /**
571
634
  * Why an email was rejected before delivery.
572
- * `recipient_suppressed` means the recipient is on the workspace suppression list, so Bird did not attempt delivery. `transmission_failed` means the message could not be transmitted for delivery. `generation_failure` means the message could not be built for delivery (a template or content issue). `policy_rejection` means the message was refused by sending policy.
635
+ * `recipient_suppressed` means the recipient is on the workspace suppression list, so Bird did not attempt delivery. `transmission_failed` means the message could not be transmitted for delivery. `generation_failure` means the message could not be built for delivery (a template or content issue). `policy_rejection` means the message was refused by sending policy. `domain_unverified` means the sending domain was not verified. `quota_exceeded` means the organization's send quota was reached. `recipient_not_allowed` means a recipient was not permitted for this send (for shared onboarding-domain sends, recipients must be verified workspace members).
573
636
  *
574
637
  */
575
- type EmailRejectionReason = "recipient_suppressed" | "transmission_failed" | "generation_failure" | "policy_rejection";
638
+ type EmailRejectionReason = "recipient_suppressed" | "transmission_failed" | "generation_failure" | "policy_rejection" | "domain_unverified" | "quota_exceeded" | "recipient_not_allowed";
576
639
  /**
577
640
  * Payload of the email.rejected event.
578
641
  */
@@ -867,6 +930,24 @@ type EventEmailClicked = {
867
930
  timestamp: string;
868
931
  data: EventEmailClickedData;
869
932
  };
933
+ /**
934
+ * Payload of the email.canceled event.
935
+ */
936
+ type EventEmailCanceledData = EventEmailMessageBase;
937
+ /**
938
+ * A scheduled send was canceled before it fired. Fires once per message, not per recipient.
939
+ */
940
+ type EventEmailCanceled = {
941
+ /**
942
+ * Event type.
943
+ */
944
+ type: "email.canceled";
945
+ /**
946
+ * Time the scheduled send was canceled.
947
+ */
948
+ timestamp: string;
949
+ data: EventEmailCanceledData;
950
+ };
870
951
  /**
871
952
  * Payload of the email.bounced event.
872
953
  */
@@ -975,6 +1056,8 @@ type WebhookEvent = ({
975
1056
  } & EventEmailAccepted) | ({
976
1057
  type: "email.bounced";
977
1058
  } & EventEmailBounced) | ({
1059
+ type: "email.canceled";
1060
+ } & EventEmailCanceled) | ({
978
1061
  type: "email.clicked";
979
1062
  } & EventEmailClicked) | ({
980
1063
  type: "email.complained";
@@ -995,6 +1078,8 @@ type WebhookEvent = ({
995
1078
  } & EventEmailReceived) | ({
996
1079
  type: "email.rejected";
997
1080
  } & EventEmailRejected) | ({
1081
+ type: "email.scheduled";
1082
+ } & EventEmailScheduled) | ({
998
1083
  type: "email.unsubscribed";
999
1084
  } & EventEmailUnsubscribed) | ({
1000
1085
  type: "email_suppression.created";
@@ -1250,10 +1335,10 @@ type EmailMessage = {
1250
1335
  */
1251
1336
  reply_to?: Array<EmailAddress> | null;
1252
1337
  /**
1253
- * Aggregate delivery status derived from recipient states. `accepted` means Bird has the send and is preparing to deliver. `processed` means Bird has processed the message and queued it for delivery to the recipient's mail server.
1338
+ * Aggregate delivery status derived from recipient states. `scheduled` means the message is queued to send at a future time and has not been dispatched yet. `accepted` means Bird has the send and is preparing to deliver. `processed` means Bird has processed the message and queued it for delivery to the recipient's mail server. `canceled` means a scheduled message was canceled before it was sent.
1254
1339
  *
1255
1340
  */
1256
- readonly status: "accepted" | "processed" | "deferred" | "delivered" | "partial_failure" | "bounced" | "complained" | "rejected";
1341
+ readonly status: "scheduled" | "accepted" | "processed" | "deferred" | "delivered" | "partial_failure" | "bounced" | "complained" | "rejected" | "canceled";
1257
1342
  /**
1258
1343
  * Number of recipients currently in the `accepted` state — Bird has the send and is preparing to deliver.
1259
1344
  */
@@ -1344,6 +1429,10 @@ type EmailMessage = {
1344
1429
  * When all recipients reached a terminal delivered state, or null if not yet fully delivered.
1345
1430
  */
1346
1431
  readonly delivered_at?: string | null;
1432
+ /**
1433
+ * When this message is scheduled to send, for a send created with a future send time. Null for an immediate send. Stays set after the scheduled send fires.
1434
+ */
1435
+ readonly scheduled_at?: string | null;
1347
1436
  };
1348
1437
  type ListEmailMessagesData = {
1349
1438
  body?: never;
@@ -1372,7 +1461,7 @@ type ListEmailMessagesData = {
1372
1461
  /**
1373
1462
  * Filter by aggregate delivery status.
1374
1463
  */
1375
- status?: "accepted" | "processed" | "deferred" | "delivered" | "partial_failure" | "bounced" | "complained" | "rejected";
1464
+ status?: "scheduled" | "accepted" | "processed" | "deferred" | "delivered" | "partial_failure" | "bounced" | "complained" | "rejected" | "canceled";
1376
1465
  /**
1377
1466
  * Filter by tag. Accepts `name` to match any send carrying that tag name, or `name:value` to match a specific tag pair (e.g. `category:welcome`). For filtering on arbitrary `metadata` fields, use the metadata path-filter parameters instead.
1378
1467
  *
@@ -2018,6 +2107,7 @@ declare const WebhookEventType: {
2018
2107
  readonly DomainVerified: "domain.verified";
2019
2108
  readonly EmailAccepted: "email.accepted";
2020
2109
  readonly EmailBounced: "email.bounced";
2110
+ readonly EmailCanceled: "email.canceled";
2021
2111
  readonly EmailClicked: "email.clicked";
2022
2112
  readonly EmailComplained: "email.complained";
2023
2113
  readonly EmailDeferred: "email.deferred";
@@ -2028,6 +2118,7 @@ declare const WebhookEventType: {
2028
2118
  readonly EmailProcessed: "email.processed";
2029
2119
  readonly EmailReceived: "email.received";
2030
2120
  readonly EmailRejected: "email.rejected";
2121
+ readonly EmailScheduled: "email.scheduled";
2031
2122
  readonly EmailSuppressionCreated: "email_suppression.created";
2032
2123
  readonly EmailUnsubscribed: "email.unsubscribed";
2033
2124
  readonly SmsAccepted: "sms.accepted";
@@ -2041,4 +2132,4 @@ declare const WebhookEventType: {
2041
2132
  /** A known webhook event type value. */
2042
2133
  type WebhookEventTypeValue = (typeof WebhookEventType)[keyof typeof WebhookEventType];
2043
2134
 
2044
- export { type APIPromise, BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, type BirdClientOptions, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, type BirdRequest, type BirdResponse, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, type BirdWebhookEvent, BirdWebhookVerificationError, type CursorPage, type EmailChannelDefaults, type EmailListQuery, type EmailMessage, type EmailSendBatchParams, type EmailSendBatchResult, type EmailSendParams, type ErrorDetail, type PaginatedPromise, type RequestOptions$1 as RequestOptions, type SafeResult, WebhookEventType, type WebhookEventTypeValue, type WebhookHeaders, type WebhookOptions, baseUrlForRegion, regionFromApiKey };
2135
+ export { type APIPromise, BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, type BirdClientOptions, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, type BirdRequest, type BirdResponse, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, type BirdWebhookEvent, BirdWebhookVerificationError, type CursorPage, type EmailChannelDefaults, type EmailListQuery, type EmailMessage, type EmailSendBatchParams, type EmailSendBatchResult, type EmailSendParams, type ErrorDetail, type ErrorNextAction, type PaginatedPromise, type RequestOptions$1 as RequestOptions, type SafeResult, WebhookEventType, type WebhookEventTypeValue, type WebhookHeaders, type WebhookOptions, baseUrlForRegion, regionFromApiKey };
package/dist/index.js CHANGED
@@ -859,6 +859,8 @@ var BirdAPIError = class extends BirdError {
859
859
  requestId;
860
860
  param;
861
861
  vendorCode;
862
+ remediation;
863
+ next;
862
864
  constructor(fields) {
863
865
  super(fields.message);
864
866
  this.name = "BirdAPIError";
@@ -870,6 +872,8 @@ var BirdAPIError = class extends BirdError {
870
872
  this.requestId = fields.requestId;
871
873
  this.param = fields.param;
872
874
  this.vendorCode = fields.vendorCode;
875
+ this.remediation = fields.remediation;
876
+ this.next = fields.next;
873
877
  Object.setPrototypeOf(this, new.target.prototype);
874
878
  }
875
879
  };
@@ -1027,7 +1031,10 @@ function mapResponseToError(status, body, headers) {
1027
1031
  docUrl: b.doc_url ?? "",
1028
1032
  requestId: b.request_id ?? headers?.get("X-Request-Id") ?? "",
1029
1033
  param: b.param,
1030
- vendorCode: b.vendor_code
1034
+ vendorCode: b.vendor_code,
1035
+ remediation: b.remediation,
1036
+ next: b.next ?? []
1037
+ // normalize a null/absent wire `next` to [] so callers can always iterate
1031
1038
  };
1032
1039
  switch (fields.type) {
1033
1040
  case "auth_error":
@@ -1577,12 +1584,12 @@ var BirdClient = class {
1577
1584
  this.#headers = {
1578
1585
  ...opts.defaultHeaders,
1579
1586
  Authorization: `Bearer ${opts.apiKey}`,
1580
- "User-Agent": `bird-sdk-js/${"0.2.1"}`,
1581
- // X-Bird-* client-identity headers (ADR-0067): the API attributes the SDK
1587
+ "User-Agent": `bird-sdk-js/${"0.2.2"}`,
1588
+ // Bird-* client-identity headers (ADR-0074): the API attributes the SDK
1582
1589
  // surface from these, not the User-Agent. Edge-safe, so no os/arch/runtime
1583
1590
  // (those need Node globals this SDK must not touch); surface + version only.
1584
- "X-Bird-Surface": "sdk-js",
1585
- "X-Bird-Version": "0.2.1"
1591
+ "Bird-Surface": "sdk-js",
1592
+ "Bird-Version": "0.2.2"
1586
1593
  };
1587
1594
  this.#client = createClient(
1588
1595
  createConfig({
@@ -1664,6 +1671,7 @@ var WebhookEventType = {
1664
1671
  DomainVerified: "domain.verified",
1665
1672
  EmailAccepted: "email.accepted",
1666
1673
  EmailBounced: "email.bounced",
1674
+ EmailCanceled: "email.canceled",
1667
1675
  EmailClicked: "email.clicked",
1668
1676
  EmailComplained: "email.complained",
1669
1677
  EmailDeferred: "email.deferred",
@@ -1674,6 +1682,7 @@ var WebhookEventType = {
1674
1682
  EmailProcessed: "email.processed",
1675
1683
  EmailReceived: "email.received",
1676
1684
  EmailRejected: "email.rejected",
1685
+ EmailScheduled: "email.scheduled",
1677
1686
  EmailSuppressionCreated: "email_suppression.created",
1678
1687
  EmailUnsubscribed: "email.unsubscribed",
1679
1688
  SmsAccepted: "sms.accepted",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/region.ts","../src/errors.ts","../src/core/http.ts","../src/core/result.ts","../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/resources/base.ts","../src/resources/email.ts","../src/resources/webhooks.ts","../src/client.ts","../src/event-types.gen.ts"],"names":["sleep","retryDelay","joinedValues","config","request","url","client","mergeHeaders"],"mappings":"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","file":"index.js","sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from \"./pathSerializer.gen\";\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\") {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value,\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from \"./types.gen\";\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n \"method\"\n> &\n Pick<Config, \"method\" | \"responseTransformer\" | \"responseValidator\"> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit[\"body\"];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set(\"Last-Event-ID\", lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: \"follow\",\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`,\n );\n\n if (!response.body) throw new Error(\"No body in SSE response\");\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = \"\";\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener(\"abort\", abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, \"\\n\"); // normalize line endings\n\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n\n for (const chunk of chunks) {\n const lines = chunk.split(\"\\n\");\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.replace(/^data:\\s*/, \"\"));\n } else if (line.startsWith(\"event:\")) {\n eventName = line.replace(/^event:\\s*/, \"\");\n } else if (line.startsWith(\"id:\")) {\n lastEventId = line.replace(/^id:\\s*/, \"\");\n } else if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, \"\"),\n 10,\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join(\"\\n\");\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener(\"abort\", abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000,\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\nexport type ObjectStyle = \"form\" | \"deepObject\";\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n case \"simple\":\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== \"deepObject\" && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues}`;\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from \"./bodySerializer.gen\";\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"./pathSerializer.gen\";\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = \"simple\";\n\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if (\"serializedBody\" in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== \"\";\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== \"\" ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: \"header\" | \"query\" | \"cookie\";\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: \"basic\" | \"bearer\";\n type: \"apiKey\" | \"http\";\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token =\n typeof callback === \"function\" ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from \"../core/auth.gen\";\nimport type { QuerySerializerOptions } from \"../core/bodySerializer.gen\";\nimport { jsonBodySerializer } from \"../core/bodySerializer.gen\";\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"../core/pathSerializer.gen\";\nimport { getUrl } from \"../core/utils.gen\";\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from \"./types.gen\";\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config[\"parseAs\"], \"auto\"> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return \"stream\";\n }\n\n const cleanContent = contentType.split(\";\")[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith(\"application/json\") ||\n cleanContent.endsWith(\"+json\")\n ) {\n return \"json\";\n }\n\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n\n if (\n [\"application/\", \"audio/\", \"image/\", \"video/\"].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return \"blob\";\n }\n\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get(\"Cookie\")?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, \"security\"> &\n Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? \"Authorization\";\n\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client[\"buildUrl\"] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === \"function\"\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>[\"headers\"] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === \"number\") {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor,\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\",\n },\n object: {\n explode: true,\n style: \"deepObject\",\n },\n});\n\nconst defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from \"../core/serverSentEvents.gen\";\nimport type { HttpMethod } from \"../core/types.gen\";\nimport { getValidRequestBody } from \"../core/utils.gen\";\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from \"./types.gen\";\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from \"./utils.gen\";\n\ntype ReqInit = Omit<RequestInit, \"body\" | \"headers\"> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends \"data\" | \"fields\" = \"fields\",\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as\n | string\n | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client[\"request\"] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: \"follow\",\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === \"auto\"\n ? getParseAs(response.headers.get(\"Content-Type\"))\n : opts.parseAs) ?? \"json\";\n\n if (\n response.status === 204 ||\n response.headers.get(\"Content-Length\") === \"0\"\n ) {\n let emptyData: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"text\":\n emptyData = await response[parseAs]();\n break;\n case \"formData\":\n emptyData = new FormData();\n break;\n case \"stream\":\n emptyData = response.body;\n break;\n case \"json\":\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === \"data\"\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"json\": {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case \"stream\":\n return opts.responseStyle === \"data\"\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === \"data\"\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(\n finalError,\n response,\n request,\n options as ResolvedRequestOptions,\n );\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as\n | BodyInit\n | null\n | undefined,\n url,\n });\n };\n\n const _buildUrl: Client[\"buildUrl\"] = (options) =>\n buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn(\"CONNECT\"),\n delete: makeMethodFn(\"DELETE\"),\n get: makeMethodFn(\"GET\"),\n getConfig,\n head: makeMethodFn(\"HEAD\"),\n interceptors,\n options: makeMethodFn(\"OPTIONS\"),\n patch: makeMethodFn(\"PATCH\"),\n post: makeMethodFn(\"POST\"),\n put: makeMethodFn(\"PUT\"),\n request,\n setConfig,\n sse: {\n connect: makeSseFn(\"CONNECT\"),\n delete: makeSseFn(\"DELETE\"),\n get: makeSseFn(\"GET\"),\n head: makeSseFn(\"HEAD\"),\n options: makeSseFn(\"OPTIONS\"),\n patch: makeSseFn(\"PATCH\"),\n post: makeSseFn(\"POST\"),\n put: makeSseFn(\"PUT\"),\n trace: makeSseFn(\"TRACE\"),\n },\n trace: makeMethodFn(\"TRACE\"),\n } as Client;\n};\n","// API keys encode their region as bk_{region}_{token}, so the client can route\n// to {region}.platform.bird.com automatically (ADR-0036).\n\nconst REGION_PATTERN = /^[a-z]{2}[0-9]+$/;\n\n/** Extracts the region code from a `bk_{region}_{token}` key, or undefined. */\nexport function regionFromApiKey(apiKey: string): string | undefined {\n const [prefix, region, token] = apiKey.split(\"_\");\n if (prefix !== \"bk\" || !region || !token) return undefined;\n return REGION_PATTERN.test(region) ? region : undefined;\n}\n\nexport function baseUrlForRegion(region: string): string {\n return `https://${region}.platform.bird.com`;\n}\n","// Error hierarchy for the Bird SDK (ADR-0042 §1).\n//\n// One class per error `type` (ADR-0016 — clients branch on the coarse `type`,\n// never on individual codes). Two transport classes cover failures with no HTTP\n// response. Scalar fields on the error objects are camelCase — these are\n// SDK-constructed objects, not wire data (the Stripe/OpenAI-node convention:\n// snake data, camel code). Nested wire payloads (validation `details`) pass\n// through as-is.\n//\n// `mapResponseToError` is the single place a non-2xx response becomes a thrown\n// error; the request core calls it once a response is terminal.\n\n/** Root of the hierarchy. Catch this to catch anything the SDK throws. */\nexport class BirdError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BirdError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Network-level failure with no HTTP response (DNS, refused, socket hangup). */\nexport class BirdConnectionError extends BirdError {\n constructor(message: string) {\n super(message);\n this.name = \"BirdConnectionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** A single attempt exceeded its timeout. Retryable. */\nexport class BirdTimeoutError extends BirdError {\n readonly timeoutMs: number;\n constructor(message: string, timeoutMs: number) {\n super(message);\n this.name = \"BirdTimeoutError\";\n this.timeoutMs = timeoutMs;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** A webhook payload failed signature verification (bad signature, stale timestamp, malformed headers). */\nexport class BirdWebhookVerificationError extends BirdError {\n constructor(message: string) {\n super(message);\n this.name = \"BirdWebhookVerificationError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** One per-field validation failure (the `details` array on a 422). */\nexport interface ErrorDetail {\n /** Dotted field path, e.g. `to[0].email`, `subject`, `.`. */\n param: string;\n /** What is wrong with this field. */\n message: string;\n}\n\n/** Constructor fields shared by every API error, mapped from the wire body. */\nexport interface BirdAPIErrorFields {\n statusCode: number;\n /** Opaque, stable error code (`E#####`). */\n code: string;\n /** Coarse category — the value callers branch on. */\n type: string;\n /** Human-readable slug for logs. Paired with `code`, never replaces it. */\n errorName: string;\n message: string;\n /** Stable link to the docs page for this code. */\n docUrl: string;\n /** Correlation ID — also the `X-Request-Id` response header. */\n requestId: string;\n /** Offending field, when applicable. */\n param?: string;\n /** Verbatim code from a downstream system (SMTP reply, payment decline). */\n vendorCode?: string;\n}\n\n/** The server returned an error body. Base for every `type`-specific class. */\nexport class BirdAPIError extends BirdError {\n readonly statusCode: number;\n readonly code: string;\n readonly type: string;\n readonly errorName: string;\n readonly docUrl: string;\n readonly requestId: string;\n readonly param?: string;\n readonly vendorCode?: string;\n\n constructor(fields: BirdAPIErrorFields) {\n super(fields.message);\n this.name = \"BirdAPIError\";\n this.statusCode = fields.statusCode;\n this.code = fields.code;\n this.type = fields.type;\n this.errorName = fields.errorName;\n this.docUrl = fields.docUrl;\n this.requestId = fields.requestId;\n this.param = fields.param;\n this.vendorCode = fields.vendorCode;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// One class per `type` enum value. The plain ones add nothing beyond the base;\n// they exist so callers can `instanceof BirdNotFoundError` rather than compare\n// strings, and so the special-field classes have peers.\n\n/** 401 — authentication failed or missing. */\nexport class BirdAuthError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdAuthError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 403 — authenticated but not allowed. */\nexport class BirdPermissionError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPermissionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 404 — resource does not exist. */\nexport class BirdNotFoundError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdNotFoundError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 409 — semantic conflict (e.g. a unique value already taken). */\nexport class BirdConflictError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdConflictError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 400 — malformed request. */\nexport class BirdBadRequestError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdBadRequestError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 402 — billing/balance problem. */\nexport class BirdBillingError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdBillingError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 412/428 — a precondition was not met. */\nexport class BirdPreconditionError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPreconditionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 413 — request body too large. */\nexport class BirdPayloadTooLargeError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPayloadTooLargeError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 500 — unexpected server error. */\nexport class BirdInternalError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdInternalError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 501 — endpoint not implemented. */\nexport class BirdNotImplementedError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdNotImplementedError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 421 — request reached the wrong region (ADR-0036). */\nexport class BirdMisdirectedError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdMisdirectedError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 503 — service temporarily unavailable. */\nexport class BirdServiceUnavailableError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdServiceUnavailableError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 422 — field validation failed; `details` carries the per-field errors. */\nexport class BirdValidationError extends BirdAPIError {\n readonly details: ErrorDetail[];\n constructor(fields: BirdAPIErrorFields & { details: ErrorDetail[] }) {\n super(fields);\n this.name = \"BirdValidationError\";\n this.details = fields.details;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 429 — rate limited; `retryAfter` is the server-advised wait in seconds. */\nexport class BirdRateLimitError extends BirdAPIError {\n readonly retryAfter?: number;\n constructor(fields: BirdAPIErrorFields & { retryAfter?: number }) {\n super(fields);\n this.name = \"BirdRateLimitError\";\n this.retryAfter = fields.retryAfter;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Shape of the wire error body (`ErrorBody`), snake_case as sent. */\ninterface WireErrorBody {\n type?: string;\n code?: string;\n name?: string;\n message?: string;\n doc_url?: string;\n request_id?: string;\n param?: string;\n vendor_code?: string;\n details?: ErrorDetail[];\n}\n\n/**\n * Parse `Retry-After` (delta-seconds or HTTP-date) into whole seconds. A\n * negative or unparseable value yields `undefined` — a negative wait is\n * meaningless, so both the user-facing `retryAfter` and the retry loop treat it\n * as \"no server advice\". The single Retry-After parser; `retryDelay` builds on it.\n */\nexport function parseRetryAfter(headers?: Headers): number | undefined {\n const header = headers?.get(\"Retry-After\");\n if (!header) return undefined;\n const seconds = Number(header);\n const value = Number.isFinite(seconds)\n ? seconds\n : (Date.parse(header) - Date.now()) / 1000;\n return Number.isFinite(value) && value >= 0 ? Math.round(value) : undefined;\n}\n\n// Status → type fallback for non-JSON error bodies (proxy 502s, etc.) where the\n// body carries no `type`.\nfunction inferType(status: number): string {\n switch (status) {\n case 400:\n return \"bad_request_error\";\n case 401:\n return \"auth_error\";\n case 402:\n return \"billing_error\";\n case 403:\n return \"permission_error\";\n case 404:\n return \"not_found_error\";\n case 409:\n return \"conflict_error\";\n case 412:\n case 428:\n return \"precondition_error\";\n case 413:\n return \"payload_too_large_error\";\n case 421:\n return \"misdirected_error\";\n case 422:\n return \"validation_error\";\n case 429:\n return \"rate_limit_error\";\n case 501:\n return \"not_implemented_error\";\n case 503:\n return \"service_unavailable_error\";\n default:\n return status >= 500 ? \"internal_error\" : \"bad_request_error\";\n }\n}\n\n/**\n * Map a non-2xx response to the right `BirdAPIError` subclass. The single place\n * the SDK turns a wire error into a thrown error.\n */\nexport function mapResponseToError(\n status: number,\n body: unknown,\n headers?: Headers,\n): BirdAPIError {\n // The API wraps errors as `{ \"error\": { … } }`; unwrap it (tolerating a bare\n // top-level body and a non-object body) so the wire type/code/message/request_id\n // are read, not defaulted. Without this the type was only ever inferred from the\n // HTTP status and code/request_id were dropped.\n const raw = (body ?? {}) as Record<string, unknown>;\n const b =\n (raw.error as WireErrorBody | undefined) ?? (raw as WireErrorBody) ?? {};\n const fields: BirdAPIErrorFields = {\n statusCode: status,\n code: b.code ?? \"unknown\",\n type: b.type ?? inferType(status),\n errorName: b.name ?? \"\",\n message: b.message ?? `Request failed with status ${status}`,\n docUrl: b.doc_url ?? \"\",\n requestId: b.request_id ?? headers?.get(\"X-Request-Id\") ?? \"\",\n param: b.param,\n vendorCode: b.vendor_code,\n };\n\n switch (fields.type) {\n case \"auth_error\":\n return new BirdAuthError(fields);\n case \"permission_error\":\n return new BirdPermissionError(fields);\n case \"not_found_error\":\n return new BirdNotFoundError(fields);\n case \"conflict_error\":\n return new BirdConflictError(fields);\n case \"bad_request_error\":\n return new BirdBadRequestError(fields);\n case \"billing_error\":\n return new BirdBillingError(fields);\n case \"precondition_error\":\n return new BirdPreconditionError(fields);\n case \"payload_too_large_error\":\n return new BirdPayloadTooLargeError(fields);\n case \"internal_error\":\n return new BirdInternalError(fields);\n case \"not_implemented_error\":\n return new BirdNotImplementedError(fields);\n case \"misdirected_error\":\n return new BirdMisdirectedError(fields);\n case \"service_unavailable_error\":\n return new BirdServiceUnavailableError(fields);\n case \"rate_limit_error\":\n return new BirdRateLimitError({\n ...fields,\n retryAfter: parseRetryAfter(headers),\n });\n case \"validation_error\":\n return new BirdValidationError({ ...fields, details: b.details ?? [] });\n default:\n return new BirdAPIError(fields);\n }\n}\n","// The request lifecycle (ADR-0042 §2 + the lifecycle spec).\n//\n// BirdHTTPClient owns the attempt loop and wraps a generated hey-api SDK call\n// (passed as a thunk) so resources keep the generated call-site typing while\n// the loop owns: idempotency-key generate-once-and-reuse, per-attempt timeout,\n// AbortSignal, backoff with full jitter + Retry-After, and turning a terminal\n// response into a thrown BirdError via mapResponseToError.\n//\n// The hey-api client is configured WITHOUT throwOnError: a non-2xx returns\n// `{ error, response }` so this loop can inspect status and decide\n// retry-vs-throw. Network failures reject and are caught here.\n\nimport {\n BirdConnectionError,\n BirdError,\n BirdTimeoutError,\n mapResponseToError,\n parseRetryAfter,\n} from \"../errors.js\";\n\n/** Transport metadata exposed to callers via `.withResponse()`. */\nexport interface BirdResponse {\n status: number;\n headers: Headers;\n /** Correlation ID — the `X-Request-Id` header. */\n requestId: string;\n}\n\n/** Per-request lifecycle inputs, supplied by the resource method. */\nexport interface RequestLifecycleOptions {\n /** HTTP method — decides idempotency-key generation and retry safety. */\n method: string;\n /** Caller-supplied idempotency key; auto-generated for mutations if absent. */\n idempotencyKey?: string;\n /** Caller cancellation. */\n signal?: AbortSignal;\n /** Per-attempt timeout (ms). Overrides the client default. */\n timeout?: number;\n /** Max retry attempts. Overrides the client default. */\n maxRetries?: number;\n}\n\n/** The shape a generated hey-api SDK call resolves to. */\nexport interface FetchOutcome<T> {\n data?: T;\n error?: unknown;\n /** Present whenever the HTTP round-trip completed; absent only on a rejected call. */\n response?: Response;\n}\n\n/** Context handed to the call thunk on each attempt. */\nexport interface AttemptContext {\n signal: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport interface CoreDefaults {\n /** Per-attempt timeout (ms). */\n timeout: number;\n /** Max retry attempts. */\n maxRetries: number;\n}\n\nconst BACKOFF_BASE_MS = 500;\nconst BACKOFF_CAP_MS = 8_000;\nconst RETRY_AFTER_CAP_MS = 60_000;\n\nexport class BirdHTTPClient {\n constructor(private readonly defaults: CoreDefaults) {}\n\n /**\n * Run a generated hey-api SDK call through the request lifecycle.\n *\n * @param call Invokes the SDK function; receives the per-attempt signal and\n * the idempotency key to set as a header.\n * @returns the parsed body plus transport metadata.\n * @throws a `BirdError` subclass on terminal failure; the native\n * `AbortError` if the caller's signal aborts.\n */\n async request<T>(\n call: (ctx: AttemptContext) => Promise<FetchOutcome<T>>,\n options: RequestLifecycleOptions,\n ): Promise<{ data: T; response: BirdResponse }> {\n const maxRetries = options.maxRetries ?? this.defaults.maxRetries;\n const timeout = options.timeout ?? this.defaults.timeout;\n // Generated once, reused on every attempt — regenerating would double-execute.\n const idempotencyKey =\n options.idempotencyKey ??\n (isMutation(options.method) ? crypto.randomUUID() : undefined);\n\n for (let attempt = 0; ; attempt++) {\n throwIfAborted(options.signal);\n\n // Retry a transient failure with backoff if attempts remain; otherwise\n // throw the terminal error. Caller `continue`s the loop after this returns.\n const retryOrThrow = async (terminal: () => BirdError): Promise<void> => {\n if (attempt >= maxRetries) throw terminal();\n await sleep(backoffDelay(attempt), options.signal);\n };\n\n const timeoutSignal = AbortSignal.timeout(timeout);\n const signal = options.signal\n ? AbortSignal.any([options.signal, timeoutSignal])\n : timeoutSignal;\n\n let outcome: FetchOutcome<T> | undefined;\n try {\n outcome = await call({ signal, idempotencyKey });\n } catch (err) {\n // The fetch rejected: caller abort, per-attempt timeout, or network.\n throwIfAborted(options.signal); // caller abort wins, terminal\n await retryOrThrow(() =>\n timeoutSignal.aborted\n ? new BirdTimeoutError(`Request timed out after ${timeout}ms`, timeout)\n : new BirdConnectionError(errorMessage(err)),\n );\n continue;\n }\n\n const res = outcome.response;\n if (!res) {\n // A resolved call with no response is a transport failure (the client\n // normally rejects instead) — treat it like a network error.\n await retryOrThrow(() => new BirdConnectionError(\"No response received from the server\"));\n continue;\n }\n if (res.ok) {\n return { data: outcome.data as T, response: toBirdResponse(res) };\n }\n if (!isRetryableStatus(res.status) || attempt >= maxRetries) {\n throw mapResponseToError(res.status, outcome.error, res.headers);\n }\n await sleep(retryDelay(attempt, res.headers), options.signal);\n }\n }\n}\n\nfunction isMutation(method: string): boolean {\n return [\"POST\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase());\n}\n\n// Retry network failures, per-attempt timeouts, and transient statuses. 409 is a\n// semantic conflict a retry can't resolve; 501 is permanent; other 4xx are\n// deterministic.\nfunction isRetryableStatus(status: number): boolean {\n return [408, 429, 500, 502, 503, 504].includes(status);\n}\n\n/** Full-jitter exponential backoff: random in [0, min(cap, base·2^attempt)). */\nfunction backoffDelay(attempt: number): number {\n const ceiling = Math.min(BACKOFF_CAP_MS, BACKOFF_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n}\n\n/** Honor Retry-After on a retryable response, else fall back to backoff. */\nfunction retryDelay(attempt: number, headers: Headers): number {\n const seconds = parseRetryAfter(headers);\n return seconds === undefined ? backoffDelay(attempt) : Math.min(seconds * 1000, RETRY_AFTER_CAP_MS);\n}\n\nfunction toBirdResponse(res: Response): BirdResponse {\n return {\n status: res.status,\n headers: res.headers,\n requestId: res.headers.get(\"X-Request-Id\") ?? \"\",\n };\n}\n\n// The abort contract: surface the caller's `signal.reason` so a caller-initiated\n// abort stays the native AbortError, falling back to a synthetic one.\nfunction abortReason(signal: AbortSignal | undefined): unknown {\n return signal?.reason ?? new DOMException(\"Aborted\", \"AbortError\");\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw abortReason(signal);\n}\n\n/** Sleep, rejecting immediately if the caller's signal aborts. */\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortReason(signal));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortReason(signal));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","// What resource methods return: a Promise you can await for the value, plus\n// `.withResponse()` for transport metadata and `.safe()` for a non-throwing\n// `{ data, error, response }` result (ADR-0042 §1 — errors throw by default,\n// `.safe()` is the opt-in result form). Pagination follows R1: awaiting a list yields the\n// first page; `for await` walks every item across pages, fetching lazily.\n\nimport type { BirdResponse } from \"./http.js\";\nimport { BirdError } from \"../errors.js\";\n\n/** Per-request overrides accepted by every resource method. */\nexport interface RequestOptions {\n /** Idempotency key; auto-generated for mutations if omitted, reused on retry. */\n idempotencyKey?: string;\n /** Caller cancellation. Rejects with the native `AbortError`. */\n signal?: AbortSignal;\n /** Per-attempt timeout (ms). Overrides the client default. */\n timeout?: number;\n /** Max retry attempts. Overrides the client default. */\n maxRetries?: number;\n /** Extra headers for this request. SDK-internal headers win on conflict. */\n headers?: Record<string, string>;\n}\n\n/**\n * The result of `.safe()` — the value or the error, never thrown. On success\n * `data` and the `response` envelope are present and `error` is `null`. On\n * failure `error` is a `BirdError` you can `instanceof`-narrow, and `data`/\n * `response` are `null` — the metadata you need (status, request id) is on the\n * error itself. A caller-initiated abort is not a Bird failure and still throws\n * (the native `AbortError`, ADR-0042 §1).\n */\nexport type SafeResult<T> =\n | { data: T; error: null; response: BirdResponse }\n | { data: null; error: BirdError; response: null };\n\n/** Single-result return: `await` for the value, `.withResponse()` for metadata. */\nexport interface APIPromise<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: BirdResponse }>;\n /** Resolve to `{ data, error }` instead of throwing. */\n safe(): Promise<SafeResult<T>>;\n}\n\n// Build the base `await`→data promise shared by both wrappers and wire its\n// `.withResponse()`/`.safe()` views onto `inner`.\n//\n// `.withResponse()` and `.safe()` consume `inner` directly, so when a caller\n// uses one of those (or fires-and-forgets) this base promise is never awaited.\n// Mark its rejection handled — the chosen view still surfaces the error — so a\n// failed call isn't flagged as an unhandled rejection.\nfunction basePromise<T, P extends APIPromise<T>>(\n inner: Promise<{ data: T; response: BirdResponse }>,\n): P {\n const promise = inner.then((r) => r.data) as P;\n void promise.catch(() => {});\n promise.withResponse = () => inner;\n promise.safe = () => toSafe(inner);\n return promise;\n}\n\nexport function apiPromise<T>(\n inner: Promise<{ data: T; response: BirdResponse }>,\n): APIPromise<T> {\n return basePromise(inner);\n}\n\n/** One cursor-paginated page — the wire envelope shape (snake), verbatim. */\nexport interface CursorPage<T> {\n data: T[];\n /** Pass back as `starting_after` to advance. Null at the end. */\n next_cursor: string | null;\n /** Pass back as `ending_before` to step back. Null at the start. */\n prev_cursor: string | null;\n /** Refresh anchor; pass as `ending_before` later for items since this page. */\n refresh_cursor: string | null;\n /** Total across all pages — only when `include_total=true` was passed. */\n total?: number | null;\n}\n\n/**\n * List return (R1): `await` resolves the first page; `for await` walks every\n * item across all pages, fetching subsequent pages lazily.\n */\nexport interface PaginatedPromise<T> extends Promise<CursorPage<T>>, AsyncIterable<T> {\n withResponse(): Promise<{ data: CursorPage<T>; response: BirdResponse }>;\n /** Resolve the first page as `{ data, error }` instead of throwing. */\n safe(): Promise<SafeResult<CursorPage<T>>>;\n}\n\nexport function paginate<T>(\n fetchPage: (cursor?: string) => Promise<{ data: CursorPage<T>; response: BirdResponse }>,\n): PaginatedPromise<T> {\n const first = fetchPage();\n const promise = basePromise<CursorPage<T>, PaginatedPromise<T>>(first);\n promise[Symbol.asyncIterator] = async function* () {\n let result = await first;\n for (;;) {\n for (const item of result.data.data) yield item;\n if (result.data.next_cursor == null) return;\n result = await fetchPage(result.data.next_cursor);\n }\n };\n return promise;\n}\n\n// `.safe()` turns Bird failures (the BirdError hierarchy) into values. Anything\n// else — a caller-initiated AbortError, or an unexpected non-Bird throw — keeps\n// propagating, so `error` stays soundly typed as `BirdError`.\nfunction toSafe<V>(\n inner: Promise<{ data: V; response: BirdResponse }>,\n): Promise<SafeResult<V>> {\n return inner.then(\n ({ data, response }): SafeResult<V> => ({ data, error: null, response }),\n (error): SafeResult<V> => {\n if (error instanceof BirdError) return { data: null, error, response: null };\n throw error;\n },\n );\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type ClientOptions,\n type Config,\n createClient,\n createConfig,\n} from \"./client\";\nimport type { ClientOptions as ClientOptions2 } from \"./types.gen\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (\n override?: Config<ClientOptions & T>,\n) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>());\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from \"./client\";\nimport { client } from \"./client.gen\";\nimport type {\n CreateEmailMessageBatchData,\n CreateEmailMessageBatchErrors,\n CreateEmailMessageBatchResponses,\n CreateEmailMessageData,\n CreateEmailMessageErrors,\n CreateEmailMessageResponses,\n GetEmailMessageData,\n GetEmailMessageErrors,\n GetEmailMessageResponses,\n ListEmailMessagesData,\n ListEmailMessagesErrors,\n ListEmailMessagesResponses,\n} from \"./types.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n TResponse = unknown,\n> = Options2<TData, ThrowOnError, TResponse> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * List messages\n *\n * Returns a paginated list of email messages in the workspace, newest first.\n */\nexport const listEmailMessages = <ThrowOnError extends boolean = false>(\n options?: Options<ListEmailMessagesData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<\n ListEmailMessagesResponses,\n ListEmailMessagesErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages\",\n ...options,\n });\n\n/**\n * Send a message\n *\n * Sends an email to the recipients you list explicitly in `to`/`cc`/`bcc`. Use this for transactional sends (receipts, password resets, alerts) and for marketing sends where you have the recipient addresses on hand. For sends targeting a stored audience by reference, use POST /v1/email/broadcasts. The `category` field controls suppression policy independently — set it to `marketing` when sending marketing content from this endpoint. The 202 response is returned only after the message is safely accepted for delivery. If the sender domain is not verified, or all recipients are suppressed, the request fails immediately with a 422 — it is never accepted and then silently dropped. Other field-level validation failures also return 422.\n * Recipient addresses on reserved testing domains are rejected with a 422 RecipientDomainNotAllowed error. This covers @example.com, @example.net, @example.org, @example.edu, @test.com, and any address under the reserved .test, .example, .invalid, or .localhost top-level domains. These placeholder domains cannot receive mail, and the resulting bounces would hurt your sender reputation — use a real recipient address instead.\n * During onboarding, you can send without verifying a domain: use any sender address on the shared onboarding domain (for example onboarding@messagebird.dev). Such sends skip the sender-domain verification check, can only go to verified members of your workspace (other recipients are rejected with a 422 OnboardingRecipientNotAllowed error), and are subject to a daily recipient limit per organization (429 OnboardingSendLimitExceeded once exhausted).\n *\n */\nexport const createEmailMessage = <ThrowOnError extends boolean = false>(\n options: Options<CreateEmailMessageData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateEmailMessageResponses,\n CreateEmailMessageErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Send a batch of messages\n *\n * Accepts up to 100 independent email messages and queues them for delivery. All items are validated before any are queued — if one fails validation, the entire batch is rejected. Field-level validation failures and business-rule failures (such as domain_not_verified or all_recipients_suppressed) both return 422. Attachments are allowed per message. Each message must stay within the 20 MB estimated generated message-size cap. The serialized JSON request body for the batch has a hard 20 MB cap.\n *\n */\nexport const createEmailMessageBatch = <ThrowOnError extends boolean = false>(\n options: Options<CreateEmailMessageBatchData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateEmailMessageBatchResponses,\n CreateEmailMessageBatchErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/batches\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Get a message\n *\n * Returns a single email message object with aggregate delivery status and counts. Message body (html, text) is not returned — it is not stored after delivery.\n *\n */\nexport const getEmailMessage = <ThrowOnError extends boolean = false>(\n options: Options<GetEmailMessageData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetEmailMessageResponses,\n GetEmailMessageErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages/{message_id}\",\n ...options,\n });\n","// Base for resource wrappers. Each public method builds a typed hey-api SDK\n// call and runs it through the lifecycle core, returning an APIPromise (single)\n// or PaginatedPromise (list). Resources stay thin over `call`/`paginated` so the\n// per-operation logic could later be extracted to standalone tree-shakeable\n// functions without a rewrite.\n\nimport type { Client } from \"../generated/client/index.js\";\nimport type { AttemptContext, BirdHTTPClient, FetchOutcome, RequestLifecycleOptions } from \"../core/http.js\";\nimport {\n apiPromise,\n paginate,\n type APIPromise,\n type CursorPage,\n type PaginatedPromise,\n type RequestOptions,\n} from \"../core/result.js\";\n\n/** Resolved per-attempt inputs handed to the hey-api SDK call. */\nexport interface CallContext {\n signal: AbortSignal;\n /** Merged headers: caller `headers` plus the resolved `Idempotency-Key`. */\n headers: Record<string, string>;\n}\n\nexport abstract class Resource {\n constructor(\n protected readonly core: BirdHTTPClient,\n protected readonly client: Client,\n ) {}\n\n /** Run a single typed call through the lifecycle. */\n protected call<T>(\n method: string,\n options: RequestOptions | undefined,\n invoke: (ctx: CallContext) => Promise<FetchOutcome<T>>,\n ): APIPromise<T> {\n return apiPromise(\n this.core.request<T>((ctx) => invoke(callContext(ctx, options)), lifecycle(method, options)),\n );\n }\n\n /** Run a cursor-paginated list through the lifecycle (each page retried independently). */\n protected paginated<T>(\n method: string,\n options: RequestOptions | undefined,\n invoke: (ctx: CallContext, cursor: string | undefined) => Promise<FetchOutcome<CursorPage<T>>>,\n ): PaginatedPromise<T> {\n return paginate<T>((cursor) =>\n this.core.request<CursorPage<T>>(\n (ctx) => invoke(callContext(ctx, options), cursor),\n lifecycle(method, options),\n ),\n );\n }\n}\n\nfunction callContext(ctx: AttemptContext, options: RequestOptions | undefined): CallContext {\n return { signal: ctx.signal, headers: mergeHeaders(ctx.idempotencyKey, options?.headers) };\n}\n\nfunction lifecycle(method: string, options: RequestOptions | undefined): RequestLifecycleOptions {\n return {\n method,\n idempotencyKey: options?.idempotencyKey,\n signal: options?.signal,\n timeout: options?.timeout,\n maxRetries: options?.maxRetries,\n };\n}\n\nfunction mergeHeaders(\n idempotencyKey: string | undefined,\n extra: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...extra,\n ...(idempotencyKey ? { \"Idempotency-Key\": idempotencyKey } : {}),\n };\n}\n","// `bird.email` — the email channel (ADR-0042 §8: channel, singular, `send`).\n// The first concrete resource; the template every other channel/collection copies.\n// Calls the generated hey-api SDK functions through the lifecycle core.\n\nimport {\n createEmailMessage,\n createEmailMessageBatch,\n getEmailMessage,\n listEmailMessages,\n} from \"../generated/sdk.gen.js\";\nimport type {\n EmailMessage,\n EmailMessageBatchRequest,\n EmailMessageBatchResponse,\n EmailMessageSendRequest,\n ListEmailMessagesData,\n} from \"../generated/types.gen.js\";\nimport { Resource } from \"./base.js\";\nimport type {\n APIPromise,\n PaginatedPromise,\n RequestOptions,\n} from \"../core/result.js\";\n\n/** An email message with aggregate delivery status. */\nexport type { EmailMessage };\n/** Body for `bird.email.send`. */\nexport type EmailSendParams = EmailMessageSendRequest;\n/** Body for `bird.email.sendBatch` — an array of send params, validated as a unit. */\nexport type EmailSendBatchParams = EmailMessageBatchRequest;\n/** Result of `bird.email.sendBatch` — one accepted item per submitted message. */\nexport type EmailSendBatchResult = EmailMessageBatchResponse;\n/** Filters and cursor params for `bird.email.list`. */\nexport type EmailListQuery = NonNullable<ListEmailMessagesData[\"query\"]>;\n\n/**\n * Channel-level defaults set at client construction. Field names mirror the\n * send params (so they read as pre-filled fields). Any field set here becomes\n * optional in `send` and is filled when omitted (per-send value wins).\n */\nexport type EmailChannelDefaults = Partial<\n Pick<\n EmailSendParams,\n | \"from\"\n | \"reply_to\"\n | \"category\"\n | \"track_opens\"\n | \"track_clicks\"\n | \"headers\"\n | \"tags\"\n | \"metadata\"\n >\n>;\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n/** Keys that carry a configured default — made optional in `send`. */\ntype DefaultedKeys<D> = D extends object\n ? Extract<keyof D, keyof EmailSendParams>\n : never;\n/** `send` params with defaulted fields made optional. */\nexport type EmailSend<D> = PartialBy<EmailSendParams, DefaultedKeys<D>>;\n\nexport class EmailResource<\n D extends EmailChannelDefaults | undefined = undefined,\n> extends Resource {\n #defaults?: D;\n\n constructor(\n core: ConstructorParameters<typeof Resource>[0],\n client: ConstructorParameters<typeof Resource>[1],\n defaults?: D,\n ) {\n super(core, client);\n this.#defaults = defaults;\n }\n\n /**\n * Send an email message. Resolves once the message is accepted for delivery\n * (the API's 202). Throws on failure — a 422 (unverified sender, all\n * recipients suppressed, validation) is a `BirdValidationError`. Fields set as\n * channel defaults may be omitted (per-send value wins).\n *\n * @example Send a message\n * const msg = await bird.email.send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * });\n * console.log(msg.id, msg.status); // \"em_…\", \"accepted\"\n *\n * @example A richer send — cc/bcc, reply-to, tags, metadata, click-tracking off, and an idempotency key (safe to retry; the server dedupes)\n * await bird.email.send(\n * {\n * from: \"hello@acme.com\",\n * to: [\"a@example.com\", \"b@example.com\"],\n * cc: [\"manager@example.com\"],\n * reply_to: [\"support@acme.com\"],\n * subject: \"Your March invoice\",\n * html: \"<p>Attached.</p>\",\n * tags: [{ name: \"category\", value: \"billing\" }],\n * metadata: { invoice_id: \"inv_123\" },\n * track_clicks: false,\n * },\n * { idempotencyKey: \"invoice-march/cust_1\" },\n * );\n *\n * @example Branch on the typed error hierarchy\n * import { BirdRateLimitError, BirdValidationError, BirdAPIError } from \"@messagebird/sdk\";\n *\n * try {\n * await bird.email.send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * });\n * } catch (err) {\n * if (err instanceof BirdRateLimitError) console.log(`rate limited — retry in ${err.retryAfter}s`);\n * else if (err instanceof BirdValidationError) console.error(err.details);\n * else if (err instanceof BirdAPIError) console.error(err.code, err.requestId);\n * else throw err;\n * }\n *\n * @example Errors as values with `.safe()`\n * const { data, error } = await bird.email\n * .send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * })\n * .safe();\n * if (error) console.error(error.message);\n * else console.log(data.id);\n */\n send(\n params: EmailSend<D>,\n options?: RequestOptions,\n ): APIPromise<EmailMessage> {\n // EmailSend<D> guarantees the caller supplied every field not covered by a\n // default, so the merge is a complete EmailSendParams. TS can't reprove that\n // across a spread, so the assertion is necessary here (and only here).\n const body = { ...this.#defaults, ...params } as EmailSendParams;\n return this.call<EmailMessage>(\"POST\", options, ({ signal, headers }) =>\n createEmailMessage({ client: this.client, body, headers, signal }),\n );\n }\n\n /**\n * Send a batch of up to 100 independent email messages in one request. The\n * batch is validated as a unit — if any item fails validation (unverified\n * sender, all recipients suppressed, field-level errors) the whole batch is\n * rejected with a `BirdValidationError` and nothing is queued. Resolves with\n * one accepted item per submitted message, in submission order, once the batch\n * is accepted (the API's 202). Channel defaults are applied per item.\n *\n * @example Send a batch of messages\n * const batch = await bird.email.sendBatch([\n * {\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"alice@example.com\"],\n * subject: \"Your receipt\",\n * html: \"<p>Thanks, Alice.</p>\",\n * },\n * {\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"bob@example.com\"],\n * subject: \"Your receipt\",\n * html: \"<p>Thanks, Bob.</p>\",\n * },\n * ]);\n * for (const item of batch.data) console.log(item.id, item.status);\n */\n sendBatch(\n params: EmailSendBatchParams,\n options?: RequestOptions,\n ): APIPromise<EmailSendBatchResult> {\n const body = params.map((item) => ({\n ...this.#defaults,\n ...item,\n })) as EmailSendBatchParams;\n return this.call<EmailSendBatchResult>(\n \"POST\",\n options,\n ({ signal, headers }) =>\n createEmailMessageBatch({ client: this.client, body, headers, signal }),\n );\n }\n\n /**\n * Fetch a message with aggregate delivery status.\n *\n * @example\n * const msg = await bird.email.get(\"em_abc123\");\n * msg.status; // \"accepted\" | \"processed\" | \"delivered\" | \"bounced\" | …\n * msg.delivered_count;\n * msg.bounced_count;\n */\n get(messageId: string, options?: RequestOptions): APIPromise<EmailMessage> {\n return this.call<EmailMessage>(\"GET\", options, ({ signal, headers }) =>\n getEmailMessage({\n client: this.client,\n path: { message_id: messageId },\n headers,\n signal,\n }),\n );\n }\n\n /**\n * List messages, newest first. `await` resolves the first page; `for await`\n * walks every message across all pages.\n *\n * @example Iterate every message, or take one page\n * for await (const message of bird.email.list({ status: \"bounced\" })) {\n * console.log(message.id);\n * }\n * const page = await bird.email.list({ limit: 50 }); // page.data, page.next_cursor\n */\n list(\n query?: EmailListQuery,\n options?: RequestOptions,\n ): PaginatedPromise<EmailMessage> {\n return this.paginated<EmailMessage>(\n \"GET\",\n options,\n ({ signal, headers }, cursor) =>\n listEmailMessages({\n client: this.client,\n query: { ...query, starting_after: cursor ?? query?.starting_after },\n headers,\n signal,\n }),\n );\n }\n}\n","// `bird.webhooks` — verifies a delivered payload's Standard Webhooks signature\n// and returns it as a typed, discriminated event union. Pure crypto: it never\n// touches the transport layer, so it carries no client/core dependency.\n\nimport { Webhook } from \"standardwebhooks\";\nimport type { WebhookEvent } from \"../generated/types.gen.js\";\nimport { BirdWebhookVerificationError } from \"../errors.js\";\n\n/** A verified webhook event — discriminated on `type` (ADR-0028 wire contract). */\nexport type BirdWebhookEvent = WebhookEvent;\n\n/** Inbound request headers, as a `Headers` object or a plain record. */\nexport type WebhookHeaders = Headers | Record<string, string>;\n\n/** Client-level webhooks config (`new BirdClient({ webhooks: { secret } })`). */\nexport interface WebhookOptions {\n /** Signing secret used by `unwrap`; a per-call `secret` overrides it. */\n secret?: string;\n}\n\nexport class WebhooksResource {\n readonly #secret?: string;\n\n constructor(config?: WebhookOptions) {\n this.#secret = config?.secret;\n }\n\n /**\n * Verify a webhook delivery and return the typed event.\n *\n * **Pass the raw request body**, exactly as received — do NOT parse it first.\n * The Standard Webhooks signature is computed over the raw bytes, so parsing\n * and re-serializing before verifying is the classic webhook bug.\n *\n * The secret comes from `webhooks.secret` on the client; pass `{ secret }` to\n * override per call. Throws {@link BirdWebhookVerificationError} on a bad\n * signature, a stale timestamp, or missing/malformed headers. Unknown event\n * types are returned as-is (handle them in a `default` case) so a newer server\n * event can't break an older SDK.\n *\n * @example One call verifies the signature and returns the typed event\n * // Pass the RAW request body; set the secret via new BirdClient({ webhooks: { secret } }).\n * const event = bird.webhooks.unwrap(rawBody, headers);\n * console.log(event.type); // discriminated union — narrow on event.type\n *\n * @example Verify and dispatch — pass the raw request body, never the parsed JSON\n * // new BirdClient({ apiKey, webhooks: { secret } })\n * try {\n * const event = bird.webhooks.unwrap(rawBody, req.headers);\n * switch (event.type) {\n * case \"email.delivered\":\n * markDelivered(event.email_id, event.recipient); // narrowed; fields are flat\n * break;\n * case \"email.bounced\":\n * case \"email.complained\":\n * suppress(event.recipient);\n * break;\n * default: // unknown future event types — an older SDK won't break on a new one\n * }\n * } catch (err) {\n * if (err instanceof BirdWebhookVerificationError) {\n * // reject with 400 — bad signature, stale timestamp, or missing/malformed headers\n * } else throw err;\n * }\n */\n unwrap(\n payload: string,\n headers: WebhookHeaders,\n options?: WebhookOptions,\n ): BirdWebhookEvent {\n const secret = options?.secret ?? this.#secret;\n if (!secret) {\n throw new Error(\n \"No webhook secret. Set `webhooks: { secret }` on the client, or pass `{ secret }` to unwrap.\",\n );\n }\n const wh = new Webhook(secret);\n let verified: unknown;\n try {\n verified = wh.verify(payload, toHeaderRecord(headers));\n } catch (err) {\n throw new BirdWebhookVerificationError(\n err instanceof Error\n ? err.message\n : \"Webhook signature verification failed\",\n );\n }\n // `verify` returns `unknown`; the payload is authenticated and the wire\n // schema is `additionalProperties: false`, so the assertion is sound here.\n return verified as BirdWebhookEvent;\n }\n}\n\nfunction toHeaderRecord(headers: WebhookHeaders): Record<string, string> {\n return headers instanceof Headers ? Object.fromEntries(headers) : headers;\n}\n","import {\n createClient,\n createConfig,\n type Client,\n} from \"./generated/client/index.js\";\nimport { baseUrlForRegion, regionFromApiKey } from \"./region.js\";\nimport {\n BirdHTTPClient,\n type AttemptContext,\n type FetchOutcome,\n} from \"./core/http.js\";\nimport {\n apiPromise,\n type APIPromise,\n type RequestOptions,\n} from \"./core/result.js\";\nimport { EmailResource, type EmailChannelDefaults } from \"./resources/email.js\";\nimport { WebhooksResource, type WebhookOptions } from \"./resources/webhooks.js\";\n\n// The SDK's own version, sent as User-Agent. Injected at build time from\n// package.json (tsup/vitest `define`) so it never drifts from the published\n// version. Distinct from the Bird API version (X-Bird-API-Version, ADR-0042 §5)\n// which is deferred — see sdk-build-ledger #3.\ndeclare const __SDK_VERSION__: string;\nconst DEFAULT_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\n\nexport interface BirdClientOptions {\n apiKey: string;\n /** Explicit base URL; overrides region resolution. For local/self-hosted use. */\n baseUrl?: string;\n /** Region override (e.g. `\"eu1\"`); the API key prefix is used by default. */\n region?: string;\n /** Per-attempt timeout in ms. Default 60_000. */\n timeout?: number;\n /** Max retry attempts on retryable failures (429, 5xx, network). Default 2. */\n maxRetries?: number;\n /** Custom fetch — testing, proxying, edge-runtime adapters. Default global fetch. */\n fetch?: typeof fetch;\n /** Headers added to every request. SDK-internal headers win on conflict. */\n defaultHeaders?: Record<string, string>;\n /**\n * Email channel defaults. Any field set here may be omitted in\n * `bird.email.send` (the type enforces this); the per-send value wins.\n */\n email?: EmailChannelDefaults;\n /** Webhooks config — `secret` is the default used by `bird.webhooks.unwrap`. */\n webhooks?: WebhookOptions;\n}\n\n/** A raw request for the `bird.request` escape hatch. */\nexport interface BirdRequest {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n /**\n * Absolute path on the API host, e.g. `/v1/email/domains`; must start\n * with a single `/`.\n */\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n /** JSON request body. */\n body?: unknown;\n headers?: Record<string, string>;\n}\n\n// Extract the email-channel defaults from the (literal) options type, or\n// `undefined` when none were set — drives whether `send` requires `from` etc.\ntype EmailDefaultsOf<O> = O extends {\n email: infer E extends EmailChannelDefaults;\n}\n ? E\n : undefined;\n\n// Precedence: explicit baseUrl, then explicit region, then the key's region\n// prefix. There is no region-less data-plane host, so an unresolvable region throws.\nfunction resolveBaseUrl(options: BirdClientOptions): string {\n if (options.baseUrl) return options.baseUrl;\n const region = options.region ?? regionFromApiKey(options.apiKey);\n if (!region) {\n throw new Error(\n \"Unable to determine region: API key is not in the expected \" +\n \"bk_{region}_{token} format. Pass an explicit `region` or `baseUrl`.\",\n );\n }\n return baseUrlForRegion(region);\n}\n\n// The raw escape hatch accepts caller-supplied paths. Require an absolute path\n// segment (not an authority-relative URL) and assert the final origin before\n// attaching SDK auth headers.\nfunction resolveRawRequestUrl(baseUrl: string, path: string): URL {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) {\n throw new TypeError(\n \"bird.request path must be an absolute path starting with a single `/`\",\n );\n }\n const base = new URL(baseUrl);\n const url = new URL(baseUrl + path);\n if (url.origin !== base.origin) {\n throw new TypeError(\n \"bird.request path must stay on the configured Bird API origin\",\n );\n }\n return url;\n}\n\n/**\n * The Bird API client. Construct it with an API key; the region is taken from\n * the key's prefix (`bk_{region}_…`) — pass `baseUrl` or `region` to override.\n *\n * @example Construct and send\n * const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });\n * const msg = await bird.email.send({\n * from: \"hello@acme.com\",\n * to: [\"customer@example.com\"],\n * subject: \"Welcome aboard\",\n * html: \"<h1>Hi there 👋</h1>\",\n * });\n * console.log(msg.id);\n *\n * @example Channel defaults — set common send fields once; a per-send value always wins\n * const bird = new BirdClient({\n * apiKey: process.env.BIRD_API_KEY!,\n * email: { from: \"hello@acme.com\", category: \"transactional\" },\n * });\n * // `from` and `category` are filled from the defaults; both stay optional in `send`.\n * await bird.email.send({ to: [\"customer@example.com\"], subject: \"Hi\", html: \"<p>hi</p>\" });\n *\n * @example All client options\n * const bird = new BirdClient({\n * apiKey: process.env.BIRD_API_KEY!,\n * region: \"eu1\", // optional — override the region from the key prefix\n * baseUrl: \"http://localhost:8080\", // optional — overrides region entirely (local/self-hosted)\n * timeout: 60_000, // per-attempt timeout in ms (default 60_000)\n * maxRetries: 2, // retry budget for transient failures (default 2)\n * });\n */\nexport class BirdClient<const O extends BirdClientOptions = BirdClientOptions> {\n protected readonly core: BirdHTTPClient;\n\n // The generated hey-api client, configured with this instance's base URL,\n // auth, and fetch. Resources call the generated SDK functions through it.\n readonly #client: Client;\n readonly #baseUrl: string;\n readonly #fetch: typeof fetch;\n readonly #headers: Record<string, string>;\n\n /** The email channel — `bird.email.send(...)`, `.get(...)`, `.list(...)`. */\n readonly email: EmailResource<EmailDefaultsOf<O>>;\n\n /** Webhooks — `bird.webhooks.unwrap(payload, headers)` verifies an inbound delivery. */\n readonly webhooks: WebhooksResource;\n\n constructor(options: O) {\n const opts: BirdClientOptions = options; // widen for safe optional access\n this.#baseUrl = resolveBaseUrl(opts);\n this.#fetch = opts.fetch ?? fetch;\n this.#headers = {\n ...opts.defaultHeaders,\n Authorization: `Bearer ${opts.apiKey}`,\n \"User-Agent\": `bird-sdk-js/${__SDK_VERSION__}`,\n // X-Bird-* client-identity headers (ADR-0067): the API attributes the SDK\n // surface from these, not the User-Agent. Edge-safe, so no os/arch/runtime\n // (those need Node globals this SDK must not touch); surface + version only.\n \"X-Bird-Surface\": \"sdk-js\",\n \"X-Bird-Version\": __SDK_VERSION__,\n };\n this.#client = createClient(\n createConfig({\n baseUrl: this.#baseUrl,\n fetch: this.#fetch,\n headers: this.#headers,\n }),\n );\n this.core = new BirdHTTPClient({\n timeout: opts.timeout ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n });\n // The runtime value is the configured defaults (or undefined); the precise\n // conditional type can't be reproved from the widened access, so assert it.\n this.email = new EmailResource<EmailDefaultsOf<O>>(\n this.core,\n this.#client,\n opts.email as EmailDefaultsOf<O>,\n );\n this.webhooks = new WebhooksResource(opts.webhooks);\n }\n\n /**\n * Escape hatch for endpoints the typed resources don't cover. Runs the full\n * lifecycle (auth, retries, idempotency, error mapping); you supply the\n * response type. Prefer a typed resource method where one exists.\n *\n * @throws {TypeError} if `req.path` does not start with exactly one `/` or\n * resolves to a different origin than the configured Bird API base URL.\n *\n * @example Reach an endpoint outside the curated surface — you supply the response type\n * type Suppressions = { data: Array<{ recipient: string }> };\n * const suppressions = await bird.request<Suppressions>({ method: \"GET\", path: \"/v1/email/suppressions\" });\n * console.log(suppressions.data.length);\n */\n request<T = unknown>(\n req: BirdRequest,\n options?: RequestOptions,\n ): APIPromise<T> {\n const url = resolveRawRequestUrl(this.#baseUrl, req.path);\n return apiPromise(\n this.core.request<T>(\n (ctx) => this.#raw<T>(url, req, ctx, options?.headers),\n {\n method: req.method,\n idempotencyKey: options?.idempotencyKey,\n signal: options?.signal,\n timeout: options?.timeout,\n maxRetries: options?.maxRetries,\n },\n ),\n );\n }\n\n async #raw<T>(\n url: URL,\n req: BirdRequest,\n ctx: AttemptContext,\n extraHeaders?: Record<string, string>,\n ): Promise<FetchOutcome<T>> {\n url = new URL(url);\n if (req.query) {\n for (const [key, value] of Object.entries(req.query)) {\n if (value !== undefined) url.searchParams.set(key, String(value));\n }\n }\n // SDK-internal headers (auth, idempotency) win over caller-supplied ones.\n const headers: Record<string, string> = {\n ...extraHeaders,\n ...this.#headers,\n };\n if (ctx.idempotencyKey) headers[\"Idempotency-Key\"] = ctx.idempotencyKey;\n if (req.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await this.#fetch(url, {\n method: req.method,\n headers,\n body: req.body !== undefined ? JSON.stringify(req.body) : undefined,\n signal: ctx.signal,\n });\n\n if (response.ok) {\n const data =\n response.status === 204\n ? undefined\n : await response.json().catch(() => undefined);\n // Caller supplies T; the raw JSON is asserted to it (escape hatch — untyped path).\n return { data: data as T, response };\n }\n const error = await response\n .clone()\n .json()\n .catch(() => undefined);\n return { error, response };\n }\n}\n","// Code generated by openapi/scripts/eventconst-gen.go. DO NOT EDIT.\n\n/**\n * Webhook event types known at this SDK version. The wire value is an open\n * string: a value added by a newer server is returned by `unwrap` unchanged,\n * so switch on these with a `default` branch.\n */\nexport const WebhookEventType = {\n DomainFailed: \"domain.failed\",\n DomainVerified: \"domain.verified\",\n EmailAccepted: \"email.accepted\",\n EmailBounced: \"email.bounced\",\n EmailClicked: \"email.clicked\",\n EmailComplained: \"email.complained\",\n EmailDeferred: \"email.deferred\",\n EmailDelivered: \"email.delivered\",\n EmailListUnsubscribed: \"email.list_unsubscribed\",\n EmailOpened: \"email.opened\",\n EmailOutOfBandBounce: \"email.out_of_band_bounce\",\n EmailProcessed: \"email.processed\",\n EmailReceived: \"email.received\",\n EmailRejected: \"email.rejected\",\n EmailSuppressionCreated: \"email_suppression.created\",\n EmailUnsubscribed: \"email.unsubscribed\",\n SmsAccepted: \"sms.accepted\",\n SmsDelivered: \"sms.delivered\",\n SmsExpired: \"sms.expired\",\n SmsFailed: \"sms.failed\",\n SmsRejected: \"sms.rejected\",\n SmsSent: \"sms.sent\",\n SmsUndelivered: \"sms.undelivered\",\n} as const;\n\n/** A known webhook event type value. */\nexport type WebhookEventTypeValue =\n (typeof WebhookEventType)[keyof typeof WebhookEventType];\n"]}
1
+ {"version":3,"sources":["../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/region.ts","../src/errors.ts","../src/core/http.ts","../src/core/result.ts","../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/resources/base.ts","../src/resources/email.ts","../src/resources/webhooks.ts","../src/client.ts","../src/event-types.gen.ts"],"names":["sleep","retryDelay","joinedValues","config","request","url","client","mergeHeaders"],"mappings":"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","file":"index.js","sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from \"./pathSerializer.gen\";\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\") {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value,\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from \"./types.gen\";\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n \"method\"\n> &\n Pick<Config, \"method\" | \"responseTransformer\" | \"responseValidator\"> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit[\"body\"];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set(\"Last-Event-ID\", lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: \"follow\",\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`,\n );\n\n if (!response.body) throw new Error(\"No body in SSE response\");\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = \"\";\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener(\"abort\", abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, \"\\n\"); // normalize line endings\n\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n\n for (const chunk of chunks) {\n const lines = chunk.split(\"\\n\");\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.replace(/^data:\\s*/, \"\"));\n } else if (line.startsWith(\"event:\")) {\n eventName = line.replace(/^event:\\s*/, \"\");\n } else if (line.startsWith(\"id:\")) {\n lastEventId = line.replace(/^id:\\s*/, \"\");\n } else if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, \"\"),\n 10,\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join(\"\\n\");\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener(\"abort\", abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000,\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\nexport type ObjectStyle = \"form\" | \"deepObject\";\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n case \"simple\":\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== \"deepObject\" && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues}`;\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from \"./bodySerializer.gen\";\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"./pathSerializer.gen\";\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = \"simple\";\n\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if (\"serializedBody\" in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== \"\";\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== \"\" ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: \"header\" | \"query\" | \"cookie\";\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: \"basic\" | \"bearer\";\n type: \"apiKey\" | \"http\";\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token =\n typeof callback === \"function\" ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from \"../core/auth.gen\";\nimport type { QuerySerializerOptions } from \"../core/bodySerializer.gen\";\nimport { jsonBodySerializer } from \"../core/bodySerializer.gen\";\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"../core/pathSerializer.gen\";\nimport { getUrl } from \"../core/utils.gen\";\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from \"./types.gen\";\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config[\"parseAs\"], \"auto\"> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return \"stream\";\n }\n\n const cleanContent = contentType.split(\";\")[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith(\"application/json\") ||\n cleanContent.endsWith(\"+json\")\n ) {\n return \"json\";\n }\n\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n\n if (\n [\"application/\", \"audio/\", \"image/\", \"video/\"].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return \"blob\";\n }\n\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get(\"Cookie\")?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, \"security\"> &\n Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? \"Authorization\";\n\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client[\"buildUrl\"] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === \"function\"\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>[\"headers\"] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === \"number\") {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor,\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\",\n },\n object: {\n explode: true,\n style: \"deepObject\",\n },\n});\n\nconst defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from \"../core/serverSentEvents.gen\";\nimport type { HttpMethod } from \"../core/types.gen\";\nimport { getValidRequestBody } from \"../core/utils.gen\";\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from \"./types.gen\";\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from \"./utils.gen\";\n\ntype ReqInit = Omit<RequestInit, \"body\" | \"headers\"> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends \"data\" | \"fields\" = \"fields\",\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as\n | string\n | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client[\"request\"] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: \"follow\",\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === \"auto\"\n ? getParseAs(response.headers.get(\"Content-Type\"))\n : opts.parseAs) ?? \"json\";\n\n if (\n response.status === 204 ||\n response.headers.get(\"Content-Length\") === \"0\"\n ) {\n let emptyData: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"text\":\n emptyData = await response[parseAs]();\n break;\n case \"formData\":\n emptyData = new FormData();\n break;\n case \"stream\":\n emptyData = response.body;\n break;\n case \"json\":\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === \"data\"\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"json\": {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case \"stream\":\n return opts.responseStyle === \"data\"\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === \"data\"\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(\n finalError,\n response,\n request,\n options as ResolvedRequestOptions,\n );\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as\n | BodyInit\n | null\n | undefined,\n url,\n });\n };\n\n const _buildUrl: Client[\"buildUrl\"] = (options) =>\n buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn(\"CONNECT\"),\n delete: makeMethodFn(\"DELETE\"),\n get: makeMethodFn(\"GET\"),\n getConfig,\n head: makeMethodFn(\"HEAD\"),\n interceptors,\n options: makeMethodFn(\"OPTIONS\"),\n patch: makeMethodFn(\"PATCH\"),\n post: makeMethodFn(\"POST\"),\n put: makeMethodFn(\"PUT\"),\n request,\n setConfig,\n sse: {\n connect: makeSseFn(\"CONNECT\"),\n delete: makeSseFn(\"DELETE\"),\n get: makeSseFn(\"GET\"),\n head: makeSseFn(\"HEAD\"),\n options: makeSseFn(\"OPTIONS\"),\n patch: makeSseFn(\"PATCH\"),\n post: makeSseFn(\"POST\"),\n put: makeSseFn(\"PUT\"),\n trace: makeSseFn(\"TRACE\"),\n },\n trace: makeMethodFn(\"TRACE\"),\n } as Client;\n};\n","// API keys encode their region as bk_{region}_{token}, so the client can route\n// to {region}.platform.bird.com automatically (ADR-0036).\n\nconst REGION_PATTERN = /^[a-z]{2}[0-9]+$/;\n\n/** Extracts the region code from a `bk_{region}_{token}` key, or undefined. */\nexport function regionFromApiKey(apiKey: string): string | undefined {\n const [prefix, region, token] = apiKey.split(\"_\");\n if (prefix !== \"bk\" || !region || !token) return undefined;\n return REGION_PATTERN.test(region) ? region : undefined;\n}\n\nexport function baseUrlForRegion(region: string): string {\n return `https://${region}.platform.bird.com`;\n}\n","// Error hierarchy for the Bird SDK (ADR-0042 §1).\n//\n// One class per error `type` (ADR-0016 — clients branch on the coarse `type`,\n// never on individual codes). Two transport classes cover failures with no HTTP\n// response. Scalar fields on the error objects are camelCase — these are\n// SDK-constructed objects, not wire data (the Stripe/OpenAI-node convention:\n// snake data, camel code). Nested wire payloads (validation `details`) pass\n// through as-is.\n//\n// `mapResponseToError` is the single place a non-2xx response becomes a thrown\n// error; the request core calls it once a response is terminal.\n\n/** Root of the hierarchy. Catch this to catch anything the SDK throws. */\nexport class BirdError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BirdError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Network-level failure with no HTTP response (DNS, refused, socket hangup). */\nexport class BirdConnectionError extends BirdError {\n constructor(message: string) {\n super(message);\n this.name = \"BirdConnectionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** A single attempt exceeded its timeout. Retryable. */\nexport class BirdTimeoutError extends BirdError {\n readonly timeoutMs: number;\n constructor(message: string, timeoutMs: number) {\n super(message);\n this.name = \"BirdTimeoutError\";\n this.timeoutMs = timeoutMs;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** A webhook payload failed signature verification (bad signature, stale timestamp, malformed headers). */\nexport class BirdWebhookVerificationError extends BirdError {\n constructor(message: string) {\n super(message);\n this.name = \"BirdWebhookVerificationError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** One per-field validation failure (the `details` array on a 422). */\nexport interface ErrorDetail {\n /** Dotted field path, e.g. `to[0].email`, `subject`, `.`. */\n param: string;\n /** What is wrong with this field. */\n message: string;\n}\n\n/** One recovery step: an operation to call to resolve the error (ADR-0073). */\nexport interface ErrorNextAction {\n /** operationId of the follow-up operation that resolves this error. */\n operation: string;\n /** Short human-readable label for the recovery step. */\n description?: string;\n /** Permission scope the recovery operation requires, when it is scoped. */\n scope?: string;\n}\n\n/** Constructor fields shared by every API error, mapped from the wire body. */\nexport interface BirdAPIErrorFields {\n statusCode: number;\n /** Opaque, stable error code (`E#####`). */\n code: string;\n /** Coarse category — the value callers branch on. */\n type: string;\n /** Human-readable slug for logs. Paired with `code`, never replaces it. */\n errorName: string;\n message: string;\n /** Stable link to the docs page for this code. */\n docUrl: string;\n /** Correlation ID — also the `X-Request-Id` response header. */\n requestId: string;\n /** Offending field, when applicable. */\n param?: string;\n /** Verbatim code from a downstream system (SMTP reply, payment decline). */\n vendorCode?: string;\n /** Human recovery line for this error, when a recovery is known (ADR-0073). */\n remediation?: string;\n /** Operations that resolve this error, in the order to try them (ADR-0073). */\n next?: ErrorNextAction[];\n}\n\n/** The server returned an error body. Base for every `type`-specific class. */\nexport class BirdAPIError extends BirdError {\n readonly statusCode: number;\n readonly code: string;\n readonly type: string;\n readonly errorName: string;\n readonly docUrl: string;\n readonly requestId: string;\n readonly param?: string;\n readonly vendorCode?: string;\n readonly remediation?: string;\n readonly next?: ErrorNextAction[];\n\n constructor(fields: BirdAPIErrorFields) {\n super(fields.message);\n this.name = \"BirdAPIError\";\n this.statusCode = fields.statusCode;\n this.code = fields.code;\n this.type = fields.type;\n this.errorName = fields.errorName;\n this.docUrl = fields.docUrl;\n this.requestId = fields.requestId;\n this.param = fields.param;\n this.vendorCode = fields.vendorCode;\n this.remediation = fields.remediation;\n this.next = fields.next;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// One class per `type` enum value. The plain ones add nothing beyond the base;\n// they exist so callers can `instanceof BirdNotFoundError` rather than compare\n// strings, and so the special-field classes have peers.\n\n/** 401 — authentication failed or missing. */\nexport class BirdAuthError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdAuthError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 403 — authenticated but not allowed. */\nexport class BirdPermissionError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPermissionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 404 — resource does not exist. */\nexport class BirdNotFoundError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdNotFoundError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 409 — semantic conflict (e.g. a unique value already taken). */\nexport class BirdConflictError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdConflictError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 400 — malformed request. */\nexport class BirdBadRequestError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdBadRequestError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 402 — billing/balance problem. */\nexport class BirdBillingError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdBillingError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 412/428 — a precondition was not met. */\nexport class BirdPreconditionError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPreconditionError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 413 — request body too large. */\nexport class BirdPayloadTooLargeError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdPayloadTooLargeError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 500 — unexpected server error. */\nexport class BirdInternalError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdInternalError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 501 — endpoint not implemented. */\nexport class BirdNotImplementedError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdNotImplementedError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 421 — request reached the wrong region (ADR-0036). */\nexport class BirdMisdirectedError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdMisdirectedError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 503 — service temporarily unavailable. */\nexport class BirdServiceUnavailableError extends BirdAPIError {\n constructor(fields: BirdAPIErrorFields) {\n super(fields);\n this.name = \"BirdServiceUnavailableError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 422 — field validation failed; `details` carries the per-field errors. */\nexport class BirdValidationError extends BirdAPIError {\n readonly details: ErrorDetail[];\n constructor(fields: BirdAPIErrorFields & { details: ErrorDetail[] }) {\n super(fields);\n this.name = \"BirdValidationError\";\n this.details = fields.details;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** 429 — rate limited; `retryAfter` is the server-advised wait in seconds. */\nexport class BirdRateLimitError extends BirdAPIError {\n readonly retryAfter?: number;\n constructor(fields: BirdAPIErrorFields & { retryAfter?: number }) {\n super(fields);\n this.name = \"BirdRateLimitError\";\n this.retryAfter = fields.retryAfter;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Shape of the wire error body (`ErrorBody`), snake_case as sent. */\ninterface WireErrorBody {\n type?: string;\n code?: string;\n name?: string;\n message?: string;\n doc_url?: string;\n request_id?: string;\n param?: string;\n vendor_code?: string;\n details?: ErrorDetail[];\n remediation?: string;\n next?: ErrorNextAction[];\n}\n\n/**\n * Parse `Retry-After` (delta-seconds or HTTP-date) into whole seconds. A\n * negative or unparseable value yields `undefined` — a negative wait is\n * meaningless, so both the user-facing `retryAfter` and the retry loop treat it\n * as \"no server advice\". The single Retry-After parser; `retryDelay` builds on it.\n */\nexport function parseRetryAfter(headers?: Headers): number | undefined {\n const header = headers?.get(\"Retry-After\");\n if (!header) return undefined;\n const seconds = Number(header);\n const value = Number.isFinite(seconds)\n ? seconds\n : (Date.parse(header) - Date.now()) / 1000;\n return Number.isFinite(value) && value >= 0 ? Math.round(value) : undefined;\n}\n\n// Status → type fallback for non-JSON error bodies (proxy 502s, etc.) where the\n// body carries no `type`.\nfunction inferType(status: number): string {\n switch (status) {\n case 400:\n return \"bad_request_error\";\n case 401:\n return \"auth_error\";\n case 402:\n return \"billing_error\";\n case 403:\n return \"permission_error\";\n case 404:\n return \"not_found_error\";\n case 409:\n return \"conflict_error\";\n case 412:\n case 428:\n return \"precondition_error\";\n case 413:\n return \"payload_too_large_error\";\n case 421:\n return \"misdirected_error\";\n case 422:\n return \"validation_error\";\n case 429:\n return \"rate_limit_error\";\n case 501:\n return \"not_implemented_error\";\n case 503:\n return \"service_unavailable_error\";\n default:\n return status >= 500 ? \"internal_error\" : \"bad_request_error\";\n }\n}\n\n/**\n * Map a non-2xx response to the right `BirdAPIError` subclass. The single place\n * the SDK turns a wire error into a thrown error.\n */\nexport function mapResponseToError(\n status: number,\n body: unknown,\n headers?: Headers,\n): BirdAPIError {\n // The API wraps errors as `{ \"error\": { … } }`; unwrap it (tolerating a bare\n // top-level body and a non-object body) so the wire type/code/message/request_id\n // are read, not defaulted. Without this the type was only ever inferred from the\n // HTTP status and code/request_id were dropped.\n const raw = (body ?? {}) as Record<string, unknown>;\n const b =\n (raw.error as WireErrorBody | undefined) ?? (raw as WireErrorBody) ?? {};\n const fields: BirdAPIErrorFields = {\n statusCode: status,\n code: b.code ?? \"unknown\",\n type: b.type ?? inferType(status),\n errorName: b.name ?? \"\",\n message: b.message ?? `Request failed with status ${status}`,\n docUrl: b.doc_url ?? \"\",\n requestId: b.request_id ?? headers?.get(\"X-Request-Id\") ?? \"\",\n param: b.param,\n vendorCode: b.vendor_code,\n remediation: b.remediation,\n next: b.next ?? [], // normalize a null/absent wire `next` to [] so callers can always iterate\n };\n\n switch (fields.type) {\n case \"auth_error\":\n return new BirdAuthError(fields);\n case \"permission_error\":\n return new BirdPermissionError(fields);\n case \"not_found_error\":\n return new BirdNotFoundError(fields);\n case \"conflict_error\":\n return new BirdConflictError(fields);\n case \"bad_request_error\":\n return new BirdBadRequestError(fields);\n case \"billing_error\":\n return new BirdBillingError(fields);\n case \"precondition_error\":\n return new BirdPreconditionError(fields);\n case \"payload_too_large_error\":\n return new BirdPayloadTooLargeError(fields);\n case \"internal_error\":\n return new BirdInternalError(fields);\n case \"not_implemented_error\":\n return new BirdNotImplementedError(fields);\n case \"misdirected_error\":\n return new BirdMisdirectedError(fields);\n case \"service_unavailable_error\":\n return new BirdServiceUnavailableError(fields);\n case \"rate_limit_error\":\n return new BirdRateLimitError({\n ...fields,\n retryAfter: parseRetryAfter(headers),\n });\n case \"validation_error\":\n return new BirdValidationError({ ...fields, details: b.details ?? [] });\n default:\n return new BirdAPIError(fields);\n }\n}\n","// The request lifecycle (ADR-0042 §2 + the lifecycle spec).\n//\n// BirdHTTPClient owns the attempt loop and wraps a generated hey-api SDK call\n// (passed as a thunk) so resources keep the generated call-site typing while\n// the loop owns: idempotency-key generate-once-and-reuse, per-attempt timeout,\n// AbortSignal, backoff with full jitter + Retry-After, and turning a terminal\n// response into a thrown BirdError via mapResponseToError.\n//\n// The hey-api client is configured WITHOUT throwOnError: a non-2xx returns\n// `{ error, response }` so this loop can inspect status and decide\n// retry-vs-throw. Network failures reject and are caught here.\n\nimport {\n BirdConnectionError,\n BirdError,\n BirdTimeoutError,\n mapResponseToError,\n parseRetryAfter,\n} from \"../errors.js\";\n\n/** Transport metadata exposed to callers via `.withResponse()`. */\nexport interface BirdResponse {\n status: number;\n headers: Headers;\n /** Correlation ID — the `X-Request-Id` header. */\n requestId: string;\n}\n\n/** Per-request lifecycle inputs, supplied by the resource method. */\nexport interface RequestLifecycleOptions {\n /** HTTP method — decides idempotency-key generation and retry safety. */\n method: string;\n /** Caller-supplied idempotency key; auto-generated for mutations if absent. */\n idempotencyKey?: string;\n /** Caller cancellation. */\n signal?: AbortSignal;\n /** Per-attempt timeout (ms). Overrides the client default. */\n timeout?: number;\n /** Max retry attempts. Overrides the client default. */\n maxRetries?: number;\n}\n\n/** The shape a generated hey-api SDK call resolves to. */\nexport interface FetchOutcome<T> {\n data?: T;\n error?: unknown;\n /** Present whenever the HTTP round-trip completed; absent only on a rejected call. */\n response?: Response;\n}\n\n/** Context handed to the call thunk on each attempt. */\nexport interface AttemptContext {\n signal: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport interface CoreDefaults {\n /** Per-attempt timeout (ms). */\n timeout: number;\n /** Max retry attempts. */\n maxRetries: number;\n}\n\nconst BACKOFF_BASE_MS = 500;\nconst BACKOFF_CAP_MS = 8_000;\nconst RETRY_AFTER_CAP_MS = 60_000;\n\nexport class BirdHTTPClient {\n constructor(private readonly defaults: CoreDefaults) {}\n\n /**\n * Run a generated hey-api SDK call through the request lifecycle.\n *\n * @param call Invokes the SDK function; receives the per-attempt signal and\n * the idempotency key to set as a header.\n * @returns the parsed body plus transport metadata.\n * @throws a `BirdError` subclass on terminal failure; the native\n * `AbortError` if the caller's signal aborts.\n */\n async request<T>(\n call: (ctx: AttemptContext) => Promise<FetchOutcome<T>>,\n options: RequestLifecycleOptions,\n ): Promise<{ data: T; response: BirdResponse }> {\n const maxRetries = options.maxRetries ?? this.defaults.maxRetries;\n const timeout = options.timeout ?? this.defaults.timeout;\n // Generated once, reused on every attempt — regenerating would double-execute.\n const idempotencyKey =\n options.idempotencyKey ??\n (isMutation(options.method) ? crypto.randomUUID() : undefined);\n\n for (let attempt = 0; ; attempt++) {\n throwIfAborted(options.signal);\n\n // Retry a transient failure with backoff if attempts remain; otherwise\n // throw the terminal error. Caller `continue`s the loop after this returns.\n const retryOrThrow = async (terminal: () => BirdError): Promise<void> => {\n if (attempt >= maxRetries) throw terminal();\n await sleep(backoffDelay(attempt), options.signal);\n };\n\n const timeoutSignal = AbortSignal.timeout(timeout);\n const signal = options.signal\n ? AbortSignal.any([options.signal, timeoutSignal])\n : timeoutSignal;\n\n let outcome: FetchOutcome<T> | undefined;\n try {\n outcome = await call({ signal, idempotencyKey });\n } catch (err) {\n // The fetch rejected: caller abort, per-attempt timeout, or network.\n throwIfAborted(options.signal); // caller abort wins, terminal\n await retryOrThrow(() =>\n timeoutSignal.aborted\n ? new BirdTimeoutError(`Request timed out after ${timeout}ms`, timeout)\n : new BirdConnectionError(errorMessage(err)),\n );\n continue;\n }\n\n const res = outcome.response;\n if (!res) {\n // A resolved call with no response is a transport failure (the client\n // normally rejects instead) — treat it like a network error.\n await retryOrThrow(() => new BirdConnectionError(\"No response received from the server\"));\n continue;\n }\n if (res.ok) {\n return { data: outcome.data as T, response: toBirdResponse(res) };\n }\n if (!isRetryableStatus(res.status) || attempt >= maxRetries) {\n throw mapResponseToError(res.status, outcome.error, res.headers);\n }\n await sleep(retryDelay(attempt, res.headers), options.signal);\n }\n }\n}\n\nfunction isMutation(method: string): boolean {\n return [\"POST\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase());\n}\n\n// Retry network failures, per-attempt timeouts, and transient statuses. 409 is a\n// semantic conflict a retry can't resolve; 501 is permanent; other 4xx are\n// deterministic.\nfunction isRetryableStatus(status: number): boolean {\n return [408, 429, 500, 502, 503, 504].includes(status);\n}\n\n/** Full-jitter exponential backoff: random in [0, min(cap, base·2^attempt)). */\nfunction backoffDelay(attempt: number): number {\n const ceiling = Math.min(BACKOFF_CAP_MS, BACKOFF_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n}\n\n/** Honor Retry-After on a retryable response, else fall back to backoff. */\nfunction retryDelay(attempt: number, headers: Headers): number {\n const seconds = parseRetryAfter(headers);\n return seconds === undefined ? backoffDelay(attempt) : Math.min(seconds * 1000, RETRY_AFTER_CAP_MS);\n}\n\nfunction toBirdResponse(res: Response): BirdResponse {\n return {\n status: res.status,\n headers: res.headers,\n requestId: res.headers.get(\"X-Request-Id\") ?? \"\",\n };\n}\n\n// The abort contract: surface the caller's `signal.reason` so a caller-initiated\n// abort stays the native AbortError, falling back to a synthetic one.\nfunction abortReason(signal: AbortSignal | undefined): unknown {\n return signal?.reason ?? new DOMException(\"Aborted\", \"AbortError\");\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw abortReason(signal);\n}\n\n/** Sleep, rejecting immediately if the caller's signal aborts. */\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortReason(signal));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortReason(signal));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","// What resource methods return: a Promise you can await for the value, plus\n// `.withResponse()` for transport metadata and `.safe()` for a non-throwing\n// `{ data, error, response }` result (ADR-0042 §1 — errors throw by default,\n// `.safe()` is the opt-in result form). Pagination follows R1: awaiting a list yields the\n// first page; `for await` walks every item across pages, fetching lazily.\n\nimport type { BirdResponse } from \"./http.js\";\nimport { BirdError } from \"../errors.js\";\n\n/** Per-request overrides accepted by every resource method. */\nexport interface RequestOptions {\n /** Idempotency key; auto-generated for mutations if omitted, reused on retry. */\n idempotencyKey?: string;\n /** Caller cancellation. Rejects with the native `AbortError`. */\n signal?: AbortSignal;\n /** Per-attempt timeout (ms). Overrides the client default. */\n timeout?: number;\n /** Max retry attempts. Overrides the client default. */\n maxRetries?: number;\n /** Extra headers for this request. SDK-internal headers win on conflict. */\n headers?: Record<string, string>;\n}\n\n/**\n * The result of `.safe()` — the value or the error, never thrown. On success\n * `data` and the `response` envelope are present and `error` is `null`. On\n * failure `error` is a `BirdError` you can `instanceof`-narrow, and `data`/\n * `response` are `null` — the metadata you need (status, request id) is on the\n * error itself. A caller-initiated abort is not a Bird failure and still throws\n * (the native `AbortError`, ADR-0042 §1).\n */\nexport type SafeResult<T> =\n | { data: T; error: null; response: BirdResponse }\n | { data: null; error: BirdError; response: null };\n\n/** Single-result return: `await` for the value, `.withResponse()` for metadata. */\nexport interface APIPromise<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: BirdResponse }>;\n /** Resolve to `{ data, error }` instead of throwing. */\n safe(): Promise<SafeResult<T>>;\n}\n\n// Build the base `await`→data promise shared by both wrappers and wire its\n// `.withResponse()`/`.safe()` views onto `inner`.\n//\n// `.withResponse()` and `.safe()` consume `inner` directly, so when a caller\n// uses one of those (or fires-and-forgets) this base promise is never awaited.\n// Mark its rejection handled — the chosen view still surfaces the error — so a\n// failed call isn't flagged as an unhandled rejection.\nfunction basePromise<T, P extends APIPromise<T>>(\n inner: Promise<{ data: T; response: BirdResponse }>,\n): P {\n const promise = inner.then((r) => r.data) as P;\n void promise.catch(() => {});\n promise.withResponse = () => inner;\n promise.safe = () => toSafe(inner);\n return promise;\n}\n\nexport function apiPromise<T>(\n inner: Promise<{ data: T; response: BirdResponse }>,\n): APIPromise<T> {\n return basePromise(inner);\n}\n\n/** One cursor-paginated page — the wire envelope shape (snake), verbatim. */\nexport interface CursorPage<T> {\n data: T[];\n /** Pass back as `starting_after` to advance. Null at the end. */\n next_cursor: string | null;\n /** Pass back as `ending_before` to step back. Null at the start. */\n prev_cursor: string | null;\n /** Refresh anchor; pass as `ending_before` later for items since this page. */\n refresh_cursor: string | null;\n /** Total across all pages — only when `include_total=true` was passed. */\n total?: number | null;\n}\n\n/**\n * List return (R1): `await` resolves the first page; `for await` walks every\n * item across all pages, fetching subsequent pages lazily.\n */\nexport interface PaginatedPromise<T> extends Promise<CursorPage<T>>, AsyncIterable<T> {\n withResponse(): Promise<{ data: CursorPage<T>; response: BirdResponse }>;\n /** Resolve the first page as `{ data, error }` instead of throwing. */\n safe(): Promise<SafeResult<CursorPage<T>>>;\n}\n\nexport function paginate<T>(\n fetchPage: (cursor?: string) => Promise<{ data: CursorPage<T>; response: BirdResponse }>,\n): PaginatedPromise<T> {\n const first = fetchPage();\n const promise = basePromise<CursorPage<T>, PaginatedPromise<T>>(first);\n promise[Symbol.asyncIterator] = async function* () {\n let result = await first;\n for (;;) {\n for (const item of result.data.data) yield item;\n if (result.data.next_cursor == null) return;\n result = await fetchPage(result.data.next_cursor);\n }\n };\n return promise;\n}\n\n// `.safe()` turns Bird failures (the BirdError hierarchy) into values. Anything\n// else — a caller-initiated AbortError, or an unexpected non-Bird throw — keeps\n// propagating, so `error` stays soundly typed as `BirdError`.\nfunction toSafe<V>(\n inner: Promise<{ data: V; response: BirdResponse }>,\n): Promise<SafeResult<V>> {\n return inner.then(\n ({ data, response }): SafeResult<V> => ({ data, error: null, response }),\n (error): SafeResult<V> => {\n if (error instanceof BirdError) return { data: null, error, response: null };\n throw error;\n },\n );\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type ClientOptions,\n type Config,\n createClient,\n createConfig,\n} from \"./client\";\nimport type { ClientOptions as ClientOptions2 } from \"./types.gen\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (\n override?: Config<ClientOptions & T>,\n) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>());\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from \"./client\";\nimport { client } from \"./client.gen\";\nimport type {\n CreateEmailMessageBatchData,\n CreateEmailMessageBatchErrors,\n CreateEmailMessageBatchResponses,\n CreateEmailMessageData,\n CreateEmailMessageErrors,\n CreateEmailMessageResponses,\n GetEmailMessageData,\n GetEmailMessageErrors,\n GetEmailMessageResponses,\n ListEmailMessagesData,\n ListEmailMessagesErrors,\n ListEmailMessagesResponses,\n} from \"./types.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n TResponse = unknown,\n> = Options2<TData, ThrowOnError, TResponse> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * List messages\n *\n * Returns a paginated list of email messages in the workspace, newest first.\n */\nexport const listEmailMessages = <ThrowOnError extends boolean = false>(\n options?: Options<ListEmailMessagesData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<\n ListEmailMessagesResponses,\n ListEmailMessagesErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages\",\n ...options,\n });\n\n/**\n * Send a message\n *\n * Sends an email to the recipients you list explicitly in `to`/`cc`/`bcc`. Use this for transactional sends (receipts, password resets, alerts) and for marketing sends where you have the recipient addresses on hand. For sends targeting a stored audience by reference, use POST /v1/email/broadcasts. The `category` field controls suppression policy independently — set it to `marketing` when sending marketing content from this endpoint. The 202 response is returned only after the message is safely accepted for delivery. If the sender domain is not verified, or all recipients are suppressed, the request fails immediately with a 422 — it is never accepted and then silently dropped. Other field-level validation failures also return 422.\n * Recipient addresses on reserved testing domains are rejected with a 422 RecipientDomainNotAllowed error. This covers @example.com, @example.net, @example.org, @example.edu, @test.com, and any address under the reserved .test, .example, .invalid, or .localhost top-level domains. These placeholder domains cannot receive mail, and the resulting bounces would hurt your sender reputation — use a real recipient address instead.\n * During onboarding, you can send without verifying a domain: use any sender address on the shared onboarding domain (for example onboarding@messagebird.dev). Such sends skip the sender-domain verification check, can only go to verified members of your workspace (other recipients are rejected with a 422 OnboardingRecipientNotAllowed error), and are subject to a daily recipient limit per organization (429 OnboardingSendLimitExceeded once exhausted).\n *\n */\nexport const createEmailMessage = <ThrowOnError extends boolean = false>(\n options: Options<CreateEmailMessageData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateEmailMessageResponses,\n CreateEmailMessageErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Send a batch of messages\n *\n * Accepts up to 100 independent email messages and queues them for delivery. All items are validated before any are queued — if one fails validation, the entire batch is rejected. Field-level validation failures and business-rule failures (such as domain_not_verified or all_recipients_suppressed) both return 422. Attachments are allowed per message. Each message must stay within the 20 MB estimated generated message-size cap. The serialized JSON request body for the batch has a hard 20 MB cap.\n *\n */\nexport const createEmailMessageBatch = <ThrowOnError extends boolean = false>(\n options: Options<CreateEmailMessageBatchData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateEmailMessageBatchResponses,\n CreateEmailMessageBatchErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/batches\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Get a message\n *\n * Returns a single email message object with aggregate delivery status and counts. Message body (html, text) is not returned — it is not stored after delivery.\n *\n */\nexport const getEmailMessage = <ThrowOnError extends boolean = false>(\n options: Options<GetEmailMessageData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetEmailMessageResponses,\n GetEmailMessageErrors,\n ThrowOnError\n >({\n security: [\n { scheme: \"bearer\", type: \"http\" },\n {\n in: \"cookie\",\n name: \"bird_session\",\n type: \"apiKey\",\n },\n ],\n url: \"/v1/email/messages/{message_id}\",\n ...options,\n });\n","// Base for resource wrappers. Each public method builds a typed hey-api SDK\n// call and runs it through the lifecycle core, returning an APIPromise (single)\n// or PaginatedPromise (list). Resources stay thin over `call`/`paginated` so the\n// per-operation logic could later be extracted to standalone tree-shakeable\n// functions without a rewrite.\n\nimport type { Client } from \"../generated/client/index.js\";\nimport type { AttemptContext, BirdHTTPClient, FetchOutcome, RequestLifecycleOptions } from \"../core/http.js\";\nimport {\n apiPromise,\n paginate,\n type APIPromise,\n type CursorPage,\n type PaginatedPromise,\n type RequestOptions,\n} from \"../core/result.js\";\n\n/** Resolved per-attempt inputs handed to the hey-api SDK call. */\nexport interface CallContext {\n signal: AbortSignal;\n /** Merged headers: caller `headers` plus the resolved `Idempotency-Key`. */\n headers: Record<string, string>;\n}\n\nexport abstract class Resource {\n constructor(\n protected readonly core: BirdHTTPClient,\n protected readonly client: Client,\n ) {}\n\n /** Run a single typed call through the lifecycle. */\n protected call<T>(\n method: string,\n options: RequestOptions | undefined,\n invoke: (ctx: CallContext) => Promise<FetchOutcome<T>>,\n ): APIPromise<T> {\n return apiPromise(\n this.core.request<T>((ctx) => invoke(callContext(ctx, options)), lifecycle(method, options)),\n );\n }\n\n /** Run a cursor-paginated list through the lifecycle (each page retried independently). */\n protected paginated<T>(\n method: string,\n options: RequestOptions | undefined,\n invoke: (ctx: CallContext, cursor: string | undefined) => Promise<FetchOutcome<CursorPage<T>>>,\n ): PaginatedPromise<T> {\n return paginate<T>((cursor) =>\n this.core.request<CursorPage<T>>(\n (ctx) => invoke(callContext(ctx, options), cursor),\n lifecycle(method, options),\n ),\n );\n }\n}\n\nfunction callContext(ctx: AttemptContext, options: RequestOptions | undefined): CallContext {\n return { signal: ctx.signal, headers: mergeHeaders(ctx.idempotencyKey, options?.headers) };\n}\n\nfunction lifecycle(method: string, options: RequestOptions | undefined): RequestLifecycleOptions {\n return {\n method,\n idempotencyKey: options?.idempotencyKey,\n signal: options?.signal,\n timeout: options?.timeout,\n maxRetries: options?.maxRetries,\n };\n}\n\nfunction mergeHeaders(\n idempotencyKey: string | undefined,\n extra: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...extra,\n ...(idempotencyKey ? { \"Idempotency-Key\": idempotencyKey } : {}),\n };\n}\n","// `bird.email` — the email channel (ADR-0042 §8: channel, singular, `send`).\n// The first concrete resource; the template every other channel/collection copies.\n// Calls the generated hey-api SDK functions through the lifecycle core.\n\nimport {\n createEmailMessage,\n createEmailMessageBatch,\n getEmailMessage,\n listEmailMessages,\n} from \"../generated/sdk.gen.js\";\nimport type {\n EmailMessage,\n EmailMessageBatchRequest,\n EmailMessageBatchResponse,\n EmailMessageSendRequest,\n ListEmailMessagesData,\n} from \"../generated/types.gen.js\";\nimport { Resource } from \"./base.js\";\nimport type {\n APIPromise,\n PaginatedPromise,\n RequestOptions,\n} from \"../core/result.js\";\n\n/** An email message with aggregate delivery status. */\nexport type { EmailMessage };\n/** Body for `bird.email.send`. */\nexport type EmailSendParams = EmailMessageSendRequest;\n/** Body for `bird.email.sendBatch` — an array of send params, validated as a unit. */\nexport type EmailSendBatchParams = EmailMessageBatchRequest;\n/** Result of `bird.email.sendBatch` — one accepted item per submitted message. */\nexport type EmailSendBatchResult = EmailMessageBatchResponse;\n/** Filters and cursor params for `bird.email.list`. */\nexport type EmailListQuery = NonNullable<ListEmailMessagesData[\"query\"]>;\n\n/**\n * Channel-level defaults set at client construction. Field names mirror the\n * send params (so they read as pre-filled fields). Any field set here becomes\n * optional in `send` and is filled when omitted (per-send value wins).\n */\nexport type EmailChannelDefaults = Partial<\n Pick<\n EmailSendParams,\n | \"from\"\n | \"reply_to\"\n | \"category\"\n | \"track_opens\"\n | \"track_clicks\"\n | \"headers\"\n | \"tags\"\n | \"metadata\"\n >\n>;\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n/** Keys that carry a configured default — made optional in `send`. */\ntype DefaultedKeys<D> = D extends object\n ? Extract<keyof D, keyof EmailSendParams>\n : never;\n/** `send` params with defaulted fields made optional. */\nexport type EmailSend<D> = PartialBy<EmailSendParams, DefaultedKeys<D>>;\n\nexport class EmailResource<\n D extends EmailChannelDefaults | undefined = undefined,\n> extends Resource {\n #defaults?: D;\n\n constructor(\n core: ConstructorParameters<typeof Resource>[0],\n client: ConstructorParameters<typeof Resource>[1],\n defaults?: D,\n ) {\n super(core, client);\n this.#defaults = defaults;\n }\n\n /**\n * Send an email message. Resolves once the message is accepted for delivery\n * (the API's 202). Throws on failure — a 422 (unverified sender, all\n * recipients suppressed, validation) is a `BirdValidationError`. Fields set as\n * channel defaults may be omitted (per-send value wins).\n *\n * @example Send a message\n * const msg = await bird.email.send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * });\n * console.log(msg.id, msg.status); // \"em_…\", \"accepted\"\n *\n * @example A richer send — cc/bcc, reply-to, tags, metadata, click-tracking off, and an idempotency key (safe to retry; the server dedupes)\n * await bird.email.send(\n * {\n * from: \"hello@acme.com\",\n * to: [\"a@example.com\", \"b@example.com\"],\n * cc: [\"manager@example.com\"],\n * reply_to: [\"support@acme.com\"],\n * subject: \"Your March invoice\",\n * html: \"<p>Attached.</p>\",\n * tags: [{ name: \"category\", value: \"billing\" }],\n * metadata: { invoice_id: \"inv_123\" },\n * track_clicks: false,\n * },\n * { idempotencyKey: \"invoice-march/cust_1\" },\n * );\n *\n * @example Branch on the typed error hierarchy\n * import { BirdRateLimitError, BirdValidationError, BirdAPIError } from \"@messagebird/sdk\";\n *\n * try {\n * await bird.email.send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * });\n * } catch (err) {\n * if (err instanceof BirdRateLimitError) console.log(`rate limited — retry in ${err.retryAfter}s`);\n * else if (err instanceof BirdValidationError) console.error(err.details);\n * else if (err instanceof BirdAPIError) console.error(err.code, err.requestId);\n * else throw err;\n * }\n *\n * @example Errors as values with `.safe()`\n * const { data, error } = await bird.email\n * .send({\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"delivered@messagebird.dev\"],\n * subject: \"Hello from Bird\",\n * html: \"<p>My first Bird email.</p>\",\n * })\n * .safe();\n * if (error) console.error(error.message);\n * else console.log(data.id);\n */\n send(\n params: EmailSend<D>,\n options?: RequestOptions,\n ): APIPromise<EmailMessage> {\n // EmailSend<D> guarantees the caller supplied every field not covered by a\n // default, so the merge is a complete EmailSendParams. TS can't reprove that\n // across a spread, so the assertion is necessary here (and only here).\n const body = { ...this.#defaults, ...params } as EmailSendParams;\n return this.call<EmailMessage>(\"POST\", options, ({ signal, headers }) =>\n createEmailMessage({ client: this.client, body, headers, signal }),\n );\n }\n\n /**\n * Send a batch of up to 100 independent email messages in one request. The\n * batch is validated as a unit — if any item fails validation (unverified\n * sender, all recipients suppressed, field-level errors) the whole batch is\n * rejected with a `BirdValidationError` and nothing is queued. Resolves with\n * one accepted item per submitted message, in submission order, once the batch\n * is accepted (the API's 202). Channel defaults are applied per item.\n *\n * @example Send a batch of messages\n * const batch = await bird.email.sendBatch([\n * {\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"alice@example.com\"],\n * subject: \"Your receipt\",\n * html: \"<p>Thanks, Alice.</p>\",\n * },\n * {\n * from: { email: \"onboarding@messagebird.dev\", name: \"Bird\" },\n * to: [\"bob@example.com\"],\n * subject: \"Your receipt\",\n * html: \"<p>Thanks, Bob.</p>\",\n * },\n * ]);\n * for (const item of batch.data) console.log(item.id, item.status);\n */\n sendBatch(\n params: EmailSendBatchParams,\n options?: RequestOptions,\n ): APIPromise<EmailSendBatchResult> {\n const body = params.map((item) => ({\n ...this.#defaults,\n ...item,\n })) as EmailSendBatchParams;\n return this.call<EmailSendBatchResult>(\n \"POST\",\n options,\n ({ signal, headers }) =>\n createEmailMessageBatch({ client: this.client, body, headers, signal }),\n );\n }\n\n /**\n * Fetch a message with aggregate delivery status.\n *\n * @example\n * const msg = await bird.email.get(\"em_abc123\");\n * msg.status; // \"accepted\" | \"processed\" | \"delivered\" | \"bounced\" | …\n * msg.delivered_count;\n * msg.bounced_count;\n */\n get(messageId: string, options?: RequestOptions): APIPromise<EmailMessage> {\n return this.call<EmailMessage>(\"GET\", options, ({ signal, headers }) =>\n getEmailMessage({\n client: this.client,\n path: { message_id: messageId },\n headers,\n signal,\n }),\n );\n }\n\n /**\n * List messages, newest first. `await` resolves the first page; `for await`\n * walks every message across all pages.\n *\n * @example Iterate every message, or take one page\n * for await (const message of bird.email.list({ status: \"bounced\" })) {\n * console.log(message.id);\n * }\n * const page = await bird.email.list({ limit: 50 }); // page.data, page.next_cursor\n */\n list(\n query?: EmailListQuery,\n options?: RequestOptions,\n ): PaginatedPromise<EmailMessage> {\n return this.paginated<EmailMessage>(\n \"GET\",\n options,\n ({ signal, headers }, cursor) =>\n listEmailMessages({\n client: this.client,\n query: { ...query, starting_after: cursor ?? query?.starting_after },\n headers,\n signal,\n }),\n );\n }\n}\n","// `bird.webhooks` — verifies a delivered payload's Standard Webhooks signature\n// and returns it as a typed, discriminated event union. Pure crypto: it never\n// touches the transport layer, so it carries no client/core dependency.\n\nimport { Webhook } from \"standardwebhooks\";\nimport type { WebhookEvent } from \"../generated/types.gen.js\";\nimport { BirdWebhookVerificationError } from \"../errors.js\";\n\n/** A verified webhook event — discriminated on `type` (ADR-0028 wire contract). */\nexport type BirdWebhookEvent = WebhookEvent;\n\n/** Inbound request headers, as a `Headers` object or a plain record. */\nexport type WebhookHeaders = Headers | Record<string, string>;\n\n/** Client-level webhooks config (`new BirdClient({ webhooks: { secret } })`). */\nexport interface WebhookOptions {\n /** Signing secret used by `unwrap`; a per-call `secret` overrides it. */\n secret?: string;\n}\n\nexport class WebhooksResource {\n readonly #secret?: string;\n\n constructor(config?: WebhookOptions) {\n this.#secret = config?.secret;\n }\n\n /**\n * Verify a webhook delivery and return the typed event.\n *\n * **Pass the raw request body**, exactly as received — do NOT parse it first.\n * The Standard Webhooks signature is computed over the raw bytes, so parsing\n * and re-serializing before verifying is the classic webhook bug.\n *\n * The secret comes from `webhooks.secret` on the client; pass `{ secret }` to\n * override per call. Throws {@link BirdWebhookVerificationError} on a bad\n * signature, a stale timestamp, or missing/malformed headers. Unknown event\n * types are returned as-is (handle them in a `default` case) so a newer server\n * event can't break an older SDK.\n *\n * @example One call verifies the signature and returns the typed event\n * // Pass the RAW request body; set the secret via new BirdClient({ webhooks: { secret } }).\n * const event = bird.webhooks.unwrap(rawBody, headers);\n * console.log(event.type); // discriminated union — narrow on event.type\n *\n * @example Verify and dispatch — pass the raw request body, never the parsed JSON\n * // new BirdClient({ apiKey, webhooks: { secret } })\n * try {\n * const event = bird.webhooks.unwrap(rawBody, req.headers);\n * switch (event.type) {\n * case \"email.delivered\":\n * markDelivered(event.email_id, event.recipient); // narrowed; fields are flat\n * break;\n * case \"email.bounced\":\n * case \"email.complained\":\n * suppress(event.recipient);\n * break;\n * default: // unknown future event types — an older SDK won't break on a new one\n * }\n * } catch (err) {\n * if (err instanceof BirdWebhookVerificationError) {\n * // reject with 400 — bad signature, stale timestamp, or missing/malformed headers\n * } else throw err;\n * }\n */\n unwrap(\n payload: string,\n headers: WebhookHeaders,\n options?: WebhookOptions,\n ): BirdWebhookEvent {\n const secret = options?.secret ?? this.#secret;\n if (!secret) {\n throw new Error(\n \"No webhook secret. Set `webhooks: { secret }` on the client, or pass `{ secret }` to unwrap.\",\n );\n }\n const wh = new Webhook(secret);\n let verified: unknown;\n try {\n verified = wh.verify(payload, toHeaderRecord(headers));\n } catch (err) {\n throw new BirdWebhookVerificationError(\n err instanceof Error\n ? err.message\n : \"Webhook signature verification failed\",\n );\n }\n // `verify` returns `unknown`; the payload is authenticated and the wire\n // schema is `additionalProperties: false`, so the assertion is sound here.\n return verified as BirdWebhookEvent;\n }\n}\n\nfunction toHeaderRecord(headers: WebhookHeaders): Record<string, string> {\n return headers instanceof Headers ? Object.fromEntries(headers) : headers;\n}\n","import {\n createClient,\n createConfig,\n type Client,\n} from \"./generated/client/index.js\";\nimport { baseUrlForRegion, regionFromApiKey } from \"./region.js\";\nimport {\n BirdHTTPClient,\n type AttemptContext,\n type FetchOutcome,\n} from \"./core/http.js\";\nimport {\n apiPromise,\n type APIPromise,\n type RequestOptions,\n} from \"./core/result.js\";\nimport { EmailResource, type EmailChannelDefaults } from \"./resources/email.js\";\nimport { WebhooksResource, type WebhookOptions } from \"./resources/webhooks.js\";\n\n// The SDK's own version, sent as User-Agent. Injected at build time from\n// package.json (tsup/vitest `define`) so it never drifts from the published\n// version. Distinct from the Bird API version (X-Bird-API-Version, ADR-0042 §5)\n// which is deferred — see sdk-build-ledger #3.\ndeclare const __SDK_VERSION__: string;\nconst DEFAULT_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\n\nexport interface BirdClientOptions {\n apiKey: string;\n /** Explicit base URL; overrides region resolution. For local/self-hosted use. */\n baseUrl?: string;\n /** Region override (e.g. `\"eu1\"`); the API key prefix is used by default. */\n region?: string;\n /** Per-attempt timeout in ms. Default 60_000. */\n timeout?: number;\n /** Max retry attempts on retryable failures (429, 5xx, network). Default 2. */\n maxRetries?: number;\n /** Custom fetch — testing, proxying, edge-runtime adapters. Default global fetch. */\n fetch?: typeof fetch;\n /** Headers added to every request. SDK-internal headers win on conflict. */\n defaultHeaders?: Record<string, string>;\n /**\n * Email channel defaults. Any field set here may be omitted in\n * `bird.email.send` (the type enforces this); the per-send value wins.\n */\n email?: EmailChannelDefaults;\n /** Webhooks config — `secret` is the default used by `bird.webhooks.unwrap`. */\n webhooks?: WebhookOptions;\n}\n\n/** A raw request for the `bird.request` escape hatch. */\nexport interface BirdRequest {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n /**\n * Absolute path on the API host, e.g. `/v1/email/domains`; must start\n * with a single `/`.\n */\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n /** JSON request body. */\n body?: unknown;\n headers?: Record<string, string>;\n}\n\n// Extract the email-channel defaults from the (literal) options type, or\n// `undefined` when none were set — drives whether `send` requires `from` etc.\ntype EmailDefaultsOf<O> = O extends {\n email: infer E extends EmailChannelDefaults;\n}\n ? E\n : undefined;\n\n// Precedence: explicit baseUrl, then explicit region, then the key's region\n// prefix. There is no region-less data-plane host, so an unresolvable region throws.\nfunction resolveBaseUrl(options: BirdClientOptions): string {\n if (options.baseUrl) return options.baseUrl;\n const region = options.region ?? regionFromApiKey(options.apiKey);\n if (!region) {\n throw new Error(\n \"Unable to determine region: API key is not in the expected \" +\n \"bk_{region}_{token} format. Pass an explicit `region` or `baseUrl`.\",\n );\n }\n return baseUrlForRegion(region);\n}\n\n// The raw escape hatch accepts caller-supplied paths. Require an absolute path\n// segment (not an authority-relative URL) and assert the final origin before\n// attaching SDK auth headers.\nfunction resolveRawRequestUrl(baseUrl: string, path: string): URL {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) {\n throw new TypeError(\n \"bird.request path must be an absolute path starting with a single `/`\",\n );\n }\n const base = new URL(baseUrl);\n const url = new URL(baseUrl + path);\n if (url.origin !== base.origin) {\n throw new TypeError(\n \"bird.request path must stay on the configured Bird API origin\",\n );\n }\n return url;\n}\n\n/**\n * The Bird API client. Construct it with an API key; the region is taken from\n * the key's prefix (`bk_{region}_…`) — pass `baseUrl` or `region` to override.\n *\n * @example Construct and send\n * const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });\n * const msg = await bird.email.send({\n * from: \"hello@acme.com\",\n * to: [\"customer@example.com\"],\n * subject: \"Welcome aboard\",\n * html: \"<h1>Hi there 👋</h1>\",\n * });\n * console.log(msg.id);\n *\n * @example Channel defaults — set common send fields once; a per-send value always wins\n * const bird = new BirdClient({\n * apiKey: process.env.BIRD_API_KEY!,\n * email: { from: \"hello@acme.com\", category: \"transactional\" },\n * });\n * // `from` and `category` are filled from the defaults; both stay optional in `send`.\n * await bird.email.send({ to: [\"customer@example.com\"], subject: \"Hi\", html: \"<p>hi</p>\" });\n *\n * @example All client options\n * const bird = new BirdClient({\n * apiKey: process.env.BIRD_API_KEY!,\n * region: \"eu1\", // optional — override the region from the key prefix\n * baseUrl: \"http://localhost:8080\", // optional — overrides region entirely (local/self-hosted)\n * timeout: 60_000, // per-attempt timeout in ms (default 60_000)\n * maxRetries: 2, // retry budget for transient failures (default 2)\n * });\n */\nexport class BirdClient<const O extends BirdClientOptions = BirdClientOptions> {\n protected readonly core: BirdHTTPClient;\n\n // The generated hey-api client, configured with this instance's base URL,\n // auth, and fetch. Resources call the generated SDK functions through it.\n readonly #client: Client;\n readonly #baseUrl: string;\n readonly #fetch: typeof fetch;\n readonly #headers: Record<string, string>;\n\n /** The email channel — `bird.email.send(...)`, `.get(...)`, `.list(...)`. */\n readonly email: EmailResource<EmailDefaultsOf<O>>;\n\n /** Webhooks — `bird.webhooks.unwrap(payload, headers)` verifies an inbound delivery. */\n readonly webhooks: WebhooksResource;\n\n constructor(options: O) {\n const opts: BirdClientOptions = options; // widen for safe optional access\n this.#baseUrl = resolveBaseUrl(opts);\n this.#fetch = opts.fetch ?? fetch;\n this.#headers = {\n ...opts.defaultHeaders,\n Authorization: `Bearer ${opts.apiKey}`,\n \"User-Agent\": `bird-sdk-js/${__SDK_VERSION__}`,\n // Bird-* client-identity headers (ADR-0074): the API attributes the SDK\n // surface from these, not the User-Agent. Edge-safe, so no os/arch/runtime\n // (those need Node globals this SDK must not touch); surface + version only.\n \"Bird-Surface\": \"sdk-js\",\n \"Bird-Version\": __SDK_VERSION__,\n };\n this.#client = createClient(\n createConfig({\n baseUrl: this.#baseUrl,\n fetch: this.#fetch,\n headers: this.#headers,\n }),\n );\n this.core = new BirdHTTPClient({\n timeout: opts.timeout ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n });\n // The runtime value is the configured defaults (or undefined); the precise\n // conditional type can't be reproved from the widened access, so assert it.\n this.email = new EmailResource<EmailDefaultsOf<O>>(\n this.core,\n this.#client,\n opts.email as EmailDefaultsOf<O>,\n );\n this.webhooks = new WebhooksResource(opts.webhooks);\n }\n\n /**\n * Escape hatch for endpoints the typed resources don't cover. Runs the full\n * lifecycle (auth, retries, idempotency, error mapping); you supply the\n * response type. Prefer a typed resource method where one exists.\n *\n * @throws {TypeError} if `req.path` does not start with exactly one `/` or\n * resolves to a different origin than the configured Bird API base URL.\n *\n * @example Reach an endpoint outside the curated surface — you supply the response type\n * type Suppressions = { data: Array<{ recipient: string }> };\n * const suppressions = await bird.request<Suppressions>({ method: \"GET\", path: \"/v1/email/suppressions\" });\n * console.log(suppressions.data.length);\n */\n request<T = unknown>(\n req: BirdRequest,\n options?: RequestOptions,\n ): APIPromise<T> {\n const url = resolveRawRequestUrl(this.#baseUrl, req.path);\n return apiPromise(\n this.core.request<T>(\n (ctx) => this.#raw<T>(url, req, ctx, options?.headers),\n {\n method: req.method,\n idempotencyKey: options?.idempotencyKey,\n signal: options?.signal,\n timeout: options?.timeout,\n maxRetries: options?.maxRetries,\n },\n ),\n );\n }\n\n async #raw<T>(\n url: URL,\n req: BirdRequest,\n ctx: AttemptContext,\n extraHeaders?: Record<string, string>,\n ): Promise<FetchOutcome<T>> {\n url = new URL(url);\n if (req.query) {\n for (const [key, value] of Object.entries(req.query)) {\n if (value !== undefined) url.searchParams.set(key, String(value));\n }\n }\n // SDK-internal headers (auth, idempotency) win over caller-supplied ones.\n const headers: Record<string, string> = {\n ...extraHeaders,\n ...this.#headers,\n };\n if (ctx.idempotencyKey) headers[\"Idempotency-Key\"] = ctx.idempotencyKey;\n if (req.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await this.#fetch(url, {\n method: req.method,\n headers,\n body: req.body !== undefined ? JSON.stringify(req.body) : undefined,\n signal: ctx.signal,\n });\n\n if (response.ok) {\n const data =\n response.status === 204\n ? undefined\n : await response.json().catch(() => undefined);\n // Caller supplies T; the raw JSON is asserted to it (escape hatch — untyped path).\n return { data: data as T, response };\n }\n const error = await response\n .clone()\n .json()\n .catch(() => undefined);\n return { error, response };\n }\n}\n","// Code generated by openapi/scripts/eventconst-gen.go. DO NOT EDIT.\n\n/**\n * Webhook event types known at this SDK version. The wire value is an open\n * string: a value added by a newer server is returned by `unwrap` unchanged,\n * so switch on these with a `default` branch.\n */\nexport const WebhookEventType = {\n DomainFailed: \"domain.failed\",\n DomainVerified: \"domain.verified\",\n EmailAccepted: \"email.accepted\",\n EmailBounced: \"email.bounced\",\n EmailCanceled: \"email.canceled\",\n EmailClicked: \"email.clicked\",\n EmailComplained: \"email.complained\",\n EmailDeferred: \"email.deferred\",\n EmailDelivered: \"email.delivered\",\n EmailListUnsubscribed: \"email.list_unsubscribed\",\n EmailOpened: \"email.opened\",\n EmailOutOfBandBounce: \"email.out_of_band_bounce\",\n EmailProcessed: \"email.processed\",\n EmailReceived: \"email.received\",\n EmailRejected: \"email.rejected\",\n EmailScheduled: \"email.scheduled\",\n EmailSuppressionCreated: \"email_suppression.created\",\n EmailUnsubscribed: \"email.unsubscribed\",\n SmsAccepted: \"sms.accepted\",\n SmsDelivered: \"sms.delivered\",\n SmsExpired: \"sms.expired\",\n SmsFailed: \"sms.failed\",\n SmsRejected: \"sms.rejected\",\n SmsSent: \"sms.sent\",\n SmsUndelivered: \"sms.undelivered\",\n} as const;\n\n/** A known webhook event type value. */\nexport type WebhookEventTypeValue =\n (typeof WebhookEventType)[keyof typeof WebhookEventType];\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@messagebird/sdk",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Official TypeScript SDK for the Bird API.",
5
5
  "license": "MIT",
6
6
  "author": "Bird",