@messagebird/sdk 0.2.0 → 0.2.1

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
@@ -1755,7 +1755,6 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1755
1755
  * channel defaults may be omitted (per-send value wins).
1756
1756
  *
1757
1757
  * @example Send a message
1758
- * // bird:snippet:start email.send
1759
1758
  * const msg = await bird.email.send({
1760
1759
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
1761
1760
  * to: ["delivered@messagebird.dev"],
@@ -1763,7 +1762,6 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1763
1762
  * html: "<p>My first Bird email.</p>",
1764
1763
  * });
1765
1764
  * console.log(msg.id, msg.status); // "em_…", "accepted"
1766
- * // bird:snippet:end email.send
1767
1765
  *
1768
1766
  * @example A richer send — cc/bcc, reply-to, tags, metadata, click-tracking off, and an idempotency key (safe to retry; the server dedupes)
1769
1767
  * await bird.email.send(
@@ -1782,7 +1780,6 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1782
1780
  * );
1783
1781
  *
1784
1782
  * @example Branch on the typed error hierarchy
1785
- * // bird:snippet:start email.errors
1786
1783
  * import { BirdRateLimitError, BirdValidationError, BirdAPIError } from "@messagebird/sdk";
1787
1784
  *
1788
1785
  * try {
@@ -1798,10 +1795,8 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1798
1795
  * else if (err instanceof BirdAPIError) console.error(err.code, err.requestId);
1799
1796
  * else throw err;
1800
1797
  * }
1801
- * // bird:snippet:end email.errors
1802
1798
  *
1803
1799
  * @example Errors as values with `.safe()`
1804
- * // bird:snippet:start email.safe
1805
1800
  * const { data, error } = await bird.email
