vwo-fme-node-sdk 1.38.0 → 1.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +21 -12
  3. package/dist/VERSION.js +1 -1
  4. package/dist/client/vwo-fme-javascript-sdk.js +1182 -286
  5. package/dist/client/vwo-fme-javascript-sdk.js.map +1 -1
  6. package/dist/client/vwo-fme-javascript-sdk.min.js +3 -3
  7. package/dist/client/vwo-fme-javascript-sdk.min.js.map +1 -1
  8. package/dist/esm/VWOBuilder.js +24 -6
  9. package/dist/esm/VWOBuilder.js.map +1 -1
  10. package/dist/esm/VWOClient.js +12 -2
  11. package/dist/esm/VWOClient.js.map +1 -1
  12. package/dist/esm/api/GetFlag.js +235 -14
  13. package/dist/esm/api/GetFlag.js.map +1 -1
  14. package/dist/esm/api/TrackEvent.js +3 -2
  15. package/dist/esm/api/TrackEvent.js.map +1 -1
  16. package/dist/esm/constants/index.js +2 -0
  17. package/dist/esm/constants/index.js.map +1 -1
  18. package/dist/esm/decorators/StorageDecorator.js +3 -1
  19. package/dist/esm/decorators/StorageDecorator.js.map +1 -1
  20. package/dist/esm/enums/EventEnum.js +1 -0
  21. package/dist/esm/enums/EventEnum.js.map +1 -1
  22. package/dist/esm/enums/NetworkTransportModeEnum.js +21 -0
  23. package/dist/esm/enums/NetworkTransportModeEnum.js.map +1 -0
  24. package/dist/esm/index.js +2 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/models/VWOOptionsModel.js +30 -0
  27. package/dist/esm/models/VWOOptionsModel.js.map +1 -1
  28. package/dist/esm/models/browser/BrowserConfigModel.js +17 -0
  29. package/dist/esm/models/browser/BrowserConfigModel.js.map +1 -0
  30. package/dist/esm/models/campaign/HoldoutModel.js +81 -0
  31. package/dist/esm/models/campaign/HoldoutModel.js.map +1 -0
  32. package/dist/esm/models/schemas/SettingsSchemaValidation.js +17 -1
  33. package/dist/esm/models/schemas/SettingsSchemaValidation.js.map +1 -1
  34. package/dist/esm/models/settings/SettingsModel.js +11 -0
  35. package/dist/esm/models/settings/SettingsModel.js.map +1 -1
  36. package/dist/esm/models/storage/StorageDataModel.js +8 -0
  37. package/dist/esm/models/storage/StorageDataModel.js.map +1 -1
  38. package/dist/esm/packages/network-layer/client/NetworkBrowserClient.js +68 -81
  39. package/dist/esm/packages/network-layer/client/NetworkBrowserClient.js.map +1 -1
  40. package/dist/esm/packages/network-layer/manager/NetworkManager.js +3 -6
  41. package/dist/esm/packages/network-layer/manager/NetworkManager.js.map +1 -1
  42. package/dist/esm/packages/segmentation-evaluator/core/SegmentationManger.js +5 -1
  43. package/dist/esm/packages/segmentation-evaluator/core/SegmentationManger.js.map +1 -1
  44. package/dist/esm/packages/storage/connectors/BrowserStorageConnector.js.map +1 -1
  45. package/dist/esm/services/BatchEventsQueue.js +3 -2
  46. package/dist/esm/services/BatchEventsQueue.js.map +1 -1
  47. package/dist/esm/services/SettingsService.js +3 -2
  48. package/dist/esm/services/SettingsService.js.map +1 -1
  49. package/dist/esm/utils/FunctionUtil.js +12 -0
  50. package/dist/esm/utils/FunctionUtil.js.map +1 -1
  51. package/dist/esm/utils/GatewayServiceUtil.js +24 -5
  52. package/dist/esm/utils/GatewayServiceUtil.js.map +1 -1
  53. package/dist/esm/utils/HoldoutUtil.js +187 -0
  54. package/dist/esm/utils/HoldoutUtil.js.map +1 -0
  55. package/dist/esm/utils/ImpressionUtil.js +28 -4
  56. package/dist/esm/utils/ImpressionUtil.js.map +1 -1
  57. package/dist/esm/utils/MegUtil.js +52 -23
  58. package/dist/esm/utils/MegUtil.js.map +1 -1
  59. package/dist/esm/utils/NetworkUtil.js +37 -8
  60. package/dist/esm/utils/NetworkUtil.js.map +1 -1
  61. package/dist/esm/utils/RuleEvaluationUtil.js +5 -8
  62. package/dist/esm/utils/RuleEvaluationUtil.js.map +1 -1
  63. package/dist/esm/utils/SDKMetaUtil.js +57 -0
  64. package/dist/esm/utils/SDKMetaUtil.js.map +1 -0
  65. package/dist/package.json +2 -2
  66. package/dist/server/vwo-fme-node-sdk.js +1316 -292
  67. package/dist/server/vwo-fme-node-sdk.js.map +1 -1
  68. package/dist/server/vwo-fme-node-sdk.min.js +3 -3
  69. package/dist/server/vwo-fme-node-sdk.min.js.map +1 -1
  70. package/dist/server-unpacked/VWOBuilder.js +23 -5
  71. package/dist/server-unpacked/VWOBuilder.js.map +1 -1
  72. package/dist/server-unpacked/VWOClient.js +12 -2
  73. package/dist/server-unpacked/VWOClient.js.map +1 -1
  74. package/dist/server-unpacked/api/GetFlag.js +367 -126
  75. package/dist/server-unpacked/api/GetFlag.js.map +1 -1
  76. package/dist/server-unpacked/api/TrackEvent.js +2 -1
  77. package/dist/server-unpacked/api/TrackEvent.js.map +1 -1
  78. package/dist/server-unpacked/constants/index.js +2 -0
  79. package/dist/server-unpacked/constants/index.js.map +1 -1
  80. package/dist/server-unpacked/decorators/StorageDecorator.js +3 -1
  81. package/dist/server-unpacked/decorators/StorageDecorator.js.map +1 -1
  82. package/dist/server-unpacked/enums/EventEnum.js +1 -0
  83. package/dist/server-unpacked/enums/EventEnum.js.map +1 -1
  84. package/dist/server-unpacked/enums/NetworkTransportModeEnum.js +24 -0
  85. package/dist/server-unpacked/enums/NetworkTransportModeEnum.js.map +1 -0
  86. package/dist/server-unpacked/index.js +3 -1
  87. package/dist/server-unpacked/index.js.map +1 -1
  88. package/dist/server-unpacked/models/VWOOptionsModel.js +32 -0
  89. package/dist/server-unpacked/models/VWOOptionsModel.js.map +1 -1
  90. package/dist/server-unpacked/models/browser/BrowserConfigModel.js +18 -0
  91. package/dist/server-unpacked/models/browser/BrowserConfigModel.js.map +1 -0
  92. package/dist/server-unpacked/models/campaign/HoldoutModel.js +88 -0
  93. package/dist/server-unpacked/models/campaign/HoldoutModel.js.map +1 -0
  94. package/dist/server-unpacked/models/schemas/SettingsSchemaValidation.js +16 -0
  95. package/dist/server-unpacked/models/schemas/SettingsSchemaValidation.js.map +1 -1
  96. package/dist/server-unpacked/models/settings/SettingsModel.js +11 -0
  97. package/dist/server-unpacked/models/settings/SettingsModel.js.map +1 -1
  98. package/dist/server-unpacked/models/storage/StorageDataModel.js +8 -0
  99. package/dist/server-unpacked/models/storage/StorageDataModel.js.map +1 -1
  100. package/dist/server-unpacked/packages/network-layer/client/NetworkBrowserClient.js +69 -81
  101. package/dist/server-unpacked/packages/network-layer/client/NetworkBrowserClient.js.map +1 -1
  102. package/dist/server-unpacked/packages/network-layer/manager/NetworkManager.js +4 -6
  103. package/dist/server-unpacked/packages/network-layer/manager/NetworkManager.js.map +1 -1
  104. package/dist/server-unpacked/packages/segmentation-evaluator/core/SegmentationManger.js +5 -2
  105. package/dist/server-unpacked/packages/segmentation-evaluator/core/SegmentationManger.js.map +1 -1
  106. package/dist/server-unpacked/packages/storage/connectors/BrowserStorageConnector.js.map +1 -1
  107. package/dist/server-unpacked/services/BatchEventsQueue.js +3 -2
  108. package/dist/server-unpacked/services/BatchEventsQueue.js.map +1 -1
  109. package/dist/server-unpacked/services/SettingsService.js +3 -2
  110. package/dist/server-unpacked/services/SettingsService.js.map +1 -1
  111. package/dist/server-unpacked/utils/FunctionUtil.js +13 -0
  112. package/dist/server-unpacked/utils/FunctionUtil.js.map +1 -1
  113. package/dist/server-unpacked/utils/GatewayServiceUtil.js +25 -5
  114. package/dist/server-unpacked/utils/GatewayServiceUtil.js.map +1 -1
  115. package/dist/server-unpacked/utils/HoldoutUtil.js +262 -0
  116. package/dist/server-unpacked/utils/HoldoutUtil.js.map +1 -0
  117. package/dist/server-unpacked/utils/ImpressionUtil.js +36 -5
  118. package/dist/server-unpacked/utils/ImpressionUtil.js.map +1 -1
  119. package/dist/server-unpacked/utils/MegUtil.js +46 -13
  120. package/dist/server-unpacked/utils/MegUtil.js.map +1 -1
  121. package/dist/server-unpacked/utils/NetworkUtil.js +36 -7
  122. package/dist/server-unpacked/utils/NetworkUtil.js.map +1 -1
  123. package/dist/server-unpacked/utils/RuleEvaluationUtil.js +19 -21
  124. package/dist/server-unpacked/utils/RuleEvaluationUtil.js.map +1 -1
  125. package/dist/server-unpacked/utils/SDKMetaUtil.js +63 -0
  126. package/dist/server-unpacked/utils/SDKMetaUtil.js.map +1 -0
  127. package/dist/types/constants/index.d.ts +2 -0
  128. package/dist/types/enums/EventEnum.d.ts +1 -0
  129. package/dist/types/enums/NetworkTransportModeEnum.d.ts +19 -0
  130. package/dist/types/index.d.ts +2 -0
  131. package/dist/types/models/VWOOptionsModel.d.ts +25 -0
  132. package/dist/types/models/browser/BrowserConfigModel.d.ts +21 -0
  133. package/dist/types/models/campaign/HoldoutModel.d.ts +39 -0
  134. package/dist/types/models/schemas/SettingsSchemaValidation.d.ts +1 -0
  135. package/dist/types/models/settings/SettingsModel.d.ts +3 -0
  136. package/dist/types/models/storage/StorageDataModel.d.ts +4 -0
  137. package/dist/types/packages/network-layer/client/NetworkBrowserClient.d.ts +10 -2
  138. package/dist/types/packages/network-layer/manager/NetworkManager.d.ts +2 -0
  139. package/dist/types/packages/storage/connectors/BrowserStorageConnector.d.ts +2 -0
  140. package/dist/types/utils/FunctionUtil.d.ts +7 -0
  141. package/dist/types/utils/GatewayServiceUtil.d.ts +2 -2
  142. package/dist/types/utils/HoldoutUtil.d.ts +63 -0
  143. package/dist/types/utils/ImpressionUtil.d.ts +13 -3
  144. package/dist/types/utils/NetworkUtil.d.ts +19 -0
  145. package/dist/types/utils/SDKMetaUtil.d.ts +43 -0
  146. package/lib/VWOBuilder.ts +35 -6
  147. package/lib/VWOClient.ts +12 -2
  148. package/lib/api/GetFlag.ts +377 -48
  149. package/lib/api/TrackEvent.ts +6 -2
  150. package/lib/constants/index.ts +2 -0
  151. package/lib/decorators/StorageDecorator.ts +4 -0
  152. package/lib/enums/EventEnum.ts +1 -0
  153. package/lib/enums/NetworkTransportModeEnum.ts +19 -0
  154. package/lib/index.ts +2 -0
  155. package/lib/models/VWOOptionsModel.ts +46 -0
  156. package/lib/models/browser/BrowserConfigModel.ts +23 -0
  157. package/lib/models/campaign/HoldoutModel.ts +95 -0
  158. package/lib/models/schemas/SettingsSchemaValidation.ts +20 -1
  159. package/lib/models/settings/SettingsModel.ts +13 -0
  160. package/lib/models/storage/StorageDataModel.ts +12 -1
  161. package/lib/packages/network-layer/client/NetworkBrowserClient.ts +82 -84
  162. package/lib/packages/network-layer/manager/NetworkManager.ts +3 -7
  163. package/lib/packages/segmentation-evaluator/core/SegmentationManger.ts +7 -1
  164. package/lib/packages/storage/connectors/BrowserStorageConnector.ts +2 -0
  165. package/lib/services/BatchEventsQueue.ts +3 -2
  166. package/lib/services/SettingsService.ts +3 -2
  167. package/lib/utils/FunctionUtil.ts +13 -0
  168. package/lib/utils/GatewayServiceUtil.ts +25 -5
  169. package/lib/utils/HoldoutUtil.ts +254 -0
  170. package/lib/utils/ImpressionUtil.ts +30 -13
  171. package/lib/utils/MegUtil.ts +80 -30
  172. package/lib/utils/NetworkUtil.ts +54 -8
  173. package/lib/utils/RuleEvaluationUtil.ts +11 -19
  174. package/lib/utils/SDKMetaUtil.ts +72 -0
  175. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,45 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.40.1] - 2026-03-02
