@formo/analytics 1.13.4-alpha.2 → 1.13.4-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/FormoAnalytics.ts +29 -3
- package/src/FormoAnalyticsProvider.tsx +1 -1
- package/src/types/base.ts +6 -6
- package/src/types/provider.ts +19 -7
- package/dist/cjs/src/FormoAnalytics.d.ts +0 -167
- package/dist/cjs/src/FormoAnalytics.d.ts.map +0 -1
- package/dist/cjs/src/FormoAnalytics.js +0 -922
- package/dist/cjs/src/FormoAnalytics.js.map +0 -1
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts +0 -7
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +0 -1
- package/dist/cjs/src/FormoAnalyticsProvider.js +0 -128
- package/dist/cjs/src/FormoAnalyticsProvider.js.map +0 -1
- package/dist/cjs/src/constants/config.d.ts +0 -602
- package/dist/cjs/src/constants/config.d.ts.map +0 -1
- package/dist/cjs/src/constants/config.js +0 -657
- package/dist/cjs/src/constants/config.js.map +0 -1
- package/dist/cjs/src/constants/events.d.ts +0 -10
- package/dist/cjs/src/constants/events.d.ts.map +0 -1
- package/dist/cjs/src/constants/events.js +0 -14
- package/dist/cjs/src/constants/events.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts +0 -3
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js +0 -19
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/index.d.ts +0 -4
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js +0 -20
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/lib/utils.d.ts +0 -2
- package/dist/cjs/src/lib/utils.d.ts.map +0 -1
- package/dist/cjs/src/lib/utils.js +0 -31
- package/dist/cjs/src/lib/utils.js.map +0 -1
- package/dist/cjs/src/types/base.d.ts +0 -16
- package/dist/cjs/src/types/base.d.ts.map +0 -1
- package/dist/cjs/src/types/base.js +0 -3
- package/dist/cjs/src/types/base.js.map +0 -1
- package/dist/cjs/src/types/events.d.ts +0 -11
- package/dist/cjs/src/types/events.d.ts.map +0 -1
- package/dist/cjs/src/types/events.js +0 -16
- package/dist/cjs/src/types/events.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts +0 -4
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js +0 -20
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/provider.d.ts +0 -15
- package/dist/cjs/src/types/provider.d.ts.map +0 -1
- package/dist/cjs/src/types/provider.js +0 -3
- package/dist/cjs/src/types/provider.js.map +0 -1
- package/dist/cjs/test/lib.spec.d.ts +0 -2
- package/dist/cjs/test/lib.spec.d.ts.map +0 -1
- package/dist/cjs/test/lib.spec.js +0 -25
- package/dist/cjs/test/lib.spec.js.map +0 -1
- package/dist/cjs/tsconfig.tsbuildinfo +0 -1
- package/dist/esm/src/FormoAnalytics.d.ts +0 -167
- package/dist/esm/src/FormoAnalytics.d.ts.map +0 -1
- package/dist/esm/src/FormoAnalytics.js +0 -916
- package/dist/esm/src/FormoAnalytics.js.map +0 -1
- package/dist/esm/src/FormoAnalyticsProvider.d.ts +0 -7
- package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +0 -1
- package/dist/esm/src/FormoAnalyticsProvider.js +0 -123
- package/dist/esm/src/FormoAnalyticsProvider.js.map +0 -1
- package/dist/esm/src/constants/config.d.ts +0 -602
- package/dist/esm/src/constants/config.d.ts.map +0 -1
- package/dist/esm/src/constants/config.js +0 -654
- package/dist/esm/src/constants/config.js.map +0 -1
- package/dist/esm/src/constants/events.d.ts +0 -10
- package/dist/esm/src/constants/events.d.ts.map +0 -1
- package/dist/esm/src/constants/events.js +0 -11
- package/dist/esm/src/constants/events.js.map +0 -1
- package/dist/esm/src/constants/index.d.ts +0 -3
- package/dist/esm/src/constants/index.d.ts.map +0 -1
- package/dist/esm/src/constants/index.js +0 -3
- package/dist/esm/src/constants/index.js.map +0 -1
- package/dist/esm/src/index.d.ts +0 -4
- package/dist/esm/src/index.d.ts.map +0 -1
- package/dist/esm/src/index.js +0 -4
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/lib/utils.d.ts +0 -2
- package/dist/esm/src/lib/utils.d.ts.map +0 -1
- package/dist/esm/src/lib/utils.js +0 -28
- package/dist/esm/src/lib/utils.js.map +0 -1
- package/dist/esm/src/types/base.d.ts +0 -16
- package/dist/esm/src/types/base.d.ts.map +0 -1
- package/dist/esm/src/types/base.js +0 -2
- package/dist/esm/src/types/base.js.map +0 -1
- package/dist/esm/src/types/events.d.ts +0 -11
- package/dist/esm/src/types/events.d.ts.map +0 -1
- package/dist/esm/src/types/events.js +0 -13
- package/dist/esm/src/types/events.js.map +0 -1
- package/dist/esm/src/types/index.d.ts +0 -4
- package/dist/esm/src/types/index.d.ts.map +0 -1
- package/dist/esm/src/types/index.js +0 -4
- package/dist/esm/src/types/index.js.map +0 -1
- package/dist/esm/src/types/provider.d.ts +0 -15
- package/dist/esm/src/types/provider.d.ts.map +0 -1
- package/dist/esm/src/types/provider.js +0 -2
- package/dist/esm/src/types/provider.js.map +0 -1
- package/dist/esm/test/lib.spec.d.ts +0 -2
- package/dist/esm/test/lib.spec.d.ts.map +0 -1
- package/dist/esm/test/lib.spec.js +0 -23
- package/dist/esm/test/lib.spec.js.map +0 -1
- package/dist/esm/tsconfig.tsbuildinfo +0 -1
- package/dist/index.umd.min.js +0 -3
- package/dist/index.umd.min.js.LICENSE.txt +0 -19
- package/dist/index.umd.min.js.map +0 -1
|
@@ -1,922 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
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);
|
|
24
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
-
function step(op) {
|
|
27
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
-
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;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
43
|
-
}
|
|
44
|
-
op = body.call(thisArg, _);
|
|
45
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
50
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
51
|
-
if (ar || !(i in from)) {
|
|
52
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
53
|
-
ar[i] = from[i];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
57
|
-
};
|
|
58
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
59
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
60
|
-
};
|
|
61
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
-
exports.FormoAnalytics = void 0;
|
|
63
|
-
var axios_1 = __importDefault(require("axios"));
|
|
64
|
-
var mipd_1 = require("mipd");
|
|
65
|
-
var constants_1 = require("./constants");
|
|
66
|
-
var types_1 = require("./types");
|
|
67
|
-
var utils_1 = require("./lib/utils");
|
|
68
|
-
var FormoAnalytics = /** @class */ (function () {
|
|
69
|
-
function FormoAnalytics(apiKey, options) {
|
|
70
|
-
if (options === void 0) { options = {}; }
|
|
71
|
-
this.apiKey = apiKey;
|
|
72
|
-
this.options = options;
|
|
73
|
-
this._providerListeners = {};
|
|
74
|
-
this.config = {
|
|
75
|
-
apiKey: apiKey,
|
|
76
|
-
};
|
|
77
|
-
// TODO: replace with eip6963
|
|
78
|
-
var provider = options.provider || (window === null || window === void 0 ? void 0 : window.ethereum);
|
|
79
|
-
if (provider) {
|
|
80
|
-
this.trackProvider(provider);
|
|
81
|
-
}
|
|
82
|
-
this.trackFirstPageHit();
|
|
83
|
-
this.trackPageHits();
|
|
84
|
-
}
|
|
85
|
-
FormoAnalytics.init = function (apiKey, options) {
|
|
86
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
-
var analytics, providers;
|
|
88
|
-
return __generator(this, function (_a) {
|
|
89
|
-
switch (_a.label) {
|
|
90
|
-
case 0:
|
|
91
|
-
analytics = new FormoAnalytics(apiKey, options);
|
|
92
|
-
return [4 /*yield*/, analytics.getProviders()];
|
|
93
|
-
case 1:
|
|
94
|
-
providers = _a.sent();
|
|
95
|
-
return [4 /*yield*/, analytics.identifyAll(providers)];
|
|
96
|
-
case 2:
|
|
97
|
-
_a.sent();
|
|
98
|
-
return [2 /*return*/, analytics];
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
/*
|
|
104
|
-
Public SDK functions
|
|
105
|
-
*/
|
|
106
|
-
/**
|
|
107
|
-
* Emits a page visit event with the current URL information, fire on page change.
|
|
108
|
-
* @returns {Promise<void>}
|
|
109
|
-
*/
|
|
110
|
-
FormoAnalytics.prototype.page = function () {
|
|
111
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
112
|
-
return __generator(this, function (_a) {
|
|
113
|
-
switch (_a.label) {
|
|
114
|
-
case 0: return [4 /*yield*/, this.trackPageHit()];
|
|
115
|
-
case 1:
|
|
116
|
-
_a.sent();
|
|
117
|
-
return [2 /*return*/];
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
/**
|
|
123
|
-
* Emits a wallet connect event.
|
|
124
|
-
* @param {ChainID} params.chainId
|
|
125
|
-
* @param {Address} params.address
|
|
126
|
-
* @throws {Error} If chainId or address is empty
|
|
127
|
-
* @returns {Promise<void>}
|
|
128
|
-
*/
|
|
129
|
-
FormoAnalytics.prototype.connect = function (_a) {
|
|
130
|
-
return __awaiter(this, arguments, void 0, function (_b) {
|
|
131
|
-
var chainId = _b.chainId, address = _b.address;
|
|
132
|
-
return __generator(this, function (_c) {
|
|
133
|
-
switch (_c.label) {
|
|
134
|
-
case 0:
|
|
135
|
-
if (!chainId) {
|
|
136
|
-
throw new Error("FormoAnalytics::connect: chain ID cannot be empty");
|
|
137
|
-
}
|
|
138
|
-
if (!address) {
|
|
139
|
-
throw new Error("FormoAnalytics::connect: address cannot be empty");
|
|
140
|
-
}
|
|
141
|
-
this.currentChainId = chainId;
|
|
142
|
-
this.currentConnectedAddress = address;
|
|
143
|
-
return [4 /*yield*/, this.trackEvent(constants_1.Event.CONNECT, {
|
|
144
|
-
chainId: chainId,
|
|
145
|
-
address: address,
|
|
146
|
-
})];
|
|
147
|
-
case 1:
|
|
148
|
-
_c.sent();
|
|
149
|
-
return [2 /*return*/];
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
};
|
|
154
|
-
/**
|
|
155
|
-
* Emits a wallet disconnect event.
|
|
156
|
-
* @param {ChainID} params.chainId
|
|
157
|
-
* @param {Address} params.address
|
|
158
|
-
* @returns {Promise<void>}
|
|
159
|
-
*/
|
|
160
|
-
FormoAnalytics.prototype.disconnect = function (params) {
|
|
161
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
162
|
-
var address, chainId;
|
|
163
|
-
return __generator(this, function (_a) {
|
|
164
|
-
switch (_a.label) {
|
|
165
|
-
case 0:
|
|
166
|
-
address = (params === null || params === void 0 ? void 0 : params.address) || this.currentConnectedAddress;
|
|
167
|
-
chainId = (params === null || params === void 0 ? void 0 : params.chainId) || this.currentChainId;
|
|
168
|
-
return [4 /*yield*/, this.handleDisconnect(chainId, address)];
|
|
169
|
-
case 1:
|
|
170
|
-
_a.sent();
|
|
171
|
-
return [2 /*return*/];
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
};
|
|
176
|
-
/**
|
|
177
|
-
* Emits a chain network change event.
|
|
178
|
-
* @param {ChainID} params.chainId
|
|
179
|
-
* @param {Address} params.address
|
|
180
|
-
* @throws {Error} If chainId is empty, zero, or not a valid number
|
|
181
|
-
* @throws {Error} If no address is provided and no previous address is recorded
|
|
182
|
-
* @returns {Promise<void>}
|
|
183
|
-
*/
|
|
184
|
-
FormoAnalytics.prototype.chain = function (_a) {
|
|
185
|
-
return __awaiter(this, arguments, void 0, function (_b) {
|
|
186
|
-
var chainId = _b.chainId, address = _b.address;
|
|
187
|
-
return __generator(this, function (_c) {
|
|
188
|
-
switch (_c.label) {
|
|
189
|
-
case 0:
|
|
190
|
-
if (!chainId || Number(chainId) === 0) {
|
|
191
|
-
throw new Error("FormoAnalytics::chain: chainId cannot be empty or 0");
|
|
192
|
-
}
|
|
193
|
-
if (isNaN(Number(chainId))) {
|
|
194
|
-
throw new Error("FormoAnalytics::chain: chainId must be a valid decimal number");
|
|
195
|
-
}
|
|
196
|
-
if (!address && !this.currentConnectedAddress) {
|
|
197
|
-
throw new Error("FormoAnalytics::chain: address was empty and no previous address has been recorded");
|
|
198
|
-
}
|
|
199
|
-
this.currentChainId = chainId;
|
|
200
|
-
return [4 /*yield*/, this.trackEvent(constants_1.Event.CHAIN_CHANGED, {
|
|
201
|
-
chainId: chainId,
|
|
202
|
-
address: address || this.currentConnectedAddress,
|
|
203
|
-
})];
|
|
204
|
-
case 1:
|
|
205
|
-
_c.sent();
|
|
206
|
-
return [2 /*return*/];
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
};
|
|
211
|
-
/**
|
|
212
|
-
* Emits a signature event.
|
|
213
|
-
* @param {SignatureStatus} params.status - requested, confirmed, rejected
|
|
214
|
-
* @param {ChainID} params.chainId
|
|
215
|
-
* @param {Address} params.address
|
|
216
|
-
* @param {string} params.message
|
|
217
|
-
* @param {string} params.signatureHash - only provided if status is confirmed
|
|
218
|
-
* @returns {Promise<void>}
|
|
219
|
-
*/
|
|
220
|
-
FormoAnalytics.prototype.signature = function (_a) {
|
|
221
|
-
return __awaiter(this, arguments, void 0, function (_b) {
|
|
222
|
-
var status = _b.status, chainId = _b.chainId, address = _b.address, message = _b.message, signatureHash = _b.signatureHash;
|
|
223
|
-
return __generator(this, function (_c) {
|
|
224
|
-
switch (_c.label) {
|
|
225
|
-
case 0: return [4 /*yield*/, this.trackEvent(constants_1.Event.SIGNATURE, __assign({ status: status, chainId: chainId, address: address, message: message }, (signatureHash && { signatureHash: signatureHash })))];
|
|
226
|
-
case 1:
|
|
227
|
-
_c.sent();
|
|
228
|
-
return [2 /*return*/];
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
};
|
|
233
|
-
/**
|
|
234
|
-
* Emits a transaction event.
|
|
235
|
-
* @param {TransactionStatus} params.status - started, broadcasted, rejected
|
|
236
|
-
* @param {ChainID} params.chainId
|
|
237
|
-
* @param {Address} params.address
|
|
238
|
-
* @param {string} params.data
|
|
239
|
-
* @param {string} params.to
|
|
240
|
-
* @param {string} params.value
|
|
241
|
-
* @param {string} params.transactionHash - only provided if status is broadcasted
|
|
242
|
-
* @returns {Promise<void>}
|
|
243
|
-
*/
|
|
244
|
-
FormoAnalytics.prototype.transaction = function (_a) {
|
|
245
|
-
return __awaiter(this, arguments, void 0, function (_b) {
|
|
246
|
-
var status = _b.status, chainId = _b.chainId, address = _b.address, data = _b.data, to = _b.to, value = _b.value, transactionHash = _b.transactionHash;
|
|
247
|
-
return __generator(this, function (_c) {
|
|
248
|
-
switch (_c.label) {
|
|
249
|
-
case 0: return [4 /*yield*/, this.trackEvent(constants_1.Event.TRANSACTION, __assign({ status: status, chainId: chainId, address: address, data: data, to: to, value: value }, (transactionHash && { transactionHash: transactionHash })))];
|
|
250
|
-
case 1:
|
|
251
|
-
_c.sent();
|
|
252
|
-
return [2 /*return*/];
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
};
|
|
257
|
-
/**
|
|
258
|
-
* Emits a identify event with current wallet address.
|
|
259
|
-
* @param {Address} params.address
|
|
260
|
-
* @returns {Promise<void>}
|
|
261
|
-
*/
|
|
262
|
-
FormoAnalytics.prototype.identify = function (_a) {
|
|
263
|
-
return __awaiter(this, arguments, void 0, function (_b) {
|
|
264
|
-
var address = _b.address, providerName = _b.providerName, rdns = _b.rdns;
|
|
265
|
-
return __generator(this, function (_c) {
|
|
266
|
-
switch (_c.label) {
|
|
267
|
-
case 0:
|
|
268
|
-
if (!address) return [3 /*break*/, 2];
|
|
269
|
-
return [4 /*yield*/, this.trackEvent(constants_1.Event.IDENTIFY, {
|
|
270
|
-
address: address,
|
|
271
|
-
providerName: providerName,
|
|
272
|
-
rdns: rdns,
|
|
273
|
-
})];
|
|
274
|
-
case 1:
|
|
275
|
-
_c.sent();
|
|
276
|
-
_c.label = 2;
|
|
277
|
-
case 2: return [2 /*return*/];
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
});
|
|
281
|
-
};
|
|
282
|
-
/**
|
|
283
|
-
* Emits a custom event with custom data.
|
|
284
|
-
* @param {string} action
|
|
285
|
-
* @param {Record<string, any>} payload
|
|
286
|
-
* @returns {Promise<void>}
|
|
287
|
-
*/
|
|
288
|
-
FormoAnalytics.prototype.track = function (action, payload) {
|
|
289
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
290
|
-
return __generator(this, function (_a) {
|
|
291
|
-
switch (_a.label) {
|
|
292
|
-
case 0: return [4 /*yield*/, this.trackEvent(action, payload)];
|
|
293
|
-
case 1:
|
|
294
|
-
_a.sent();
|
|
295
|
-
return [2 /*return*/];
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
};
|
|
300
|
-
/*
|
|
301
|
-
SDK tracking and event listener functions
|
|
302
|
-
*/
|
|
303
|
-
FormoAnalytics.prototype.trackProvider = function (provider) {
|
|
304
|
-
if (provider === this._provider) {
|
|
305
|
-
console.log("Provider already tracked.");
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
this.currentChainId = undefined;
|
|
309
|
-
this.currentConnectedAddress = undefined;
|
|
310
|
-
if (this._provider) {
|
|
311
|
-
var actions = Object.keys(this._providerListeners);
|
|
312
|
-
for (var _i = 0, actions_1 = actions; _i < actions_1.length; _i++) {
|
|
313
|
-
var action = actions_1[_i];
|
|
314
|
-
this._provider.removeListener(action, this._providerListeners[action]);
|
|
315
|
-
delete this._providerListeners[action];
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
this._provider = provider;
|
|
319
|
-
// Register listeners for web3 provider events
|
|
320
|
-
this.registerAddressChangedListener();
|
|
321
|
-
this.registerChainChangedListener();
|
|
322
|
-
this.registerSignatureListener();
|
|
323
|
-
this.registerTransactionListener();
|
|
324
|
-
};
|
|
325
|
-
FormoAnalytics.prototype.registerAddressChangedListener = function () {
|
|
326
|
-
var _this = this;
|
|
327
|
-
var _a, _b;
|
|
328
|
-
var listener = function () {
|
|
329
|
-
var args = [];
|
|
330
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
331
|
-
args[_i] = arguments[_i];
|
|
332
|
-
}
|
|
333
|
-
return _this.onAddressChanged(args[0]);
|
|
334
|
-
};
|
|
335
|
-
(_a = this._provider) === null || _a === void 0 ? void 0 : _a.on("accountsChanged", listener);
|
|
336
|
-
this._providerListeners["accountsChanged"] = listener;
|
|
337
|
-
var onAddressDisconnected = this.onAddressDisconnected.bind(this);
|
|
338
|
-
(_b = this._provider) === null || _b === void 0 ? void 0 : _b.on("disconnect", onAddressDisconnected);
|
|
339
|
-
this._providerListeners["disconnect"] = onAddressDisconnected;
|
|
340
|
-
};
|
|
341
|
-
FormoAnalytics.prototype.registerChainChangedListener = function () {
|
|
342
|
-
var _this = this;
|
|
343
|
-
var _a;
|
|
344
|
-
var listener = function () {
|
|
345
|
-
var args = [];
|
|
346
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
347
|
-
args[_i] = arguments[_i];
|
|
348
|
-
}
|
|
349
|
-
return _this.onChainChanged(args[0]);
|
|
350
|
-
};
|
|
351
|
-
(_a = this.provider) === null || _a === void 0 ? void 0 : _a.on("chainChanged", listener);
|
|
352
|
-
this._providerListeners["chainChanged"] = listener;
|
|
353
|
-
};
|
|
354
|
-
FormoAnalytics.prototype.registerSignatureListener = function () {
|
|
355
|
-
var _this = this;
|
|
356
|
-
var _a;
|
|
357
|
-
if (!this.provider) {
|
|
358
|
-
console.error("_trackSigning: provider not found");
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
if (((_a = Object.getOwnPropertyDescriptor(this.provider, "request")) === null || _a === void 0 ? void 0 : _a.writable) ===
|
|
362
|
-
false) {
|
|
363
|
-
console.warn("_trackSigning: provider.request is not writable");
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
var request = this.provider.request.bind(this.provider);
|
|
367
|
-
this.provider.request = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
|
|
368
|
-
var response, error_1, rpcError;
|
|
369
|
-
var method = _b.method, params = _b.params;
|
|
370
|
-
return __generator(this, function (_c) {
|
|
371
|
-
switch (_c.label) {
|
|
372
|
-
case 0:
|
|
373
|
-
if (!(Array.isArray(params) &&
|
|
374
|
-
["eth_signTypedData_v4", "personal_sign"].includes(method))) return [3 /*break*/, 4];
|
|
375
|
-
// Emit signature request event
|
|
376
|
-
this.signature(__assign({ status: types_1.SignatureStatus.REQUESTED }, this.buildSignatureEventPayload(method, params)));
|
|
377
|
-
_c.label = 1;
|
|
378
|
-
case 1:
|
|
379
|
-
_c.trys.push([1, 3, , 4]);
|
|
380
|
-
return [4 /*yield*/, request({ method: method, params: params })];
|
|
381
|
-
case 2:
|
|
382
|
-
response = (_c.sent());
|
|
383
|
-
if (response) {
|
|
384
|
-
// Emit signature confirmed event
|
|
385
|
-
this.signature(__assign({ status: types_1.SignatureStatus.CONFIRMED }, this.buildSignatureEventPayload(method, params, response)));
|
|
386
|
-
}
|
|
387
|
-
return [2 /*return*/, response];
|
|
388
|
-
case 3:
|
|
389
|
-
error_1 = _c.sent();
|
|
390
|
-
rpcError = error_1;
|
|
391
|
-
if (rpcError && (rpcError === null || rpcError === void 0 ? void 0 : rpcError.code) === 4001) {
|
|
392
|
-
// Emit signature rejected event
|
|
393
|
-
this.signature(__assign({ status: types_1.SignatureStatus.REJECTED }, this.buildSignatureEventPayload(method, params)));
|
|
394
|
-
}
|
|
395
|
-
throw error_1;
|
|
396
|
-
case 4: return [2 /*return*/, request({ method: method, params: params })];
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
}); };
|
|
400
|
-
return;
|
|
401
|
-
};
|
|
402
|
-
FormoAnalytics.prototype.registerTransactionListener = function () {
|
|
403
|
-
var _this = this;
|
|
404
|
-
var _a;
|
|
405
|
-
if (!this.provider) {
|
|
406
|
-
console.error("_trackTransactions: provider not found");
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
if (((_a = Object.getOwnPropertyDescriptor(this.provider, "request")) === null || _a === void 0 ? void 0 : _a.writable) ===
|
|
410
|
-
false) {
|
|
411
|
-
console.warn("_trackTransactions: provider.request is not writable");
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
var request = this.provider.request.bind(this.provider);
|
|
415
|
-
this.provider.request = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
|
|
416
|
-
var payload, transactionHash, error_2, rpcError;
|
|
417
|
-
var method = _b.method, params = _b.params;
|
|
418
|
-
return __generator(this, function (_c) {
|
|
419
|
-
switch (_c.label) {
|
|
420
|
-
case 0:
|
|
421
|
-
if (!(Array.isArray(params) &&
|
|
422
|
-
method === "eth_sendTransaction" &&
|
|
423
|
-
params[0])) return [3 /*break*/, 5];
|
|
424
|
-
return [4 /*yield*/, this.buildTransactionEventPayload(params)];
|
|
425
|
-
case 1:
|
|
426
|
-
payload = _c.sent();
|
|
427
|
-
this.transaction(__assign({ status: types_1.TransactionStatus.STARTED }, payload));
|
|
428
|
-
_c.label = 2;
|
|
429
|
-
case 2:
|
|
430
|
-
_c.trys.push([2, 4, , 5]);
|
|
431
|
-
return [4 /*yield*/, request({ method: method, params: params })];
|
|
432
|
-
case 3:
|
|
433
|
-
transactionHash = (_c.sent());
|
|
434
|
-
// Track transaction broadcast
|
|
435
|
-
this.transaction(__assign(__assign({ status: types_1.TransactionStatus.BROADCASTED }, payload), { transactionHash: transactionHash }));
|
|
436
|
-
return [2 /*return*/];
|
|
437
|
-
case 4:
|
|
438
|
-
error_2 = _c.sent();
|
|
439
|
-
console.log("transaction listener catch");
|
|
440
|
-
console.log(error_2);
|
|
441
|
-
rpcError = error_2;
|
|
442
|
-
if (rpcError && (rpcError === null || rpcError === void 0 ? void 0 : rpcError.code) === 4001) {
|
|
443
|
-
// Emit transaction rejected event
|
|
444
|
-
this.transaction(__assign({ status: types_1.TransactionStatus.REJECTED }, payload));
|
|
445
|
-
}
|
|
446
|
-
throw error_2;
|
|
447
|
-
case 5: return [2 /*return*/, request({ method: method, params: params })];
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
}); };
|
|
451
|
-
return;
|
|
452
|
-
};
|
|
453
|
-
FormoAnalytics.prototype.onAddressChanged = function (addresses) {
|
|
454
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
455
|
-
return __generator(this, function (_a) {
|
|
456
|
-
if (addresses.length > 0) {
|
|
457
|
-
this.onAddressConnected(addresses[0]);
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
this.onAddressDisconnected();
|
|
461
|
-
}
|
|
462
|
-
return [2 /*return*/];
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
};
|
|
466
|
-
FormoAnalytics.prototype.onAddressConnected = function (address) {
|
|
467
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
468
|
-
var _a;
|
|
469
|
-
return __generator(this, function (_b) {
|
|
470
|
-
switch (_b.label) {
|
|
471
|
-
case 0:
|
|
472
|
-
if (address === this.currentConnectedAddress) {
|
|
473
|
-
// We have already reported this address
|
|
474
|
-
return [2 /*return*/];
|
|
475
|
-
}
|
|
476
|
-
else {
|
|
477
|
-
this.currentConnectedAddress = address;
|
|
478
|
-
}
|
|
479
|
-
_a = this;
|
|
480
|
-
return [4 /*yield*/, this.getCurrentChainId()];
|
|
481
|
-
case 1:
|
|
482
|
-
_a.currentChainId = _b.sent();
|
|
483
|
-
this.connect({ chainId: this.currentChainId, address: address });
|
|
484
|
-
return [2 /*return*/];
|
|
485
|
-
}
|
|
486
|
-
});
|
|
487
|
-
});
|
|
488
|
-
};
|
|
489
|
-
FormoAnalytics.prototype.handleDisconnect = function (chainId, address) {
|
|
490
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
491
|
-
var payload;
|
|
492
|
-
return __generator(this, function (_a) {
|
|
493
|
-
switch (_a.label) {
|
|
494
|
-
case 0:
|
|
495
|
-
payload = {
|
|
496
|
-
chain_id: chainId || this.currentChainId,
|
|
497
|
-
address: address || this.currentConnectedAddress,
|
|
498
|
-
};
|
|
499
|
-
this.currentChainId = undefined;
|
|
500
|
-
this.currentConnectedAddress = undefined;
|
|
501
|
-
return [4 /*yield*/, this.trackEvent(constants_1.Event.DISCONNECT, payload)];
|
|
502
|
-
case 1:
|
|
503
|
-
_a.sent();
|
|
504
|
-
return [2 /*return*/];
|
|
505
|
-
}
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
};
|
|
509
|
-
FormoAnalytics.prototype.onAddressDisconnected = function () {
|
|
510
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
511
|
-
return __generator(this, function (_a) {
|
|
512
|
-
switch (_a.label) {
|
|
513
|
-
case 0: return [4 /*yield*/, this.handleDisconnect(this.currentChainId, this.currentConnectedAddress)];
|
|
514
|
-
case 1:
|
|
515
|
-
_a.sent();
|
|
516
|
-
return [2 /*return*/];
|
|
517
|
-
}
|
|
518
|
-
});
|
|
519
|
-
});
|
|
520
|
-
};
|
|
521
|
-
FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
|
|
522
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
523
|
-
var address;
|
|
524
|
-
return __generator(this, function (_a) {
|
|
525
|
-
switch (_a.label) {
|
|
526
|
-
case 0:
|
|
527
|
-
this.currentChainId = parseInt(chainIdHex);
|
|
528
|
-
if (!!this.currentConnectedAddress) return [3 /*break*/, 2];
|
|
529
|
-
if (!this.provider) {
|
|
530
|
-
console.log("FormoAnalytics::onChainChanged: provider not found. CHAIN_CHANGED not reported");
|
|
531
|
-
return [2 /*return*/, Promise.resolve()];
|
|
532
|
-
}
|
|
533
|
-
return [4 /*yield*/, this.getAddress()];
|
|
534
|
-
case 1:
|
|
535
|
-
address = _a.sent();
|
|
536
|
-
if (!address) {
|
|
537
|
-
console.log("FormoAnalytics::onChainChanged: Unable to fetch or store connected address");
|
|
538
|
-
return [2 /*return*/, Promise.resolve()];
|
|
539
|
-
}
|
|
540
|
-
this.currentConnectedAddress = address;
|
|
541
|
-
_a.label = 2;
|
|
542
|
-
case 2:
|
|
543
|
-
// Proceed only if the address exists
|
|
544
|
-
if (this.currentConnectedAddress) {
|
|
545
|
-
return [2 /*return*/, this.chain({
|
|
546
|
-
chainId: this.currentChainId,
|
|
547
|
-
address: this.currentConnectedAddress,
|
|
548
|
-
})];
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
console.log("FormoAnalytics::onChainChanged: currentConnectedAddress is null despite fetch attempt");
|
|
552
|
-
}
|
|
553
|
-
return [2 /*return*/];
|
|
554
|
-
}
|
|
555
|
-
});
|
|
556
|
-
});
|
|
557
|
-
};
|
|
558
|
-
FormoAnalytics.prototype.trackFirstPageHit = function () {
|
|
559
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
560
|
-
return __generator(this, function (_a) {
|
|
561
|
-
if (sessionStorage.getItem(constants_1.CURRENT_URL_KEY) === null) {
|
|
562
|
-
sessionStorage.setItem(constants_1.CURRENT_URL_KEY, window.location.href);
|
|
563
|
-
}
|
|
564
|
-
return [2 /*return*/, this.trackPageHit()];
|
|
565
|
-
});
|
|
566
|
-
});
|
|
567
|
-
};
|
|
568
|
-
FormoAnalytics.prototype.trackPageHits = function () {
|
|
569
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
570
|
-
var oldPushState, oldReplaceState;
|
|
571
|
-
var _this = this;
|
|
572
|
-
return __generator(this, function (_a) {
|
|
573
|
-
oldPushState = history.pushState;
|
|
574
|
-
history.pushState = function pushState() {
|
|
575
|
-
var args = [];
|
|
576
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
577
|
-
args[_i] = arguments[_i];
|
|
578
|
-
}
|
|
579
|
-
var ret = oldPushState.apply(this, args);
|
|
580
|
-
window.dispatchEvent(new window.Event("locationchange"));
|
|
581
|
-
return ret;
|
|
582
|
-
};
|
|
583
|
-
oldReplaceState = history.replaceState;
|
|
584
|
-
history.replaceState = function replaceState() {
|
|
585
|
-
var args = [];
|
|
586
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
587
|
-
args[_i] = arguments[_i];
|
|
588
|
-
}
|
|
589
|
-
var ret = oldReplaceState.apply(this, args);
|
|
590
|
-
window.dispatchEvent(new window.Event("locationchange"));
|
|
591
|
-
return ret;
|
|
592
|
-
};
|
|
593
|
-
window.addEventListener("popstate", function () { return _this.onLocationChange(); });
|
|
594
|
-
window.addEventListener("locationchange", function () { return _this.onLocationChange(); });
|
|
595
|
-
return [2 /*return*/];
|
|
596
|
-
});
|
|
597
|
-
});
|
|
598
|
-
};
|
|
599
|
-
FormoAnalytics.prototype.onLocationChange = function () {
|
|
600
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
601
|
-
var currentUrl;
|
|
602
|
-
return __generator(this, function (_a) {
|
|
603
|
-
currentUrl = sessionStorage.getItem(constants_1.CURRENT_URL_KEY);
|
|
604
|
-
if (currentUrl !== window.location.href) {
|
|
605
|
-
sessionStorage.setItem(constants_1.CURRENT_URL_KEY, window.location.href);
|
|
606
|
-
this.trackPageHit();
|
|
607
|
-
}
|
|
608
|
-
return [2 /*return*/];
|
|
609
|
-
});
|
|
610
|
-
});
|
|
611
|
-
};
|
|
612
|
-
FormoAnalytics.prototype.trackPageHit = function () {
|
|
613
|
-
var _this = this;
|
|
614
|
-
var pathname = window.location.pathname;
|
|
615
|
-
var href = window.location.href;
|
|
616
|
-
var hash = window.location.hash;
|
|
617
|
-
setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
618
|
-
return __generator(this, function (_a) {
|
|
619
|
-
this.trackEvent(constants_1.Event.PAGE, {
|
|
620
|
-
pathname: pathname,
|
|
621
|
-
href: href,
|
|
622
|
-
hash: hash,
|
|
623
|
-
});
|
|
624
|
-
return [2 /*return*/];
|
|
625
|
-
});
|
|
626
|
-
}); }, 300);
|
|
627
|
-
};
|
|
628
|
-
// TODO: refactor this with event queue and flushing
|
|
629
|
-
// https://linear.app/getformo/issue/P-835/sdk-refactor-retries-with-event-queue-and-batching
|
|
630
|
-
FormoAnalytics.prototype.trackEvent = function (action, payload) {
|
|
631
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
632
|
-
var address, requestData, response, error_3;
|
|
633
|
-
var _a;
|
|
634
|
-
return __generator(this, function (_b) {
|
|
635
|
-
switch (_b.label) {
|
|
636
|
-
case 0: return [4 /*yield*/, this.getAddress()];
|
|
637
|
-
case 1:
|
|
638
|
-
address = _b.sent();
|
|
639
|
-
_a = {
|
|
640
|
-
address: address,
|
|
641
|
-
timestamp: new Date().toISOString(),
|
|
642
|
-
action: action,
|
|
643
|
-
version: "1"
|
|
644
|
-
};
|
|
645
|
-
return [4 /*yield*/, this.buildEventPayload((0, utils_1.toSnakeCase)(payload))];
|
|
646
|
-
case 2:
|
|
647
|
-
requestData = (_a.payload = _b.sent(),
|
|
648
|
-
_a);
|
|
649
|
-
_b.label = 3;
|
|
650
|
-
case 3:
|
|
651
|
-
_b.trys.push([3, 5, , 6]);
|
|
652
|
-
return [4 /*yield*/, axios_1.default.post(constants_1.EVENTS_API_URL, JSON.stringify(requestData), {
|
|
653
|
-
headers: {
|
|
654
|
-
"Content-Type": "application/json",
|
|
655
|
-
Authorization: "Bearer ".concat(this.config.apiKey),
|
|
656
|
-
},
|
|
657
|
-
})];
|
|
658
|
-
case 4:
|
|
659
|
-
response = _b.sent();
|
|
660
|
-
if (response.status >= 200 && response.status < 300) {
|
|
661
|
-
console.log("Event sent successfully: ".concat(this.getActionDescriptor(action, payload)));
|
|
662
|
-
}
|
|
663
|
-
else {
|
|
664
|
-
throw new Error("Failed with status: ".concat(response.status));
|
|
665
|
-
}
|
|
666
|
-
return [3 /*break*/, 6];
|
|
667
|
-
case 5:
|
|
668
|
-
error_3 = _b.sent();
|
|
669
|
-
console.error("Event \"".concat(action, "\" failed. Error: ").concat(error_3));
|
|
670
|
-
return [3 /*break*/, 6];
|
|
671
|
-
case 6: return [2 /*return*/];
|
|
672
|
-
}
|
|
673
|
-
});
|
|
674
|
-
});
|
|
675
|
-
};
|
|
676
|
-
/*
|
|
677
|
-
Utility functions
|
|
678
|
-
*/
|
|
679
|
-
FormoAnalytics.prototype.getProviders = function () {
|
|
680
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
681
|
-
var store, providers;
|
|
682
|
-
return __generator(this, function (_a) {
|
|
683
|
-
store = (0, mipd_1.createStore)();
|
|
684
|
-
providers = __spreadArray([], store.getProviders(), true);
|
|
685
|
-
// TODO: consider using store.subscribe to detect changes to providers list
|
|
686
|
-
// store.subscribe(providers => (state.providers = providers))
|
|
687
|
-
// Fallback to injected provider if no providers are found
|
|
688
|
-
if (providers.length === 0) {
|
|
689
|
-
return [2 /*return*/, [window === null || window === void 0 ? void 0 : window.ethereum]];
|
|
690
|
-
}
|
|
691
|
-
return [2 /*return*/, providers];
|
|
692
|
-
});
|
|
693
|
-
});
|
|
694
|
-
};
|
|
695
|
-
FormoAnalytics.prototype.identifyAll = function (providers) {
|
|
696
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
697
|
-
var _i, providers_1, _a, provider, info, accounts, _b, accounts_1, address, err_1;
|
|
698
|
-
return __generator(this, function (_c) {
|
|
699
|
-
switch (_c.label) {
|
|
700
|
-
case 0:
|
|
701
|
-
_i = 0, providers_1 = providers;
|
|
702
|
-
_c.label = 1;
|
|
703
|
-
case 1:
|
|
704
|
-
if (!(_i < providers_1.length)) return [3 /*break*/, 10];
|
|
705
|
-
_a = providers_1[_i], provider = _a.provider, info = _a.info;
|
|
706
|
-
_c.label = 2;
|
|
707
|
-
case 2:
|
|
708
|
-
_c.trys.push([2, 8, , 9]);
|
|
709
|
-
return [4 /*yield*/, this.getAccounts(provider)];
|
|
710
|
-
case 3:
|
|
711
|
-
accounts = _c.sent();
|
|
712
|
-
if (!(accounts && accounts.length > 0)) return [3 /*break*/, 7];
|
|
713
|
-
_b = 0, accounts_1 = accounts;
|
|
714
|
-
_c.label = 4;
|
|
715
|
-
case 4:
|
|
716
|
-
if (!(_b < accounts_1.length)) return [3 /*break*/, 7];
|
|
717
|
-
address = accounts_1[_b];
|
|
718
|
-
return [4 /*yield*/, this.identify({
|
|
719
|
-
address: address,
|
|
720
|
-
providerName: info.name,
|
|
721
|
-
rdns: info.rdns,
|
|
722
|
-
})];
|
|
723
|
-
case 5:
|
|
724
|
-
_c.sent();
|
|
725
|
-
_c.label = 6;
|
|
726
|
-
case 6:
|
|
727
|
-
_b++;
|
|
728
|
-
return [3 /*break*/, 4];
|
|
729
|
-
case 7: return [3 /*break*/, 9];
|
|
730
|
-
case 8:
|
|
731
|
-
err_1 = _c.sent();
|
|
732
|
-
return [3 /*break*/, 9];
|
|
733
|
-
case 9:
|
|
734
|
-
_i++;
|
|
735
|
-
return [3 /*break*/, 1];
|
|
736
|
-
case 10: return [2 /*return*/];
|
|
737
|
-
}
|
|
738
|
-
});
|
|
739
|
-
});
|
|
740
|
-
};
|
|
741
|
-
Object.defineProperty(FormoAnalytics.prototype, "provider", {
|
|
742
|
-
get: function () {
|
|
743
|
-
return this._provider;
|
|
744
|
-
},
|
|
745
|
-
enumerable: false,
|
|
746
|
-
configurable: true
|
|
747
|
-
});
|
|
748
|
-
FormoAnalytics.prototype.getAddress = function () {
|
|
749
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
750
|
-
var accounts, err_2;
|
|
751
|
-
return __generator(this, function (_a) {
|
|
752
|
-
switch (_a.label) {
|
|
753
|
-
case 0:
|
|
754
|
-
if (this.currentConnectedAddress)
|
|
755
|
-
return [2 /*return*/, this.currentConnectedAddress];
|
|
756
|
-
if (!this.provider) {
|
|
757
|
-
console.log("FormoAnalytics::getAddress: the provider is not set");
|
|
758
|
-
return [2 /*return*/, null];
|
|
759
|
-
}
|
|
760
|
-
_a.label = 1;
|
|
761
|
-
case 1:
|
|
762
|
-
_a.trys.push([1, 3, , 4]);
|
|
763
|
-
return [4 /*yield*/, this.getAccounts()];
|
|
764
|
-
case 2:
|
|
765
|
-
accounts = _a.sent();
|
|
766
|
-
if (accounts && accounts.length > 0) {
|
|
767
|
-
return [2 /*return*/, accounts[0]];
|
|
768
|
-
}
|
|
769
|
-
return [3 /*break*/, 4];
|
|
770
|
-
case 3:
|
|
771
|
-
err_2 = _a.sent();
|
|
772
|
-
console.log("Failed to fetch accounts from provider:", err_2);
|
|
773
|
-
return [2 /*return*/, null];
|
|
774
|
-
case 4: return [2 /*return*/, null];
|
|
775
|
-
}
|
|
776
|
-
});
|
|
777
|
-
});
|
|
778
|
-
};
|
|
779
|
-
FormoAnalytics.prototype.getAccounts = function (provider) {
|
|
780
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
781
|
-
var p, res, err_3;
|
|
782
|
-
return __generator(this, function (_a) {
|
|
783
|
-
switch (_a.label) {
|
|
784
|
-
case 0:
|
|
785
|
-
p = provider || this.provider;
|
|
786
|
-
_a.label = 1;
|
|
787
|
-
case 1:
|
|
788
|
-
_a.trys.push([1, 3, , 4]);
|
|
789
|
-
return [4 /*yield*/, (p === null || p === void 0 ? void 0 : p.request({
|
|
790
|
-
method: "eth_accounts",
|
|
791
|
-
}))];
|
|
792
|
-
case 2:
|
|
793
|
-
res = _a.sent();
|
|
794
|
-
if (!res || res.length === 0)
|
|
795
|
-
return [2 /*return*/, null];
|
|
796
|
-
return [2 /*return*/, res];
|
|
797
|
-
case 3:
|
|
798
|
-
err_3 = _a.sent();
|
|
799
|
-
if (err_3.code !== 4001) {
|
|
800
|
-
console.log("FormoAnalytics::getAccounts: eth_accounts threw an error", err_3);
|
|
801
|
-
}
|
|
802
|
-
return [2 /*return*/, null];
|
|
803
|
-
case 4: return [2 /*return*/];
|
|
804
|
-
}
|
|
805
|
-
});
|
|
806
|
-
});
|
|
807
|
-
};
|
|
808
|
-
FormoAnalytics.prototype.getCurrentChainId = function () {
|
|
809
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
810
|
-
var chainIdHex, err_4;
|
|
811
|
-
var _a;
|
|
812
|
-
return __generator(this, function (_b) {
|
|
813
|
-
switch (_b.label) {
|
|
814
|
-
case 0:
|
|
815
|
-
if (!this.provider) {
|
|
816
|
-
console.error("FormoAnalytics::getCurrentChainId: provider not set");
|
|
817
|
-
}
|
|
818
|
-
_b.label = 1;
|
|
819
|
-
case 1:
|
|
820
|
-
_b.trys.push([1, 3, , 4]);
|
|
821
|
-
return [4 /*yield*/, ((_a = this.provider) === null || _a === void 0 ? void 0 : _a.request({
|
|
822
|
-
method: "eth_chainId",
|
|
823
|
-
}))];
|
|
824
|
-
case 2:
|
|
825
|
-
chainIdHex = _b.sent();
|
|
826
|
-
if (!chainIdHex) {
|
|
827
|
-
console.log("FormoAnalytics::fetchChainId: chain id not found");
|
|
828
|
-
return [2 /*return*/, 0];
|
|
829
|
-
}
|
|
830
|
-
return [2 /*return*/, parseInt(chainIdHex, 16)];
|
|
831
|
-
case 3:
|
|
832
|
-
err_4 = _b.sent();
|
|
833
|
-
console.log("FormoAnalytics::fetchChainId: eth_chainId threw an error", err_4);
|
|
834
|
-
return [2 /*return*/, 0];
|
|
835
|
-
case 4: return [2 /*return*/];
|
|
836
|
-
}
|
|
837
|
-
});
|
|
838
|
-
});
|
|
839
|
-
};
|
|
840
|
-
FormoAnalytics.prototype.getLocation = function () {
|
|
841
|
-
try {
|
|
842
|
-
var timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
843
|
-
if (timezone in constants_1.COUNTRY_LIST)
|
|
844
|
-
return constants_1.COUNTRY_LIST[timezone];
|
|
845
|
-
return timezone;
|
|
846
|
-
}
|
|
847
|
-
catch (error) {
|
|
848
|
-
console.error("Error resolving timezone:", error);
|
|
849
|
-
return "";
|
|
850
|
-
}
|
|
851
|
-
};
|
|
852
|
-
FormoAnalytics.prototype.getLanguage = function () {
|
|
853
|
-
try {
|
|
854
|
-
return ((navigator.languages && navigator.languages.length
|
|
855
|
-
? navigator.languages[0]
|
|
856
|
-
: navigator.language) || "en");
|
|
857
|
-
}
|
|
858
|
-
catch (error) {
|
|
859
|
-
console.error("Error resolving language:", error);
|
|
860
|
-
return "en";
|
|
861
|
-
}
|
|
862
|
-
};
|
|
863
|
-
// Adds browser properties to the user-supplied payload
|
|
864
|
-
FormoAnalytics.prototype.buildEventPayload = function () {
|
|
865
|
-
return __awaiter(this, arguments, void 0, function (eventSpecificPayload) {
|
|
866
|
-
var url, params, location, language;
|
|
867
|
-
if (eventSpecificPayload === void 0) { eventSpecificPayload = {}; }
|
|
868
|
-
return __generator(this, function (_a) {
|
|
869
|
-
url = new URL(window.location.href);
|
|
870
|
-
params = new URLSearchParams(url.search);
|
|
871
|
-
location = this.getLocation();
|
|
872
|
-
language = this.getLanguage();
|
|
873
|
-
// common browser properties
|
|
874
|
-
return [2 /*return*/, __assign({ "user-agent": window.navigator.userAgent, locale: language, location: location, referrer: document.referrer, utm_source: params.get("utm_source"), utm_medium: params.get("utm_medium"), utm_campaign: params.get("utm_campaign"), ref: params.get("ref") }, eventSpecificPayload)];
|
|
875
|
-
});
|
|
876
|
-
});
|
|
877
|
-
};
|
|
878
|
-
FormoAnalytics.prototype.buildSignatureEventPayload = function (method, params, response) {
|
|
879
|
-
var basePayload = {
|
|
880
|
-
chainId: this.currentChainId,
|
|
881
|
-
address: method === "personal_sign"
|
|
882
|
-
? params[1]
|
|
883
|
-
: params[0],
|
|
884
|
-
};
|
|
885
|
-
if (method === "personal_sign") {
|
|
886
|
-
var message = Buffer.from(params[0].slice(2), "hex").toString("utf8");
|
|
887
|
-
return __assign(__assign(__assign({}, basePayload), { message: message }), (response ? { signatureHash: response } : {}));
|
|
888
|
-
}
|
|
889
|
-
return __assign(__assign(__assign({}, basePayload), { message: params[1] }), (response ? { signatureHash: response } : {}));
|
|
890
|
-
};
|
|
891
|
-
FormoAnalytics.prototype.buildTransactionEventPayload = function (params) {
|
|
892
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
893
|
-
var _a, data, from, to, value, _b;
|
|
894
|
-
var _c;
|
|
895
|
-
return __generator(this, function (_d) {
|
|
896
|
-
switch (_d.label) {
|
|
897
|
-
case 0:
|
|
898
|
-
_a = params[0], data = _a.data, from = _a.from, to = _a.to, value = _a.value;
|
|
899
|
-
_c = {};
|
|
900
|
-
_b = this.currentChainId;
|
|
901
|
-
if (_b) return [3 /*break*/, 2];
|
|
902
|
-
return [4 /*yield*/, this.getCurrentChainId()];
|
|
903
|
-
case 1:
|
|
904
|
-
_b = (_d.sent());
|
|
905
|
-
_d.label = 2;
|
|
906
|
-
case 2: return [2 /*return*/, (_c.chainId = _b,
|
|
907
|
-
_c.data = data,
|
|
908
|
-
_c.address = from,
|
|
909
|
-
_c.to = to,
|
|
910
|
-
_c.value = value,
|
|
911
|
-
_c)];
|
|
912
|
-
}
|
|
913
|
-
});
|
|
914
|
-
});
|
|
915
|
-
};
|
|
916
|
-
FormoAnalytics.prototype.getActionDescriptor = function (action, payload) {
|
|
917
|
-
return "".concat(action).concat(payload.status ? " ".concat(payload.status) : "");
|
|
918
|
-
};
|
|
919
|
-
return FormoAnalytics;
|
|
920
|
-
}());
|
|
921
|
-
exports.FormoAnalytics = FormoAnalytics;
|
|
922
|
-
//# sourceMappingURL=FormoAnalytics.js.map
|