@formo/analytics 1.14.3 → 1.15.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 (178) hide show
  1. package/dist/cjs/src/FormoAnalytics.d.ts +10 -0
  2. package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
  3. package/dist/cjs/src/FormoAnalytics.js +130 -56
  4. package/dist/cjs/src/FormoAnalytics.js.map +1 -1
  5. package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
  6. package/dist/cjs/src/FormoAnalyticsProvider.js +6 -5
  7. package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
  8. package/dist/cjs/src/constants/base.d.ts +3 -1
  9. package/dist/cjs/src/constants/base.d.ts.map +1 -1
  10. package/dist/cjs/src/constants/base.js +7 -3
  11. package/dist/cjs/src/constants/base.js.map +1 -1
  12. package/dist/cjs/src/constants/config.d.ts +6 -1
  13. package/dist/cjs/src/constants/config.d.ts.map +1 -1
  14. package/dist/cjs/src/constants/config.js +9 -3
  15. package/dist/cjs/src/constants/config.js.map +1 -1
  16. package/dist/cjs/src/lib/fetch.d.ts +3 -0
  17. package/dist/cjs/src/lib/fetch.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/fetch.js +8 -0
  19. package/dist/cjs/src/lib/fetch.js.map +1 -0
  20. package/dist/cjs/src/lib/index.d.ts +4 -2
  21. package/dist/cjs/src/lib/index.d.ts.map +1 -1
  22. package/dist/cjs/src/lib/index.js +6 -4
  23. package/dist/cjs/src/lib/index.js.map +1 -1
  24. package/dist/cjs/src/lib/logger.d.ts +22 -0
  25. package/dist/cjs/src/lib/logger.d.ts.map +1 -0
  26. package/dist/cjs/src/lib/logger.js +114 -0
  27. package/dist/cjs/src/lib/logger.js.map +1 -0
  28. package/dist/cjs/src/lib/queue.d.ts +2 -3
  29. package/dist/cjs/src/lib/queue.d.ts.map +1 -1
  30. package/dist/cjs/src/lib/queue.js +42 -64
  31. package/dist/cjs/src/lib/queue.js.map +1 -1
  32. package/dist/cjs/src/lib/storage/index.d.ts +3 -0
  33. package/dist/cjs/src/lib/storage/index.d.ts.map +1 -0
  34. package/dist/cjs/src/lib/storage/index.js +11 -0
  35. package/dist/cjs/src/lib/storage/index.js.map +1 -0
  36. package/dist/cjs/src/lib/storage/local.d.ts +4 -0
  37. package/dist/cjs/src/lib/storage/local.d.ts.map +1 -0
  38. package/dist/cjs/src/lib/storage/local.js +8 -0
  39. package/dist/cjs/src/lib/storage/local.js.map +1 -0
  40. package/dist/cjs/src/lib/storage/native.d.ts +15 -0
  41. package/dist/cjs/src/lib/storage/native.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/storage/native.js +83 -0
  43. package/dist/cjs/src/lib/storage/native.js.map +1 -0
  44. package/dist/cjs/src/lib/storage/session.d.ts +4 -0
  45. package/dist/cjs/src/lib/storage/session.d.ts.map +1 -0
  46. package/dist/cjs/src/lib/storage/session.js +8 -0
  47. package/dist/cjs/src/lib/storage/session.js.map +1 -0
  48. package/dist/cjs/src/types/base.d.ts +5 -0
  49. package/dist/cjs/src/types/base.d.ts.map +1 -1
  50. package/dist/cjs/src/types/events.d.ts +6 -0
  51. package/dist/cjs/src/types/events.d.ts.map +1 -1
  52. package/dist/cjs/src/types/events.js.map +1 -1
  53. package/dist/cjs/src/{lib/utils.d.ts → utils/base.d.ts} +4 -3
  54. package/dist/cjs/src/utils/base.d.ts.map +1 -0
  55. package/dist/cjs/src/utils/base.js +113 -0
  56. package/dist/cjs/src/utils/base.js.map +1 -0
  57. package/dist/cjs/src/utils/index.d.ts +3 -0
  58. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  59. package/dist/cjs/src/utils/index.js +19 -0
  60. package/dist/cjs/src/utils/index.js.map +1 -0
  61. package/dist/cjs/src/utils/is.d.ts +3 -0
  62. package/dist/cjs/src/utils/is.d.ts.map +1 -0
  63. package/dist/cjs/src/utils/is.js +11 -0
  64. package/dist/cjs/src/utils/is.js.map +1 -0
  65. package/dist/cjs/test/lib.spec.js +5 -5
  66. package/dist/cjs/test/lib.spec.js.map +1 -1
  67. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  68. package/dist/esm/src/FormoAnalytics.d.ts +10 -0
  69. package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
  70. package/dist/esm/src/FormoAnalytics.js +128 -54
  71. package/dist/esm/src/FormoAnalytics.js.map +1 -1
  72. package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
  73. package/dist/esm/src/FormoAnalyticsProvider.js +6 -5
  74. package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
  75. package/dist/esm/src/constants/base.d.ts +3 -1
  76. package/dist/esm/src/constants/base.d.ts.map +1 -1
  77. package/dist/esm/src/constants/base.js +6 -2
  78. package/dist/esm/src/constants/base.js.map +1 -1
  79. package/dist/esm/src/constants/config.d.ts +6 -1
  80. package/dist/esm/src/constants/config.d.ts.map +1 -1
  81. package/dist/esm/src/constants/config.js +7 -2
  82. package/dist/esm/src/constants/config.js.map +1 -1
  83. package/dist/esm/src/lib/fetch.d.ts +3 -0
  84. package/dist/esm/src/lib/fetch.d.ts.map +1 -0
  85. package/dist/esm/src/lib/fetch.js +3 -0
  86. package/dist/esm/src/lib/fetch.js.map +1 -0
  87. package/dist/esm/src/lib/index.d.ts +4 -2
  88. package/dist/esm/src/lib/index.d.ts.map +1 -1
  89. package/dist/esm/src/lib/index.js +4 -2
  90. package/dist/esm/src/lib/index.js.map +1 -1
  91. package/dist/esm/src/lib/logger.d.ts +22 -0
  92. package/dist/esm/src/lib/logger.d.ts.map +1 -0
  93. package/dist/esm/src/lib/logger.js +111 -0
  94. package/dist/esm/src/lib/logger.js.map +1 -0
  95. package/dist/esm/src/lib/queue.d.ts +2 -3
  96. package/dist/esm/src/lib/queue.d.ts.map +1 -1
  97. package/dist/esm/src/lib/queue.js +42 -64
  98. package/dist/esm/src/lib/queue.js.map +1 -1
  99. package/dist/esm/src/lib/storage/index.d.ts +3 -0
  100. package/dist/esm/src/lib/storage/index.d.ts.map +1 -0
  101. package/dist/esm/src/lib/storage/index.js +3 -0
  102. package/dist/esm/src/lib/storage/index.js.map +1 -0
  103. package/dist/esm/src/lib/storage/local.d.ts +4 -0
  104. package/dist/esm/src/lib/storage/local.d.ts.map +1 -0
  105. package/dist/esm/src/lib/storage/local.js +3 -0
  106. package/dist/esm/src/lib/storage/local.js.map +1 -0
  107. package/dist/esm/src/lib/storage/native.d.ts +15 -0
  108. package/dist/esm/src/lib/storage/native.d.ts.map +1 -0
  109. package/dist/esm/src/lib/storage/native.js +80 -0
  110. package/dist/esm/src/lib/storage/native.js.map +1 -0
  111. package/dist/esm/src/lib/storage/session.d.ts +4 -0
  112. package/dist/esm/src/lib/storage/session.d.ts.map +1 -0
  113. package/dist/esm/src/lib/storage/session.js +3 -0
  114. package/dist/esm/src/lib/storage/session.js.map +1 -0
  115. package/dist/esm/src/types/base.d.ts +5 -0
  116. package/dist/esm/src/types/base.d.ts.map +1 -1
  117. package/dist/esm/src/types/events.d.ts +6 -0
  118. package/dist/esm/src/types/events.d.ts.map +1 -1
  119. package/dist/esm/src/types/events.js.map +1 -1
  120. package/dist/esm/src/{lib/utils.d.ts → utils/base.d.ts} +4 -3
  121. package/dist/esm/src/utils/base.d.ts.map +1 -0
  122. package/dist/esm/src/{lib/fingerprint.js → utils/base.js} +66 -23
  123. package/dist/esm/src/utils/base.js.map +1 -0
  124. package/dist/esm/src/utils/index.d.ts +3 -0
  125. package/dist/esm/src/utils/index.d.ts.map +1 -0
  126. package/dist/esm/src/utils/index.js +3 -0
  127. package/dist/esm/src/utils/index.js.map +1 -0
  128. package/dist/esm/src/utils/is.d.ts +3 -0
  129. package/dist/esm/src/utils/is.d.ts.map +1 -0
  130. package/dist/esm/src/utils/is.js +6 -0
  131. package/dist/esm/src/utils/is.js.map +1 -0
  132. package/dist/esm/test/lib.spec.js +1 -1
  133. package/dist/esm/test/lib.spec.js.map +1 -1
  134. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  135. package/dist/index.umd.min.js +1 -1
  136. package/dist/index.umd.min.js.map +1 -1
  137. package/package.json +1 -2
  138. package/src/FormoAnalytics.ts +121 -52
  139. package/src/FormoAnalyticsProvider.tsx +6 -5
  140. package/src/constants/base.ts +12 -2
  141. package/src/constants/config.ts +9 -2
  142. package/src/lib/fetch.ts +3 -0
  143. package/src/lib/index.ts +4 -2
  144. package/src/lib/logger.ts +93 -0
  145. package/src/lib/queue.ts +27 -48
  146. package/src/lib/storage/index.ts +2 -0
  147. package/src/lib/storage/local.ts +3 -0
  148. package/src/lib/storage/native.ts +93 -0
  149. package/src/lib/storage/session.ts +3 -0
  150. package/src/types/base.ts +5 -0
  151. package/src/types/events.ts +8 -0
  152. package/src/{lib/utils.ts → utils/base.ts} +16 -8
  153. package/src/utils/index.ts +2 -0
  154. package/src/utils/is.ts +8 -0
  155. package/test/lib.spec.ts +1 -1
  156. package/dist/cjs/src/lib/fingerprint.d.ts +0 -4
  157. package/dist/cjs/src/lib/fingerprint.d.ts.map +0 -1
  158. package/dist/cjs/src/lib/fingerprint.js +0 -63
  159. package/dist/cjs/src/lib/fingerprint.js.map +0 -1
  160. package/dist/cjs/src/lib/session-storage.d.ts +0 -11
  161. package/dist/cjs/src/lib/session-storage.d.ts.map +0 -1
  162. package/dist/cjs/src/lib/session-storage.js +0 -52
  163. package/dist/cjs/src/lib/session-storage.js.map +0 -1
  164. package/dist/cjs/src/lib/utils.d.ts.map +0 -1
  165. package/dist/cjs/src/lib/utils.js +0 -63
  166. package/dist/cjs/src/lib/utils.js.map +0 -1
  167. package/dist/esm/src/lib/fingerprint.d.ts +0 -4
  168. package/dist/esm/src/lib/fingerprint.d.ts.map +0 -1
  169. package/dist/esm/src/lib/fingerprint.js.map +0 -1
  170. package/dist/esm/src/lib/session-storage.d.ts +0 -11
  171. package/dist/esm/src/lib/session-storage.d.ts.map +0 -1
  172. package/dist/esm/src/lib/session-storage.js +0 -49
  173. package/dist/esm/src/lib/session-storage.js.map +0 -1
  174. package/dist/esm/src/lib/utils.d.ts.map +0 -1
  175. package/dist/esm/src/lib/utils.js +0 -53
  176. package/dist/esm/src/lib/utils.js.map +0 -1
  177. package/src/lib/fingerprint.ts +0 -9
  178. package/src/lib/session-storage.ts +0 -53
