@splitsoftware/splitio 10.17.3-rc.3 → 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 (777) 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 -16
  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/services/getEventSource/node.js +18 -0
  100. package/{lib/platform → es/services}/getEventSource/package.json +0 -0
  101. package/es/services/getFetch/browser.js +4 -0
  102. package/es/services/getFetch/node.js +18 -0
  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/services/request/options/node.js +28 -0
  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/utils/settings/defaults/browser.js +12 -0
  220. package/es/utils/settings/defaults/node.js +21 -0
  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/utils/settings/runtime/node.js +33 -0
  234. package/es/utils/settings/runtime/package.json +4 -0
  235. package/es/utils/settings/storage/browser.js +64 -0
  236. package/es/utils/settings/storage/node.js +86 -0
  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 +155 -19
  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/services/getEventSource/browser.js +8 -0
  339. package/lib/services/getEventSource/node.js +26 -0
  340. package/lib/services/getEventSource/package.json +4 -0
  341. package/lib/services/getFetch/browser.js +12 -0
  342. package/lib/services/getFetch/node.js +24 -0
  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/services/request/options/node.js +37 -0
  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 +8 -4
  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/utils/settings/runtime/node.js +43 -0
  474. package/lib/utils/settings/runtime/package.json +4 -0
  475. package/lib/utils/settings/storage/browser.js +75 -0
  476. package/lib/utils/settings/storage/node.js +92 -0
  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 +31 -30
  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 +136 -13
  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/src/services/getEventSource/browser.js +3 -0
  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/services/request/options/node.js +30 -0
  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/src/utils/settings/defaults/browser.js +12 -0
  701. package/src/utils/settings/defaults/node.js +21 -0
  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/utils/settings/integrations/node.js +7 -0
  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/utils/settings/runtime/node.js +34 -0
  715. package/src/utils/settings/runtime/package.json +4 -0
  716. package/src/utils/settings/storage/browser.js +70 -0
  717. package/src/{settings → utils/settings}/storage/node.js +28 -18
  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 -66
  726. package/es/factory/node.js +0 -64
  727. package/es/platform/EventEmitter.js +0 -386
  728. package/es/platform/browser.js +0 -10
  729. package/es/platform/getEventSource/browser.js +0 -3
  730. package/es/platform/getEventSource/node.js +0 -19
  731. package/es/platform/getFetch/browser.js +0 -4
  732. package/es/platform/getFetch/node.js +0 -18
  733. package/es/platform/node.js +0 -12
  734. package/es/platform/request/options/node.js +0 -13
  735. package/es/settings/browser.js +0 -18
  736. package/es/settings/defaults/browser.js +0 -15
  737. package/es/settings/defaults/node.js +0 -24
  738. package/es/settings/defaults/version.js +0 -1
  739. package/es/settings/integrations/browser.js +0 -5
  740. package/es/settings/node.js +0 -17
  741. package/es/settings/storage/browser.js +0 -35
  742. package/es/settings/storage/node.js +0 -66
  743. package/lib/factory/browser.js +0 -70
  744. package/lib/factory/node.js +0 -68
  745. package/lib/platform/EventEmitter.js +0 -390
  746. package/lib/platform/browser.js +0 -13
  747. package/lib/platform/getEventSource/browser.js +0 -7
  748. package/lib/platform/getEventSource/node.js +0 -25
  749. package/lib/platform/getFetch/browser.js +0 -9
  750. package/lib/platform/getFetch/node.js +0 -23
  751. package/lib/platform/node.js +0 -16
  752. package/lib/platform/request/options/node.js +0 -18
  753. package/lib/settings/browser.js +0 -22
  754. package/lib/settings/defaults/browser.js +0 -18
  755. package/lib/settings/defaults/node.js +0 -27
  756. package/lib/settings/defaults/version.js +0 -4
  757. package/lib/settings/integrations/browser.js +0 -9
  758. package/lib/settings/node.js +0 -21
  759. package/lib/settings/storage/browser.js +0 -39
  760. package/lib/settings/storage/node.js +0 -70
  761. package/server/package.json +0 -5
  762. package/src/.DS_Store +0 -0
  763. package/src/factory/browser.js +0 -83
  764. package/src/factory/node.js +0 -80
  765. package/src/platform/.DS_Store +0 -0
  766. package/src/platform/EventEmitter.js +0 -443
  767. package/src/platform/browser.js +0 -12
  768. package/src/platform/node.js +0 -14
  769. package/src/platform/request/options/node.js +0 -15
  770. package/src/settings/.DS_Store +0 -0
  771. package/src/settings/browser.js +0 -20
  772. package/src/settings/defaults/version.js +0 -1
  773. package/src/settings/integrations/browser.js +0 -6
  774. package/src/settings/node.js +0 -19
  775. package/src/settings/storage/browser.js +0 -49
  776. package/types/client/index.d.ts +0 -14
  777. package/types/server/index.d.ts +0 -20
