@splitsoftware/splitio 10.17.3-rc.1 → 10.17.3-rc.4

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 (759) hide show
  1. package/CHANGES.txt +3 -0
  2. package/es/client/attributesDecoration.js +116 -0
  3. package/es/client/browser.js +39 -0
  4. package/es/client/client.js +155 -0
  5. package/es/client/inputValidation.js +117 -0
  6. package/es/client/node.js +6 -0
  7. package/es/{factory → client}/package.json +0 -0
  8. package/es/engine/combiners/and.js +54 -0
  9. package/es/engine/combiners/ifelseif.js +73 -0
  10. package/es/engine/condition/index.js +62 -0
  11. package/es/engine/convertions/index.js +29 -0
  12. package/es/engine/engine/index.js +60 -0
  13. package/es/engine/engine/legacy.js +77 -0
  14. package/es/engine/engine/murmur3/common.js +40 -0
  15. package/es/engine/engine/murmur3/murmur3.js +83 -0
  16. package/es/engine/engine/murmur3/murmur3_128.js +250 -0
  17. package/es/engine/engine/murmur3/murmur3_128_x86.js +183 -0
  18. package/es/engine/engine/murmur3/murmur3_64.js +52 -0
  19. package/es/engine/engine/murmur3/utfx.js +112 -0
  20. package/es/engine/evaluator/index.js +111 -0
  21. package/es/engine/index.js +112 -0
  22. package/es/engine/matchers/all.js +32 -0
  23. package/es/engine/matchers/between.js +35 -0
  24. package/es/engine/matchers/boolean.js +35 -0
  25. package/es/engine/matchers/cont_all.js +51 -0
  26. package/es/engine/matchers/cont_any.js +47 -0
  27. package/es/engine/matchers/cont_str.js +38 -0
  28. package/es/engine/matchers/dependency.js +50 -0
  29. package/es/engine/matchers/eq.js +35 -0
  30. package/es/engine/matchers/eq_set.js +49 -0
  31. package/es/engine/matchers/ew.js +38 -0
  32. package/es/engine/matchers/gte.js +35 -0
  33. package/es/engine/matchers/index.js +65 -0
  34. package/es/engine/matchers/lte.js +35 -0
  35. package/es/engine/matchers/part_of.js +49 -0
  36. package/es/engine/matchers/segment.js +39 -0
  37. package/es/engine/matchers/string.js +44 -0
  38. package/es/engine/matchers/sw.js +38 -0
  39. package/es/engine/matchers/types.js +48 -0
  40. package/es/engine/matchers/whitelist.js +36 -0
  41. package/es/engine/parser/index.js +69 -0
  42. package/es/engine/parser/segments.js +22 -0
  43. package/es/engine/transforms/matcherGroup.js +43 -0
  44. package/es/engine/transforms/matchers.js +109 -0
  45. package/es/engine/transforms/segment.js +28 -0
  46. package/es/engine/transforms/set.js +20 -0
  47. package/es/engine/transforms/unaryNumeric.js +20 -0
  48. package/es/engine/transforms/whitelist.js +22 -0
  49. package/es/engine/treatments/index.js +67 -0
  50. package/es/engine/value/index.js +54 -0
  51. package/es/engine/value/sanitize.js +125 -0
  52. package/es/events/index.js +65 -0
  53. package/es/factory/offline.js +50 -0
  54. package/es/factory/online.js +113 -0
  55. package/es/impressions/counter.js +52 -0
  56. package/es/impressions/hasher/buildKey.js +3 -0
  57. package/es/impressions/hasher/hashImpression128.js +5 -0
  58. package/es/impressions/hasher/hashImpression32.js +5 -0
  59. package/es/impressions/observer/browser.js +9 -0
  60. package/es/impressions/observer/node.js +9 -0
  61. package/es/impressions/observer/observer.js +21 -0
  62. package/es/{platform/getEventSource → impressions/observer}/package.json +0 -0
  63. package/es/index.js +132 -1
  64. package/es/integrations/browser.js +62 -0
  65. package/es/integrations/ga/GaToSplit.js +246 -0
  66. package/es/integrations/ga/SplitToGa.js +127 -0
  67. package/es/integrations/node.js +3 -0
  68. package/es/{platform/getFetch → integrations}/package.json +0 -0
  69. package/es/listeners/browser.js +157 -0
  70. package/es/listeners/node.js +65 -0
  71. package/es/{platform → listeners}/package.json +0 -0
  72. package/es/manager/index.js +104 -0
  73. package/es/metrics/Collectors.js +100 -0
  74. package/es/metrics/index.js +157 -0
  75. package/es/producer/browser/Partial.js +103 -0
  76. package/es/producer/browser.js +70 -0
  77. package/es/producer/fetcher/MySegments.js +47 -0
  78. package/es/producer/fetcher/SegmentChanges.js +52 -0
  79. package/es/producer/fetcher/SplitChanges.js +46 -0
  80. package/es/producer/node.js +130 -0
  81. package/es/producer/offline/browser.js +26 -0
  82. package/es/producer/offline/node.js +26 -0
  83. package/es/{settings → producer/offline}/package.json +0 -0
  84. package/{lib/factory → es/producer}/package.json +0 -0
  85. package/es/producer/task.js +50 -0
  86. package/es/producer/updater/MySegments.js +108 -0
  87. package/es/producer/updater/SegmentChanges.js +135 -0
  88. package/es/producer/updater/SplitChanges.js +131 -0
  89. package/es/producer/updater/SplitChangesFromFeatures.js +21 -0
  90. package/es/producer/updater/SplitChangesFromFileSystem.js +21 -0
  91. package/es/producer/updater/SplitChangesFromObject.js +73 -0
  92. package/es/readiness/index.js +123 -0
  93. package/es/readiness/statusManager.js +114 -0
  94. package/es/services/auth/auth.js +25 -0
  95. package/es/services/auth/index.js +2 -0
  96. package/es/services/events/bulk.js +22 -0
  97. package/es/services/events/index.js +17 -0
  98. package/{src/platform → es/services}/getEventSource/browser.js +2 -2
  99. package/es/{platform → services}/getEventSource/node.js +1 -1
  100. package/{lib/platform → es/services}/getEventSource/package.json +0 -0
  101. package/es/{platform → services}/getFetch/browser.js +1 -1
  102. package/es/{platform → services}/getFetch/node.js +1 -1
  103. package/{lib/platform → es/services}/getFetch/package.json +0 -0
  104. package/es/services/impressions/bulk.js +26 -0
  105. package/es/services/impressions/count.js +7 -0
  106. package/es/services/impressions/dto.js +73 -0
  107. package/es/services/impressions/index.js +17 -0
  108. package/es/services/impressions/post.js +22 -0
  109. package/es/services/metrics/counters.js +24 -0
  110. package/es/services/metrics/dto.js +38 -0
  111. package/es/services/metrics/index.js +17 -0
  112. package/es/services/metrics/times.js +24 -0
  113. package/es/services/mySegments/get.js +26 -0
  114. package/es/services/mySegments/index.js +17 -0
  115. package/es/services/request/index.js +43 -0
  116. package/es/services/request/options/browser.js +18 -0
  117. package/es/{platform → services}/request/options/node.js +2 -2
  118. package/{lib/platform → es/services/request/options}/package.json +0 -0
  119. package/es/services/segmentChanges/get.js +21 -0
  120. package/es/services/segmentChanges/index.js +17 -0
  121. package/es/services/splitChanges/get.js +19 -0
  122. package/es/services/splitChanges/index.js +17 -0
  123. package/es/services/splitChanges/offline/browser.js +63 -0
  124. package/es/services/splitChanges/offline/node.js +176 -0
  125. package/{lib/settings → es/services/splitChanges/offline}/package.json +0 -0
  126. package/es/services/splitChanges/offline/parseCondition.js +43 -0
  127. package/es/services/transport/index.js +51 -0
  128. package/es/storage/AttributesCache/InMemory.js +85 -0
  129. package/es/storage/BaseMetricsAsyncCache.js +23 -0
  130. package/es/storage/CountCache/InMemory.js +48 -0
  131. package/es/storage/CountCache/InRedis.js +42 -0
  132. package/es/storage/EventsCache/InMemory.js +109 -0
  133. package/es/storage/EventsCache/InRedis.js +65 -0
  134. package/es/storage/ImpressionsCache/InMemory.js +71 -0
  135. package/es/storage/ImpressionsCache/InRedis.js +73 -0
  136. package/es/storage/Keys.js +125 -0
  137. package/es/storage/KeysLocalStorage.js +58 -0
  138. package/es/storage/LatencyCache/InMemory.js +56 -0
  139. package/es/storage/LatencyCache/InRedis.js +44 -0
  140. package/es/storage/LatencyCache/findIndex.js +2 -0
  141. package/es/storage/Meta.js +7 -0
  142. package/es/storage/RedisAdapter.js +198 -0
  143. package/es/storage/SegmentCache/InLocalStorage/index.js +162 -0
  144. package/es/storage/SegmentCache/InMemory/browser.js +107 -0
  145. package/es/storage/SegmentCache/InMemory/node.js +82 -0
  146. package/{src/factory → es/storage/SegmentCache/InMemory}/package.json +0 -0
  147. package/es/storage/SegmentCache/InRedis/index.js +81 -0
  148. package/es/storage/SplitCache/InLocalStorage.js +332 -0
  149. package/es/storage/SplitCache/InMemory.js +162 -0
  150. package/es/storage/SplitCache/InRedis.js +214 -0
  151. package/es/storage/SplitCache/killLocally.js +35 -0
  152. package/es/storage/browser.js +101 -0
  153. package/es/storage/node.js +81 -0
  154. package/{src/platform/getEventSource → es/storage}/package.json +0 -0
  155. package/es/sync/AuthClient/index.js +34 -0
  156. package/es/sync/PushManager/index.js +315 -0
  157. package/es/sync/PushManager/mySegmentsV2utils.js +76 -0
  158. package/es/sync/PushManager/pushRequirements/browser.js +23 -0
  159. package/es/sync/PushManager/pushRequirements/node.js +18 -0
  160. package/{src/platform/getFetch → es/sync/PushManager/pushRequirements}/package.json +0 -0
  161. package/es/sync/SSEClient/index.js +93 -0
  162. package/es/sync/SSEHandler/NotificationKeeper.js +97 -0
  163. package/es/sync/SSEHandler/NotificationParser.js +31 -0
  164. package/es/sync/SSEHandler/index.js +110 -0
  165. package/es/sync/SegmentUpdateWorker/browser.js +74 -0
  166. package/es/sync/SegmentUpdateWorker/node.js +79 -0
  167. package/{src/platform → es/sync/SegmentUpdateWorker}/package.json +0 -0
  168. package/es/sync/SplitUpdateWorker/index.js +86 -0
  169. package/es/sync/browser.js +125 -0
  170. package/es/sync/constants.js +42 -0
  171. package/es/sync/node.js +60 -0
  172. package/{src/settings → es/sync}/package.json +0 -0
  173. package/es/trackers/event.js +53 -0
  174. package/es/trackers/impressions.js +132 -0
  175. package/es/umd.js +1 -2
  176. package/es/utils/backoff/index.js +51 -0
  177. package/es/utils/base64/browser.js +19 -0
  178. package/es/utils/base64/node.js +19 -0
  179. package/es/utils/base64/package.json +4 -0
  180. package/es/utils/binarySearch/index.js +50 -0
  181. package/es/utils/constants/index.js +38 -0
  182. package/es/utils/context/constants.js +30 -0
  183. package/es/utils/context/index.js +101 -0
  184. package/es/utils/decompress/index.js +476 -0
  185. package/es/utils/fn/repeat.js +58 -0
  186. package/es/utils/inputValidation/apiKey.js +39 -0
  187. package/es/utils/inputValidation/attribute.js +22 -0
  188. package/es/utils/inputValidation/attributes.js +19 -0
  189. package/es/utils/inputValidation/event.js +23 -0
  190. package/es/utils/inputValidation/eventProperties.js +69 -0
  191. package/es/utils/inputValidation/eventValue.js +9 -0
  192. package/es/utils/inputValidation/index.js +11 -0
  193. package/es/utils/inputValidation/isOperational.js +14 -0
  194. package/es/utils/inputValidation/key.js +50 -0
  195. package/es/utils/inputValidation/split.js +47 -0
  196. package/es/utils/inputValidation/splitFilters.js +121 -0
  197. package/es/utils/inputValidation/splits.js +27 -0
  198. package/es/utils/inputValidation/trafficType.js +55 -0
  199. package/es/utils/jwt/hashUserKey.js +11 -0
  200. package/es/utils/jwt/index.js +14 -0
  201. package/es/utils/key/factory.js +38 -0
  202. package/es/utils/key/parser.js +34 -0
  203. package/es/utils/labels/index.js +7 -0
  204. package/es/utils/lang/Errors.js +41 -0
  205. package/es/utils/lang/Sets.js +114 -0
  206. package/es/utils/lang/index.js +305 -0
  207. package/es/utils/localstorage/isAvailable.js +26 -0
  208. package/es/utils/logger/LoggerFactory.js +86 -0
  209. package/es/utils/logger/index.js +97 -0
  210. package/es/utils/lrucache/linkedlist.js +122 -0
  211. package/es/utils/lrucache/lru.spec.js +24 -0
  212. package/es/utils/lrucache/lrucache.js +80 -0
  213. package/es/utils/now/browser.js +27 -0
  214. package/es/utils/now/node.js +19 -0
  215. package/es/utils/now/package.json +4 -0
  216. package/es/utils/promise/thenable.js +3 -0
  217. package/es/utils/promise/timeout.js +34 -0
  218. package/es/utils/promise/wrapper.js +58 -0
  219. package/es/{settings → utils/settings}/defaults/browser.js +2 -5
  220. package/es/{settings → utils/settings}/defaults/node.js +2 -5
  221. package/es/utils/settings/defaults/package.json +4 -0
  222. package/es/utils/settings/impressionsMode.js +16 -0
  223. package/es/utils/settings/index.js +194 -0
  224. package/es/utils/settings/integrations/browser.js +8 -0
  225. package/es/utils/settings/integrations/common.js +30 -0
  226. package/es/utils/settings/integrations/node.js +7 -0
  227. package/es/utils/settings/integrations/package.json +4 -0
  228. package/es/utils/settings/language/browser.js +16 -0
  229. package/es/utils/settings/language/node.js +16 -0
  230. package/es/utils/settings/language/package.json +4 -0
  231. package/es/utils/settings/mode.js +10 -0
  232. package/es/utils/settings/runtime/browser.js +21 -0
  233. package/es/{settings → utils/settings}/runtime/node.js +4 -6
  234. package/es/utils/settings/runtime/package.json +4 -0
  235. package/es/{settings → utils/settings}/storage/browser.js +17 -16
  236. package/es/{settings → utils/settings}/storage/node.js +16 -25
  237. package/es/utils/settings/storage/package.json +4 -0
  238. package/es/utils/splits/usesSegments.js +21 -0
  239. package/es/utils/time/index.js +8 -0
  240. package/es/utils/timeTracker/index.js +216 -0
  241. package/es/utils/timeTracker/timer.js +25 -0
  242. package/lib/client/attributesDecoration.js +128 -0
  243. package/lib/client/browser.js +50 -0
  244. package/lib/client/client.js +174 -0
  245. package/lib/client/inputValidation.js +129 -0
  246. package/lib/client/node.js +14 -0
  247. package/lib/client/package.json +4 -0
  248. package/lib/engine/combiners/and.js +65 -0
  249. package/lib/engine/combiners/ifelseif.js +88 -0
  250. package/lib/engine/condition/index.js +76 -0
  251. package/lib/engine/convertions/index.js +36 -0
  252. package/lib/engine/engine/index.js +71 -0
  253. package/lib/engine/engine/legacy.js +83 -0
  254. package/lib/engine/engine/murmur3/common.js +52 -0
  255. package/lib/engine/engine/murmur3/murmur3.js +90 -0
  256. package/lib/engine/engine/murmur3/murmur3_128.js +256 -0
  257. package/lib/engine/engine/murmur3/murmur3_128_x86.js +189 -0
  258. package/lib/engine/engine/murmur3/murmur3_64.js +57 -0
  259. package/lib/engine/engine/murmur3/utfx.js +121 -0
  260. package/lib/engine/evaluator/index.js +129 -0
  261. package/lib/engine/index.js +128 -0
  262. package/lib/engine/matchers/all.js +41 -0
  263. package/lib/engine/matchers/between.js +44 -0
  264. package/lib/engine/matchers/boolean.js +44 -0
  265. package/lib/engine/matchers/cont_all.js +61 -0
  266. package/lib/engine/matchers/cont_any.js +57 -0
  267. package/lib/engine/matchers/cont_str.js +48 -0
  268. package/lib/engine/matchers/dependency.js +60 -0
  269. package/lib/engine/matchers/eq.js +44 -0
  270. package/lib/engine/matchers/eq_set.js +59 -0
  271. package/lib/engine/matchers/ew.js +48 -0
  272. package/lib/engine/matchers/gte.js +44 -0
  273. package/lib/engine/matchers/index.js +90 -0
  274. package/lib/engine/matchers/lte.js +44 -0
  275. package/lib/engine/matchers/part_of.js +59 -0
  276. package/lib/engine/matchers/segment.js +49 -0
  277. package/lib/engine/matchers/string.js +53 -0
  278. package/lib/engine/matchers/sw.js +48 -0
  279. package/lib/engine/matchers/types.js +57 -0
  280. package/lib/engine/matchers/whitelist.js +46 -0
  281. package/lib/engine/parser/index.js +84 -0
  282. package/lib/engine/parser/segments.js +28 -0
  283. package/lib/engine/transforms/matcherGroup.js +54 -0
  284. package/lib/engine/transforms/matchers.js +124 -0
  285. package/lib/engine/transforms/segment.js +34 -0
  286. package/lib/engine/transforms/set.js +26 -0
  287. package/lib/engine/transforms/unaryNumeric.js +26 -0
  288. package/lib/engine/transforms/whitelist.js +28 -0
  289. package/lib/engine/treatments/index.js +73 -0
  290. package/lib/engine/value/index.js +64 -0
  291. package/lib/engine/value/sanitize.js +137 -0
  292. package/lib/events/index.js +80 -0
  293. package/lib/factory/offline.js +62 -0
  294. package/lib/factory/online.js +129 -0
  295. package/lib/impressions/counter.js +61 -0
  296. package/lib/impressions/hasher/buildKey.js +8 -0
  297. package/lib/impressions/hasher/hashImpression128.js +12 -0
  298. package/lib/impressions/hasher/hashImpression32.js +14 -0
  299. package/lib/impressions/observer/browser.js +19 -0
  300. package/lib/impressions/observer/node.js +19 -0
  301. package/lib/impressions/observer/observer.js +29 -0
  302. package/lib/impressions/observer/package.json +4 -0
  303. package/lib/index.js +151 -3
  304. package/lib/integrations/browser.js +72 -0
  305. package/lib/integrations/ga/GaToSplit.js +267 -0
  306. package/lib/integrations/ga/SplitToGa.js +138 -0
  307. package/lib/integrations/node.js +9 -0
  308. package/lib/integrations/package.json +4 -0
  309. package/lib/listeners/browser.js +173 -0
  310. package/lib/listeners/node.js +74 -0
  311. package/lib/listeners/package.json +4 -0
  312. package/lib/manager/index.js +115 -0
  313. package/lib/metrics/Collectors.js +118 -0
  314. package/lib/metrics/index.js +182 -0
  315. package/lib/producer/browser/Partial.js +114 -0
  316. package/lib/producer/browser.js +82 -0
  317. package/lib/producer/fetcher/MySegments.js +59 -0
  318. package/lib/producer/fetcher/SegmentChanges.js +62 -0
  319. package/lib/producer/fetcher/SplitChanges.js +58 -0
  320. package/lib/producer/node.js +142 -0
  321. package/lib/producer/offline/browser.js +35 -0
  322. package/lib/producer/offline/node.js +35 -0
  323. package/lib/producer/offline/package.json +4 -0
  324. package/lib/producer/package.json +4 -0
  325. package/lib/producer/task.js +61 -0
  326. package/lib/producer/updater/MySegments.js +119 -0
  327. package/lib/producer/updater/SegmentChanges.js +148 -0
  328. package/lib/producer/updater/SplitChanges.js +145 -0
  329. package/lib/producer/updater/SplitChangesFromFeatures.js +30 -0
  330. package/lib/producer/updater/SplitChangesFromFileSystem.js +30 -0
  331. package/lib/producer/updater/SplitChangesFromObject.js +84 -0
  332. package/lib/readiness/index.js +132 -0
  333. package/lib/readiness/statusManager.js +124 -0
  334. package/lib/services/auth/auth.js +32 -0
  335. package/lib/services/auth/index.js +11 -0
  336. package/lib/services/events/bulk.js +31 -0
  337. package/lib/services/events/index.js +26 -0
  338. package/lib/{platform → services}/getEventSource/browser.js +1 -1
  339. package/lib/{platform → services}/getEventSource/node.js +1 -1
  340. package/lib/services/getEventSource/package.json +4 -0
  341. package/lib/{platform → services}/getFetch/browser.js +1 -1
  342. package/lib/{platform → services}/getFetch/node.js +1 -1
  343. package/lib/services/getFetch/package.json +4 -0
  344. package/lib/services/impressions/bulk.js +36 -0
  345. package/lib/services/impressions/count.js +16 -0
  346. package/lib/services/impressions/dto.js +81 -0
  347. package/lib/services/impressions/index.js +26 -0
  348. package/lib/services/impressions/post.js +31 -0
  349. package/lib/services/metrics/counters.js +33 -0
  350. package/lib/services/metrics/dto.js +46 -0
  351. package/lib/services/metrics/index.js +26 -0
  352. package/lib/services/metrics/times.js +33 -0
  353. package/lib/services/mySegments/get.js +35 -0
  354. package/lib/services/mySegments/index.js +26 -0
  355. package/lib/services/request/index.js +53 -0
  356. package/lib/services/request/options/browser.js +23 -0
  357. package/lib/{platform → services}/request/options/node.js +2 -2
  358. package/lib/services/request/options/package.json +4 -0
  359. package/lib/services/segmentChanges/get.js +29 -0
  360. package/lib/services/segmentChanges/index.js +26 -0
  361. package/lib/services/splitChanges/get.js +27 -0
  362. package/lib/services/splitChanges/index.js +26 -0
  363. package/lib/services/splitChanges/offline/browser.js +71 -0
  364. package/lib/services/splitChanges/offline/node.js +189 -0
  365. package/lib/services/splitChanges/offline/package.json +4 -0
  366. package/lib/services/splitChanges/offline/parseCondition.js +49 -0
  367. package/lib/services/transport/index.js +62 -0
  368. package/lib/storage/AttributesCache/InMemory.js +93 -0
  369. package/lib/storage/BaseMetricsAsyncCache.js +28 -0
  370. package/lib/storage/CountCache/InMemory.js +54 -0
  371. package/lib/storage/CountCache/InRedis.js +50 -0
  372. package/lib/storage/EventsCache/InMemory.js +118 -0
  373. package/lib/storage/EventsCache/InRedis.js +74 -0
  374. package/lib/storage/ImpressionsCache/InMemory.js +77 -0
  375. package/lib/storage/ImpressionsCache/InRedis.js +79 -0
  376. package/lib/storage/Keys.js +132 -0
  377. package/lib/storage/KeysLocalStorage.js +69 -0
  378. package/lib/storage/LatencyCache/InMemory.js +64 -0
  379. package/lib/storage/LatencyCache/InRedis.js +53 -0
  380. package/lib/storage/LatencyCache/findIndex.js +12 -0
  381. package/lib/storage/Meta.js +12 -0
  382. package/lib/storage/RedisAdapter.js +212 -0
  383. package/lib/storage/SegmentCache/InLocalStorage/index.js +171 -0
  384. package/lib/storage/SegmentCache/InMemory/browser.js +113 -0
  385. package/lib/storage/SegmentCache/InMemory/node.js +89 -0
  386. package/lib/storage/SegmentCache/InMemory/package.json +4 -0
  387. package/lib/storage/SegmentCache/InRedis/index.js +87 -0
  388. package/lib/storage/SplitCache/InLocalStorage.js +344 -0
  389. package/lib/storage/SplitCache/InMemory.js +172 -0
  390. package/lib/storage/SplitCache/InRedis.js +224 -0
  391. package/lib/storage/SplitCache/killLocally.js +42 -0
  392. package/lib/storage/browser.js +122 -0
  393. package/lib/storage/node.js +104 -0
  394. package/lib/storage/package.json +4 -0
  395. package/lib/sync/AuthClient/index.js +44 -0
  396. package/lib/sync/PushManager/index.js +340 -0
  397. package/lib/sync/PushManager/mySegmentsV2utils.js +87 -0
  398. package/lib/sync/PushManager/pushRequirements/browser.js +30 -0
  399. package/lib/sync/PushManager/pushRequirements/node.js +25 -0
  400. package/lib/sync/PushManager/pushRequirements/package.json +4 -0
  401. package/lib/sync/SSEClient/index.js +101 -0
  402. package/lib/sync/SSEHandler/NotificationKeeper.js +104 -0
  403. package/lib/sync/SSEHandler/NotificationParser.js +39 -0
  404. package/lib/sync/SSEHandler/index.js +121 -0
  405. package/lib/sync/SegmentUpdateWorker/browser.js +81 -0
  406. package/lib/sync/SegmentUpdateWorker/node.js +86 -0
  407. package/lib/sync/SegmentUpdateWorker/package.json +4 -0
  408. package/lib/sync/SplitUpdateWorker/index.js +93 -0
  409. package/lib/sync/browser.js +139 -0
  410. package/lib/sync/constants.js +59 -0
  411. package/lib/sync/node.js +71 -0
  412. package/lib/sync/package.json +4 -0
  413. package/lib/trackers/event.js +64 -0
  414. package/lib/trackers/impressions.js +146 -0
  415. package/lib/umd.js +0 -1
  416. package/lib/utils/backoff/index.js +57 -0
  417. package/lib/utils/base64/browser.js +26 -0
  418. package/lib/utils/base64/node.js +26 -0
  419. package/lib/utils/base64/package.json +4 -0
  420. package/lib/utils/binarySearch/index.js +56 -0
  421. package/lib/utils/constants/index.js +60 -0
  422. package/lib/utils/context/constants.js +49 -0
  423. package/lib/utils/context/index.js +111 -0
  424. package/lib/utils/decompress/index.js +483 -0
  425. package/lib/utils/fn/repeat.js +64 -0
  426. package/lib/utils/inputValidation/apiKey.js +51 -0
  427. package/lib/utils/inputValidation/attribute.js +32 -0
  428. package/lib/utils/inputValidation/attributes.js +32 -0
  429. package/lib/utils/inputValidation/event.js +33 -0
  430. package/lib/utils/inputValidation/eventProperties.js +78 -0
  431. package/lib/utils/inputValidation/eventValue.js +19 -0
  432. package/lib/utils/inputValidation/index.js +48 -0
  433. package/lib/utils/inputValidation/isOperational.js +25 -0
  434. package/lib/utils/inputValidation/key.js +59 -0
  435. package/lib/utils/inputValidation/split.js +60 -0
  436. package/lib/utils/inputValidation/splitFilters.js +134 -0
  437. package/lib/utils/inputValidation/splits.js +38 -0
  438. package/lib/utils/inputValidation/trafficType.js +68 -0
  439. package/lib/utils/jwt/hashUserKey.js +19 -0
  440. package/lib/utils/jwt/index.js +19 -0
  441. package/lib/utils/key/factory.js +46 -0
  442. package/lib/utils/key/parser.js +42 -0
  443. package/lib/utils/labels/index.js +18 -0
  444. package/lib/utils/lang/Errors.js +58 -0
  445. package/lib/utils/lang/Sets.js +127 -0
  446. package/lib/utils/lang/index.js +350 -0
  447. package/lib/utils/localstorage/isAvailable.js +31 -0
  448. package/lib/utils/logger/LoggerFactory.js +98 -0
  449. package/lib/utils/logger/index.js +109 -0
  450. package/lib/utils/lrucache/linkedlist.js +132 -0
  451. package/lib/utils/lrucache/lru.spec.js +30 -0
  452. package/lib/utils/lrucache/lrucache.js +88 -0
  453. package/lib/utils/now/browser.js +33 -0
  454. package/lib/utils/now/node.js +24 -0
  455. package/lib/utils/now/package.json +4 -0
  456. package/lib/utils/promise/thenable.js +10 -0
  457. package/lib/utils/promise/timeout.js +40 -0
  458. package/lib/utils/promise/wrapper.js +63 -0
  459. package/{src → lib/utils}/settings/defaults/browser.js +6 -6
  460. package/{src → lib/utils}/settings/defaults/node.js +6 -6
  461. package/lib/utils/settings/defaults/package.json +4 -0
  462. package/lib/utils/settings/impressionsMode.js +26 -0
  463. package/lib/utils/settings/index.js +214 -0
  464. package/lib/utils/settings/integrations/browser.js +17 -0
  465. package/lib/utils/settings/integrations/common.js +40 -0
  466. package/lib/utils/settings/integrations/node.js +13 -0
  467. package/lib/utils/settings/integrations/package.json +4 -0
  468. package/lib/utils/settings/language/browser.js +22 -0
  469. package/lib/utils/settings/language/node.js +22 -0
  470. package/lib/utils/settings/language/package.json +4 -0
  471. package/lib/utils/settings/mode.js +16 -0
  472. package/lib/utils/settings/runtime/browser.js +26 -0
  473. package/lib/{settings → utils/settings}/runtime/node.js +5 -7
  474. package/lib/utils/settings/runtime/package.json +4 -0
  475. package/lib/{settings → utils/settings}/storage/browser.js +24 -20
  476. package/lib/{settings → utils/settings}/storage/node.js +17 -26
  477. package/lib/utils/settings/storage/package.json +4 -0
  478. package/lib/utils/splits/usesSegments.js +27 -0
  479. package/lib/utils/time/index.js +12 -0
  480. package/lib/utils/timeTracker/index.js +213 -0
  481. package/lib/utils/timeTracker/timer.js +33 -0
  482. package/package.json +15 -19
  483. package/src/client/attributesDecoration.js +112 -0
  484. package/src/client/browser.js +41 -0
  485. package/src/client/client.js +131 -0
  486. package/src/client/inputValidation.js +130 -0
  487. package/src/client/node.js +8 -0
  488. package/src/client/package.json +4 -0
  489. package/src/engine/combiners/and.js +55 -0
  490. package/src/engine/combiners/ifelseif.js +74 -0
  491. package/src/engine/condition/index.js +65 -0
  492. package/src/engine/convertions/index.js +22 -0
  493. package/src/engine/engine/index.js +63 -0
  494. package/src/engine/engine/legacy.js +66 -0
  495. package/src/engine/engine/murmur3/common.js +54 -0
  496. package/src/engine/engine/murmur3/murmur3.js +79 -0
  497. package/src/engine/engine/murmur3/murmur3_128.js +273 -0
  498. package/src/engine/engine/murmur3/murmur3_128_x86.js +188 -0
  499. package/src/engine/engine/murmur3/murmur3_64.js +34 -0
  500. package/src/engine/engine/murmur3/utfx.js +111 -0
  501. package/src/engine/evaluator/index.js +148 -0
  502. package/src/engine/index.js +123 -0
  503. package/src/engine/matchers/all.js +29 -0
  504. package/src/engine/matchers/between.js +30 -0
  505. package/src/engine/matchers/boolean.js +29 -0
  506. package/src/engine/matchers/cont_all.js +40 -0
  507. package/src/engine/matchers/cont_any.js +35 -0
  508. package/src/engine/matchers/cont_str.js +31 -0
  509. package/src/engine/matchers/dependency.js +52 -0
  510. package/src/engine/matchers/eq.js +30 -0
  511. package/src/engine/matchers/eq_set.js +37 -0
  512. package/src/engine/matchers/ew.js +31 -0
  513. package/src/engine/matchers/gte.js +30 -0
  514. package/src/engine/matchers/index.js +71 -0
  515. package/src/engine/matchers/lte.js +30 -0
  516. package/src/engine/matchers/part_of.js +37 -0
  517. package/src/engine/matchers/segment.js +41 -0
  518. package/src/engine/matchers/string.js +39 -0
  519. package/src/engine/matchers/sw.js +31 -0
  520. package/src/engine/matchers/types.js +52 -0
  521. package/src/engine/matchers/whitelist.js +30 -0
  522. package/src/engine/parser/index.js +79 -0
  523. package/src/engine/parser/segments.js +31 -0
  524. package/src/engine/transforms/matcherGroup.js +45 -0
  525. package/src/engine/transforms/matchers.js +118 -0
  526. package/src/engine/transforms/segment.js +23 -0
  527. package/src/engine/transforms/set.js +20 -0
  528. package/src/engine/transforms/unaryNumeric.js +20 -0
  529. package/src/engine/transforms/whitelist.js +22 -0
  530. package/src/engine/treatments/index.js +67 -0
  531. package/src/engine/value/index.js +53 -0
  532. package/src/engine/value/sanitize.js +117 -0
  533. package/src/events/index.js +62 -0
  534. package/src/factory/offline.js +60 -0
  535. package/src/factory/online.js +127 -0
  536. package/src/impressions/counter.js +43 -0
  537. package/src/impressions/hasher/buildKey.js +3 -0
  538. package/src/impressions/hasher/hashImpression128.js +6 -0
  539. package/src/impressions/hasher/hashImpression32.js +6 -0
  540. package/src/impressions/observer/browser.js +8 -0
  541. package/src/impressions/observer/node.js +8 -0
  542. package/src/impressions/observer/observer.js +17 -0
  543. package/src/impressions/observer/package.json +4 -0
  544. package/src/index.js +140 -1
  545. package/src/integrations/browser.js +57 -0
  546. package/src/integrations/ga/GaToSplit.js +278 -0
  547. package/src/integrations/ga/SplitToGa.js +125 -0
  548. package/src/integrations/node.js +4 -0
  549. package/src/integrations/package.json +4 -0
  550. package/src/listeners/browser.js +137 -0
  551. package/src/listeners/node.js +59 -0
  552. package/src/listeners/package.json +4 -0
  553. package/src/manager/index.js +103 -0
  554. package/src/metrics/Collectors.js +77 -0
  555. package/src/metrics/index.js +174 -0
  556. package/src/producer/browser/Partial.js +104 -0
  557. package/src/producer/browser.js +82 -0
  558. package/src/producer/fetcher/MySegments.js +40 -0
  559. package/src/producer/fetcher/SegmentChanges.js +52 -0
  560. package/src/producer/fetcher/SplitChanges.js +39 -0
  561. package/src/producer/node.js +142 -0
  562. package/src/producer/offline/browser.js +28 -0
  563. package/src/producer/offline/node.js +28 -0
  564. package/src/producer/offline/package.json +4 -0
  565. package/src/producer/package.json +4 -0
  566. package/src/producer/task.js +57 -0
  567. package/src/producer/updater/MySegments.js +104 -0
  568. package/src/producer/updater/SegmentChanges.js +126 -0
  569. package/src/producer/updater/SplitChanges.js +138 -0
  570. package/src/producer/updater/SplitChangesFromFeatures.js +23 -0
  571. package/src/producer/updater/SplitChangesFromFileSystem.js +23 -0
  572. package/src/producer/updater/SplitChangesFromObject.js +81 -0
  573. package/src/readiness/index.js +125 -0
  574. package/src/readiness/statusManager.js +121 -0
  575. package/src/services/auth/auth.js +21 -0
  576. package/src/services/auth/index.js +3 -0
  577. package/src/services/events/bulk.js +23 -0
  578. package/src/services/events/index.js +18 -0
  579. package/{es/platform → src/services}/getEventSource/browser.js +1 -1
  580. package/src/{platform → services}/getEventSource/node.js +2 -2
  581. package/src/services/getEventSource/package.json +4 -0
  582. package/src/{platform → services}/getFetch/browser.js +2 -2
  583. package/src/{platform → services}/getFetch/node.js +1 -1
  584. package/src/services/getFetch/package.json +4 -0
  585. package/src/services/impressions/bulk.js +26 -0
  586. package/src/services/impressions/count.js +8 -0
  587. package/src/services/impressions/dto.js +71 -0
  588. package/src/services/impressions/index.js +18 -0
  589. package/src/services/impressions/post.js +23 -0
  590. package/src/services/metrics/counters.js +25 -0
  591. package/src/services/metrics/dto.js +44 -0
  592. package/src/services/metrics/index.js +18 -0
  593. package/src/services/metrics/times.js +25 -0
  594. package/src/services/mySegments/get.js +27 -0
  595. package/src/services/mySegments/index.js +18 -0
  596. package/src/services/request/index.js +43 -0
  597. package/src/services/request/options/browser.js +18 -0
  598. package/src/{platform → services}/request/options/node.js +2 -2
  599. package/src/services/request/options/package.json +4 -0
  600. package/src/services/segmentChanges/get.js +20 -0
  601. package/src/services/segmentChanges/index.js +18 -0
  602. package/src/services/splitChanges/get.js +20 -0
  603. package/src/services/splitChanges/index.js +18 -0
  604. package/src/services/splitChanges/offline/browser.js +66 -0
  605. package/src/services/splitChanges/offline/node.js +190 -0
  606. package/src/services/splitChanges/offline/package.json +4 -0
  607. package/src/services/splitChanges/offline/parseCondition.js +52 -0
  608. package/src/services/transport/index.js +44 -0
  609. package/src/storage/AttributesCache/InMemory.js +76 -0
  610. package/src/storage/BaseMetricsAsyncCache.js +14 -0
  611. package/src/storage/CountCache/InMemory.js +48 -0
  612. package/src/storage/CountCache/InRedis.js +32 -0
  613. package/src/storage/EventsCache/InMemory.js +99 -0
  614. package/src/storage/EventsCache/InRedis.js +62 -0
  615. package/src/storage/ImpressionsCache/InMemory.js +62 -0
  616. package/src/storage/ImpressionsCache/InRedis.js +65 -0
  617. package/src/storage/Keys.js +122 -0
  618. package/src/storage/KeysLocalStorage.js +52 -0
  619. package/src/storage/LatencyCache/InMemory.js +56 -0
  620. package/src/storage/LatencyCache/InRedis.js +35 -0
  621. package/src/storage/LatencyCache/findIndex.js +7 -0
  622. package/src/storage/Meta.js +7 -0
  623. package/src/storage/RedisAdapter.js +170 -0
  624. package/src/storage/SegmentCache/InLocalStorage/index.js +140 -0
  625. package/src/storage/SegmentCache/InMemory/browser.js +99 -0
  626. package/src/storage/SegmentCache/InMemory/node.js +84 -0
  627. package/src/storage/SegmentCache/InMemory/package.json +4 -0
  628. package/src/storage/SegmentCache/InRedis/index.js +71 -0
  629. package/src/storage/SplitCache/InLocalStorage.js +324 -0
  630. package/src/storage/SplitCache/InMemory.js +145 -0
  631. package/src/storage/SplitCache/InRedis.js +187 -0
  632. package/src/storage/SplitCache/killLocally.js +33 -0
  633. package/src/storage/browser.js +110 -0
  634. package/src/storage/node.js +83 -0
  635. package/src/storage/package.json +4 -0
  636. package/src/sync/AuthClient/index.js +31 -0
  637. package/src/sync/PushManager/index.js +328 -0
  638. package/src/sync/PushManager/mySegmentsV2utils.js +76 -0
  639. package/src/sync/PushManager/pushRequirements/browser.js +20 -0
  640. package/src/sync/PushManager/pushRequirements/node.js +16 -0
  641. package/src/sync/PushManager/pushRequirements/package.json +4 -0
  642. package/src/sync/SSEClient/index.js +92 -0
  643. package/src/sync/SSEHandler/NotificationKeeper.js +90 -0
  644. package/src/sync/SSEHandler/NotificationParser.js +35 -0
  645. package/src/sync/SSEHandler/index.js +110 -0
  646. package/src/sync/SegmentUpdateWorker/browser.js +67 -0
  647. package/src/sync/SegmentUpdateWorker/node.js +73 -0
  648. package/src/sync/SegmentUpdateWorker/package.json +4 -0
  649. package/src/sync/SplitUpdateWorker/index.js +79 -0
  650. package/src/sync/browser.js +130 -0
  651. package/src/sync/constants.js +43 -0
  652. package/src/sync/node.js +66 -0
  653. package/src/sync/package.json +4 -0
  654. package/src/trackers/event.js +47 -0
  655. package/src/trackers/impressions.js +123 -0
  656. package/src/umd.js +0 -1
  657. package/src/utils/backoff/index.js +46 -0
  658. package/src/utils/base64/browser.js +19 -0
  659. package/src/utils/base64/node.js +19 -0
  660. package/src/utils/base64/package.json +4 -0
  661. package/src/utils/binarySearch/index.js +50 -0
  662. package/src/utils/constants/index.js +41 -0
  663. package/src/utils/context/constants.js +18 -0
  664. package/src/utils/context/index.js +84 -0
  665. package/src/utils/decompress/index.js +428 -0
  666. package/src/utils/fn/repeat.js +48 -0
  667. package/src/utils/inputValidation/apiKey.js +42 -0
  668. package/src/utils/inputValidation/attribute.js +22 -0
  669. package/src/utils/inputValidation/attributes.js +26 -0
  670. package/src/utils/inputValidation/event.js +23 -0
  671. package/src/utils/inputValidation/eventProperties.js +65 -0
  672. package/src/utils/inputValidation/eventValue.js +11 -0
  673. package/src/utils/inputValidation/index.js +11 -0
  674. package/src/utils/inputValidation/isOperational.js +16 -0
  675. package/src/utils/inputValidation/key.js +53 -0
  676. package/src/utils/inputValidation/split.js +42 -0
  677. package/src/utils/inputValidation/splitFilters.js +108 -0
  678. package/src/utils/inputValidation/splits.js +21 -0
  679. package/src/utils/inputValidation/trafficType.js +58 -0
  680. package/src/utils/jwt/hashUserKey.js +11 -0
  681. package/src/utils/jwt/index.js +15 -0
  682. package/src/utils/key/factory.js +34 -0
  683. package/src/utils/key/parser.js +34 -0
  684. package/src/utils/labels/index.js +7 -0
  685. package/src/utils/lang/Errors.js +19 -0
  686. package/src/utils/lang/Sets.js +94 -0
  687. package/src/utils/lang/index.js +291 -0
  688. package/src/utils/localstorage/isAvailable.js +26 -0
  689. package/src/utils/logger/LoggerFactory.js +90 -0
  690. package/src/utils/logger/index.js +93 -0
  691. package/src/utils/lrucache/linkedlist.js +116 -0
  692. package/src/utils/lrucache/lru.spec.js +26 -0
  693. package/src/utils/lrucache/lrucache.js +49 -0
  694. package/src/utils/now/browser.js +29 -0
  695. package/src/utils/now/node.js +21 -0
  696. package/src/utils/now/package.json +4 -0
  697. package/src/utils/promise/thenable.js +1 -0
  698. package/src/utils/promise/timeout.js +38 -0
  699. package/src/utils/promise/wrapper.js +60 -0
  700. package/{lib → src/utils}/settings/defaults/browser.js +3 -13
  701. package/{lib → src/utils}/settings/defaults/node.js +2 -12
  702. package/src/utils/settings/defaults/package.json +4 -0
  703. package/src/utils/settings/impressionsMode.js +15 -0
  704. package/src/utils/settings/index.js +217 -0
  705. package/src/utils/settings/integrations/browser.js +8 -0
  706. package/src/utils/settings/integrations/common.js +32 -0
  707. package/src/{settings → utils/settings}/integrations/node.js +3 -1
  708. package/src/utils/settings/integrations/package.json +4 -0
  709. package/src/utils/settings/language/browser.js +17 -0
  710. package/src/utils/settings/language/node.js +17 -0
  711. package/src/utils/settings/language/package.json +4 -0
  712. package/src/utils/settings/mode.js +12 -0
  713. package/src/utils/settings/runtime/browser.js +22 -0
  714. package/src/{settings → utils/settings}/runtime/node.js +6 -9
  715. package/src/utils/settings/runtime/package.json +4 -0
  716. package/src/{settings → utils/settings}/storage/browser.js +18 -13
  717. package/src/{settings → utils/settings}/storage/node.js +14 -19
  718. package/src/utils/settings/storage/package.json +4 -0
  719. package/src/utils/splits/usesSegments.js +17 -0
  720. package/src/utils/time/index.js +8 -0
  721. package/src/utils/timeTracker/index.js +223 -0
  722. package/src/utils/timeTracker/timer.js +27 -0
  723. package/types/splitio.d.ts +5 -22
  724. package/client/package.json +0 -5
  725. package/es/factory/browser.js +0 -58
  726. package/es/factory/node.js +0 -59
  727. package/es/platform/EventEmitter.js +0 -412
  728. package/es/platform/browser.js +0 -10
  729. package/es/platform/node.js +0 -12
  730. package/es/settings/browser.js +0 -18
  731. package/es/settings/defaults/version.js +0 -1
  732. package/es/settings/integrations/browser.js +0 -5
  733. package/es/settings/integrations/node.js +0 -5
  734. package/es/settings/node.js +0 -20
  735. package/lib/factory/browser.js +0 -79
  736. package/lib/factory/node.js +0 -78
  737. package/lib/platform/EventEmitter.js +0 -417
  738. package/lib/platform/browser.js +0 -21
  739. package/lib/platform/node.js +0 -26
  740. package/lib/settings/browser.js +0 -30
  741. package/lib/settings/defaults/version.js +0 -6
  742. package/lib/settings/integrations/browser.js +0 -14
  743. package/lib/settings/integrations/node.js +0 -12
  744. package/lib/settings/node.js +0 -33
  745. package/server/package.json +0 -5
  746. package/src/.DS_Store +0 -0
  747. package/src/factory/browser.js +0 -74
  748. package/src/factory/node.js +0 -71
  749. package/src/platform/.DS_Store +0 -0
  750. package/src/platform/EventEmitter.js +0 -443
  751. package/src/platform/browser.js +0 -12
  752. package/src/platform/node.js +0 -14
  753. package/src/settings/.DS_Store +0 -0
  754. package/src/settings/browser.js +0 -18
  755. package/src/settings/defaults/version.js +0 -1
  756. package/src/settings/integrations/browser.js +0 -6
  757. package/src/settings/node.js +0 -20
  758. package/types/client/index.d.ts +0 -14
  759. package/types/server/index.d.ts +0 -20
