@formo/analytics 1.14.3 → 1.15.1
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.
- package/dist/cjs/src/FormoAnalytics.d.ts +10 -0
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalytics.js +130 -56
- package/dist/cjs/src/FormoAnalytics.js.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.js +6 -5
- package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/cjs/src/constants/base.d.ts +3 -1
- package/dist/cjs/src/constants/base.d.ts.map +1 -1
- package/dist/cjs/src/constants/base.js +7 -3
- package/dist/cjs/src/constants/base.js.map +1 -1
- package/dist/cjs/src/constants/config.d.ts +6 -1
- package/dist/cjs/src/constants/config.d.ts.map +1 -1
- package/dist/cjs/src/constants/config.js +9 -3
- package/dist/cjs/src/constants/config.js.map +1 -1
- package/dist/cjs/src/lib/fetch.d.ts +3 -0
- package/dist/cjs/src/lib/fetch.d.ts.map +1 -0
- package/dist/cjs/src/lib/fetch.js +8 -0
- package/dist/cjs/src/lib/fetch.js.map +1 -0
- package/dist/cjs/src/lib/index.d.ts +4 -2
- package/dist/cjs/src/lib/index.d.ts.map +1 -1
- package/dist/cjs/src/lib/index.js +6 -4
- package/dist/cjs/src/lib/index.js.map +1 -1
- package/dist/cjs/src/lib/logger.d.ts +22 -0
- package/dist/cjs/src/lib/logger.d.ts.map +1 -0
- package/dist/cjs/src/lib/logger.js +114 -0
- package/dist/cjs/src/lib/logger.js.map +1 -0
- package/dist/cjs/src/lib/queue.d.ts +2 -3
- package/dist/cjs/src/lib/queue.d.ts.map +1 -1
- package/dist/cjs/src/lib/queue.js +42 -64
- package/dist/cjs/src/lib/queue.js.map +1 -1
- package/dist/cjs/src/lib/storage/index.d.ts +3 -0
- package/dist/cjs/src/lib/storage/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/storage/index.js +11 -0
- package/dist/cjs/src/lib/storage/index.js.map +1 -0
- package/dist/cjs/src/lib/storage/local.d.ts +4 -0
- package/dist/cjs/src/lib/storage/local.d.ts.map +1 -0
- package/dist/cjs/src/lib/storage/local.js +8 -0
- package/dist/cjs/src/lib/storage/local.js.map +1 -0
- package/dist/cjs/src/lib/storage/native.d.ts +15 -0
- package/dist/cjs/src/lib/storage/native.d.ts.map +1 -0
- package/dist/cjs/src/lib/storage/native.js +83 -0
- package/dist/cjs/src/lib/storage/native.js.map +1 -0
- package/dist/cjs/src/lib/storage/session.d.ts +4 -0
- package/dist/cjs/src/lib/storage/session.d.ts.map +1 -0
- package/dist/cjs/src/lib/storage/session.js +8 -0
- package/dist/cjs/src/lib/storage/session.js.map +1 -0
- package/dist/cjs/src/types/base.d.ts +5 -0
- package/dist/cjs/src/types/base.d.ts.map +1 -1
- package/dist/cjs/src/types/events.d.ts +6 -0
- package/dist/cjs/src/types/events.d.ts.map +1 -1
- package/dist/cjs/src/types/events.js.map +1 -1
- package/dist/cjs/src/{lib/utils.d.ts → utils/base.d.ts} +4 -3
- package/dist/cjs/src/utils/base.d.ts.map +1 -0
- package/dist/cjs/src/utils/base.js +113 -0
- package/dist/cjs/src/utils/base.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +3 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +19 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/is.d.ts +3 -0
- package/dist/cjs/src/utils/is.d.ts.map +1 -0
- package/dist/cjs/src/utils/is.js +11 -0
- package/dist/cjs/src/utils/is.js.map +1 -0
- package/dist/cjs/test/lib.spec.js +5 -5
- package/dist/cjs/test/lib.spec.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/FormoAnalytics.d.ts +10 -0
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalytics.js +128 -54
- package/dist/esm/src/FormoAnalytics.js.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.js +6 -5
- package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/esm/src/constants/base.d.ts +3 -1
- package/dist/esm/src/constants/base.d.ts.map +1 -1
- package/dist/esm/src/constants/base.js +6 -2
- package/dist/esm/src/constants/base.js.map +1 -1
- package/dist/esm/src/constants/config.d.ts +6 -1
- package/dist/esm/src/constants/config.d.ts.map +1 -1
- package/dist/esm/src/constants/config.js +7 -2
- package/dist/esm/src/constants/config.js.map +1 -1
- package/dist/esm/src/lib/fetch.d.ts +3 -0
- package/dist/esm/src/lib/fetch.d.ts.map +1 -0
- package/dist/esm/src/lib/fetch.js +3 -0
- package/dist/esm/src/lib/fetch.js.map +1 -0
- package/dist/esm/src/lib/index.d.ts +4 -2
- package/dist/esm/src/lib/index.d.ts.map +1 -1
- package/dist/esm/src/lib/index.js +4 -2
- package/dist/esm/src/lib/index.js.map +1 -1
- package/dist/esm/src/lib/logger.d.ts +22 -0
- package/dist/esm/src/lib/logger.d.ts.map +1 -0
- package/dist/esm/src/lib/logger.js +111 -0
- package/dist/esm/src/lib/logger.js.map +1 -0
- package/dist/esm/src/lib/queue.d.ts +2 -3
- package/dist/esm/src/lib/queue.d.ts.map +1 -1
- package/dist/esm/src/lib/queue.js +42 -64
- package/dist/esm/src/lib/queue.js.map +1 -1
- package/dist/esm/src/lib/storage/index.d.ts +3 -0
- package/dist/esm/src/lib/storage/index.d.ts.map +1 -0
- package/dist/esm/src/lib/storage/index.js +3 -0
- package/dist/esm/src/lib/storage/index.js.map +1 -0
- package/dist/esm/src/lib/storage/local.d.ts +4 -0
- package/dist/esm/src/lib/storage/local.d.ts.map +1 -0
- package/dist/esm/src/lib/storage/local.js +3 -0
- package/dist/esm/src/lib/storage/local.js.map +1 -0
- package/dist/esm/src/lib/storage/native.d.ts +15 -0
- package/dist/esm/src/lib/storage/native.d.ts.map +1 -0
- package/dist/esm/src/lib/storage/native.js +80 -0
- package/dist/esm/src/lib/storage/native.js.map +1 -0
- package/dist/esm/src/lib/storage/session.d.ts +4 -0
- package/dist/esm/src/lib/storage/session.d.ts.map +1 -0
- package/dist/esm/src/lib/storage/session.js +3 -0
- package/dist/esm/src/lib/storage/session.js.map +1 -0
- package/dist/esm/src/types/base.d.ts +5 -0
- package/dist/esm/src/types/base.d.ts.map +1 -1
- package/dist/esm/src/types/events.d.ts +6 -0
- package/dist/esm/src/types/events.d.ts.map +1 -1
- package/dist/esm/src/types/events.js.map +1 -1
- package/dist/esm/src/{lib/utils.d.ts → utils/base.d.ts} +4 -3
- package/dist/esm/src/utils/base.d.ts.map +1 -0
- package/dist/esm/src/{lib/fingerprint.js → utils/base.js} +66 -23
- package/dist/esm/src/utils/base.js.map +1 -0
- package/dist/esm/src/utils/index.d.ts +3 -0
- package/dist/esm/src/utils/index.d.ts.map +1 -0
- package/dist/esm/src/utils/index.js +3 -0
- package/dist/esm/src/utils/index.js.map +1 -0
- package/dist/esm/src/utils/is.d.ts +3 -0
- package/dist/esm/src/utils/is.d.ts.map +1 -0
- package/dist/esm/src/utils/is.js +6 -0
- package/dist/esm/src/utils/is.js.map +1 -0
- package/dist/esm/test/lib.spec.js +1 -1
- package/dist/esm/test/lib.spec.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -2
- package/src/FormoAnalytics.ts +121 -52
- package/src/FormoAnalyticsProvider.tsx +6 -5
- package/src/constants/base.ts +12 -2
- package/src/constants/config.ts +9 -2
- package/src/lib/fetch.ts +3 -0
- package/src/lib/index.ts +4 -2
- package/src/lib/logger.ts +93 -0
- package/src/lib/queue.ts +27 -48
- package/src/lib/storage/index.ts +2 -0
- package/src/lib/storage/local.ts +3 -0
- package/src/lib/storage/native.ts +93 -0
- package/src/lib/storage/session.ts +3 -0
- package/src/types/base.ts +5 -0
- package/src/types/events.ts +8 -0
- package/src/{lib/utils.ts → utils/base.ts} +16 -8
- package/src/utils/index.ts +2 -0
- package/src/utils/is.ts +8 -0
- package/test/lib.spec.ts +1 -1
- package/dist/cjs/src/lib/fingerprint.d.ts +0 -4
- package/dist/cjs/src/lib/fingerprint.d.ts.map +0 -1
- package/dist/cjs/src/lib/fingerprint.js +0 -63
- package/dist/cjs/src/lib/fingerprint.js.map +0 -1
- package/dist/cjs/src/lib/session-storage.d.ts +0 -11
- package/dist/cjs/src/lib/session-storage.d.ts.map +0 -1
- package/dist/cjs/src/lib/session-storage.js +0 -52
- package/dist/cjs/src/lib/session-storage.js.map +0 -1
- package/dist/cjs/src/lib/utils.d.ts.map +0 -1
- package/dist/cjs/src/lib/utils.js +0 -63
- package/dist/cjs/src/lib/utils.js.map +0 -1
- package/dist/esm/src/lib/fingerprint.d.ts +0 -4
- package/dist/esm/src/lib/fingerprint.d.ts.map +0 -1
- package/dist/esm/src/lib/fingerprint.js.map +0 -1
- package/dist/esm/src/lib/session-storage.d.ts +0 -11
- package/dist/esm/src/lib/session-storage.d.ts.map +0 -1
- package/dist/esm/src/lib/session-storage.js +0 -49
- package/dist/esm/src/lib/session-storage.js.map +0 -1
- package/dist/esm/src/lib/utils.d.ts.map +0 -1
- package/dist/esm/src/lib/utils.js +0 -53
- package/dist/esm/src/lib/utils.js.map +0 -1
- package/src/lib/fingerprint.ts +0 -9
- 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 "
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
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:
|
|
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
|
|
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.
|
|
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.
|
|
105
|
-
|
|
108
|
+
if (await this.isDuplicated(hashToken)) {
|
|
109
|
+
logger.warn(
|
|
106
110
|
`Event already enqueued, try again after ${millisecondsToSecond(
|
|
107
|
-
this.
|
|
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
|
-
|
|
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.
|
|
136
|
-
this.timer = setTimeout(this.flush.bind(this), this.
|
|
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
|
-
|
|
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
|
|
223
|
+
private async isDuplicated(hashToken: string) {
|
|
228
224
|
// check if exists a message with identical payload within 1 minute
|
|
229
|
-
|
|
230
|
-
newMessage.timestamp = formattedTimestamp;
|
|
225
|
+
if (this.payloadHashes.has(hashToken)) return true;
|
|
231
226
|
|
|
232
|
-
|
|
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,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;
|
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 {
|
package/src/types/events.ts
CHANGED
|
@@ -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 {
|
|
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
|
+
}
|
package/src/utils/is.ts
ADDED
|
@@ -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 +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 +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
|