@formo/analytics-react-native 1.0.2 → 1.1.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/lib/commonjs/FormoAnalytics.js +11 -0
- package/lib/commonjs/FormoAnalytics.js.map +1 -1
- package/lib/commonjs/lib/event/EventQueue.js +367 -57
- package/lib/commonjs/lib/event/EventQueue.js.map +1 -1
- package/lib/commonjs/utils/sanitize.js +260 -0
- package/lib/commonjs/utils/sanitize.js.map +1 -0
- package/lib/commonjs/utils/trafficSource.js +10 -1
- package/lib/commonjs/utils/trafficSource.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/FormoAnalytics.js +11 -0
- package/lib/module/FormoAnalytics.js.map +1 -1
- package/lib/module/lib/event/EventQueue.js +368 -57
- package/lib/module/lib/event/EventQueue.js.map +1 -1
- package/lib/module/utils/sanitize.js +253 -0
- package/lib/module/utils/sanitize.js.map +1 -0
- package/lib/module/utils/trafficSource.js +10 -1
- package/lib/module/utils/trafficSource.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/FormoAnalytics.d.ts.map +1 -1
- package/lib/typescript/commonjs/lib/event/EventQueue.d.ts +55 -0
- package/lib/typescript/commonjs/lib/event/EventQueue.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/sanitize.d.ts +31 -0
- package/lib/typescript/commonjs/utils/sanitize.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/trafficSource.d.ts +3 -0
- package/lib/typescript/commonjs/utils/trafficSource.d.ts.map +1 -1
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/FormoAnalytics.d.ts +2 -2
- package/lib/typescript/module/FormoAnalytics.d.ts.map +1 -1
- package/lib/typescript/module/FormoAnalyticsProvider.d.ts +1 -1
- package/lib/typescript/module/FormoAnalyticsProvider.d.ts.map +1 -1
- package/lib/typescript/module/constants/index.d.ts +3 -3
- package/lib/typescript/module/constants/index.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +5 -5
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/lib/event/EventFactory.d.ts +2 -2
- package/lib/typescript/module/lib/event/EventFactory.d.ts.map +1 -1
- package/lib/typescript/module/lib/event/EventManager.d.ts +2 -2
- package/lib/typescript/module/lib/event/EventManager.d.ts.map +1 -1
- package/lib/typescript/module/lib/event/EventQueue.d.ts +57 -2
- package/lib/typescript/module/lib/event/EventQueue.d.ts.map +1 -1
- package/lib/typescript/module/lib/event/index.d.ts +4 -4
- package/lib/typescript/module/lib/event/index.d.ts.map +1 -1
- package/lib/typescript/module/lib/event/types.d.ts +1 -1
- package/lib/typescript/module/lib/event/types.d.ts.map +1 -1
- package/lib/typescript/module/lib/session/index.d.ts +1 -1
- package/lib/typescript/module/lib/session/index.d.ts.map +1 -1
- package/lib/typescript/module/lib/storage/AsyncStorageAdapter.d.ts +2 -2
- package/lib/typescript/module/lib/storage/AsyncStorageAdapter.d.ts.map +1 -1
- package/lib/typescript/module/lib/storage/MemoryStorage.d.ts +1 -1
- package/lib/typescript/module/lib/storage/MemoryStorage.d.ts.map +1 -1
- package/lib/typescript/module/lib/storage/StorageBlueprint.d.ts +1 -1
- package/lib/typescript/module/lib/storage/StorageBlueprint.d.ts.map +1 -1
- package/lib/typescript/module/lib/storage/StorageManager.d.ts +1 -1
- package/lib/typescript/module/lib/storage/StorageManager.d.ts.map +1 -1
- package/lib/typescript/module/lib/storage/index.d.ts +4 -4
- package/lib/typescript/module/lib/storage/index.d.ts.map +1 -1
- package/lib/typescript/module/lib/wagmi/WagmiEventHandler.d.ts +2 -2
- package/lib/typescript/module/lib/wagmi/WagmiEventHandler.d.ts.map +1 -1
- package/lib/typescript/module/lib/wagmi/index.d.ts +2 -2
- package/lib/typescript/module/lib/wagmi/index.d.ts.map +1 -1
- package/lib/typescript/module/solana/address.d.ts +1 -1
- package/lib/typescript/module/solana/address.d.ts.map +1 -1
- package/lib/typescript/module/solana/index.d.ts +2 -2
- package/lib/typescript/module/solana/index.d.ts.map +1 -1
- package/lib/typescript/module/types/base.d.ts +3 -3
- package/lib/typescript/module/types/base.d.ts.map +1 -1
- package/lib/typescript/module/types/events.d.ts +2 -2
- package/lib/typescript/module/types/events.d.ts.map +1 -1
- package/lib/typescript/module/types/index.d.ts +2 -2
- package/lib/typescript/module/types/index.d.ts.map +1 -1
- package/lib/typescript/module/utils/index.d.ts +5 -5
- package/lib/typescript/module/utils/index.d.ts.map +1 -1
- package/lib/typescript/module/utils/sanitize.d.ts +31 -0
- package/lib/typescript/module/utils/sanitize.d.ts.map +1 -0
- package/lib/typescript/module/utils/trafficSource.d.ts +4 -1
- package/lib/typescript/module/utils/trafficSource.d.ts.map +1 -1
- package/lib/typescript/module/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/FormoAnalytics.ts +11 -0
- package/src/lib/event/EventQueue.ts +402 -61
- package/src/utils/sanitize.ts +274 -0
- package/src/utils/trafficSource.ts +19 -1
- package/src/version.ts +1 -1
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Traffic-source value sanitization.
|
|
5
|
+
*
|
|
6
|
+
* Ported from the Formo web SDK, where vulnerability scanners (e.g. Acunetix)
|
|
7
|
+
* crawling customer sites injected XSS probes such as
|
|
8
|
+
* `javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")` or
|
|
9
|
+
* `<script>alert(1)</script>` into every query parameter. Without validation
|
|
10
|
+
* those payloads are captured verbatim as utm_* / ref values, persisted as
|
|
11
|
+
* sticky session traffic sources, and pollute attribution reporting.
|
|
12
|
+
*
|
|
13
|
+
* React Native has the same exposure through two attacker-reachable inputs:
|
|
14
|
+
*
|
|
15
|
+
* - Deep links handed to `setTrafficSourceFromUrl`. Anyone who can get a user
|
|
16
|
+
* to open `myapp://x?utm_source=<script>alert(1)</script>` controls the
|
|
17
|
+
* value verbatim, and it is persisted for the whole session.
|
|
18
|
+
* - The Android Play Install Referrer string, which is derived from the
|
|
19
|
+
* `referrer` parameter of a Play Store URL and is likewise attacker-supplied.
|
|
20
|
+
*
|
|
21
|
+
* Each field class gets the tightest rule its legitimate values allow:
|
|
22
|
+
*
|
|
23
|
+
* - Referral codes are short tokens; >99.5% of production values match the
|
|
24
|
+
* strict pattern and none of the remainder are legitimate (scanner
|
|
25
|
+
* payloads, mangled encodings, URLs glued to codes).
|
|
26
|
+
* - UTM values are free-form (spaces, unicode, `+` are legitimate), so they
|
|
27
|
+
* only reject markup/quote characters, dangerous URL schemes, control and
|
|
28
|
+
* zero-width characters, and absurd lengths.
|
|
29
|
+
* - `referrer` diverges from the web SDK, which leaves it untouched because
|
|
30
|
+
* there it is a browser-set `document.referrer` already handled by redactUrl.
|
|
31
|
+
* In React Native `referrer` holds the raw deep-link URL the attacker
|
|
32
|
+
* supplied, so sanitizing only the utm_ and ref fields would still let the
|
|
33
|
+
* payload through. It gets a URL-sized length budget and is checked both raw
|
|
34
|
+
* and percent-decoded — a URL encodes its payload, so a raw-only check would
|
|
35
|
+
* pass `?utm_source=%3Cscript%3E` straight through.
|
|
36
|
+
*
|
|
37
|
+
* Invalid values are dropped to "" — the same representation as "parameter
|
|
38
|
+
* absent" — rather than repaired, so a poisoned value can never be persisted
|
|
39
|
+
* or reported.
|
|
40
|
+
*
|
|
41
|
+
* The web SDK additionally sanitizes ad-platform click IDs (gclid, fbclid,
|
|
42
|
+
* ...). This SDK does not capture them, so that rule is intentionally absent;
|
|
43
|
+
* add it here alongside the capture if click IDs are ever supported.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
const REF_PATTERN = /^[A-Za-z0-9._-]{1,64}$/;
|
|
47
|
+
const UTM_MAX_LENGTH = 255;
|
|
48
|
+
|
|
49
|
+
// URLs are legitimately much longer than a UTM value, but not unbounded —
|
|
50
|
+
// this is well above any real deep link and still bounds what gets persisted.
|
|
51
|
+
const REFERRER_MAX_LENGTH = 2_048;
|
|
52
|
+
|
|
53
|
+
// Markup/quote/backslash characters plus C0/C1 control characters and
|
|
54
|
+
// zero-width / bidi / BOM / replacement characters (mangled-encoding
|
|
55
|
+
// markers). Explicit ranges instead of \p{C} to avoid the `u`-flag
|
|
56
|
+
// property-escape requirement.
|
|
57
|
+
const FORBIDDEN_CHARS = /[<>"'`\\\u0000-\u001f\u007f-\u009f\u200b-\u200f\u2028-\u202e\u2060\ufeff\ufffd]/;
|
|
58
|
+
|
|
59
|
+
// Applied to the percent-DECODED form of a referrer. Narrower than the raw
|
|
60
|
+
// set on purpose: a decoded query value legitimately contains quotes and
|
|
61
|
+
// backslashes (`?q=%22running%20shoes%22`), and those are harmless in an
|
|
62
|
+
// analytics field. Markup and invisible characters are what indicate an
|
|
63
|
+
// injected payload rather than a real deep link.
|
|
64
|
+
const DECODED_FORBIDDEN_CHARS = /[<>\u0000-\u001f\u007f-\u009f\u200b-\u200f\u2028-\u202e\u2060\ufeff\ufffd]/;
|
|
65
|
+
|
|
66
|
+
// Values smuggling an executable/URL scheme, e.g. `javascript:alert(1)`.
|
|
67
|
+
const FORBIDDEN_SCHEME_PREFIX = /^\s*(javascript|data|vbscript):/i;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Whether a value smuggles a dangerous scheme, anywhere a URL parser would
|
|
71
|
+
* consider the start of a value.
|
|
72
|
+
*
|
|
73
|
+
* The pattern is anchored, so testing the string as a whole is not enough once
|
|
74
|
+
* decoding can reveal separators that were themselves encoded: with the `=` in
|
|
75
|
+
* `?utm_source%3Djavascript%253Aalert(1)` encoded, URLSearchParams reports one
|
|
76
|
+
* key that decodes to `utm_source=javascript:alert(1)`, which the anchored test
|
|
77
|
+
* never matches. Splitting on the separators after decoding puts the payload
|
|
78
|
+
* back at the start of a segment.
|
|
79
|
+
*/
|
|
80
|
+
const hasForbiddenScheme = value => FORBIDDEN_SCHEME_PREFIX.test(value) || value.split(/[?&=#]/).some(segment => FORBIDDEN_SCHEME_PREFIX.test(segment));
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Percent-decode one layer without ever throwing. `decodeURIComponent` rejects
|
|
84
|
+
* the entire string on a single malformed escape (a stray `%`), which would let
|
|
85
|
+
* `...%3Cscript%3E%` skip the decoded checks completely.
|
|
86
|
+
*
|
|
87
|
+
* Each *run* of consecutive escapes is decoded as a unit rather than byte by
|
|
88
|
+
* byte, because a multi-byte character spans several escapes: `%E3%80%80` is
|
|
89
|
+
* one ideographic space, and decoding `%E3` alone throws. Byte-wise decoding
|
|
90
|
+
* would therefore never produce the whitespace that lets `^\s*javascript:`
|
|
91
|
+
* match `%E3%80%80javascript%3Aalert(1)`. A run that is not valid UTF-8, and
|
|
92
|
+
* any stray `%`, is left as-is.
|
|
93
|
+
*/
|
|
94
|
+
const decodeRun = run => {
|
|
95
|
+
try {
|
|
96
|
+
return decodeURIComponent(run);
|
|
97
|
+
} catch {
|
|
98
|
+
// One invalid byte anywhere in the run would otherwise blind the whole
|
|
99
|
+
// run — appending `%C0` next to `%3C` is enough to hide a `<`. Decode the
|
|
100
|
+
// largest valid group at each position instead, longest first so multi-byte
|
|
101
|
+
// sequences (up to four escapes) still group correctly, and pass through
|
|
102
|
+
// any escape that cannot be decoded at all.
|
|
103
|
+
const escapes = run.match(/%[0-9A-Fa-f]{2}/g) ?? [];
|
|
104
|
+
let out = "";
|
|
105
|
+
let i = 0;
|
|
106
|
+
while (i < escapes.length) {
|
|
107
|
+
let taken = 0;
|
|
108
|
+
for (let len = Math.min(4, escapes.length - i); len >= 1; len--) {
|
|
109
|
+
try {
|
|
110
|
+
out += decodeURIComponent(escapes.slice(i, i + len).join(""));
|
|
111
|
+
taken = len;
|
|
112
|
+
break;
|
|
113
|
+
} catch {
|
|
114
|
+
// Try a shorter group.
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (taken === 0) {
|
|
118
|
+
out += escapes[i];
|
|
119
|
+
taken = 1;
|
|
120
|
+
}
|
|
121
|
+
i += taken;
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const decodeOnce = value => value.replace(/(?:%[0-9A-Fa-f]{2})+/g, decodeRun);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Decode to a fixed point, so a payload encoded any number of times
|
|
130
|
+
* (`%253Cscript%253E`, `%25252525253Cscript...`) is compared in a form the
|
|
131
|
+
* markup check can see.
|
|
132
|
+
*
|
|
133
|
+
* The bound is the input length rather than a fixed number of layers, because
|
|
134
|
+
* a fixed number is reachable: re-encoding `javascript:alert(1)` only grows the
|
|
135
|
+
* single `%` by two characters per layer, so 66 layers fit in 151 characters
|
|
136
|
+
* and any small constant can be encoded past. Every productive pass turns a
|
|
137
|
+
* three-character escape into one character, so a string of length n admits
|
|
138
|
+
* fewer than n productive passes — this bound is always sufficient and still
|
|
139
|
+
* guarantees termination.
|
|
140
|
+
*/
|
|
141
|
+
const decodeDeep = value => {
|
|
142
|
+
let current = value;
|
|
143
|
+
for (let i = 0; i < value.length; i++) {
|
|
144
|
+
const next = decodeOnce(current);
|
|
145
|
+
if (next === current) break;
|
|
146
|
+
current = next;
|
|
147
|
+
}
|
|
148
|
+
return current;
|
|
149
|
+
};
|
|
150
|
+
const sanitizeRef = value => REF_PATTERN.test(value) ? value : "";
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* URLSearchParams has already decoded one layer by the time a UTM value gets
|
|
154
|
+
* here, so a payload encoded twice arrives still encoded:
|
|
155
|
+
* `utm_source=%253Cscript%253E` reads as the literal `%3Cscript%3E`, which
|
|
156
|
+
* contains no raw markup and would pass a raw-only check. Test the decoded
|
|
157
|
+
* form as well.
|
|
158
|
+
*/
|
|
159
|
+
const sanitizeUtm = value => {
|
|
160
|
+
if (value.length > UTM_MAX_LENGTH) return "";
|
|
161
|
+
if (FORBIDDEN_CHARS.test(value) || hasForbiddenScheme(value)) {
|
|
162
|
+
return "";
|
|
163
|
+
}
|
|
164
|
+
const decoded = decodeDeep(value);
|
|
165
|
+
if (DECODED_FORBIDDEN_CHARS.test(decoded) || hasForbiddenScheme(decoded)) {
|
|
166
|
+
return "";
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The decoded parts of a referrer's query string — keys as well as values.
|
|
173
|
+
* Handles both a full URL ("myapp://x?utm_source=...") and the bare query
|
|
174
|
+
* string the Android install referrer supplies ("utm_source=...&utm_medium=").
|
|
175
|
+
* Returns nothing when there is no query to read; the caller still checks the
|
|
176
|
+
* whole string.
|
|
177
|
+
*
|
|
178
|
+
* Keys matter because a parameter with no "=" parses entirely as a key with an
|
|
179
|
+
* empty value: "?%6Aavascript:alert(1)" would otherwise contribute nothing to
|
|
180
|
+
* inspect.
|
|
181
|
+
*/
|
|
182
|
+
const referrerParamParts = value => {
|
|
183
|
+
const queryStart = value.indexOf("?");
|
|
184
|
+
const query = queryStart === -1 ? value : value.slice(queryStart + 1);
|
|
185
|
+
if (!query || queryStart === -1 && !query.includes("=")) return [];
|
|
186
|
+
try {
|
|
187
|
+
// URLSearchParams decodes leniently and does not throw on a stray "%".
|
|
188
|
+
const parts = [];
|
|
189
|
+
for (const [key, paramValue] of new URLSearchParams(query)) {
|
|
190
|
+
parts.push(key, paramValue);
|
|
191
|
+
}
|
|
192
|
+
return parts;
|
|
193
|
+
} catch {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* A URL carries its payload percent-encoded — `Linking` and the browser both
|
|
200
|
+
* encode `<` and `>` — so a raw-only check would pass
|
|
201
|
+
* `?utm_source=%3Cscript%3E` straight through.
|
|
202
|
+
*
|
|
203
|
+
* Checked three ways, because pattern-matching the URL as one opaque string
|
|
204
|
+
* misses what a structural read catches: the whole value raw, the whole value
|
|
205
|
+
* decoded, and each decoded query part — keys included — on its own. The last
|
|
206
|
+
* is what catches a smuggled scheme, since FORBIDDEN_SCHEME_PREFIX is anchored
|
|
207
|
+
* and `?utm_source=javascript:alert(1)` only matches once that parameter is
|
|
208
|
+
* read apart from the `myapp://` URL containing it.
|
|
209
|
+
*/
|
|
210
|
+
const sanitizeReferrer = value => {
|
|
211
|
+
if (value.length > REFERRER_MAX_LENGTH) return "";
|
|
212
|
+
if (FORBIDDEN_CHARS.test(value) || hasForbiddenScheme(value)) {
|
|
213
|
+
return "";
|
|
214
|
+
}
|
|
215
|
+
const decodedWhole = decodeDeep(value);
|
|
216
|
+
if (DECODED_FORBIDDEN_CHARS.test(decodedWhole) || hasForbiddenScheme(decodedWhole)) {
|
|
217
|
+
return "";
|
|
218
|
+
}
|
|
219
|
+
for (const part of referrerParamParts(value)) {
|
|
220
|
+
const decoded = decodeDeep(part);
|
|
221
|
+
if (DECODED_FORBIDDEN_CHARS.test(decoded) || hasForbiddenScheme(decoded)) {
|
|
222
|
+
return "";
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return value;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Sanitize every traffic-source field of a (possibly sparse) traffic-source
|
|
230
|
+
* object. Unknown keys fall through to the UTM rule, the most permissive of
|
|
231
|
+
* the value rules.
|
|
232
|
+
*/
|
|
233
|
+
export const sanitizeTrafficSources = trafficSources => {
|
|
234
|
+
const result = {
|
|
235
|
+
...trafficSources
|
|
236
|
+
};
|
|
237
|
+
for (const key of Object.keys(result)) {
|
|
238
|
+
const value = result[key];
|
|
239
|
+
if (typeof value !== "string" || value === "") {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (key === "ref") {
|
|
243
|
+
result[key] = sanitizeRef(value);
|
|
244
|
+
} else if (key === "referrer") {
|
|
245
|
+
result[key] = sanitizeReferrer(value);
|
|
246
|
+
} else {
|
|
247
|
+
result[key] = sanitizeUtm(value);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
};
|
|
252
|
+
export { sanitizeRef, sanitizeUtm, sanitizeReferrer };
|
|
253
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["REF_PATTERN","UTM_MAX_LENGTH","REFERRER_MAX_LENGTH","FORBIDDEN_CHARS","DECODED_FORBIDDEN_CHARS","FORBIDDEN_SCHEME_PREFIX","hasForbiddenScheme","value","test","split","some","segment","decodeRun","run","decodeURIComponent","escapes","match","out","i","length","taken","len","Math","min","slice","join","decodeOnce","replace","decodeDeep","current","next","sanitizeRef","sanitizeUtm","decoded","referrerParamParts","queryStart","indexOf","query","includes","parts","key","paramValue","URLSearchParams","push","sanitizeReferrer","decodedWhole","part","sanitizeTrafficSources","trafficSources","result","Object","keys"],"sourceRoot":"../../../src","sources":["utils/sanitize.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,11 +8,18 @@
|
|
|
8
8
|
import { logger } from "../lib/logger/index.js";
|
|
9
9
|
import { storage } from "../lib/storage/index.js";
|
|
10
10
|
import { SESSION_TRAFFIC_SOURCE_KEY } from "../constants/index.js";
|
|
11
|
+
import { sanitizeTrafficSources } from "./sanitize.js";
|
|
11
12
|
/**
|
|
12
13
|
* Parse UTM parameters and referral info from URL
|
|
13
14
|
* Supports both web URLs (https://) and deep link URLs (myapp://)
|
|
15
|
+
*
|
|
16
|
+
* Every return path is sanitized (see ./sanitize) so scanner-injected or
|
|
17
|
+
* hand-crafted payloads in a deep link can never be persisted or reported.
|
|
14
18
|
*/
|
|
15
19
|
export function parseTrafficSource(url, customRefParams, pathPattern) {
|
|
20
|
+
return sanitizeTrafficSources(extractTrafficSource(url, customRefParams, pathPattern));
|
|
21
|
+
}
|
|
22
|
+
function extractTrafficSource(url, customRefParams, pathPattern) {
|
|
16
23
|
try {
|
|
17
24
|
// Handle deep link URLs that may not have standard URL format
|
|
18
25
|
let urlObj;
|
|
@@ -100,7 +107,9 @@ export function getStoredTrafficSource() {
|
|
|
100
107
|
try {
|
|
101
108
|
const stored = storage().get(SESSION_TRAFFIC_SOURCE_KEY);
|
|
102
109
|
if (stored && typeof stored === "string") {
|
|
103
|
-
|
|
110
|
+
// Sanitize on the way out too, so values persisted by a pre-sanitization
|
|
111
|
+
// SDK version are flushed rather than replayed onto every event.
|
|
112
|
+
return sanitizeTrafficSources(JSON.parse(stored));
|
|
104
113
|
}
|
|
105
114
|
} catch (error) {
|
|
106
115
|
logger.debug("Failed to get stored traffic source:", error);
|
|
@@ -1 +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","TRAFFIC_SOURCE_KEYS","updateStoredTrafficSource","incoming","existing","merged","key","incomingVal","existingVal","mergeTrafficSourceFill","changed","value","Object","entries","String"],"sourceRoot":"../../../src","sources":["utils/trafficSource.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,wBAAe;AACtC,SAASC,OAAO,QAAQ,yBAAgB;AACxC,SAASC,0BAA0B,QAAQ,uBAAc;
|
|
1
|
+
{"version":3,"names":["logger","storage","SESSION_TRAFFIC_SOURCE_KEY","sanitizeTrafficSources","parseTrafficSource","url","customRefParams","pathPattern","extractTrafficSource","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","TRAFFIC_SOURCE_KEYS","updateStoredTrafficSource","incoming","existing","merged","key","incomingVal","existingVal","mergeTrafficSourceFill","changed","value","Object","entries","String"],"sourceRoot":"../../../src","sources":["utils/trafficSource.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAA+B,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAYnF,OAAO,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,EACP,eAAe,EAEf,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAajB,qBAAa,cAAe,YAAW,eAAe;aAgBlC,QAAQ,EAAE,MAAM;IACzB,OAAO,EAAE,OAAO;IAhBzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAoB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAsB;IAC/C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAElD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAM;IAE5B,OAAO;
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,35 @@ export declare class EventQueue implements IEventQueue {
|
|
|
23
23
|
private payloadHashes;
|
|
24
24
|
private flushMutex;
|
|
25
25
|
private appStateSubscription;
|
|
26
|
+
/**
|
|
27
|
+
* Whether anything has been flushed yet this app session. Starts false so
|
|
28
|
+
* the first event is sent immediately (see enqueue). A cold start opened
|
|
29
|
+
* from an ad click or deep link produces its attribution events right away,
|
|
30
|
+
* and those are exactly the events lost if the process is killed before the
|
|
31
|
+
* batch timer fires or AppState reports background — a force-quit from the
|
|
32
|
+
* app switcher, an OS memory kill, or a crash never gives us that chance.
|
|
33
|
+
*/
|
|
34
|
+
private flushed;
|
|
35
|
+
/**
|
|
36
|
+
* Set once cleanup starts. A flush already in flight can fail and re-queue
|
|
37
|
+
* its items after teardown has begun; without this it would arm a timer on
|
|
38
|
+
* an instance that is going away, firing network calls post-cleanup.
|
|
39
|
+
*/
|
|
40
|
+
private closed;
|
|
41
|
+
/**
|
|
42
|
+
* Bumped by clear(). flush() splices its batch out of the queue before
|
|
43
|
+
* sending, so a clear() during opt-out cannot see those items; without this
|
|
44
|
+
* a later send failure would unshift them back and they would be delivered
|
|
45
|
+
* after consent was withdrawn.
|
|
46
|
+
*/
|
|
47
|
+
private generation;
|
|
48
|
+
/**
|
|
49
|
+
* The in-progress teardown, if any. cleanup() is public and the provider can
|
|
50
|
+
* call it more than once; a second run would start its own drain flush that
|
|
51
|
+
* is exempt from the closed check, splice the events the first run had just
|
|
52
|
+
* re-queued, and send them after the first cleanup() had already resolved.
|
|
53
|
+
*/
|
|
54
|
+
private cleanupPromise;
|
|
26
55
|
constructor(writeKey: string, options: Options);
|
|
27
56
|
/**
|
|
28
57
|
* Set up listener for app state changes
|
|
@@ -45,12 +74,32 @@ export declare class EventQueue implements IEventQueue {
|
|
|
45
74
|
* Add event to queue
|
|
46
75
|
*/
|
|
47
76
|
enqueue(event: IFormoEvent, callback?: (...args: unknown[]) => void): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Arm the batch-interval timer, if there is queued work and nothing is
|
|
79
|
+
* already scheduled. Safe to call repeatedly; it never stacks timers.
|
|
80
|
+
*/
|
|
81
|
+
private scheduleFlush;
|
|
48
82
|
/**
|
|
49
83
|
* Flush events to API
|
|
50
84
|
* Uses a mutex to ensure only one flush operation runs at a time,
|
|
51
85
|
* preventing race conditions with re-queued items on failure.
|
|
52
86
|
*/
|
|
53
87
|
flush(callback?: (...args: unknown[]) => void): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* The flush body. `duringCleanup` marks the calls teardown makes itself, so
|
|
90
|
+
* they are exempt from the closed check below — every other flush must be
|
|
91
|
+
* abandoned once teardown has begun. It has to identify the specific call
|
|
92
|
+
* rather than a window of time, because cleanup spends most of its drain
|
|
93
|
+
* loop awaiting one of these, and a concurrent flush arriving then would
|
|
94
|
+
* look internal.
|
|
95
|
+
*/
|
|
96
|
+
private runFlush;
|
|
97
|
+
/**
|
|
98
|
+
* Abort a batch whose events were cleared while it sat in retry backoff.
|
|
99
|
+
* Retries span seconds, so a consumer can opt out between attempts; posting
|
|
100
|
+
* the next one would deliver events after consent was withdrawn.
|
|
101
|
+
*/
|
|
102
|
+
private assertNotCleared;
|
|
54
103
|
/**
|
|
55
104
|
* Send events with retry logic
|
|
56
105
|
*/
|
|
@@ -65,10 +114,16 @@ export declare class EventQueue implements IEventQueue {
|
|
|
65
114
|
* from being sent after consent is revoked.
|
|
66
115
|
*/
|
|
67
116
|
clear(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Give up on the events still queued at teardown, and make sure a send that
|
|
119
|
+
* is still holding a batch cannot put them back.
|
|
120
|
+
*/
|
|
121
|
+
private abandonQueuedEvents;
|
|
68
122
|
/**
|
|
69
123
|
* Clean up resources, flushing any pending events first
|
|
70
124
|
*/
|
|
71
125
|
cleanup(): Promise<void>;
|
|
126
|
+
private runCleanup;
|
|
72
127
|
}
|
|
73
128
|
export {};
|
|
74
129
|
//# sourceMappingURL=EventQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventQueue.d.ts","sourceRoot":"","sources":["../../../../../src/lib/event/EventQueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAW9D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"EventQueue.d.ts","sourceRoot":"","sources":["../../../../../src/lib/event/EventQueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAW9D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBtC,UAAU,OAAO;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA6CD;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,oBAAoB,CAAuC;IACnE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,CAAS;IACxB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAS;IACvB;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAK;IACvB;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAA8B;gBAExC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IA2B9C;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;YACW,iBAAiB;IAS/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IA2FhB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;;OAIG;IACG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;;;;;OAOG;YACW,QAAQ;IA0HtB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;YACW,aAAa;IA6C3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;OAIG;IACI,KAAK,IAAI,IAAI;IAepB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBvB,UAAU;CA+HzB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ITrafficSource } from "../types";
|
|
2
|
+
declare const sanitizeRef: (value: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* URLSearchParams has already decoded one layer by the time a UTM value gets
|
|
5
|
+
* here, so a payload encoded twice arrives still encoded:
|
|
6
|
+
* `utm_source=%253Cscript%253E` reads as the literal `%3Cscript%3E`, which
|
|
7
|
+
* contains no raw markup and would pass a raw-only check. Test the decoded
|
|
8
|
+
* form as well.
|
|
9
|
+
*/
|
|
10
|
+
declare const sanitizeUtm: (value: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* A URL carries its payload percent-encoded — `Linking` and the browser both
|
|
13
|
+
* encode `<` and `>` — so a raw-only check would pass
|
|
14
|
+
* `?utm_source=%3Cscript%3E` straight through.
|
|
15
|
+
*
|
|
16
|
+
* Checked three ways, because pattern-matching the URL as one opaque string
|
|
17
|
+
* misses what a structural read catches: the whole value raw, the whole value
|
|
18
|
+
* decoded, and each decoded query part — keys included — on its own. The last
|
|
19
|
+
* is what catches a smuggled scheme, since FORBIDDEN_SCHEME_PREFIX is anchored
|
|
20
|
+
* and `?utm_source=javascript:alert(1)` only matches once that parameter is
|
|
21
|
+
* read apart from the `myapp://` URL containing it.
|
|
22
|
+
*/
|
|
23
|
+
declare const sanitizeReferrer: (value: string) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Sanitize every traffic-source field of a (possibly sparse) traffic-source
|
|
26
|
+
* object. Unknown keys fall through to the UTM rule, the most permissive of
|
|
27
|
+
* the value rules.
|
|
28
|
+
*/
|
|
29
|
+
export declare const sanitizeTrafficSources: <T extends Partial<ITrafficSource>>(trafficSources: T) => T;
|
|
30
|
+
export { sanitizeRef, sanitizeUtm, sanitizeReferrer };
|
|
31
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA6J/C,QAAA,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MACC,CAAC;AAEvC;;;;;;GAMG;AACH,QAAA,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAapC,CAAC;AA6BF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MAyBzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,OAAO,CAAC,cAAc,CAAC,EACtE,gBAAgB,CAAC,KAChB,CAgBF,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -6,6 +6,9 @@ import type { ITrafficSource } from "../types";
|
|
|
6
6
|
/**
|
|
7
7
|
* Parse UTM parameters and referral info from URL
|
|
8
8
|
* Supports both web URLs (https://) and deep link URLs (myapp://)
|
|
9
|
+
*
|
|
10
|
+
* Every return path is sanitized (see ./sanitize) so scanner-injected or
|
|
11
|
+
* hand-crafted payloads in a deep link can never be persisted or reported.
|
|
9
12
|
*/
|
|
10
13
|
export declare function parseTrafficSource(url: string, customRefParams?: string[], pathPattern?: string): Partial<ITrafficSource>;
|
|
11
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trafficSource.d.ts","sourceRoot":"","sources":["../../../../src/utils/trafficSource.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"trafficSource.d.ts","sourceRoot":"","sources":["../../../../src/utils/trafficSource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAsED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAkB/E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAc5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAaD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,IAAI,CAmBN;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,IAAI,CAqBN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.
|
|
1
|
+
export declare const version = "1.1.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Main SDK class for tracking wallet events and user analytics in mobile dApps
|
|
5
5
|
*/
|
|
6
|
-
import { AsyncStorageInterface } from "./lib/storage";
|
|
7
|
-
import { Address, ChainID, Config, IFormoAnalytics, IFormoEventContext, IFormoEventProperties, Options, SignatureStatus, TransactionStatus } from "./types";
|
|
6
|
+
import { AsyncStorageInterface } from "./lib/storage/index.js";
|
|
7
|
+
import { Address, ChainID, Config, IFormoAnalytics, IFormoEventContext, IFormoEventProperties, Options, SignatureStatus, TransactionStatus } from "./types/index.js";
|
|
8
8
|
export declare class FormoAnalytics implements IFormoAnalytics {
|
|
9
9
|
readonly writeKey: string;
|
|
10
10
|
options: Options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAA+B,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { FC } from "react";
|
|
2
|
-
import { FormoAnalyticsProviderProps, IFormoAnalytics } from "./types";
|
|
2
|
+
import { FormoAnalyticsProviderProps, IFormoAnalytics } from "./types/index.js";
|
|
3
3
|
export declare const FormoAnalyticsContext: React.Context<IFormoAnalytics>;
|
|
4
4
|
/**
|
|
5
5
|
* Formo Analytics Provider for React Native
|
|
@@ -1 +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,
|
|
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,kBAAS,CAAC;AAyBvE,eAAO,MAAM,qBAAqB,gCACc,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAwBlE,CAAC;AAgMF,eAAO,MAAM,QAAQ,QAAO,eAmB3B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./events";
|
|
2
|
-
export * from "./config";
|
|
3
|
-
export * from "./storage";
|
|
1
|
+
export * from "./events.js";
|
|
2
|
+
export * from "./config.js";
|
|
3
|
+
export * from "./storage.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAU,CAAC;AACzB,cAAc,aAAU,CAAC;AACzB,cAAc,cAAW,CAAC"}
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
* }
|
|
37
37
|
* ```
|
|
38
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";
|
|
39
|
+
export { FormoAnalytics } from "./FormoAnalytics.js";
|
|
40
|
+
export { FormoAnalyticsProvider, FormoAnalyticsContext, useFormo, } from "./FormoAnalyticsProvider.js";
|
|
41
|
+
export * from "./types/index.js";
|
|
42
|
+
export { SignatureStatus, TransactionStatus } from "./types/events.js";
|
|
43
|
+
export type { AsyncStorageInterface } from "./lib/storage/index.js";
|
|
44
44
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAkB,CAAC;AAClD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,GACT,MAAM,6BAA0B,CAAC;AAGlC,cAAc,kBAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAgB,CAAC;AAGpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAe,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "../../types";
|
|
2
|
-
import { IEventFactory } from "./types";
|
|
1
|
+
import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "../../types/index.js";
|
|
2
|
+
import { IEventFactory } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Get the current session id, or start a new one.
|
|
5
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventFactory.d.ts","sourceRoot":"","sources":["../../../../../src/lib/event/EventFactory.ts"],"names":[],"mappings":"AAoCA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,OAAO,EACP,eAAe,EACf,iBAAiB,EAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"EventFactory.d.ts","sourceRoot":"","sources":["../../../../../src/lib/event/EventFactory.ts"],"names":[],"mappings":"AAoCA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,OAAO,EACP,eAAe,EACf,iBAAiB,EAClB,MAAM,sBAAa,CAAC;AAWrB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAS,CAAC;AAiBxC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAcrC;AAqCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBrE;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACzC,QAAQ,GAAG,QAAQ,CAGrB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAgBT;AAED;;;GAGG;AACH,cAAM,YAAa,YAAW,aAAa;IACzC,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,0DAA0D;IAC1D,OAAO,CAAC,iBAAiB,CAAC,CAA4B;gBAE1C,OAAO,CAAC,EAAE,OAAO;IAI7B;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB;;OAEG;YACW,cAAc;IAuC5B;;;OAGG;IACH;;;;;;;;;OASG;YACW,kBAAkB;YAMlB,aAAa;YASb,iBAAiB;IAmG/B;;OAEG;YACW,eAAe;IAuC7B;;OAEG;YACW,gBAAgB;IAkD9B;;;;;OAKG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAqCjB,yBAAyB,CAC7B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAajB,qBAAqB,CACzB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EACzB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAejB,oBAAoB,CACxB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAajB,uBAAuB,CAC3B,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAajB,yBAAyB,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAajB,sBAAsB,CAC1B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAejB,wBAAwB,CAC5B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAoBjB,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAyBvB;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC;CAiGxB;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|