@@ -0,0 +1,125 @@
1
+ import PushManagerFactory from './PushManager';
2
+ import FullProducerFactory from '../producer';
3
+ import PartialProducerFactory from '../producer/browser/Partial';
4
+ import { matching } from '../utils/key/factory';
5
+ import { forOwn, toString } from '../utils/lang';
6
+ import logFactory from '../utils/logger';
7
+ import { PUSH_SUBSYSTEM_DOWN, PUSH_SUBSYSTEM_UP } from './constants';
8
+ var log = logFactory('splitio-sync:sync-manager');
9
+ /**
10
+ * Factory of sync manager for browser
11
+ *
12
+ * @param context main client context
13
+ */
14
+
15
+ export default function BrowserSyncManagerFactory(mainContext) {
16
+ // map of user keys to client contexts
17
+ var contexts = {};
18
+ var settings = mainContext.get(mainContext.constants.SETTINGS); // call `createInstance` before creating PushManager, since it is in charge of creating the full producer and adding it into the main context.
19
+
20
+ var syncManager = createInstance(false, mainContext);
21
+ var pushManager = settings.streamingEnabled ? PushManagerFactory(mainContext, contexts) : undefined;
22
+ var mainProducer = mainContext.get(mainContext.constants.PRODUCER);
23
+
24
+ function startPolling() {
25
+ if (!mainProducer.isRunning()) {
26
+ log.info('Streaming not available. Starting periodic fetch of data.');
27
+ forOwn(contexts, function (context) {
28
+ var producer = context.get(context.constants.PRODUCER);
29
+ producer.start();
30
+ });
31
+ } else {
32
+ log.info('Streaming couldn\'t connect. Continue periodic fetch of data.');
33
+ }
34
+ }
35
+
36
+ function stopPollingAndSyncAll() {
37
+ if (mainProducer.isRunning()) {
38
+ log.info('PUSH (re)connected. Syncing and stopping periodic fetch of data.'); // if polling, stop
39
+
40
+ forOwn(contexts, function (context) {
41
+ var producer = context.get(context.constants.PRODUCER);
42
+ producer.stop();
43
+ });
44
+ }
45
+
46
+ syncAll();
47
+ }
48
+
49
+ function syncAll() {
50
+ // fetch splits and segments
51
+ var mainProducer = mainContext.get(mainContext.constants.PRODUCER);
52
+ mainProducer.synchronizeSplits();
53
+ forOwn(contexts, function (context) {
54
+ var producer = context.get(context.constants.PRODUCER);
55
+ producer.synchronizeMySegments();
56
+ });
57
+ }
58
+ /**
59
+ * Creates a SyncManager that handles the synchronization of clients (main and shared ones).
60
+ * Internally, it creates the client producer, adds it into its context, and defines the `start` and `stop` methods that handle synchronization.
61
+ *
62
+ * @param {Object} context
63
+ * @param {boolean} isSharedClient
64
+ */
65
+
66
+
67
+ function createInstance(isSharedClient, context) {
68
+ var producer = isSharedClient ? PartialProducerFactory(context) : FullProducerFactory(context);
69
+ var settings = context.get(context.constants.SETTINGS); // we need to stringify the user key (or matching key) in case it is not an string, to hash and pass as query param for authentication
70
+
71
+ var userKey = toString(matching(settings.core.key));
72
+ context.put(context.constants.PRODUCER, producer);
73
+ if (contexts[userKey]) log.warn('A client with the same user key has already been created. Only the new instance will be properly synchronized.');
74
+ contexts[userKey] = context;
75
+ return {
76
+ start: function start() {
77
+ // start syncing
78
+ if (pushManager) {
79
+ if (!isSharedClient) {
80
+ syncAll(); // initial syncAll (only when main client is created)
81
+
82
+ pushManager.on(PUSH_SUBSYSTEM_UP, stopPollingAndSyncAll);
83
+ pushManager.on(PUSH_SUBSYSTEM_DOWN, startPolling);
84
+ } else {
85
+ if (mainProducer.isRunning()) {
86
+ // if doing polling, we must start the producer periodic fetch of data
87
+ producer.start();
88
+ } else {
89
+ // if not doing polling, we must perform a `producer.synchronizeMySegments` for the initial fetch
90
+ // of segments since `syncAll` was already executed when starting the main client
91
+ producer.synchronizeMySegments();
92
+ }
93
+ }
94
+
95
+ pushManager.startNewClient(userKey, context);
96
+ } else {
97
+ producer.start();
98
+ }
99
+ },
100
+ stop: function stop() {
101
+ var context = contexts[userKey];
102
+
103
+ if (context) {
104
+ // check in case `client.destroy()` has been invoked more than once for the same client
105
+ delete contexts[userKey];
106
+
107
+ if (pushManager) {
108
+ pushManager.removeClient(userKey); // stop push if stoping main client
109
+
110
+ if (!isSharedClient) pushManager.stop(); // We don't reconnect pushmanager when removing a shared client,
111
+ // since it is more costly than continue listening the channel
112
+ }
113
+
114
+ if (producer.isRunning()) producer.stop();
115
+ }
116
+ }
117
+ };
118
+ } // For the main client we return a SyncManager with 3 methods: start, stop and shared. The last is used to instantiate "partial SyncManagers".
119
+
120
+
121
+ syncManager.shared = createInstance.bind(null, true); // pushManager is exposed to close SSE connection in browser on 'unload' DOM event.
122
+
123
+ syncManager.pushManager = pushManager;
124
+ return syncManager;
125
+ }
@@ -0,0 +1,42 @@
1
+ // time for refresh token
2
+ export var SECONDS_BEFORE_EXPIRATION = 600; // Internal SDK events, subscribed by SyncManager and PushManager
3
+
4
+ /**
5
+ * emitted on SSE and Authenticate non-recoverable errors, STREAMING_DISABLED control notification and authentication with pushEnabled false
6
+ * triggers `handleNonRetryableError` call
7
+ */
8
+
9
+ export var PUSH_NONRETRYABLE_ERROR = 'PUSH_NONRETRYABLE_ERROR';
10
+ /**
11
+ * emitted on SSE and Authenticate recoverable errors
12
+ * triggers `handleRetryableError` call
13
+ */
14
+
15
+ export var PUSH_RETRYABLE_ERROR = 'PUSH_RETRYABLE_ERROR';
16
+ /**
17
+ * emitted on STREAMING_RESUMED control notification, OCCUPANCY different than 0, and SSE onopen event
18
+ * triggers `stopPollingAndSyncAll` call
19
+ */
20
+
21
+ export var PUSH_SUBSYSTEM_UP = 'PUSH_SUBSYSTEM_UP';
22
+ /**
23
+ * emitted on STREAMING_PAUSED control notification, OCCUPANCY equal to 0, PUSH_NONRETRYABLE_ERROR and PUSH_RETRYABLE_ERROR events.
24
+ * triggers `startPolling` and `stopWorkers` calls
25
+ */
26
+
27
+ export var PUSH_SUBSYSTEM_DOWN = 'PUSH_SUBSYSTEM_DOWN'; // Update-type push notifications, handled by NotificationProcessor
28
+
29
+ export var MY_SEGMENTS_UPDATE = 'MY_SEGMENTS_UPDATE';
30
+ export var MY_SEGMENTS_UPDATE_V2 = 'MY_SEGMENTS_UPDATE_V2';
31
+ export var SEGMENT_UPDATE = 'SEGMENT_UPDATE';
32
+ export var SPLIT_KILL = 'SPLIT_KILL';
33
+ export var SPLIT_UPDATE = 'SPLIT_UPDATE'; // Control-type push notifications, handled by NotificationKeeper
34
+
35
+ export var CONTROL = 'CONTROL';
36
+ export var OCCUPANCY = 'OCCUPANCY';
37
+ export var ControlTypes = {
38
+ STREAMING_DISABLED: 'STREAMING_DISABLED',
39
+ STREAMING_PAUSED: 'STREAMING_PAUSED',
40
+ STREAMING_RESUMED: 'STREAMING_RESUMED',
41
+ STREAMING_RESET: 'STREAMING_RESET'
42
+ };
@@ -0,0 +1,60 @@
1
+ import PushManagerFactory from './PushManager';
2
+ import FullProducerFactory from '../producer';
3
+ import logFactory from '../utils/logger';
4
+ import { PUSH_SUBSYSTEM_DOWN, PUSH_SUBSYSTEM_UP } from './constants';
5
+ var log = logFactory('splitio-sync:sync-manager');
6
+ /**
7
+ * Factory of SyncManager for node
8
+ *
9
+ * @param context main client context
10
+ */
11
+
12
+ export default function NodeSyncManagerFactory(context) {
13
+ var producer = FullProducerFactory(context);
14
+ var settings = context.get(context.constants.SETTINGS); // add producer into the context before creating the PushManager
15
+
16
+ context.put(context.constants.PRODUCER, producer);
17
+ var pushManager = settings.streamingEnabled ? PushManagerFactory(context) : undefined;
18
+
19
+ function startPolling() {
20
+ if (!producer.isRunning()) {
21
+ log.info('Streaming not available. Starting periodic fetch of data.');
22
+ producer.start();
23
+ } else {
24
+ log.info('Streaming couldn\'t connect. Continue periodic fetch of data.');
25
+ }
26
+ }
27
+
28
+ function stopPollingAndSyncAll() {
29
+ log.info('PUSH (re)connected. Syncing and stopping periodic fetch of data.'); // if polling, stop
30
+
31
+ if (producer.isRunning()) producer.stop();
32
+ syncAll();
33
+ }
34
+
35
+ function syncAll() {
36
+ // fetch splits and segments. There is no need to catch this promise (it is handled by `SplitChangesUpdater`)
37
+ producer.synchronizeSplits().then(function () {
38
+ producer.synchronizeSegment();
39
+ });
40
+ }
41
+
42
+ return {
43
+ start: function start() {
44
+ // start syncing
45
+ if (pushManager) {
46
+ syncAll();
47
+ pushManager.on(PUSH_SUBSYSTEM_UP, stopPollingAndSyncAll);
48
+ pushManager.on(PUSH_SUBSYSTEM_DOWN, startPolling);
49
+ setTimeout(pushManager.start); // Run in next event-loop cycle as in browser
50
+ } else {
51
+ producer.start();
52
+ }
53
+ },
54
+ stop: function stop() {
55
+ // stop syncing
56
+ if (pushManager) pushManager.stop();
57
+ if (producer.isRunning()) producer.stop();
58
+ }
59
+ };
60
+ }
File without changes
@@ -0,0 +1,53 @@
1
+ import objectAssign from 'object-assign';
2
+ import logFactory from '../utils/logger';
3
+ import thenable from '../utils/promise/thenable';
4
+ var log = logFactory('splitio-client:event-tracker');
5
+
6
+ function EventTracker(context) {
7
+ var collector = context.get(context.constants.STORAGE).events;
8
+ var integrationsManager = context.get(context.constants.INTEGRATIONS_MANAGER, true);
9
+
10
+ function queueEventsCallback(eventData, tracked) {
11
+ var eventTypeId = eventData.eventTypeId,
12
+ trafficTypeName = eventData.trafficTypeName,
13
+ key = eventData.key,
14
+ value = eventData.value,
15
+ timestamp = eventData.timestamp,
16
+ properties = eventData.properties; // Logging every prop would be too much.
17
+
18
+ var msg = "event of type \"" + eventTypeId + "\" for traffic type \"" + trafficTypeName + "\". Key: " + key + ". Value: " + value + ". Timestamp: " + timestamp + ". " + (properties ? 'With properties.' : 'With no properties.');
19
+
20
+ if (tracked) {
21
+ log.info("Successfully queued " + msg);
22
+
23
+ if (integrationsManager) {
24
+ // Wrap in a timeout because we don't want it to be blocking.
25
+ setTimeout(function () {
26
+ // copy of event, to avoid unexpected behaviour if modified by integrations
27
+ var eventDataCopy = objectAssign({}, eventData);
28
+ if (eventData.properties) eventDataCopy.properties = objectAssign({}, eventData.properties); // integrationsManager does not throw errors (they are internally handled by each integration module)
29
+
30
+ integrationsManager.handleEvent(eventDataCopy);
31
+ }, 0);
32
+ }
33
+ } else {
34
+ log.warn("Failed to queue " + msg);
35
+ }
36
+
37
+ return tracked;
38
+ }
39
+
40
+ return {
41
+ track: function track(eventData, size) {
42
+ var tracked = collector.track(eventData, size);
43
+
44
+ if (thenable(tracked)) {
45
+ return tracked.then(queueEventsCallback.bind(null, eventData));
46
+ } else {
47
+ return queueEventsCallback(eventData, tracked);
48
+ }
49
+ }
50
+ };
51
+ }
52
+
53
+ export default EventTracker;
@@ -0,0 +1,132 @@
1
+ /**
2
+ Copyright 2016 Split Software
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ **/
16
+ import objectAssign from 'object-assign';
17
+ import logFactory from '../utils/logger';
18
+ import thenable from '../utils/promise/thenable';
19
+ import ImpressionObserverFactory from '../impressions/observer';
20
+ import { truncateTimeFrame } from '../utils/time';
21
+ import { OPTIMIZED, PRODUCER_MODE, STANDALONE_MODE } from '../utils/constants';
22
+ var log = logFactory('splitio-client:impressions-tracker');
23
+ /**
24
+ * Checks if impressions previous time should be added or not.
25
+ */
26
+
27
+ function shouldAddPt(settings) {
28
+ return [PRODUCER_MODE, STANDALONE_MODE].indexOf(settings.mode) > -1 ? true : false;
29
+ }
30
+ /**
31
+ * Checks if it should dedupe impressions or not.
32
+ */
33
+
34
+
35
+ function shouldBeOptimized(settings) {
36
+ if (!shouldAddPt(settings)) return false;
37
+ return settings.sync.impressionsMode === OPTIMIZED ? true : false;
38
+ }
39
+
40
+ function ImpressionsTracker(context) {
41
+ var collector = context.get(context.constants.STORAGE).impressions;
42
+ var settings = context.get(context.constants.SETTINGS);
43
+ var listener = settings.impressionListener;
44
+ var integrationsManager = context.get(context.constants.INTEGRATIONS_MANAGER, true);
45
+ var _settings$runtime = settings.runtime,
46
+ ip = _settings$runtime.ip,
47
+ hostname = _settings$runtime.hostname;
48
+ var sdkLanguageVersion = settings.version;
49
+ var _queue = [];
50
+ var shouldAddPreviousTime = shouldAddPt(settings);
51
+ var isOptimized = shouldBeOptimized(settings);
52
+ var observer = ImpressionObserverFactory(); // Instantiates observer
53
+
54
+ var impressionsCounter = context.get(context.constants.IMPRESSIONS_COUNTER);
55
+ return {
56
+ queue: function queue(impression, attributes) {
57
+ _queue.push({
58
+ impression: impression,
59
+ attributes: attributes
60
+ });
61
+ },
62
+ track: function track() {
63
+ var impressionsCount = _queue.length;
64
+
65
+ var slice = _queue.splice(0, impressionsCount);
66
+
67
+ var impressionsToStore = []; // Track only the impressions that are going to be stored
68
+ // Wraps impressions to store and adds previousTime if it corresponds
69
+
70
+ slice.forEach(function (_ref) {
71
+ var impression = _ref.impression;
72
+
73
+ if (shouldAddPreviousTime) {
74
+ // Adds previous time if it is enabled
75
+ impression.pt = observer.testAndSet(impression);
76
+ }
77
+
78
+ var now = Date.now();
79
+
80
+ if (isOptimized && impressionsCounter) {
81
+ // Increments impression counter per featureName
82
+ impressionsCounter.inc(impression.feature, now, 1);
83
+ } // Checks if the impression should be added in queue to be sent
84
+
85
+
86
+ if (!isOptimized || !impression.pt || impression.pt < truncateTimeFrame(now)) {
87
+ impressionsToStore.push(impression);
88
+ }
89
+ });
90
+ var res = collector.track(impressionsToStore); // If we're on an async storage, handle error and log it.
91
+
92
+ if (thenable(res)) {
93
+ res.then(function () {
94
+ log.debug("Successfully stored " + impressionsCount + " impression" + (impressionsCount === 1 ? '' : 's') + ".");
95
+ }).catch(function (err) {
96
+ log.error("Could not store impressions bulk with " + impressionsCount + " impression" + (impressionsCount === 1 ? '' : 's') + ". Error: " + err);
97
+ });
98
+ }
99
+
100
+ if (listener || integrationsManager) {
101
+ var _loop = function _loop(i) {
102
+ var impressionData = {
103
+ // copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener
104
+ impression: objectAssign({}, slice[i].impression),
105
+ attributes: slice[i].attributes,
106
+ ip: ip,
107
+ hostname: hostname,
108
+ sdkLanguageVersion: sdkLanguageVersion
109
+ }; // Wrap in a timeout because we don't want it to be blocking.
110
+
111
+ setTimeout(function () {
112
+ // integrationsManager.handleImpression does not throw errors
113
+ if (integrationsManager) integrationsManager.handleImpression(impressionData);
114
+
115
+ try {
116
+ // An exception on the listeners should not break the SDK.
117
+ if (listener) listener.logImpression(impressionData);
118
+ } catch (err) {
119
+ log.error("Impression listener logImpression method threw: " + err + ".");
120
+ }
121
+ }, 0);
122
+ };
123
+
124
+ for (var i = 0; i < impressionsCount; i++) {
125
+ _loop(i);
126
+ }
127
+ }
128
+ }
129
+ };
130
+ }
131
+
132
+ export default ImpressionsTracker;
package/es/umd.js CHANGED
@@ -1,3 +1,2 @@
1
- import { SplitFactory } from './index'; // eslint-disable-next-line import/no-default-export
2
-
1
+ import { SplitFactory } from './index';
3
2
  export default SplitFactory;
