@croct/sdk 0.17.7 → 0.17.8

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 (409) hide show
  1. package/activeRecord.cjs.map +1 -0
  2. package/activeRecord.d.ts +8 -4
  3. package/activeRecord.js +115 -106
  4. package/activeRecord.js.map +1 -1
  5. package/apiKey.cjs.map +1 -0
  6. package/apiKey.d.ts +4 -2
  7. package/apiKey.js +152 -141
  8. package/apiKey.js.map +1 -1
  9. package/base64Url.cjs.map +1 -0
  10. package/base64Url.d.ts +4 -2
  11. package/base64Url.js +8 -15
  12. package/base64Url.js.map +1 -1
  13. package/cache/cache.cjs.map +1 -0
  14. package/cache/cache.d.ts +6 -4
  15. package/cache/cache.js +9 -10
  16. package/cache/cache.js.map +1 -1
  17. package/cache/cookieCache.cjs.map +1 -0
  18. package/cache/cookieCache.d.ts +6 -3
  19. package/cache/cookieCache.js +52 -54
  20. package/cache/cookieCache.js.map +1 -1
  21. package/cache/fallbackCache.cjs.map +1 -0
  22. package/cache/fallbackCache.d.ts +5 -2
  23. package/cache/fallbackCache.js +20 -21
  24. package/cache/fallbackCache.js.map +1 -1
  25. package/cache/inMemoryCache.cjs.map +1 -0
  26. package/cache/inMemoryCache.d.ts +5 -2
  27. package/cache/inMemoryCache.js +15 -17
  28. package/cache/inMemoryCache.js.map +1 -1
  29. package/cache/index.cjs.map +1 -0
  30. package/cache/index.d.ts +4 -4
  31. package/cache/index.js +9 -11
  32. package/cache/index.js.map +1 -1
  33. package/cache/localStorageCache.cjs.map +1 -0
  34. package/cache/localStorageCache.d.ts +5 -2
  35. package/cache/localStorageCache.js +55 -63
  36. package/cache/localStorageCache.js.map +1 -1
  37. package/channel/channel.cjs.map +1 -0
  38. package/channel/channel.d.ts +8 -6
  39. package/channel/channel.js +21 -22
  40. package/channel/channel.js.map +1 -1
  41. package/channel/encodedChannel.cjs.map +1 -0
  42. package/channel/encodedChannel.d.ts +6 -3
  43. package/channel/encodedChannel.js +13 -14
  44. package/channel/encodedChannel.js.map +1 -1
  45. package/channel/guaranteedChannel.cjs.map +1 -0
  46. package/channel/guaranteedChannel.d.ts +9 -7
  47. package/channel/guaranteedChannel.js +74 -73
  48. package/channel/guaranteedChannel.js.map +1 -1
  49. package/channel/httpBeaconChannel.cjs.map +1 -0
  50. package/channel/httpBeaconChannel.d.ts +9 -6
  51. package/channel/httpBeaconChannel.js +82 -83
  52. package/channel/httpBeaconChannel.js.map +1 -1
  53. package/channel/index.cjs.map +1 -0
  54. package/channel/index.d.ts +12 -7
  55. package/channel/index.js +15 -17
  56. package/channel/index.js.map +1 -1
  57. package/channel/queuedChannel.cjs.map +1 -0
  58. package/channel/queuedChannel.d.ts +7 -4
  59. package/channel/queuedChannel.js +87 -97
  60. package/channel/queuedChannel.js.map +1 -1
  61. package/channel/retryChannel.cjs.map +1 -0
  62. package/channel/retryChannel.d.ts +7 -5
  63. package/channel/retryChannel.js +58 -57
  64. package/channel/retryChannel.js.map +1 -1
  65. package/channel/sandboxChannel.cjs.map +1 -0
  66. package/channel/sandboxChannel.d.ts +5 -2
  67. package/channel/sandboxChannel.js +34 -35
  68. package/channel/sandboxChannel.js.map +1 -1
  69. package/cid/assigner.cjs.map +1 -0
  70. package/cid/assigner.d.ts +3 -1
  71. package/cid/assigner.js +0 -2
  72. package/cid/assigner.js.map +1 -1
  73. package/cid/cachedAssigner.cjs.map +1 -0
  74. package/cid/cachedAssigner.d.ts +7 -5
  75. package/cid/cachedAssigner.js +37 -43
  76. package/cid/cachedAssigner.js.map +1 -1
  77. package/cid/fixedAssigner.cjs.map +1 -0
  78. package/cid/fixedAssigner.d.ts +5 -2
  79. package/cid/fixedAssigner.js +9 -10
  80. package/cid/fixedAssigner.js.map +1 -1
  81. package/cid/index.cjs.map +1 -0
  82. package/cid/index.d.ts +6 -4
  83. package/cid/index.js +9 -11
  84. package/cid/index.js.map +1 -1
  85. package/cid/remoteAssigner.cjs.map +1 -0
  86. package/cid/remoteAssigner.d.ts +6 -3
  87. package/cid/remoteAssigner.js +36 -37
  88. package/cid/remoteAssigner.js.map +1 -1
  89. package/constants.cjs.map +1 -0
  90. package/constants.d.ts +6 -4
  91. package/constants.js +10 -7
  92. package/constants.js.map +1 -1
  93. package/container.cjs.map +1 -0
  94. package/container.d.ts +28 -15
  95. package/container.js +269 -252
  96. package/container.js.map +1 -1
  97. package/contentFetcher.cjs.map +1 -0
  98. package/contentFetcher.d.ts +17 -14
  99. package/contentFetcher.js +156 -163
  100. package/contentFetcher.js.map +1 -1
  101. package/context.cjs.map +1 -0
  102. package/context.d.ts +13 -9
  103. package/context.js +80 -81
  104. package/context.js.map +1 -1
  105. package/error.cjs.map +1 -0
  106. package/error.d.ts +4 -2
  107. package/error.js +21 -21
  108. package/error.js.map +1 -1
  109. package/evaluator.cjs.map +1 -0
  110. package/evaluator.d.ts +18 -16
  111. package/evaluator.js +179 -179
  112. package/evaluator.js.map +1 -1
  113. package/eventManager.cjs.map +1 -0
  114. package/eventManager.d.ts +8 -6
  115. package/eventManager.js +24 -26
  116. package/eventManager.js.map +1 -1
  117. package/eventSubjectProcessor.cjs.map +1 -0
  118. package/eventSubjectProcessor.d.ts +16 -3
  119. package/eventSubjectProcessor.js +53 -59
  120. package/eventSubjectProcessor.js.map +1 -1
  121. package/facade/contentFetcherFacade.cjs.map +1 -0
  122. package/facade/contentFetcherFacade.d.ts +16 -7
  123. package/facade/contentFetcherFacade.js +32 -35
  124. package/facade/contentFetcherFacade.js.map +1 -1
  125. package/facade/evaluatorFacade.cjs.map +1 -0
  126. package/facade/evaluatorFacade.d.ts +17 -10
  127. package/facade/evaluatorFacade.js +56 -60
  128. package/facade/evaluatorFacade.js.map +1 -1
  129. package/facade/index.cjs.map +1 -0
  130. package/facade/index.d.ts +29 -7
  131. package/facade/index.js +19 -19
  132. package/facade/index.js.map +1 -1
  133. package/facade/sdkFacade.cjs.map +1 -0
  134. package/facade/sdkFacade.d.ts +33 -15
  135. package/facade/sdkFacade.js +201 -214
  136. package/facade/sdkFacade.js.map +1 -1
  137. package/facade/sessionFacade.cjs.map +1 -0
  138. package/facade/sessionFacade.d.ts +18 -3
  139. package/facade/sessionFacade.js +10 -11
  140. package/facade/sessionFacade.js.map +1 -1
  141. package/facade/sessionPatch.cjs.map +1 -0
  142. package/facade/sessionPatch.d.ts +17 -4
  143. package/facade/sessionPatch.js +22 -24
  144. package/facade/sessionPatch.js.map +1 -1
  145. package/facade/trackerFacade.cjs.map +1 -0
  146. package/facade/trackerFacade.d.ts +17 -4
  147. package/facade/trackerFacade.js +67 -57
  148. package/facade/trackerFacade.js.map +1 -1
  149. package/facade/userFacade.cjs.map +1 -0
  150. package/facade/userFacade.d.ts +21 -4
  151. package/facade/userFacade.js +17 -18
  152. package/facade/userFacade.js.map +1 -1
  153. package/facade/userPatch.cjs.map +1 -0
  154. package/facade/userPatch.d.ts +17 -4
  155. package/facade/userPatch.js +22 -24
  156. package/facade/userPatch.js.map +1 -1
  157. package/help.cjs.map +1 -0
  158. package/help.d.ts +3 -1
  159. package/help.js +19 -23
  160. package/help.js.map +1 -1
  161. package/index.cjs.map +1 -0
  162. package/index.d.ts +25 -3
  163. package/index.js +7 -7
  164. package/index.js.map +1 -1
  165. package/logging/consoleLogger.cjs.map +1 -0
  166. package/logging/consoleLogger.d.ts +5 -2
  167. package/logging/consoleLogger.js +23 -24
  168. package/logging/consoleLogger.js.map +1 -1
  169. package/logging/filteredLogger.cjs.map +1 -0
  170. package/logging/filteredLogger.d.ts +8 -5
  171. package/logging/filteredLogger.js +36 -37
  172. package/logging/filteredLogger.js.map +1 -1
  173. package/logging/index.cjs.map +1 -0
  174. package/logging/index.d.ts +5 -5
  175. package/logging/index.js +11 -13
  176. package/logging/index.js.map +1 -1
  177. package/logging/logger.cjs.map +1 -0
  178. package/logging/logger.d.ts +4 -2
  179. package/logging/logger.js +0 -2
  180. package/logging/logger.js.map +1 -1
  181. package/logging/namespacedLogger.cjs.map +1 -0
  182. package/logging/namespacedLogger.d.ts +5 -2
  183. package/logging/namespacedLogger.js +22 -23
  184. package/logging/namespacedLogger.js.map +1 -1
  185. package/logging/nullLogger.cjs.map +1 -0
  186. package/logging/nullLogger.d.ts +5 -2
  187. package/logging/nullLogger.js +11 -16
  188. package/logging/nullLogger.js.map +1 -1
  189. package/namespacedStorage.cjs.map +1 -0
  190. package/namespacedStorage.d.ts +3 -1
  191. package/namespacedStorage.js +51 -52
  192. package/namespacedStorage.js.map +1 -1
  193. package/package.json +60 -6
  194. package/patch.cjs.map +1 -0
  195. package/patch.d.ts +6 -4
  196. package/patch.js +0 -2
  197. package/patch.js.map +1 -1
  198. package/queue/capacityRestrictedQueue.cjs.map +1 -0
  199. package/queue/capacityRestrictedQueue.d.ts +5 -2
  200. package/queue/capacityRestrictedQueue.js +31 -32
  201. package/queue/capacityRestrictedQueue.js.map +1 -1
  202. package/queue/inMemoryQueue.cjs.map +1 -0
  203. package/queue/inMemoryQueue.d.ts +5 -2
  204. package/queue/inMemoryQueue.js +32 -34
  205. package/queue/inMemoryQueue.js.map +1 -1
  206. package/queue/index.cjs.map +1 -0
  207. package/queue/index.d.ts +6 -5
  208. package/queue/index.js +11 -13
  209. package/queue/index.js.map +1 -1
  210. package/queue/monitoredQueue.cjs.map +1 -0
  211. package/queue/monitoredQueue.d.ts +8 -5
  212. package/queue/monitoredQueue.js +104 -110
  213. package/queue/monitoredQueue.js.map +1 -1
  214. package/queue/persistentQueue.cjs.map +1 -0
  215. package/queue/persistentQueue.d.ts +5 -2
  216. package/queue/persistentQueue.js +52 -54
  217. package/queue/persistentQueue.js.map +1 -1
  218. package/queue/queue.cjs.map +1 -0
  219. package/queue/queue.d.ts +3 -1
  220. package/queue/queue.js +0 -2
  221. package/queue/queue.js.map +1 -1
  222. package/retry/arbitraryPolicy.cjs.map +1 -0
  223. package/retry/arbitraryPolicy.d.ts +5 -2
  224. package/retry/arbitraryPolicy.js +14 -15
  225. package/retry/arbitraryPolicy.js.map +1 -1
  226. package/retry/backoffPolicy.cjs.map +1 -0
  227. package/retry/backoffPolicy.d.ts +5 -3
  228. package/retry/backoffPolicy.js +52 -50
  229. package/retry/backoffPolicy.js.map +1 -1
  230. package/retry/index.cjs.map +1 -0
  231. package/retry/index.d.ts +5 -5
  232. package/retry/index.js +11 -13
  233. package/retry/index.js.map +1 -1
  234. package/retry/maxAttemptsPolicy.cjs.map +1 -0
  235. package/retry/maxAttemptsPolicy.d.ts +5 -2
  236. package/retry/maxAttemptsPolicy.js +17 -18
  237. package/retry/maxAttemptsPolicy.js.map +1 -1
  238. package/retry/neverPolicy.cjs.map +1 -0
  239. package/retry/neverPolicy.d.ts +5 -2
  240. package/retry/neverPolicy.js +9 -10
  241. package/retry/neverPolicy.js.map +1 -1
  242. package/retry/policy.cjs.map +1 -0
  243. package/retry/policy.d.ts +3 -1
  244. package/retry/policy.js +0 -2
  245. package/retry/policy.js.map +1 -1
  246. package/schema/attributeSchema.cjs.map +1 -0
  247. package/schema/attributeSchema.d.ts +6 -2
  248. package/schema/attributeSchema.js +7 -7
  249. package/schema/attributeSchema.js.map +1 -1
  250. package/schema/contentFetcherSchemas.cjs.map +1 -0
  251. package/schema/contentFetcherSchemas.d.ts +6 -2
  252. package/schema/contentFetcherSchemas.js +24 -21
  253. package/schema/contentFetcherSchemas.js.map +1 -1
  254. package/schema/contentSchemas.cjs.map +1 -0
  255. package/schema/contentSchemas.d.ts +6 -2
  256. package/schema/contentSchemas.js +45 -45
  257. package/schema/contentSchemas.js.map +1 -1
  258. package/schema/contextSchemas.cjs.map +1 -0
  259. package/schema/contextSchemas.d.ts +6 -2
  260. package/schema/contextSchemas.js +6 -6
  261. package/schema/contextSchemas.js.map +1 -1
  262. package/schema/ecommerceSchemas.cjs.map +1 -0
  263. package/schema/ecommerceSchemas.d.ts +10 -6
  264. package/schema/ecommerceSchemas.js +176 -172
  265. package/schema/ecommerceSchemas.js.map +1 -1
  266. package/schema/evaluatorSchemas.cjs.map +1 -0
  267. package/schema/evaluatorSchemas.d.ts +6 -2
  268. package/schema/evaluatorSchemas.js +46 -30
  269. package/schema/evaluatorSchemas.js.map +1 -1
  270. package/schema/eventSchemas.cjs.map +1 -0
  271. package/schema/eventSchemas.d.ts +16 -12
  272. package/schema/eventSchemas.js +125 -102
  273. package/schema/eventSchemas.js.map +1 -1
  274. package/schema/index.cjs.map +1 -0
  275. package/schema/index.d.ts +14 -11
  276. package/schema/index.js +11 -14
  277. package/schema/index.js.map +1 -1
  278. package/schema/loggerSchema.cjs.map +1 -0
  279. package/schema/loggerSchema.d.ts +6 -2
  280. package/schema/loggerSchema.js +13 -13
  281. package/schema/loggerSchema.js.map +1 -1
  282. package/schema/operationSchemas.cjs.map +1 -0
  283. package/schema/operationSchemas.d.ts +14 -10
  284. package/schema/operationSchemas.js +85 -69
  285. package/schema/operationSchemas.js.map +1 -1
  286. package/schema/sdkFacadeSchemas.cjs.map +1 -0
  287. package/schema/sdkFacadeSchemas.d.ts +6 -2
  288. package/schema/sdkFacadeSchemas.js +65 -51
  289. package/schema/sdkFacadeSchemas.js.map +1 -1
  290. package/schema/sdkSchemas.cjs.map +1 -0
  291. package/schema/sdkSchemas.d.ts +8 -4
  292. package/schema/sdkSchemas.js +80 -78
  293. package/schema/sdkSchemas.js.map +1 -1
  294. package/schema/tokenSchema.cjs.map +1 -0
  295. package/schema/tokenSchema.d.ts +6 -2
  296. package/schema/tokenSchema.js +41 -38
  297. package/schema/tokenSchema.js.map +1 -1
  298. package/schema/userSchema.cjs.map +1 -0
  299. package/schema/userSchema.d.ts +6 -2
  300. package/schema/userSchema.js +183 -134
  301. package/schema/userSchema.js.map +1 -1
  302. package/sdk.cjs.map +1 -0
  303. package/sdk.d.ts +28 -14
  304. package/sdk.js +106 -108
  305. package/sdk.js.map +1 -1
  306. package/sdkEvents.cjs.map +1 -0
  307. package/sdkEvents.d.ts +10 -5
  308. package/sdkEvents.js +0 -2
  309. package/sdkEvents.js.map +1 -1
  310. package/sourceLocation.cjs.map +1 -0
  311. package/sourceLocation.d.ts +7 -5
  312. package/sourceLocation.js +56 -57
  313. package/sourceLocation.js.map +1 -1
  314. package/tab.cjs.map +1 -0
  315. package/tab.d.ts +9 -7
  316. package/tab.js +93 -90
  317. package/tab.js.map +1 -1
  318. package/token/cachedTokenStore.cjs.map +1 -0
  319. package/token/cachedTokenStore.d.ts +8 -3
  320. package/token/cachedTokenStore.js +22 -24
  321. package/token/cachedTokenStore.js.map +1 -1
  322. package/token/inMemoryTokenStore.cjs.map +1 -0
  323. package/token/inMemoryTokenStore.d.ts +7 -2
  324. package/token/inMemoryTokenStore.js +12 -13
  325. package/token/inMemoryTokenStore.js.map +1 -1
  326. package/token/index.cjs.map +1 -0
  327. package/token/index.d.ts +7 -4
  328. package/token/index.js +9 -11
  329. package/token/index.js.map +1 -1
  330. package/token/replicatedTokenStore.cjs.map +1 -0
  331. package/token/replicatedTokenStore.d.ts +7 -2
  332. package/token/replicatedTokenStore.js +14 -15
  333. package/token/replicatedTokenStore.js.map +1 -1
  334. package/token/token.cjs.map +1 -0
  335. package/token/token.d.ts +11 -8
  336. package/token/token.js +212 -195
  337. package/token/token.js.map +1 -1
  338. package/tracker.cjs.map +1 -0
  339. package/tracker.d.ts +20 -13
  340. package/tracker.js +307 -307
  341. package/tracker.js.map +1 -1
  342. package/trackingEvents.cjs.map +1 -0
  343. package/trackingEvents.d.ts +65 -62
  344. package/trackingEvents.js +57 -56
  345. package/trackingEvents.js.map +1 -1
  346. package/transformer.cjs.map +1 -0
  347. package/transformer.d.ts +4 -2
  348. package/transformer.js +5 -6
  349. package/transformer.js.map +1 -1
  350. package/utilityTypes.cjs.map +1 -0
  351. package/utilityTypes.d.ts +4 -2
  352. package/utilityTypes.js +0 -2
  353. package/utilityTypes.js.map +1 -1
  354. package/uuid.cjs.map +1 -0
  355. package/uuid.d.ts +3 -1
  356. package/uuid.js +27 -32
  357. package/uuid.js.map +1 -1
  358. package/validation/arrayType.cjs.map +1 -0
  359. package/validation/arrayType.d.ts +5 -3
  360. package/validation/arrayType.js +45 -41
  361. package/validation/arrayType.js.map +1 -1
  362. package/validation/booleanType.cjs.map +1 -0
  363. package/validation/booleanType.d.ts +5 -2
  364. package/validation/booleanType.js +19 -16
  365. package/validation/booleanType.js.map +1 -1
  366. package/validation/functionType.cjs.map +1 -0
  367. package/validation/functionType.d.ts +5 -2
  368. package/validation/functionType.js +19 -16
  369. package/validation/functionType.js.map +1 -1
  370. package/validation/index.cjs.map +1 -0
  371. package/validation/index.d.ts +12 -12
  372. package/validation/index.js +27 -29
  373. package/validation/index.js.map +1 -1
  374. package/validation/jsonType.cjs.map +1 -0
  375. package/validation/jsonType.d.ts +8 -6
  376. package/validation/jsonType.js +89 -82
  377. package/validation/jsonType.js.map +1 -1
  378. package/validation/mixedSchema.cjs.map +1 -0
  379. package/validation/mixedSchema.d.ts +5 -2
  380. package/validation/mixedSchema.js +5 -7
  381. package/validation/mixedSchema.js.map +1 -1
  382. package/validation/nullType.cjs.map +1 -0
  383. package/validation/nullType.d.ts +5 -2
  384. package/validation/nullType.js +19 -16
  385. package/validation/nullType.js.map +1 -1
  386. package/validation/numberType.cjs.map +1 -0
  387. package/validation/numberType.d.ts +5 -3
  388. package/validation/numberType.js +40 -32
  389. package/validation/numberType.js.map +1 -1
  390. package/validation/objectType.cjs.map +1 -0
  391. package/validation/objectType.d.ts +5 -3
  392. package/validation/objectType.js +84 -85
  393. package/validation/objectType.js.map +1 -1
  394. package/validation/schema.cjs.map +1 -0
  395. package/validation/schema.d.ts +5 -3
  396. package/validation/schema.js +8 -9
  397. package/validation/schema.js.map +1 -1
  398. package/validation/stringType.cjs.map +1 -0
  399. package/validation/stringType.d.ts +5 -3
  400. package/validation/stringType.js +74 -70
  401. package/validation/stringType.js.map +1 -1
  402. package/validation/unionType.cjs.map +1 -0
  403. package/validation/unionType.d.ts +5 -2
  404. package/validation/unionType.js +37 -35
  405. package/validation/unionType.js.map +1 -1
  406. package/validation/violation.cjs.map +1 -0
  407. package/validation/violation.d.ts +4 -2
  408. package/validation/violation.js +18 -18
  409. package/validation/violation.js.map +1 -1
