From 7ed43f66e559e47c257c446771094f554e622801 Mon Sep 17 00:00:00 2001
From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com>
Date: Fri, 3 Jul 2026 12:00:52 +0000
Subject: [PATCH] [fern-generated] Update SDK
Generated by Fern
CLI Version: unknown
Generators:
- fernapi/fern-typescript-sdk: 3.75.3
---
.fern/metadata.json | 12 +-
.fern/replay.lock | 10 +
.fernignore | 3 +
.gitattributes | 1 +
package.json | 24 +-
pnpm-lock.yaml | 756 ++++++++----------
reference.md | 404 +++++++++-
src/BaseClient.ts | 8 +-
src/Client.ts | 12 +
src/api/errors/BadRequestError.ts | 2 +-
src/api/errors/ConflictError.ts | 2 +-
src/api/errors/ExpectationFailedError.ts | 2 +-
src/api/errors/FailedDependencyError.ts | 2 +-
src/api/errors/ForbiddenError.ts | 2 +-
src/api/errors/InternalServerError.ts | 2 +-
src/api/errors/MethodNotAllowedError.ts | 2 +-
src/api/errors/NotFoundError.ts | 2 +-
src/api/errors/PaymentRequiredError.ts | 2 +-
src/api/errors/PreconditionFailedError.ts | 2 +-
src/api/errors/TooEarlyError.ts | 2 +-
src/api/errors/TooManyRequestsError.ts | 2 +-
src/api/errors/UnauthorizedError.ts | 2 +-
src/api/errors/UnprocessableEntityError.ts | 2 +-
src/api/errors/UnsupportedMediaTypeError.ts | 2 +-
src/api/resources/balance/client/Client.ts | 6 +-
.../resources/consentGroups/client/Client.ts | 425 ++++++++++
.../resources/consentGroups/client/index.ts | 1 +
.../requests/CreateConsentGroupRequest.ts | 28 +
.../requests/DeleteConsentGroupRequest.ts | 12 +
.../client/requests/GetConsentGroupRequest.ts | 12 +
.../requests/GetConsentGroupsRequest.ts | 20 +
.../requests/UpdateConsentGroupRequest.ts | 27 +
.../consentGroups/client/requests/index.ts | 5 +
src/api/resources/consentGroups/exports.ts | 4 +
src/api/resources/consentGroups/index.ts | 2 +
.../GetConsentGroupsRequestSignupMode.ts | 8 +
.../resources/consentGroups/types/index.ts | 1 +
.../client/requests/ImportContactsRequest.ts | 2 +
.../contacts/types/GetContactInfoResponse.ts | 6 +-
.../contacts/types/GetContactStatsResponse.ts | 2 +-
src/api/resources/deals/client/Client.ts | 6 +
.../client/requests/GetCrmDealsRequest.ts | 6 +
.../types/CreateBatchOrderResponse.ts | 4 +-
src/api/resources/index.ts | 5 +
.../GetTransacBlockedContactsResponse.ts | 2 +-
src/api/resources/wallet/client/Client.ts | 115 +++
src/api/resources/wallet/client/index.ts | 1 +
.../GetWalletPassInstallUrlRequest.ts | 15 +
.../resources/wallet/client/requests/index.ts | 1 +
src/api/resources/wallet/exports.ts | 4 +
src/api/resources/wallet/index.ts | 1 +
src/api/types/ConsentGroup.ts | 32 +
src/api/types/ConsentGroupItem.ts | 20 +
src/api/types/ConsentGroupsListResponse.ts | 17 +
src/api/types/GetCampaignStats.ts | 22 +-
src/api/types/GetContactDetails.ts | 4 +
src/api/types/WalletPassInstallUrl.ts | 6 +
src/api/types/index.ts | 4 +
src/core/fetcher/Headers.ts | 8 +-
src/core/fetcher/getResponseBody.ts | 12 +
src/core/fetcher/signals.ts | 11 +-
src/core/url/qs.ts | 4 +-
src/errors/BrevoError.ts | 6 +-
src/errors/BrevoTimeoutError.ts | 14 +-
src/version.ts | 2 +-
tests/unit/fetcher/createRequestUrl.test.ts | 2 +-
tests/unit/fetcher/getResponseBody.test.ts | 26 +
tests/unit/fetcher/signals.test.ts | 45 ++
.../encodeAsFormParameter.test.ts | 2 -
tests/unit/url/qs.test.ts | 4 +-
tests/wire/consentGroups.test.ts | 483 +++++++++++
tests/wire/contacts.test.ts | 6 +
tests/wire/ecommerce.test.ts | 2 +-
tests/wire/wallet.test.ts | 160 ++++
74 files changed, 2393 insertions(+), 480 deletions(-)
create mode 100644 .fern/replay.lock
create mode 100644 .gitattributes
create mode 100644 src/api/resources/consentGroups/client/Client.ts
create mode 100644 src/api/resources/consentGroups/client/index.ts
create mode 100644 src/api/resources/consentGroups/client/requests/CreateConsentGroupRequest.ts
create mode 100644 src/api/resources/consentGroups/client/requests/DeleteConsentGroupRequest.ts
create mode 100644 src/api/resources/consentGroups/client/requests/GetConsentGroupRequest.ts
create mode 100644 src/api/resources/consentGroups/client/requests/GetConsentGroupsRequest.ts
create mode 100644 src/api/resources/consentGroups/client/requests/UpdateConsentGroupRequest.ts
create mode 100644 src/api/resources/consentGroups/client/requests/index.ts
create mode 100644 src/api/resources/consentGroups/exports.ts
create mode 100644 src/api/resources/consentGroups/index.ts
create mode 100644 src/api/resources/consentGroups/types/GetConsentGroupsRequestSignupMode.ts
create mode 100644 src/api/resources/consentGroups/types/index.ts
create mode 100644 src/api/resources/wallet/client/Client.ts
create mode 100644 src/api/resources/wallet/client/index.ts
create mode 100644 src/api/resources/wallet/client/requests/GetWalletPassInstallUrlRequest.ts
create mode 100644 src/api/resources/wallet/client/requests/index.ts
create mode 100644 src/api/resources/wallet/exports.ts
create mode 100644 src/api/resources/wallet/index.ts
create mode 100644 src/api/types/ConsentGroup.ts
create mode 100644 src/api/types/ConsentGroupItem.ts
create mode 100644 src/api/types/ConsentGroupsListResponse.ts
create mode 100644 src/api/types/WalletPassInstallUrl.ts
create mode 100644 tests/wire/consentGroups.test.ts
create mode 100644 tests/wire/wallet.test.ts
diff --git a/.fern/metadata.json b/.fern/metadata.json
index 2da9291..164a9cb 100644
--- a/.fern/metadata.json
+++ b/.fern/metadata.json
@@ -1,7 +1,7 @@
{
- "cliVersion": "4.103.1",
+ "cliVersion": "5.64.3",
"generatorName": "fernapi/fern-typescript-sdk",
- "generatorVersion": "3.70.6",
+ "generatorVersion": "3.75.3",
"generatorConfig": {
"generateWireTests": true,
"namespaceExport": "Brevo",
@@ -15,9 +15,9 @@
}
}
},
- "originGitCommit": "1934b60b480a426232f9443e7831353a6f965651",
- "originGitCommitIsDirty": true,
+ "originGitCommit": "68600965b5cf1b4868a3929a76f0504425d951ad",
+ "originGitCommitIsDirty": false,
"invokedBy": "manual",
- "requestedVersion": "6.0.1",
- "sdkVersion": "6.0.1"
+ "requestedVersion": "6.0.2",
+ "sdkVersion": "6.0.2"
}
diff --git a/.fern/replay.lock b/.fern/replay.lock
new file mode 100644
index 0000000..1d64569
--- /dev/null
+++ b/.fern/replay.lock
@@ -0,0 +1,10 @@
+# DO NOT EDIT MANUALLY - Managed by Fern Replay
+version: "1.0"
+generations:
+ - commit_sha: dd2cccd1b4a13ccb01206af9bcca53d8365cf8e3
+ tree_hash: 15342dab0d34c2f4f7678d42e42b630921160667
+ timestamp: 2026-07-03T12:00:51.160Z
+ cli_version: unknown
+ generator_versions: {}
+current_generation: dd2cccd1b4a13ccb01206af9bcca53d8365cf8e3
+patches: []
diff --git a/.fernignore b/.fernignore
index 8692c48..958d036 100644
--- a/.fernignore
+++ b/.fernignore
@@ -2,3 +2,6 @@
README.md
banner.png
changelog.md
+.fern/replay.lock
+.fern/replay.yml
+.gitattributes
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..74928d6
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+.fern/replay.lock linguist-generated=true
diff --git a/package.json b/package.json
index 62ef890..ebd4dec 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@getbrevo/brevo",
- "version": "6.0.1",
+ "version": "6.0.2",
"private": false,
"repository": {
"type": "git",
@@ -132,6 +132,17 @@
},
"default": "./dist/cjs/api/resources/contacts/exports.js"
},
+ "./consentGroups": {
+ "import": {
+ "types": "./dist/esm/api/resources/consentGroups/exports.d.mts",
+ "default": "./dist/esm/api/resources/consentGroups/exports.mjs"
+ },
+ "require": {
+ "types": "./dist/cjs/api/resources/consentGroups/exports.d.ts",
+ "default": "./dist/cjs/api/resources/consentGroups/exports.js"
+ },
+ "default": "./dist/cjs/api/resources/consentGroups/exports.js"
+ },
"./conversations": {
"import": {
"types": "./dist/esm/api/resources/conversations/exports.d.mts",
@@ -242,6 +253,17 @@
},
"default": "./dist/cjs/api/resources/tier/exports.js"
},
+ "./wallet": {
+ "import": {
+ "types": "./dist/esm/api/resources/wallet/exports.d.mts",
+ "default": "./dist/esm/api/resources/wallet/exports.mjs"
+ },
+ "require": {
+ "types": "./dist/cjs/api/resources/wallet/exports.d.ts",
+ "default": "./dist/cjs/api/resources/wallet/exports.js"
+ },
+ "default": "./dist/cjs/api/resources/wallet/exports.js"
+ },
"./emailCampaigns": {
"import": {
"types": "./dist/esm/api/resources/emailCampaigns/exports.d.mts",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index de64b6a..ea5ae6e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,22 +13,22 @@ importers:
version: 2.4.10
'@types/node':
specifier: ^20.0.0
- version: 20.19.41
+ version: 20.19.43
msw:
specifier: 2.11.2
- version: 2.11.2(@types/node@20.19.41)(typescript@5.9.3)
+ version: 2.11.2(@types/node@20.19.43)(typescript@5.9.3)
ts-loader:
specifier: ^9.5.4
- version: 9.5.7(typescript@5.9.3)(webpack@5.106.2)
+ version: 9.6.2(typescript@5.9.3)(webpack@5.108.3)
typescript:
specifier: ~5.9.3
version: 5.9.3
vitest:
specifier: ^4.1.1
- version: 4.1.6(@types/node@20.19.41)(msw@2.11.2(@types/node@20.19.41)(typescript@5.9.3))(vite@8.0.12(@types/node@20.19.41)(terser@5.47.1))
+ version: 4.1.9(@types/node@20.19.43)(msw@2.11.2(@types/node@20.19.43)(typescript@5.9.3))(vite@8.1.3(@types/node@20.19.43)(terser@5.48.0))
webpack:
specifier: ^5.105.4
- version: 5.106.2
+ version: 5.108.3
packages:
@@ -95,14 +95,14 @@ packages:
'@bundled-es-modules/statuses@1.0.1':
resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
- '@emnapi/core@1.10.0':
- resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
- '@emnapi/runtime@1.10.0':
- resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
- '@emnapi/wasi-threads@1.2.1':
- resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
'@inquirer/ansi@1.0.2':
resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
@@ -159,8 +159,8 @@ packages:
resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==}
engines: {node: '>=18'}
- '@napi-rs/wasm-runtime@1.1.4':
- resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
peerDependencies:
'@emnapi/core': ^1.7.1
'@emnapi/runtime': ^1.7.1
@@ -174,112 +174,112 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@oxc-project/types@0.129.0':
- resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==}
+ '@oxc-project/types@0.138.0':
+ resolution: {integrity: sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==}
- '@rolldown/binding-android-arm64@1.0.0':
- resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==}
+ '@rolldown/binding-android-arm64@1.1.4':
+ resolution: {integrity: sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rolldown/binding-darwin-arm64@1.0.0':
- resolution: {integrity: sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==}
+ '@rolldown/binding-darwin-arm64@1.1.4':
+ resolution: {integrity: sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.0.0':
- resolution: {integrity: sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==}
+ '@rolldown/binding-darwin-x64@1.1.4':
+ resolution: {integrity: sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@rolldown/binding-freebsd-x64@1.0.0':
- resolution: {integrity: sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==}
+ '@rolldown/binding-freebsd-x64@1.1.4':
+ resolution: {integrity: sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0':
- resolution: {integrity: sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.4':
+ resolution: {integrity: sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm64-gnu@1.0.0':
- resolution: {integrity: sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==}
+ '@rolldown/binding-linux-arm64-gnu@1.1.4':
+ resolution: {integrity: sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-arm64-musl@1.0.0':
- resolution: {integrity: sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==}
+ '@rolldown/binding-linux-arm64-musl@1.1.4':
+ resolution: {integrity: sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rolldown/binding-linux-ppc64-gnu@1.0.0':
- resolution: {integrity: sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==}
+ '@rolldown/binding-linux-ppc64-gnu@1.1.4':
+ resolution: {integrity: sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-s390x-gnu@1.0.0':
- resolution: {integrity: sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==}
+ '@rolldown/binding-linux-s390x-gnu@1.1.4':
+ resolution: {integrity: sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-x64-gnu@1.0.0':
- resolution: {integrity: sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==}
+ '@rolldown/binding-linux-x64-gnu@1.1.4':
+ resolution: {integrity: sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-x64-musl@1.0.0':
- resolution: {integrity: sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==}
+ '@rolldown/binding-linux-x64-musl@1.1.4':
+ resolution: {integrity: sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rolldown/binding-openharmony-arm64@1.0.0':
- resolution: {integrity: sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==}
+ '@rolldown/binding-openharmony-arm64@1.1.4':
+ resolution: {integrity: sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-wasm32-wasi@1.0.0':
- resolution: {integrity: sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==}
+ '@rolldown/binding-wasm32-wasi@1.1.4':
+ resolution: {integrity: sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
- '@rolldown/binding-win32-arm64-msvc@1.0.0':
- resolution: {integrity: sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==}
+ '@rolldown/binding-win32-arm64-msvc@1.1.4':
+ resolution: {integrity: sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.0':
- resolution: {integrity: sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==}
+ '@rolldown/binding-win32-x64-msvc@1.1.4':
+ resolution: {integrity: sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@rolldown/pluginutils@1.0.0':
- resolution: {integrity: sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==}
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
- '@tybys/wasm-util@0.10.2':
- resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
@@ -290,29 +290,23 @@ packages:
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
- '@types/eslint-scope@3.7.7':
- resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
-
- '@types/eslint@9.6.1':
- resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
-
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/node@20.19.41':
- resolution: {integrity: sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==}
+ '@types/node@20.19.43':
+ resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==}
'@types/statuses@2.0.6':
resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
- '@vitest/expect@4.1.6':
- resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==}
+ '@vitest/expect@4.1.9':
+ resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==}
- '@vitest/mocker@4.1.6':
- resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==}
+ '@vitest/mocker@4.1.9':
+ resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -322,20 +316,20 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.1.6':
- resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==}
+ '@vitest/pretty-format@4.1.9':
+ resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==}
- '@vitest/runner@4.1.6':
- resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==}
+ '@vitest/runner@4.1.9':
+ resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==}
- '@vitest/snapshot@4.1.6':
- resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==}
+ '@vitest/snapshot@4.1.9':
+ resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==}
- '@vitest/spy@4.1.6':
- resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==}
+ '@vitest/spy@4.1.9':
+ resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==}
- '@vitest/utils@4.1.6':
- resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==}
+ '@vitest/utils@4.1.9':
+ resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==}
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -394,8 +388,8 @@ packages:
peerDependencies:
acorn: ^8.14.0
- acorn@8.16.0:
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ acorn@8.17.0:
+ resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -427,25 +421,21 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
- baseline-browser-mapping@2.10.29:
- resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==}
+ baseline-browser-mapping@2.10.41:
+ resolution: {integrity: sha512-WwS7MHhqGHHlaVsqRZnhvCEMS0owDX+SxRlve7JkuH7My1Ara3ZriTmCQupPfYjxMZ8I/tgxtJYr2t7taHaH4A==}
engines: {node: '>=6.0.0'}
hasBin: true
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.28.2:
- resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
+ browserslist@4.28.4:
+ resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- caniuse-lite@1.0.30001792:
- resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==}
+ caniuse-lite@1.0.30001800:
+ resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==}
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
@@ -488,18 +478,18 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
- electron-to-chromium@1.5.353:
- resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==}
+ electron-to-chromium@1.5.385:
+ resolution: {integrity: sha512-78sa/M08MNAYHQfjoWMvOlKQqZ0ElhSm/L5HNUc96VZ3b+KvDVnngFm8sYQy0XrhTRgAhggHr5abA7yTvRdo4Q==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- enhanced-resolve@5.21.3:
- resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==}
+ enhanced-resolve@5.24.1:
+ resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==}
engines: {node: '>=10.13.0'}
- es-module-lexer@2.1.0:
- resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==}
+ es-module-lexer@2.3.0:
+ resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
@@ -528,15 +518,15 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- expect-type@1.3.0:
- resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ expect-type@1.4.0:
+ resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
engines: {node: '>=12.0.0'}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-uri@3.1.2:
- resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==}
+ fast-uri@3.1.3:
+ resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
@@ -547,10 +537,6 @@ packages:
picomatch:
optional: true
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -560,14 +546,11 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphql@16.14.0:
- resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==}
+ graphql@16.14.2:
+ resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
has-flag@4.0.0:
@@ -584,10 +567,6 @@ packages:
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
@@ -679,14 +658,53 @@ packages:
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
+ minimizer-webpack-plugin@5.6.1:
+ resolution: {integrity: sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@minify-html/node': '*'
+ '@swc/core': '*'
+ '@swc/css': '*'
+ '@swc/html': '*'
+ clean-css: '*'
+ cssnano: '*'
+ csso: '*'
+ esbuild: '*'
+ html-minifier-terser: '*'
+ lightningcss: '*'
+ postcss: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@minify-html/node':
+ optional: true
+ '@swc/core':
+ optional: true
+ '@swc/css':
+ optional: true
+ '@swc/html':
+ optional: true
+ clean-css:
+ optional: true
+ cssnano:
+ optional: true
+ csso:
+ optional: true
+ esbuild:
+ optional: true
+ html-minifier-terser:
+ optional: true
+ lightningcss:
+ optional: true
+ postcss:
+ optional: true
+ uglify-js:
+ optional: true
+
msw@2.11.2:
resolution: {integrity: sha512-MI54hLCsrMwiflkcqlgYYNJJddY5/+S0SnONvhv1owOplvqohKSQyGejpNdUGyCwgs4IH7PqaNbPw/sKOEze9Q==}
engines: {node: '>=18'}
@@ -701,19 +719,21 @@ packages:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
engines: {node: ^18.17.0 || >=20.5.0}
- nanoid@3.3.12:
- resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- node-releases@2.0.44:
- resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==}
+ node-releases@2.0.50:
+ resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==}
+ engines: {node: '>=18'}
- obug@2.1.1:
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+ obug@2.1.3:
+ resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==}
+ engines: {node: '>=12.20.0'}
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
@@ -727,16 +747,12 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- picomatch@2.3.2:
- resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.4:
- resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ picomatch@4.0.5:
+ resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
engines: {node: '>=12'}
- postcss@8.5.14:
- resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==}
+ postcss@8.5.16:
+ resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==}
engines: {node: ^10 || ^12 || >=14}
require-directory@2.1.1:
@@ -750,8 +766,8 @@ packages:
rettime@0.7.0:
resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==}
- rolldown@1.0.0:
- resolution: {integrity: sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==}
+ rolldown@1.1.4:
+ resolution: {integrity: sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -759,11 +775,6 @@ packages:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
- semver@7.8.0:
- resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==}
- engines: {node: '>=10'}
- hasBin: true
-
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -819,90 +830,47 @@ packages:
resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
engines: {node: '>=6'}
- terser-webpack-plugin@5.6.0:
- resolution: {integrity: sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- '@minify-html/node': '*'
- '@swc/core': '*'
- '@swc/css': '*'
- '@swc/html': '*'
- clean-css: '*'
- cssnano: '*'
- csso: '*'
- esbuild: '*'
- html-minifier-terser: '*'
- lightningcss: '*'
- postcss: '*'
- uglify-js: '*'
- webpack: ^5.1.0
- peerDependenciesMeta:
- '@minify-html/node':
- optional: true
- '@swc/core':
- optional: true
- '@swc/css':
- optional: true
- '@swc/html':
- optional: true
- clean-css:
- optional: true
- cssnano:
- optional: true
- csso:
- optional: true
- esbuild:
- optional: true
- html-minifier-terser:
- optional: true
- lightningcss:
- optional: true
- postcss:
- optional: true
- uglify-js:
- optional: true
-
- terser@5.47.1:
- resolution: {integrity: sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw==}
+ terser@5.48.0:
+ resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==}
engines: {node: '>=10'}
hasBin: true
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@1.1.2:
- resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==}
+ tinyexec@1.2.4:
+ resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
engines: {node: '>=18'}
- tinyglobby@0.2.16:
- resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
tinyrainbow@3.1.0:
resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines: {node: '>=14.0.0'}
- tldts-core@7.0.30:
- resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==}
+ tldts-core@7.4.6:
+ resolution: {integrity: sha512-TkQNGJIhlEphpHCjKodMTSe23egUZr/g+flI2qkLgiJ/maAzSgXypSLRTNH3nCmqgayEmtcJBiLcfODSAr1xoA==}
- tldts@7.0.30:
- resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==}
+ tldts@7.4.6:
+ resolution: {integrity: sha512-rbP0Gyx8b3Ae9yO//CU2wbSnQNoQ66m1nJdSbSHmnwKwzkkz/u8mERYU8T2rmlmy+bJvRNn84yNCW8gYqox44Q==}
hasBin: true
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
tough-cookie@6.0.1:
resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==}
engines: {node: '>=16'}
- ts-loader@9.5.7:
- resolution: {integrity: sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==}
+ ts-loader@9.6.2:
+ resolution: {integrity: sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==}
engines: {node: '>=12.0.0'}
peerDependencies:
+ loader-utils: '*'
typescript: '*'
- webpack: ^5.0.0
+ webpack: ^4.0.0 || ^5.0.0
+ peerDependenciesMeta:
+ loader-utils:
+ optional: true
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -925,13 +893,13 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
- vite@8.0.12:
- resolution: {integrity: sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==}
+ vite@8.1.3:
+ resolution: {integrity: sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
- '@vitejs/devtools': ^0.1.18
+ '@vitejs/devtools': ^0.3.0
esbuild: ^0.27.0 || ^0.28.0
jiti: '>=1.21.0'
less: ^4.0.0
@@ -968,20 +936,20 @@ packages:
yaml:
optional: true
- vitest@4.1.6:
- resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==}
+ vitest@4.1.9:
+ resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.1.6
- '@vitest/browser-preview': 4.1.6
- '@vitest/browser-webdriverio': 4.1.6
- '@vitest/coverage-istanbul': 4.1.6
- '@vitest/coverage-v8': 4.1.6
- '@vitest/ui': 4.1.6
+ '@vitest/browser-playwright': 4.1.9
+ '@vitest/browser-preview': 4.1.9
+ '@vitest/browser-webdriverio': 4.1.9
+ '@vitest/coverage-istanbul': 4.1.9
+ '@vitest/coverage-v8': 4.1.9
+ '@vitest/ui': 4.1.9
happy-dom: '*'
jsdom: '*'
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1009,16 +977,16 @@ packages:
jsdom:
optional: true
- watchpack@2.5.1:
- resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
+ watchpack@2.5.2:
+ resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==}
engines: {node: '>=10.13.0'}
- webpack-sources@3.4.1:
- resolution: {integrity: sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==}
+ webpack-sources@3.5.0:
+ resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==}
engines: {node: '>=10.13.0'}
- webpack@5.106.2:
- resolution: {integrity: sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==}
+ webpack@5.108.3:
+ resolution: {integrity: sha512-hOpaCHmQVVY66IVTjofnH14IgSdmod2aquSGHGuYig/OIdWge01Hk2Wt988DZcwXumFUT4+FvJY5N+ikl8o/ww==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -1048,8 +1016,8 @@ packages:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ yargs@17.7.3:
+ resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==}
engines: {node: '>=12'}
yoctocolors-cjs@2.1.3:
@@ -1101,49 +1069,49 @@ snapshots:
dependencies:
statuses: 2.0.2
- '@emnapi/core@1.10.0':
+ '@emnapi/core@1.11.1':
dependencies:
- '@emnapi/wasi-threads': 1.2.1
+ '@emnapi/wasi-threads': 1.2.2
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.10.0':
+ '@emnapi/runtime@1.11.1':
dependencies:
tslib: 2.8.1
optional: true
- '@emnapi/wasi-threads@1.2.1':
+ '@emnapi/wasi-threads@1.2.2':
dependencies:
tslib: 2.8.1
optional: true
'@inquirer/ansi@1.0.2': {}
- '@inquirer/confirm@5.1.21(@types/node@20.19.41)':
+ '@inquirer/confirm@5.1.21(@types/node@20.19.43)':
dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.41)
- '@inquirer/type': 3.0.10(@types/node@20.19.41)
+ '@inquirer/core': 10.3.2(@types/node@20.19.43)
+ '@inquirer/type': 3.0.10(@types/node@20.19.43)
optionalDependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
- '@inquirer/core@10.3.2(@types/node@20.19.41)':
+ '@inquirer/core@10.3.2(@types/node@20.19.43)':
dependencies:
'@inquirer/ansi': 1.0.2
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@20.19.41)
+ '@inquirer/type': 3.0.10(@types/node@20.19.43)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
'@inquirer/figures@1.0.15': {}
- '@inquirer/type@3.0.10(@types/node@20.19.41)':
+ '@inquirer/type@3.0.10(@types/node@20.19.43)':
optionalDependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -1173,11 +1141,11 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
- '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
- '@emnapi/core': 1.10.0
- '@emnapi/runtime': 1.10.0
- '@tybys/wasm-util': 0.10.2
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
optional: true
'@open-draft/deferred-promise@2.2.0': {}
@@ -1189,62 +1157,62 @@ snapshots:
'@open-draft/until@2.1.0': {}
- '@oxc-project/types@0.129.0': {}
+ '@oxc-project/types@0.138.0': {}
- '@rolldown/binding-android-arm64@1.0.0':
+ '@rolldown/binding-android-arm64@1.1.4':
optional: true
- '@rolldown/binding-darwin-arm64@1.0.0':
+ '@rolldown/binding-darwin-arm64@1.1.4':
optional: true
- '@rolldown/binding-darwin-x64@1.0.0':
+ '@rolldown/binding-darwin-x64@1.1.4':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0':
+ '@rolldown/binding-freebsd-x64@1.1.4':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0':
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.4':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0':
+ '@rolldown/binding-linux-arm64-gnu@1.1.4':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0':
+ '@rolldown/binding-linux-arm64-musl@1.1.4':
optional: true
- '@rolldown/binding-linux-ppc64-gnu@1.0.0':
+ '@rolldown/binding-linux-ppc64-gnu@1.1.4':
optional: true
- '@rolldown/binding-linux-s390x-gnu@1.0.0':
+ '@rolldown/binding-linux-s390x-gnu@1.1.4':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0':
+ '@rolldown/binding-linux-x64-gnu@1.1.4':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0':
+ '@rolldown/binding-linux-x64-musl@1.1.4':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0':
+ '@rolldown/binding-openharmony-arm64@1.1.4':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0':
+ '@rolldown/binding-wasm32-wasi@1.1.4':
dependencies:
- '@emnapi/core': 1.10.0
- '@emnapi/runtime': 1.10.0
- '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.0':
+ '@rolldown/binding-win32-arm64-msvc@1.1.4':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.0':
+ '@rolldown/binding-win32-x64-msvc@1.1.4':
optional: true
- '@rolldown/pluginutils@1.0.0': {}
+ '@rolldown/pluginutils@1.0.1': {}
'@standard-schema/spec@1.1.0': {}
- '@tybys/wasm-util@0.10.2':
+ '@tybys/wasm-util@0.10.3':
dependencies:
tslib: 2.8.1
optional: true
@@ -1258,65 +1226,55 @@ snapshots:
'@types/deep-eql@4.0.2': {}
- '@types/eslint-scope@3.7.7':
- dependencies:
- '@types/eslint': 9.6.1
- '@types/estree': 1.0.9
-
- '@types/eslint@9.6.1':
- dependencies:
- '@types/estree': 1.0.9
- '@types/json-schema': 7.0.15
-
'@types/estree@1.0.9': {}
'@types/json-schema@7.0.15': {}
- '@types/node@20.19.41':
+ '@types/node@20.19.43':
dependencies:
undici-types: 6.21.0
'@types/statuses@2.0.6': {}
- '@vitest/expect@4.1.6':
+ '@vitest/expect@4.1.9':
dependencies:
'@standard-schema/spec': 1.1.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.1.6
- '@vitest/utils': 4.1.6
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
chai: 6.2.2
tinyrainbow: 3.1.0
- '@vitest/mocker@4.1.6(msw@2.11.2(@types/node@20.19.41)(typescript@5.9.3))(vite@8.0.12(@types/node@20.19.41)(terser@5.47.1))':
+ '@vitest/mocker@4.1.9(msw@2.11.2(@types/node@20.19.43)(typescript@5.9.3))(vite@8.1.3(@types/node@20.19.43)(terser@5.48.0))':
dependencies:
- '@vitest/spy': 4.1.6
+ '@vitest/spy': 4.1.9
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.11.2(@types/node@20.19.41)(typescript@5.9.3)
- vite: 8.0.12(@types/node@20.19.41)(terser@5.47.1)
+ msw: 2.11.2(@types/node@20.19.43)(typescript@5.9.3)
+ vite: 8.1.3(@types/node@20.19.43)(terser@5.48.0)
- '@vitest/pretty-format@4.1.6':
+ '@vitest/pretty-format@4.1.9':
dependencies:
tinyrainbow: 3.1.0
- '@vitest/runner@4.1.6':
+ '@vitest/runner@4.1.9':
dependencies:
- '@vitest/utils': 4.1.6
+ '@vitest/utils': 4.1.9
pathe: 2.0.3
- '@vitest/snapshot@4.1.6':
+ '@vitest/snapshot@4.1.9':
dependencies:
- '@vitest/pretty-format': 4.1.6
- '@vitest/utils': 4.1.6
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/utils': 4.1.9
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.1.6': {}
+ '@vitest/spy@4.1.9': {}
- '@vitest/utils@4.1.6':
+ '@vitest/utils@4.1.9':
dependencies:
- '@vitest/pretty-format': 4.1.6
+ '@vitest/pretty-format': 4.1.9
convert-source-map: 2.0.0
tinyrainbow: 3.1.0
@@ -1400,11 +1358,11 @@ snapshots:
'@xtuc/long@4.2.2': {}
- acorn-import-phases@1.0.4(acorn@8.16.0):
+ acorn-import-phases@1.0.4(acorn@8.17.0):
dependencies:
- acorn: 8.16.0
+ acorn: 8.17.0
- acorn@8.16.0: {}
+ acorn@8.17.0: {}
ajv-formats@2.1.1(ajv@8.20.0):
optionalDependencies:
@@ -1418,7 +1376,7 @@ snapshots:
ajv@8.20.0:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.1.2
+ fast-uri: 3.1.3
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
@@ -1430,23 +1388,19 @@ snapshots:
assertion-error@2.0.1: {}
- baseline-browser-mapping@2.10.29: {}
-
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
+ baseline-browser-mapping@2.10.41: {}
- browserslist@4.28.2:
+ browserslist@4.28.4:
dependencies:
- baseline-browser-mapping: 2.10.29
- caniuse-lite: 1.0.30001792
- electron-to-chromium: 1.5.353
- node-releases: 2.0.44
- update-browserslist-db: 1.2.3(browserslist@4.28.2)
+ baseline-browser-mapping: 2.10.41
+ caniuse-lite: 1.0.30001800
+ electron-to-chromium: 1.5.385
+ node-releases: 2.0.50
+ update-browserslist-db: 1.2.3(browserslist@4.28.4)
buffer-from@1.1.2: {}
- caniuse-lite@1.0.30001792: {}
+ caniuse-lite@1.0.30001800: {}
chai@6.2.2: {}
@@ -1479,16 +1433,16 @@ snapshots:
detect-libc@2.1.2: {}
- electron-to-chromium@1.5.353: {}
+ electron-to-chromium@1.5.385: {}
emoji-regex@8.0.0: {}
- enhanced-resolve@5.21.3:
+ enhanced-resolve@5.24.1:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.3
- es-module-lexer@2.1.0: {}
+ es-module-lexer@2.3.0: {}
escalade@3.2.0: {}
@@ -1511,30 +1465,24 @@ snapshots:
events@3.3.0: {}
- expect-type@1.3.0: {}
+ expect-type@1.4.0: {}
fast-deep-equal@3.1.3: {}
- fast-uri@3.1.2: {}
+ fast-uri@3.1.3: {}
- fdir@6.5.0(picomatch@4.0.4):
+ fdir@6.5.0(picomatch@4.0.5):
optionalDependencies:
- picomatch: 4.0.4
-
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
+ picomatch: 4.0.5
fsevents@2.3.3:
optional: true
get-caller-file@2.0.5: {}
- glob-to-regexp@0.4.1: {}
-
graceful-fs@4.2.11: {}
- graphql@16.14.0: {}
+ graphql@16.14.2: {}
has-flag@4.0.0: {}
@@ -1544,11 +1492,9 @@ snapshots:
is-node-process@1.2.0: {}
- is-number@7.0.0: {}
-
jest-worker@27.5.1:
dependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -1611,24 +1557,27 @@ snapshots:
merge-stream@2.0.0: {}
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.2
-
mime-db@1.54.0: {}
- msw@2.11.2(@types/node@20.19.41)(typescript@5.9.3):
+ minimizer-webpack-plugin@5.6.1(webpack@5.108.3):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ terser: 5.48.0
+ webpack: 5.108.3
+
+ msw@2.11.2(@types/node@20.19.43)(typescript@5.9.3):
dependencies:
'@bundled-es-modules/cookie': 2.0.1
'@bundled-es-modules/statuses': 1.0.1
- '@inquirer/confirm': 5.1.21(@types/node@20.19.41)
+ '@inquirer/confirm': 5.1.21(@types/node@20.19.43)
'@mswjs/interceptors': 0.39.8
'@open-draft/deferred-promise': 2.2.0
'@open-draft/until': 2.1.0
'@types/cookie': 0.6.0
'@types/statuses': 2.0.6
- graphql: 16.14.0
+ graphql: 16.14.2
headers-polyfill: 4.0.3
is-node-process: 1.2.0
outvariant: 1.4.3
@@ -1638,7 +1587,7 @@ snapshots:
strict-event-emitter: 0.5.1
tough-cookie: 6.0.1
type-fest: 4.41.0
- yargs: 17.7.2
+ yargs: 17.7.3
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -1646,13 +1595,13 @@ snapshots:
mute-stream@2.0.0: {}
- nanoid@3.3.12: {}
+ nanoid@3.3.15: {}
neo-async@2.6.2: {}
- node-releases@2.0.44: {}
+ node-releases@2.0.50: {}
- obug@2.1.1: {}
+ obug@2.1.3: {}
outvariant@1.4.3: {}
@@ -1662,13 +1611,11 @@ snapshots:
picocolors@1.1.1: {}
- picomatch@2.3.2: {}
-
- picomatch@4.0.4: {}
+ picomatch@4.0.5: {}
- postcss@8.5.14:
+ postcss@8.5.16:
dependencies:
- nanoid: 3.3.12
+ nanoid: 3.3.15
picocolors: 1.1.1
source-map-js: 1.2.1
@@ -1678,26 +1625,26 @@ snapshots:
rettime@0.7.0: {}
- rolldown@1.0.0:
+ rolldown@1.1.4:
dependencies:
- '@oxc-project/types': 0.129.0
- '@rolldown/pluginutils': 1.0.0
+ '@oxc-project/types': 0.138.0
+ '@rolldown/pluginutils': 1.0.1
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0
- '@rolldown/binding-darwin-arm64': 1.0.0
- '@rolldown/binding-darwin-x64': 1.0.0
- '@rolldown/binding-freebsd-x64': 1.0.0
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0
- '@rolldown/binding-linux-arm64-gnu': 1.0.0
- '@rolldown/binding-linux-arm64-musl': 1.0.0
- '@rolldown/binding-linux-ppc64-gnu': 1.0.0
- '@rolldown/binding-linux-s390x-gnu': 1.0.0
- '@rolldown/binding-linux-x64-gnu': 1.0.0
- '@rolldown/binding-linux-x64-musl': 1.0.0
- '@rolldown/binding-openharmony-arm64': 1.0.0
- '@rolldown/binding-wasm32-wasi': 1.0.0
- '@rolldown/binding-win32-arm64-msvc': 1.0.0
- '@rolldown/binding-win32-x64-msvc': 1.0.0
+ '@rolldown/binding-android-arm64': 1.1.4
+ '@rolldown/binding-darwin-arm64': 1.1.4
+ '@rolldown/binding-darwin-x64': 1.1.4
+ '@rolldown/binding-freebsd-x64': 1.1.4
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.4
+ '@rolldown/binding-linux-arm64-gnu': 1.1.4
+ '@rolldown/binding-linux-arm64-musl': 1.1.4
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.4
+ '@rolldown/binding-linux-s390x-gnu': 1.1.4
+ '@rolldown/binding-linux-x64-gnu': 1.1.4
+ '@rolldown/binding-linux-x64-musl': 1.1.4
+ '@rolldown/binding-openharmony-arm64': 1.1.4
+ '@rolldown/binding-wasm32-wasi': 1.1.4
+ '@rolldown/binding-win32-arm64-msvc': 1.1.4
+ '@rolldown/binding-win32-x64-msvc': 1.1.4
schema-utils@4.3.3:
dependencies:
@@ -1706,8 +1653,6 @@ snapshots:
ajv-formats: 2.1.1(ajv@8.20.0)
ajv-keywords: 5.1.0(ajv@8.20.0)
- semver@7.8.0: {}
-
siginfo@2.0.0: {}
signal-exit@4.1.0: {}
@@ -1751,55 +1696,41 @@ snapshots:
tapable@2.3.3: {}
- terser-webpack-plugin@5.6.0(webpack@5.106.2):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.3
- terser: 5.47.1
- webpack: 5.106.2
-
- terser@5.47.1:
+ terser@5.48.0:
dependencies:
'@jridgewell/source-map': 0.3.11
- acorn: 8.16.0
+ acorn: 8.17.0
commander: 2.20.3
source-map-support: 0.5.21
tinybench@2.9.0: {}
- tinyexec@1.1.2: {}
+ tinyexec@1.2.4: {}
- tinyglobby@0.2.16:
+ tinyglobby@0.2.17:
dependencies:
- fdir: 6.5.0(picomatch@4.0.4)
- picomatch: 4.0.4
+ fdir: 6.5.0(picomatch@4.0.5)
+ picomatch: 4.0.5
tinyrainbow@3.1.0: {}
- tldts-core@7.0.30: {}
-
- tldts@7.0.30:
- dependencies:
- tldts-core: 7.0.30
+ tldts-core@7.4.6: {}
- to-regex-range@5.0.1:
+ tldts@7.4.6:
dependencies:
- is-number: 7.0.0
+ tldts-core: 7.4.6
tough-cookie@6.0.1:
dependencies:
- tldts: 7.0.30
+ tldts: 7.4.6
- ts-loader@9.5.7(typescript@5.9.3)(webpack@5.106.2):
+ ts-loader@9.6.2(typescript@5.9.3)(webpack@5.108.3):
dependencies:
chalk: 4.1.2
- enhanced-resolve: 5.21.3
- micromatch: 4.0.8
- semver: 7.8.0
+ picomatch: 4.0.5
source-map: 0.7.6
typescript: 5.9.3
- webpack: 5.106.2
+ webpack: 5.108.3
tslib@2.8.1:
optional: true
@@ -1810,84 +1741,81 @@ snapshots:
undici-types@6.21.0: {}
- update-browserslist-db@1.2.3(browserslist@4.28.2):
+ update-browserslist-db@1.2.3(browserslist@4.28.4):
dependencies:
- browserslist: 4.28.2
+ browserslist: 4.28.4
escalade: 3.2.0
picocolors: 1.1.1
- vite@8.0.12(@types/node@20.19.41)(terser@5.47.1):
+ vite@8.1.3(@types/node@20.19.43)(terser@5.48.0):
dependencies:
lightningcss: 1.32.0
- picomatch: 4.0.4
- postcss: 8.5.14
- rolldown: 1.0.0
- tinyglobby: 0.2.16
+ picomatch: 4.0.5
+ postcss: 8.5.16
+ rolldown: 1.1.4
+ tinyglobby: 0.2.17
optionalDependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
fsevents: 2.3.3
- terser: 5.47.1
-
- vitest@4.1.6(@types/node@20.19.41)(msw@2.11.2(@types/node@20.19.41)(typescript@5.9.3))(vite@8.0.12(@types/node@20.19.41)(terser@5.47.1)):
- dependencies:
- '@vitest/expect': 4.1.6
- '@vitest/mocker': 4.1.6(msw@2.11.2(@types/node@20.19.41)(typescript@5.9.3))(vite@8.0.12(@types/node@20.19.41)(terser@5.47.1))
- '@vitest/pretty-format': 4.1.6
- '@vitest/runner': 4.1.6
- '@vitest/snapshot': 4.1.6
- '@vitest/spy': 4.1.6
- '@vitest/utils': 4.1.6
- es-module-lexer: 2.1.0
- expect-type: 1.3.0
+ terser: 5.48.0
+
+ vitest@4.1.9(@types/node@20.19.43)(msw@2.11.2(@types/node@20.19.43)(typescript@5.9.3))(vite@8.1.3(@types/node@20.19.43)(terser@5.48.0)):
+ dependencies:
+ '@vitest/expect': 4.1.9
+ '@vitest/mocker': 4.1.9(msw@2.11.2(@types/node@20.19.43)(typescript@5.9.3))(vite@8.1.3(@types/node@20.19.43)(terser@5.48.0))
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/runner': 4.1.9
+ '@vitest/snapshot': 4.1.9
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ es-module-lexer: 2.3.0
+ expect-type: 1.4.0
magic-string: 0.30.21
- obug: 2.1.1
+ obug: 2.1.3
pathe: 2.0.3
- picomatch: 4.0.4
+ picomatch: 4.0.5
std-env: 4.1.0
tinybench: 2.9.0
- tinyexec: 1.1.2
- tinyglobby: 0.2.16
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
tinyrainbow: 3.1.0
- vite: 8.0.12(@types/node@20.19.41)(terser@5.47.1)
+ vite: 8.1.3(@types/node@20.19.43)(terser@5.48.0)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 20.19.41
+ '@types/node': 20.19.43
transitivePeerDependencies:
- msw
- watchpack@2.5.1:
+ watchpack@2.5.2:
dependencies:
- glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
- webpack-sources@3.4.1: {}
+ webpack-sources@3.5.0: {}
- webpack@5.106.2:
+ webpack@5.108.3:
dependencies:
- '@types/eslint-scope': 3.7.7
'@types/estree': 1.0.9
'@types/json-schema': 7.0.15
'@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.16.0
- acorn-import-phases: 1.0.4(acorn@8.16.0)
- browserslist: 4.28.2
+ acorn: 8.17.0
+ acorn-import-phases: 1.0.4(acorn@8.17.0)
+ browserslist: 4.28.4
chrome-trace-event: 1.0.4
- enhanced-resolve: 5.21.3
- es-module-lexer: 2.1.0
+ enhanced-resolve: 5.24.1
+ es-module-lexer: 2.3.0
eslint-scope: 5.1.1
events: 3.3.0
- glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
loader-runner: 4.3.2
mime-db: 1.54.0
+ minimizer-webpack-plugin: 5.6.1(webpack@5.108.3)
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.3
- terser-webpack-plugin: 5.6.0(webpack@5.106.2)
- watchpack: 2.5.1
- webpack-sources: 3.4.1
+ watchpack: 2.5.2
+ webpack-sources: 3.5.0
transitivePeerDependencies:
- '@minify-html/node'
- '@swc/core'
@@ -1923,7 +1851,7 @@ snapshots:
yargs-parser@21.1.1: {}
- yargs@17.7.2:
+ yargs@17.7.3:
dependencies:
cliui: 8.0.1
escalade: 3.2.0
diff --git a/reference.md b/reference.md
index e0541dd..47126ef 100644
--- a/reference.md
+++ b/reference.md
@@ -6627,6 +6627,341 @@ await client.contacts.getContactStats({
+
+
+
+
+## ConsentGroups
+client.consentGroups.getConsentGroups({ ...params }) -> Brevo.ConsentGroupsListResponse
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Returns a paginated list of consent groups for the account.
+
+This endpoint is only available when the Consent Groups feature is enabled for your account. Returns `403` if the feature is not activated.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.consentGroups.getConsentGroups();
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.GetConsentGroupsRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `ConsentGroupsClient.RequestOptions`
+
+
+
+
+
+
+
+
+
+
+
+client.consentGroups.createConsentGroup({ ...params }) -> Brevo.ConsentGroup
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Creates a new consent group for the account.
+
+This endpoint is only available when the Consent Groups feature is enabled for your account.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.consentGroups.createConsentGroup({
+ name: "Newsletter EU",
+ signupMode: "manual"
+});
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.CreateConsentGroupRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `ConsentGroupsClient.RequestOptions`
+
+
+
+
+
+
+
+
+
+
+
+client.consentGroups.getConsentGroup({ ...params }) -> Brevo.ConsentGroup
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Returns a single consent group by ID for the account.
+
+This endpoint is only available when the Consent Groups feature is enabled for your account.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.consentGroups.getConsentGroup({
+ id: 1000000
+});
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.GetConsentGroupRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `ConsentGroupsClient.RequestOptions`
+
+
+
+
+
+
+
+
+
+
+
+client.consentGroups.updateConsentGroup({ ...params }) -> Brevo.ConsentGroup
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Updates name, description, or signupMode of a consent group. At least one field must be provided.
+
+This endpoint is only available when the Consent Groups feature is enabled for your account.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.consentGroups.updateConsentGroup({
+ id: 1000000
+});
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.UpdateConsentGroupRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `ConsentGroupsClient.RequestOptions`
+
+
+
+
+
+
+
+
+
+
+
+client.consentGroups.deleteConsentGroup({ ...params }) -> void
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Deletes a consent group by ID and removes it from all associated contacts.
+
+This endpoint is only available when the Consent Groups feature is enabled for your account.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.consentGroups.deleteConsentGroup({
+ id: 1000000
+});
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.DeleteConsentGroupRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `ConsentGroupsClient.RequestOptions`
+
+
+
+
+
+
+
@@ -9453,7 +9788,7 @@ await client.balance.getActiveBalancesApi({
-client.balance.getBalanceDefinitionList({ ...params }) -> Brevo.GetBalanceDefinitionListResponse
+client.balance.getBalanceDefinitionList({ ...params }) -> Brevo.GetBalanceDefinitionListResponse | undefined
-
@@ -12703,6 +13038,73 @@ await client.tier.deleteTier({
+
+
+
+
+## Wallet
+client.wallet.getWalletPassInstallUrl({ ...params }) -> Brevo.WalletPassInstallUrl
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Generate a wallet installation URL for a specific contact. The returned URL points to the pass installation page and encodes the pass, contact and organization identifiers as an encrypted token, so it can be shared with the contact (email, SMS, QR code, ...) to add the pass to their Apple Wallet or Google Wallet.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```typescript
+await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000
+});
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `Brevo.GetWalletPassInstallUrlRequest`
+
+
+
+
+
+-
+
+**requestOptions:** `WalletClient.RequestOptions`
+
+
+
+
+
+
+
diff --git a/src/BaseClient.ts b/src/BaseClient.ts
index 3c5c67b..20678c8 100644
--- a/src/BaseClient.ts
+++ b/src/BaseClient.ts
@@ -25,6 +25,8 @@ export type BaseClientOptions = {
fetch?: typeof fetch;
/** Configure logging for the client. */
logging?: core.logging.LogConfig | core.logging.Logger;
+ /** Default options for SSE stream reconnection behavior. Has no effect on non-resumable endpoints. */
+ stream?: { reconnectionEnabled?: boolean; maxReconnectionAttempts?: number };
/** Override auth. Pass false to disable, a function returning auth headers, an AuthProvider, or auth options. */
auth?: AuthOption;
} & HeaderAuthProvider.AuthOptions;
@@ -40,6 +42,8 @@ export interface BaseRequestOptions {
queryParams?: Record;
/** Additional headers to include in the request. */
headers?: Record | null | undefined>;
+ /** Options for SSE stream reconnection behavior. Has no effect on non-resumable endpoints. */
+ stream?: { reconnectionEnabled?: boolean; maxReconnectionAttempts?: number };
}
export type NormalizedClientOptions = T & {
@@ -59,8 +63,8 @@ export function normalizeClientOptions {
+ ): core.HttpResponsePromise {
return core.HttpResponsePromise.fromPromise(this.__getBalanceDefinitionList(request, requestOptions));
}
private async __getBalanceDefinitionList(
request: Brevo.GetBalanceDefinitionListRequest,
requestOptions?: BalanceClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
const { pid, limit, offset, sortField, sort, version } = request;
const _queryParams: Record = {
limit,
@@ -190,7 +190,7 @@ export class BalanceClient {
});
if (_response.ok) {
return {
- data: _response.body as Brevo.GetBalanceDefinitionListResponse,
+ data: _response.body as Brevo.GetBalanceDefinitionListResponse | undefined,
rawResponse: _response.rawResponse,
};
}
diff --git a/src/api/resources/consentGroups/client/Client.ts b/src/api/resources/consentGroups/client/Client.ts
new file mode 100644
index 0000000..9c469f9
--- /dev/null
+++ b/src/api/resources/consentGroups/client/Client.ts
@@ -0,0 +1,425 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js";
+import { type NormalizedClientOptionsWithAuth, normalizeClientOptionsWithAuth } from "../../../../BaseClient.js";
+import { mergeHeaders } from "../../../../core/headers.js";
+import * as core from "../../../../core/index.js";
+import * as environments from "../../../../environments.js";
+import { handleNonStatusCodeError } from "../../../../errors/handleNonStatusCodeError.js";
+import * as errors from "../../../../errors/index.js";
+import * as Brevo from "../../../index.js";
+
+export declare namespace ConsentGroupsClient {
+ export type Options = BaseClientOptions;
+
+ export interface RequestOptions extends BaseRequestOptions {}
+}
+
+export class ConsentGroupsClient {
+ protected readonly _options: NormalizedClientOptionsWithAuth;
+
+ constructor(options: ConsentGroupsClient.Options) {
+ this._options = normalizeClientOptionsWithAuth(options);
+ }
+
+ /**
+ * Returns a paginated list of consent groups for the account.
+ *
+ * This endpoint is only available when the Consent Groups feature is enabled for your account. Returns `403` if the feature is not activated.
+ *
+ * @param {Brevo.GetConsentGroupsRequest} request
+ * @param {ConsentGroupsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.TooManyRequestsError}
+ *
+ * @example
+ * await client.consentGroups.getConsentGroups()
+ */
+ public getConsentGroups(
+ request: Brevo.GetConsentGroupsRequest = {},
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__getConsentGroups(request, requestOptions));
+ }
+
+ private async __getConsentGroups(
+ request: Brevo.GetConsentGroupsRequest = {},
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): Promise> {
+ const { limit, offset, id, name, signupMode } = request;
+ const _queryParams: Record = {
+ limit,
+ offset,
+ id,
+ name,
+ signupMode: signupMode != null ? signupMode : undefined,
+ };
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ "contacts/consent-groups",
+ ),
+ method: "GET",
+ headers: _headers,
+ queryString: core.url
+ .queryBuilder()
+ .addMany(_queryParams)
+ .mergeAdditional(requestOptions?.queryParams)
+ .build(),
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as Brevo.ConsentGroupsListResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 429:
+ throw new Brevo.TooManyRequestsError(
+ _response.error.body as Brevo.ErrorModel,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/contacts/consent-groups");
+ }
+
+ /**
+ * Creates a new consent group for the account.
+ *
+ * This endpoint is only available when the Consent Groups feature is enabled for your account.
+ *
+ * @param {Brevo.CreateConsentGroupRequest} request
+ * @param {ConsentGroupsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.ConflictError}
+ *
+ * @example
+ * await client.consentGroups.createConsentGroup({
+ * name: "Newsletter EU",
+ * signupMode: "manual"
+ * })
+ */
+ public createConsentGroup(
+ request: Brevo.CreateConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__createConsentGroup(request, requestOptions));
+ }
+
+ private async __createConsentGroup(
+ request: Brevo.CreateConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): Promise> {
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ "contacts/consent-groups",
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
+ requestType: "json",
+ body: request,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as Brevo.ConsentGroup, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 409:
+ throw new Brevo.ConflictError(_response.error.body as Brevo.ErrorModel, _response.rawResponse);
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/contacts/consent-groups");
+ }
+
+ /**
+ * Returns a single consent group by ID for the account.
+ *
+ * This endpoint is only available when the Consent Groups feature is enabled for your account.
+ *
+ * @param {Brevo.GetConsentGroupRequest} request
+ * @param {ConsentGroupsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.NotFoundError}
+ *
+ * @example
+ * await client.consentGroups.getConsentGroup({
+ * id: 1000000
+ * })
+ */
+ public getConsentGroup(
+ request: Brevo.GetConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__getConsentGroup(request, requestOptions));
+ }
+
+ private async __getConsentGroup(
+ request: Brevo.GetConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): Promise> {
+ const { id } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ `contacts/consent-groups/${core.url.encodePathParam(id)}`,
+ ),
+ method: "GET",
+ headers: _headers,
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as Brevo.ConsentGroup, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 404:
+ throw new Brevo.NotFoundError(_response.error.body as unknown, _response.rawResponse);
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/contacts/consent-groups/{id}");
+ }
+
+ /**
+ * Updates name, description, or signupMode of a consent group. At least one field must be provided.
+ *
+ * This endpoint is only available when the Consent Groups feature is enabled for your account.
+ *
+ * @param {Brevo.UpdateConsentGroupRequest} request
+ * @param {ConsentGroupsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.NotFoundError}
+ * @throws {@link Brevo.ConflictError}
+ *
+ * @example
+ * await client.consentGroups.updateConsentGroup({
+ * id: 1000000
+ * })
+ */
+ public updateConsentGroup(
+ request: Brevo.UpdateConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__updateConsentGroup(request, requestOptions));
+ }
+
+ private async __updateConsentGroup(
+ request: Brevo.UpdateConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): Promise> {
+ const { id, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ `contacts/consent-groups/${core.url.encodePathParam(id)}`,
+ ),
+ method: "PUT",
+ headers: _headers,
+ contentType: "application/json",
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as Brevo.ConsentGroup, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 404:
+ throw new Brevo.NotFoundError(_response.error.body as unknown, _response.rawResponse);
+ case 409:
+ throw new Brevo.ConflictError(_response.error.body as Brevo.ErrorModel, _response.rawResponse);
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "PUT", "/contacts/consent-groups/{id}");
+ }
+
+ /**
+ * Deletes a consent group by ID and removes it from all associated contacts.
+ *
+ * This endpoint is only available when the Consent Groups feature is enabled for your account.
+ *
+ * @param {Brevo.DeleteConsentGroupRequest} request
+ * @param {ConsentGroupsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.NotFoundError}
+ *
+ * @example
+ * await client.consentGroups.deleteConsentGroup({
+ * id: 1000000
+ * })
+ */
+ public deleteConsentGroup(
+ request: Brevo.DeleteConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__deleteConsentGroup(request, requestOptions));
+ }
+
+ private async __deleteConsentGroup(
+ request: Brevo.DeleteConsentGroupRequest,
+ requestOptions?: ConsentGroupsClient.RequestOptions,
+ ): Promise> {
+ const { id } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ `contacts/consent-groups/${core.url.encodePathParam(id)}`,
+ ),
+ method: "DELETE",
+ headers: _headers,
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: undefined, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 404:
+ throw new Brevo.NotFoundError(_response.error.body as unknown, _response.rawResponse);
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "DELETE",
+ "/contacts/consent-groups/{id}",
+ );
+ }
+}
diff --git a/src/api/resources/consentGroups/client/index.ts b/src/api/resources/consentGroups/client/index.ts
new file mode 100644
index 0000000..195f9aa
--- /dev/null
+++ b/src/api/resources/consentGroups/client/index.ts
@@ -0,0 +1 @@
+export * from "./requests/index.js";
diff --git a/src/api/resources/consentGroups/client/requests/CreateConsentGroupRequest.ts b/src/api/resources/consentGroups/client/requests/CreateConsentGroupRequest.ts
new file mode 100644
index 0000000..0676fdd
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/CreateConsentGroupRequest.ts
@@ -0,0 +1,28 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * name: "Newsletter EU",
+ * signupMode: "manual"
+ * }
+ */
+export interface CreateConsentGroupRequest {
+ /** Unique name for the consent group (max 255 characters) */
+ name: string;
+ /** Optional description (max 500 characters) */
+ description?: string;
+ /** Controls how contacts are added to the group. `manual` — contacts are added explicitly via the API. `automatic` — contacts are added automatically at signup. */
+ signupMode: CreateConsentGroupRequest.SignupMode;
+ /** Optional list of contact list IDs. Contacts from these lists will be copied once into this consent group at creation time. */
+ listIds?: number[];
+}
+
+export namespace CreateConsentGroupRequest {
+ /** Controls how contacts are added to the group. `manual` — contacts are added explicitly via the API. `automatic` — contacts are added automatically at signup. */
+ export const SignupMode = {
+ Manual: "manual",
+ Automatic: "automatic",
+ } as const;
+ export type SignupMode = (typeof SignupMode)[keyof typeof SignupMode];
+}
diff --git a/src/api/resources/consentGroups/client/requests/DeleteConsentGroupRequest.ts b/src/api/resources/consentGroups/client/requests/DeleteConsentGroupRequest.ts
new file mode 100644
index 0000000..70542df
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/DeleteConsentGroupRequest.ts
@@ -0,0 +1,12 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * id: 1000000
+ * }
+ */
+export interface DeleteConsentGroupRequest {
+ /** ID of the consent group to delete */
+ id: number;
+}
diff --git a/src/api/resources/consentGroups/client/requests/GetConsentGroupRequest.ts b/src/api/resources/consentGroups/client/requests/GetConsentGroupRequest.ts
new file mode 100644
index 0000000..3292aaf
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/GetConsentGroupRequest.ts
@@ -0,0 +1,12 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * id: 1000000
+ * }
+ */
+export interface GetConsentGroupRequest {
+ /** ID of the consent group */
+ id: number;
+}
diff --git a/src/api/resources/consentGroups/client/requests/GetConsentGroupsRequest.ts b/src/api/resources/consentGroups/client/requests/GetConsentGroupsRequest.ts
new file mode 100644
index 0000000..8fca82d
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/GetConsentGroupsRequest.ts
@@ -0,0 +1,20 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type * as Brevo from "../../../../index.js";
+
+/**
+ * @example
+ * {}
+ */
+export interface GetConsentGroupsRequest {
+ /** Maximum number of results to return (default 10, max 50) */
+ limit?: number;
+ /** Number of results to skip (default 0) */
+ offset?: number;
+ /** Filter by consent group ID */
+ id?: number;
+ /** Filter by name (case-insensitive partial match) */
+ name?: string;
+ /** Filter by signup mode */
+ signupMode?: Brevo.GetConsentGroupsRequestSignupMode;
+}
diff --git a/src/api/resources/consentGroups/client/requests/UpdateConsentGroupRequest.ts b/src/api/resources/consentGroups/client/requests/UpdateConsentGroupRequest.ts
new file mode 100644
index 0000000..0aa4dc5
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/UpdateConsentGroupRequest.ts
@@ -0,0 +1,27 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * id: 1000000
+ * }
+ */
+export interface UpdateConsentGroupRequest {
+ /** ID of the consent group to update */
+ id: number;
+ /** New name for the consent group (max 255 characters) */
+ name?: string;
+ /** New description (max 500 characters) */
+ description?: string;
+ /** New signup mode */
+ signupMode?: UpdateConsentGroupRequest.SignupMode;
+}
+
+export namespace UpdateConsentGroupRequest {
+ /** New signup mode */
+ export const SignupMode = {
+ Manual: "manual",
+ Automatic: "automatic",
+ } as const;
+ export type SignupMode = (typeof SignupMode)[keyof typeof SignupMode];
+}
diff --git a/src/api/resources/consentGroups/client/requests/index.ts b/src/api/resources/consentGroups/client/requests/index.ts
new file mode 100644
index 0000000..c628d21
--- /dev/null
+++ b/src/api/resources/consentGroups/client/requests/index.ts
@@ -0,0 +1,5 @@
+export { CreateConsentGroupRequest } from "./CreateConsentGroupRequest.js";
+export type { DeleteConsentGroupRequest } from "./DeleteConsentGroupRequest.js";
+export type { GetConsentGroupRequest } from "./GetConsentGroupRequest.js";
+export type { GetConsentGroupsRequest } from "./GetConsentGroupsRequest.js";
+export { UpdateConsentGroupRequest } from "./UpdateConsentGroupRequest.js";
diff --git a/src/api/resources/consentGroups/exports.ts b/src/api/resources/consentGroups/exports.ts
new file mode 100644
index 0000000..bc218ec
--- /dev/null
+++ b/src/api/resources/consentGroups/exports.ts
@@ -0,0 +1,4 @@
+// This file was auto-generated by Fern from our API Definition.
+
+export { ConsentGroupsClient } from "./client/Client.js";
+export * from "./client/index.js";
diff --git a/src/api/resources/consentGroups/index.ts b/src/api/resources/consentGroups/index.ts
new file mode 100644
index 0000000..d9adb1a
--- /dev/null
+++ b/src/api/resources/consentGroups/index.ts
@@ -0,0 +1,2 @@
+export * from "./client/index.js";
+export * from "./types/index.js";
diff --git a/src/api/resources/consentGroups/types/GetConsentGroupsRequestSignupMode.ts b/src/api/resources/consentGroups/types/GetConsentGroupsRequestSignupMode.ts
new file mode 100644
index 0000000..69b5cd1
--- /dev/null
+++ b/src/api/resources/consentGroups/types/GetConsentGroupsRequestSignupMode.ts
@@ -0,0 +1,8 @@
+// This file was auto-generated by Fern from our API Definition.
+
+export const GetConsentGroupsRequestSignupMode = {
+ Manual: "manual",
+ Automatic: "automatic",
+} as const;
+export type GetConsentGroupsRequestSignupMode =
+ (typeof GetConsentGroupsRequestSignupMode)[keyof typeof GetConsentGroupsRequestSignupMode];
diff --git a/src/api/resources/consentGroups/types/index.ts b/src/api/resources/consentGroups/types/index.ts
new file mode 100644
index 0000000..2e0dd4d
--- /dev/null
+++ b/src/api/resources/consentGroups/types/index.ts
@@ -0,0 +1 @@
+export * from "./GetConsentGroupsRequestSignupMode.js";
diff --git a/src/api/resources/contacts/client/requests/ImportContactsRequest.ts b/src/api/resources/contacts/client/requests/ImportContactsRequest.ts
index 3334fd3..19a4d06 100644
--- a/src/api/resources/contacts/client/requests/ImportContactsRequest.ts
+++ b/src/api/resources/contacts/client/requests/ImportContactsRequest.ts
@@ -19,6 +19,8 @@ export interface ImportContactsRequest {
jsonBody?: ImportContactsRequest.JsonBody.Item[];
/** **Mandatory if newList is not defined.** Ids of the lists in which the contacts shall be imported. For example, **[2, 4, 7]**. */
listIds?: number[];
+ /** **Optional.** Ids of the consent groups to which all imported contacts will be added. Requires consent groups to be enabled for the organisation. For example, **[1, 3]**. */
+ consentGroupIds?: number[];
/** To create a new list and import the contacts into it, pass the listName and an optional folderId. */
newList?: ImportContactsRequest.NewList;
/** URL that will be called once the import process is finished. For reference, https://help.brevo.com/hc/en-us/articles/360007666479 */
diff --git a/src/api/resources/contacts/types/GetContactInfoResponse.ts b/src/api/resources/contacts/types/GetContactInfoResponse.ts
index 9c0da83..321b5fc 100644
--- a/src/api/resources/contacts/types/GetContactInfoResponse.ts
+++ b/src/api/resources/contacts/types/GetContactInfoResponse.ts
@@ -1,5 +1,7 @@
// This file was auto-generated by Fern from our API Definition.
+import type * as Brevo from "../../../index.js";
+
export interface GetContactInfoResponse {
/** Set of attributes of the contact */
attributes: GetContactInfoResponse.Attributes;
@@ -19,6 +21,8 @@ export interface GetContactInfoResponse {
smsBlacklisted: boolean;
/** Blacklist status for WhatsApp campaigns (true=blacklisted, false=not blacklisted) */
whatsappBlacklisted: boolean;
+ /** Consent groups the contact belongs to, with their subscription status. Only present when the Consent Groups feature is enabled for your account. */
+ consentGroups?: Brevo.ConsentGroupItem[] | undefined;
/** Campaign statistics of the contact */
statistics: GetContactInfoResponse.Statistics;
}
@@ -185,7 +189,7 @@ export namespace GetContactInfoResponse {
export namespace UserUnsubscription {
export interface Item {
/** ID of the campaign which generated the event */
- campaignId: number;
+ campaignId: number | null;
/** UTC date-time of the event */
eventTime: string;
/** IP from which the user has unsubscribed */
diff --git a/src/api/resources/contacts/types/GetContactStatsResponse.ts b/src/api/resources/contacts/types/GetContactStatsResponse.ts
index 27dcc12..9cddfcd 100644
--- a/src/api/resources/contacts/types/GetContactStatsResponse.ts
+++ b/src/api/resources/contacts/types/GetContactStatsResponse.ts
@@ -150,7 +150,7 @@ export namespace GetContactStatsResponse {
export namespace UserUnsubscription {
export interface Item {
/** ID of the campaign which generated the event */
- campaignId: number;
+ campaignId: number | null;
/** UTC date-time of the event */
eventTime: string;
/** IP from which the user has unsubscribed */
diff --git a/src/api/resources/deals/client/Client.ts b/src/api/resources/deals/client/Client.ts
index 439e15c..19da115 100644
--- a/src/api/resources/deals/client/Client.ts
+++ b/src/api/resources/deals/client/Client.ts
@@ -111,6 +111,9 @@ export class DealsClient {
): Promise> {
const {
"filters[attributes.deal_name]": filtersAttributesDealName,
+ "filters[attributes.deal_owner]": filtersAttributesDealOwner,
+ "filters[attributes.deal_stage]": filtersAttributesDealStage,
+ "filters[attributes.pipeline]": filtersAttributesPipeline,
"filters[linkedCompaniesIds]": filtersLinkedCompaniesIds,
"filters[linkedContactsIds]": filtersLinkedContactsIds,
modifiedSince,
@@ -122,6 +125,9 @@ export class DealsClient {
} = request;
const _queryParams: Record = {
"filters[attributes.deal_name]": filtersAttributesDealName,
+ "filters[attributes.deal_owner]": filtersAttributesDealOwner,
+ "filters[attributes.deal_stage]": filtersAttributesDealStage,
+ "filters[attributes.pipeline]": filtersAttributesPipeline,
"filters[linkedCompaniesIds]": filtersLinkedCompaniesIds,
"filters[linkedContactsIds]": filtersLinkedContactsIds,
modifiedSince,
diff --git a/src/api/resources/deals/client/requests/GetCrmDealsRequest.ts b/src/api/resources/deals/client/requests/GetCrmDealsRequest.ts
index 3c68e3e..c6c96d9 100644
--- a/src/api/resources/deals/client/requests/GetCrmDealsRequest.ts
+++ b/src/api/resources/deals/client/requests/GetCrmDealsRequest.ts
@@ -9,6 +9,12 @@ import type * as Brevo from "../../../../index.js";
export interface GetCrmDealsRequest {
/** Filter by attributes. If you have a filter for the owner on your end, please send it as filters[attributes.deal_owner] and utilize the account email for the filtering. */
"filters[attributes.deal_name]"?: string;
+ /** Filter by the deal owner. Pass the account email address of the deal owner. */
+ "filters[attributes.deal_owner]"?: string;
+ /** Filter by the deal stage. Pass the stage id, retrievable from GET /crm/pipeline/details/{pipelineID}. */
+ "filters[attributes.deal_stage]"?: string;
+ /** Filter by the pipeline. Pass the pipeline id, retrievable from GET /crm/pipeline/details/{pipelineID}. */
+ "filters[attributes.pipeline]"?: string;
/** Filter by linked companies ids */
"filters[linkedCompaniesIds]"?: string;
/** Filter by linked contacts ids */
diff --git a/src/api/resources/ecommerce/types/CreateBatchOrderResponse.ts b/src/api/resources/ecommerce/types/CreateBatchOrderResponse.ts
index 093bedd..6830f7e 100644
--- a/src/api/resources/ecommerce/types/CreateBatchOrderResponse.ts
+++ b/src/api/resources/ecommerce/types/CreateBatchOrderResponse.ts
@@ -1,8 +1,8 @@
// This file was auto-generated by Fern from our API Definition.
export interface CreateBatchOrderResponse {
- /** Batch ID of the request */
- batchId: number;
/** Number of orders */
count?: number | undefined;
+ /** Batch ID of the request */
+ batch_id: number | null;
}
diff --git a/src/api/resources/index.ts b/src/api/resources/index.ts
index b4c41cb..e018995 100644
--- a/src/api/resources/index.ts
+++ b/src/api/resources/index.ts
@@ -7,6 +7,9 @@ export * from "./balance/types/index.js";
export * from "./companies/client/requests/index.js";
export * as companies from "./companies/index.js";
export * from "./companies/types/index.js";
+export * from "./consentGroups/client/requests/index.js";
+export * as consentGroups from "./consentGroups/index.js";
+export * from "./consentGroups/types/index.js";
export * from "./contacts/client/requests/index.js";
export * as contacts from "./contacts/index.js";
export * from "./contacts/types/index.js";
@@ -87,6 +90,8 @@ export * from "./transactionalWhatsApp/types/index.js";
export * from "./user/client/requests/index.js";
export * as user from "./user/index.js";
export * from "./user/types/index.js";
+export * from "./wallet/client/requests/index.js";
+export * as wallet from "./wallet/index.js";
export * from "./webhooks/client/requests/index.js";
export * as webhooks from "./webhooks/index.js";
export * from "./webhooks/types/index.js";
diff --git a/src/api/resources/transactionalEmails/types/GetTransacBlockedContactsResponse.ts b/src/api/resources/transactionalEmails/types/GetTransacBlockedContactsResponse.ts
index 849a017..1e656c6 100644
--- a/src/api/resources/transactionalEmails/types/GetTransacBlockedContactsResponse.ts
+++ b/src/api/resources/transactionalEmails/types/GetTransacBlockedContactsResponse.ts
@@ -18,7 +18,7 @@ export namespace GetTransacBlockedContactsResponse {
/** Reason for blocking / unsubscribing */
reason: Item.Reason;
/** Sender email address of the blocked or unsubscribed contact */
- senderEmail: string;
+ senderEmail: string | null;
}
export namespace Item {
diff --git a/src/api/resources/wallet/client/Client.ts b/src/api/resources/wallet/client/Client.ts
new file mode 100644
index 0000000..8d240ef
--- /dev/null
+++ b/src/api/resources/wallet/client/Client.ts
@@ -0,0 +1,115 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js";
+import { type NormalizedClientOptionsWithAuth, normalizeClientOptionsWithAuth } from "../../../../BaseClient.js";
+import { mergeHeaders } from "../../../../core/headers.js";
+import * as core from "../../../../core/index.js";
+import * as environments from "../../../../environments.js";
+import { handleNonStatusCodeError } from "../../../../errors/handleNonStatusCodeError.js";
+import * as errors from "../../../../errors/index.js";
+import * as Brevo from "../../../index.js";
+
+export declare namespace WalletClient {
+ export type Options = BaseClientOptions;
+
+ export interface RequestOptions extends BaseRequestOptions {}
+}
+
+export class WalletClient {
+ protected readonly _options: NormalizedClientOptionsWithAuth;
+
+ constructor(options: WalletClient.Options) {
+ this._options = normalizeClientOptionsWithAuth(options);
+ }
+
+ /**
+ * Generate a wallet installation URL for a specific contact. The returned URL points to the pass installation page and encodes the pass, contact and organization identifiers as an encrypted token, so it can be shared with the contact (email, SMS, QR code, ...) to add the pass to their Apple Wallet or Google Wallet.
+ *
+ * @param {Brevo.GetWalletPassInstallUrlRequest} request
+ * @param {WalletClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link Brevo.BadRequestError}
+ * @throws {@link Brevo.UnauthorizedError}
+ * @throws {@link Brevo.ForbiddenError}
+ * @throws {@link Brevo.NotFoundError}
+ * @throws {@link Brevo.UnprocessableEntityError}
+ * @throws {@link Brevo.InternalServerError}
+ *
+ * @example
+ * await client.wallet.getWalletPassInstallUrl({
+ * passId: "passId",
+ * contactId: 1000000
+ * })
+ */
+ public getWalletPassInstallUrl(
+ request: Brevo.GetWalletPassInstallUrlRequest,
+ requestOptions?: WalletClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__getWalletPassInstallUrl(request, requestOptions));
+ }
+
+ private async __getWalletPassInstallUrl(
+ request: Brevo.GetWalletPassInstallUrlRequest,
+ requestOptions?: WalletClient.RequestOptions,
+ ): Promise> {
+ const { passId, contactId } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.BrevoEnvironment.Default,
+ `wallet/passes/${core.url.encodePathParam(passId)}/installUrl/${core.url.encodePathParam(contactId)}`,
+ ),
+ method: "GET",
+ headers: _headers,
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as Brevo.WalletPassInstallUrl, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Brevo.BadRequestError(_response.error.body as unknown, _response.rawResponse);
+ case 401:
+ throw new Brevo.UnauthorizedError(_response.error.body as unknown, _response.rawResponse);
+ case 403:
+ throw new Brevo.ForbiddenError(_response.error.body as unknown, _response.rawResponse);
+ case 404:
+ throw new Brevo.NotFoundError(_response.error.body as unknown, _response.rawResponse);
+ case 422:
+ throw new Brevo.UnprocessableEntityError(
+ _response.error.body as Brevo.ErrorModel,
+ _response.rawResponse,
+ );
+ case 500:
+ throw new Brevo.InternalServerError(_response.error.body as unknown, _response.rawResponse);
+ default:
+ throw new errors.BrevoError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "GET",
+ "/wallet/passes/{passId}/installUrl/{contactId}",
+ );
+ }
+}
diff --git a/src/api/resources/wallet/client/index.ts b/src/api/resources/wallet/client/index.ts
new file mode 100644
index 0000000..195f9aa
--- /dev/null
+++ b/src/api/resources/wallet/client/index.ts
@@ -0,0 +1 @@
+export * from "./requests/index.js";
diff --git a/src/api/resources/wallet/client/requests/GetWalletPassInstallUrlRequest.ts b/src/api/resources/wallet/client/requests/GetWalletPassInstallUrlRequest.ts
new file mode 100644
index 0000000..20c411c
--- /dev/null
+++ b/src/api/resources/wallet/client/requests/GetWalletPassInstallUrlRequest.ts
@@ -0,0 +1,15 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * passId: "passId",
+ * contactId: 1000000
+ * }
+ */
+export interface GetWalletPassInstallUrlRequest {
+ /** Pass ID. The unique identifier of the wallet pass for which to generate an installation URL. */
+ passId: string;
+ /** The Brevo contact ID the installation URL is generated for. */
+ contactId: number;
+}
diff --git a/src/api/resources/wallet/client/requests/index.ts b/src/api/resources/wallet/client/requests/index.ts
new file mode 100644
index 0000000..101d7f3
--- /dev/null
+++ b/src/api/resources/wallet/client/requests/index.ts
@@ -0,0 +1 @@
+export type { GetWalletPassInstallUrlRequest } from "./GetWalletPassInstallUrlRequest.js";
diff --git a/src/api/resources/wallet/exports.ts b/src/api/resources/wallet/exports.ts
new file mode 100644
index 0000000..d35f0d4
--- /dev/null
+++ b/src/api/resources/wallet/exports.ts
@@ -0,0 +1,4 @@
+// This file was auto-generated by Fern from our API Definition.
+
+export { WalletClient } from "./client/Client.js";
+export * from "./client/index.js";
diff --git a/src/api/resources/wallet/index.ts b/src/api/resources/wallet/index.ts
new file mode 100644
index 0000000..914b8c3
--- /dev/null
+++ b/src/api/resources/wallet/index.ts
@@ -0,0 +1 @@
+export * from "./client/index.js";
diff --git a/src/api/types/ConsentGroup.ts b/src/api/types/ConsentGroup.ts
new file mode 100644
index 0000000..609ef7d
--- /dev/null
+++ b/src/api/types/ConsentGroup.ts
@@ -0,0 +1,32 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * A consent group representing a category of contact opt-in/opt-out preferences.
+ */
+export interface ConsentGroup {
+ /** Unique identifier for the consent group */
+ id: number;
+ /** Display name of the consent group */
+ name: string;
+ /** Optional description of the consent group */
+ description?: string | undefined;
+ /** Controls how contacts are added to the group. `manual` — contacts are added explicitly via the API. `automatic` — contacts are added automatically at signup. */
+ signupMode: ConsentGroup.SignupMode;
+ /** Number of contacts currently in this consent group */
+ contactsCount: number;
+ /** Whether this is a system-created default consent group */
+ isDefault: boolean;
+ /** UTC date-time when the consent group was created (YYYY-MM-DDTHH:mm:ss.SSSZ) */
+ createdAt: string;
+ /** UTC date-time when the consent group was last updated (YYYY-MM-DDTHH:mm:ss.SSSZ) */
+ updatedAt: string;
+}
+
+export namespace ConsentGroup {
+ /** Controls how contacts are added to the group. `manual` — contacts are added explicitly via the API. `automatic` — contacts are added automatically at signup. */
+ export const SignupMode = {
+ Manual: "manual",
+ Automatic: "automatic",
+ } as const;
+ export type SignupMode = (typeof SignupMode)[keyof typeof SignupMode];
+}
diff --git a/src/api/types/ConsentGroupItem.ts b/src/api/types/ConsentGroupItem.ts
new file mode 100644
index 0000000..9f78f67
--- /dev/null
+++ b/src/api/types/ConsentGroupItem.ts
@@ -0,0 +1,20 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * A contact's membership status in a single consent group.
+ */
+export interface ConsentGroupItem {
+ /** ID of the consent group */
+ id: number;
+ /** The contact's subscription status within this consent group */
+ status: ConsentGroupItem.Status;
+}
+
+export namespace ConsentGroupItem {
+ /** The contact's subscription status within this consent group */
+ export const Status = {
+ Subscribed: "subscribed",
+ Unsubscribed: "unsubscribed",
+ } as const;
+ export type Status = (typeof Status)[keyof typeof Status];
+}
diff --git a/src/api/types/ConsentGroupsListResponse.ts b/src/api/types/ConsentGroupsListResponse.ts
new file mode 100644
index 0000000..8aa6101
--- /dev/null
+++ b/src/api/types/ConsentGroupsListResponse.ts
@@ -0,0 +1,17 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type * as Brevo from "../index.js";
+
+/**
+ * Paginated list of consent groups.
+ */
+export interface ConsentGroupsListResponse {
+ /** List of consent groups matching the filter */
+ consentGroups: Brevo.ConsentGroup[];
+ /** Total number of consent groups matching the filter */
+ total: number;
+ /** Maximum number of results returned */
+ limit: number;
+ /** Number of results skipped */
+ offset: number;
+}
diff --git a/src/api/types/GetCampaignStats.ts b/src/api/types/GetCampaignStats.ts
index 9f34aac..8497d8b 100644
--- a/src/api/types/GetCampaignStats.ts
+++ b/src/api/types/GetCampaignStats.ts
@@ -4,17 +4,17 @@ export interface GetCampaignStats {
/** Numbers of times your email has been opened automatically through Apple MPP. */
appleMppOpens: number | null;
/** Number of total clicks for the campaign */
- clickers: number;
+ clickers: number | null;
/** Number of complaints (Spam reports) for the campaign */
- complaints: number;
+ complaints: number | null;
/** Number of deferred emails for the campaign */
deferred?: number | undefined;
/** Number of delivered emails for the campaign */
- delivered: number;
+ delivered: number | null;
/** Rate of recipients without any privacy protection option enabled in their email client, applied to all delivered emails */
estimatedViews?: number | undefined;
/** Number of hard bounces for the campaign */
- hardBounces: number;
+ hardBounces: number | null;
/** List Id of email campaign (only in case of get email campaign(s)(not for global stats)) */
listId?: number | undefined;
/** Percentage of recipients who open the email out of your total number of recipients. Depending on your Campaign settings, they may include Apple MPP opens. */
@@ -22,19 +22,19 @@ export interface GetCampaignStats {
/** Total number of non-delivered campaigns for a particular campaign id. */
returnBounce?: number | undefined;
/** Number of sent emails for the campaign */
- sent: number;
+ sent: number | null;
/** Number of softbounce for the campaign */
- softBounces: number;
+ softBounces: number | null;
/** Recipients without any privacy protection option enabled in their email email client */
- trackableViews: number;
+ trackableViews: number | null;
/** Rate of recipients without any privacy protection option enabled in their email client */
trackableViewsRate?: number | undefined;
/** Number of unique clicks for the campaign */
- uniqueClicks: number;
+ uniqueClicks: number | null;
/** Number of unique openings for the campaign */
- uniqueViews: number;
+ uniqueViews: number | null;
/** Number of unsubscription for the campaign */
- unsubscriptions: number;
+ unsubscriptions: number | null;
/** Number of openings for the campaign */
- viewed: number;
+ viewed: number | null;
}
diff --git a/src/api/types/GetContactDetails.ts b/src/api/types/GetContactDetails.ts
index a6b854e..67d2bc3 100644
--- a/src/api/types/GetContactDetails.ts
+++ b/src/api/types/GetContactDetails.ts
@@ -1,5 +1,7 @@
// This file was auto-generated by Fern from our API Definition.
+import type * as Brevo from "../index.js";
+
export interface GetContactDetails {
/** Set of attributes of the contact */
attributes: GetContactDetails.Attributes;
@@ -19,6 +21,8 @@ export interface GetContactDetails {
smsBlacklisted: boolean;
/** Blacklist status for WhatsApp campaigns (true=blacklisted, false=not blacklisted) */
whatsappBlacklisted: boolean;
+ /** Consent groups the contact belongs to, with their subscription status. Only present when the Consent Groups feature is enabled for your account. */
+ consentGroups?: Brevo.ConsentGroupItem[] | undefined;
}
export namespace GetContactDetails {
diff --git a/src/api/types/WalletPassInstallUrl.ts b/src/api/types/WalletPassInstallUrl.ts
new file mode 100644
index 0000000..2452fb6
--- /dev/null
+++ b/src/api/types/WalletPassInstallUrl.ts
@@ -0,0 +1,6 @@
+// This file was auto-generated by Fern from our API Definition.
+
+export interface WalletPassInstallUrl {
+ /** The wallet installation URL for the contact. Opening it lets the contact add the pass to their Apple Wallet or Google Wallet. */
+ url: string;
+}
diff --git a/src/api/types/index.ts b/src/api/types/index.ts
index 94dbe93..924735c 100644
--- a/src/api/types/index.ts
+++ b/src/api/types/index.ts
@@ -9,6 +9,9 @@ export * from "./BatchEventsResponse.js";
export * from "./Cart.js";
export * from "./Company.js";
export * from "./Configuration.js";
+export * from "./ConsentGroup.js";
+export * from "./ConsentGroupItem.js";
+export * from "./ConsentGroupsListResponse.js";
export * from "./ContactErrorModel.js";
export * from "./ConversationsMessage.js";
export * from "./ConversionSourceMetrics.js";
@@ -62,4 +65,5 @@ export * from "./UnauthorizedErrorBody.js";
export * from "./UpdateCampaignStatus.js";
export * from "./ValueResponse.js";
export * from "./VariablesItems.js";
+export * from "./WalletPassInstallUrl.js";
export * from "./WhatsappCampStats.js";
diff --git a/src/core/fetcher/Headers.ts b/src/core/fetcher/Headers.ts
index af841aa..f02246c 100644
--- a/src/core/fetcher/Headers.ts
+++ b/src/core/fetcher/Headers.ts
@@ -68,23 +68,23 @@ if (typeof globalThis.Headers !== "undefined") {
return this.headers.get("set-cookie") || [];
}
- *entries(): HeadersIterator<[string, string]> {
+ *entries(): IterableIterator<[string, string]> {
for (const [key, values] of this.headers.entries()) {
yield [key, values.join(", ")];
}
}
- *keys(): HeadersIterator {
+ *keys(): IterableIterator {
yield* this.headers.keys();
}
- *values(): HeadersIterator {
+ *values(): IterableIterator {
for (const values of this.headers.values()) {
yield values.join(", ");
}
}
- [Symbol.iterator](): HeadersIterator<[string, string]> {
+ [Symbol.iterator](): IterableIterator<[string, string]> {
return this.entries();
}
};
diff --git a/src/core/fetcher/getResponseBody.ts b/src/core/fetcher/getResponseBody.ts
index 708d557..2e831e4 100644
--- a/src/core/fetcher/getResponseBody.ts
+++ b/src/core/fetcher/getResponseBody.ts
@@ -1,6 +1,16 @@
import { fromJson } from "../json.js";
import { getBinaryResponse } from "./BinaryResponse.js";
+// Pins the upstream Response so undici's FinalizationRegistry can't GC it and cancel the body stream.
+function retainResponse(target: object, response: Response): void {
+ Object.defineProperty(target, "__fern_response_ref", {
+ value: response,
+ enumerable: false,
+ configurable: true,
+ writable: false,
+ });
+}
+
export async function getResponseBody(response: Response, responseType?: string): Promise {
switch (responseType) {
case "binary-response":
@@ -19,6 +29,7 @@ export async function getResponseBody(response: Response, responseType?: string)
},
};
}
+ retainResponse(response.body, response);
return response.body;
case "streaming":
if (response.body == null) {
@@ -31,6 +42,7 @@ export async function getResponseBody(response: Response, responseType?: string)
};
}
+ retainResponse(response.body, response);
return response.body;
case "text":
diff --git a/src/core/fetcher/signals.ts b/src/core/fetcher/signals.ts
index 7bd3757..ba74c4d 100644
--- a/src/core/fetcher/signals.ts
+++ b/src/core/fetcher/signals.ts
@@ -14,12 +14,21 @@ export function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal
for (const signal of signals) {
if (signal.aborted) {
controller.abort((signal as any)?.reason);
- break;
+ return controller.signal;
}
signal.addEventListener("abort", () => controller.abort((signal as any)?.reason), {
signal: controller.signal,
});
+
+ // Re-check after adding listener: the signal may have aborted
+ // between the initial `signal.aborted` check and the `addEventListener`
+ // call above. If it did, the abort event was already dispatched and
+ // the listener will never fire — we must manually abort.
+ if (signal.aborted) {
+ controller.abort((signal as any)?.reason);
+ return controller.signal;
+ }
}
return controller.signal;
diff --git a/src/core/url/qs.ts b/src/core/url/qs.ts
index f8b4556..aebb95a 100644
--- a/src/core/url/qs.ts
+++ b/src/core/url/qs.ts
@@ -27,7 +27,7 @@ function stringifyObject(obj: Record, prefix = "", options: Req
for (const [key, value] of Object.entries(obj)) {
const fullKey = prefix ? `${prefix}[${key}]` : key;
- if (value === undefined) {
+ if (value == null) {
continue;
}
@@ -47,7 +47,7 @@ function stringifyObject(obj: Record, prefix = "", options: Req
} else {
for (let i = 0; i < value.length; i++) {
const item = value[i];
- if (item === undefined) {
+ if (item == null) {
continue;
}
if (typeof item === "object" && !Array.isArray(item) && item !== null) {
diff --git a/src/errors/BrevoError.ts b/src/errors/BrevoError.ts
index 8f47b09..b38b10a 100644
--- a/src/errors/BrevoError.ts
+++ b/src/errors/BrevoError.ts
@@ -28,7 +28,7 @@ export class BrevoError extends Error {
Error.captureStackTrace(this, this.constructor);
}
- this.name = this.constructor.name;
+ this.name = "BrevoError";
this.statusCode = statusCode;
this.body = body;
this.rawResponse = rawResponse;
@@ -36,6 +36,10 @@ export class BrevoError extends Error {
this.cause = cause;
}
}
+
+ public get requestId(): string | undefined {
+ return this.rawResponse?.headers?.get("x-request-id") ?? undefined;
+ }
}
function buildMessage({
diff --git a/src/errors/BrevoTimeoutError.ts b/src/errors/BrevoTimeoutError.ts
index ef54a35..30ae5ba 100644
--- a/src/errors/BrevoTimeoutError.ts
+++ b/src/errors/BrevoTimeoutError.ts
@@ -1,18 +1,18 @@
// This file was auto-generated by Fern from our API Definition.
-export class BrevoTimeoutError extends Error {
- public readonly cause?: unknown;
+import * as errors from "./index.js";
+export class BrevoTimeoutError extends errors.BrevoError {
constructor(message: string, opts?: { cause?: unknown }) {
- super(message);
+ super({
+ message: message,
+ cause: opts?.cause,
+ });
Object.setPrototypeOf(this, new.target.prototype);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
- this.name = this.constructor.name;
- if (opts?.cause != null) {
- this.cause = opts.cause;
- }
+ this.name = "BrevoTimeoutError";
}
}
diff --git a/src/version.ts b/src/version.ts
index d05d49d..90ba370 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const SDK_VERSION = "6.0.1";
+export const SDK_VERSION = "6.0.2";
diff --git a/tests/unit/fetcher/createRequestUrl.test.ts b/tests/unit/fetcher/createRequestUrl.test.ts
index f8afeaf..7787e55 100644
--- a/tests/unit/fetcher/createRequestUrl.test.ts
+++ b/tests/unit/fetcher/createRequestUrl.test.ts
@@ -77,7 +77,7 @@ describe("Test createRequestUrl", () => {
undefinedValue: undefined,
emptyString: "",
},
- expected: "https://api.example.com?valid=value&nullValue=&emptyString=",
+ expected: "https://api.example.com?valid=value&emptyString=",
},
{
description: "should handle deeply nested objects",
diff --git a/tests/unit/fetcher/getResponseBody.test.ts b/tests/unit/fetcher/getResponseBody.test.ts
index ad6be7f..64ed746 100644
--- a/tests/unit/fetcher/getResponseBody.test.ts
+++ b/tests/unit/fetcher/getResponseBody.test.ts
@@ -73,6 +73,21 @@ describe("Test getResponseBody", () => {
}
});
+ it("should retain a reference to the parent Response for sse responses", async () => {
+ if (RUNTIME.type === "node") {
+ const mockStream = new ReadableStream();
+ const mockResponse = new Response(mockStream);
+ const result = (await getResponseBody(mockResponse, "sse")) as ReadableStream & {
+ __fern_response_ref?: Response;
+ };
+ // Pins the parent Response so undici's FinalizationRegistry can't GC it and cancel the stream.
+ expect(result.__fern_response_ref).toBe(mockResponse);
+ // The pin must be non-enumerable so it does not leak through JSON.stringify or Object.keys.
+ const descriptor = Object.getOwnPropertyDescriptor(result, "__fern_response_ref");
+ expect(descriptor?.enumerable).toBe(false);
+ }
+ });
+
it("should handle streaming response type", async () => {
const encoder = new TextEncoder();
const testData = "test stream data";
@@ -94,4 +109,15 @@ describe("Test getResponseBody", () => {
const streamContent = decoder.decode(value);
expect(streamContent).toBe(testData);
});
+
+ it("should retain a reference to the parent Response for streaming responses", async () => {
+ const mockStream = new ReadableStream();
+ const mockResponse = new Response(mockStream);
+ const result = (await getResponseBody(mockResponse, "streaming")) as ReadableStream & {
+ __fern_response_ref?: Response;
+ };
+ expect(result.__fern_response_ref).toBe(mockResponse);
+ const descriptor = Object.getOwnPropertyDescriptor(result, "__fern_response_ref");
+ expect(descriptor?.enumerable).toBe(false);
+ });
});
diff --git a/tests/unit/fetcher/signals.test.ts b/tests/unit/fetcher/signals.test.ts
index d7b6d1e..c717617 100644
--- a/tests/unit/fetcher/signals.test.ts
+++ b/tests/unit/fetcher/signals.test.ts
@@ -66,4 +66,49 @@ describe("Test anySignal", () => {
const signal = anySignal(controller1.signal, controller2.signal);
expect(signal.aborted).toBe(true);
});
+
+ it("should detect a signal that aborts between the initial aborted check and the event listener registration", () => {
+ const ctrlA = new AbortController();
+ const ctrlB = new AbortController();
+
+ const originalAddEventListener = ctrlA.signal.addEventListener.bind(ctrlA.signal);
+ const originalRemoveEventListener = ctrlA.signal.removeEventListener.bind(ctrlA.signal);
+
+ let abortedAccessCount = 0;
+ const proxy = new Proxy(ctrlA.signal, {
+ get(target, prop, receiver) {
+ if (prop === "aborted") {
+ abortedAccessCount++;
+ if (abortedAccessCount === 1) return false;
+ return Reflect.get(target, prop, receiver);
+ }
+ if (prop === "addEventListener") {
+ return (...args: Parameters) => {
+ if (abortedAccessCount >= 1 && args[0] === "abort") {
+ ctrlA.abort("too-late");
+ }
+ return originalAddEventListener(...args);
+ };
+ }
+ if (prop === "removeEventListener") {
+ return originalRemoveEventListener;
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+
+ const combined = anySignal(proxy, ctrlB.signal);
+
+ expect(combined.aborted).toBe(true);
+ expect(combined.reason).toBe("too-late");
+ });
+
+ it("should forward the abort reason from a source signal", () => {
+ const controller = new AbortController();
+ const combined = anySignal(controller.signal);
+
+ controller.abort("test-reason");
+ expect(combined.aborted).toBe(true);
+ expect(combined.reason).toBe("test-reason");
+ });
});
diff --git a/tests/unit/form-data-utils/encodeAsFormParameter.test.ts b/tests/unit/form-data-utils/encodeAsFormParameter.test.ts
index d4b0c45..898f527 100644
--- a/tests/unit/form-data-utils/encodeAsFormParameter.test.ts
+++ b/tests/unit/form-data-utils/encodeAsFormParameter.test.ts
@@ -63,7 +63,6 @@ describe("encodeAsFormParameter", () => {
const obj = { items: ["a", null, "c", undefined, "e"] };
expect(encodeAsFormParameter(obj)).toEqual({
"items[0]": "a",
- "items[1]": "",
"items[2]": "c",
"items[4]": "e",
});
@@ -247,7 +246,6 @@ describe("encodeAsFormParameter", () => {
const obj = { name: "John", age: null, email: undefined, active: true };
expect(encodeAsFormParameter(obj)).toEqual({
name: "John",
- age: "",
active: "true",
});
});
diff --git a/tests/unit/url/qs.test.ts b/tests/unit/url/qs.test.ts
index 1099b95..54d2d9c 100644
--- a/tests/unit/url/qs.test.ts
+++ b/tests/unit/url/qs.test.ts
@@ -189,12 +189,12 @@ describe("Test qs toQueryString", () => {
{
description: "should handle arrays with null/undefined values",
input: { items: ["a", null, "c", undefined, "e"] },
- expected: "items%5B0%5D=a&items%5B1%5D=&items%5B2%5D=c&items%5B4%5D=e",
+ expected: "items%5B0%5D=a&items%5B2%5D=c&items%5B4%5D=e",
},
{
description: "should handle objects with null/undefined values",
input: { name: "John", age: null, email: undefined, active: true },
- expected: "name=John&age=&active=true",
+ expected: "name=John&active=true",
},
];
diff --git a/tests/wire/consentGroups.test.ts b/tests/wire/consentGroups.test.ts
new file mode 100644
index 0000000..7bcc8b4
--- /dev/null
+++ b/tests/wire/consentGroups.test.ts
@@ -0,0 +1,483 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import * as Brevo from "../../src/api/index";
+import { BrevoClient } from "../../src/Client";
+import { mockServerPool } from "../mock-server/MockServerPool";
+
+describe("ConsentGroupsClient", () => {
+ test("getConsentGroups (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = {
+ consentGroups: [
+ {
+ id: 1,
+ name: "Newsletter EU",
+ description: "Consent group for EU newsletter subscribers",
+ signupMode: "manual",
+ contactsCount: 1234,
+ isDefault: false,
+ createdAt: "2024-01-15T10:00:00Z",
+ updatedAt: "2024-06-01T08:30:00Z",
+ },
+ ],
+ total: 1,
+ limit: 10,
+ offset: 0,
+ };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups")
+ .respondWith()
+ .statusCode(200)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ const response = await client.consentGroups.getConsentGroups();
+ expect(response).toEqual(rawResponseBody);
+ });
+
+ test("getConsentGroups (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups")
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroups();
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("getConsentGroups (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups")
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroups();
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("getConsentGroups (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { message: "message" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups")
+ .respondWith()
+ .statusCode(429)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroups();
+ }).rejects.toThrow(Brevo.TooManyRequestsError);
+ });
+
+ test("createConsentGroup (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = { name: "Newsletter EU", signupMode: "manual" };
+ const rawResponseBody = {
+ id: 1,
+ name: "Newsletter EU",
+ description: "Consent group for EU newsletter subscribers",
+ signupMode: "manual",
+ contactsCount: 1234,
+ isDefault: false,
+ createdAt: "2024-01-15T10:00:00Z",
+ updatedAt: "2024-06-01T08:30:00Z",
+ };
+
+ server
+ .mockEndpoint()
+ .post("/contacts/consent-groups")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(200)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ const response = await client.consentGroups.createConsentGroup({
+ name: "Newsletter EU",
+ signupMode: "manual",
+ });
+ expect(response).toEqual(rawResponseBody);
+ });
+
+ test("createConsentGroup (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = { name: "name", signupMode: "manual" };
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .post("/contacts/consent-groups")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.createConsentGroup({
+ name: "name",
+ signupMode: "manual",
+ });
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("createConsentGroup (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = { name: "name", signupMode: "manual" };
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .post("/contacts/consent-groups")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.createConsentGroup({
+ name: "name",
+ signupMode: "manual",
+ });
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("createConsentGroup (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = { name: "name", signupMode: "manual" };
+ const rawResponseBody = { message: "message" };
+
+ server
+ .mockEndpoint()
+ .post("/contacts/consent-groups")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(409)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.createConsentGroup({
+ name: "name",
+ signupMode: "manual",
+ });
+ }).rejects.toThrow(Brevo.ConflictError);
+ });
+
+ test("getConsentGroup (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = {
+ id: 1,
+ name: "Newsletter EU",
+ description: "Consent group for EU newsletter subscribers",
+ signupMode: "manual",
+ contactsCount: 1234,
+ isDefault: false,
+ createdAt: "2024-01-15T10:00:00Z",
+ updatedAt: "2024-06-01T08:30:00Z",
+ };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(200)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ const response = await client.consentGroups.getConsentGroup({
+ id: 1000000,
+ });
+ expect(response).toEqual(rawResponseBody);
+ });
+
+ test("getConsentGroup (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("getConsentGroup (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("getConsentGroup (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(404)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.getConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.NotFoundError);
+ });
+
+ test("updateConsentGroup (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = {};
+ const rawResponseBody = {
+ id: 1,
+ name: "Newsletter EU",
+ description: "Consent group for EU newsletter subscribers",
+ signupMode: "manual",
+ contactsCount: 1234,
+ isDefault: false,
+ createdAt: "2024-01-15T10:00:00Z",
+ updatedAt: "2024-06-01T08:30:00Z",
+ };
+
+ server
+ .mockEndpoint()
+ .put("/contacts/consent-groups/1000000")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(200)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ const response = await client.consentGroups.updateConsentGroup({
+ id: 1000000,
+ });
+ expect(response).toEqual(rawResponseBody);
+ });
+
+ test("updateConsentGroup (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = {};
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .put("/contacts/consent-groups/1000000")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.updateConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("updateConsentGroup (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = {};
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .put("/contacts/consent-groups/1000000")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.updateConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("updateConsentGroup (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = {};
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .put("/contacts/consent-groups/1000000")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(404)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.updateConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.NotFoundError);
+ });
+
+ test("updateConsentGroup (5)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+ const rawRequestBody = {};
+ const rawResponseBody = { message: "message" };
+
+ server
+ .mockEndpoint()
+ .put("/contacts/consent-groups/1000000")
+ .jsonBody(rawRequestBody)
+ .respondWith()
+ .statusCode(409)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.updateConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.ConflictError);
+ });
+
+ test("deleteConsentGroup (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ server.mockEndpoint().delete("/contacts/consent-groups/1000000").respondWith().statusCode(200).build();
+
+ const response = await client.consentGroups.deleteConsentGroup({
+ id: 1000000,
+ });
+ expect(response).toEqual(undefined);
+ });
+
+ test("deleteConsentGroup (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .delete("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.deleteConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("deleteConsentGroup (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .delete("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.deleteConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("deleteConsentGroup (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .delete("/contacts/consent-groups/1000000")
+ .respondWith()
+ .statusCode(404)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.consentGroups.deleteConsentGroup({
+ id: 1000000,
+ });
+ }).rejects.toThrow(Brevo.NotFoundError);
+ });
+});
diff --git a/tests/wire/contacts.test.ts b/tests/wire/contacts.test.ts
index 79b0bb8..283c389 100644
--- a/tests/wire/contacts.test.ts
+++ b/tests/wire/contacts.test.ts
@@ -22,6 +22,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-01T17:05:03Z",
smsBlacklisted: true,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
},
{
attributes: {},
@@ -34,6 +35,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-01T17:05:03Z",
smsBlacklisted: false,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
},
],
count: 3,
@@ -1326,6 +1328,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-12T12:30:00Z",
smsBlacklisted: true,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
},
{
attributes: {},
@@ -1338,6 +1341,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-12T12:30:00Z",
smsBlacklisted: false,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
},
{
attributes: {},
@@ -1350,6 +1354,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-12T12:30:00Z",
smsBlacklisted: false,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
},
],
count: 17655,
@@ -2004,6 +2009,7 @@ describe("ContactsClient", () => {
modifiedAt: "2017-05-02T16:40:31Z",
smsBlacklisted: false,
whatsappBlacklisted: false,
+ consentGroups: [{ id: 42, status: "subscribed" }],
statistics: {
clicked: [
{
diff --git a/tests/wire/ecommerce.test.ts b/tests/wire/ecommerce.test.ts
index 78769f7..0efd639 100644
--- a/tests/wire/ecommerce.test.ts
+++ b/tests/wire/ecommerce.test.ts
@@ -729,7 +729,7 @@ describe("EcommerceClient", () => {
},
],
};
- const rawResponseBody = { batchId: 1.1, count: 17655 };
+ const rawResponseBody = { count: 17655, batch_id: 1.1 };
server
.mockEndpoint()
diff --git a/tests/wire/wallet.test.ts b/tests/wire/wallet.test.ts
new file mode 100644
index 0000000..3a6f3e3
--- /dev/null
+++ b/tests/wire/wallet.test.ts
@@ -0,0 +1,160 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import * as Brevo from "../../src/api/index";
+import { BrevoClient } from "../../src/Client";
+import { mockServerPool } from "../mock-server/MockServerPool";
+
+describe("WalletClient", () => {
+ test("getWalletPassInstallUrl (1)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { url: "https://wallet.brevo.com/pass/eyJhbGciOiJ..." };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(200)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ const response = await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ expect(response).toEqual(rawResponseBody);
+ });
+
+ test("getWalletPassInstallUrl (2)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(400)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.BadRequestError);
+ });
+
+ test("getWalletPassInstallUrl (3)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(401)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.UnauthorizedError);
+ });
+
+ test("getWalletPassInstallUrl (4)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(403)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.ForbiddenError);
+ });
+
+ test("getWalletPassInstallUrl (5)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(404)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.NotFoundError);
+ });
+
+ test("getWalletPassInstallUrl (6)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { message: "message" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(422)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.UnprocessableEntityError);
+ });
+
+ test("getWalletPassInstallUrl (7)", async () => {
+ const server = mockServerPool.createServer();
+ const client = new BrevoClient({ maxRetries: 0, apiKey: "test", environment: server.baseUrl });
+
+ const rawResponseBody = { key: "value" };
+
+ server
+ .mockEndpoint()
+ .get("/wallet/passes/passId/installUrl/1000000")
+ .respondWith()
+ .statusCode(500)
+ .jsonBody(rawResponseBody)
+ .build();
+
+ await expect(async () => {
+ return await client.wallet.getWalletPassInstallUrl({
+ passId: "passId",
+ contactId: 1000000,
+ });
+ }).rejects.toThrow(Brevo.InternalServerError);
+ });
+});