@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/token/token.js CHANGED
@@ -1,198 +1,215 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FixedTokenProvider = exports.Token = void 0;
4
- const schema_1 = require("../schema");
5
- const error_1 = require("../error");
6
- const base64Url_1 = require("../base64Url");
7
- class Token {
8
- constructor(headers, payload, signature = '') {
9
- this.headers = headers;
10
- this.payload = payload;
11
- this.signature = signature;
12
- }
13
- static issue(appId, subject = null, timestamp = Math.floor(Date.now() / 1000)) {
14
- if (timestamp < 0) {
15
- throw new Error('The timestamp must be non-negative.');
16
- }
17
- if (subject === '') {
18
- throw new Error('The subject must be non-empty.');
19
- }
20
- return new Token({
21
- typ: 'JWT',
22
- alg: 'none',
23
- appId: appId,
24
- }, {
25
- iss: 'croct.io',
26
- aud: 'croct.io',
27
- iat: timestamp,
28
- ...(subject !== null ? { sub: subject } : null),
29
- });
30
- }
31
- static parse(token) {
32
- if (token === '') {
33
- throw new Error('The token cannot be empty.');
34
- }
35
- const parts = token.split('.', 3);
36
- // This token is invalid
37
- if (parts.length < 2) {
38
- throw new Error('The token is malformed.');
39
- }
40
- let headers;
41
- let payload;
42
- try {
43
- headers = JSON.parse((0, base64Url_1.base64UrlDecode)(parts[0], true));
44
- payload = JSON.parse((0, base64Url_1.base64UrlDecode)(parts[1], true));
45
- }
46
- catch (error) {
47
- throw new Error('The token is corrupted.');
48
- }
49
- return Token.of(headers, payload, parts[2]);
50
- }
51
- static of(headers, payload, signature = '') {
52
- try {
53
- schema_1.tokenSchema.validate({
54
- headers: headers,
55
- payload: payload,
56
- signature: signature,
57
- });
58
- }
59
- catch (violation) {
60
- throw new Error(`The token is invalid: ${(0, error_1.formatCause)(violation)}`);
61
- }
62
- return new Token(headers, payload, signature);
63
- }
64
- async signedWith(apiKey) {
65
- const keyId = await apiKey.getIdentifierHash();
66
- const headers = {
67
- ...this.headers,
68
- kid: keyId,
69
- alg: apiKey.getSigningAlgorithm(),
70
- };
71
- const encodedHeader = (0, base64Url_1.base64UrlEncode)(JSON.stringify(headers), true);
72
- const encodedPayload = (0, base64Url_1.base64UrlEncode)(JSON.stringify(this.payload), true);
73
- const signature = await apiKey.sign(`${encodedHeader}.${encodedPayload}`);
74
- return new Token(headers, this.payload, (0, base64Url_1.base64UrlEncode)(signature, false));
75
- }
76
- isSigned() {
77
- return this.headers.alg !== 'none' && this.signature !== '';
78
- }
79
- isSubject(subject) {
80
- return this.getSubject() === subject;
81
- }
82
- isAnonymous() {
83
- return this.payload.sub === undefined;
84
- }
85
- isValidNow(now = Math.floor(Date.now() / 1000)) {
86
- const { exp, iat } = this.payload;
87
- return (exp === undefined || exp >= now) && iat <= now;
88
- }
89
- isNewerThan(token) {
90
- return this.payload.iat > token.payload.iat;
91
- }
92
- async matchesKeyId(apiKey) {
93
- return this.headers.kid === await apiKey.getIdentifierHash();
94
- }
95
- getHeaders() {
96
- return { ...this.headers };
97
- }
98
- getPayload() {
99
- return { ...this.payload };
100
- }
101
- getSignature() {
102
- return this.signature;
103
- }
104
- getApplicationId() {
105
- var _a;
106
- return (_a = this.headers.appId) !== null && _a !== void 0 ? _a : null;
107
- }
108
- getAlgorithm() {
109
- return this.headers.alg;
110
- }
111
- getType() {
112
- return this.headers.typ;
113
- }
114
- getKeyId() {
115
- var _a;
116
- return (_a = this.headers.kid) !== null && _a !== void 0 ? _a : null;
117
- }
118
- getSubject() {
119
- var _a;
120
- return (_a = this.payload.sub) !== null && _a !== void 0 ? _a : null;
121
- }
122
- getIssueTime() {
123
- return this.payload.iat;
124
- }
125
- getExpirationTime() {
126
- var _a;
127
- return (_a = this.payload.exp) !== null && _a !== void 0 ? _a : null;
128
- }
129
- getTokenId() {
130
- var _a;
131
- return (_a = this.payload.jti) !== null && _a !== void 0 ? _a : null;
132
- }
133
- getAudience() {
134
- return this.payload.aud;
135
- }
136
- getIssuer() {
137
- return this.payload.iss;
138
- }
139
- withTokenId(tokenId) {
140
- if (tokenId === '' || !Token.UUID_PATTERN.test(tokenId)) {
141
- throw new Error('The token ID must be a valid UUID.');
142
- }
143
- return new Token(this.headers, {
144
- ...this.payload,
145
- jti: tokenId,
146
- }, this.signature);
147
- }
148
- withDuration(duration, now = Math.floor(Date.now() / 1000)) {
149
- return new Token(this.headers, {
150
- ...this.payload,
151
- iat: now,
152
- exp: now + duration,
153
- }, this.signature);
154
- }
155
- withAddedHeaders(headers) {
156
- return this.withHeaders({
157
- ...this.headers,
158
- ...Object.fromEntries(Object.entries(headers)
159
- .filter(([, value]) => value !== undefined)),
160
- });
161
- }
162
- withAddedClaims(claims) {
163
- return this.withPayload({
164
- ...this.payload,
165
- ...Object.fromEntries(Object.entries(claims)
166
- .filter(([, value]) => value !== undefined)),
167
- });
168
- }
169
- withHeaders(headers) {
170
- return new Token(headers, this.payload, this.signature);
171
- }
172
- withPayload(payload) {
173
- return new Token(this.headers, payload, this.signature);
174
- }
175
- withSignature(signature) {
176
- return new Token(this.headers, this.payload, signature);
177
- }
178
- toJSON() {
179
- return this.toString();
180
- }
181
- toString() {
182
- const headers = (0, base64Url_1.base64UrlEncode)(JSON.stringify(this.headers), true);
183
- const payload = (0, base64Url_1.base64UrlEncode)(JSON.stringify(this.payload), true);
184
- return `${headers}.${payload}.${this.signature}`;
185
- }
186
- }
187
- exports.Token = Token;
188
- Token.UUID_PATTERN = /^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$/;
1
+ import { tokenSchema } from "../schema";
2
+ import { formatCause } from "../error";
3
+ import { base64UrlDecode, base64UrlEncode } from "../base64Url";
4
+ const _Token = class _Token {
5
+ constructor(headers, payload, signature = "") {
6
+ this.headers = headers;
7
+ this.payload = payload;
8
+ this.signature = signature;
9
+ }
10
+ static issue(appId, subject = null, timestamp = Math.floor(Date.now() / 1e3)) {
11
+ if (timestamp < 0) {
12
+ throw new Error("The timestamp must be non-negative.");
13
+ }
14
+ if (subject === "") {
15
+ throw new Error("The subject must be non-empty.");
16
+ }
17
+ return new _Token(
18
+ {
19
+ typ: "JWT",
20
+ alg: "none",
21
+ appId
22
+ },
23
+ {
24
+ iss: "croct.io",
25
+ aud: "croct.io",
26
+ iat: timestamp,
27
+ ...subject !== null ? { sub: subject } : null
28
+ }
29
+ );
30
+ }
31
+ static parse(token) {
32
+ if (token === "") {
33
+ throw new Error("The token cannot be empty.");
34
+ }
35
+ const parts = token.split(".", 3);
36
+ if (parts.length < 2) {
37
+ throw new Error("The token is malformed.");
38
+ }
39
+ let headers;
40
+ let payload;
41
+ try {
42
+ headers = JSON.parse(base64UrlDecode(parts[0], true));
43
+ payload = JSON.parse(base64UrlDecode(parts[1], true));
44
+ } catch (error) {
45
+ throw new Error("The token is corrupted.");
46
+ }
47
+ return _Token.of(headers, payload, parts[2]);
48
+ }
49
+ static of(headers, payload, signature = "") {
50
+ try {
51
+ tokenSchema.validate({
52
+ headers,
53
+ payload,
54
+ signature
55
+ });
56
+ } catch (violation) {
57
+ throw new Error(`The token is invalid: ${formatCause(violation)}`);
58
+ }
59
+ return new _Token(headers, payload, signature);
60
+ }
61
+ async signedWith(apiKey) {
62
+ const keyId = await apiKey.getIdentifierHash();
63
+ const headers = {
64
+ ...this.headers,
65
+ kid: keyId,
66
+ alg: apiKey.getSigningAlgorithm()
67
+ };
68
+ const encodedHeader = base64UrlEncode(JSON.stringify(headers), true);
69
+ const encodedPayload = base64UrlEncode(JSON.stringify(this.payload), true);
70
+ const signature = await apiKey.sign(`${encodedHeader}.${encodedPayload}`);
71
+ return new _Token(headers, this.payload, base64UrlEncode(signature, false));
72
+ }
73
+ isSigned() {
74
+ return this.headers.alg !== "none" && this.signature !== "";
75
+ }
76
+ isSubject(subject) {
77
+ return this.getSubject() === subject;
78
+ }
79
+ isAnonymous() {
80
+ return this.payload.sub === void 0;
81
+ }
82
+ isValidNow(now = Math.floor(Date.now() / 1e3)) {
83
+ const { exp, iat } = this.payload;
84
+ return (exp === void 0 || exp >= now) && iat <= now;
85
+ }
86
+ isNewerThan(token) {
87
+ return this.payload.iat > token.payload.iat;
88
+ }
89
+ async matchesKeyId(apiKey) {
90
+ return this.headers.kid === await apiKey.getIdentifierHash();
91
+ }
92
+ getHeaders() {
93
+ return { ...this.headers };
94
+ }
95
+ getPayload() {
96
+ return { ...this.payload };
97
+ }
98
+ getSignature() {
99
+ return this.signature;
100
+ }
101
+ getApplicationId() {
102
+ return this.headers.appId ?? null;
103
+ }
104
+ getAlgorithm() {
105
+ return this.headers.alg;
106
+ }
107
+ getType() {
108
+ return this.headers.typ;
109
+ }
110
+ getKeyId() {
111
+ return this.headers.kid ?? null;
112
+ }
113
+ getSubject() {
114
+ return this.payload.sub ?? null;
115
+ }
116
+ getIssueTime() {
117
+ return this.payload.iat;
118
+ }
119
+ getExpirationTime() {
120
+ return this.payload.exp ?? null;
121
+ }
122
+ getTokenId() {
123
+ return this.payload.jti ?? null;
124
+ }
125
+ getAudience() {
126
+ return this.payload.aud;
127
+ }
128
+ getIssuer() {
129
+ return this.payload.iss;
130
+ }
131
+ withTokenId(tokenId) {
132
+ if (tokenId === "" || !_Token.UUID_PATTERN.test(tokenId)) {
133
+ throw new Error("The token ID must be a valid UUID.");
134
+ }
135
+ return new _Token(
136
+ this.headers,
137
+ {
138
+ ...this.payload,
139
+ jti: tokenId
140
+ },
141
+ this.signature
142
+ );
143
+ }
144
+ withDuration(duration, now = Math.floor(Date.now() / 1e3)) {
145
+ return new _Token(
146
+ this.headers,
147
+ {
148
+ ...this.payload,
149
+ iat: now,
150
+ exp: now + duration
151
+ },
152
+ this.signature
153
+ );
154
+ }
155
+ withAddedHeaders(headers) {
156
+ return this.withHeaders({
157
+ ...this.headers,
158
+ ...Object.fromEntries(
159
+ Object.entries(headers).filter(([, value]) => value !== void 0)
160
+ )
161
+ });
162
+ }
163
+ withAddedClaims(claims) {
164
+ return this.withPayload({
165
+ ...this.payload,
166
+ ...Object.fromEntries(
167
+ Object.entries(claims).filter(([, value]) => value !== void 0)
168
+ )
169
+ });
170
+ }
171
+ withHeaders(headers) {
172
+ return new _Token(
173
+ headers,
174
+ this.payload,
175
+ this.signature
176
+ );
177
+ }
178
+ withPayload(payload) {
179
+ return new _Token(
180
+ this.headers,
181
+ payload,
182
+ this.signature
183
+ );
184
+ }
185
+ withSignature(signature) {
186
+ return new _Token(
187
+ this.headers,
188
+ this.payload,
189
+ signature
190
+ );
191
+ }
192
+ toJSON() {
193
+ return this.toString();
194
+ }
195
+ toString() {
196
+ const headers = base64UrlEncode(JSON.stringify(this.headers), true);
197
+ const payload = base64UrlEncode(JSON.stringify(this.payload), true);
198
+ return `${headers}.${payload}.${this.signature}`;
199
+ }
200
+ };
201
+ _Token.UUID_PATTERN = /^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$/;
202
+ let Token = _Token;
189
203
  class FixedTokenProvider {
190
- constructor(token) {
191
- this.token = token;
192
- }
193
- getToken() {
194
- return this.token;
195
- }
204
+ constructor(token) {
205
+ this.token = token;
206
+ }
207
+ getToken() {
208
+ return this.token;
209
+ }
196
210
  }