package/src/lib/queue.ts CHANGED
@@ -1,20 +1,19 @@
1
- import fetch from "fetch-retry";
2
1
  import isNetworkError from "is-network-error";
3
- import { RequestEvent } from "../types";
2
+ import { RequestEvent, RequestEventPayload } from "../types";
4
3
  import {
5
4
  clampNumber,
6
5
  getActionDescriptor,
6
+ hash,
7
7
  millisecondsToSecond,
8
8
  toDateHourMinute,
9
- } from "./utils";
10
- import { Fingerprint } from "./fingerprint";
11
-
12
- const sdkFetch = fetch(global.fetch);
13
-
9
+ } from "../utils";
10
+ import { logger } from "./logger";
11
+ import { EVENTS_API_REQUEST_HEADER } from "../constants";
12
+ import fetch from "./fetch";
14
13
  const noop = () => {};
15
14
 
16
15
  type QueueItem = {
17
- message: RequestEvent;
16
+ message: RequestEventPayload;
18
17
  callback: (...args: any) => any;
19
18
  };
20
19
 
@@ -47,10 +46,10 @@ const MIN_FLUSH_INTERVAL = 1_000 * 10; // 10 SECONDS
47
46
  export class EventQueue {
48
47
  private writeKey: string;
49
48
  private url: string;
50
- private queue: QueueItem[];
49
+ private queue: QueueItem[] = [];
51
50
  private timer: null | NodeJS.Timeout;
52
51
  private flushAt: number;
53
- private flushInterval: number;
52
+ private flushIntervalMs: number;
54
53
  private flushed: boolean;
55
54
  private maxQueueSize: number; // min 200 bytes, max 500kB
56
55
  private errorHandler: any;
@@ -79,7 +78,7 @@ export class EventQueue {
79
78
  MAX_QUEUE_SIZE,
80
79
  MIN_QUEUE_SIZE
81
80
  );
82
- this.flushInterval = clampNumber(
81
+ this.flushIntervalMs = clampNumber(
83
82
  options.flushInterval || DEFAULT_FLUSH_INTERVAL,
84
83
  MAX_FLUSH_INTERVAL,
85
84
  MIN_FLUSH_INTERVAL
@@ -100,19 +99,24 @@ export class EventQueue {
100
99
  async enqueue(message: RequestEvent, callback?: (...args: any) => void) {
101
100
  callback = callback || noop;
102
101
 
102
+ const formattedTimestamp = toDateHourMinute(new Date(message.timestamp));
103
+ message.timestamp = formattedTimestamp;
104
+
105
+ const messageString = JSON.stringify(message);
106
+ const hashToken = await hash(messageString);
103
107
  // check if the message already exists
104
- if (await this.checkDuplicate(message)) {
105
- console.warn(
108
+ if (await this.isDuplicated(hashToken)) {
109
+ logger.warn(
106
110
  `Event already enqueued, try again after ${millisecondsToSecond(
107
- this.flushInterval
111
+ this.flushIntervalMs
108
112
  )} seconds.`
109
113
  );
110
114
  return;
111
115
  }
112
116
 
113
- this.queue.push({ message, callback });
117
+ this.queue.push({ message: { ...message, id: hashToken }, callback });
114
118
 
115
- console.log(
119
+ logger.log(
116
120
  `Event enqueued: ${getActionDescriptor(message.action, message.payload)}`
117
121
  );
118
122
 
@@ -132,8 +136,8 @@ export class EventQueue {
132
136
  return;
133
137
  }
134
138
 
135
- if (this.flushInterval && !this.timer) {
136
- this.timer = setTimeout(this.flush.bind(this), this.flushInterval);
139
+ if (this.flushIntervalMs && !this.timer) {
140
+ this.timer = setTimeout(this.flush.bind(this), this.flushIntervalMs);
137
141
  }
138
142
  }
139
143
 
@@ -168,22 +172,14 @@ export class EventQueue {
168
172
  callback(err, data);
169
173
  };
170
174
 
171
- const req = {
172
- headers: {
173
- "Content-Type": "application/json",
174
- Authorization: `Basic ${this.writeKey}`,
175
- "X-Visitor-Id": await Fingerprint.getVisitorId(),
176
- },
177
- };
178
-
179
- return (this.pendingFlush = sdkFetch(`${this.url}`, {
175
+ return (this.pendingFlush = fetch(`${this.url}`, {
176
+ headers: EVENTS_API_REQUEST_HEADER(this.writeKey),
180
177
  method: "POST",
181
178
  body: JSON.stringify(data),
182
179
  keepalive: true,
183
180
  retries: this.retryCount,
184
181
  retryDelay: (attempt) => Math.pow(2, attempt) * 1_000, // exponential backoff
185
182
  retryOn: (_, error) => this.isErrorRetryable(error),
186
- ...req,
187
183
  })
188
184
  .then(() => {
189
185
  done();
@@ -224,31 +220,14 @@ export class EventQueue {
224
220
  return false;
225
221
  }
226
222
 
227
- private async checkDuplicate(newMessage: RequestEvent) {
223
+ private async isDuplicated(hashToken: string) {
228
224
  // check if exists a message with identical payload within 1 minute
229
- const formattedTimestamp = toDateHourMinute(new Date(newMessage.timestamp));
230
- newMessage.timestamp = formattedTimestamp;
225
+ if (this.payloadHashes.has(hashToken)) return true;
231
226
 
232
- const hash = await this.hashPayload(newMessage);
233
- if (this.payloadHashes.has(hash)) {
234
- return true;
235
- }
236
- this.payloadHashes.add(hash);
227
+ this.payloadHashes.add(hashToken);
237
228
  return false;
238
229
  }
239
230
 
240
- private async hashPayload(payload: RequestEvent, algo = "SHA-1") {
241
- return Array.from(
242
- new Uint8Array(
243
- await crypto.subtle.digest(
244
- algo,
245
- new TextEncoder().encode(JSON.stringify(payload))
246
- )
247
- ),
248
- (byte) => byte.toString(16).padStart(2, "0")
249
- ).join("");
250
- }
251
-
252
231
  private onPageLeave = (callback: (isAccessible: boolean) => void) => {
253
232
  // To ensure the callback is only called once even if more than one events
254
233
  // are fired at once.
@@ -0,0 +1,2 @@
1
+ export { default as local } from "./local";
2
+ export { default as session } from "./session";
@@ -0,0 +1,3 @@
1
+ import NativeStorage from "./native";
2
+
3
+ export default new NativeStorage("localStorage");
@@ -0,0 +1,93 @@
1
+ import { logger } from "../logger";
2
+
3
+ export class NativeStorage {
4
+ private readonly json_prefix = "__json=";
5
+ private readonly storageName: "sessionStorage" | "localStorage";
6
+ private readonly storage: Storage;
7
+ private readonly isBrowser: boolean;
8
+ private memoryStorage: Record<string, string>;
9
+
10
+ constructor(type: "sessionStorage" | "localStorage") {
11
+ this.isBrowser = typeof window !== "undefined";
12
+ this.memoryStorage = {};
13
+ this.storageName = type;
14
+
15
+ if (!this.isBrowser) {
16
+ // Create an in-memory storage for SSR
17
+ this.storage = {
18
+ getItem: (key: string) => this.memoryStorage[key] || null,
19
+ setItem: (key: string, value: string) => {
20
+ this.memoryStorage[key] = value;
21
+ },
22
+ removeItem: (key: string) => {
23
+ delete this.memoryStorage[key];
24
+ },
25
+ clear: () => {
26
+ this.memoryStorage = {};
27
+ },
28
+ key: (index: number) => Object.keys(this.memoryStorage)[index] || null,
29
+ length: 0,
30
+ };
31
+ return;
32
+ }
33
+
34
+ switch (type) {
35
+ case "sessionStorage":
36
+ this.storage = sessionStorage;
37
+ break;
38
+ case "localStorage":
39
+ this.storage = localStorage;
40
+ break;
41
+ }
42
+ }
43
+
44
+ public set(key: string, value: any): void {
45
+ if (typeof value === "boolean") value = value === true ? "true" : "false";
46
+ if (typeof value === "object")
47
+ value = this.json_prefix + JSON.stringify(value);
48
+ this.storage.setItem(key, value);
49
+ }
50
+
51
+ public get(key: string): string | boolean | Record<any, any> | null {
52
+ const value = this.storage.getItem(key);
53
+
54
+ if (!value || typeof value !== "string") return null;
55
+ if (["null", "undefined"].some((item) => item == value)) return null;
56
+
57
+ if (value.startsWith(this.json_prefix)) {
58
+ try {
59
+ return JSON.parse(value.slice(7));
60
+ } catch (error) {
61
+ logger.error(
62
+ `[FORMO_ERROR] ${this.storageName} failed to parse JSON`,
63
+ error
64
+ );
65
+ return null;
66
+ }
67
+ }
68
+
69
+ if (["true", "false"].some((item) => item == value)) {
70
+ return JSON.parse(value);
71
+ }
72
+
73
+ return value;
74
+ }
75
+
76
+ public removeMatch(pattern: RegExp): void {
77
+ for (const key in this.storage) {
78
+ if (pattern.test(key)) {
79
+ this.remove(key);
80
+ }
81
+ }
82
+ }
83
+
84
+ public remove(key: string): void {
85
+ this.storage.removeItem(key);
86
+ }
87
+
88
+ public clear(): void {
89
+ this.storage.clear();
90
+ }
91
+ }
92
+
93
+ export default NativeStorage;
@@ -0,0 +1,3 @@
1
+ import NativeStorage from "./native";
2
+
3
+ export default new NativeStorage("sessionStorage");
package/src/types/base.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { LogLevel } from "../lib";
1
2
  import { EIP1193Provider } from "./provider";
2
3
 
3
4
  // Decimal chain ID
@@ -14,6 +15,10 @@ export interface Options {
14
15
  flushInterval?: number;
15
16
  retryCount?: number;
16
17
  maxQueueSize?: number;
18
+ logger?: {
19
+ enabled: boolean;
20
+ levels?: LogLevel[];
21
+ };
17
22
  }
18
23
 
19
24
  export interface FormoAnalyticsProviderProps {
@@ -1,4 +1,8 @@
1
+ import { UUID } from "crypto";
2
+
1
3
  export interface RequestEvent {
4
+ anonymous_id: UUID;
5
+ user_id: UUID | null;
2
6
  action: string;
3
7
  payload: Record<string, unknown>;
4
8
  address: string | null;
@@ -6,6 +10,10 @@ export interface RequestEvent {
6
10
  version: string;
7
11
  }
8
12
 
13
+ export type RequestEventPayload = RequestEvent & {
14
+ id: string;
15
+ };
16
+
9
17
  export enum SignatureStatus {
10
18
  REQUESTED = "requested",
11
19
  REJECTED = "rejected",
@@ -1,4 +1,4 @@
1
- import { REGEX } from "../constants";
1
+ import { UUID } from "crypto";
2
2
 
3
3
  const toSnake = (str: string) =>
4
4
  str
@@ -27,13 +27,6 @@ export function toSnakeCase(obj: any, omitKeys: string[] = []) {
27
27
  return convert(obj);
28
28
  }
29
29
 
30
- export const isLocalhost = () =>
31
- /^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(
32
- window.location.hostname
33
- ) || window.location.protocol === "file:";
34
-
35
- export const isAddress = (address: string) => REGEX.addressRegex.test(address);
36
-
37
30
  export const millisecondsToSecond = (milliseconds: number): number =>
38
31
  Math.ceil(milliseconds / 1_000);
39
32
 
@@ -55,3 +48,18 @@ export const clampNumber = (value: number, max: number, min: number) => {
55
48
  export const getActionDescriptor = (action: string, payload: any): string => {
56
49
  return `${action}${payload?.status ? ` ${payload?.status}` : ""}`;
57
50
  };
51
+
52
+ export async function hash(input: string): Promise<string> {
53
+ const hashBuffer = await crypto.subtle.digest(
54
+ "SHA-256",
55
+ new TextEncoder().encode(input)
56
+ );
57
+ const byteArray = new Uint8Array(hashBuffer);
58
+ return Array.from(byteArray)
59
+ .map((byte) => byte.toString(16).padStart(2, "0"))
60
+ .join("");
61
+ }
62
+
63
+ export function generateNativeUUID(): UUID {
64
+ return crypto.randomUUID();
65
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./base";
2
+ export * from "./is";
@@ -0,0 +1,8 @@
1
+ import { REGEX } from "../constants";
2
+
3
+ export const isLocalhost = () =>
4
+ /^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(
5
+ window.location.hostname
6
+ ) || window.location.protocol === "file:";
7
+
8
+ export const isAddress = (address: string) => REGEX.addressRegex.test(address);
package/test/lib.spec.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { describe, it } from "mocha";
2
- import { isAddress, toSnakeCase } from "../src/lib";
2
+ import { isAddress, toSnakeCase } from "../src/utils";
3
3
  import { expect } from "chai";
4
4
 
5
5
  describe("toSnakeCase", () => {
@@ -1,4 +0,0 @@
1
- export declare class Fingerprint {
2
- static getVisitorId(): Promise<string>;
3
- }
4
- //# sourceMappingURL=fingerprint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../../src/lib/fingerprint.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;WACT,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAK7C"}
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Fingerprint = void 0;
40
- var fingerprintjs_1 = require("@fingerprintjs/fingerprintjs");
41
- var Fingerprint = /** @class */ (function () {
42
- function Fingerprint() {
43
- }
44
- Fingerprint.getVisitorId = function () {
45
- return __awaiter(this, void 0, void 0, function () {
46
- var fp, visitorId;
47
- return __generator(this, function (_a) {
48
- switch (_a.label) {
49
- case 0: return [4 /*yield*/, (0, fingerprintjs_1.load)()];
50
- case 1:
51
- fp = _a.sent();
52
- return [4 /*yield*/, fp.get()];
53
- case 2:
54
- visitorId = (_a.sent()).visitorId;
55
- return [2 /*return*/, visitorId];
56
- }
57
- });
58
- });
59
- };
60
- return Fingerprint;
61
- }());
62
- exports.Fingerprint = Fingerprint;
63
- //# sourceMappingURL=fingerprint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAoD;AAEpD;IAAA;IAMA,CAAC;IALc,wBAAY,GAAzB;;;;;4BACa,qBAAM,IAAA,oBAAI,GAAE,EAAA;;wBAAjB,EAAE,GAAG,SAAY;wBACD,qBAAM,EAAE,CAAC,GAAG,EAAE,EAAA;;wBAA5B,SAAS,GAAK,CAAA,SAAc,CAAA,UAAnB;wBACjB,sBAAO,SAAS,EAAC;;;;KAClB;IACH,kBAAC;AAAD,CAAC,AAND,IAMC;AANY,kCAAW"}
@@ -1,11 +0,0 @@
1
- export declare class SessionStorage {
2
- private readonly json_prefix;
3
- set(key: string, value: any): void;
4
- get(key: string): string | boolean | Record<any, any> | null;
5
- removeMatch(pattern: RegExp): void;
6
- remove(key: string): void;
7
- clear(): void;
8
- }
9
- declare const _default: SessionStorage;
10
- export default _default;
11
- //# sourceMappingURL=session-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../../src/lib/session-storage.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAElC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAOlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAyB5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGrB;;AAED,wBAAoC"}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionStorage = void 0;
4
- var SessionStorage = /** @class */ (function () {
5
- function SessionStorage() {
6
- this.json_prefix = "__json=";
7
- }
8
- SessionStorage.prototype.set = function (key, value) {
9
- if (typeof value === "boolean")
10
- value = value === true ? "true" : "false";
11
- if (typeof value === "object")
12
- value = this.json_prefix + JSON.stringify(value);
13
- sessionStorage.setItem(key, value);
14
- };
15
- SessionStorage.prototype.get = function (key) {
16
- var value = sessionStorage.getItem(key);
17
- if (!value || typeof value !== "string")
18
- return null;
19
- if (["null", "undefined"].some(function (item) { return item == value; }))
20
- return null;
21
- if (value.startsWith(this.json_prefix)) {
22
- try {
23
- return JSON.parse(value.slice(7));
24
- }
25
- catch (error) {
26
- console.error("[FORMO_ERROR] SessionStorage failed to parse JSON", error);
27
- return null;
28
- }
29
- }
30
- if (["true", "false"].some(function (item) { return item == value; })) {
31
- return JSON.parse(value);
32
- }
33
- return value;
34
- };
35
- SessionStorage.prototype.removeMatch = function (pattern) {
36
- for (var key in sessionStorage) {
37
- if (pattern.test(key)) {
38
- this.remove(key);
39
- }
40
- }
41
- };
42
- SessionStorage.prototype.remove = function (key) {
43
- sessionStorage.removeItem(key);
44
- };
45
- SessionStorage.prototype.clear = function () {
46
- sessionStorage.clear();
47
- };
48
- return SessionStorage;
49
- }());
50
- exports.SessionStorage = SessionStorage;
51
- exports.default = new SessionStorage();
52
- //# sourceMappingURL=session-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../../../src/lib/session-storage.ts"],"names":[],"mappings":";;;AAAA;IAAA;QACmB,gBAAW,GAAG,SAAS,CAAC;IAiD3C,CAAC;IA/CQ,4BAAG,GAAV,UAAW,GAAW,EAAE,KAAU;QAChC,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC3B,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,4BAAG,GAAV,UAAW,GAAW;QACpB,IAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE1C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,IAAI,KAAK,EAAb,CAAa,CAAC;YAAE,OAAO,IAAI,CAAC;QAErE,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,mDAAmD,EACnD,KAAK,CACN,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,IAAI,KAAK,EAAb,CAAa,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,oCAAW,GAAlB,UAAmB,OAAe;QAChC,KAAK,IAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAEM,+BAAM,GAAb,UAAc,GAAW;QACvB,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEM,8BAAK,GAAZ;QACE,cAAc,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACH,qBAAC;AAAD,CAAC,AAlDD,IAkDC;AAlDY,wCAAc;AAoD3B,kBAAe,IAAI,cAAc,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils.ts"],"names":[],"mappings":"AASA,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAM,EAAO,OAkB5D;AAED,eAAO,MAAM,WAAW,eAGmB,CAAC;AAE5C,eAAO,MAAM,SAAS,YAAa,MAAM,YAAqC,CAAC;AAE/E,eAAO,MAAM,oBAAoB,iBAAkB,MAAM,KAAG,MAC3B,CAAC;AAElC,eAAO,MAAM,gBAAgB,SAAU,IAAI,WASH,CAAC;AAEzC,eAAO,MAAM,WAAW,UAAW,MAAM,OAAO,MAAM,OAAO,MAAM,WAElE,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAY,MAAM,WAAW,GAAG,KAAG,MAElE,CAAC"}
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getActionDescriptor = exports.clampNumber = exports.toDateHourMinute = exports.millisecondsToSecond = exports.isAddress = exports.isLocalhost = void 0;
4
- exports.toSnakeCase = toSnakeCase;
5
- var constants_1 = require("../constants");
6
- var toSnake = function (str) {
7
- return str
8
- .replace(/([a-z])([A-Z])/g, "$1_$2")
9
- .replace(/[\s-]+/g, "_")
10
- .toLowerCase();
11
- };
12
- // Converts object keys to snake_case, omitting keys in the omitKeys array
13
- function toSnakeCase(obj, omitKeys) {
14
- if (omitKeys === void 0) { omitKeys = []; }
15
- var convert = function (data) {
16
- if (Array.isArray(data)) {
17
- return data.map(convert); // Recursively handle array elements
18
- }
19
- else if (data !== null && typeof data === "object") {
20
- return Object.keys(data).reduce(function (acc, key) {
21
- // If the key is in omitKeys, keep it as it is
22
- var resultKey = omitKeys.includes(key) ? key : toSnake(key);
23
- acc[resultKey] = omitKeys.includes(key)
24
- ? data[key]
25
- : convert(data[key]);
26
- return acc;
27
- }, {});
28
- }
29
- return data;
30
- };
31
- return convert(obj);
32
- }
33
- var isLocalhost = function () {
34
- return /^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(window.location.hostname) || window.location.protocol === "file:";
35
- };
36
- exports.isLocalhost = isLocalhost;
37
- var isAddress = function (address) { return constants_1.REGEX.addressRegex.test(address); };
38
- exports.isAddress = isAddress;
39
- var millisecondsToSecond = function (milliseconds) {
40
- return Math.ceil(milliseconds / 1000);
41
- };
42
- exports.millisecondsToSecond = millisecondsToSecond;
43
- var toDateHourMinute = function (date) {
44
- return date.getUTCFullYear() +
45
- "-" +
46
- ("0" + (date.getUTCMonth() + 1)).slice(-2) +
47
- "-" +
48
- ("0" + date.getUTCDate()).slice(-2) +
49
- " " +
50
- ("0" + date.getUTCHours()).slice(-2) +
51
- ":" +
52
- ("0" + date.getUTCMinutes()).slice(-2);
53
- };
54
- exports.toDateHourMinute = toDateHourMinute;
55
- var clampNumber = function (value, max, min) {
56
- return Math.min(Math.max(value, min), max);
57
- };
58
- exports.clampNumber = clampNumber;
59
- var getActionDescriptor = function (action, payload) {
60
- return "".concat(action).concat((payload === null || payload === void 0 ? void 0 : payload.status) ? " ".concat(payload === null || payload === void 0 ? void 0 : payload.status) : "");
61
- };
62
- exports.getActionDescriptor = getActionDescriptor;
63
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare class Fingerprint {
2
- static getVisitorId(): Promise<string>;
3
- }
4
- //# sourceMappingURL=fingerprint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../../src/lib/fingerprint.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;WACT,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAK7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD;IAAA;IAMA,CAAC;IALc,wBAAY,GAAzB;;;;;4BACa,qBAAM,IAAI,EAAE,EAAA;;wBAAjB,EAAE,GAAG,SAAY;wBACD,qBAAM,EAAE,CAAC,GAAG,EAAE,EAAA;;wBAA5B,SAAS,GAAK,CAAA,SAAc,CAAA,UAAnB;wBACjB,sBAAO,SAAS,EAAC;;;;KAClB;IACH,kBAAC;AAAD,CAAC,AAND,IAMC"}
@@ -1,11 +0,0 @@
1
- export declare class SessionStorage {
2
- private readonly json_prefix;
3
- set(key: string, value: any): void;
4
- get(key: string): string | boolean | Record<any, any> | null;
5
- removeMatch(pattern: RegExp): void;
6
- remove(key: string): void;
7
- clear(): void;
8
- }
9
- declare const _default: SessionStorage;
10
- export default _default;
11
- //# sourceMappingURL=session-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../../src/lib/session-storage.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAElC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAOlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAyB5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGrB;;AAED,wBAAoC"}
@@ -1,49 +0,0 @@
1
- var SessionStorage = /** @class */ (function () {
2
- function SessionStorage() {
3
- this.json_prefix = "__json=";
4
- }
5
- SessionStorage.prototype.set = function (key, value) {
6
- if (typeof value === "boolean")
7
- value = value === true ? "true" : "false";
8
- if (typeof value === "object")
9
- value = this.json_prefix + JSON.stringify(value);
10
- sessionStorage.setItem(key, value);
11
- };
12
- SessionStorage.prototype.get = function (key) {
13
- var value = sessionStorage.getItem(key);
14
- if (!value || typeof value !== "string")
15
- return null;
16
- if (["null", "undefined"].some(function (item) { return item == value; }))
17
- return null;
18
- if (value.startsWith(this.json_prefix)) {
19
- try {
20
- return JSON.parse(value.slice(7));
21
- }
22
- catch (error) {
23
- console.error("[FORMO_ERROR] SessionStorage failed to parse JSON", error);
24
- return null;
25
- }
26
- }
27
- if (["true", "false"].some(function (item) { return item == value; })) {
28
- return JSON.parse(value);
29
- }
30
- return value;
31
- };
32
- SessionStorage.prototype.removeMatch = function (pattern) {
33
- for (var key in sessionStorage) {
34
- if (pattern.test(key)) {
35
- this.remove(key);
36
- }
37
- }
38
- };
39
- SessionStorage.prototype.remove = function (key) {
40
- sessionStorage.removeItem(key);
41
- };
42
- SessionStorage.prototype.clear = function () {
43
- sessionStorage.clear();
44
- };
45
- return SessionStorage;
46
- }());
47
- export { SessionStorage };
48
- export default new SessionStorage();
49
- //# sourceMappingURL=session-storage.js.map