1806
1801
  * .send({
1807
1802
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
@@ -1812,7 +1807,6 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1812
1807
  * .safe();
1813
1808
  * if (error) console.error(error.message);
1814
1809
  * else console.log(data.id);
1815
- * // bird:snippet:end email.safe
1816
1810
  */
1817
1811
  send(params: EmailSend<D>, options?: RequestOptions$1): APIPromise<EmailMessage>;
1818
1812
  /**
@@ -1824,7 +1818,6 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1824
1818
  * is accepted (the API's 202). Channel defaults are applied per item.
1825
1819
  *
1826
1820
  * @example Send a batch of messages
1827
- * // bird:snippet:start email.sendBatch
1828
1821
  * const batch = await bird.email.sendBatch([
1829
1822
  * {
1830
1823
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
@@ -1840,19 +1833,16 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1840
1833
  * },
1841
1834
  * ]);
1842
1835
  * for (const item of batch.data) console.log(item.id, item.status);
1843
- * // bird:snippet:end email.sendBatch
1844
1836
  */
1845
1837
  sendBatch(params: EmailSendBatchParams, options?: RequestOptions$1): APIPromise<EmailSendBatchResult>;
1846
1838
  /**
1847
1839
  * Fetch a message with aggregate delivery status.
1848
1840
  *
1849
1841
  * @example
1850
- * // bird:snippet:start email.get
1851
1842
  * const msg = await bird.email.get("em_abc123");
1852
1843
  * msg.status; // "accepted" | "processed" | "delivered" | "bounced" | …
1853
1844
  * msg.delivered_count;
1854
1845
  * msg.bounced_count;
1855
- * // bird:snippet:end email.get
1856
1846
  */
1857
1847
  get(messageId: string, options?: RequestOptions$1): APIPromise<EmailMessage>;
1858
1848
  /**
@@ -1860,14 +1850,10 @@ declare class EmailResource<D extends EmailChannelDefaults | undefined = undefin
1860
1850
  * walks every message across all pages.
1861
1851
  *
1862
1852
  * @example Iterate every message, or take one page
1863
- * // bird:snippet:start email.list.paginate
1864
- * // bird:snippet:start email.list.iterate
1865
1853
  * for await (const message of bird.email.list({ status: "bounced" })) {
1866
1854
  * console.log(message.id);
1867
1855
  * }
1868
- * // bird:snippet:end email.list.iterate
1869
1856
  * const page = await bird.email.list({ limit: 50 }); // page.data, page.next_cursor
1870
- * // bird:snippet:end email.list.paginate
1871
1857
  */
1872
1858
  list(query?: EmailListQuery, options?: RequestOptions$1): PaginatedPromise<EmailMessage>;
1873
1859
  }
@@ -1898,11 +1884,9 @@ declare class WebhooksResource {
1898
1884
  * event can't break an older SDK.
1899
1885
  *
1900
1886
  * @example One call verifies the signature and returns the typed event
1901
- * // bird:snippet:start webhook.unwrap
1902
1887
  * // Pass the RAW request body; set the secret via new BirdClient({ webhooks: { secret } }).
1903
1888
  * const event = bird.webhooks.unwrap(rawBody, headers);
1904
1889
  * console.log(event.type); // discriminated union — narrow on event.type
1905
- * // bird:snippet:end webhook.unwrap
1906
1890
  *
1907
1891
  * @example Verify and dispatch — pass the raw request body, never the parsed JSON
1908
1892
  * // new BirdClient({ apiKey, webhooks: { secret } })
@@ -1988,7 +1972,6 @@ type EmailDefaultsOf<O> = O extends {
1988
1972
  * await bird.email.send({ to: ["customer@example.com"], subject: "Hi", html: "<p>hi</p>" });
1989
1973
  *
1990
1974
  * @example All client options
1991
- * // bird:snippet:start client.options
1992
1975
  * const bird = new BirdClient({
1993
1976
  * apiKey: process.env.BIRD_API_KEY!,
1994
1977
  * region: "eu1", // optional — override the region from the key prefix
@@ -1996,7 +1979,6 @@ type EmailDefaultsOf<O> = O extends {
1996
1979
  * timeout: 60_000, // per-attempt timeout in ms (default 60_000)
1997
1980
  * maxRetries: 2, // retry budget for transient failures (default 2)
1998
1981
  * });
1999
- * // bird:snippet:end client.options
2000
1982
  */
2001
1983
  declare class BirdClient<const O extends BirdClientOptions = BirdClientOptions> {
2002
1984
  #private;
package/dist/index.js CHANGED
@@ -1323,7 +1323,6 @@ var EmailResource = class extends Resource {
1323
1323
  * channel defaults may be omitted (per-send value wins).
1324
1324
  *
1325
1325
  * @example Send a message
1326
- * // bird:snippet:start email.send
1327
1326
  * const msg = await bird.email.send({
1328
1327
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
1329
1328
  * to: ["delivered@messagebird.dev"],
@@ -1331,7 +1330,6 @@ var EmailResource = class extends Resource {
1331
1330
  * html: "<p>My first Bird email.</p>",
1332
1331
  * });
1333
1332
  * console.log(msg.id, msg.status); // "em_…", "accepted"
1334
- * // bird:snippet:end email.send
1335
1333
  *
1336
1334
  * @example A richer send — cc/bcc, reply-to, tags, metadata, click-tracking off, and an idempotency key (safe to retry; the server dedupes)
1337
1335
  * await bird.email.send(
@@ -1350,7 +1348,6 @@ var EmailResource = class extends Resource {
1350
1348
  * );
1351
1349
  *
1352
1350
  * @example Branch on the typed error hierarchy
1353
- * // bird:snippet:start email.errors
1354
1351
  * import { BirdRateLimitError, BirdValidationError, BirdAPIError } from "@messagebird/sdk";
1355
1352
  *
1356
1353
  * try {
@@ -1366,10 +1363,8 @@ var EmailResource = class extends Resource {
1366
1363
  * else if (err instanceof BirdAPIError) console.error(err.code, err.requestId);
1367
1364
  * else throw err;
1368
1365
  * }
1369
- * // bird:snippet:end email.errors
1370
1366
  *
1371
1367
  * @example Errors as values with `.safe()`
1372
- * // bird:snippet:start email.safe
1373
1368
  * const { data, error } = await bird.email
1374
1369
  * .send({
1375
1370
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
@@ -1380,7 +1375,6 @@ var EmailResource = class extends Resource {
1380
1375
  * .safe();
1381
1376
  * if (error) console.error(error.message);
1382
1377
  * else console.log(data.id);
1383
- * // bird:snippet:end email.safe
1384
1378
  */
1385
1379
  send(params, options) {
1386
1380
  const body = { ...this.#defaults, ...params };
@@ -1399,7 +1393,6 @@ var EmailResource = class extends Resource {
1399
1393
  * is accepted (the API's 202). Channel defaults are applied per item.
1400
1394
  *
1401
1395
  * @example Send a batch of messages
1402
- * // bird:snippet:start email.sendBatch
1403
1396
  * const batch = await bird.email.sendBatch([
1404
1397
  * {
1405
1398
  * from: { email: "onboarding@messagebird.dev", name: "Bird" },
@@ -1415,7 +1408,6 @@ var EmailResource = class extends Resource {
1415
1408
  * },
1416
1409
  * ]);
1417
1410
  * for (const item of batch.data) console.log(item.id, item.status);
1418
- * // bird:snippet:end email.sendBatch
1419
1411
  */
1420
1412
  sendBatch(params, options) {
1421
1413
  const body = params.map((item) => ({
@@ -1432,12 +1424,10 @@ var EmailResource = class extends Resource {
1432
1424
  * Fetch a message with aggregate delivery status.
1433
1425
  *
1434
1426
  * @example
1435
- * // bird:snippet:start email.get
1436
1427
  * const msg = await bird.email.get("em_abc123");
1437
1428
  * msg.status; // "accepted" | "processed" | "delivered" | "bounced" | …
1438
1429
  * msg.delivered_count;
1439
1430
  * msg.bounced_count;
1440
- * // bird:snippet:end email.get
1441
1431
  */
1442
1432
  get(messageId, options) {
1443
1433
  return this.call(
@@ -1456,14 +1446,10 @@ var EmailResource = class extends Resource {
1456
1446
  * walks every message across all pages.
1457
1447
  *
1458
1448
  * @example Iterate every message, or take one page
1459
- * // bird:snippet:start email.list.paginate
1460
- * // bird:snippet:start email.list.iterate
1461
1449
  * for await (const message of bird.email.list({ status: "bounced" })) {
1462
1450
  * console.log(message.id);
1463
1451
  * }
1464
- * // bird:snippet:end email.list.iterate
1465
1452
  * const page = await bird.email.list({ limit: 50 }); // page.data, page.next_cursor
1466
- * // bird:snippet:end email.list.paginate
1467
1453
  */
1468
1454
  list(query, options) {
1469
1455
  return this.paginated(
@@ -1497,11 +1483,9 @@ var WebhooksResource = class {
1497
1483
  * event can't break an older SDK.
1498
1484
  *
1499
1485
  * @example One call verifies the signature and returns the typed event
1500
- * // bird:snippet:start webhook.unwrap
1501
1486
  * // Pass the RAW request body; set the secret via new BirdClient({ webhooks: { secret } }).
1502
1487
  * const event = bird.webhooks.unwrap(rawBody, headers);
1503
1488
  * console.log(event.type); // discriminated union — narrow on event.type
1504
- * // bird:snippet:end webhook.unwrap
1505
1489
  *
1506
1490
  * @example Verify and dispatch — pass the raw request body, never the parsed JSON
1507
1491
  * // new BirdClient({ apiKey, webhooks: { secret } })
@@ -1593,7 +1577,12 @@ var BirdClient = class {
1593
1577
  this.#headers = {
1594
1578
  ...opts.defaultHeaders,
1595
1579
  Authorization: `Bearer ${opts.apiKey}`,
1596
- "User-Agent": `bird-sdk-js/${"0.2.0"}`
1580
+ "User-Agent": `bird-sdk-js/${"0.2.1"}`,
1581
+ // X-Bird-* client-identity headers (ADR-0067): the API attributes the SDK
1582
+ // surface from these, not the User-Agent. Edge-safe, so no os/arch/runtime
1583
+ // (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"
1597
1586
  };
1598
1587
  this.#client = createClient(
1599
1588
  createConfig({
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 * // bird:snippet:start email.send\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 * // bird:snippet:end email.send\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 * // bird:snippet:start email.errors\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 * // bird:snippet:end email.errors\n *\n * @example Errors as values with `.safe()`\n * // bird:snippet:start email.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 * // bird:snippet:end email.safe\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 * // bird:snippet:start email.sendBatch\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 * // bird:snippet:end email.sendBatch\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 * // bird:snippet:start email.get\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 * // bird:snippet:end email.get\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 * // bird:snippet:start email.list.paginate\n * // bird:snippet:start email.list.iterate\n * for await (const message of bird.email.list({ status: \"bounced\" })) {\n * console.log(message.id);\n * }\n * // bird:snippet:end email.list.iterate\n * const page = await bird.email.list({ limit: 50 }); // page.data, page.next_cursor\n * // bird:snippet:end email.list.paginate\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 * // bird:snippet:start webhook.unwrap\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 * // bird:snippet:end webhook.unwrap\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 * // bird:snippet:start 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 * // bird:snippet:end client.options\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 };\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/** 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@messagebird/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Official TypeScript SDK for the Bird API.",
5
5
  "license": "MIT",
6
6
  "author": "Bird",
@@ -57,6 +57,6 @@
57
57
  "@hey-api/openapi-ts": "0.97.1",
58
58
  "tsup": "8.5.1",
59
59
  "typescript": "6.0.3",
60
- "vitest": "4.1.6"
60
+ "vitest": "4.1.9"
61
61
  }
62
62
  }