9
+
10
+ ### Changed
11
+
12
+ - Introduced `SDKMetaUtil` and `sdkMeta` config to allow overriding the default SDK name and version used in events. VWO FE React SDK will consume via it.
13
+
14
+ ## [1.40.0] - 2026-02-26
15
+
16
+ ### Added
17
+
18
+ - Enhanced browser tracking implementation: now uses `navigator.sendBeacon` by default for sending events, falling back to XHR when needed. This behavior is configurable via `browserConfig.networkTransportMode` (`'sendBeacon'` or `'xhr'`).
19
+ - Added `browserConfig` for browser-specific configuration, including `networkTransportMode` and `clientStorage`. `browserConfig.clientStorage` is preferred over the top-level `clientStorage`, with a safe `{}` fallback when neither is provided.
20
+
21
+ Example usage:
22
+
23
+ ```javascript
24
+ // Default: use sendBeacon in browser (with XHR fallback)
25
+ const vwoClient = await init({
26
+ accountId: '123456',
27
+ sdkKey: '32-alpha-numeric-sdk-key',
28
+ // browserConfig.networkTransportMode defaults to 'sendBeacon'
29
+ });
30
+
31
+ // Force XHR for all browser tracking requests
32
+ const vwoClientWithXHR = await init({
33
+ accountId: '123456',
34
+ sdkKey: '32-alpha-numeric-sdk-key',
35
+ browserConfig: {
36
+ networkTransportMode: NetworkTransportMode.XHR,
37
+ },
38
+ });
39
+ ```
40
+
41
+ ## [1.39.0] - 2025-02-26
42
+
43
+ ### Added
44
+
45
+ - Added support for holdout groups to exclude users from features based on segmentation and traffic allocation.
46
+
8
47
  ## [1.38.0] - 2026-02-16
