@etohq/utils 1.5.1-alpha.3 → 1.5.1-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/dist/access-link/case-sensitivity.d.ts +14 -0
  2. package/dist/access-link/case-sensitivity.d.ts.map +1 -0
  3. package/dist/access-link/case-sensitivity.js +57 -0
  4. package/dist/access-link/case-sensitivity.js.map +1 -0
  5. package/dist/access-link/check-if-key-exists.d.ts +7 -0
  6. package/dist/access-link/check-if-key-exists.d.ts.map +1 -0
  7. package/dist/access-link/check-if-key-exists.js +36 -0
  8. package/dist/access-link/check-if-key-exists.js.map +1 -0
  9. package/dist/access-link/index.d.ts +11 -0
  10. package/dist/access-link/index.d.ts.map +1 -0
  11. package/dist/access-link/index.js +27 -0
  12. package/dist/access-link/index.js.map +1 -0
  13. package/dist/access-link/key-checks.d.ts +12 -0
  14. package/dist/access-link/key-checks.d.ts.map +1 -0
  15. package/dist/access-link/key-checks.js +78 -0
  16. package/dist/access-link/key-checks.js.map +1 -0
  17. package/dist/access-link/link-resolution.d.ts +26 -0
  18. package/dist/access-link/link-resolution.d.ts.map +1 -0
  19. package/dist/access-link/link-resolution.js +111 -0
  20. package/dist/access-link/link-resolution.js.map +1 -0
  21. package/dist/access-link/link-utils.d.ts +23 -0
  22. package/dist/access-link/link-utils.d.ts.map +1 -0
  23. package/dist/access-link/link-utils.js +61 -0
  24. package/dist/access-link/link-utils.js.map +1 -0
  25. package/dist/access-link/process-key.d.ts +5 -0
  26. package/dist/access-link/process-key.d.ts.map +1 -0
  27. package/dist/access-link/process-key.js +58 -0
  28. package/dist/access-link/process-key.js.map +1 -0
  29. package/dist/access-link/process-utils.d.ts +19 -0
  30. package/dist/access-link/process-utils.d.ts.map +1 -0
  31. package/dist/access-link/process-utils.js +52 -0
  32. package/dist/access-link/process-utils.js.map +1 -0
  33. package/dist/access-link/transform-link.d.ts +47 -0
  34. package/dist/access-link/transform-link.d.ts.map +1 -0
  35. package/dist/access-link/transform-link.js +25 -0
  36. package/dist/access-link/transform-link.js.map +1 -0
  37. package/dist/access-link/url-detection.d.ts +10 -0
  38. package/dist/access-link/url-detection.d.ts.map +1 -0
  39. package/dist/access-link/url-detection.js +63 -0
  40. package/dist/access-link/url-detection.js.map +1 -0
  41. package/dist/access-link/validation-utils.d.ts +23 -0
  42. package/dist/access-link/validation-utils.d.ts.map +1 -0
  43. package/dist/access-link/validation-utils.js +57 -0
  44. package/dist/access-link/validation-utils.js.map +1 -0
  45. package/dist/analytics/detect-bot.d.ts +2 -0
  46. package/dist/analytics/detect-bot.d.ts.map +1 -0
  47. package/dist/analytics/detect-bot.js +21 -0
  48. package/dist/analytics/detect-bot.js.map +1 -0
  49. package/dist/analytics/detect-qr.d.ts +2 -0
  50. package/dist/analytics/detect-qr.d.ts.map +1 -0
  51. package/dist/analytics/detect-qr.js +10 -0
  52. package/dist/analytics/detect-qr.js.map +1 -0
  53. package/dist/analytics/get-click-event.d.ts +8 -0
  54. package/dist/analytics/get-click-event.d.ts.map +1 -0
  55. package/dist/analytics/get-click-event.js +24 -0
  56. package/dist/analytics/get-click-event.js.map +1 -0
  57. package/dist/analytics/get-geolocation.d.ts +12 -0
  58. package/dist/analytics/get-geolocation.d.ts.map +1 -0
  59. package/dist/analytics/get-geolocation.js +51 -0
  60. package/dist/analytics/get-geolocation.js.map +1 -0
  61. package/dist/analytics/get-grant-event.d.ts +8 -0
  62. package/dist/analytics/get-grant-event.d.ts.map +1 -0
  63. package/dist/analytics/get-grant-event.js +24 -0
  64. package/dist/analytics/get-grant-event.js.map +1 -0
  65. package/dist/analytics/get-import-error-logs.d.ts +17 -0
  66. package/dist/analytics/get-import-error-logs.d.ts.map +1 -0
  67. package/dist/analytics/get-import-error-logs.js +23 -0
  68. package/dist/analytics/get-import-error-logs.js.map +1 -0
  69. package/dist/analytics/get-lead-events.d.ts +17 -0
  70. package/dist/analytics/get-lead-events.d.ts.map +1 -0
  71. package/dist/analytics/get-lead-events.js +17 -0
  72. package/dist/analytics/get-lead-events.js.map +1 -0
  73. package/dist/analytics/get-webhook-events.d.ts +17 -0
  74. package/dist/analytics/get-webhook-events.d.ts.map +1 -0
  75. package/dist/analytics/get-webhook-events.js +22 -0
  76. package/dist/analytics/get-webhook-events.js.map +1 -0
  77. package/dist/analytics/index.d.ts +18 -0
  78. package/dist/analytics/index.d.ts.map +1 -1
  79. package/dist/analytics/index.js +18 -0
  80. package/dist/analytics/index.js.map +1 -1
  81. package/dist/analytics/log-conversion-events.d.ts +6 -0
  82. package/dist/analytics/log-conversion-events.d.ts.map +1 -0
  83. package/dist/analytics/log-conversion-events.js +20 -0
  84. package/dist/analytics/log-conversion-events.js.map +1 -0
  85. package/dist/analytics/log-import-error.d.ts +6 -0
  86. package/dist/analytics/log-import-error.d.ts.map +1 -0
  87. package/dist/analytics/log-import-error.js +18 -0
  88. package/dist/analytics/log-import-error.js.map +1 -0
  89. package/dist/analytics/parse-user-agent.d.ts +13 -0
  90. package/dist/analytics/parse-user-agent.d.ts.map +1 -0
  91. package/dist/analytics/parse-user-agent.js +174 -0
  92. package/dist/analytics/parse-user-agent.js.map +1 -0
  93. package/dist/analytics/record-approval.d.ts +56 -0
  94. package/dist/analytics/record-approval.d.ts.map +1 -0
  95. package/dist/analytics/record-approval.js +32 -0
  96. package/dist/analytics/record-approval.js.map +1 -0
  97. package/dist/analytics/record-click.d.ts +32 -0
  98. package/dist/analytics/record-click.d.ts.map +1 -0
  99. package/dist/analytics/record-click.js +136 -0
  100. package/dist/analytics/record-click.js.map +1 -0
  101. package/dist/analytics/record-lead.d.ts +24 -0
  102. package/dist/analytics/record-lead.d.ts.map +1 -0
  103. package/dist/analytics/record-lead.js +72 -0
  104. package/dist/analytics/record-lead.js.map +1 -0
  105. package/dist/analytics/record-link.d.ts +106 -0
  106. package/dist/analytics/record-link.d.ts.map +1 -0
  107. package/dist/analytics/record-link.js +78 -0
  108. package/dist/analytics/record-link.js.map +1 -0
  109. package/dist/analytics/record-sale.d.ts +10 -0
  110. package/dist/analytics/record-sale.d.ts.map +1 -0
  111. package/dist/analytics/record-sale.js +35 -0
  112. package/dist/analytics/record-sale.js.map +1 -0
  113. package/dist/analytics/record-webhook-event.d.ts +26 -0
  114. package/dist/analytics/record-webhook-event.d.ts.map +1 -0
  115. package/dist/analytics/record-webhook-event.js +22 -0
  116. package/dist/analytics/record-webhook-event.js.map +1 -0
  117. package/dist/analytics/schemas.d.ts +257 -0
  118. package/dist/analytics/schemas.d.ts.map +1 -0
  119. package/dist/analytics/schemas.js +99 -0
  120. package/dist/analytics/schemas.js.map +1 -0
  121. package/dist/analytics/tinybird-client.d.ts +6 -0
  122. package/dist/analytics/tinybird-client.d.ts.map +1 -0
  123. package/dist/analytics/tinybird-client.js +11 -0
  124. package/dist/analytics/tinybird-client.js.map +1 -0
  125. package/dist/common/constants.d.ts +24 -0
  126. package/dist/common/constants.d.ts.map +1 -0
  127. package/dist/common/constants.js +196 -0
  128. package/dist/common/constants.js.map +1 -0
  129. package/dist/common/domains.d.ts +8 -0
  130. package/dist/common/domains.d.ts.map +1 -0
  131. package/dist/common/domains.js +88 -0
  132. package/dist/common/domains.js.map +1 -0
  133. package/dist/common/dynamic-import.d.ts.map +1 -1
  134. package/dist/common/dynamic-import.js +24 -1
  135. package/dist/common/dynamic-import.js.map +1 -1
  136. package/dist/common/fetch-with-retry.d.ts +6 -0
  137. package/dist/common/fetch-with-retry.d.ts.map +1 -0
  138. package/dist/common/fetch-with-retry.js +63 -0
  139. package/dist/common/fetch-with-retry.js.map +1 -0
  140. package/dist/common/get-identity-hash.d.ts +2 -0
  141. package/dist/common/get-identity-hash.d.ts.map +1 -0
  142. package/dist/common/get-identity-hash.js +19 -0
  143. package/dist/common/get-identity-hash.js.map +1 -0
  144. package/dist/common/index.d.ts +3 -0
  145. package/dist/common/index.d.ts.map +1 -1
  146. package/dist/common/index.js +3 -0
  147. package/dist/common/index.js.map +1 -1
  148. package/dist/common/is-valid-url.d.ts +2 -0
  149. package/dist/common/is-valid-url.d.ts.map +1 -0
  150. package/dist/common/is-valid-url.js +14 -0
  151. package/dist/common/is-valid-url.js.map +1 -0
  152. package/dist/common/reserved-slugs.d.ts +7 -0
  153. package/dist/common/reserved-slugs.d.ts.map +1 -0
  154. package/dist/common/reserved-slugs.js +64 -0
  155. package/dist/common/reserved-slugs.js.map +1 -0
  156. package/dist/common/to-snake-case.d.ts +5 -0
  157. package/dist/common/to-snake-case.d.ts.map +1 -0
  158. package/dist/common/to-snake-case.js +14 -0
  159. package/dist/common/to-snake-case.js.map +1 -0
  160. package/dist/dml/entity-builder.d.ts +68 -0
  161. package/dist/dml/entity-builder.d.ts.map +1 -1
  162. package/dist/dml/entity-builder.js +76 -0
  163. package/dist/dml/entity-builder.js.map +1 -1
  164. package/dist/dml/helpers/entity-builder/define-property.d.ts.map +1 -1
  165. package/dist/dml/helpers/entity-builder/define-property.js +77 -0
  166. package/dist/dml/helpers/entity-builder/define-property.js.map +1 -1
  167. package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.d.ts +10 -0
  168. package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.d.ts.map +1 -0
  169. package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.js +31 -0
  170. package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.js.map +1 -0
  171. package/dist/dml/properties/enum.d.ts.map +1 -1
  172. package/dist/dml/properties/enum.js +0 -1
  173. package/dist/dml/properties/enum.js.map +1 -1
  174. package/dist/dml/properties/geometry.d.ts +8 -0
  175. package/dist/dml/properties/geometry.d.ts.map +1 -0
  176. package/dist/dml/properties/geometry.js +14 -0
  177. package/dist/dml/properties/geometry.js.map +1 -0
  178. package/dist/dml/properties/index.d.ts +4 -0
  179. package/dist/dml/properties/index.d.ts.map +1 -1
  180. package/dist/dml/properties/index.js +4 -0
  181. package/dist/dml/properties/index.js.map +1 -1
  182. package/dist/dml/properties/multipolygon.d.ts +8 -0
  183. package/dist/dml/properties/multipolygon.d.ts.map +1 -0
  184. package/dist/dml/properties/multipolygon.js +14 -0
  185. package/dist/dml/properties/multipolygon.js.map +1 -0
  186. package/dist/dml/properties/point.d.ts +8 -0
  187. package/dist/dml/properties/point.d.ts.map +1 -0
  188. package/dist/dml/properties/point.js +14 -0
  189. package/dist/dml/properties/point.js.map +1 -0
  190. package/dist/dml/properties/polygon.d.ts +8 -0
  191. package/dist/dml/properties/polygon.d.ts.map +1 -0
  192. package/dist/dml/properties/polygon.js +14 -0
  193. package/dist/dml/properties/polygon.js.map +1 -0
  194. package/dist/index.d.ts +2 -0
  195. package/dist/index.d.ts.map +1 -1
  196. package/dist/index.js +2 -0
  197. package/dist/index.js.map +1 -1
  198. package/dist/modules-sdk/build-query.d.ts.map +1 -1
  199. package/dist/modules-sdk/build-query.js +3 -1
  200. package/dist/modules-sdk/build-query.js.map +1 -1
  201. package/dist/modules-sdk/definition.d.ts +18 -0
  202. package/dist/modules-sdk/definition.d.ts.map +1 -1
  203. package/dist/modules-sdk/definition.js +12 -0
  204. package/dist/modules-sdk/definition.js.map +1 -1
  205. package/dist/modules-sdk/spatial-query-processor.d.ts +2 -0
  206. package/dist/modules-sdk/spatial-query-processor.d.ts.map +1 -0
  207. package/dist/modules-sdk/spatial-query-processor.js +105 -0
  208. package/dist/modules-sdk/spatial-query-processor.js.map +1 -0
  209. package/dist/permissions/ability.d.ts +39 -0
  210. package/dist/permissions/ability.d.ts.map +1 -0
  211. package/dist/permissions/ability.js +51 -0
  212. package/dist/permissions/ability.js.map +1 -0
  213. package/dist/permissions/context-builder.d.ts +24 -0
  214. package/dist/permissions/context-builder.d.ts.map +1 -0
  215. package/dist/permissions/context-builder.js +30 -0
  216. package/dist/permissions/context-builder.js.map +1 -0
  217. package/dist/permissions/index.d.ts +4 -0
  218. package/dist/permissions/index.d.ts.map +1 -0
  219. package/dist/permissions/index.js +20 -0
  220. package/dist/permissions/index.js.map +1 -0
  221. package/dist/permissions/permission-service.d.ts +8 -0
  222. package/dist/permissions/permission-service.d.ts.map +1 -0
  223. package/dist/permissions/permission-service.js +20 -0
  224. package/dist/permissions/permission-service.js.map +1 -0
  225. package/dist/permissions/types.d.ts +17 -0
  226. package/dist/permissions/types.d.ts.map +1 -0
  227. package/dist/permissions/types.js +11 -0
  228. package/dist/permissions/types.js.map +1 -0
  229. package/dist/tsconfig.tsbuildinfo +1 -1
  230. package/dist/zod/schemas/approvals.d.ts +91 -0
  231. package/dist/zod/schemas/approvals.d.ts.map +1 -0
  232. package/dist/zod/schemas/approvals.js +38 -0
  233. package/dist/zod/schemas/approvals.js.map +1 -0
  234. package/dist/zod/schemas/clicks.d.ts +394 -0
  235. package/dist/zod/schemas/clicks.d.ts.map +1 -0
  236. package/dist/zod/schemas/clicks.js +85 -0
  237. package/dist/zod/schemas/clicks.js.map +1 -0
  238. package/dist/zod/schemas/leads.d.ts +423 -0
  239. package/dist/zod/schemas/leads.d.ts.map +1 -0
  240. package/dist/zod/schemas/leads.js +58 -0
  241. package/dist/zod/schemas/leads.js.map +1 -0
  242. package/package.json +8 -2
  243. package/dist/feature-flags/eto-v2.d.ts +0 -3
  244. package/dist/feature-flags/eto-v2.d.ts.map +0 -1
  245. package/dist/feature-flags/eto-v2.js +0 -10
  246. package/dist/feature-flags/eto-v2.js.map +0 -1
  247. package/dist/feature-flags/order-editing.d.ts +0 -3
  248. package/dist/feature-flags/order-editing.d.ts.map +0 -1
  249. package/dist/feature-flags/order-editing.js +0 -10
  250. package/dist/feature-flags/order-editing.js.map +0 -1
  251. package/dist/feature-flags/product-categories.d.ts +0 -3
  252. package/dist/feature-flags/product-categories.d.ts.map +0 -1
  253. package/dist/feature-flags/product-categories.js +0 -10
  254. package/dist/feature-flags/product-categories.js.map +0 -1
  255. package/dist/feature-flags/sales-channels.d.ts +0 -3
  256. package/dist/feature-flags/sales-channels.d.ts.map +0 -1
  257. package/dist/feature-flags/sales-channels.js +0 -10
  258. package/dist/feature-flags/sales-channels.js.map +0 -1
  259. package/dist/feature-flags/tax-inclusive-pricing.d.ts +0 -3
  260. package/dist/feature-flags/tax-inclusive-pricing.d.ts.map +0 -1
  261. package/dist/feature-flags/tax-inclusive-pricing.js +0 -10
  262. package/dist/feature-flags/tax-inclusive-pricing.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ // Access link processing utilities (following Dub's process-link pattern)
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.processAccessLink = processAccessLink;
5
+ async function processAccessLink(data, options = {}) {
6
+ const processed = { ...data };
7
+ // Process domain
8
+ if (processed.domain) {
9
+ processed.domain = processed.domain.toLowerCase().trim();
10
+ }
11
+ // Process key
12
+ if (processed.key) {
13
+ processed.key = processed.key.trim();
14
+ // Remove leading slash if present
15
+ if (processed.key.startsWith('/')) {
16
+ processed.key = processed.key.slice(1);
17
+ }
18
+ }
19
+ // Process URL
20
+ if (processed.url) {
21
+ processed.url = processed.url.trim();
22
+ // Ensure URL has protocol
23
+ if (!processed.url.startsWith('http://') && !processed.url.startsWith('https://')) {
24
+ processed.url = `https://${processed.url}`;
25
+ }
26
+ }
27
+ // Process expiration
28
+ if (processed.expires_at) {
29
+ // Ensure expiration is in the future
30
+ if (processed.expires_at <= new Date()) {
31
+ throw new Error("Expiration date must be in the future");
32
+ }
33
+ }
34
+ // Process max uses
35
+ if (processed.max_uses !== undefined) {
36
+ if (processed.max_uses < 0) {
37
+ throw new Error("Max uses cannot be negative");
38
+ }
39
+ if (processed.max_uses === 0) {
40
+ processed.max_uses = null; // Unlimited
41
+ }
42
+ }
43
+ // Validate resource targeting
44
+ if (processed.target_resource_type && !processed.target_resource_id) {
45
+ throw new Error("target_resource_id is required when target_resource_type is specified");
46
+ }
47
+ if (processed.target_resource_id && !processed.target_resource_type) {
48
+ throw new Error("target_resource_type is required when target_resource_id is specified");
49
+ }
50
+ return processed;
51
+ }
52
+ //# sourceMappingURL=process-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/access-link/process-utils.ts"],"names":[],"mappings":";AAAA,0EAA0E;;AAiB1E,8CA2DC;AA3DM,KAAK,UAAU,iBAAiB,CACrC,IAA8B,EAC9B,UAGI,EAAE;IAEN,MAAM,SAAS,GAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IAElC,iBAAiB;IACjB,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC1D,CAAC;IAED,cAAc;IACd,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACpC,kCAAkC;QAClC,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACpC,0BAA0B;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClF,SAAS,CAAC,GAAG,GAAG,WAAW,SAAS,CAAC,GAAG,EAAE,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,qCAAqC;QACrC,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAChD,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAA,CAAC,YAAY;QACxC,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,SAAS,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,47 @@
1
+ export type ExpandedAccessLink = {
2
+ id: string;
3
+ domain: string;
4
+ key: string;
5
+ url: string;
6
+ short_link: string;
7
+ project_id: string;
8
+ creator_user_id: string;
9
+ target_resource_type?: string | null;
10
+ target_resource_id?: string | null;
11
+ access_role?: string | null;
12
+ purpose?: string | null;
13
+ max_uses?: number | null;
14
+ expires_at?: Date | null;
15
+ created_at: Date;
16
+ updated_at: Date;
17
+ };
18
+ export declare const transformLink: (link: ExpandedAccessLink, { skipDecodeKey }?: {
19
+ skipDecodeKey?: boolean;
20
+ }) => {
21
+ qrCode: string;
22
+ projectId: string;
23
+ creatorUserId: string;
24
+ targetResourceType: string | null | undefined;
25
+ targetResourceId: string | null | undefined;
26
+ accessRole: string | null | undefined;
27
+ maxUses: number | null | undefined;
28
+ expiresAt: Date | null | undefined;
29
+ createdAt: Date;
30
+ updatedAt: Date;
31
+ id: string;
32
+ domain: string;
33
+ key: string;
34
+ url: string;
35
+ short_link: string;
36
+ project_id: string;
37
+ creator_user_id: string;
38
+ target_resource_type?: string | null;
39
+ target_resource_id?: string | null;
40
+ access_role?: string | null;
41
+ purpose?: string | null;
42
+ max_uses?: number | null;
43
+ expires_at?: Date | null;
44
+ created_at: Date;
45
+ updated_at: Date;
46
+ };
47
+ //# sourceMappingURL=transform-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-link.d.ts","sourceRoot":"","sources":["../../src/access-link/transform-link.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,IAAI,CAAA;IAChB,UAAU,EAAE,IAAI,CAAA;CAEjB,CAAA;AAGD,eAAO,MAAM,aAAa,GACxB,MAAM,kBAAkB,EACxB,oBAA2B;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;QArBvD,MAAM;YACF,MAAM;SACT,MAAM;SACN,MAAM;gBACC,MAAM;gBACN,MAAM;qBACD,MAAM;2BACA,MAAM,GAAG,IAAI;yBACf,MAAM,GAAG,IAAI;kBACpB,MAAM,GAAG,IAAI;cACjB,MAAM,GAAG,IAAI;eACZ,MAAM,GAAG,IAAI;iBACX,IAAI,GAAG,IAAI;gBACZ,IAAI;gBACJ,IAAI;CA0BjB,CAAA"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformLink = void 0;
4
+ const case_sensitivity_1 = require("./case-sensitivity");
5
+ // Transform access link with additional properties (following Dub's pattern)
6
+ const transformLink = (link, { skipDecodeKey = false } = {}) => {
7
+ if (!skipDecodeKey) {
8
+ link = (0, case_sensitivity_1.decodeLinkIfCaseSensitive)(link);
9
+ }
10
+ return {
11
+ ...link,
12
+ qrCode: `${link.short_link}?qr=1`,
13
+ projectId: link.project_id, // backwards compatibility
14
+ creatorUserId: link.creator_user_id, // backwards compatibility
15
+ targetResourceType: link.target_resource_type,
16
+ targetResourceId: link.target_resource_id,
17
+ accessRole: link.access_role,
18
+ maxUses: link.max_uses,
19
+ expiresAt: link.expires_at,
20
+ createdAt: link.created_at,
21
+ updatedAt: link.updated_at,
22
+ };
23
+ };
24
+ exports.transformLink = transformLink;
25
+ //# sourceMappingURL=transform-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-link.js","sourceRoot":"","sources":["../../src/access-link/transform-link.ts"],"names":[],"mappings":";;;AAAA,yDAA8D;AAsB9D,6EAA6E;AACtE,MAAM,aAAa,GAAG,CAC3B,IAAwB,EACxB,EAAE,aAAa,GAAG,KAAK,KAAkC,EAAE,EAC3D,EAAE;IACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,GAAG,IAAA,4CAAyB,EAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,OAAO;QACjC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,0BAA0B;QACtD,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,0BAA0B;QAC/D,kBAAkB,EAAE,IAAI,CAAC,oBAAoB;QAC7C,gBAAgB,EAAE,IAAI,CAAC,kBAAkB;QACzC,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,OAAO,EAAE,IAAI,CAAC,QAAQ;QACtB,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;KAC3B,CAAA;AACH,CAAC,CAAA;AArBY,QAAA,aAAa,iBAqBzB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * URL detection utilities for ETO access links
3
+ * Following Dub's exact patterns
4
+ */
5
+ export declare const isSingularTrackingUrl: (url: string | null | undefined) => boolean;
6
+ export declare const isGooglePlayStoreUrl: (url: string | null | undefined) => boolean;
7
+ export declare const isIosAppStoreUrl: (url: string | null | undefined) => boolean;
8
+ export declare const isTrackingUrl: (url: string | null | undefined) => boolean;
9
+ export declare const hashString: (str: string) => number;
10
+ //# sourceMappingURL=url-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-detection.d.ts","sourceRoot":"","sources":["../../src/access-link/url-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAStE,CAAA;AAGD,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OASrE,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OASjE,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAE9D,CAAA;AAGD,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAQxC,CAAA"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * URL detection utilities for ETO access links
4
+ * Following Dub's exact patterns
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.hashString = exports.isTrackingUrl = exports.isIosAppStoreUrl = exports.isGooglePlayStoreUrl = exports.isSingularTrackingUrl = void 0;
8
+ // ETO equivalent of Dub's isSingularTrackingUrl
9
+ const isSingularTrackingUrl = (url) => {
10
+ if (!url)
11
+ return false;
12
+ try {
13
+ const parsedUrl = new URL(url);
14
+ return parsedUrl.hostname.endsWith(".sng.link");
15
+ }
16
+ catch (error) {
17
+ return false;
18
+ }
19
+ };
20
+ exports.isSingularTrackingUrl = isSingularTrackingUrl;
21
+ // ETO equivalent of Dub's isGooglePlayStoreUrl
22
+ const isGooglePlayStoreUrl = (url) => {
23
+ if (!url)
24
+ return false;
25
+ try {
26
+ const parsedUrl = new URL(url);
27
+ return parsedUrl.hostname === "play.google.com";
28
+ }
29
+ catch (error) {
30
+ return false;
31
+ }
32
+ };
33
+ exports.isGooglePlayStoreUrl = isGooglePlayStoreUrl;
34
+ // ETO equivalent of Dub's isIosAppStoreUrl
35
+ const isIosAppStoreUrl = (url) => {
36
+ if (!url)
37
+ return false;
38
+ try {
39
+ const parsedUrl = new URL(url);
40
+ return parsedUrl.hostname === "apps.apple.com";
41
+ }
42
+ catch (error) {
43
+ return false;
44
+ }
45
+ };
46
+ exports.isIosAppStoreUrl = isIosAppStoreUrl;
47
+ // ETO tracking URL detection (combining Singular and other tracking services)
48
+ const isTrackingUrl = (url) => {
49
+ return (0, exports.isSingularTrackingUrl)(url);
50
+ };
51
+ exports.isTrackingUrl = isTrackingUrl;
52
+ // Simple hash function for consistent user assignment
53
+ const hashString = (str) => {
54
+ let hash = 0;
55
+ for (let i = 0; i < str.length; i++) {
56
+ const char = str.charCodeAt(i);
57
+ hash = ((hash << 5) - hash) + char;
58
+ hash = hash & hash; // Convert to 32-bit integer
59
+ }
60
+ return Math.abs(hash) / 2147483647; // Normalize to 0-1
61
+ };
62
+ exports.hashString = hashString;
63
+ //# sourceMappingURL=url-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-detection.js","sourceRoot":"","sources":["../../src/access-link/url-detection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,gDAAgD;AACzC,MAAM,qBAAqB,GAAG,CAAC,GAA8B,EAAW,EAAE;IAC/E,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AATY,QAAA,qBAAqB,yBASjC;AAED,iDAAiD;AAC1C,MAAM,oBAAoB,GAAG,CAAC,GAA8B,EAAW,EAAE;IAC9E,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,SAAS,CAAC,QAAQ,KAAK,iBAAiB,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AATY,QAAA,oBAAoB,wBAShC;AAED,2CAA2C;AACpC,MAAM,gBAAgB,GAAG,CAAC,GAA8B,EAAW,EAAE;IAC1E,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,SAAS,CAAC,QAAQ,KAAK,gBAAgB,CAAA;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AATY,QAAA,gBAAgB,oBAS5B;AAED,8EAA8E;AACvE,MAAM,aAAa,GAAG,CAAC,GAA8B,EAAW,EAAE;IACvE,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAED,sDAAsD;AAC/C,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IAChD,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;QAClC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,4BAA4B;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAA,CAAC,mBAAmB;AACxD,CAAC,CAAA;AARY,QAAA,UAAU,cAQtB"}
@@ -0,0 +1,23 @@
1
+ export declare const checkIfLinksHaveProjects: (links: {
2
+ project_id?: string | null;
3
+ }[]) => boolean;
4
+ export declare const checkIfLinksHaveTargetResources: (links: {
5
+ target_resource_type?: string | null;
6
+ target_resource_id?: string | null;
7
+ }[]) => boolean;
8
+ export declare const checkIfLinksHaveExpiration: (links: {
9
+ expires_at?: Date | null;
10
+ }[]) => boolean;
11
+ export declare const checkIfLinksHaveUsageLimits: (links: {
12
+ max_uses?: number | null;
13
+ }[]) => boolean;
14
+ export declare const RESERVED_ACCESS_KEYS: string[];
15
+ export declare const isReservedAccessKey: (key: string) => boolean;
16
+ export declare function accessKeyChecks({ domain, key, checkExists, }: {
17
+ domain: string;
18
+ key: string;
19
+ checkExists?: (domain: string, key: string) => Promise<boolean>;
20
+ }): Promise<{
21
+ error: string | null;
22
+ }>;
23
+ //# sourceMappingURL=validation-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-utils.d.ts","sourceRoot":"","sources":["../../src/access-link/validation-utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,GACnC,OAAO;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,YACC,CAAA;AAE1C,eAAO,MAAM,+BAA+B,GAC1C,OAAO;IAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,YACR,CAAA;AAE/E,eAAO,MAAM,0BAA0B,GACrC,OAAO;IAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,EAAE,YACG,CAAA;AAE1C,eAAO,MAAM,2BAA2B,GACtC,OAAO;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,YACsB,CAAA;AAG7D,eAAO,MAAM,oBAAoB,UAahC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,OAEjD,CAAA;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,GAAG,EACH,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAChE,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA4BpC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // Access link validation utilities (following Dub's patterns)
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isReservedAccessKey = exports.RESERVED_ACCESS_KEYS = exports.checkIfLinksHaveUsageLimits = exports.checkIfLinksHaveExpiration = exports.checkIfLinksHaveTargetResources = exports.checkIfLinksHaveProjects = void 0;
5
+ exports.accessKeyChecks = accessKeyChecks;
6
+ const checkIfLinksHaveProjects = (links) => links.some((link) => link.project_id);
7
+ exports.checkIfLinksHaveProjects = checkIfLinksHaveProjects;
8
+ const checkIfLinksHaveTargetResources = (links) => links.some((link) => link.target_resource_type && link.target_resource_id);
9
+ exports.checkIfLinksHaveTargetResources = checkIfLinksHaveTargetResources;
10
+ const checkIfLinksHaveExpiration = (links) => links.some((link) => link.expires_at);
11
+ exports.checkIfLinksHaveExpiration = checkIfLinksHaveExpiration;
12
+ const checkIfLinksHaveUsageLimits = (links) => links.some((link) => link.max_uses && link.max_uses > 0);
13
+ exports.checkIfLinksHaveUsageLimits = checkIfLinksHaveUsageLimits;
14
+ // Reserved keys for access links
15
+ exports.RESERVED_ACCESS_KEYS = [
16
+ "admin",
17
+ "api",
18
+ "app",
19
+ "auth",
20
+ "dashboard",
21
+ "help",
22
+ "invite",
23
+ "login",
24
+ "logout",
25
+ "settings",
26
+ "support",
27
+ "www"
28
+ ];
29
+ const isReservedAccessKey = (key) => {
30
+ return exports.RESERVED_ACCESS_KEYS.includes(key.toLowerCase());
31
+ };
32
+ exports.isReservedAccessKey = isReservedAccessKey;
33
+ async function accessKeyChecks({ domain, key, checkExists, }) {
34
+ if ((0, exports.isReservedAccessKey)(key)) {
35
+ return {
36
+ error: `The key "${key}" is reserved and cannot be used for access links.`
37
+ };
38
+ }
39
+ if (key.length < 1) {
40
+ return {
41
+ error: "Access link key must be at least 1 character long."
42
+ };
43
+ }
44
+ if (key.length > 50) {
45
+ return {
46
+ error: "Access link key cannot be longer than 50 characters."
47
+ };
48
+ }
49
+ // Check if key already exists
50
+ if (checkExists && await checkExists(domain, key)) {
51
+ return {
52
+ error: `The key "${key}" already exists for domain "${domain}".`
53
+ };
54
+ }
55
+ return { error: null };
56
+ }
57
+ //# sourceMappingURL=validation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../src/access-link/validation-utils.ts"],"names":[],"mappings":";AAAA,8DAA8D;;;AAsC9D,0CAoCC;AAxEM,MAAM,wBAAwB,GAAG,CACtC,KAAuC,EACvC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAF7B,QAAA,wBAAwB,4BAEK;AAEnC,MAAM,+BAA+B,GAAG,CAC7C,KAAqF,EACrF,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAFlE,QAAA,+BAA+B,mCAEmC;AAExE,MAAM,0BAA0B,GAAG,CACxC,KAAqC,EACrC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAF7B,QAAA,0BAA0B,8BAEG;AAEnC,MAAM,2BAA2B,GAAG,CACzC,KAAqC,EACrC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;AAFhD,QAAA,2BAA2B,+BAEqB;AAE7D,iCAAiC;AACpB,QAAA,oBAAoB,GAAG;IAClC,OAAO;IACP,KAAK;IACL,KAAK;IACL,MAAM;IACN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,KAAK;CACN,CAAA;AAEM,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAW,EAAE;IAC1D,OAAO,4BAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;AACzD,CAAC,CAAA;AAFY,QAAA,mBAAmB,uBAE/B;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,MAAM,EACN,GAAG,EACH,WAAW,GAKZ;IAEC,IAAI,IAAA,2BAAmB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,YAAY,GAAG,oDAAoD;SAC3E,CAAA;IACH,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,KAAK,EAAE,oDAAoD;SAC5D,CAAA;IACH,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO;YACL,KAAK,EAAE,sDAAsD;SAC9D,CAAA;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,WAAW,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,KAAK,EAAE,YAAY,GAAG,gCAAgC,MAAM,IAAI;SACjE,CAAA;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function detectBot(req: Request): boolean;
2
+ //# sourceMappingURL=detect-bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-bot.d.ts","sourceRoot":"","sources":["../../src/analytics/detect-bot.ts"],"names":[],"mappings":"AAMA,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAe/C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectBot = detectBot;
4
+ // Basic bot detection patterns (simplified from Dub's implementation)
5
+ const UA_BOTS = [
6
+ "bot", "crawler", "spider", "scraper", "facebook", "twitter", "linkedin",
7
+ "whatsapp", "telegram", "slack", "discord", "googlebot", "bingbot"
8
+ ];
9
+ function detectBot(req) {
10
+ const searchParams = new URL(req.url).searchParams;
11
+ if (searchParams.get("bot")) {
12
+ return true;
13
+ }
14
+ // Check user agent
15
+ const userAgent = req.headers.get("user-agent")?.toLowerCase();
16
+ if (userAgent) {
17
+ return UA_BOTS.some((bot) => userAgent.includes(bot));
18
+ }
19
+ return false;
20
+ }
21
+ //# sourceMappingURL=detect-bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-bot.js","sourceRoot":"","sources":["../../src/analytics/detect-bot.ts"],"names":[],"mappings":";;AAMA,8BAeC;AArBD,sEAAsE;AACtE,MAAM,OAAO,GAAG;IACd,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IACxE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CACnE,CAAA;AAED,SAAgB,SAAS,CAAC,GAAY;IACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAA;IAElD,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,mBAAmB;IACnB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAE9D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function detectQr(req: Request): boolean;
2
+ //# sourceMappingURL=detect-qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-qr.d.ts","sourceRoot":"","sources":["../../src/analytics/detect-qr.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAI9C"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectQr = detectQr;
4
+ function detectQr(req) {
5
+ const searchParams = new URL(req.url).searchParams;
6
+ if (searchParams.get("qr") === "1")
7
+ return true;
8
+ return false;
9
+ }
10
+ //# sourceMappingURL=detect-qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-qr.js","sourceRoot":"","sources":["../../src/analytics/detect-qr.ts"],"names":[],"mappings":";;AAAA,4BAIC;AAJD,SAAgB,QAAQ,CAAC,GAAY;IACnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAA;IAClD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAC/C,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function getClickEvent({ tinybirdConfig, clickId, }: {
2
+ tinybirdConfig: {
3
+ apiKey: string;
4
+ apiUrl: string;
5
+ };
6
+ clickId: string;
7
+ }): Promise<any>;
8
+ //# sourceMappingURL=get-click-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-click-event.d.ts","sourceRoot":"","sources":["../../src/analytics/get-click-event.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,EAClC,cAAc,EACd,OAAO,GACR,EAAE;IACD,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,OAAO,EAAE,MAAM,CAAA;CAChB,gBAuBA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ // import { createTinybirdClient } from "./tinybird-client"
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getClickEvent = getClickEvent;
5
+ async function getClickEvent({ tinybirdConfig, clickId, }) {
6
+ // const tb = createTinybirdClient(tinybirdConfig)
7
+ try {
8
+ const response = await fetch(`${tinybirdConfig.apiUrl}/v0/pipes/get_click_event.json?click_id=${clickId}`, {
9
+ headers: {
10
+ Authorization: `Bearer ${tinybirdConfig.apiKey}`,
11
+ },
12
+ });
13
+ if (!response.ok) {
14
+ throw new Error(`Failed to get click event: ${response.status}`);
15
+ }
16
+ const data = await response.json();
17
+ return data.data?.[0] || null;
18
+ }
19
+ catch (error) {
20
+ console.error("Failed to get click event:", error);
21
+ return null;
22
+ }
23
+ }
24
+ //# sourceMappingURL=get-click-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-click-event.js","sourceRoot":"","sources":["../../src/analytics/get-click-event.ts"],"names":[],"mappings":";AAAA,2DAA2D;;AAE3D,sCA6BC;AA7BM,KAAK,UAAU,aAAa,CAAC,EAClC,cAAc,EACd,OAAO,GAIR;IACC,kDAAkD;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,CAAC,MAAM,2CAA2C,OAAO,EAAE,EAC5E;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,cAAc,CAAC,MAAM,EAAE;aACjD;SACF,CACF,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface GeolocationData {
2
+ continent?: string | null;
3
+ country?: string | null;
4
+ region?: string | null;
5
+ city?: string | null;
6
+ latitude?: string | null;
7
+ longitude?: string | null;
8
+ }
9
+ export declare function getGeolocationFromHeaders(headers: Record<string, string>): GeolocationData;
10
+ export declare function getGeolocationFromIP(ip: string): Promise<GeolocationData>;
11
+ export declare function getIPFromRequest(headers: Record<string, string>): string | null;
12
+ //# sourceMappingURL=get-geolocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-geolocation.d.ts","sourceRoot":"","sources":["../../src/analytics/get-geolocation.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAGD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAS1F;AAGD,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA0B/E;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAQ/E"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ // IP Geolocation utilities for access link analytics
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getGeolocationFromHeaders = getGeolocationFromHeaders;
5
+ exports.getGeolocationFromIP = getGeolocationFromIP;
6
+ exports.getIPFromRequest = getIPFromRequest;
7
+ // Extract geolocation from request headers (CloudFlare, AWS CloudFront, etc.)
8
+ function getGeolocationFromHeaders(headers) {
9
+ return {
10
+ continent: headers['cf-ipcontinent'] || headers['cloudfront-viewer-continent'] || null,
11
+ country: headers['cf-ipcountry'] || headers['cloudfront-viewer-country'] || null,
12
+ region: headers['cf-region'] || headers['cloudfront-viewer-country-region'] || null,
13
+ city: headers['cf-ipcity'] || null,
14
+ latitude: headers['cf-iplatitude'] || null,
15
+ longitude: headers['cf-iplongitude'] || null,
16
+ };
17
+ }
18
+ // Fallback geolocation using IP API service
19
+ async function getGeolocationFromIP(ip) {
20
+ if (!ip || ip === '127.0.0.1' || ip === '::1') {
21
+ return {};
22
+ }
23
+ try {
24
+ const response = await fetch(`http://ip-api.com/json/${ip}?fields=continent,country,regionName,city,lat,lon`);
25
+ if (!response.ok) {
26
+ return {};
27
+ }
28
+ const data = await response.json();
29
+ return {
30
+ continent: data.continent || null,
31
+ country: data.country || null,
32
+ region: data.regionName || null,
33
+ city: data.city || null,
34
+ latitude: data.lat?.toString() || null,
35
+ longitude: data.lon?.toString() || null,
36
+ };
37
+ }
38
+ catch (error) {
39
+ console.error('Failed to get geolocation from IP:', error);
40
+ return {};
41
+ }
42
+ }
43
+ // Get IP address from request
44
+ function getIPFromRequest(headers) {
45
+ return (headers['cf-connecting-ip'] ||
46
+ headers['x-forwarded-for']?.split(',')[0]?.trim() ||
47
+ headers['x-real-ip'] ||
48
+ headers['x-client-ip'] ||
49
+ null);
50
+ }
51
+ //# sourceMappingURL=get-geolocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-geolocation.js","sourceRoot":"","sources":["../../src/analytics/get-geolocation.ts"],"names":[],"mappings":";AAAA,qDAAqD;;AAYrD,8DASC;AAGD,oDA0BC;AAGD,4CAQC;AAlDD,8EAA8E;AAC9E,SAAgB,yBAAyB,CAAC,OAA+B;IACvE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,IAAI,IAAI;QACtF,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,2BAA2B,CAAC,IAAI,IAAI;QAChF,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,kCAAkC,CAAC,IAAI,IAAI;QACnF,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI;QAClC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI;QAC1C,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI;KAC7C,CAAA;AACH,CAAC;AAED,4CAA4C;AACrC,KAAK,UAAU,oBAAoB,CAAC,EAAU;IACnD,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,0BAA0B,EAAE,mDAAmD,CAAC,CAAA;QAE7G,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAElC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;YAC7B,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;YACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI;YACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI;SACxC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,SAAgB,gBAAgB,CAAC,OAA+B;IAC9D,OAAO,CACL,OAAO,CAAC,kBAAkB,CAAC;QAC3B,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACjD,OAAO,CAAC,WAAW,CAAC;QACpB,OAAO,CAAC,aAAa,CAAC;QACtB,IAAI,CACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function getGrantEvent({ tinybirdConfig, grantId, }: {
2
+ tinybirdConfig: {
3
+ apiKey: string;
4
+ apiUrl: string;
5
+ };
6
+ grantId: string;
7
+ }): Promise<any>;
8
+ //# sourceMappingURL=get-grant-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-grant-event.d.ts","sourceRoot":"","sources":["../../src/analytics/get-grant-event.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,EAClC,cAAc,EACd,OAAO,GACR,EAAE;IACD,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,OAAO,EAAE,MAAM,CAAA;CAChB,gBAuBA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ // import { createTinybirdClient } from "./tinybird-client"
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getGrantEvent = getGrantEvent;
5
+ async function getGrantEvent({ tinybirdConfig, grantId, }) {
6
+ // const tb = createTinybirdClient(tinybirdConfig)
7
+ try {
8
+ const response = await fetch(`${tinybirdConfig.apiUrl}/v0/pipes/get_grant_event.json?grant_id=${grantId}`, {
9
+ headers: {
10
+ Authorization: `Bearer ${tinybirdConfig.apiKey}`,
11
+ },
12
+ });
13
+ if (!response.ok) {
14
+ throw new Error(`Failed to get grant event: ${response.status}`);
15
+ }
16
+ const data = await response.json();
17
+ return data.data?.[0] || null;
18
+ }
19
+ catch (error) {
20
+ console.error("Failed to get grant event:", error);
21
+ return null;
22
+ }
23
+ }
24
+ //# sourceMappingURL=get-grant-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-grant-event.js","sourceRoot":"","sources":["../../src/analytics/get-grant-event.ts"],"names":[],"mappings":";AAAA,2DAA2D;;AAE3D,sCA6BC;AA7BM,KAAK,UAAU,aAAa,CAAC,EAClC,cAAc,EACd,OAAO,GAIR;IACC,kDAAkD;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,CAAC,MAAM,2CAA2C,OAAO,EAAE,EAC5E;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,cAAc,CAAC,MAAM,EAAE;aACjD;SACF,CACF,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Tinybird } from "@chronark/zod-bird";
2
+ export declare function createGetImportErrorLogs(tb: Tinybird): (params: any) => Promise<{
3
+ meta: {
4
+ name: string;
5
+ type: string;
6
+ }[];
7
+ rows?: number | undefined;
8
+ rows_before_limit_at_least?: number | undefined;
9
+ statistics?: {
10
+ elapsed?: number | undefined;
11
+ rows_read?: number | undefined;
12
+ bytes_read?: number | undefined;
13
+ } | undefined;
14
+ } & {
15
+ data: any[];
16
+ }>;
17
+ //# sourceMappingURL=get-import-error-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-import-error-logs.d.ts","sourceRoot":"","sources":["../../src/analytics/get-import-error-logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAS7C,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ;;;;;;;;eAYyhB,CAAC;iBAAuC,CAAC;kBAAwC,CAAC;;;;GAD/pB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGetImportErrorLogs = createGetImportErrorLogs;
4
+ const zod_1 = require("zod");
5
+ const importErrorLogSchema = zod_1.z.object({
6
+ project_id: zod_1.z.string(),
7
+ import_id: zod_1.z.string(),
8
+ error: zod_1.z.string(),
9
+ context: zod_1.z.string().default(""),
10
+ });
11
+ function createGetImportErrorLogs(tb) {
12
+ return tb.buildPipe({
13
+ pipe: "get_import_error_logs",
14
+ // @ts-ignore
15
+ parameters: zod_1.z.object({
16
+ projectId: zod_1.z.string(),
17
+ importId: zod_1.z.string(),
18
+ }),
19
+ // @ts-ignore
20
+ data: importErrorLogSchema,
21
+ });
22
+ }
23
+ //# sourceMappingURL=get-import-error-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-import-error-logs.js","sourceRoot":"","sources":["../../src/analytics/get-import-error-logs.ts"],"names":[],"mappings":";;AAUA,4DAWC;AArBD,6BAAuB;AAGvB,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAChC,CAAC,CAAA;AAEF,SAAgB,wBAAwB,CAAC,EAAY;IACnD,OAAO,EAAE,CAAC,SAAS,CAAC;QAClB,IAAI,EAAE,uBAAuB;QAC7B,aAAa;QACb,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;YACrB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;SACrB,CAAC;QACF,aAAa;QACb,IAAI,EAAE,oBAAoB;KAC3B,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Tinybird } from "@chronark/zod-bird";
2
+ export declare function createGetLeadEvents(tb: Tinybird): (params: any) => Promise<{
3
+ meta: {
4
+ name: string;
5
+ type: string;
6
+ }[];
7
+ rows?: number | undefined;
8
+ rows_before_limit_at_least?: number | undefined;
9
+ statistics?: {
10
+ elapsed?: number | undefined;
11
+ rows_read?: number | undefined;
12
+ bytes_read?: number | undefined;
13
+ } | undefined;
14
+ } & {
15
+ data: any[];
16
+ }>;
17
+ //# sourceMappingURL=get-lead-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-lead-events.d.ts","sourceRoot":"","sources":["../../src/analytics/get-lead-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ;;;;;;;;eAWgqB,CAAC;iBAAuC,CAAC;kBAAwC,CAAC;;;;GADjyB"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGetLeadEvents = createGetLeadEvents;
4
+ const zod_1 = require("zod");
5
+ const leads_1 = require("../zod/schemas/leads");
6
+ function createGetLeadEvents(tb) {
7
+ return tb.buildPipe({
8
+ pipe: "get_lead_events",
9
+ // @ts-ignore
10
+ parameters: zod_1.z.object({
11
+ userIds: zod_1.z.string().array(),
12
+ }),
13
+ // @ts-ignore
14
+ data: leads_1.leadEventSchemaTB,
15
+ });
16
+ }
17
+ //# sourceMappingURL=get-lead-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-lead-events.js","sourceRoot":"","sources":["../../src/analytics/get-lead-events.ts"],"names":[],"mappings":";;AAIA,kDAUC;AAdD,6BAAuB;AAEvB,gDAAwD;AAExD,SAAgB,mBAAmB,CAAC,EAAY;IAC9C,OAAO,EAAE,CAAC,SAAS,CAAC;QAClB,IAAI,EAAE,iBAAiB;QACvB,aAAa;QACb,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;SAC5B,CAAC;QACF,aAAa;QACb,IAAI,EAAE,yBAAiB;KACxB,CAAC,CAAA;AACJ,CAAC"}