package/evaluator.js CHANGED
@@ -1,193 +1,193 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Evaluator = exports.QueryError = exports.EvaluationError = exports.EvaluationErrorType = void 0;
4
- const constants_1 = require("./constants");
5
- const error_1 = require("./error");
6
- const sourceLocation_1 = require("./sourceLocation");
7
- const logging_1 = require("./logging");
8
- const help_1 = require("./help");
9
- var EvaluationErrorType;
10
- (function (EvaluationErrorType) {
11
- EvaluationErrorType["TIMEOUT"] = "https://croct.help/api/evaluation#timeout";
12
- EvaluationErrorType["UNEXPECTED_ERROR"] = "https://croct.help/api/evaluation#unexpected-error";
13
- EvaluationErrorType["INVALID_QUERY"] = "https://croct.help/api/evaluation#invalid-query";
14
- EvaluationErrorType["TOO_COMPLEX_QUERY"] = "https://croct.help/api/evaluation#too-complex-query";
15
- EvaluationErrorType["EVALUATION_FAILED"] = "https://croct.help/api/evaluation#evaluation-failed";
16
- EvaluationErrorType["UNALLOWED_RESULT"] = "https://croct.help/api/evaluation#unallowed-result";
17
- EvaluationErrorType["UNSERIALIZABLE_RESULT"] = "https://croct.help/api/evaluation#unserializable-result";
18
- })(EvaluationErrorType || (exports.EvaluationErrorType = EvaluationErrorType = {}));
1
+ import { BASE_ENDPOINT_URL, CLIENT_LIBRARY, MAX_QUERY_LENGTH } from "./constants";
2
+ import { formatMessage } from "./error";
3
+ import { getLength, getLocation } from "./sourceLocation";
4
+ import { NullLogger } from "./logging";
5
+ import { Help } from "./help";
6
+ var EvaluationErrorType = /* @__PURE__ */ ((EvaluationErrorType2) => {
7
+ EvaluationErrorType2["TIMEOUT"] = "https://croct.help/api/evaluation#timeout";
8
+ EvaluationErrorType2["UNEXPECTED_ERROR"] = "https://croct.help/api/evaluation#unexpected-error";
9
+ EvaluationErrorType2["INVALID_QUERY"] = "https://croct.help/api/evaluation#invalid-query";
10
+ EvaluationErrorType2["TOO_COMPLEX_QUERY"] = "https://croct.help/api/evaluation#too-complex-query";
11
+ EvaluationErrorType2["EVALUATION_FAILED"] = "https://croct.help/api/evaluation#evaluation-failed";
12
+ EvaluationErrorType2["UNALLOWED_RESULT"] = "https://croct.help/api/evaluation#unallowed-result";
13
+ EvaluationErrorType2["UNSERIALIZABLE_RESULT"] = "https://croct.help/api/evaluation#unserializable-result";
14
+ return EvaluationErrorType2;
15
+ })(EvaluationErrorType || {});
19
16
  class EvaluationError extends Error {
20
- constructor(response) {
21
- super(response.title);
22
- this.response = response;
23
- Object.setPrototypeOf(this, EvaluationError.prototype);
24
- }
17
+ constructor(response) {
18
+ super(response.title);
19
+ this.response = response;
20
+ Object.setPrototypeOf(this, EvaluationError.prototype);
21
+ }
25
22
  }