9
48
 
10
49
  ### Added
package/README.md CHANGED
@@ -92,7 +92,7 @@ To customize the SDK further, additional parameters can be passed to the `init()
92
92
  | `pollInterval` | Time interval for fetching updates from VWO servers (in milliseconds). | No | Number | `60000` |
93
93
  | `gatewayService` | An object representing configuration for integrating VWO Gateway Service. | No | Object | see [Gateway](#gateway) section |
94
94
  | `storage` | Custom storage connector for persisting user decisions and campaign data. | No | Object | See [Storage](#storage) section |
95
- | `clientStorage` | Browser storage configuration for persisting user data in browser environments. | No | Object | See [Client Storage](#client-storage) section |
95
+ | `browserConfig` | Browser-specific configuration, including network transport mode and browser storage options. | No | Object | See [Browser Config](#browser-config) section |
96
96
  | `logger` | Toggle log levels for more insights or for debugging purposes. You can also customize your own transport in order to have better control over log messages. | No | Object | See [Logger](#logger) section |
97
97
  | `shouldWaitForTrackingCalls` | Ensures tracking calls complete before resolving promises, useful for edge computing environments like Cloudflare Workers | No | Boolean | `true` |
98
98
  | `integrations` | A callback function that receives data which can be pushed to any external tool that you need to integrate with. | No | Object | See [Integrations](#integrations) |
@@ -363,27 +363,36 @@ const vwoClient = await init({
363
363
  });
364
364
  ```
