@formo/analytics-react-native 0.1.0

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 (247) hide show
  1. package/README.md +302 -0
  2. package/lib/commonjs/FormoAnalytics.js +526 -0
  3. package/lib/commonjs/FormoAnalytics.js.map +1 -0
  4. package/lib/commonjs/FormoAnalyticsProvider.js +265 -0
  5. package/lib/commonjs/FormoAnalyticsProvider.js.map +1 -0
  6. package/lib/commonjs/constants/config.js +69 -0
  7. package/lib/commonjs/constants/config.js.map +1 -0
  8. package/lib/commonjs/constants/events.js +30 -0
  9. package/lib/commonjs/constants/events.js.map +1 -0
  10. package/lib/commonjs/constants/index.js +39 -0
  11. package/lib/commonjs/constants/index.js.map +1 -0
  12. package/lib/commonjs/constants/storage.js +23 -0
  13. package/lib/commonjs/constants/storage.js.map +1 -0
  14. package/lib/commonjs/index.js +65 -0
  15. package/lib/commonjs/index.js.map +1 -0
  16. package/lib/commonjs/lib/consent/index.js +56 -0
  17. package/lib/commonjs/lib/consent/index.js.map +1 -0
  18. package/lib/commonjs/lib/event/EventFactory.js +493 -0
  19. package/lib/commonjs/lib/event/EventFactory.js.map +1 -0
  20. package/lib/commonjs/lib/event/EventManager.js +46 -0
  21. package/lib/commonjs/lib/event/EventManager.js.map +1 -0
  22. package/lib/commonjs/lib/event/EventQueue.js +290 -0
  23. package/lib/commonjs/lib/event/EventQueue.js.map +1 -0
  24. package/lib/commonjs/lib/event/index.js +50 -0
  25. package/lib/commonjs/lib/event/index.js.map +1 -0
  26. package/lib/commonjs/lib/event/types.js +6 -0
  27. package/lib/commonjs/lib/event/types.js.map +1 -0
  28. package/lib/commonjs/lib/lifecycle/index.js +196 -0
  29. package/lib/commonjs/lib/lifecycle/index.js.map +1 -0
  30. package/lib/commonjs/lib/logger/index.js +48 -0
  31. package/lib/commonjs/lib/logger/index.js.map +1 -0
  32. package/lib/commonjs/lib/session/index.js +109 -0
  33. package/lib/commonjs/lib/session/index.js.map +1 -0
  34. package/lib/commonjs/lib/storage/AsyncStorageAdapter.js +164 -0
  35. package/lib/commonjs/lib/storage/AsyncStorageAdapter.js.map +1 -0
  36. package/lib/commonjs/lib/storage/MemoryStorage.js +41 -0
  37. package/lib/commonjs/lib/storage/MemoryStorage.js.map +1 -0
  38. package/lib/commonjs/lib/storage/StorageBlueprint.js +24 -0
  39. package/lib/commonjs/lib/storage/StorageBlueprint.js.map +1 -0
  40. package/lib/commonjs/lib/storage/StorageManager.js +126 -0
  41. package/lib/commonjs/lib/storage/StorageManager.js.map +1 -0
  42. package/lib/commonjs/lib/storage/index.js +49 -0
  43. package/lib/commonjs/lib/storage/index.js.map +1 -0
  44. package/lib/commonjs/lib/storage/types.js +2 -0
  45. package/lib/commonjs/lib/storage/types.js.map +1 -0
  46. package/lib/commonjs/lib/wagmi/WagmiEventHandler.js +445 -0
  47. package/lib/commonjs/lib/wagmi/WagmiEventHandler.js.map +1 -0
  48. package/lib/commonjs/lib/wagmi/index.js +28 -0
  49. package/lib/commonjs/lib/wagmi/index.js.map +1 -0
  50. package/lib/commonjs/lib/wagmi/types.js +2 -0
  51. package/lib/commonjs/lib/wagmi/types.js.map +1 -0
  52. package/lib/commonjs/types/base.js +6 -0
  53. package/lib/commonjs/types/base.js.map +1 -0
  54. package/lib/commonjs/types/events.js +22 -0
  55. package/lib/commonjs/types/events.js.map +1 -0
  56. package/lib/commonjs/types/index.js +28 -0
  57. package/lib/commonjs/types/index.js.map +1 -0
  58. package/lib/commonjs/utils/address.js +82 -0
  59. package/lib/commonjs/utils/address.js.map +1 -0
  60. package/lib/commonjs/utils/hash.js +30 -0
  61. package/lib/commonjs/utils/hash.js.map +1 -0
  62. package/lib/commonjs/utils/helpers.js +116 -0
  63. package/lib/commonjs/utils/helpers.js.map +1 -0
  64. package/lib/commonjs/utils/index.js +61 -0
  65. package/lib/commonjs/utils/index.js.map +1 -0
  66. package/lib/commonjs/utils/timestamp.js +34 -0
  67. package/lib/commonjs/utils/timestamp.js.map +1 -0
  68. package/lib/commonjs/utils/trafficSource.js +147 -0
  69. package/lib/commonjs/utils/trafficSource.js.map +1 -0
  70. package/lib/commonjs/version.js +10 -0
  71. package/lib/commonjs/version.js.map +1 -0
  72. package/lib/module/FormoAnalytics.js +519 -0
  73. package/lib/module/FormoAnalytics.js.map +1 -0
  74. package/lib/module/FormoAnalyticsProvider.js +256 -0
  75. package/lib/module/FormoAnalyticsProvider.js.map +1 -0
  76. package/lib/module/constants/config.js +62 -0
  77. package/lib/module/constants/config.js.map +1 -0
  78. package/lib/module/constants/events.js +24 -0
  79. package/lib/module/constants/events.js.map +1 -0
  80. package/lib/module/constants/index.js +4 -0
  81. package/lib/module/constants/index.js.map +1 -0
  82. package/lib/module/constants/storage.js +17 -0
  83. package/lib/module/constants/storage.js.map +1 -0
  84. package/lib/module/index.js +51 -0
  85. package/lib/module/index.js.map +1 -0
  86. package/lib/module/lib/consent/index.js +49 -0
  87. package/lib/module/lib/consent/index.js.map +1 -0
  88. package/lib/module/lib/event/EventFactory.js +488 -0
  89. package/lib/module/lib/event/EventFactory.js.map +1 -0
  90. package/lib/module/lib/event/EventManager.js +41 -0
  91. package/lib/module/lib/event/EventManager.js.map +1 -0
  92. package/lib/module/lib/event/EventQueue.js +283 -0
  93. package/lib/module/lib/event/EventQueue.js.map +1 -0
  94. package/lib/module/lib/event/index.js +5 -0
  95. package/lib/module/lib/event/index.js.map +1 -0
  96. package/lib/module/lib/event/types.js +2 -0
  97. package/lib/module/lib/event/types.js.map +1 -0
  98. package/lib/module/lib/lifecycle/index.js +190 -0
  99. package/lib/module/lib/lifecycle/index.js.map +1 -0
  100. package/lib/module/lib/logger/index.js +42 -0
  101. package/lib/module/lib/logger/index.js.map +1 -0
  102. package/lib/module/lib/session/index.js +92 -0
  103. package/lib/module/lib/session/index.js.map +1 -0
  104. package/lib/module/lib/storage/AsyncStorageAdapter.js +158 -0
  105. package/lib/module/lib/storage/AsyncStorageAdapter.js.map +1 -0
  106. package/lib/module/lib/storage/MemoryStorage.js +35 -0
  107. package/lib/module/lib/storage/MemoryStorage.js.map +1 -0
  108. package/lib/module/lib/storage/StorageBlueprint.js +18 -0
  109. package/lib/module/lib/storage/StorageBlueprint.js.map +1 -0
  110. package/lib/module/lib/storage/StorageManager.js +115 -0
  111. package/lib/module/lib/storage/StorageManager.js.map +1 -0
  112. package/lib/module/lib/storage/index.js +5 -0
  113. package/lib/module/lib/storage/index.js.map +1 -0
  114. package/lib/module/lib/storage/types.js +2 -0
  115. package/lib/module/lib/storage/types.js.map +1 -0
  116. package/lib/module/lib/wagmi/WagmiEventHandler.js +439 -0
  117. package/lib/module/lib/wagmi/WagmiEventHandler.js.map +1 -0
  118. package/lib/module/lib/wagmi/index.js +3 -0
  119. package/lib/module/lib/wagmi/index.js.map +1 -0
  120. package/lib/module/lib/wagmi/types.js +2 -0
  121. package/lib/module/lib/wagmi/types.js.map +1 -0
  122. package/lib/module/types/base.js +2 -0
  123. package/lib/module/types/base.js.map +1 -0
  124. package/lib/module/types/events.js +17 -0
  125. package/lib/module/types/events.js.map +1 -0
  126. package/lib/module/types/index.js +3 -0
  127. package/lib/module/types/index.js.map +1 -0
  128. package/lib/module/utils/address.js +74 -0
  129. package/lib/module/utils/address.js.map +1 -0
  130. package/lib/module/utils/hash.js +24 -0
  131. package/lib/module/utils/hash.js.map +1 -0
  132. package/lib/module/utils/helpers.js +105 -0
  133. package/lib/module/utils/helpers.js.map +1 -0
  134. package/lib/module/utils/index.js +6 -0
  135. package/lib/module/utils/index.js.map +1 -0
  136. package/lib/module/utils/timestamp.js +26 -0
  137. package/lib/module/utils/timestamp.js.map +1 -0
  138. package/lib/module/utils/trafficSource.js +137 -0
  139. package/lib/module/utils/trafficSource.js.map +1 -0
  140. package/lib/module/version.js +4 -0
  141. package/lib/module/version.js.map +1 -0
  142. package/lib/typescript/FormoAnalytics.d.ts +163 -0
  143. package/lib/typescript/FormoAnalytics.d.ts.map +1 -0
  144. package/lib/typescript/FormoAnalyticsProvider.d.ts +29 -0
  145. package/lib/typescript/FormoAnalyticsProvider.d.ts.map +1 -0
  146. package/lib/typescript/constants/config.d.ts +8 -0
  147. package/lib/typescript/constants/config.d.ts.map +1 -0
  148. package/lib/typescript/constants/events.d.ts +23 -0
  149. package/lib/typescript/constants/events.d.ts.map +1 -0
  150. package/lib/typescript/constants/index.d.ts +4 -0
  151. package/lib/typescript/constants/index.d.ts.map +1 -0
  152. package/lib/typescript/constants/storage.d.ts +10 -0
  153. package/lib/typescript/constants/storage.d.ts.map +1 -0
  154. package/lib/typescript/index.d.ts +44 -0
  155. package/lib/typescript/index.d.ts.map +1 -0
  156. package/lib/typescript/lib/consent/index.d.ts +13 -0
  157. package/lib/typescript/lib/consent/index.d.ts.map +1 -0
  158. package/lib/typescript/lib/event/EventFactory.d.ts +61 -0
  159. package/lib/typescript/lib/event/EventFactory.d.ts.map +1 -0
  160. package/lib/typescript/lib/event/EventManager.d.ts +17 -0
  161. package/lib/typescript/lib/event/EventManager.d.ts.map +1 -0
  162. package/lib/typescript/lib/event/EventQueue.d.ts +74 -0
  163. package/lib/typescript/lib/event/EventQueue.d.ts.map +1 -0
  164. package/lib/typescript/lib/event/index.d.ts +5 -0
  165. package/lib/typescript/lib/event/index.d.ts.map +1 -0
  166. package/lib/typescript/lib/event/types.d.ts +23 -0
  167. package/lib/typescript/lib/event/types.d.ts.map +1 -0
  168. package/lib/typescript/lib/lifecycle/index.d.ts +46 -0
  169. package/lib/typescript/lib/lifecycle/index.d.ts.map +1 -0
  170. package/lib/typescript/lib/logger/index.d.ts +19 -0
  171. package/lib/typescript/lib/logger/index.d.ts.map +1 -0
  172. package/lib/typescript/lib/session/index.d.ts +41 -0
  173. package/lib/typescript/lib/session/index.d.ts.map +1 -0
  174. package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts +48 -0
  175. package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts.map +1 -0
  176. package/lib/typescript/lib/storage/MemoryStorage.d.ts +18 -0
  177. package/lib/typescript/lib/storage/MemoryStorage.d.ts.map +1 -0
  178. package/lib/typescript/lib/storage/StorageBlueprint.d.ts +21 -0
  179. package/lib/typescript/lib/storage/StorageBlueprint.d.ts.map +1 -0
  180. package/lib/typescript/lib/storage/StorageManager.d.ts +45 -0
  181. package/lib/typescript/lib/storage/StorageManager.d.ts.map +1 -0
  182. package/lib/typescript/lib/storage/index.d.ts +5 -0
  183. package/lib/typescript/lib/storage/index.d.ts.map +1 -0
  184. package/lib/typescript/lib/storage/types.d.ts +22 -0
  185. package/lib/typescript/lib/storage/types.d.ts.map +1 -0
  186. package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts +104 -0
  187. package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts.map +1 -0
  188. package/lib/typescript/lib/wagmi/index.d.ts +3 -0
  189. package/lib/typescript/lib/wagmi/index.d.ts.map +1 -0
  190. package/lib/typescript/lib/wagmi/types.d.ts +54 -0
  191. package/lib/typescript/lib/wagmi/types.d.ts.map +1 -0
  192. package/lib/typescript/types/base.d.ts +219 -0
  193. package/lib/typescript/types/base.d.ts.map +1 -0
  194. package/lib/typescript/types/events.d.ts +111 -0
  195. package/lib/typescript/types/events.d.ts.map +1 -0
  196. package/lib/typescript/types/index.d.ts +3 -0
  197. package/lib/typescript/types/index.d.ts.map +1 -0
  198. package/lib/typescript/utils/address.d.ts +25 -0
  199. package/lib/typescript/utils/address.d.ts.map +1 -0
  200. package/lib/typescript/utils/hash.d.ts +10 -0
  201. package/lib/typescript/utils/hash.d.ts.map +1 -0
  202. package/lib/typescript/utils/helpers.d.ts +26 -0
  203. package/lib/typescript/utils/helpers.d.ts.map +1 -0
  204. package/lib/typescript/utils/index.d.ts +6 -0
  205. package/lib/typescript/utils/index.d.ts.map +1 -0
  206. package/lib/typescript/utils/timestamp.d.ts +13 -0
  207. package/lib/typescript/utils/timestamp.d.ts.map +1 -0
  208. package/lib/typescript/utils/trafficSource.d.ts +30 -0
  209. package/lib/typescript/utils/trafficSource.d.ts.map +1 -0
  210. package/lib/typescript/version.d.ts +2 -0
  211. package/lib/typescript/version.d.ts.map +1 -0
  212. package/package.json +143 -0
  213. package/src/FormoAnalytics.ts +685 -0
  214. package/src/FormoAnalyticsProvider.tsx +296 -0
  215. package/src/constants/config.ts +62 -0
  216. package/src/constants/events.ts +26 -0
  217. package/src/constants/index.ts +3 -0
  218. package/src/constants/storage.ts +16 -0
  219. package/src/index.ts +55 -0
  220. package/src/lib/consent/index.ts +52 -0
  221. package/src/lib/event/EventFactory.ts +682 -0
  222. package/src/lib/event/EventManager.ts +50 -0
  223. package/src/lib/event/EventQueue.ts +371 -0
  224. package/src/lib/event/index.ts +4 -0
  225. package/src/lib/event/types.ts +107 -0
  226. package/src/lib/lifecycle/index.ts +215 -0
  227. package/src/lib/logger/index.ts +56 -0
  228. package/src/lib/session/index.ts +103 -0
  229. package/src/lib/storage/AsyncStorageAdapter.ts +173 -0
  230. package/src/lib/storage/MemoryStorage.ts +43 -0
  231. package/src/lib/storage/StorageBlueprint.ts +30 -0
  232. package/src/lib/storage/StorageManager.ts +121 -0
  233. package/src/lib/storage/index.ts +4 -0
  234. package/src/lib/storage/types.ts +23 -0
  235. package/src/lib/wagmi/WagmiEventHandler.ts +574 -0
  236. package/src/lib/wagmi/index.ts +2 -0
  237. package/src/lib/wagmi/types.ts +71 -0
  238. package/src/types/base.ts +287 -0
  239. package/src/types/events.ts +140 -0
  240. package/src/types/index.ts +2 -0
  241. package/src/utils/address.ts +84 -0
  242. package/src/utils/hash.ts +23 -0
  243. package/src/utils/helpers.ts +139 -0
  244. package/src/utils/index.ts +5 -0
  245. package/src/utils/timestamp.ts +25 -0
  246. package/src/utils/trafficSource.ts +153 -0
  247. package/src/version.ts +3 -0
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Clamp a number between min and max values
3
+ */
4
+ export function clampNumber(value, max, min) {
5
+ return Math.min(Math.max(value, min), max);
6
+ }
7
+
8
+ /**
9
+ * Check if value is undefined
10
+ */
11
+ export function isUndefined(value) {
12
+ return value === undefined;
13
+ }
14
+
15
+ /**
16
+ * Convert a camelCase/PascalCase string to snake_case
17
+ * Handles consecutive uppercase letters (acronyms) correctly:
18
+ * - "userID" -> "user_id"
19
+ * - "XMLParser" -> "xml_parser"
20
+ * - "getHTTPResponse" -> "get_http_response"
21
+ */
22
+ function camelToSnake(str) {
23
+ return str
24
+ // Insert underscore before sequences of uppercase followed by lowercase (e.g., "XMLParser" -> "XML_Parser")
25
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")
26
+ // Insert underscore before single uppercase preceded by lowercase (e.g., "userID" -> "user_ID")
27
+ .replace(/([a-z\d])([A-Z])/g, "$1_$2").toLowerCase();
28
+ }
29
+
30
+ /**
31
+ * Check if value is a plain object (not Date, Map, Set, RegExp, etc.)
32
+ */
33
+ function isPlainObject(value) {
34
+ if (value === null || typeof value !== "object") {
35
+ return false;
36
+ }
37
+ const proto = Object.getPrototypeOf(value);
38
+ return proto === Object.prototype || proto === null;
39
+ }
40
+
41
+ /**
42
+ * Convert object keys to snake_case (recursively handles nested objects and arrays)
43
+ * Preserves Date, Map, Set, RegExp, and other built-in objects unchanged
44
+ */
45
+ export function toSnakeCase(obj) {
46
+ const result = {};
47
+ for (const [key, value] of Object.entries(obj)) {
48
+ const snakeKey = camelToSnake(key);
49
+ if (Array.isArray(value)) {
50
+ // Recursively convert plain objects inside arrays
51
+ result[snakeKey] = value.map(item => isPlainObject(item) ? toSnakeCase(item) : item);
52
+ } else if (isPlainObject(value)) {
53
+ result[snakeKey] = toSnakeCase(value);
54
+ } else {
55
+ // Preserve Date, Map, Set, RegExp, and other built-in objects unchanged
56
+ result[snakeKey] = value;
57
+ }
58
+ }
59
+ return result;
60
+ }
61
+
62
+ /**
63
+ * Deep merge two objects
64
+ */
65
+ export function mergeDeepRight(target, source) {
66
+ const output = {
67
+ ...target
68
+ };
69
+ for (const key in source) {
70
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
71
+ const sourceValue = source[key];
72
+ const targetValue = output[key];
73
+ if (sourceValue !== null && typeof sourceValue === "object" && !Array.isArray(sourceValue) && targetValue !== null && typeof targetValue === "object" && !Array.isArray(targetValue)) {
74
+ output[key] = mergeDeepRight(targetValue, sourceValue);
75
+ } else if (sourceValue !== undefined) {
76
+ output[key] = sourceValue;
77
+ }
78
+ }
79
+ }
80
+ return output;
81
+ }
82
+
83
+ /**
84
+ * Get action descriptor for logging
85
+ */
86
+ export function getActionDescriptor(type, properties) {
87
+ if (type === "track" && properties?.event) {
88
+ return `track:${properties.event}`;
89
+ }
90
+ if (type === "screen" && properties?.name) {
91
+ return `screen:${properties.name}`;
92
+ }
93
+ return type;
94
+ }
95
+
96
+ /**
97
+ * Check if error is a network error
98
+ */
99
+ export function isNetworkError(error) {
100
+ if (!error) return false;
101
+ const message = error instanceof Error ? error.message : String(error);
102
+ const networkErrorMessages = ["Network request failed", "Failed to fetch", "Network Error", "timeout", "ETIMEDOUT", "ECONNREFUSED", "ENOTFOUND"];
103
+ return networkErrorMessages.some(msg => message.toLowerCase().includes(msg.toLowerCase()));
104
+ }
105
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clampNumber","value","max","min","Math","isUndefined","undefined","camelToSnake","str","replace","toLowerCase","isPlainObject","proto","Object","getPrototypeOf","prototype","toSnakeCase","obj","result","key","entries","snakeKey","Array","isArray","map","item","mergeDeepRight","target","source","output","hasOwnProperty","call","sourceValue","targetValue","getActionDescriptor","type","properties","event","name","isNetworkError","error","message","Error","String","networkErrorMessages","some","msg","includes"],"sourceRoot":"../../../src","sources":["utils/helpers.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ export * from "./address";
2
+ export * from "./hash";
3
+ export * from "./timestamp";
4
+ export * from "./helpers";
5
+ export * from "./trafficSource";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB,cAAc,aAAa;AAC3B,cAAc,WAAW;AACzB,cAAc,iBAAiB","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Get current time in ISO format
3
+ */
4
+ export function getCurrentTimeFormatted() {
5
+ return new Date().toISOString();
6
+ }
7
+
8
+ /**
9
+ * Format date to YYYY-MM-DD HH:mm format for hashing
10
+ */
11
+ export function toDateHourMinute(date) {
12
+ const year = date.getFullYear();
13
+ const month = String(date.getMonth() + 1).padStart(2, "0");
14
+ const day = String(date.getDate()).padStart(2, "0");
15
+ const hours = String(date.getHours()).padStart(2, "0");
16
+ const minutes = String(date.getMinutes()).padStart(2, "0");
17
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
18
+ }
19
+
20
+ /**
21
+ * Convert milliseconds to seconds
22
+ */
23
+ export function millisecondsToSecond(ms) {
24
+ return Math.floor(ms / 1000);
25
+ }
26
+ //# sourceMappingURL=timestamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getCurrentTimeFormatted","Date","toISOString","toDateHourMinute","date","year","getFullYear","month","String","getMonth","padStart","day","getDate","hours","getHours","minutes","getMinutes","millisecondsToSecond","ms","Math","floor"],"sourceRoot":"../../../src","sources":["utils/timestamp.ts"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,SAASA,uBAAuBA,CAAA,EAAW;EAChD,OAAO,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACjC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,IAAU,EAAU;EACnD,MAAMC,IAAI,GAAGD,IAAI,CAACE,WAAW,CAAC,CAAC;EAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACJ,IAAI,CAACK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,MAAMC,GAAG,GAAGH,MAAM,CAACJ,IAAI,CAACQ,OAAO,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnD,MAAMG,KAAK,GAAGL,MAAM,CAACJ,IAAI,CAACU,QAAQ,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACtD,MAAMK,OAAO,GAAGP,MAAM,CAACJ,IAAI,CAACY,UAAU,CAAC,CAAC,CAAC,CAACN,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,OAAO,GAAGL,IAAI,IAAIE,KAAK,IAAII,GAAG,IAAIE,KAAK,IAAIE,OAAO,EAAE;AACtD;;AAEA;AACA;AACA;AACA,OAAO,SAASE,oBAAoBA,CAACC,EAAU,EAAU;EACvD,OAAOC,IAAI,CAACC,KAAK,CAACF,EAAE,GAAG,IAAI,CAAC;AAC9B","ignoreList":[]}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Traffic Source Utilities
3
+ * Parse UTM parameters and referral information from URLs
4
+ */
5
+
6
+ import { logger } from "../lib/logger";
7
+ import { storage } from "../lib/storage";
8
+ import { SESSION_TRAFFIC_SOURCE_KEY } from "../constants";
9
+ /**
10
+ * Parse UTM parameters and referral info from URL
11
+ * Supports both web URLs (https://) and deep link URLs (myapp://)
12
+ */
13
+ export function parseTrafficSource(url, customRefParams, pathPattern) {
14
+ try {
15
+ // Handle deep link URLs that may not have standard URL format
16
+ let urlObj;
17
+ try {
18
+ urlObj = new URL(url);
19
+ } catch {
20
+ // If URL parsing fails, try to extract query string manually
21
+ const queryStart = url.indexOf("?");
22
+ if (queryStart === -1) {
23
+ return {
24
+ referrer: url
25
+ };
26
+ }
27
+
28
+ // Create a fake URL for parsing query params
29
+ urlObj = new URL(`http://localhost${url.substring(queryStart)}`);
30
+ }
31
+ const params = urlObj.searchParams;
32
+ const trafficSource = {};
33
+
34
+ // Extract UTM parameters
35
+ if (params.has("utm_source")) trafficSource.utm_source = params.get("utm_source");
36
+ if (params.has("utm_medium")) trafficSource.utm_medium = params.get("utm_medium");
37
+ if (params.has("utm_campaign")) trafficSource.utm_campaign = params.get("utm_campaign");
38
+ if (params.has("utm_term")) trafficSource.utm_term = params.get("utm_term");
39
+ if (params.has("utm_content")) trafficSource.utm_content = params.get("utm_content");
40
+
41
+ // Extract referral codes (check common parameter names + custom ones, deduplicated)
42
+ const defaultRefParams = ["ref", "referral", "refcode", "referrer_code"];
43
+ const refParams = customRefParams ? [...new Set([...defaultRefParams, ...customRefParams])] : defaultRefParams;
44
+ for (const param of refParams) {
45
+ if (params.has(param)) {
46
+ trafficSource.ref = params.get(param);
47
+ break;
48
+ }
49
+ }
50
+
51
+ // Extract referral code from URL path if pathPattern is provided
52
+ if (pathPattern && !trafficSource.ref) {
53
+ try {
54
+ const pathRegex = new RegExp(pathPattern);
55
+ const pathname = urlObj.pathname;
56
+ const match = pathname.match(pathRegex);
57
+ if (match && match[1]) {
58
+ trafficSource.ref = match[1];
59
+ }
60
+ } catch (e) {
61
+ logger.error("Error parsing pathPattern for referral:", e);
62
+ }
63
+ }
64
+
65
+ // Store the full URL as referrer
66
+ trafficSource.referrer = url;
67
+ return trafficSource;
68
+ } catch (error) {
69
+ logger.error("Error parsing traffic source from URL:", error);
70
+ return {
71
+ referrer: url
72
+ };
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Store traffic source in session storage
78
+ * Only stores if we have actual UTM or ref data
79
+ */
80
+ export function storeTrafficSource(trafficSource) {
81
+ try {
82
+ // Check if we have meaningful data to store (not just referrer)
83
+ const hasData = trafficSource.utm_source || trafficSource.utm_medium || trafficSource.utm_campaign || trafficSource.utm_term || trafficSource.utm_content || trafficSource.ref;
84
+ if (hasData || trafficSource.referrer) {
85
+ storage().set(SESSION_TRAFFIC_SOURCE_KEY, JSON.stringify(trafficSource));
86
+ logger.debug("Stored traffic source:", trafficSource);
87
+ }
88
+ } catch (error) {
89
+ logger.error("Error storing traffic source:", error);
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Get stored traffic source from session
95
+ * Returns undefined if no traffic source is stored
96
+ */
97
+ export function getStoredTrafficSource() {
98
+ try {
99
+ const stored = storage().get(SESSION_TRAFFIC_SOURCE_KEY);
100
+ if (stored && typeof stored === "string") {
101
+ return JSON.parse(stored);
102
+ }
103
+ } catch (error) {
104
+ logger.debug("Failed to get stored traffic source:", error);
105
+ }
106
+ return undefined;
107
+ }
108
+
109
+ /**
110
+ * Clear stored traffic source from session
111
+ */
112
+ export function clearTrafficSource() {
113
+ try {
114
+ storage().remove(SESSION_TRAFFIC_SOURCE_KEY);
115
+ logger.debug("Cleared traffic source from session");
116
+ } catch (error) {
117
+ logger.error("Error clearing traffic source:", error);
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Merge stored traffic source with current context
123
+ * Stored traffic source is used as fallback - current context takes priority
124
+ */
125
+ export function mergeWithStoredTrafficSource(context) {
126
+ const stored = getStoredTrafficSource();
127
+ if (!stored) {
128
+ return context || {};
129
+ }
130
+
131
+ // Merge: stored values as base, context values override
132
+ return {
133
+ ...stored,
134
+ ...(context || {})
135
+ };
136
+ }
137
+ //# sourceMappingURL=trafficSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","storage","SESSION_TRAFFIC_SOURCE_KEY","parseTrafficSource","url","customRefParams","pathPattern","urlObj","URL","queryStart","indexOf","referrer","substring","params","searchParams","trafficSource","has","utm_source","get","utm_medium","utm_campaign","utm_term","utm_content","defaultRefParams","refParams","Set","param","ref","pathRegex","RegExp","pathname","match","e","error","storeTrafficSource","hasData","set","JSON","stringify","debug","getStoredTrafficSource","stored","parse","undefined","clearTrafficSource","remove","mergeWithStoredTrafficSource","context"],"sourceRoot":"../../../src","sources":["utils/trafficSource.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ // This file is auto-generated by scripts/update-version.js during npm version
2
+ // Do not edit manually - it will be overwritten
3
+ export const version = '0.1.0';
4
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["version"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA;AACA;AACA,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * FormoAnalytics for React Native
3
+ *
4
+ * Main SDK class for tracking wallet events and user analytics in mobile dApps
5
+ */
6
+ import { AsyncStorageInterface } from "./lib/storage";
7
+ import { Address, ChainID, Config, IFormoAnalytics, IFormoEventContext, IFormoEventProperties, Options, SignatureStatus, TransactionStatus } from "./types";
8
+ export declare class FormoAnalytics implements IFormoAnalytics {
9
+ readonly writeKey: string;
10
+ options: Options;
11
+ private session;
12
+ private eventManager;
13
+ private eventQueue;
14
+ private wagmiHandler?;
15
+ private lifecycleManager?;
16
+ config: Config;
17
+ currentChainId?: ChainID;
18
+ currentAddress?: Address;
19
+ currentUserId?: string;
20
+ private constructor();
21
+ /**
22
+ * Initialize the SDK
23
+ * @param writeKey - Your Formo write key
24
+ * @param options - Configuration options
25
+ * @param asyncStorage - AsyncStorage instance from @react-native-async-storage/async-storage
26
+ */
27
+ static init(writeKey: string, options?: Options, asyncStorage?: AsyncStorageInterface): Promise<FormoAnalytics>;
28
+ /**
29
+ * Track a screen view (mobile equivalent of page view)
30
+ */
31
+ screen(name: string, category?: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
32
+ /**
33
+ * Set traffic source from deep link URL
34
+ * Parses UTM parameters and referrer information from URL
35
+ * This is automatically persisted for the session
36
+ *
37
+ * @param url - Deep link URL (e.g., "myapp://product?utm_source=facebook&ref=friend123")
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * import { Linking } from 'react-native';
42
+ *
43
+ * // Listen for deep links
44
+ * Linking.addEventListener('url', (event) => {
45
+ * formo.setTrafficSourceFromUrl(event.url);
46
+ * });
47
+ *
48
+ * // Or get initial URL
49
+ * Linking.getInitialURL().then((url) => {
50
+ * if (url) formo.setTrafficSourceFromUrl(url);
51
+ * });
52
+ * ```
53
+ */
54
+ setTrafficSourceFromUrl(url: string): void;
55
+ /**
56
+ * Reset the current user session
57
+ */
58
+ reset(): void;
59
+ /**
60
+ * Clean up resources
61
+ */
62
+ cleanup(): Promise<void>;
63
+ /**
64
+ * Track wallet connect event
65
+ */
66
+ connect({ chainId, address }: {
67
+ chainId: ChainID;
68
+ address: Address;
69
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
70
+ /**
71
+ * Track wallet disconnect event
72
+ */
73
+ disconnect(params?: {
74
+ chainId?: ChainID;
75
+ address?: Address;
76
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
77
+ /**
78
+ * Track chain change event
79
+ */
80
+ chain({ chainId, address }: {
81
+ chainId: ChainID;
82
+ address?: Address;
83
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
84
+ /**
85
+ * Track signature event
86
+ */
87
+ signature({ status, chainId, address, message, signatureHash, }: {
88
+ status: SignatureStatus;
89
+ chainId?: ChainID;
90
+ address: Address;
91
+ message: string;
92
+ signatureHash?: string;
93
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
94
+ /**
95
+ * Track transaction event
96
+ */
97
+ transaction({ status, chainId, address, data, to, value, transactionHash, function_name, function_args, }: {
98
+ status: TransactionStatus;
99
+ chainId: ChainID;
100
+ address: Address;
101
+ data?: string;
102
+ to?: string;
103
+ value?: string;
104
+ transactionHash?: string;
105
+ function_name?: string;
106
+ function_args?: Record<string, unknown>;
107
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
108
+ /**
109
+ * Track identify event
110
+ */
111
+ identify(params: {
112
+ address: Address;
113
+ providerName?: string;
114
+ userId?: string;
115
+ rdns?: string;
116
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
117
+ /**
118
+ * Track detect wallet event
119
+ */
120
+ detect({ providerName, rdns }: {
121
+ providerName: string;
122
+ rdns: string;
123
+ }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
124
+ /**
125
+ * Track custom event
126
+ */
127
+ track(event: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
128
+ /**
129
+ * Opt out of tracking
130
+ */
131
+ optOutTracking(): void;
132
+ /**
133
+ * Opt back into tracking
134
+ */
135
+ optInTracking(): void;
136
+ /**
137
+ * Check if user has opted out
138
+ */
139
+ hasOptedOutTracking(): boolean;
140
+ /**
141
+ * Check if autocapture is enabled for event type
142
+ */
143
+ isAutocaptureEnabled(eventType: "connect" | "disconnect" | "signature" | "transaction" | "chain" | "lifecycle"): boolean;
144
+ /**
145
+ * Internal method to track events
146
+ * This is the single enforcement point for shouldTrack() - all public tracking
147
+ * methods (track, screen, connect, etc.) route through here
148
+ */
149
+ private trackEvent;
150
+ /**
151
+ * Check if tracking should be enabled
152
+ */
153
+ private shouldTrack;
154
+ /**
155
+ * Validate and checksum address
156
+ */
157
+ private validateAndChecksumAddress;
158
+ /**
159
+ * Flush pending events
160
+ */
161
+ flush(): Promise<void>;
162
+ }
163
+ //# sourceMappingURL=FormoAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import React, { FC } from "react";
2
+ import { FormoAnalyticsProviderProps, IFormoAnalytics } from "./types";
3
+ export declare const FormoAnalyticsContext: React.Context<IFormoAnalytics>;
4
+ /**
5
+ * Formo Analytics Provider for React Native
6
+ *
7
+ * Wraps your app to provide analytics context
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import AsyncStorage from '@react-native-async-storage/async-storage';
12
+ * import { FormoAnalyticsProvider } from '@formo/analytics-react-native';
13
+ *
14
+ * function App() {
15
+ * return (
16
+ * <FormoAnalyticsProvider
17
+ * writeKey="your-write-key"
18
+ * asyncStorage={AsyncStorage}
19
+ * options={{ wagmi: { config, queryClient } }}
20
+ * >
21
+ * <YourApp />
22
+ * </FormoAnalyticsProvider>
23
+ * );
24
+ * }
25
+ * ```
26
+ */
27
+ export declare const FormoAnalyticsProvider: FC<FormoAnalyticsProviderProps>;
28
+ export declare const useFormo: () => IFormoAnalytics;
29
+ //# sourceMappingURL=FormoAnalyticsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormoAnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/FormoAnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAOZ,EAAE,EACH,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqBvE,eAAO,MAAM,qBAAqB,gCACc,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAwBlE,CAAC;AAgMF,eAAO,MAAM,QAAQ,QAAO,eAmB3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const EVENTS_API_ORIGIN = "https://events.formo.so";
2
+ export declare const EVENTS_API_HOST = "https://events.formo.so/v0/raw_events";
3
+ export declare const EVENTS_API_REQUEST_HEADER: (writeKey: string) => {
4
+ "Content-Type": string;
5
+ Authorization: string;
6
+ };
7
+ export declare const COUNTRY_LIST: Record<string, string>;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/constants/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,eAAe,0CAAuC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,GAAI,UAAU,MAAM;;;CAGxD,CAAC;AAGH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoD/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare enum EventType {
2
+ PAGE = "page",
3
+ SCREEN = "screen",
4
+ IDENTIFY = "identify",
5
+ DETECT = "detect",
6
+ CONNECT = "connect",
7
+ DISCONNECT = "disconnect",
8
+ CHAIN = "chain",
9
+ SIGNATURE = "signature",
10
+ TRANSACTION = "transaction",
11
+ TRACK = "track"
12
+ }
13
+ export declare enum EventChannel {
14
+ WEB = "web",
15
+ MOBILE = "mobile",
16
+ SERVER = "server",
17
+ SOURCE = "source"
18
+ }
19
+ export type TEventType = Lowercase<EventType>;
20
+ export type TEventChannel = Lowercase<EventChannel>;
21
+ export declare const CHANNEL: TEventChannel;
22
+ export declare const VERSION = "1";
23
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/constants/events.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;CAChB;AAED,oBAAY,YAAY;IACtB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAGpD,eAAO,MAAM,OAAO,EAAE,aAAwB,CAAC;AAC/C,eAAO,MAAM,OAAO,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./events";
2
+ export * from "./config";
3
+ export * from "./storage";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const STORAGE_PREFIX = "formo_rn_";
2
+ export declare const LOCAL_ANONYMOUS_ID_KEY = "anonymous_id";
3
+ export declare const LOCAL_APP_VERSION_KEY = "app_version";
4
+ export declare const LOCAL_APP_BUILD_KEY = "app_build";
5
+ export declare const SESSION_USER_ID_KEY = "user_id";
6
+ export declare const SESSION_TRAFFIC_SOURCE_KEY = "traffic_source";
7
+ export declare const SESSION_WALLET_DETECTED_KEY = "wallet_detected";
8
+ export declare const SESSION_WALLET_IDENTIFIED_KEY = "wallet_identified";
9
+ export declare const CONSENT_OPT_OUT_KEY = "opt_out_tracking";
10
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/constants/storage.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,cAAc,CAAC;AAG1C,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AACrD,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAG/C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,0BAA0B,mBAAmB,CAAC;AAC3D,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAC7D,eAAO,MAAM,6BAA6B,sBAAsB,CAAC;AAGjE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Formo Analytics SDK for React Native
3
+ *
4
+ * Track wallet events and user analytics in mobile dApps
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * import AsyncStorage from '@react-native-async-storage/async-storage';
9
+ * import { FormoAnalyticsProvider, useFormo } from '@formo/analytics-react-native';
10
+ *
11
+ * // Wrap your app with the provider
12
+ * function App() {
13
+ * return (
14
+ * <FormoAnalyticsProvider
15
+ * writeKey="your-write-key"
16
+ * asyncStorage={AsyncStorage}
17
+ * options={{
18
+ * wagmi: { config, queryClient },
19
+ * app: { name: 'MyApp', version: '1.0.0' },
20
+ * }}
21
+ * >
22
+ * <YourApp />
23
+ * </FormoAnalyticsProvider>
24
+ * );
25
+ * }
26
+ *
27
+ * // Use the hook in your components
28
+ * function MyScreen() {
29
+ * const formo = useFormo();
30
+ *
31
+ * useEffect(() => {
32
+ * formo.screen('Home');
33
+ * }, []);
34
+ *
35
+ * return <View>...</View>;
36
+ * }
37
+ * ```
38
+ */
39
+ export { FormoAnalytics } from "./FormoAnalytics";
40
+ export { FormoAnalyticsProvider, FormoAnalyticsContext, useFormo, } from "./FormoAnalyticsProvider";
41
+ export * from "./types";
42
+ export { SignatureStatus, TransactionStatus } from "./types/events";
43
+ export type { AsyncStorageInterface } from "./lib/storage";
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAGlC,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Set a consent flag
3
+ */
4
+ export declare function setConsentFlag(writeKey: string, key: string, value: string): void;
5
+ /**
6
+ * Get a consent flag
7
+ */
8
+ export declare function getConsentFlag(writeKey: string, key: string): string | null;
9
+ /**
10
+ * Remove a consent flag
11
+ */
12
+ export declare function removeConsentFlag(writeKey: string, key: string): void;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/consent/index.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAOrE"}