197
- exports.FixedTokenProvider = FixedTokenProvider;
211
+ export {
212
+ FixedTokenProvider,
213
+ Token
214
+ };
198
215
  //# sourceMappingURL=token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/token/token.ts"],"sourcesContent":["import {JsonObject} from '@croct/json';\nimport {tokenSchema} from '../schema';\nimport {formatCause} from '../error';\nimport {ApiKey} from '../apiKey';\nimport {base64UrlDecode, base64UrlEncode} from '../base64Url';\n\nexport type TokenHeaders = {\n typ: string,\n alg: string,\n kid?: string,\n appId?: string,\n};\n\nexport type TokenClaims = {\n iss: string,\n aud: string|string[],\n iat: number,\n exp?: number,\n sub?: string,\n jti?: string,\n};\n\nexport type TokenPayload = JsonObject & TokenClaims;\n\nexport class Token {\n private static readonly UUID_PATTERN = /^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$/;\n\n private readonly headers: TokenHeaders;\n\n private readonly payload: TokenPayload;\n\n private readonly signature: string;\n\n private constructor(headers: TokenHeaders, payload: TokenPayload, signature = '') {\n this.headers = headers;\n this.payload = payload;\n this.signature = signature;\n }\n\n public static issue(\n appId: string,\n subject: string|null = null,\n timestamp: number = Math.floor(Date.now() / 1000),\n ): Token {\n if (timestamp < 0) {\n throw new Error('The timestamp must be non-negative.');\n }\n\n if (subject === '') {\n throw new Error('The subject must be non-empty.');\n }\n\n return new Token(\n {\n typ: 'JWT',\n alg: 'none',\n appId: appId,\n },\n {\n iss: 'croct.io',\n aud: 'croct.io',\n iat: timestamp,\n ...(subject !== null ? {sub: subject} : null),\n },\n );\n }\n\n public static parse(token: string): Token {\n if (token === '') {\n throw new Error('The token cannot be empty.');\n }\n\n const parts = token.split('.', 3);\n\n // This token is invalid\n if (parts.length < 2) {\n throw new Error('The token is malformed.');\n }\n\n let headers;\n let payload;\n\n try {\n headers = JSON.parse(base64UrlDecode(parts[0], true));\n payload = JSON.parse(base64UrlDecode(parts[1], true));\n } catch (error) {\n throw new Error('The token is corrupted.');\n }\n\n return Token.of(headers, payload, parts[2]);\n }\n\n public static of(headers: TokenHeaders, payload: TokenPayload, signature = ''): Token {\n try {\n tokenSchema.validate({\n headers: headers,\n payload: payload,\n signature: signature,\n });\n } catch (violation) {\n throw new Error(`The token is invalid: ${formatCause(violation)}`);\n }\n\n return new Token(headers as TokenHeaders, payload as TokenPayload, signature as string);\n }\n\n public async signedWith(apiKey: ApiKey): Promise<Token> {\n const keyId = await apiKey.getIdentifierHash();\n const headers: TokenHeaders = {\n ...this.headers,\n kid: keyId,\n alg: apiKey.getSigningAlgorithm(),\n };\n\n const encodedHeader = base64UrlEncode(JSON.stringify(headers), true);\n const encodedPayload = base64UrlEncode(JSON.stringify(this.payload), true);\n const signature = await apiKey.sign(`${encodedHeader}.${encodedPayload}`);\n\n return new Token(headers, this.payload, base64UrlEncode(signature, false));\n }\n\n public isSigned(): boolean {\n return this.headers.alg !== 'none' && this.signature !== '';\n }\n\n public isSubject(subject: string): boolean {\n return this.getSubject() === subject;\n }\n\n public isAnonymous(): boolean {\n return this.payload.sub === undefined;\n }\n\n public isValidNow(now: number = Math.floor(Date.now() / 1000)): boolean {\n const {exp, iat} = this.payload;\n\n return (exp === undefined || exp >= now) && iat <= now;\n }\n\n public isNewerThan(token: Token): boolean {\n return this.payload.iat > token.payload.iat;\n }\n\n public async matchesKeyId(apiKey: ApiKey): Promise<boolean> {\n return this.headers.kid === await apiKey.getIdentifierHash();\n }\n\n public getHeaders(): TokenHeaders {\n return {...this.headers};\n }\n\n public getPayload(): TokenPayload {\n return {...this.payload};\n }\n\n public getSignature(): string {\n return this.signature;\n }\n\n public getApplicationId(): string | null {\n return this.headers.appId ?? null;\n }\n\n public getAlgorithm(): string {\n return this.headers.alg;\n }\n\n public getType(): string {\n return this.headers.typ;\n }\n\n public getKeyId(): string | null {\n return this.headers.kid ?? null;\n }\n\n public getSubject(): string | null {\n return this.payload.sub ?? null;\n }\n\n public getIssueTime(): number {\n return this.payload.iat;\n }\n\n public getExpirationTime(): number | null {\n return this.payload.exp ?? null;\n }\n\n public getTokenId(): string | null {\n return this.payload.jti ?? null;\n }\n\n public getAudience(): string | string[] {\n return this.payload.aud;\n }\n\n public getIssuer(): string {\n return this.payload.iss;\n }\n\n public withTokenId(tokenId: string): Token {\n if (tokenId === '' || !Token.UUID_PATTERN.test(tokenId)) {\n throw new Error('The token ID must be a valid UUID.');\n }\n\n return new Token(\n this.headers,\n {\n ...this.payload,\n jti: tokenId,\n },\n this.signature,\n );\n }\n\n public withDuration(duration: number, now: number = Math.floor(Date.now() / 1000)): Token {\n return new Token(\n this.headers,\n {\n ...this.payload,\n iat: now,\n exp: now + duration,\n },\n this.signature,\n );\n }\n\n public withAddedHeaders(headers: Partial<TokenHeaders>): Token {\n return this.withHeaders({\n ...this.headers,\n ...Object.fromEntries(\n Object.entries(headers)\n .filter(([, value]) => value !== undefined),\n ),\n });\n }\n\n public withAddedClaims(claims: Partial<TokenClaims>): Token {\n return this.withPayload({\n ...this.payload,\n ...Object.fromEntries(\n Object.entries(claims)\n .filter(([, value]) => value !== undefined),\n ),\n });\n }\n\n public withHeaders(headers: TokenHeaders): Token {\n return new Token(\n headers,\n this.payload,\n this.signature,\n );\n }\n\n public withPayload(payload: TokenPayload): Token {\n return new Token(\n this.headers,\n payload,\n this.signature,\n );\n }\n\n public withSignature(signature: string): Token {\n return new Token(\n this.headers,\n this.payload,\n signature,\n );\n }\n\n public toJSON(): string {\n return this.toString();\n }\n\n public toString(): string {\n const headers = base64UrlEncode(JSON.stringify(this.headers), true);\n const payload = base64UrlEncode(JSON.stringify(this.payload), true);\n\n return `${headers}.${payload}.${this.signature}`;\n }\n}\n\nexport interface TokenProvider {\n getToken(): Token | null;\n}\n\nexport interface TokenStore extends TokenProvider {\n setToken(token: Token | null): void;\n}\n\nexport class FixedTokenProvider implements TokenProvider {\n private readonly token: Token | null;\n\n public constructor(token: Token | null) {\n this.token = token;\n }\n\n public getToken(): Token | null {\n return this.token;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracker.ts"],"sourcesContent":["import {Logger, NullLogger} from './logging';\nimport {Tab, TabEvent, TabUrlChangeEvent, TabVisibilityChangeEvent} from './tab';\nimport {OutputChannel} from './channel';\nimport {formatCause} from './error';\nimport {Token, TokenProvider} from './token';\nimport {RetryPolicy} from './retry';\nimport {\n Beacon,\n BeaconPayload,\n TrackingEvent,\n TrackingEventContext,\n isCartPartialEvent,\n isIdentifiedUserEvent,\n PartialTrackingEvent,\n} from './trackingEvents';\n\ntype Options = {\n eventMetadata?: {[key: string]: string},\n};\n\nexport type Configuration = Options & {\n channel: OutputChannel<Beacon>,\n logger?: Logger,\n tab: Tab,\n tokenProvider: TokenProvider,\n processor?: TrackingEventProcessor,\n inactivityRetryPolicy: RetryPolicy<number>,\n};\n\ntype State = {\n initialized: boolean,\n enabled: boolean,\n suspended: boolean,\n};\n\ntype InactivityTimer = {\n id?: number,\n since: number,\n};\n\nexport interface TrackingEventProcessor {\n process(event: QueuedEventInfo): QueuedEventInfo[];\n}\n\nexport type QueuedEventInfo<T extends TrackingEvent = TrackingEvent> = Omit<EventInfo<T>, 'status'>;\n\nexport type EventInfo<T extends TrackingEvent = TrackingEvent> = {\n context: TrackingEventContext,\n userToken?: Token,\n event: T,\n timestamp: number,\n status: 'pending' | 'confirmed' | 'failed' | 'ignored',\n};\n\nexport interface EventListener {\n (event: EventInfo): void;\n}\n\nconst trackedEvents: {[key: string]: {[key: string]: boolean}} = {};\n\nexport class Tracker {\n private readonly options: Required<Options>;\n\n private tab: Tab;\n\n private tokenProvider: TokenProvider;\n\n private inactivityRetryPolicy: RetryPolicy<any>;\n\n private readonly channel: OutputChannel<Beacon>;\n\n private readonly logger: Logger;\n\n private readonly processor?: TrackingEventProcessor;\n\n private readonly listeners: EventListener[] = [];\n\n private readonly pending: Array<Promise<void>> = [];\n\n private readonly state: State = {\n enabled: false,\n initialized: false,\n suspended: false,\n };\n\n private readonly inactivityTimer: InactivityTimer = {\n since: 0,\n };\n\n public constructor(config: Configuration) {\n const {tab, tokenProvider, channel, logger, inactivityRetryPolicy, ...options} = config;\n\n this.tab = tab;\n this.tokenProvider = tokenProvider;\n this.inactivityRetryPolicy = inactivityRetryPolicy;\n this.channel = channel;\n this.logger = logger ?? new NullLogger();\n this.processor = config.processor;\n this.options = {\n ...options,\n eventMetadata: options.eventMetadata ?? {},\n };\n\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n this.suspend = this.suspend.bind(this);\n this.unsuspend = this.unsuspend.bind(this);\n this.trackPageLoad = this.trackPageLoad.bind(this);\n this.trackTabVisibilityChange = this.trackTabVisibilityChange.bind(this);\n this.trackTabUrlChange = this.trackTabUrlChange.bind(this);\n this.trackInactivity = this.trackInactivity.bind(this);\n }\n\n public addListener(listener: EventListener): void {\n this.listeners.push(listener);\n }\n\n public removeListener(listener: EventListener): void {\n let index = this.listeners.indexOf(listener);\n\n while (index >= 0) {\n this.listeners.splice(index, 1);\n index = this.listeners.indexOf(listener);\n }\n }\n\n public get flushed(): Promise<void> {\n const suppress = (): void => {\n // suppress errors\n };\n\n return Promise.all(this.pending).then(suppress, suppress);\n }\n\n public isEnabled(): boolean {\n return this.state.enabled;\n }\n\n public isSuspended(): boolean {\n return this.state.suspended;\n }\n\n public enable(): void {\n if (this.state.enabled) {\n return;\n }\n\n this.logger.info('Tracker enabled');\n\n this.state.enabled = true;\n\n if (this.state.suspended) {\n return;\n }\n\n this.startInactivityTimer();\n\n if (!this.state.initialized) {\n this.state.initialized = true;\n this.initialize();\n }\n\n this.tab.addListener('load', this.trackPageLoad);\n this.tab.addListener('urlChange', this.trackTabUrlChange);\n this.tab.addListener('visibilityChange', this.trackTabVisibilityChange);\n }\n\n public disable(): void {\n if (!this.state.enabled) {\n return;\n }\n\n this.logger.info('Tracker disabled');\n\n this.state.enabled = false;\n\n if (this.state.suspended) {\n return;\n }\n\n this.tab.removeListener('load', this.trackPageLoad);\n this.tab.removeListener('urlChange', this.trackTabUrlChange);\n this.tab.removeListener('visibilityChange', this.trackTabVisibilityChange);\n\n this.stopInactivityTimer();\n }\n\n public suspend(): void {\n if (this.state.suspended) {\n return;\n }\n\n this.logger.info('Tracker suspended');\n\n if (this.state.enabled) {\n this.disable();\n this.state.enabled = true;\n }\n\n this.state.suspended = true;\n }\n\n public unsuspend(): void {\n if (!this.state.suspended) {\n return;\n }\n\n this.logger.info('Tracker unsuspended');\n\n this.state.suspended = false;\n\n if (this.state.enabled) {\n this.state.enabled = false;\n this.enable();\n }\n }\n\n private initialize(): void {\n if (trackedEvents[this.tab.id] === undefined) {\n trackedEvents[this.tab.id] = {};\n }\n\n const initEvents = trackedEvents[this.tab.id];\n\n if (this.tab.isNew && !initEvents.tabOpened) {\n initEvents.tabOpened = true;\n\n this.trackTabOpen({tabId: this.tab.id});\n }\n\n if (!initEvents.pageOpened) {\n initEvents.pageOpened = true;\n\n this.trackPageOpen({\n url: this.tab.url,\n referrer: this.tab.referrer,\n });\n }\n }\n\n private stopInactivityTimer(): void {\n if (this.inactivityTimer.id !== undefined) {\n window.clearTimeout(this.inactivityTimer.id);\n\n delete this.inactivityTimer.id;\n }\n }\n\n private startInactivityTimer(): void {\n this.stopInactivityTimer();\n\n this.inactivityTimer.since = Date.now();\n\n let iteration = -1;\n\n const startTimer = (): void => {\n if (!this.inactivityRetryPolicy.shouldRetry(iteration + 1, this.inactivityTimer.since)) {\n window.clearTimeout(this.inactivityTimer.id);\n\n return;\n }\n\n iteration += 1;\n\n this.inactivityTimer.id = window.setTimeout(\n () => {\n this.trackInactivity();\n startTimer();\n },\n this.inactivityRetryPolicy.getDelay(iteration),\n );\n };\n\n startTimer();\n }\n\n public track<T extends PartialTrackingEvent>(event: T, timestamp: number = Date.now()): Promise<T> {\n return this.dispatch(this.enrichEvent(event, timestamp), timestamp).then(() => event);\n }\n\n private trackPageOpen({referrer, ...payload}: {url: string, referrer: string}): void {\n this.enqueue({\n type: 'pageOpened',\n ...payload,\n ...(referrer.length > 0 ? {referrer: referrer} : {}),\n });\n }\n\n private trackPageLoad({detail: {tab}}: TabEvent): void {\n this.enqueue({\n type: 'pageLoaded',\n url: tab.url,\n title: tab.title,\n lastModifiedTime: Date.parse(tab.document.lastModified),\n });\n }\n\n private trackTabOpen(payload: {tabId: string}): void {\n this.enqueue({\n type: 'tabOpened',\n ...payload,\n });\n }\n\n private trackTabUrlChange({detail}: TabUrlChangeEvent): void {\n this.enqueue({\n type: 'tabUrlChanged',\n tabId: detail.tab.id,\n url: detail.url,\n });\n }\n\n private trackTabVisibilityChange({detail}: TabVisibilityChangeEvent): void {\n this.enqueue({\n type: 'tabVisibilityChanged',\n tabId: detail.tab.id,\n visibility: detail.visible ? 'visible' : 'hidden',\n });\n }\n\n private trackInactivity(): void {\n this.enqueue({\n type: 'nothingChanged',\n sinceTime: this.inactivityTimer.since,\n });\n }\n\n private enqueue(event: TrackingEvent, timestamp: number = Date.now()): void {\n this.dispatch(event, timestamp).catch(() => {\n // suppress error\n });\n }\n\n private notifyEvent(event: EventInfo): void {\n this.listeners.map(listener => listener(event));\n }\n\n private dispatch<T extends TrackingEvent>(event: T, timestamp: number): Promise<T> {\n const userToken = this.tokenProvider.getToken();\n const metadata = this.options.eventMetadata;\n const context: TrackingEventContext = {\n tabId: this.tab.id,\n url: this.tab.url,\n ...(Object.keys(metadata).length > 0 ? {metadata: metadata} : {}),\n };\n\n const queuedEvent: QueuedEventInfo<T> = {\n ...(userToken !== null ? {userToken: userToken} : {}),\n event: event,\n timestamp: timestamp,\n context: context,\n };\n\n const processedEvents = this.processor !== undefined\n ? this.processor.process(queuedEvent)\n : [queuedEvent];\n\n // sort events by timestamp in ascending order\n processedEvents.sort((left, right) => left.timestamp - right.timestamp);\n\n let result: Promise<T>|null = null;\n\n for (const processedEvent of processedEvents) {\n if (processedEvent === queuedEvent) {\n result = this.publish(queuedEvent);\n\n continue;\n }\n\n this.publish(processedEvent);\n }\n\n if (result === null) {\n return Promise.reject(new Error('Event suppressed.'));\n }\n\n return result;\n }\n\n private publish<T extends TrackingEvent>(queuedEvent: QueuedEventInfo<T>): Promise<T> {\n const {event} = queuedEvent;\n\n if (event.type !== 'nothingChanged') {\n this.stopInactivityTimer();\n }\n\n const eventInfo: EventInfo<T> = {\n ...queuedEvent,\n status: 'pending',\n };\n\n if (this.state.suspended) {\n this.logger.warn(`Tracker is suspended, ignoring event \"${event.type}\"`);\n\n this.notifyEvent({...eventInfo, status: 'ignored'});\n\n return Promise.reject(new Error('The tracker is suspended.'));\n }\n\n this.logger.info(`Tracked event \"${event.type}\"`);\n\n this.notifyEvent(eventInfo);\n\n return new Promise<T>((resolve, reject) => {\n const promise = this.channel\n .publish(this.createBeacon(queuedEvent))\n .then(\n () => {\n this.logger.debug(`Successfully published event \"${event.type}\"`);\n\n this.notifyEvent({...eventInfo, status: 'confirmed'});\n\n resolve(event);\n },\n cause => {\n this.logger.error(`Failed to publish event \"${event.type}\", reason: ${formatCause(cause)}`);\n\n this.notifyEvent({...eventInfo, status: 'failed'});\n\n reject(cause);\n },\n );\n\n this.pending.push(promise);\n\n promise.finally(() => {\n this.pending.splice(this.pending.indexOf(promise), 1);\n });\n\n if (this.state.enabled && event.type !== 'nothingChanged') {\n this.startInactivityTimer();\n }\n });\n }\n\n private enrichEvent(event: PartialTrackingEvent, timestamp: number): TrackingEvent {\n if (isCartPartialEvent(event)) {\n const {cart: {lastUpdateTime = timestamp, ...cart}, ...payload} = event;\n\n return {\n ...payload,\n cart: {\n ...cart,\n lastUpdateTime: lastUpdateTime,\n },\n };\n }\n\n return event;\n }\n\n private createBeacon({event, timestamp, context, userToken}: QueuedEventInfo): Beacon {\n return {\n timestamp: timestamp,\n ...(userToken !== undefined ? {token: userToken.toString()} : {}),\n context: context,\n payload: this.enrichBeaconPayload(this.createBeaconPayload(event)),\n };\n }\n\n private createBeaconPayload(event: TrackingEvent): BeaconPayload {\n if (!isIdentifiedUserEvent(event)) {\n return event;\n }\n\n if (event.type === 'userSignedUp' && event.profile !== undefined) {\n const {userId, profile, ...payload} = event;\n\n return {\n ...payload,\n externalUserId: userId,\n patch: {\n operations: [\n {\n type: 'merge',\n path: '.',\n value: profile,\n },\n ],\n },\n };\n }\n\n const {userId, ...payload} = event;\n\n return {\n ...payload,\n externalUserId: userId,\n };\n }\n\n private enrichBeaconPayload(event: BeaconPayload): BeaconPayload {\n switch (event.type) {\n case 'linkOpened':\n return {\n ...event,\n link: new URL(event.link, this.tab.url).toString(),\n };\n\n default:\n return event;\n }\n }\n}\n"],"mappings":"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","names":["userId","payload"]}