365
365
 
366
- ### Client Storage
366
+ ### Browser Config
367
367
 
368
- In browser environments, the SDK automatically uses `localStorage` to persist user data. You can customize this behavior using the `clientStorage` option:
368
+ In browser environments, the SDK automatically uses `localStorage` to persist user data and `navigator.sendBeacon` to send tracking events (with XHR fallback). You can customize this behavior using the `browserConfig` option, which exposes both `networkTransportMode` and `clientStorage`:
369
369
 
370
370
  ```javascript
371
371
  const vwoClient = await init({
372
372
  accountId: '123456',
373
373
  sdkKey: '32-alpha-numeric-sdk-key',
374
- clientStorage: {
375
- key: 'vwo_data', // defaults to vwo_fme_data
376
- provider: sessionStorage, // defaults to localStorage
377
- isDisabled: false, // defaults to false, set to true to disable storage
374
+ browserConfig: {
375
+ // Control how tracking calls are sent from the browser
376
+ // 'sendBeacon' (default) uses navigator.sendBeacon with XHR fallback
377
+ // 'xhr' forces XHR for all tracking requests including retry functionality
378
+ networkTransportMode: 'sendBeacon',
379
+
380
+ // Configure browser storage behavior
381
+ clientStorage: {
382
+ key: 'vwo_data', // defaults to vwo_fme_data
383
+ provider: sessionStorage, // defaults to localStorage
384
+ isDisabled: false, // defaults to false, set to true to disable storage
385
+ },
378
386
  },
379
387
  });
380
388
  ```