26
- exports.EvaluationError = EvaluationError;
27
23
  class QueryError extends EvaluationError {
28
- constructor(response) {
29
- super(response);
30
- Object.setPrototypeOf(this, QueryError.prototype);
31
- }
24
+ constructor(response) {
25
+ super(response);
26
+ Object.setPrototypeOf(this, QueryError.prototype);
27
+ }
32
28
  }
33
- exports.QueryError = QueryError;
34
- class Evaluator {
35
- constructor(configuration) {
36
- var _a;
37
- if ((configuration.appId === undefined) === (configuration.apiKey === undefined)) {
38
- throw new Error('Either the application ID or the API key must be provided.');
39
- }
40
- const { baseEndpointUrl } = configuration;
41
- const apiKey = typeof configuration.apiKey === 'object'
42
- ? configuration.apiKey.getIdentifier()
43
- : configuration.apiKey;
44
- // eslint-disable-next-line prefer-template -- Better readability
45
- this.endpoint = (baseEndpointUrl !== null && baseEndpointUrl !== void 0 ? baseEndpointUrl : constants_1.BASE_ENDPOINT_URL).replace(/\/+$/, '')
46
- + (apiKey === undefined ? '/client' : '/external')
47
- + '/web/evaluate';
48
- this.logger = (_a = configuration.logger) !== null && _a !== void 0 ? _a : new logging_1.NullLogger();
49
- this.configuration = {
50
- appId: configuration.appId,
51
- apiKey: apiKey,
52
- defaultTimeout: configuration.defaultTimeout,
53
- };
29
+ const _Evaluator = class _Evaluator {
30
+ constructor(configuration) {
31
+ if (configuration.appId === void 0 === (configuration.apiKey === void 0)) {
32
+ throw new Error("Either the application ID or the API key must be provided.");
33
+ }
34
+ const { baseEndpointUrl } = configuration;
35
+ const apiKey = typeof configuration.apiKey === "object" ? configuration.apiKey.getIdentifier() : configuration.apiKey;
36
+ this.endpoint = (baseEndpointUrl ?? BASE_ENDPOINT_URL).replace(/\/+$/, "") + (apiKey === void 0 ? "/client" : "/external") + "/web/evaluate";
37
+ this.logger = configuration.logger ?? new NullLogger();
38
+ this.configuration = {
39
+ appId: configuration.appId,
40
+ apiKey,
41
+ defaultTimeout: configuration.defaultTimeout
42
+ };
43
+ }
44
+ evaluate(query, options = {}) {
45
+ const length = getLength(query);
46
+ const reference = query.length > 20 ? `${query.slice(0, 20)}...` : query;
47
+ if (length > _Evaluator.MAX_QUERY_LENGTH) {
48
+ const response = {
49
+ title: "The query is too complex.",
50
+ status: 422,
51
+ // Unprocessable Entity
52
+ type: "https://croct.help/api/evaluation#too-complex-query" /* TOO_COMPLEX_QUERY */,
53
+ detail: `The query "${reference}" must be at most ${_Evaluator.MAX_QUERY_LENGTH} characters long, but it is ${length} characters long.`,
54
+ errors: [{
55
+ cause: "The query is longer than expected.",
56
+ location: getLocation(query, 0, Math.max(length - 1, 0))
57
+ }]
58
+ };
59
+ return Promise.reject(new QueryError(response));
60
+ }
61
+ const payload = {
62
+ query
63
+ };
64
+ if (options.context !== void 0) {
65
+ payload.context = options.context;
54
66
  }
55
- evaluate(query, options = {}) {
56
- const length = (0, sourceLocation_1.getLength)(query);
57
- const reference = query.length > 20 ? `${query.slice(0, 20)}...` : query;
58
- if (length > Evaluator.MAX_QUERY_LENGTH) {
67
+ return new Promise((resolve, reject) => {
68
+ const abortController = new AbortController();
69
+ const timeout = options.timeout ?? this.configuration.defaultTimeout;
70
+ let timer;
71
+ if (timeout !== void 0) {
72
+ timer = setTimeout(
73
+ () => {
59
74
  const response = {
60
- title: 'The query is too complex.',
61
- status: 422, // Unprocessable Entity
62
- type: EvaluationErrorType.TOO_COMPLEX_QUERY,
63
- detail: `The query "${reference}" must be at most ${Evaluator.MAX_QUERY_LENGTH} characters long, `
64
- + `but it is ${length} characters long.`,
65
- errors: [{
66
- cause: 'The query is longer than expected.',
67
- location: (0, sourceLocation_1.getLocation)(query, 0, Math.max(length - 1, 0)),
68
- }],
75
+ title: `Evaluation could not be completed in time for query "${reference}".`,
76
+ type: "https://croct.help/api/evaluation#timeout" /* TIMEOUT */,
77
+ detail: `The evaluation took more than ${timeout}ms to complete.`,
78
+ status: 408
79
+ // Request Timeout
69
80
  };
70
- return Promise.reject(new QueryError(response));
71
- }
72
- const payload = {
73
- query: query,
74
- };
75
- if (options.context !== undefined) {
76
- payload.context = options.context;
77
- }
78
- return new Promise((resolve, reject) => {
79
- var _a;
80
- const abortController = new AbortController();
81
- const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.configuration.defaultTimeout;
82
- let timer;
83
- if (timeout !== undefined) {
84
- timer = setTimeout(() => {
85
- const response = {
86
- title: `Evaluation could not be completed in time for query "${reference}".`,
87
- type: EvaluationErrorType.TIMEOUT,
88
- detail: `The evaluation took more than ${timeout}ms to complete.`,
89
- status: 408, // Request Timeout
90
- };
91
- abortController.abort();
92
- this.logHelp(response.status);
93
- reject(new EvaluationError(response));
94
- }, timeout);
81
+ abortController.abort();
82
+ this.logHelp(response.status);
83
+ reject(new EvaluationError(response));
84
+ },
85
+ timeout
86
+ );
87
+ }
88
+ this.fetch(payload, abortController.signal, options).finally(() => clearTimeout(timer)).then(
89
+ (response) => {
90
+ const region = response.headers.get("X-Croct-Region");
91
+ const timing = response.headers.get("X-Croct-Timing");
92
+ this.logger.debug(
93
+ `Evaluation of the query "${reference}" processed by region ${region} in ${timing}.`
94
+ );
95
+ return response.json().then((body) => {
96
+ if (response.ok) {
97
+ return resolve(body);
95
98
  }
96
- this.fetch(payload, abortController.signal, options)
97
- .finally(() => clearTimeout(timer))
98
- .then(response => {
99
- const region = response.headers.get('X-Croct-Region');
100
- const timing = response.headers.get('X-Croct-Timing');
101
- this.logger.debug(`Evaluation of the query "${reference}" processed by region ${region} in ${timing}.`);
102
- return response.json()
103
- .then(body => {
104
- if (response.ok) {
105
- return resolve(body);
106
- }
107
- this.logHelp(response.status);
108
- const problem = body;
109
- switch (problem.type) {
110
- case EvaluationErrorType.INVALID_QUERY:
111
- case EvaluationErrorType.EVALUATION_FAILED:
112
- case EvaluationErrorType.TOO_COMPLEX_QUERY:
113
- reject(new QueryError(problem));
114
- break;
115
- default:
116
- reject(new EvaluationError(problem));
117
- break;
118
- }
119
- })
120
- .catch(error => {
121
- if (!response.ok) {
122
- throw new Error(`Error ${response.status} - ${response.statusText}`);
123
- }
124
- throw error;
125
- });
126
- })
127
- .catch(error => {
128
- if (!abortController.signal.aborted) {
129
- reject(new EvaluationError({
130
- title: (0, error_1.formatMessage)(error),
131
- type: EvaluationErrorType.UNEXPECTED_ERROR,
132
- detail: 'Please try again or contact Croct support if the error persists.',
133
- status: 500, // Internal Server Error
134
- }));
135
- }
136
- });
137
- });
138
- }
139
- fetch(body, signal, options) {
140
- const { appId, apiKey } = this.configuration;
141
- const { clientId, clientIp, userToken, clientAgent } = options;
142
- const headers = {
143
- 'Content-Type': 'application/json',
144
- };
145
- headers['X-Client-Library'] = constants_1.CLIENT_LIBRARY;
146
- if (apiKey !== undefined) {
147
- headers['X-Api-Key'] = apiKey;
148
- }
149
- else if (appId !== undefined) {
150
- headers['X-App-Id'] = appId;
151
- }
152
- if (clientId !== undefined) {
153
- headers['X-Client-Id'] = clientId;
154
- }
155
- if (clientIp !== undefined) {
156
- headers['X-Client-Ip'] = clientIp;
157
- }
158
- if (userToken !== undefined) {
159
- headers['X-Token'] = userToken.toString();
99
+ this.logHelp(response.status);
100
+ const problem = body;
101
+ switch (problem.type) {
102
+ case "https://croct.help/api/evaluation#invalid-query" /* INVALID_QUERY */:
103
+ case "https://croct.help/api/evaluation#evaluation-failed" /* EVALUATION_FAILED */:
104
+ case "https://croct.help/api/evaluation#too-complex-query" /* TOO_COMPLEX_QUERY */:
105
+ reject(new QueryError(problem));
106
+ break;
107
+ default:
108
+ reject(new EvaluationError(problem));
109
+ break;
110
+ }
111
+ }).catch((error) => {
112
+ if (!response.ok) {
113
+ throw new Error(`Error ${response.status} - ${response.statusText}`);
114
+ }
115
+ throw error;
116
+ });
160
117
  }
161
- if (clientAgent !== undefined) {
162
- headers['X-Client-Agent'] = clientAgent;
118
+ ).catch(
119
+ (error) => {
120
+ if (!abortController.signal.aborted) {
121
+ reject(
122
+ new EvaluationError({
123
+ title: formatMessage(error),
124
+ type: "https://croct.help/api/evaluation#unexpected-error" /* UNEXPECTED_ERROR */,
125
+ detail: "Please try again or contact Croct support if the error persists.",
126
+ status: 500
127
+ // Internal Server Error
128
+ })
129
+ );
130
+ }
163
131
  }
164
- return fetch(this.endpoint, {
165
- // Set the request mode to 'cors' when running in the browser.
166
- // By default, the request mode is computed based on the referrer policy
167
- // and response-tainting rules applied to the script that ultimately
168
- // initiated the fetch, make this prone to errors due to unrelated
169
- // configurations on the page.
170
- // https://fetch.spec.whatwg.org/#origin-header
171
- mode: typeof window === 'undefined' ? undefined : 'cors',
172
- credentials: 'omit',
173
- ...options.extra,
174
- method: 'POST',
175
- headers: headers,
176
- signal: signal,
177
- body: JSON.stringify(body),
178
- });
132
+ );
133
+ });
134
+ }
135
+ fetch(body, signal, options) {
136
+ const { appId, apiKey } = this.configuration;
137
+ const { clientId, clientIp, userToken, clientAgent } = options;
138
+ const headers = {
139
+ "Content-Type": "application/json"
140
+ };
141
+ headers["X-Client-Library"] = CLIENT_LIBRARY;
142
+ if (apiKey !== void 0) {
143
+ headers["X-Api-Key"] = apiKey;
144
+ } else if (appId !== void 0) {
145
+ headers["X-App-Id"] = appId;
179
146
  }
180
- logHelp(statusCode) {
181
- const help = help_1.Help.forStatusCode(statusCode);
182
- if (help !== undefined) {
183
- this.logger.error(help);
184
- }
147
+ if (clientId !== void 0) {
148
+ headers["X-Client-Id"] = clientId;
185
149
  }
186
- toJSON() {
187
- // Prevent sensitive configuration from being serialized
188
- throw new Error('Unserializable value.');
150
+ if (clientIp !== void 0) {
151
+ headers["X-Client-Ip"] = clientIp;
189
152
  }
190
- }
191
- exports.Evaluator = Evaluator;
192
- Evaluator.MAX_QUERY_LENGTH = constants_1.MAX_QUERY_LENGTH;
153
+ if (userToken !== void 0) {
154
+ headers["X-Token"] = userToken.toString();
155
+ }
156
+ if (clientAgent !== void 0) {
157
+ headers["X-Client-Agent"] = clientAgent;
158
+ }
159
+ return fetch(this.endpoint, {
160
+ // Set the request mode to 'cors' when running in the browser.
161
+ // By default, the request mode is computed based on the referrer policy
162
+ // and response-tainting rules applied to the script that ultimately
163
+ // initiated the fetch, make this prone to errors due to unrelated
164
+ // configurations on the page.
165
+ // https://fetch.spec.whatwg.org/#origin-header
166
+ mode: typeof window === "undefined" ? void 0 : "cors",
167
+ credentials: "omit",
168
+ ...options.extra,
169
+ method: "POST",
170
+ headers,
171
+ signal,
172
+ body: JSON.stringify(body)
173
+ });
174
+ }
175
+ logHelp(statusCode) {
176
+ const help = Help.forStatusCode(statusCode);
177
+ if (help !== void 0) {
178
+ this.logger.error(help);
179
+ }
180
+ }
181
+ toJSON() {
182
+ throw new Error("Unserializable value.");
183
+ }
184
+ };
185
+ _Evaluator.MAX_QUERY_LENGTH = MAX_QUERY_LENGTH;
186
+ let Evaluator = _Evaluator;
187
+ export {
188
+ EvaluationError,
189
+ EvaluationErrorType,
190
+ Evaluator,
191
+ QueryError
192
+ };
193
193
  //# sourceMappingURL=evaluator.js.map
package/evaluator.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["src/evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["src/evaluator.ts"],"sourcesContent":["import {JsonObject, JsonValue} from '@croct/json';\nimport {Token} from './token';\nimport {BASE_ENDPOINT_URL, CLIENT_LIBRARY, MAX_QUERY_LENGTH} from './constants';\nimport {formatMessage} from './error';\nimport {getLength, getLocation, Location} from './sourceLocation';\nimport {Logger, NullLogger} from './logging';\nimport type {ApiKey} from './apiKey';\nimport {Help} from './help';\n\nexport type Campaign = {\n name?: string,\n source?: string,\n medium?: string,\n term?: string,\n content?: string,\n};\n\nexport type Page = {\n url: string,\n title?: string,\n referrer?: string,\n};\n\nexport type EvaluationContext = {\n timeZone?: string,\n campaign?: Campaign,\n page?: Page,\n attributes?: JsonObject,\n};\n\ntype AllowedFetchOptions = Exclude<keyof RequestInit, 'method' | 'body' | 'headers' | 'signal'>;\n\ntype ExtraFetchOptions<T extends keyof RequestInit = AllowedFetchOptions> = Pick<RequestInit, T>\n & {[key in Exclude<keyof RequestInit, T>]?: never}\n & Record<string, any>;\n\nexport type EvaluationOptions = {\n clientId?: string,\n clientIp?: string,\n clientAgent?: string,\n userToken?: Token|string,\n timeout?: number,\n context?: EvaluationContext,\n extra?: ExtraFetchOptions,\n};\n\nexport enum EvaluationErrorType {\n TIMEOUT = 'https://croct.help/api/evaluation#timeout',\n UNEXPECTED_ERROR = 'https://croct.help/api/evaluation#unexpected-error',\n INVALID_QUERY = 'https://croct.help/api/evaluation#invalid-query',\n TOO_COMPLEX_QUERY = 'https://croct.help/api/evaluation#too-complex-query',\n EVALUATION_FAILED = 'https://croct.help/api/evaluation#evaluation-failed',\n UNALLOWED_RESULT = 'https://croct.help/api/evaluation#unallowed-result',\n UNSERIALIZABLE_RESULT = 'https://croct.help/api/evaluation#unserializable-result',\n}\n\nexport type ErrorResponse = {\n type: EvaluationErrorType,\n title: string,\n status: number,\n detail?: string,\n};\n\nexport class EvaluationError<T extends ErrorResponse = ErrorResponse> extends Error {\n public readonly response: T;\n\n public constructor(response: T) {\n super(response.title);\n\n this.response = response;\n\n Object.setPrototypeOf(this, EvaluationError.prototype);\n }\n}\n\ntype QueryErrorDetail = {\n cause: string,\n location: Location,\n};\n\nexport type QueryErrorResponse = ErrorResponse & {\n errors: QueryErrorDetail[],\n};\n\nexport class QueryError extends EvaluationError<QueryErrorResponse> {\n public constructor(response: QueryErrorResponse) {\n super(response);\n\n Object.setPrototypeOf(this, QueryError.prototype);\n }\n}\n\nexport type Configuration = {\n appId?: string,\n apiKey?: string|ApiKey,\n baseEndpointUrl?: string,\n logger?: Logger,\n defaultTimeout?: number,\n};\n\ntype InternalConfiguration = {\n appId?: string,\n apiKey?: string,\n defaultTimeout?: number,\n};\n\nexport class Evaluator {\n public static readonly MAX_QUERY_LENGTH = MAX_QUERY_LENGTH;\n\n private readonly configuration: InternalConfiguration;\n\n private readonly endpoint: string;\n\n private readonly logger: Logger;\n\n public constructor(configuration: Configuration) {\n if ((configuration.appId === undefined) === (configuration.apiKey === undefined)) {\n throw new Error('Either the application ID or the API key must be provided.');\n }\n\n const {baseEndpointUrl} = configuration;\n const apiKey = typeof configuration.apiKey === 'object'\n ? configuration.apiKey.getIdentifier()\n : configuration.apiKey;\n\n // eslint-disable-next-line prefer-template -- Better readability\n this.endpoint = (baseEndpointUrl ?? BASE_ENDPOINT_URL).replace(/\\/+$/, '')\n + (apiKey === undefined ? '/client' : '/external')\n + '/web/evaluate';\n this.logger = configuration.logger ?? new NullLogger();\n this.configuration = {\n appId: configuration.appId,\n apiKey: apiKey,\n defaultTimeout: configuration.defaultTimeout,\n };\n }\n\n public evaluate(query: string, options: EvaluationOptions = {}): Promise<JsonValue> {\n const length = getLength(query);\n const reference = query.length > 20 ? `${query.slice(0, 20)}...` : query;\n\n if (length > Evaluator.MAX_QUERY_LENGTH) {\n const response: QueryErrorResponse = {\n title: 'The query is too complex.',\n status: 422, // Unprocessable Entity\n type: EvaluationErrorType.TOO_COMPLEX_QUERY,\n detail: `The query \"${reference}\" must be at most ${Evaluator.MAX_QUERY_LENGTH} characters long, `\n + `but it is ${length} characters long.`,\n errors: [{\n cause: 'The query is longer than expected.',\n location: getLocation(query, 0, Math.max(length - 1, 0)),\n }],\n };\n\n return Promise.reject(new QueryError(response));\n }\n\n const payload: JsonObject = {\n query: query,\n };\n\n if (options.context !== undefined) {\n payload.context = options.context;\n }\n\n return new Promise((resolve, reject) => {\n const abortController = new AbortController();\n const timeout = options.timeout ?? this.configuration.defaultTimeout;\n\n let timer: number | NodeJS.Timeout | undefined;\n\n if (timeout !== undefined) {\n timer = setTimeout(\n () => {\n const response: ErrorResponse = {\n title: `Evaluation could not be completed in time for query \"${reference}\".`,\n type: EvaluationErrorType.TIMEOUT,\n detail: `The evaluation took more than ${timeout}ms to complete.`,\n status: 408, // Request Timeout\n };\n\n abortController.abort();\n\n this.logHelp(response.status);\n\n reject(new EvaluationError(response));\n },\n timeout,\n );\n }\n\n this.fetch(payload, abortController.signal, options)\n .finally(() => clearTimeout(timer))\n .then(\n response => {\n const region = response.headers.get('X-Croct-Region');\n const timing = response.headers.get('X-Croct-Timing');\n\n this.logger.debug(\n `Evaluation of the query \"${reference}\" processed by region ${region} in ${timing}.`,\n );\n\n return response.json()\n .then(body => {\n if (response.ok) {\n return resolve(body);\n }\n\n this.logHelp(response.status);\n\n const problem: ErrorResponse = body;\n\n switch (problem.type) {\n case EvaluationErrorType.INVALID_QUERY:\n case EvaluationErrorType.EVALUATION_FAILED:\n case EvaluationErrorType.TOO_COMPLEX_QUERY:\n reject(new QueryError(problem as QueryErrorResponse));\n\n break;\n\n default:\n reject(new EvaluationError(problem));\n\n break;\n }\n })\n .catch(error => {\n if (!response.ok) {\n throw new Error(`Error ${response.status} - ${response.statusText}`);\n }\n\n throw error;\n });\n },\n )\n .catch(\n error => {\n if (!abortController.signal.aborted) {\n reject(\n new EvaluationError({\n title: formatMessage(error),\n type: EvaluationErrorType.UNEXPECTED_ERROR,\n detail: 'Please try again or contact Croct support if the error persists.',\n status: 500, // Internal Server Error\n }),\n );\n }\n },\n );\n });\n }\n\n private fetch(body: JsonObject, signal: AbortSignal, options: EvaluationOptions): Promise<Response> {\n const {appId, apiKey} = this.configuration;\n const {clientId, clientIp, userToken, clientAgent} = options;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n headers['X-Client-Library'] = CLIENT_LIBRARY;\n\n if (apiKey !== undefined) {\n headers['X-Api-Key'] = apiKey;\n } else if (appId !== undefined) {\n headers['X-App-Id'] = appId;\n }\n\n if (clientId !== undefined) {\n headers['X-Client-Id'] = clientId;\n }\n\n if (clientIp !== undefined) {\n headers['X-Client-Ip'] = clientIp;\n }\n\n if (userToken !== undefined) {\n headers['X-Token'] = userToken.toString();\n }\n\n if (clientAgent !== undefined) {\n headers['X-Client-Agent'] = clientAgent;\n }\n\n return fetch(this.endpoint, {\n // Set the request mode to 'cors' when running in the browser.\n // By default, the request mode is computed based on the referrer policy\n // and response-tainting rules applied to the script that ultimately\n // initiated the fetch, make this prone to errors due to unrelated\n // configurations on the page.\n // https://fetch.spec.whatwg.org/#origin-header\n mode: typeof window === 'undefined' ? undefined : 'cors',\n credentials: 'omit',\n ...options.extra,\n method: 'POST',\n headers: headers,\n signal: signal,\n body: JSON.stringify(body),\n });\n }\n\n private logHelp(statusCode: number): void {\n const help = Help.forStatusCode(statusCode);\n\n if (help !== undefined) {\n this.logger.error(help);\n }\n }\n\n public toJSON(): never {\n // Prevent sensitive configuration from being serialized\n throw new Error('Unserializable value.');\n }\n}\n"],"mappings":"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","names":["EvaluationErrorType"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventManager.ts"],"sourcesContent":["export interface EventListener<T> {\n (event: T): void;\n}\n\nexport type EventMap = Record<string, Record<string, any>>;\n\nexport interface EventDispatcher<TEvents extends EventMap> {\n dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void;\n}\n\nexport interface EventSubscriber<TEvents extends EventMap> {\n addListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;\n\n removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;\n}\n\nexport interface EventManager<DEvents extends EventMap, SEvents extends EventMap = DEvents>\n extends EventDispatcher<DEvents>, EventSubscriber<SEvents> {\n}\n\nexport class SynchronousEventManager<TEvents extends EventMap> implements EventManager<TEvents> {\n private readonly listeners: {[type in keyof TEvents]?: Array<EventListener<TEvents[type]>>} = {};\n\n public addListener<T extends keyof TEvents>(type: T, listener: EventListener<TEvents[T]>): void {\n const listeners: Array<EventListener<TEvents[T]>> = this.listeners[type] ?? [];\n\n listeners.push(listener);\n\n this.listeners[type] = listeners;\n }\n\n public removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void {\n const listeners = this.listeners[eventName];\n\n if (listeners === undefined) {\n return;\n }\n\n const index = listeners.indexOf(listener);\n\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n public dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void {\n const listeners = this.listeners[eventName];\n\n if (listeners !== undefined) {\n listeners.forEach(listener => listener(event));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBO,MAAM,wBAAmF;AAAA,EAAzF;AACH,SAAiB,YAA6E,CAAC;AAAA;AAAA,EAExF,YAAqC,MAAS,UAA2C;AAC5F,UAAM,YAA8C,KAAK,UAAU,IAAI,KAAK,CAAC;AAE7E,cAAU,KAAK,QAAQ;AAEvB,SAAK,UAAU,IAAI,IAAI;AAAA,EAC3B;AAAA,EAEO,eAAwC,WAAc,UAA2C;AACpG,UAAM,YAAY,KAAK,UAAU,SAAS;AAE1C,QAAI,cAAc,QAAW;AACzB;AAAA,IACJ;AAEA,UAAM,QAAQ,UAAU,QAAQ,QAAQ;AAExC,QAAI,SAAS,GAAG;AACZ,gBAAU,OAAO,OAAO,CAAC;AAAA,IAC7B;AAAA,EACJ;AAAA,EAEO,SAAkC,WAAc,OAAyB;AAC5E,UAAM,YAAY,KAAK,UAAU,SAAS;AAE1C,QAAI,cAAc,QAAW;AACzB,gBAAU,QAAQ,cAAY,SAAS,KAAK,CAAC;AAAA,IACjD;AAAA,EACJ;AACJ;","names":[]}
package/eventManager.d.ts CHANGED
@@ -1,19 +1,21 @@
1
- export interface EventListener<T> {
1
+ interface EventListener<T> {
2
2
  (event: T): void;
3
3
  }
4
- export type EventMap = Record<string, Record<string, any>>;
5
- export interface EventDispatcher<TEvents extends EventMap> {
4
+ type EventMap = Record<string, Record<string, any>>;
5
+ interface EventDispatcher<TEvents extends EventMap> {
6
6
  dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void;
7
7
  }
8
- export interface EventSubscriber<TEvents extends EventMap> {
8
+ interface EventSubscriber<TEvents extends EventMap> {
9
9
  addListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;
10
10
  removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;
11
11
  }
12
- export interface EventManager<DEvents extends EventMap, SEvents extends EventMap = DEvents> extends EventDispatcher<DEvents>, EventSubscriber<SEvents> {
12
+ interface EventManager<DEvents extends EventMap, SEvents extends EventMap = DEvents> extends EventDispatcher<DEvents>, EventSubscriber<SEvents> {
13
13
  }
14
- export declare class SynchronousEventManager<TEvents extends EventMap> implements EventManager<TEvents> {
14
+ declare class SynchronousEventManager<TEvents extends EventMap> implements EventManager<TEvents> {
15
15
  private readonly listeners;
16
16
  addListener<T extends keyof TEvents>(type: T, listener: EventListener<TEvents[T]>): void;
17
17
  removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;
18
18
  dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void;
19
19
  }
20
+
21
+ export { type EventDispatcher, type EventListener, type EventManager, type EventMap, type EventSubscriber, SynchronousEventManager };
package/eventManager.js CHANGED
@@ -1,32 +1,30 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SynchronousEventManager = void 0;
4
1
  class SynchronousEventManager {
5
- constructor() {
6
- this.listeners = {};
2
+ constructor() {
3
+ this.listeners = {};
4
+ }
5
+ addListener(type, listener) {
6
+ const listeners = this.listeners[type] ?? [];
7
+ listeners.push(listener);
8
+ this.listeners[type] = listeners;
9
+ }
10
+ removeListener(eventName, listener) {
11
+ const listeners = this.listeners[eventName];
12
+ if (listeners === void 0) {
13
+ return;
7
14
  }
8
- addListener(type, listener) {
9
- var _a;
10
- const listeners = (_a = this.listeners[type]) !== null && _a !== void 0 ? _a : [];
11
- listeners.push(listener);
12
- this.listeners[type] = listeners;
15
+ const index = listeners.indexOf(listener);
16
+ if (index >= 0) {
17
+ listeners.splice(index, 1);
13
18
  }
14
- removeListener(eventName, listener) {
15
- const listeners = this.listeners[eventName];
16
- if (listeners === undefined) {
17
- return;
18
- }
19
- const index = listeners.indexOf(listener);
20
- if (index >= 0) {
21
- listeners.splice(index, 1);
22
- }
23
- }
24
- dispatch(eventName, event) {
25
- const listeners = this.listeners[eventName];
26
- if (listeners !== undefined) {
27
- listeners.forEach(listener => listener(event));
28
- }
19
+ }
20
+ dispatch(eventName, event) {
21
+ const listeners = this.listeners[eventName];
22
+ if (listeners !== void 0) {
23
+ listeners.forEach((listener) => listener(event));
29
24
  }
25
+ }
30
26
  }
31
- exports.SynchronousEventManager = SynchronousEventManager;
27
+ export {
28
+ SynchronousEventManager
29
+ };
32
30
  //# sourceMappingURL=eventManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventManager.js","sourceRoot":"","sources":["src/eventManager.ts"],"names":[],"mappings":";;;AAoBA,MAAa,uBAAuB;IAApC;QACqB,cAAS,GAAoE,EAAE,CAAC;IA+BrG,CAAC;IA7BU,WAAW,CAA0B,IAAO,EAAE,QAAmC;;QACpF,MAAM,SAAS,GAAqC,MAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC;QAE/E,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,CAAC;IAEM,cAAc,CAA0B,SAAY,EAAE,QAAmC;QAC5F,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAEM,QAAQ,CAA0B,SAAY,EAAE,KAAiB;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;CACJ;AAhCD,0DAgCC"}
1
+ {"version":3,"sources":["src/eventManager.ts"],"sourcesContent":["export interface EventListener<T> {\n (event: T): void;\n}\n\nexport type EventMap = Record<string, Record<string, any>>;\n\nexport interface EventDispatcher<TEvents extends EventMap> {\n dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void;\n}\n\nexport interface EventSubscriber<TEvents extends EventMap> {\n addListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;\n\n removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void;\n}\n\nexport interface EventManager<DEvents extends EventMap, SEvents extends EventMap = DEvents>\n extends EventDispatcher<DEvents>, EventSubscriber<SEvents> {\n}\n\nexport class SynchronousEventManager<TEvents extends EventMap> implements EventManager<TEvents> {\n private readonly listeners: {[type in keyof TEvents]?: Array<EventListener<TEvents[type]>>} = {};\n\n public addListener<T extends keyof TEvents>(type: T, listener: EventListener<TEvents[T]>): void {\n const listeners: Array<EventListener<TEvents[T]>> = this.listeners[type] ?? [];\n\n listeners.push(listener);\n\n this.listeners[type] = listeners;\n }\n\n public removeListener<T extends keyof TEvents>(eventName: T, listener: EventListener<TEvents[T]>): void {\n const listeners = this.listeners[eventName];\n\n if (listeners === undefined) {\n return;\n }\n\n const index = listeners.indexOf(listener);\n\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n public dispatch<T extends keyof TEvents>(eventName: T, event: TEvents[T]): void {\n const listeners = this.listeners[eventName];\n\n if (listeners !== undefined) {\n listeners.forEach(listener => listener(event));\n }\n }\n}\n"],"mappings":"AAoBO,MAAM,wBAAmF;AAAA,EAAzF;AACH,SAAiB,YAA6E,CAAC;AAAA;AAAA,EAExF,YAAqC,MAAS,UAA2C;AAC5F,UAAM,YAA8C,KAAK,UAAU,IAAI,KAAK,CAAC;AAE7E,cAAU,KAAK,QAAQ;AAEvB,SAAK,UAAU,IAAI,IAAI;AAAA,EAC3B;AAAA,EAEO,eAAwC,WAAc,UAA2C;AACpG,UAAM,YAAY,KAAK,UAAU,SAAS;AAE1C,QAAI,cAAc,QAAW;AACzB;AAAA,IACJ;AAEA,UAAM,QAAQ,UAAU,QAAQ,QAAQ;AAExC,QAAI,SAAS,GAAG;AACZ,gBAAU,OAAO,OAAO,CAAC;AAAA,IAC7B;AAAA,EACJ;AAAA,EAEO,SAAkC,WAAc,OAAyB;AAC5E,UAAM,YAAY,KAAK,UAAU,SAAS;AAE1C,QAAI,cAAc,QAAW;AACzB,gBAAU,QAAQ,cAAY,SAAS,KAAK,CAAC;AAAA,IACjD;AAAA,EACJ;AACJ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventSubjectProcessor.ts"],"sourcesContent":["import {QueuedEventInfo, TrackingEventProcessor} from './tracker';\nimport {Token} from './token';\nimport {Logger} from './logging';\nimport {TrackingEvent} from './trackingEvents';\n\nexport class EventSubjectProcessor implements TrackingEventProcessor {\n private currentToken?: Token|null;\n\n private logger: Logger;\n\n public constructor(logger: Logger) {\n this.logger = logger;\n }\n\n public process(event: QueuedEventInfo): QueuedEventInfo[] {\n const {currentToken} = this;\n\n this.currentToken = event.userToken ?? null;\n\n if (currentToken === undefined) {\n // This is the first event, no subject to compare.\n // If the user is already identified at this point,\n // assume that the event was previously tracked.\n return [event];\n }\n\n if (EventSubjectProcessor.isIdentificationEvent(event.event)) {\n return [event];\n }\n\n const currentSubject = currentToken?.getSubject() ?? null;\n const newSubject = event.userToken?.getSubject() ?? null;\n\n if (newSubject === currentSubject) {\n // No change in subject\n return [event];\n }\n\n const events: QueuedEventInfo[] = [];\n\n if (currentToken !== null && currentSubject !== null) {\n this.logger.info('External user sign out automatically tracked');\n\n events.push({\n timestamp: event.timestamp,\n context: event.context,\n userToken: currentToken,\n event: {\n type: 'userSignedOut',\n userId: currentSubject,\n },\n });\n }\n\n if (newSubject !== null) {\n this.logger.info('External user sign in automatically tracked');\n\n events.push({\n timestamp: event.timestamp,\n context: event.context,\n userToken: event.userToken,\n event: {\n type: 'userSignedIn',\n userId: newSubject,\n },\n });\n }\n\n events.push(event);\n\n return events;\n }\n\n private static isIdentificationEvent(event: TrackingEvent): boolean {\n switch (event.type) {\n case 'userSignedIn':\n case 'userSignedUp':\n case 'userSignedOut':\n return true;\n\n default:\n return false;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,sBAAwD;AAAA,EAK1D,YAAY,QAAgB;AAC/B,SAAK,SAAS;AAAA,EAClB;AAAA,EAEO,QAAQ,OAA2C;AACtD,UAAM,EAAC,aAAY,IAAI;AAEvB,SAAK,eAAe,MAAM,aAAa;AAEvC,QAAI,iBAAiB,QAAW;AAI5B,aAAO,CAAC,KAAK;AAAA,IACjB;AAEA,QAAI,sBAAsB,sBAAsB,MAAM,KAAK,GAAG;AAC1D,aAAO,CAAC,KAAK;AAAA,IACjB;AAEA,UAAM,iBAAiB,cAAc,WAAW,KAAK;AACrD,UAAM,aAAa,MAAM,WAAW,WAAW,KAAK;AAEpD,QAAI,eAAe,gBAAgB;AAE/B,aAAO,CAAC,KAAK;AAAA,IACjB;AAEA,UAAM,SAA4B,CAAC;AAEnC,QAAI,iBAAiB,QAAQ,mBAAmB,MAAM;AAClD,WAAK,OAAO,KAAK,8CAA8C;AAE/D,aAAO,KAAK;AAAA,QACR,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,WAAW;AAAA,QACX,OAAO;AAAA,UACH,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,QAAI,eAAe,MAAM;AACrB,WAAK,OAAO,KAAK,6CAA6C;AAE9D,aAAO,KAAK;AAAA,QACR,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,OAAO;AAAA,UACH,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,WAAO,KAAK,KAAK;AAEjB,WAAO;AAAA,EACX;AAAA,EAEA,OAAe,sBAAsB,OAA+B;AAChE,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MAEX;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AACJ;","names":[]}
@@ -1,9 +1,22 @@
1
- import { QueuedEventInfo, TrackingEventProcessor } from './tracker';
2
- import { Logger } from './logging';
3
- export declare class EventSubjectProcessor implements TrackingEventProcessor {
1
+ import { TrackingEventProcessor, QueuedEventInfo } from './tracker.js';
2
+ import { Logger } from './logging/logger.js';
3
+ import './tab.js';
4
+ import './eventManager.js';
5
+ import './channel/channel.js';
6
+ import './retry/policy.js';
7
+ import './token/token.js';
8
+ import '@croct/json';
9
+ import './apiKey.js';
10
+ import './trackingEvents.js';
11
+ import './patch.js';
12
+ import './utilityTypes.js';
13
+
14
+ declare class EventSubjectProcessor implements TrackingEventProcessor {
4
15
  private currentToken?;
5
16
  private logger;
6
17
  constructor(logger: Logger);
7
18
  process(event: QueuedEventInfo): QueuedEventInfo[];
8
19
  private static isIdentificationEvent;
9
20
  }
21
+
22
+ export { EventSubjectProcessor };