diff --git a/.gitattributes b/.gitattributes
index 5fc4d97..7827a26 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
*.json linguist-language=JSON-with-Comments
+docs/*.md text eol=lf
diff --git a/.github/workflows/lint-test-sdk.yml b/.github/workflows/lint-test-sdk.yml
index c4096a6..0d34782 100644
--- a/.github/workflows/lint-test-sdk.yml
+++ b/.github/workflows/lint-test-sdk.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [ '18', '20', '22', '23' ]
+ node-version: [ '20', '22', '24' ]
steps:
- uses: actions/checkout@v3
with:
@@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [ '18', '20', '22', '23' ]
+ node-version: [ '20', '22', '24' ]
steps:
- uses: actions/checkout@v3
with:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 2c2ad37..46027af 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -10,7 +10,7 @@ jobs:
fail-fast: false
matrix:
platform: ['linux']
- node-version: [ '18', '20', '22', '23' ]
+ node-version: [ '20', '22', '24' ]
steps:
- uses: actions/checkout@v3
diff --git a/README.md b/README.md
index b885625..76ff31b 100644
--- a/README.md
+++ b/README.md
@@ -8,10 +8,17 @@
- Feature gates
- Kill switches
+- Dynamic configuration
- Progressive rollouts
- A/B/n experiments
+- Holdouts
- Mutually exclusive experiments (Layers)
-- Dynamic configuration
+- Switchback experiments
+- Contextual Multi-armed bandits
+
+## Requirements
+
+- Node.js version 20.x or later
## Installation
diff --git a/api-extractor.json b/api-extractor.json
index 0647669..5b2638f 100644
--- a/api-extractor.json
+++ b/api-extractor.json
@@ -266,7 +266,7 @@
*
* DEFAULT VALUE: "crlf"
*/
- // "newlineKind": "crlf",
+ "newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
diff --git a/docs/index.md b/docs/index.md
index 9bb7118..e5c4af6 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,30 +1,30 @@
-
-
-[Home](./index.md)
-
-## API Reference
-
-## Packages
-
-
|
-
-Package
-
-
- |
-
-Description
-
-
- |
-|
-
-[@eppo/node-server-sdk](./node-server-sdk.md)
-
-
- |
-
-
- |
-
-
+
+
+[Home](./index.md)
+
+## API Reference
+
+## Packages
+
+|
+
+Package
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[@eppo/node-server-sdk](./node-server-sdk.md)
+
+
+ |
+
+
+ |
+
+
diff --git a/docs/node-server-sdk.getbanditsconfiguration.md b/docs/node-server-sdk.getbanditsconfiguration.md
new file mode 100644
index 0000000..aaabba1
--- /dev/null
+++ b/docs/node-server-sdk.getbanditsconfiguration.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [getBanditsConfiguration](./node-server-sdk.getbanditsconfiguration.md)
+
+## getBanditsConfiguration() function
+
+Returns the current bandits configuration as a JSON string. This can be used together with getFlagsConfiguration() to bootstrap another SDK instance using offlineInit().
+
+**Signature:**
+
+```typescript
+export declare function getBanditsConfiguration(): string;
+```
+**Returns:**
+
+string
+
+JSON string containing the bandits configuration
+
diff --git a/docs/node-server-sdk.getflagsconfiguration.md b/docs/node-server-sdk.getflagsconfiguration.md
new file mode 100644
index 0000000..be0fd3e
--- /dev/null
+++ b/docs/node-server-sdk.getflagsconfiguration.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [getFlagsConfiguration](./node-server-sdk.getflagsconfiguration.md)
+
+## getFlagsConfiguration() function
+
+Reconstructs the current flags configuration as a JSON string. This can be used to bootstrap another SDK instance using offlineInit().
+
+**Signature:**
+
+```typescript
+export declare function getFlagsConfiguration(): string | null;
+```
+**Returns:**
+
+string \| null
+
+JSON string containing the flags configuration, or null if not initialized
+
diff --git a/docs/node-server-sdk.getinstance.md b/docs/node-server-sdk.getinstance.md
index dbbc128..6309761 100644
--- a/docs/node-server-sdk.getinstance.md
+++ b/docs/node-server-sdk.getinstance.md
@@ -1,19 +1,19 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [getInstance](./node-server-sdk.getinstance.md)
-
-## getInstance() function
-
-Used to access a singleton SDK client instance. Use the method after calling init() to initialize the client.
-
-**Signature:**
-
-```typescript
-export declare function getInstance(): EppoClient;
-```
-**Returns:**
-
-EppoClient
-
-a singleton client instance or throws an Error if init() has not been called
-
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [getInstance](./node-server-sdk.getinstance.md)
+
+## getInstance() function
+
+Used to access a singleton SDK client instance. Use the method after calling init() to initialize the client.
+
+**Signature:**
+
+```typescript
+export declare function getInstance(): EppoClient;
+```
+**Returns:**
+
+EppoClient
+
+a singleton client instance or throws an Error if init() has not been called
+
diff --git a/docs/node-server-sdk.iclientconfig.apikey.md b/docs/node-server-sdk.iclientconfig.apikey.md
index b73fc24..3dcaaf5 100644
--- a/docs/node-server-sdk.iclientconfig.apikey.md
+++ b/docs/node-server-sdk.iclientconfig.apikey.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [apiKey](./node-server-sdk.iclientconfig.apikey.md)
-
-## IClientConfig.apiKey property
-
-Eppo SDK key
-
-**Signature:**
-
-```typescript
-apiKey: string;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [apiKey](./node-server-sdk.iclientconfig.apikey.md)
+
+## IClientConfig.apiKey property
+
+Eppo SDK key
+
+**Signature:**
+
+```typescript
+apiKey: string;
+```
diff --git a/docs/node-server-sdk.iclientconfig.assignmentlogger.md b/docs/node-server-sdk.iclientconfig.assignmentlogger.md
index 86d0c0f..b68f35f 100644
--- a/docs/node-server-sdk.iclientconfig.assignmentlogger.md
+++ b/docs/node-server-sdk.iclientconfig.assignmentlogger.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [assignmentLogger](./node-server-sdk.iclientconfig.assignmentlogger.md)
-
-## IClientConfig.assignmentLogger property
-
-Provide a logging implementation to send variation assignments to your data warehouse.
-
-**Signature:**
-
-```typescript
-assignmentLogger: IAssignmentLogger;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [assignmentLogger](./node-server-sdk.iclientconfig.assignmentlogger.md)
+
+## IClientConfig.assignmentLogger property
+
+Provide a logging implementation to send variation assignments to your data warehouse.
+
+**Signature:**
+
+```typescript
+assignmentLogger: IAssignmentLogger;
+```
diff --git a/docs/node-server-sdk.iclientconfig.banditlogger.md b/docs/node-server-sdk.iclientconfig.banditlogger.md
index 7c106db..a80ff55 100644
--- a/docs/node-server-sdk.iclientconfig.banditlogger.md
+++ b/docs/node-server-sdk.iclientconfig.banditlogger.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [banditLogger](./node-server-sdk.iclientconfig.banditlogger.md)
-
-## IClientConfig.banditLogger property
-
-Logging implementation to send bandit actions to your data warehouse
-
-**Signature:**
-
-```typescript
-banditLogger?: IBanditLogger;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [banditLogger](./node-server-sdk.iclientconfig.banditlogger.md)
+
+## IClientConfig.banditLogger property
+
+Logging implementation to send bandit actions to your data warehouse
+
+**Signature:**
+
+```typescript
+banditLogger?: IBanditLogger;
+```
diff --git a/docs/node-server-sdk.iclientconfig.baseurl.md b/docs/node-server-sdk.iclientconfig.baseurl.md
index 1098a49..e6cbbc2 100644
--- a/docs/node-server-sdk.iclientconfig.baseurl.md
+++ b/docs/node-server-sdk.iclientconfig.baseurl.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [baseUrl](./node-server-sdk.iclientconfig.baseurl.md)
-
-## IClientConfig.baseUrl property
-
-Base URL of the Eppo API. Clients should use the default setting in most cases.
-
-**Signature:**
-
-```typescript
-baseUrl?: string;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [baseUrl](./node-server-sdk.iclientconfig.baseurl.md)
+
+## IClientConfig.baseUrl property
+
+Base URL of the Eppo API. Clients should use the default setting in most cases.
+
+**Signature:**
+
+```typescript
+baseUrl?: string;
+```
diff --git a/docs/node-server-sdk.iclientconfig.eventtracking.md b/docs/node-server-sdk.iclientconfig.eventtracking.md
index 1ecfde9..7ee02ae 100644
--- a/docs/node-server-sdk.iclientconfig.eventtracking.md
+++ b/docs/node-server-sdk.iclientconfig.eventtracking.md
@@ -1,21 +1,26 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [eventTracking](./node-server-sdk.iclientconfig.eventtracking.md)
-
-## IClientConfig.eventTracking property
-
-Configuration settings for the event dispatcher
-
-**Signature:**
-
-```typescript
-eventTracking?: {
- batchSize?: number;
- deliveryIntervalMs?: number;
- enabled?: boolean;
- maxQueueSize?: number;
- maxRetries?: number;
- maxRetryDelayMs?: number;
- retryIntervalMs?: number;
- };
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [eventTracking](./node-server-sdk.iclientconfig.eventtracking.md)
+
+## IClientConfig.eventTracking property
+
+> Warning: This API is now obsolete.
+>
+> Eppo has discontinued eventing support. Event tracking will be handled by Datadog SDKs.
+>
+
+Configuration settings for the event dispatcher.
+
+**Signature:**
+
+```typescript
+eventTracking?: {
+ batchSize?: number;
+ deliveryIntervalMs?: number;
+ enabled?: boolean;
+ maxQueueSize?: number;
+ maxRetries?: number;
+ maxRetryDelayMs?: number;
+ retryIntervalMs?: number;
+ };
+```
diff --git a/docs/node-server-sdk.iclientconfig.md b/docs/node-server-sdk.iclientconfig.md
index be3bda8..69648c9 100644
--- a/docs/node-server-sdk.iclientconfig.md
+++ b/docs/node-server-sdk.iclientconfig.md
@@ -1,267 +1,267 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md)
-
-## IClientConfig interface
-
-Configuration used for initializing the Eppo client
-
-**Signature:**
-
-```typescript
-export interface IClientConfig
-```
-
-## Properties
-
-|
-
-Property
-
-
- |
-
-Modifiers
-
-
- |
-
-Type
-
-
- |
-
-Description
-
-
- |
-|
-
-[apiKey](./node-server-sdk.iclientconfig.apikey.md)
-
-
- |
-
-
- |
-
-string
-
-
- |
-
-Eppo SDK key
-
-
- |
-|
-
-[assignmentLogger](./node-server-sdk.iclientconfig.assignmentlogger.md)
-
-
- |
-
-
- |
-
-IAssignmentLogger
-
-
- |
-
-Provide a logging implementation to send variation assignments to your data warehouse.
-
-
- |
-|
-
-[banditLogger?](./node-server-sdk.iclientconfig.banditlogger.md)
-
-
- |
-
-
- |
-
-IBanditLogger
-
-
- |
-
-_(Optional)_ Logging implementation to send bandit actions to your data warehouse
-
-
- |
-|
-
-[baseUrl?](./node-server-sdk.iclientconfig.baseurl.md)
-
-
- |
-
-
- |
-
-string
-
-
- |
-
-_(Optional)_ Base URL of the Eppo API. Clients should use the default setting in most cases.
-
-
- |
-|
-
-[eventTracking?](./node-server-sdk.iclientconfig.eventtracking.md)
-
-
- |
-
-
- |
-
-{ batchSize?: number; deliveryIntervalMs?: number; enabled?: boolean; maxQueueSize?: number; maxRetries?: number; maxRetryDelayMs?: number; retryIntervalMs?: number; }
-
-
- |
-
-_(Optional)_ Configuration settings for the event dispatcher
-
-
- |
-|
-
-[numInitialRequestRetries?](./node-server-sdk.iclientconfig.numinitialrequestretries.md)
-
-
- |
-
-
- |
-
-number
-
-
- |
-
-_(Optional)_ Number of additional times the initial configuration request will be attempted if it fails. This is the request servers typically synchronously wait for completion. A small wait will be done between requests. (Default: 1)
-
-
- |
-|
-
-[numPollRequestRetries?](./node-server-sdk.iclientconfig.numpollrequestretries.md)
-
-
- |
-
-
- |
-
-number
-
-
- |
-
-_(Optional)_ Number of additional times polling for updated configurations will be attempted before giving up. Polling is done after a successful initial request. Subsequent attempts are done using an exponential backoff. (Default: 7)
-
-
- |
-|
-
-[pollAfterFailedInitialization?](./node-server-sdk.iclientconfig.pollafterfailedinitialization.md)
-
-
- |
-
-
- |
-
-boolean
-
-
- |
-
-_(Optional)_ Poll for new configurations even if the initial configuration request failed. (default: false)
-
-
- |
-|
-
-[pollAfterSuccessfulInitialization?](./node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md)
-
-
- |
-
-
- |
-
-boolean
-
-
- |
-
-_(Optional)_ Poll for new configurations (every `pollingIntervalMs`) after successfully requesting the initial configuration. (default: true) For server-side applications, this defaults to true to ensure configurations stay up-to-date for the life of the process.
-
-
- |
-|
-
-[pollingIntervalMs?](./node-server-sdk.iclientconfig.pollingintervalms.md)
-
-
- |
-
-
- |
-
-number
-
-
- |
-
-_(Optional)_ Amount of time in milliseconds to wait between API calls to refresh configuration data. Default of 30\_000 (30s).
-
-
- |
-|
-
-[requestTimeoutMs?](./node-server-sdk.iclientconfig.requesttimeoutms.md)
-
-
- |
-
-
- |
-
-number
-
-
- |
-
-_(Optional)_ Timeout in milliseconds for the HTTPS request for the experiment configuration. (Default: 5000)
-
-
- |
-|
-
-[throwOnFailedInitialization?](./node-server-sdk.iclientconfig.throwonfailedinitialization.md)
-
-
- |
-
-
- |
-
-boolean
-
-
- |
-
-_(Optional)_ Throw error if unable to fetch an initial configuration during initialization. (default: true)
-
-
- |
-
-
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md)
+
+## IClientConfig interface
+
+Configuration used for initializing the Eppo client
+
+**Signature:**
+
+```typescript
+export interface IClientConfig
+```
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[apiKey](./node-server-sdk.iclientconfig.apikey.md)
+
+
+ |
+
+
+ |
+
+string
+
+
+ |
+
+Eppo SDK key
+
+
+ |
+|
+
+[assignmentLogger](./node-server-sdk.iclientconfig.assignmentlogger.md)
+
+
+ |
+
+
+ |
+
+IAssignmentLogger
+
+
+ |
+
+Provide a logging implementation to send variation assignments to your data warehouse.
+
+
+ |
+|
+
+[banditLogger?](./node-server-sdk.iclientconfig.banditlogger.md)
+
+
+ |
+
+
+ |
+
+IBanditLogger
+
+
+ |
+
+_(Optional)_ Logging implementation to send bandit actions to your data warehouse
+
+
+ |
+|
+
+[baseUrl?](./node-server-sdk.iclientconfig.baseurl.md)
+
+
+ |
+
+
+ |
+
+string
+
+
+ |
+
+_(Optional)_ Base URL of the Eppo API. Clients should use the default setting in most cases.
+
+
+ |
+|
+
+[eventTracking?](./node-server-sdk.iclientconfig.eventtracking.md)
+
+
+ |
+
+
+ |
+
+{ batchSize?: number; deliveryIntervalMs?: number; enabled?: boolean; maxQueueSize?: number; maxRetries?: number; maxRetryDelayMs?: number; retryIntervalMs?: number; }
+
+
+ |
+
+_(Optional)_ Configuration settings for the event dispatcher.
+
+
+ |
+|
+
+[numInitialRequestRetries?](./node-server-sdk.iclientconfig.numinitialrequestretries.md)
+
+
+ |
+
+
+ |
+
+number
+
+
+ |
+
+_(Optional)_ Number of additional times the initial configuration request will be attempted if it fails. This is the request servers typically synchronously wait for completion. A small wait will be done between requests. (Default: 1)
+
+
+ |
+|
+
+[numPollRequestRetries?](./node-server-sdk.iclientconfig.numpollrequestretries.md)
+
+
+ |
+
+
+ |
+
+number
+
+
+ |
+
+_(Optional)_ Number of additional times polling for updated configurations will be attempted before giving up. Polling is done after a successful initial request. Subsequent attempts are done using an exponential backoff. (Default: 7)
+
+
+ |
+|
+
+[pollAfterFailedInitialization?](./node-server-sdk.iclientconfig.pollafterfailedinitialization.md)
+
+
+ |
+
+
+ |
+
+boolean
+
+
+ |
+
+_(Optional)_ Poll for new configurations even if the initial configuration request failed. (default: false)
+
+
+ |
+|
+
+[pollAfterSuccessfulInitialization?](./node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md)
+
+
+ |
+
+
+ |
+
+boolean
+
+
+ |
+
+_(Optional)_ Poll for new configurations (every `pollingIntervalMs`) after successfully requesting the initial configuration. (default: true) For server-side applications, this defaults to true to ensure configurations stay up-to-date for the life of the process.
+
+
+ |
+|
+
+[pollingIntervalMs?](./node-server-sdk.iclientconfig.pollingintervalms.md)
+
+
+ |
+
+
+ |
+
+number
+
+
+ |
+
+_(Optional)_ Amount of time in milliseconds to wait between API calls to refresh configuration data. Default of 30\_000 (30s).
+
+
+ |
+|
+
+[requestTimeoutMs?](./node-server-sdk.iclientconfig.requesttimeoutms.md)
+
+
+ |
+
+
+ |
+
+number
+
+
+ |
+
+_(Optional)_ Timeout in milliseconds for the HTTPS request for the experiment configuration. (Default: 5000)
+
+
+ |
+|
+
+[throwOnFailedInitialization?](./node-server-sdk.iclientconfig.throwonfailedinitialization.md)
+
+
+ |
+
+
+ |
+
+boolean
+
+
+ |
+
+_(Optional)_ Throw error if unable to fetch an initial configuration during initialization. (default: true)
+
+
+ |
+
+
diff --git a/docs/node-server-sdk.iclientconfig.numinitialrequestretries.md b/docs/node-server-sdk.iclientconfig.numinitialrequestretries.md
index 615468c..5c82bb4 100644
--- a/docs/node-server-sdk.iclientconfig.numinitialrequestretries.md
+++ b/docs/node-server-sdk.iclientconfig.numinitialrequestretries.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [numInitialRequestRetries](./node-server-sdk.iclientconfig.numinitialrequestretries.md)
-
-## IClientConfig.numInitialRequestRetries property
-
-Number of additional times the initial configuration request will be attempted if it fails. This is the request servers typically synchronously wait for completion. A small wait will be done between requests. (Default: 1)
-
-**Signature:**
-
-```typescript
-numInitialRequestRetries?: number;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [numInitialRequestRetries](./node-server-sdk.iclientconfig.numinitialrequestretries.md)
+
+## IClientConfig.numInitialRequestRetries property
+
+Number of additional times the initial configuration request will be attempted if it fails. This is the request servers typically synchronously wait for completion. A small wait will be done between requests. (Default: 1)
+
+**Signature:**
+
+```typescript
+numInitialRequestRetries?: number;
+```
diff --git a/docs/node-server-sdk.iclientconfig.numpollrequestretries.md b/docs/node-server-sdk.iclientconfig.numpollrequestretries.md
index 638e3d3..0ad215d 100644
--- a/docs/node-server-sdk.iclientconfig.numpollrequestretries.md
+++ b/docs/node-server-sdk.iclientconfig.numpollrequestretries.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [numPollRequestRetries](./node-server-sdk.iclientconfig.numpollrequestretries.md)
-
-## IClientConfig.numPollRequestRetries property
-
-Number of additional times polling for updated configurations will be attempted before giving up. Polling is done after a successful initial request. Subsequent attempts are done using an exponential backoff. (Default: 7)
-
-**Signature:**
-
-```typescript
-numPollRequestRetries?: number;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [numPollRequestRetries](./node-server-sdk.iclientconfig.numpollrequestretries.md)
+
+## IClientConfig.numPollRequestRetries property
+
+Number of additional times polling for updated configurations will be attempted before giving up. Polling is done after a successful initial request. Subsequent attempts are done using an exponential backoff. (Default: 7)
+
+**Signature:**
+
+```typescript
+numPollRequestRetries?: number;
+```
diff --git a/docs/node-server-sdk.iclientconfig.pollafterfailedinitialization.md b/docs/node-server-sdk.iclientconfig.pollafterfailedinitialization.md
index 9bd8470..9e4dc15 100644
--- a/docs/node-server-sdk.iclientconfig.pollafterfailedinitialization.md
+++ b/docs/node-server-sdk.iclientconfig.pollafterfailedinitialization.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollAfterFailedInitialization](./node-server-sdk.iclientconfig.pollafterfailedinitialization.md)
-
-## IClientConfig.pollAfterFailedInitialization property
-
-Poll for new configurations even if the initial configuration request failed. (default: false)
-
-**Signature:**
-
-```typescript
-pollAfterFailedInitialization?: boolean;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollAfterFailedInitialization](./node-server-sdk.iclientconfig.pollafterfailedinitialization.md)
+
+## IClientConfig.pollAfterFailedInitialization property
+
+Poll for new configurations even if the initial configuration request failed. (default: false)
+
+**Signature:**
+
+```typescript
+pollAfterFailedInitialization?: boolean;
+```
diff --git a/docs/node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md b/docs/node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md
index c6dd676..58bfd32 100644
--- a/docs/node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md
+++ b/docs/node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollAfterSuccessfulInitialization](./node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md)
-
-## IClientConfig.pollAfterSuccessfulInitialization property
-
-Poll for new configurations (every `pollingIntervalMs`) after successfully requesting the initial configuration. (default: true) For server-side applications, this defaults to true to ensure configurations stay up-to-date for the life of the process.
-
-**Signature:**
-
-```typescript
-pollAfterSuccessfulInitialization?: boolean;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollAfterSuccessfulInitialization](./node-server-sdk.iclientconfig.pollaftersuccessfulinitialization.md)
+
+## IClientConfig.pollAfterSuccessfulInitialization property
+
+Poll for new configurations (every `pollingIntervalMs`) after successfully requesting the initial configuration. (default: true) For server-side applications, this defaults to true to ensure configurations stay up-to-date for the life of the process.
+
+**Signature:**
+
+```typescript
+pollAfterSuccessfulInitialization?: boolean;
+```
diff --git a/docs/node-server-sdk.iclientconfig.pollingintervalms.md b/docs/node-server-sdk.iclientconfig.pollingintervalms.md
index 8f5444b..999b966 100644
--- a/docs/node-server-sdk.iclientconfig.pollingintervalms.md
+++ b/docs/node-server-sdk.iclientconfig.pollingintervalms.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollingIntervalMs](./node-server-sdk.iclientconfig.pollingintervalms.md)
-
-## IClientConfig.pollingIntervalMs property
-
-Amount of time in milliseconds to wait between API calls to refresh configuration data. Default of 30\_000 (30s).
-
-**Signature:**
-
-```typescript
-pollingIntervalMs?: number;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [pollingIntervalMs](./node-server-sdk.iclientconfig.pollingintervalms.md)
+
+## IClientConfig.pollingIntervalMs property
+
+Amount of time in milliseconds to wait between API calls to refresh configuration data. Default of 30\_000 (30s).
+
+**Signature:**
+
+```typescript
+pollingIntervalMs?: number;
+```
diff --git a/docs/node-server-sdk.iclientconfig.requesttimeoutms.md b/docs/node-server-sdk.iclientconfig.requesttimeoutms.md
index 8dbcf24..32b070e 100644
--- a/docs/node-server-sdk.iclientconfig.requesttimeoutms.md
+++ b/docs/node-server-sdk.iclientconfig.requesttimeoutms.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [requestTimeoutMs](./node-server-sdk.iclientconfig.requesttimeoutms.md)
-
-## IClientConfig.requestTimeoutMs property
-
-Timeout in milliseconds for the HTTPS request for the experiment configuration. (Default: 5000)
-
-**Signature:**
-
-```typescript
-requestTimeoutMs?: number;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [requestTimeoutMs](./node-server-sdk.iclientconfig.requesttimeoutms.md)
+
+## IClientConfig.requestTimeoutMs property
+
+Timeout in milliseconds for the HTTPS request for the experiment configuration. (Default: 5000)
+
+**Signature:**
+
+```typescript
+requestTimeoutMs?: number;
+```
diff --git a/docs/node-server-sdk.iclientconfig.throwonfailedinitialization.md b/docs/node-server-sdk.iclientconfig.throwonfailedinitialization.md
index ccbede8..82e8c28 100644
--- a/docs/node-server-sdk.iclientconfig.throwonfailedinitialization.md
+++ b/docs/node-server-sdk.iclientconfig.throwonfailedinitialization.md
@@ -1,13 +1,13 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [throwOnFailedInitialization](./node-server-sdk.iclientconfig.throwonfailedinitialization.md)
-
-## IClientConfig.throwOnFailedInitialization property
-
-Throw error if unable to fetch an initial configuration during initialization. (default: true)
-
-**Signature:**
-
-```typescript
-throwOnFailedInitialization?: boolean;
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IClientConfig](./node-server-sdk.iclientconfig.md) > [throwOnFailedInitialization](./node-server-sdk.iclientconfig.throwonfailedinitialization.md)
+
+## IClientConfig.throwOnFailedInitialization property
+
+Throw error if unable to fetch an initial configuration during initialization. (default: true)
+
+**Signature:**
+
+```typescript
+throwOnFailedInitialization?: boolean;
+```
diff --git a/docs/node-server-sdk.init.md b/docs/node-server-sdk.init.md
index e3fdc00..31d2ed4 100644
--- a/docs/node-server-sdk.init.md
+++ b/docs/node-server-sdk.init.md
@@ -1,54 +1,54 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [init](./node-server-sdk.init.md)
-
-## init() function
-
-Initializes the Eppo client with configuration parameters. This method should be called once on application startup. After invocation of this method, the SDK will poll Eppo API at regular intervals to retrieve assignment configurations.
-
-**Signature:**
-
-```typescript
-export declare function init(config: IClientConfig): Promise;
-```
-
-## Parameters
-
-|
-
-Parameter
-
-
- |
-
-Type
-
-
- |
-
-Description
-
-
- |
-|
-
-config
-
-
- |
-
-[IClientConfig](./node-server-sdk.iclientconfig.md)
-
-
- |
-
-client configuration
-
-
- |
-
-
-**Returns:**
-
-Promise<EppoClient>
-
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [init](./node-server-sdk.init.md)
+
+## init() function
+
+Initializes the Eppo client with configuration parameters. This method should be called once on application startup. After invocation of this method, the SDK will poll Eppo API at regular intervals to retrieve assignment configurations.
+
+**Signature:**
+
+```typescript
+export declare function init(config: IClientConfig): Promise;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+config
+
+
+ |
+
+[IClientConfig](./node-server-sdk.iclientconfig.md)
+
+
+ |
+
+client configuration
+
+
+ |
+
+
+**Returns:**
+
+Promise<EppoClient>
+
diff --git a/docs/node-server-sdk.iofflineclientconfig.assignmentlogger.md b/docs/node-server-sdk.iofflineclientconfig.assignmentlogger.md
new file mode 100644
index 0000000..459021c
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.assignmentlogger.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md) > [assignmentLogger](./node-server-sdk.iofflineclientconfig.assignmentlogger.md)
+
+## IOfflineClientConfig.assignmentLogger property
+
+Optional assignment logger for sending variation assignments to your data warehouse. Required for experiment analysis.
+
+**Signature:**
+
+```typescript
+assignmentLogger?: IAssignmentLogger;
+```
diff --git a/docs/node-server-sdk.iofflineclientconfig.banditlogger.md b/docs/node-server-sdk.iofflineclientconfig.banditlogger.md
new file mode 100644
index 0000000..e959a7f
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.banditlogger.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md) > [banditLogger](./node-server-sdk.iofflineclientconfig.banditlogger.md)
+
+## IOfflineClientConfig.banditLogger property
+
+Optional bandit logger for sending bandit actions to your data warehouse
+
+**Signature:**
+
+```typescript
+banditLogger?: IBanditLogger;
+```
diff --git a/docs/node-server-sdk.iofflineclientconfig.banditsconfiguration.md b/docs/node-server-sdk.iofflineclientconfig.banditsconfiguration.md
new file mode 100644
index 0000000..ffaa98a
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.banditsconfiguration.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md) > [banditsConfiguration](./node-server-sdk.iofflineclientconfig.banditsconfiguration.md)
+
+## IOfflineClientConfig.banditsConfiguration property
+
+Optional bandit models configuration JSON string as returned by the Eppo API. This should be the complete response from the bandit parameters endpoint.
+
+Expected format:
+
+```json
+{
+ "updatedAt": "2024-04-17T19:40:53.716Z",
+ "bandits": { ... }
+}
+```
+
+**Signature:**
+
+```typescript
+banditsConfiguration?: string;
+```
diff --git a/docs/node-server-sdk.iofflineclientconfig.flagsconfiguration.md b/docs/node-server-sdk.iofflineclientconfig.flagsconfiguration.md
new file mode 100644
index 0000000..cb1d4f9
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.flagsconfiguration.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md) > [flagsConfiguration](./node-server-sdk.iofflineclientconfig.flagsconfiguration.md)
+
+## IOfflineClientConfig.flagsConfiguration property
+
+The full flags configuration JSON string as returned by the Eppo API. This should be the complete response from the /flag-config/v1/config endpoint.
+
+Expected format:
+
+```json
+{
+ "createdAt": "2024-04-17T19:40:53.716Z",
+ "format": "SERVER",
+ "environment": { "name": "production" },
+ "flags": { ... }
+}
+```
+
+**Signature:**
+
+```typescript
+flagsConfiguration: string;
+```
diff --git a/docs/node-server-sdk.iofflineclientconfig.md b/docs/node-server-sdk.iofflineclientconfig.md
new file mode 100644
index 0000000..1fbcebf
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.md
@@ -0,0 +1,154 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md)
+
+## IOfflineClientConfig interface
+
+Configuration used for offline initialization of the Eppo client. Offline initialization allows the SDK to be used without making any network requests.
+
+**Signature:**
+
+```typescript
+export interface IOfflineClientConfig
+```
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[assignmentLogger?](./node-server-sdk.iofflineclientconfig.assignmentlogger.md)
+
+
+ |
+
+
+ |
+
+IAssignmentLogger
+
+
+ |
+
+_(Optional)_ Optional assignment logger for sending variation assignments to your data warehouse. Required for experiment analysis.
+
+
+ |
+|
+
+[banditLogger?](./node-server-sdk.iofflineclientconfig.banditlogger.md)
+
+
+ |
+
+
+ |
+
+IBanditLogger
+
+
+ |
+
+_(Optional)_ Optional bandit logger for sending bandit actions to your data warehouse
+
+
+ |
+|
+
+[banditsConfiguration?](./node-server-sdk.iofflineclientconfig.banditsconfiguration.md)
+
+
+ |
+
+
+ |
+
+string
+
+
+ |
+
+_(Optional)_ Optional bandit models configuration JSON string as returned by the Eppo API. This should be the complete response from the bandit parameters endpoint.
+
+Expected format:
+
+```json
+{
+ "updatedAt": "2024-04-17T19:40:53.716Z",
+ "bandits": { ... }
+}
+```
+
+
+ |
+|
+
+[flagsConfiguration](./node-server-sdk.iofflineclientconfig.flagsconfiguration.md)
+
+
+ |
+
+
+ |
+
+string
+
+
+ |
+
+The full flags configuration JSON string as returned by the Eppo API. This should be the complete response from the /flag-config/v1/config endpoint.
+
+Expected format:
+
+```json
+{
+ "createdAt": "2024-04-17T19:40:53.716Z",
+ "format": "SERVER",
+ "environment": { "name": "production" },
+ "flags": { ... }
+}
+```
+
+
+ |
+|
+
+[throwOnFailedInitialization?](./node-server-sdk.iofflineclientconfig.throwonfailedinitialization.md)
+
+
+ |
+
+
+ |
+
+boolean
+
+
+ |
+
+_(Optional)_ Whether to throw an error if initialization fails. (default: true) If false, the client will be initialized with an empty configuration.
+
+
+ |
+
+
diff --git a/docs/node-server-sdk.iofflineclientconfig.throwonfailedinitialization.md b/docs/node-server-sdk.iofflineclientconfig.throwonfailedinitialization.md
new file mode 100644
index 0000000..5b95304
--- /dev/null
+++ b/docs/node-server-sdk.iofflineclientconfig.throwonfailedinitialization.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md) > [throwOnFailedInitialization](./node-server-sdk.iofflineclientconfig.throwonfailedinitialization.md)
+
+## IOfflineClientConfig.throwOnFailedInitialization property
+
+Whether to throw an error if initialization fails. (default: true) If false, the client will be initialized with an empty configuration.
+
+**Signature:**
+
+```typescript
+throwOnFailedInitialization?: boolean;
+```
diff --git a/docs/node-server-sdk.md b/docs/node-server-sdk.md
index 90b156f..8f26e81 100644
--- a/docs/node-server-sdk.md
+++ b/docs/node-server-sdk.md
@@ -1,93 +1,137 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md)
-
-## node-server-sdk package
-
-## Functions
-
-|
-
-Function
-
-
- |
-
-Description
-
-
- |
-|
-
-[getInstance()](./node-server-sdk.getinstance.md)
-
-
- |
-
-Used to access a singleton SDK client instance. Use the method after calling init() to initialize the client.
-
-
- |
-|
-
-[init(config)](./node-server-sdk.init.md)
-
-
- |
-
-Initializes the Eppo client with configuration parameters. This method should be called once on application startup. After invocation of this method, the SDK will poll Eppo API at regular intervals to retrieve assignment configurations.
-
-
- |
-
-
-## Interfaces
-
-|
-
-Interface
-
-
- |
-
-Description
-
-
- |
-|
-
-[IClientConfig](./node-server-sdk.iclientconfig.md)
-
-
- |
-
-Configuration used for initializing the Eppo client
-
-
- |
-
-
-## Variables
-
-|
-
-Variable
-
-
- |
-
-Description
-
-
- |
-|
-
-[NO\_OP\_EVENT\_DISPATCHER](./node-server-sdk.no_op_event_dispatcher.md)
-
-
- |
-
-
- |
-
-
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md)
+
+## node-server-sdk package
+
+## Functions
+
+|
+
+Function
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[getBanditsConfiguration()](./node-server-sdk.getbanditsconfiguration.md)
+
+
+ |
+
+Returns the current bandits configuration as a JSON string. This can be used together with getFlagsConfiguration() to bootstrap another SDK instance using offlineInit().
+
+
+ |
+|
+
+[getFlagsConfiguration()](./node-server-sdk.getflagsconfiguration.md)
+
+
+ |
+
+Reconstructs the current flags configuration as a JSON string. This can be used to bootstrap another SDK instance using offlineInit().
+
+
+ |
+|
+
+[getInstance()](./node-server-sdk.getinstance.md)
+
+
+ |
+
+Used to access a singleton SDK client instance. Use the method after calling init() to initialize the client.
+
+
+ |
+|
+
+[init(config)](./node-server-sdk.init.md)
+
+
+ |
+
+Initializes the Eppo client with configuration parameters. This method should be called once on application startup. After invocation of this method, the SDK will poll Eppo API at regular intervals to retrieve assignment configurations.
+
+
+ |
+|
+
+[offlineInit(config)](./node-server-sdk.offlineinit.md)
+
+
+ |
+
+Initializes the Eppo client in offline mode with a provided configuration. This method is synchronous and does not make any network requests. Use this when you want to initialize the SDK with a previously fetched configuration.
+
+
+ |
+
+
+## Interfaces
+
+|
+
+Interface
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[IClientConfig](./node-server-sdk.iclientconfig.md)
+
+
+ |
+
+Configuration used for initializing the Eppo client
+
+
+ |
+|
+
+[IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md)
+
+
+ |
+
+Configuration used for offline initialization of the Eppo client. Offline initialization allows the SDK to be used without making any network requests.
+
+
+ |
+
+
+## Variables
+
+|
+
+Variable
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[NO\_OP\_EVENT\_DISPATCHER](./node-server-sdk.no_op_event_dispatcher.md)
+
+
+ |
+
+
+ |
+
+
diff --git a/docs/node-server-sdk.no_op_event_dispatcher.md b/docs/node-server-sdk.no_op_event_dispatcher.md
index 830f09a..e322135 100644
--- a/docs/node-server-sdk.no_op_event_dispatcher.md
+++ b/docs/node-server-sdk.no_op_event_dispatcher.md
@@ -1,11 +1,16 @@
-
-
-[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [NO\_OP\_EVENT\_DISPATCHER](./node-server-sdk.no_op_event_dispatcher.md)
-
-## NO\_OP\_EVENT\_DISPATCHER variable
-
-**Signature:**
-
-```typescript
-NO_OP_EVENT_DISPATCHER: EventDispatcher
-```
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [NO\_OP\_EVENT\_DISPATCHER](./node-server-sdk.no_op_event_dispatcher.md)
+
+## NO\_OP\_EVENT\_DISPATCHER variable
+
+> Warning: This API is now obsolete.
+>
+> Eppo has discontinued eventing support. Event tracking will be handled by Datadog SDKs.
+>
+
+**Signature:**
+
+```typescript
+NO_OP_EVENT_DISPATCHER: EventDispatcher
+```
diff --git a/docs/node-server-sdk.offlineinit.md b/docs/node-server-sdk.offlineinit.md
new file mode 100644
index 0000000..7203063
--- /dev/null
+++ b/docs/node-server-sdk.offlineinit.md
@@ -0,0 +1,56 @@
+
+
+[Home](./index.md) > [@eppo/node-server-sdk](./node-server-sdk.md) > [offlineInit](./node-server-sdk.offlineinit.md)
+
+## offlineInit() function
+
+Initializes the Eppo client in offline mode with a provided configuration. This method is synchronous and does not make any network requests. Use this when you want to initialize the SDK with a previously fetched configuration.
+
+**Signature:**
+
+```typescript
+export declare function offlineInit(config: IOfflineClientConfig): EppoClient;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+config
+
+
+ |
+
+[IOfflineClientConfig](./node-server-sdk.iofflineclientconfig.md)
+
+
+ |
+
+offline client configuration containing flag configurations as JSON strings
+
+
+ |
+
+
+**Returns:**
+
+EppoClient
+
+the initialized client instance
+
diff --git a/node-server-sdk.api.md b/node-server-sdk.api.md
index 9f5b0b5..c7b1825 100644
--- a/node-server-sdk.api.md
+++ b/node-server-sdk.api.md
@@ -30,6 +30,12 @@ export { ContextAttributes }
export { EppoAssignmentLogger }
+// @public
+export function getBanditsConfiguration(): string;
+
+// @public
+export function getFlagsConfiguration(): string | null;
+
// @public
export function getInstance(): EppoClient;
@@ -49,6 +55,7 @@ export interface IClientConfig {
assignmentLogger: IAssignmentLogger;
banditLogger?: IBanditLogger;
baseUrl?: string;
+ // @deprecated
eventTracking?: {
batchSize?: number;
deliveryIntervalMs?: number;
@@ -70,9 +77,21 @@ export interface IClientConfig {
// @public
export function init(config: IClientConfig): Promise;
-// @public (undocumented)
+// @public
+export interface IOfflineClientConfig {
+ assignmentLogger?: IAssignmentLogger;
+ banditLogger?: IBanditLogger;
+ banditsConfiguration?: string;
+ flagsConfiguration: string;
+ throwOnFailedInitialization?: boolean;
+}
+
+// @public @deprecated (undocumented)
export const NO_OP_EVENT_DISPATCHER: EventDispatcher;
+// @public
+export function offlineInit(config: IOfflineClientConfig): EppoClient;
+
// (No @packageDocumentation comment for this package)
```
diff --git a/package.json b/package.json
index 3823439..f315f4d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@eppo/node-server-sdk",
- "version": "3.13.0",
+ "version": "4.0.0",
"description": "Eppo node server SDK",
"main": "dist/index.js",
"files": [
@@ -55,12 +55,12 @@
"typescript": "^5.4.5"
},
"engines": {
- "node": ">=18.x",
+ "node": ">=20.x",
"yarn": "1.x"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
"resolutions": {
"minimatch": "^3.1.2",
- "@types/node": "^18.19.0"
+ "@types/node": "^20.0.0"
}
}
diff --git a/yarn.lock b/yarn.lock
index 18a1bd3..82d3604 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -905,12 +905,12 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
-"@types/node@*", "@types/node@^18.19.0":
- version "18.19.130"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.130.tgz#da4c6324793a79defb7a62cba3947ec5add00d59"
- integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==
+"@types/node@*", "@types/node@^20.0.0":
+ version "20.19.30"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.30.tgz#84fa87498ade5cd2b6ba8f8eec01d3b138ca60d0"
+ integrity sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==
dependencies:
- undici-types "~5.26.4"
+ undici-types "~6.21.0"
"@types/qs@*":
version "6.14.0"
@@ -4999,10 +4999,10 @@ unbox-primitive@^1.1.0:
has-symbols "^1.1.0"
which-boxed-primitive "^1.1.1"
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
universalify@^2.0.0:
version "2.0.1"