package/tracker.d.ts CHANGED
@@ -1,15 +1,21 @@
1
- import { Logger } from './logging';
2
- import { Tab } from './tab';
3
- import { OutputChannel } from './channel';
4
- import { Token, TokenProvider } from './token';
5
- import { RetryPolicy } from './retry';
6
- import { Beacon, TrackingEvent, TrackingEventContext, PartialTrackingEvent } from './trackingEvents';
1
+ import { Logger } from './logging/logger.js';
2
+ import { Tab } from './tab.js';
3
+ import { OutputChannel } from './channel/channel.js';
4
+ import { RetryPolicy } from './retry/policy.js';
5
+ import { Token, TokenProvider } from './token/token.js';
6
+ import { TrackingEvent, TrackingEventContext, Beacon, PartialTrackingEvent } from './trackingEvents.js';
7
+ import './eventManager.js';
8
+ import '@croct/json';
9
+ import './apiKey.js';
10
+ import './patch.js';
11
+ import './utilityTypes.js';
12
+
7
13
  type Options = {
8
14
  eventMetadata?: {
9
15
  [key: string]: string;
10
16
  };
11
17
  };
12
- export type Configuration = Options & {
18
+ type Configuration = Options & {
13
19
  channel: OutputChannel<Beacon>;
14
20
  logger?: Logger;
15
21
  tab: Tab;
@@ -17,21 +23,21 @@ export type Configuration = Options & {
17
23
  processor?: TrackingEventProcessor;
18
24
  inactivityRetryPolicy: RetryPolicy<number>;
19
25
  };
20
- export interface TrackingEventProcessor {
26
+ interface TrackingEventProcessor {
21
27
  process(event: QueuedEventInfo): QueuedEventInfo[];
22
28
  }
23
- export type QueuedEventInfo<T extends TrackingEvent = TrackingEvent> = Omit<EventInfo<T>, 'status'>;
24
- export type EventInfo<T extends TrackingEvent = TrackingEvent> = {
29
+ type QueuedEventInfo<T extends TrackingEvent = TrackingEvent> = Omit<EventInfo<T>, 'status'>;
30
+ type EventInfo<T extends TrackingEvent = TrackingEvent> = {
25
31
  context: TrackingEventContext;
26
32
  userToken?: Token;
27
33
  event: T;
28
34
  timestamp: number;
29
35
  status: 'pending' | 'confirmed' | 'failed' | 'ignored';
30
36
  };
31
- export interface EventListener {
37
+ interface EventListener {
32
38
  (event: EventInfo): void;
33
39
  }
34
- export declare class Tracker {
40
+ declare class Tracker {
35
41
  private readonly options;
36
42
  private tab;
37
43
  private tokenProvider;
@@ -72,4 +78,5 @@ export declare class Tracker {
72
78
  private createBeaconPayload;
73
79
  private enrichBeaconPayload;
74
80
  }
75
- export {};
81
+
82
+ export { type Configuration, type EventInfo, type EventListener, type QueuedEventInfo, Tracker, type TrackingEventProcessor };