@@ -0,0 +1,428 @@
1
+ /*
2
+ Trimmed version of "fflate" library (https://www.npmjs.com/package/fflate/v/0.7.1)
3
+ used for GZIP/Zlib decompression in JavaScript, with the minimal modules used by the SDK.
4
+
5
+ MIT License
6
+
7
+ Copyright (c) 2020 Arjun Barrett
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+ */
27
+ /* eslint-disable */
28
+
29
+ export const algorithms = (function iifeDecompress() {
30
+
31
+ // Handle runtimes without typed arrays
32
+ if ([typeof Uint8Array, typeof Uint16Array, typeof Uint32Array].some(v => v != 'function')) {
33
+ return 'global Uint8Array object is not available for gzip/zlib decompression';
34
+ }
35
+
36
+ // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
37
+
38
+ // aliases for shorter compressed code (most minifers don't do this)
39
+ var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;
40
+ // fixed length extra bits
41
+ var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
42
+ // fixed distance extra bits
43
+ // see fleb note
44
+ var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
45
+ // code length index map
46
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
47
+ // get base, reverse index map from extra bits
48
+ var freb = function (eb, start) {
49
+ var b = new u16(31);
50
+ for (var i = 0; i < 31; ++i) {
51
+ b[i] = start += 1 << eb[i - 1];
52
+ }
53
+ // numbers here are at max 18 bits
54
+ var r = new u32(b[30]);
55
+ for (var i = 1; i < 30; ++i) {
56
+ for (var j = b[i]; j < b[i + 1]; ++j) {
57
+ r[j] = ((j - b[i]) << 5) | i;
58
+ }
59
+ }
60
+ return [b, r];
61
+ };
62
+ var _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];
63
+ // we can ignore the fact that the other numbers are wrong; they never happen anyway
64
+ fl[28] = 258, revfl[258] = 28;
65
+ var _b = freb(fdeb, 0), fd = _b[0];
66
+ // map of value to reverse (assuming 16 bits)
67
+ var rev = new u16(32768);
68
+ for (var i = 0; i < 32768; ++i) {
69
+ // reverse table algorithm from SO
70
+ var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
71
+ x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
72
+ x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
73
+ rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
74
+ }
75
+ // create huffman tree from u8 "map": index -> code length for code index
76
+ // mb (max bits) must be at most 15
77
+ // TODO: optimize/split up?
78
+ var hMap = (function (cd, mb, r) {
79
+ var s = cd.length;
80
+ // index
81
+ var i = 0;
82
+ // u16 "map": index -> # of codes with bit length = index
83
+ var l = new u16(mb);
84
+ // length of cd must be 288 (total # of codes)
85
+ for (; i < s; ++i)
86
+ ++l[cd[i] - 1];
87
+ // u16 "map": index -> minimum code for bit length = index
88
+ var le = new u16(mb);
89
+ for (i = 0; i < mb; ++i) {
90
+ le[i] = (le[i - 1] + l[i - 1]) << 1;
91
+ }
92
+ var co;
93
+ if (r) {
94
+ // u16 "map": index -> number of actual bits, symbol for code
95
+ co = new u16(1 << mb);
96
+ // bits to remove for reverser
97
+ var rvb = 15 - mb;
98
+ for (i = 0; i < s; ++i) {
99
+ // ignore 0 lengths
100
+ if (cd[i]) {
101
+ // num encoding both symbol and bits read
102
+ var sv = (i << 4) | cd[i];
103
+ // free bits
104
+ var r_1 = mb - cd[i];
105
+ // start value
106
+ var v = le[cd[i] - 1]++ << r_1;
107
+ // m is end value
108
+ for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
109
+ // every 16 bit value starting with the code yields the same result
110
+ co[rev[v] >>> rvb] = sv;
111
+ }
112
+ }
113
+ }
114
+ }
115
+ else {
116
+ co = new u16(s);
117
+ for (i = 0; i < s; ++i) {
118
+ if (cd[i]) {
119
+ co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);
120
+ }
121
+ }
122
+ }
123
+ return co;
124
+ });
125
+ // fixed length tree
126
+ var flt = new u8(288);
127
+ for (var i = 0; i < 144; ++i)
128
+ flt[i] = 8;
129
+ for (var i = 144; i < 256; ++i)
130
+ flt[i] = 9;
131
+ for (var i = 256; i < 280; ++i)
132
+ flt[i] = 7;
133
+ for (var i = 280; i < 288; ++i)
134
+ flt[i] = 8;
135
+ // fixed distance tree
136
+ var fdt = new u8(32);
137
+ for (var i = 0; i < 32; ++i)
138
+ fdt[i] = 5;
139
+ // fixed length map
140
+ var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
141
+ // fixed distance map
142
+ var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
143
+ // find max of array
144
+ var max = function (a) {
145
+ var m = a[0];
146
+ for (var i = 1; i < a.length; ++i) {
147
+ if (a[i] > m)
148
+ m = a[i];
149
+ }
150
+ return m;
151
+ };
152
+ // read d, starting at bit p and mask with m
153
+ var bits = function (d, p, m) {
154
+ var o = (p / 8) | 0;
155
+ return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
156
+ };
157
+ // read d, starting at bit p continuing for at least 16 bits
158
+ var bits16 = function (d, p) {
159
+ var o = (p / 8) | 0;
160
+ return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
161
+ };
162
+ // get end of byte
163
+ var shft = function (p) { return ((p + 7) / 8) | 0; };
164
+ // typed array slice - allows garbage collector to free original reference,
165
+ // while being more compatible than .slice
166
+ var slc = function (v, s, e) {
167
+ if (s == null || s < 0)
168
+ s = 0;
169
+ if (e == null || e > v.length)
170
+ e = v.length;
171
+ // can't use .constructor in case user-supplied
172
+ var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);
173
+ n.set(v.subarray(s, e));
174
+ return n;
175
+ };
176
+ // error codes
177
+ var ec = [
178
+ 'unexpected EOF',
179
+ 'invalid block type',
180
+ 'invalid length/literal',
181
+ 'invalid distance',
182
+ 'stream finished',
183
+ 'no stream handler',
184
+ ,
185
+ 'no callback',
186
+ 'invalid UTF-8 data',
187
+ 'extra field too long',
188
+ 'date not in range 1980-2099',
189
+ 'filename too long',
190
+ 'stream finishing',
191
+ 'invalid zip data'
192
+ // determined by unknown compression method
193
+ ];
194
+ var err = function (ind, msg, nt) {
195
+ var e = new Error(msg || ec[ind]);
196
+ e.code = ind;
197
+ if (Error.captureStackTrace)
198
+ Error.captureStackTrace(e, err);
199
+ if (!nt)
200
+ throw e;
201
+ return e;
202
+ };
203
+ // expands raw DEFLATE data
204
+ var inflt = function (dat, buf, st) {
205
+ // source length
206
+ var sl = dat.length;
207
+ if (!sl || (st && st.f && !st.l))
208
+ return buf || new u8(0);
209
+ // have to estimate size
210
+ var noBuf = !buf || st;
211
+ // no state
212
+ var noSt = !st || st.i;
213
+ if (!st)
214
+ st = {};
215
+ // Assumes roughly 33% compression ratio average
216
+ if (!buf)
217
+ buf = new u8(sl * 3);
218
+ // ensure buffer can fit at least l elements
219
+ var cbuf = function (l) {
220
+ var bl = buf.length;
221
+ // need to increase size to fit
222
+ if (l > bl) {
223
+ // Double or set to necessary, whichever is greater
224
+ var nbuf = new u8(Math.max(bl * 2, l));
225
+ nbuf.set(buf);
226
+ buf = nbuf;
227
+ }
228
+ };
229
+ // last chunk bitpos bytes
230
+ var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
231
+ // total bits
232
+ var tbts = sl * 8;
233
+ do {
234
+ if (!lm) {
235
+ // BFINAL - this is only 1 when last chunk is next
236
+ final = bits(dat, pos, 1);
237
+ // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
238
+ var type = bits(dat, pos + 1, 3);
239
+ pos += 3;
240
+ if (!type) {
241
+ // go to end of byte boundary
242
+ var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
243
+ if (t > sl) {
244
+ if (noSt)
245
+ err(0);
246
+ break;
247
+ }
248
+ // ensure size
249
+ if (noBuf)
250
+ cbuf(bt + l);
251
+ // Copy over uncompressed data
252
+ buf.set(dat.subarray(s, t), bt);
253
+ // Get new bitpos, update byte count
254
+ st.b = bt += l, st.p = pos = t * 8, st.f = final;
255
+ continue;
256
+ }
257
+ else if (type == 1)
258
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
259
+ else if (type == 2) {
260
+ // literal lengths
261
+ var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
262
+ var tl = hLit + bits(dat, pos + 5, 31) + 1;
263
+ pos += 14;
264
+ // length+distance tree
265
+ var ldt = new u8(tl);
266
+ // code length tree
267
+ var clt = new u8(19);
268
+ for (var i = 0; i < hcLen; ++i) {
269
+ // use index map to get real code
270
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
271
+ }
272
+ pos += hcLen * 3;
273
+ // code lengths bits
274
+ var clb = max(clt), clbmsk = (1 << clb) - 1;
275
+ // code lengths map
276
+ var clm = hMap(clt, clb, 1);
277
+ for (var i = 0; i < tl;) {
278
+ var r = clm[bits(dat, pos, clbmsk)];
279
+ // bits read
280
+ pos += r & 15;
281
+ // symbol
282
+ var s = r >>> 4;
283
+ // code length to copy
284
+ if (s < 16) {
285
+ ldt[i++] = s;
286
+ }
287
+ else {
288
+ // copy count
289
+ var c = 0, n = 0;
290
+ if (s == 16)
291
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
292
+ else if (s == 17)
293
+ n = 3 + bits(dat, pos, 7), pos += 3;
294
+ else if (s == 18)
295
+ n = 11 + bits(dat, pos, 127), pos += 7;
296
+ while (n--)
297
+ ldt[i++] = c;
298
+ }
299
+ }
300
+ // length tree distance tree
301
+ var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
302
+ // max length bits
303
+ lbt = max(lt);
304
+ // max dist bits
305
+ dbt = max(dt);
306
+ lm = hMap(lt, lbt, 1);
307
+ dm = hMap(dt, dbt, 1);
308
+ }
309
+ else
310
+ err(1);
311
+ if (pos > tbts) {
312
+ if (noSt)
313
+ err(0);
314
+ break;
315
+ }
316
+ }
317
+ // Make sure the buffer can hold this + the largest possible addition
318
+ // Maximum chunk size (practically, theoretically infinite) is 2^17;
319
+ if (noBuf)
320
+ cbuf(bt + 131072);
321
+ var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
322
+ var lpos = pos;
323
+ for (; ; lpos = pos) {
324
+ // bits read, code
325
+ var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
326
+ pos += c & 15;
327
+ if (pos > tbts) {
328
+ if (noSt)
329
+ err(0);
330
+ break;
331
+ }
332
+ if (!c)
333
+ err(2);
334
+ if (sym < 256)
335
+ buf[bt++] = sym;
336
+ else if (sym == 256) {
337
+ lpos = pos, lm = null;
338
+ break;
339
+ }
340
+ else {
341
+ var add = sym - 254;
342
+ // no extra bits needed if less
343
+ if (sym > 264) {
344
+ // index
345
+ var i = sym - 257, b = fleb[i];
346
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
347
+ pos += b;
348
+ }
349
+ // dist
350
+ var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;
351
+ if (!d)
352
+ err(3);
353
+ pos += d & 15;
354
+ var dt = fd[dsym];
355
+ if (dsym > 3) {
356
+ var b = fdeb[dsym];
357
+ dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
358
+ }
359
+ if (pos > tbts) {
360
+ if (noSt)
361
+ err(0);
362
+ break;
363
+ }
364
+ if (noBuf)
365
+ cbuf(bt + 131072);
366
+ var end = bt + add;
367
+ for (; bt < end; bt += 4) {
368
+ buf[bt] = buf[bt - dt];
369
+ buf[bt + 1] = buf[bt + 1 - dt];
370
+ buf[bt + 2] = buf[bt + 2 - dt];
371
+ buf[bt + 3] = buf[bt + 3 - dt];
372
+ }
373
+ bt = end;
374
+ }
375
+ }
376
+ st.l = lm, st.p = lpos, st.b = bt, st.f = final;
377
+ if (lm)
378
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
379
+ } while (!final);
380
+ return bt == buf.length ? buf : slc(buf, 0, bt);
381
+ };
382
+ // gzip footer: -8 to -4 = CRC, -4 to -0 is length
383
+ // gzip start
384
+ var gzs = function (d) {
385
+ if (d[0] != 31 || d[1] != 139 || d[2] != 8)
386
+ err(6, 'invalid gzip data');
387
+ var flg = d[3];
388
+ var st = 10;
389
+ if (flg & 4)
390
+ st += d[10] | (d[11] << 8) + 2;
391
+ for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])
392
+ ;
393
+ return st + (flg & 2);
394
+ };
395
+ // gzip length
396
+ var gzl = function (d) {
397
+ var l = d.length;
398
+ return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;
399
+ };
400
+ // zlib valid
401
+ var zlv = function (d) {
402
+ if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))
403
+ err(6, 'invalid zlib data');
404
+ if (d[1] & 32)
405
+ err(6, 'invalid zlib data: preset dictionaries not supported');
406
+ };
407
+
408
+ return {
409
+ /**
410
+ * Expands GZIP data
411
+ * @param data The data to decompress
412
+ * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.
413
+ * @returns The decompressed version of the data
414
+ */
415
+ gunzipSync(data, out) {
416
+ return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));
417
+ },
418
+ /**
419
+ * Expands Zlib data
420
+ * @param data The data to decompress
421
+ * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
422
+ * @returns The decompressed version of the data
423
+ */
424
+ unzlibSync(data, out) {
425
+ return inflt((zlv(data), data.subarray(2, -4)), out);
426
+ }
427
+ }
428
+ })();
@@ -0,0 +1,48 @@
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
+
17
+ function repeat(fn, delay, ...rest) {
18
+ let tid;
19
+ let stopped = false;
20
+
21
+ function next(_delay = delay, ...rest) {
22
+ if (!stopped) {
23
+ // IE 9 doesn't support function arguments through setTimeout call.
24
+ // https://msdn.microsoft.com/en-us/library/ms536753(v=vs.85).aspx
25
+ tid = setTimeout(() => {
26
+ fn(...rest, next);
27
+ }, _delay);
28
+ }
29
+ }
30
+
31
+ function till() {
32
+ clearTimeout(tid);
33
+ tid = undefined;
34
+ stopped = true;
35
+ }
36
+
37
+ till.reset = () => {
38
+ clearTimeout(tid);
39
+ tid = undefined;
40
+ next(delay, ...rest);
41
+ };
42
+
43
+ fn(...rest, next);
44
+
45
+ return till;
46
+ }
47
+
48
+ export default repeat;
@@ -0,0 +1,42 @@
1
+ import { isString } from '../lang';
2
+ import logFactory from '../logger';
3
+ const log = logFactory('', {
4
+ displayAllErrors: true
5
+ });
6
+
7
+ const usedKeysMap = {};
8
+
9
+ export function validateApiKey(maybeApiKey) {
10
+ let apiKey = false;
11
+ if (maybeApiKey == undefined) { // eslint-disable-line eqeqeq
12
+ log.error('Factory instantiation: you passed a null or undefined api_key, api_key must be a non-empty string.');
13
+ } else if (isString(maybeApiKey)) {
14
+ if (maybeApiKey.length > 0)
15
+ apiKey = maybeApiKey;
16
+ else
17
+ log.error('Factory instantiation: you passed an empty api_key, api_key must be a non-empty string.');
18
+ } else {
19
+ log.error('Factory instantiation: you passed an invalid api_key, api_key must be a non-empty string.');
20
+ }
21
+
22
+ // If the apiKey is correct, we'll save it as the instance creation should work.
23
+ if (apiKey) {
24
+ if (!usedKeysMap[apiKey]) {
25
+ // If this key is not present, only warning scenarios is that we have factories for other keys.
26
+ usedKeysMap[apiKey] = 1;
27
+ if (Object.keys(usedKeysMap).length > 1) {
28
+ log.warn('Factory instantiation: You already have an instance of the Split factory. Make sure you definitely want this additional instance. We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing it throughout your application.');
29
+ }
30
+ } else {
31
+ log.warn(`Factory instantiation: You already have ${usedKeysMap[apiKey]} ${usedKeysMap[apiKey] === 1 ? 'factory' : 'factories'} with this API Key. We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing it throughout your application.`);
32
+ usedKeysMap[apiKey]++;
33
+ }
34
+ }
35
+
36
+ return apiKey;
37
+ }
38
+
39
+ export function releaseApiKey(apiKey) {
40
+ if (usedKeysMap[apiKey]) usedKeysMap[apiKey]--;
41
+ if (usedKeysMap[apiKey] === 0) delete usedKeysMap[apiKey];
42
+ }
@@ -0,0 +1,22 @@
1
+ import { isString, numberIsFinite, isBoolean } from '../lang';
2
+ import logFactory from '../logger';
3
+ const log = logFactory('');
4
+
5
+ export function validateAttribute(attributeKey, attributeValue, method) {
6
+ if (!isString(attributeKey) || attributeKey.length === 0){
7
+ log.warn(`${method}: you passed an invalid attribute name, attribute name must be a non-empty string.`);
8
+ return false;
9
+ }
10
+
11
+ const isStringVal = isString(attributeValue);
12
+ const isFiniteVal = numberIsFinite(attributeValue);
13
+ const isBoolVal = isBoolean(attributeValue);
14
+ const isArrayVal = Array.isArray(attributeValue);
15
+
16
+ if (!(isStringVal || isFiniteVal || isBoolVal || isArrayVal)) { // If it's not of valid type.
17
+ log.warn(`${method}: you passed an invalid attribute value for ${attributeKey}. Acceptable types are: string, number, boolean and array of strings.`);
18
+ return false;
19
+ }
20
+
21
+ return true;
22
+ }
@@ -0,0 +1,26 @@
1
+ import { isObject } from '../lang';
2
+ import logFactory from '../logger';
3
+ import { validateAttribute } from './attribute';
4
+ const log = logFactory('');
5
+
6
+ export function validateAttributes(maybeAttrs, method) {
7
+ // Attributes are optional
8
+ if (isObject(maybeAttrs) || maybeAttrs == undefined) // eslint-disable-line eqeqeq
9
+ return maybeAttrs;
10
+
11
+ log.error(`${method}: attributes must be a plain object.`);
12
+ return false;
13
+ }
14
+
15
+ export function validateAttributesDeep(maybeAttributes, method) {
16
+ if (!validateAttributes(maybeAttributes, method)) return false;
17
+
18
+ let result = true;
19
+ Object.keys(maybeAttributes).forEach(attributeKey => {
20
+ if (!validateAttribute(attributeKey, maybeAttributes[attributeKey], method))
21
+ result = false;
22
+ });
23
+
24
+ return result;
25
+
26
+ }
@@ -0,0 +1,23 @@
1
+ import { isString } from '../lang';
2
+ import logFactory from '../logger';
3
+ const log = logFactory('');
4
+
5
+ const EVENT_TYPE_REGEX = /^[a-zA-Z0-9][-_.:a-zA-Z0-9]{0,79}$/;
6
+
7
+ export function validateEvent(maybeEvent, method) {
8
+ if (maybeEvent == undefined) { // eslint-disable-line eqeqeq
9
+ log.error(`${method}: you passed a null or undefined event_type, event_type must be a non-empty string.`);
10
+ } else if (!isString(maybeEvent)) {
11
+ log.error(`${method}: you passed an invalid event_type, event_type must be a non-empty string.`);
12
+ } else { // It is a string.
13
+ if (maybeEvent.length === 0) {
14
+ log.error(`${method}: you passed an empty event_type, event_type must be a non-empty string.`);
15
+ } else if (!EVENT_TYPE_REGEX.test(maybeEvent)) {
16
+ log.error(`${method}: you passed "${maybeEvent}", event_type must adhere to the regular expression /^[a-zA-Z0-9][-_.:a-zA-Z0-9]{0,79}$/g. This means an event_type must be alphanumeric, cannot be more than 80 characters long, and can only include a dash, underscore, period, or colon as separators of alphanumeric characters.`);
17
+ } else {
18
+ return maybeEvent;
19
+ }
20
+ }
21
+
22
+ return false;
23
+ }
@@ -0,0 +1,65 @@
1
+ import { isObject, shallowClone, isString, numberIsFinite, isBoolean } from '../lang';
2
+ import logFactory from '../logger';
3
+ const log = logFactory('');
4
+
5
+ const ECMA_SIZES = {
6
+ NULL: 0, // While on the JSON it's going to occupy more space, we'll take it as 0 for the approximation.
7
+ STRING: 2,
8
+ BOOLEAN: 4,
9
+ NUMBER: 8
10
+ };
11
+ const MAX_PROPERTIES_AMOUNT = 300;
12
+ const MAX_PROPERTIES_SIZE = 1024 * 32;
13
+ const BASE_EVENT_SIZE = 1024; // We assume 1kb events without properties (avg measured)
14
+
15
+ export function validateEventProperties(maybeProperties, method) {
16
+ if (maybeProperties == undefined) return { properties: null, size: BASE_EVENT_SIZE }; // eslint-disable-line eqeqeq
17
+
18
+ if (!isObject(maybeProperties)) {
19
+ log.error(`${method}: properties must be a plain object.`);
20
+ return { properties: false, size: BASE_EVENT_SIZE };
21
+ }
22
+
23
+ const keys = Object.keys(maybeProperties);
24
+ const clone = shallowClone(maybeProperties);
25
+ // To avoid calculating the size twice we'll return it from here.
26
+ const output = {
27
+ properties: clone,
28
+ size: BASE_EVENT_SIZE // We assume 1kb events without properties (avg measured)
29
+ };
30
+
31
+ if (keys.length > MAX_PROPERTIES_AMOUNT) {
32
+ log.warn(`${method}: Event has more than 300 properties. Some of them will be trimmed when processed.`);
33
+ }
34
+
35
+ for (let i = 0; i < keys.length; i++) {
36
+ output.size += keys[i].length * ECMA_SIZES.STRING; // Count the size of the key which is always a string.
37
+
38
+ let val = clone[keys[i]];
39
+
40
+ const isStringVal = isString(val);
41
+ const isFiniteVal = numberIsFinite(val);
42
+ const isBoolVal = isBoolean(val);
43
+ let isNullVal = val === null;
44
+
45
+ if (!(isStringVal || isFiniteVal || isBoolVal || isNullVal)) { // If it's not of valid type.
46
+ clone[keys[i]] = null;
47
+ val = null;
48
+ isNullVal = true;
49
+ log.warn(`${method}: Property ${keys[i]} is of invalid type. Setting value to null.`);
50
+ }
51
+
52
+ if (isNullVal) output.size += ECMA_SIZES.NULL;
53
+ else if (isFiniteVal) output.size += ECMA_SIZES.NUMBER;
54
+ else if (isBoolVal) output.size += ECMA_SIZES.BOOLEAN;
55
+ else if (isStringVal) output.size += val.length * ECMA_SIZES.STRING;
56
+
57
+ if (output.size > MAX_PROPERTIES_SIZE) {
58
+ log.error(`${method}: The maximum size allowed for the properties is 32768 bytes, which was exceeded. Event not queued.`);
59
+ output.properties = false;
60
+ break;
61
+ }
62
+ }
63
+
64
+ return output;
65
+ }
@@ -0,0 +1,11 @@
1
+ import { numberIsFinite } from '../lang';
2
+ import logFactory from '../logger';
3
+ const log = logFactory('');
4
+
5
+ export function validateEventValue(maybeValue, method) {
6
+ if (numberIsFinite(maybeValue) || maybeValue == undefined) // eslint-disable-line eqeqeq
7
+ return maybeValue;
8
+
9
+ log.error(`${method}: value must be a finite number.`);
10
+ return false;
11
+ }
@@ -0,0 +1,11 @@
1
+ // This file is just here for easier consumption of the validators.
2
+ export { validateApiKey, releaseApiKey } from './apiKey';
3
+ export { validateAttributes } from './attributes';
4
+ export { validateEvent } from './event';
5
+ export { validateEventValue } from './eventValue';
6
+ export { validateEventProperties } from './eventProperties';
7
+ export { validateKey } from './key';
8
+ export { validateSplit, validateSplitExistance } from './split';
9
+ export { validateSplits } from './splits';
10
+ export { validateTrafficType, validateTrafficTypeExistance } from './trafficType';
11
+ export { validateIfDestroyed, validateIfReady } from './isOperational';