@@ -0,0 +1,51 @@
1
+ var Backoff = /*#__PURE__*/function () {
2
+ /**
3
+ * Schedule function calls with exponential backoff
4
+ *
5
+ * @param {function} cb
6
+ * @param {number} baseMillis
7
+ * @param {number} maxMillis
8
+ */
9
+ function Backoff(cb, baseMillis, maxMillis) {
10
+ this.baseMillis = baseMillis || Backoff.DEFAULT_BASE_MILLIS;
11
+ this.maxMillis = maxMillis || Backoff.DEFAULT_MAX_MILLIS;
12
+ this.attempts = 0;
13
+ this.cb = cb;
14
+ }
15
+ /**
16
+ * Schedule a next call to `cb`
17
+ * @returns scheduled delay in milliseconds
18
+ */
19
+
20
+
21
+ var _proto = Backoff.prototype;
22
+
23
+ _proto.scheduleCall = function scheduleCall() {
24
+ var _this = this;
25
+
26
+ var delayInMillis = Math.min(this.baseMillis * Math.pow(2, this.attempts), this.maxMillis);
27
+ if (this.timeoutID) clearTimeout(this.timeoutID);
28
+ this.timeoutID = setTimeout(function () {
29
+ _this.cb();
30
+ }, delayInMillis);
31
+ this.attempts++;
32
+ return delayInMillis;
33
+ };
34
+
35
+ _proto.reset = function reset() {
36
+ this.attempts = 0;
37
+
38
+ if (this.timeoutID) {
39
+ clearTimeout(this.timeoutID);
40
+ this.timeoutID = 0;
41
+ }
42
+ };
43
+
44
+ return Backoff;
45
+ }();
46
+
47
+ Backoff.DEFAULT_BASE_MILLIS = 1000; // 1 second
48
+
49
+ Backoff.DEFAULT_MAX_MILLIS = 1800000; // 30 minutes
50
+
51
+ export default Backoff;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Decode a given string value in Base64 format
3
+ *
4
+ * @param {string} value to decode
5
+ * @throws {ReferenceError} if `atob` function is not defined
6
+ */
7
+ export function decodeFromBase64(value) {
8
+ return atob(value);
9
+ }
10
+ /**
11
+ * Encode a given string value to Base64 format.
12
+ *
13
+ * @param {string} value to encode
14
+ * @throws {ReferenceError} if `btoa` function is not defined
15
+ */
16
+
17
+ export function encodeToBase64(value) {
18
+ return btoa(value);
19
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Decode a given string value in Base64 format
3
+ *
4
+ * @param {string} value to decode
5
+ */
6
+ export function decodeFromBase64(value) {
7
+ // for node (version mayor than v4)
8
+ return Buffer.from(value, 'base64').toString('binary');
9
+ }
10
+ /**
11
+ * Encode a given string value to Base64 format
12
+ *
13
+ * @param {string} value to encode
14
+ */
15
+
16
+ export function encodeToBase64(value) {
17
+ // for node (version mayor than v4)
18
+ return Buffer.from(value).toString('base64');
19
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "./node.js",
3
+ "browser": "./browser.js"
4
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ Copyright 2016 Split Software
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ **/
16
+ function bs(items, value) {
17
+ var startIndex = 0;
18
+ var stopIndex = items.length - 1;
19
+ var middle = Math.floor((stopIndex + startIndex) / 2);
20
+ var minIndex = startIndex;
21
+ var maxIndex = stopIndex;
22
+
23
+ while (items[middle] !== value && startIndex < stopIndex) {
24
+ // adjust search area
25
+ if (value < items[middle]) {
26
+ stopIndex = middle - 1;
27
+ } else if (value > items[middle]) {
28
+ startIndex = middle + 1;
29
+ } // recalculate middle
30
+
31
+
32
+ middle = Math.floor((stopIndex + startIndex) / 2);
33
+ } // correct if middle is out of range
34
+
35
+
36
+ if (middle < minIndex) {
37
+ middle = minIndex;
38
+ } else if (middle > maxIndex) {
39
+ middle = maxIndex;
40
+ } // we want to always return based on strict minor comparation
41
+
42
+
43
+ if (value < items[middle] && middle > minIndex) {
44
+ return middle - 1;
45
+ }
46
+
47
+ return middle;
48
+ }
49
+
50
+ export default bs;
@@ -0,0 +1,38 @@
1
+ // SDK Modes
2
+ export var LOCALHOST_MODE = 'localhost';
3
+ export var STANDALONE_MODE = 'standalone';
4
+ export var PRODUCER_MODE = 'producer';
5
+ export var CONSUMER_MODE = 'consumer'; // Storage types
6
+
7
+ export var STORAGE_MEMORY = 'MEMORY';
8
+ export var STORAGE_REDIS = 'REDIS';
9
+ export var STORAGE_LOCALSTORAGE = 'LOCALSTORAGE'; // Special treatments
10
+
11
+ export var CONTROL = 'control';
12
+ export var CONTROL_WITH_CONFIG = {
13
+ treatment: CONTROL,
14
+ config: null
15
+ }; // Constants for unknown and not-applicable values
16
+
17
+ export var UNKNOWN = 'unknown';
18
+ export var NA = 'NA'; // Integration types
19
+
20
+ export var GOOGLE_ANALYTICS_TO_SPLIT = 'GOOGLE_ANALYTICS_TO_SPLIT';
21
+ export var SPLIT_TO_GOOGLE_ANALYTICS = 'SPLIT_TO_GOOGLE_ANALYTICS'; // Integration data types
22
+
23
+ export var SPLIT_IMPRESSION = 'IMPRESSION';
24
+ export var SPLIT_EVENT = 'EVENT'; // Split filters metadata.
25
+ // Ordered according to their precedency when forming the filter query string: `&names=<values>&prefixes=<values>`
26
+
27
+ export var FILTERS_METADATA = [{
28
+ type: 'byName',
29
+ maxLength: 400,
30
+ queryParam: 'names='
31
+ }, {
32
+ type: 'byPrefix',
33
+ maxLength: 50,
34
+ queryParam: 'prefixes='
35
+ }]; // Impression collection modes
36
+
37
+ export var DEBUG = 'DEBUG';
38
+ export var OPTIMIZED = 'OPTIMIZED';
@@ -0,0 +1,30 @@
1
+ export var COLLECTORS = 'metrics_collectors';
2
+ export var DESTROYED = 'is_destroyed';
3
+ export var EVENTS = 'events_publisher';
4
+ export var HAS_TIMEDOUT = 'has_timedout';
5
+ export var INTEGRATIONS_MANAGER = 'integrations_manager';
6
+ export var MY_SEGMENTS_CHANGE_WORKER = 'my_segments_change_worker';
7
+ export var PRODUCER = 'producer';
8
+ export var READINESS = 'readiness_gate';
9
+ export var READY = 'is_ready';
10
+ export var READY_FROM_CACHE = 'is_ready_from_cache';
11
+ export var SETTINGS = 'settings';
12
+ export var STATUS_MANAGER = 'status_manager';
13
+ export var STORAGE = 'storage';
14
+ export var IMPRESSIONS_COUNTER = 'impressions_counter';
15
+ export default {
16
+ COLLECTORS: COLLECTORS,
17
+ DESTROYED: DESTROYED,
18
+ EVENTS: EVENTS,
19
+ HAS_TIMEDOUT: HAS_TIMEDOUT,
20
+ INTEGRATIONS_MANAGER: INTEGRATIONS_MANAGER,
21
+ MY_SEGMENTS_CHANGE_WORKER: MY_SEGMENTS_CHANGE_WORKER,
22
+ PRODUCER: PRODUCER,
23
+ READINESS: READINESS,
24
+ READY: READY,
25
+ READY_FROM_CACHE: READY_FROM_CACHE,
26
+ SETTINGS: SETTINGS,
27
+ STATUS_MANAGER: STATUS_MANAGER,
28
+ STORAGE: STORAGE,
29
+ IMPRESSIONS_COUNTER: IMPRESSIONS_COUNTER
30
+ };