381
389
 
382
- | **Parameter** | **Description** | **Required** | **Type** | **Default** |
383
- | ------------- | ------------------------------------------------- | ------------ | -------- | ---------------- |
384
- | `key` | Key used to store data in browser storage | No | String | `'vwo_fme_data'` |
385
- | `provider` | Storage provider (localStorage or sessionStorage) | No | Object | `localStorage` |
386
- | `isDisabled` | Disable browser storage completely | No | Boolean | `false` |
390
+ | **browserConfig Property** | **Description** | **Required** | **Type** | **Default** |
391
+ | -------------------------- | -------------------------------------------------------------------------- | ------------ | -------- | ---------------- |
392
+ | `networkTransportMode` | How tracking events are sent from the browser (`'sendBeacon'` or `'xhr'`). | No | String | `'sendBeacon'` |
393
+ | `clientStorage.key` | Key used to store data in browser storage. | No | String | `'vwo_fme_data'` |
394
+ | `clientStorage.provider` | Storage provider (e.g. `localStorage` or `sessionStorage`). | No | Object | `localStorage` |
395
+ | `clientStorage.isDisabled` | Disable browser storage completely. | No | Boolean | `false` |
387
396
 
388
397
  Note: This feature is only applicable in browser environments. In Node.js environments, you should continue using the `storage` option for custom storage implementations.
389
398
 
package/dist/VERSION.js CHANGED
@@ -1 +1 @@
1
- module.exports = { version: "1.38.0" };
1
+ module.exports = { version: "1.40.1" };