@formo/analytics 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -74
- package/dist/cjs/src/FormoAnalytics.d.ts +24 -14
- package/dist/cjs/src/FormoAnalytics.js +195 -255
- package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
- package/dist/cjs/src/{lib/consent.d.ts → consent/index.d.ts} +1 -1
- package/dist/cjs/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/cjs/src/constants/base.d.ts +0 -2
- package/dist/cjs/src/constants/base.js +3 -3
- package/dist/cjs/src/constants/config.js +1 -1
- package/dist/cjs/src/{lib/event → event}/EventFactory.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/EventFactory.js +30 -13
- package/dist/cjs/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/cjs/src/event/constants.d.ts +11 -0
- package/dist/cjs/src/event/constants.js +34 -0
- package/dist/cjs/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.js +1 -1
- package/dist/cjs/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/cjs/src/{lib/fetch.js → fetch/index.js} +1 -1
- package/dist/cjs/src/provider/detection.d.ts +58 -0
- package/dist/cjs/src/provider/detection.js +103 -0
- package/dist/cjs/src/provider/index.d.ts +6 -0
- package/dist/cjs/src/provider/index.js +11 -0
- package/dist/{esm/src/lib → cjs/src}/queue/EventQueue.d.ts +1 -1
- package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +3 -3
- package/dist/{esm/src/lib → cjs/src}/queue/type.d.ts +1 -1
- package/dist/cjs/src/session/index.d.ts +91 -0
- package/dist/cjs/src/session/index.js +126 -0
- package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/cjs/src/types/base.d.ts +27 -1
- package/dist/cjs/src/validators/object.js +0 -2
- package/dist/cjs/src/version.d.ts +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +69 -0
- package/dist/cjs/src/wagmi/WagmiEventHandler.js +449 -0
- package/dist/cjs/src/wagmi/index.d.ts +9 -0
- package/dist/cjs/src/wagmi/index.js +12 -0
- package/dist/cjs/src/wagmi/types.d.ts +115 -0
- package/dist/cjs/src/wagmi/types.js +10 -0
- package/dist/esm/src/FormoAnalytics.d.ts +24 -14
- package/dist/esm/src/FormoAnalytics.js +85 -145
- package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
- package/dist/esm/src/{lib/consent.d.ts → consent/index.d.ts} +1 -1
- package/dist/esm/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/esm/src/constants/base.d.ts +0 -2
- package/dist/esm/src/constants/base.js +2 -2
- package/dist/esm/src/constants/config.js +1 -1
- package/dist/esm/src/{lib/event → event}/EventFactory.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/EventFactory.js +31 -14
- package/dist/esm/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/esm/src/event/constants.d.ts +11 -0
- package/dist/esm/src/event/constants.js +29 -0
- package/dist/esm/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.js +1 -1
- package/dist/esm/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/esm/src/{lib/fetch.js → fetch/index.js} +1 -1
- package/dist/esm/src/provider/detection.d.ts +58 -0
- package/dist/esm/src/provider/detection.js +98 -0
- package/dist/esm/src/provider/index.d.ts +6 -0
- package/dist/esm/src/provider/index.js +5 -0
- package/dist/{cjs/src/lib → esm/src}/queue/EventQueue.d.ts +1 -1
- package/dist/esm/src/{lib/queue → queue}/EventQueue.js +3 -3
- package/dist/{cjs/src/lib → esm/src}/queue/type.d.ts +1 -1
- package/dist/esm/src/session/index.d.ts +91 -0
- package/dist/esm/src/session/index.js +123 -0
- package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/esm/src/types/base.d.ts +27 -1
- package/dist/esm/src/validators/object.js +0 -2
- package/dist/esm/src/version.d.ts +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +69 -0
- package/dist/esm/src/wagmi/WagmiEventHandler.js +446 -0
- package/dist/esm/src/wagmi/index.d.ts +9 -0
- package/dist/esm/src/wagmi/index.js +8 -0
- package/dist/esm/src/wagmi/types.d.ts +115 -0
- package/dist/esm/src/wagmi/types.js +9 -0
- package/dist/index.umd.min.js +1 -1
- package/package.json +19 -4
- package/dist/cjs/src/lib/event/constants.d.ts +0 -4
- package/dist/cjs/src/lib/event/constants.js +0 -8
- package/dist/cjs/src/lib/index.d.ts +0 -7
- package/dist/cjs/src/lib/index.js +0 -28
- package/dist/esm/src/lib/event/constants.d.ts +0 -4
- package/dist/esm/src/lib/event/constants.js +0 -4
- package/dist/esm/src/lib/index.d.ts +0 -7
- package/dist/esm/src/lib/index.js +0 -7
- /package/dist/cjs/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/cjs/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/type.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.js +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/esm/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/event → event}/index.js +0 -0
- /package/dist/esm/src/{lib/event → event}/type.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.js +0 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WagmiEventHandler
|
|
4
|
+
*
|
|
5
|
+
* Handles wallet event tracking by hooking into Wagmi v2's config.subscribe()
|
|
6
|
+
* and TanStack Query's MutationCache. This replaces the EIP-1193 provider
|
|
7
|
+
* wrapping approach when Wagmi mode is enabled.
|
|
8
|
+
*/
|
|
9
|
+
var __assign = (this && this.__assign) || function () {
|
|
10
|
+
__assign = Object.assign || function(t) {
|
|
11
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
12
|
+
s = arguments[i];
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
}
|
|
16
|
+
return t;
|
|
17
|
+
};
|
|
18
|
+
return __assign.apply(this, arguments);
|
|
19
|
+
};
|
|
20
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
21
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
22
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
23
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
24
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
25
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
26
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
30
|
+
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);
|
|
31
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
32
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
33
|
+
function step(op) {
|
|
34
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
35
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
36
|
+
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;
|
|
37
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
38
|
+
switch (op[0]) {
|
|
39
|
+
case 0: case 1: t = op; break;
|
|
40
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
41
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
42
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
43
|
+
default:
|
|
44
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
45
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
46
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
47
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
48
|
+
if (t[2]) _.ops.pop();
|
|
49
|
+
_.trys.pop(); continue;
|
|
50
|
+
}
|
|
51
|
+
op = body.call(thisArg, _);
|
|
52
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
53
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.WagmiEventHandler = void 0;
|
|
58
|
+
var events_1 = require("../types/events");
|
|
59
|
+
var logger_1 = require("../logger");
|
|
60
|
+
var WagmiEventHandler = /** @class */ (function () {
|
|
61
|
+
function WagmiEventHandler(formoAnalytics, wagmiConfig, queryClient) {
|
|
62
|
+
this.unsubscribers = [];
|
|
63
|
+
this.trackingState = {
|
|
64
|
+
isProcessing: false,
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Track processed mutation states to prevent duplicate event emissions
|
|
68
|
+
* Key format: `${mutationId}:${status}`
|
|
69
|
+
*/
|
|
70
|
+
this.processedMutations = new Set();
|
|
71
|
+
this.formo = formoAnalytics;
|
|
72
|
+
this.wagmiConfig = wagmiConfig;
|
|
73
|
+
this.queryClient = queryClient;
|
|
74
|
+
logger_1.logger.info("WagmiEventHandler: Initializing Wagmi integration");
|
|
75
|
+
// Set up connection/disconnection/chain listeners
|
|
76
|
+
this.setupConnectionListeners();
|
|
77
|
+
// Set up mutation tracking if QueryClient is provided
|
|
78
|
+
if (this.queryClient) {
|
|
79
|
+
this.setupMutationTracking();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
logger_1.logger.warn("WagmiEventHandler: QueryClient not provided, signature and transaction events will not be tracked");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Set up listeners for wallet connection, disconnection, and chain changes
|
|
87
|
+
*/
|
|
88
|
+
WagmiEventHandler.prototype.setupConnectionListeners = function () {
|
|
89
|
+
var _this = this;
|
|
90
|
+
logger_1.logger.info("WagmiEventHandler: Setting up connection listeners");
|
|
91
|
+
// Subscribe to status changes (connect/disconnect)
|
|
92
|
+
var statusUnsubscribe = this.wagmiConfig.subscribe(function (state) { return state.status; }, function (status, prevStatus) {
|
|
93
|
+
_this.handleStatusChange(status, prevStatus);
|
|
94
|
+
});
|
|
95
|
+
this.unsubscribers.push(statusUnsubscribe);
|
|
96
|
+
// Subscribe to chain ID changes
|
|
97
|
+
var chainIdUnsubscribe = this.wagmiConfig.subscribe(function (state) { return state.chainId; }, function (chainId, prevChainId) {
|
|
98
|
+
_this.handleChainChange(chainId, prevChainId);
|
|
99
|
+
});
|
|
100
|
+
this.unsubscribers.push(chainIdUnsubscribe);
|
|
101
|
+
logger_1.logger.info("WagmiEventHandler: Connection listeners set up successfully");
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Handle status changes (connect/disconnect)
|
|
105
|
+
*/
|
|
106
|
+
WagmiEventHandler.prototype.handleStatusChange = function (status, prevStatus) {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
108
|
+
var state, address, chainId, connectorName, error_1;
|
|
109
|
+
return __generator(this, function (_a) {
|
|
110
|
+
switch (_a.label) {
|
|
111
|
+
case 0:
|
|
112
|
+
// Prevent concurrent processing
|
|
113
|
+
if (this.trackingState.isProcessing) {
|
|
114
|
+
logger_1.logger.debug("WagmiEventHandler: Already processing status change, skipping");
|
|
115
|
+
return [2 /*return*/];
|
|
116
|
+
}
|
|
117
|
+
this.trackingState.isProcessing = true;
|
|
118
|
+
_a.label = 1;
|
|
119
|
+
case 1:
|
|
120
|
+
_a.trys.push([1, 7, 8, 9]);
|
|
121
|
+
state = this.getState();
|
|
122
|
+
address = this.getConnectedAddress(state);
|
|
123
|
+
chainId = state.chainId;
|
|
124
|
+
logger_1.logger.info("WagmiEventHandler: Status changed", {
|
|
125
|
+
status: status,
|
|
126
|
+
prevStatus: prevStatus,
|
|
127
|
+
address: address,
|
|
128
|
+
chainId: chainId,
|
|
129
|
+
});
|
|
130
|
+
if (!(status === "disconnected" && prevStatus === "connected")) return [3 /*break*/, 4];
|
|
131
|
+
if (!this.formo.isAutocaptureEnabled("disconnect")) return [3 /*break*/, 3];
|
|
132
|
+
return [4 /*yield*/, this.formo.disconnect({
|
|
133
|
+
chainId: this.trackingState.lastChainId,
|
|
134
|
+
address: this.trackingState.lastAddress,
|
|
135
|
+
})];
|
|
136
|
+
case 2:
|
|
137
|
+
_a.sent();
|
|
138
|
+
_a.label = 3;
|
|
139
|
+
case 3:
|
|
140
|
+
this.trackingState.lastAddress = undefined;
|
|
141
|
+
this.trackingState.lastChainId = undefined;
|
|
142
|
+
_a.label = 4;
|
|
143
|
+
case 4:
|
|
144
|
+
if (!(status === "connected" && prevStatus !== "connected")) return [3 /*break*/, 6];
|
|
145
|
+
if (!(address && chainId !== undefined)) return [3 /*break*/, 6];
|
|
146
|
+
this.trackingState.lastAddress = address;
|
|
147
|
+
this.trackingState.lastChainId = chainId;
|
|
148
|
+
if (!this.formo.isAutocaptureEnabled("connect")) return [3 /*break*/, 6];
|
|
149
|
+
connectorName = this.getConnectorName(state);
|
|
150
|
+
return [4 /*yield*/, this.formo.connect({ chainId: chainId, address: address }, __assign({}, (connectorName && { providerName: connectorName })))];
|
|
151
|
+
case 5:
|
|
152
|
+
_a.sent();
|
|
153
|
+
_a.label = 6;
|
|
154
|
+
case 6:
|
|
155
|
+
this.trackingState.lastStatus = status;
|
|
156
|
+
return [3 /*break*/, 9];
|
|
157
|
+
case 7:
|
|
158
|
+
error_1 = _a.sent();
|
|
159
|
+
logger_1.logger.error("WagmiEventHandler: Error handling status change:", error_1);
|
|
160
|
+
return [3 /*break*/, 9];
|
|
161
|
+
case 8:
|
|
162
|
+
this.trackingState.isProcessing = false;
|
|
163
|
+
return [7 /*endfinally*/];
|
|
164
|
+
case 9: return [2 /*return*/];
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Handle chain ID changes
|
|
171
|
+
*/
|
|
172
|
+
WagmiEventHandler.prototype.handleChainChange = function (chainId, prevChainId) {
|
|
173
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
174
|
+
var state, address, error_2;
|
|
175
|
+
return __generator(this, function (_a) {
|
|
176
|
+
switch (_a.label) {
|
|
177
|
+
case 0:
|
|
178
|
+
if (chainId === prevChainId || chainId === undefined) {
|
|
179
|
+
return [2 /*return*/];
|
|
180
|
+
}
|
|
181
|
+
state = this.getState();
|
|
182
|
+
if (state.status !== "connected") {
|
|
183
|
+
return [2 /*return*/];
|
|
184
|
+
}
|
|
185
|
+
address = this.getConnectedAddress(state);
|
|
186
|
+
if (!address) {
|
|
187
|
+
logger_1.logger.warn("WagmiEventHandler: Chain changed but no address found");
|
|
188
|
+
return [2 /*return*/];
|
|
189
|
+
}
|
|
190
|
+
logger_1.logger.info("WagmiEventHandler: Chain changed", {
|
|
191
|
+
chainId: chainId,
|
|
192
|
+
prevChainId: prevChainId,
|
|
193
|
+
address: address,
|
|
194
|
+
});
|
|
195
|
+
this.trackingState.lastChainId = chainId;
|
|
196
|
+
if (!this.formo.isAutocaptureEnabled("chain")) return [3 /*break*/, 4];
|
|
197
|
+
_a.label = 1;
|
|
198
|
+
case 1:
|
|
199
|
+
_a.trys.push([1, 3, , 4]);
|
|
200
|
+
return [4 /*yield*/, this.formo.chain({ chainId: chainId, address: address })];
|
|
201
|
+
case 2:
|
|
202
|
+
_a.sent();
|
|
203
|
+
return [3 /*break*/, 4];
|
|
204
|
+
case 3:
|
|
205
|
+
error_2 = _a.sent();
|
|
206
|
+
logger_1.logger.error("WagmiEventHandler: Error tracking chain change:", error_2);
|
|
207
|
+
return [3 /*break*/, 4];
|
|
208
|
+
case 4: return [2 /*return*/];
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Set up mutation tracking for signatures and transactions
|
|
215
|
+
*/
|
|
216
|
+
WagmiEventHandler.prototype.setupMutationTracking = function () {
|
|
217
|
+
var _this = this;
|
|
218
|
+
if (!this.queryClient) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
logger_1.logger.info("WagmiEventHandler: Setting up mutation tracking");
|
|
222
|
+
var mutationCache = this.queryClient.getMutationCache();
|
|
223
|
+
var unsubscribe = mutationCache.subscribe(function (event) {
|
|
224
|
+
_this.handleMutationEvent(event);
|
|
225
|
+
});
|
|
226
|
+
this.unsubscribers.push(unsubscribe);
|
|
227
|
+
logger_1.logger.info("WagmiEventHandler: Mutation tracking set up successfully");
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Handle mutation cache events (signatures, transactions)
|
|
231
|
+
*/
|
|
232
|
+
WagmiEventHandler.prototype.handleMutationEvent = function (event) {
|
|
233
|
+
if (event.type !== "updated") {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
var mutation = event.mutation;
|
|
237
|
+
var mutationKey = mutation.options.mutationKey;
|
|
238
|
+
if (!mutationKey || mutationKey.length === 0) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
var mutationType = mutationKey[0];
|
|
242
|
+
var state = mutation.state;
|
|
243
|
+
// Create a unique key for this mutation state to prevent duplicate processing
|
|
244
|
+
var mutationStateKey = "".concat(mutation.mutationId, ":").concat(state.status);
|
|
245
|
+
// Skip if we've already processed this mutation state
|
|
246
|
+
if (this.processedMutations.has(mutationStateKey)) {
|
|
247
|
+
logger_1.logger.debug("WagmiEventHandler: Skipping duplicate mutation event", {
|
|
248
|
+
mutationType: mutationType,
|
|
249
|
+
mutationId: mutation.mutationId,
|
|
250
|
+
status: state.status,
|
|
251
|
+
});
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
// Mark this mutation state as processed
|
|
255
|
+
this.processedMutations.add(mutationStateKey);
|
|
256
|
+
logger_1.logger.debug("WagmiEventHandler: Mutation event", {
|
|
257
|
+
mutationType: mutationType,
|
|
258
|
+
mutationId: mutation.mutationId,
|
|
259
|
+
status: state.status,
|
|
260
|
+
});
|
|
261
|
+
// Handle signature mutations
|
|
262
|
+
if (mutationType === "signMessage" || mutationType === "signTypedData") {
|
|
263
|
+
this.handleSignatureMutation(mutationType, mutation);
|
|
264
|
+
}
|
|
265
|
+
// Handle transaction mutations
|
|
266
|
+
if (mutationType === "sendTransaction" || mutationType === "writeContract") {
|
|
267
|
+
this.handleTransactionMutation(mutationType, mutation);
|
|
268
|
+
}
|
|
269
|
+
// Clean up old processed mutations to prevent memory leaks
|
|
270
|
+
// Keep only recent mutations (max 1000 entries)
|
|
271
|
+
if (this.processedMutations.size > 1000) {
|
|
272
|
+
var entries = Array.from(this.processedMutations);
|
|
273
|
+
// Remove oldest 500 entries
|
|
274
|
+
for (var i = 0; i < 500; i++) {
|
|
275
|
+
this.processedMutations.delete(entries[i]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Handle signature mutations (signMessage, signTypedData)
|
|
281
|
+
*/
|
|
282
|
+
WagmiEventHandler.prototype.handleSignatureMutation = function (mutationType, mutation) {
|
|
283
|
+
if (!this.formo.isAutocaptureEnabled("signature")) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
var state = mutation.state;
|
|
287
|
+
var variables = state.variables || {};
|
|
288
|
+
var chainId = this.trackingState.lastChainId;
|
|
289
|
+
var address = this.trackingState.lastAddress;
|
|
290
|
+
if (!address) {
|
|
291
|
+
logger_1.logger.warn("WagmiEventHandler: Signature event but no address available");
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
try {
|
|
295
|
+
// Map Wagmi mutation status to Formo signature status
|
|
296
|
+
var status_1;
|
|
297
|
+
var signatureHash = void 0;
|
|
298
|
+
if (state.status === "pending") {
|
|
299
|
+
status_1 = events_1.SignatureStatus.REQUESTED;
|
|
300
|
+
}
|
|
301
|
+
else if (state.status === "success") {
|
|
302
|
+
status_1 = events_1.SignatureStatus.CONFIRMED;
|
|
303
|
+
signatureHash = state.data;
|
|
304
|
+
}
|
|
305
|
+
else if (state.status === "error") {
|
|
306
|
+
status_1 = events_1.SignatureStatus.REJECTED;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return; // Ignore idle state
|
|
310
|
+
}
|
|
311
|
+
// Extract message from variables
|
|
312
|
+
var message = void 0;
|
|
313
|
+
if (mutationType === "signMessage") {
|
|
314
|
+
message = variables.message || "";
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
// For signTypedData, stringify the typed data
|
|
318
|
+
message = JSON.stringify(variables.message || variables.types || {});
|
|
319
|
+
}
|
|
320
|
+
logger_1.logger.info("WagmiEventHandler: Tracking signature event", {
|
|
321
|
+
status: status_1,
|
|
322
|
+
mutationType: mutationType,
|
|
323
|
+
address: address,
|
|
324
|
+
chainId: chainId,
|
|
325
|
+
});
|
|
326
|
+
this.formo.signature(__assign({ status: status_1, chainId: chainId, address: address, message: message }, (signatureHash && { signatureHash: signatureHash })));
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
logger_1.logger.error("WagmiEventHandler: Error handling signature mutation:", error);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
/**
|
|
333
|
+
* Handle transaction mutations (sendTransaction, writeContract)
|
|
334
|
+
*/
|
|
335
|
+
WagmiEventHandler.prototype.handleTransactionMutation = function (mutationType, mutation) {
|
|
336
|
+
var _a;
|
|
337
|
+
if (!this.formo.isAutocaptureEnabled("transaction")) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
var state = mutation.state;
|
|
341
|
+
var variables = state.variables || {};
|
|
342
|
+
var chainId = this.trackingState.lastChainId || variables.chainId;
|
|
343
|
+
var address = this.trackingState.lastAddress || variables.account || variables.address;
|
|
344
|
+
if (!address) {
|
|
345
|
+
logger_1.logger.warn("WagmiEventHandler: Transaction event but no address available");
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
try {
|
|
349
|
+
// Map Wagmi mutation status to Formo transaction status
|
|
350
|
+
var status_2;
|
|
351
|
+
var transactionHash = void 0;
|
|
352
|
+
if (state.status === "pending") {
|
|
353
|
+
status_2 = events_1.TransactionStatus.STARTED;
|
|
354
|
+
}
|
|
355
|
+
else if (state.status === "success") {
|
|
356
|
+
status_2 = events_1.TransactionStatus.BROADCASTED;
|
|
357
|
+
transactionHash = state.data;
|
|
358
|
+
}
|
|
359
|
+
else if (state.status === "error") {
|
|
360
|
+
status_2 = events_1.TransactionStatus.REJECTED;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
return; // Ignore idle state
|
|
364
|
+
}
|
|
365
|
+
// Extract transaction details from variables
|
|
366
|
+
var data = variables.data;
|
|
367
|
+
var to = variables.to || variables.address;
|
|
368
|
+
var value = (_a = variables.value) === null || _a === void 0 ? void 0 : _a.toString();
|
|
369
|
+
logger_1.logger.info("WagmiEventHandler: Tracking transaction event", {
|
|
370
|
+
status: status_2,
|
|
371
|
+
mutationType: mutationType,
|
|
372
|
+
address: address,
|
|
373
|
+
chainId: chainId,
|
|
374
|
+
transactionHash: transactionHash,
|
|
375
|
+
});
|
|
376
|
+
this.formo.transaction(__assign(__assign(__assign(__assign({ status: status_2, chainId: chainId || 0, address: address }, (data && { data: data })), (to && { to: to })), (value && { value: value })), (transactionHash && { transactionHash: transactionHash })));
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
logger_1.logger.error("WagmiEventHandler: Error handling transaction mutation:", error);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
/**
|
|
383
|
+
* Get the current Wagmi state
|
|
384
|
+
* Supports both getState() method and direct state property access
|
|
385
|
+
* for compatibility with different Wagmi wrappers (RainbowKit, etc.)
|
|
386
|
+
*/
|
|
387
|
+
WagmiEventHandler.prototype.getState = function () {
|
|
388
|
+
// Try getState() method first (standard Wagmi API)
|
|
389
|
+
if (typeof this.wagmiConfig.getState === "function") {
|
|
390
|
+
return this.wagmiConfig.getState();
|
|
391
|
+
}
|
|
392
|
+
// Fall back to direct state property (RainbowKit and some Wagmi setups)
|
|
393
|
+
if (this.wagmiConfig.state) {
|
|
394
|
+
return this.wagmiConfig.state;
|
|
395
|
+
}
|
|
396
|
+
// Return a default disconnected state if neither is available
|
|
397
|
+
logger_1.logger.warn("WagmiEventHandler: Unable to get state from config, returning default state");
|
|
398
|
+
return {
|
|
399
|
+
status: "disconnected",
|
|
400
|
+
connections: new Map(),
|
|
401
|
+
current: undefined,
|
|
402
|
+
chainId: undefined,
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
/**
|
|
406
|
+
* Get the currently connected address from Wagmi state
|
|
407
|
+
*/
|
|
408
|
+
WagmiEventHandler.prototype.getConnectedAddress = function (state) {
|
|
409
|
+
if (!state.current) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}
|
|
412
|
+
var connection = state.connections.get(state.current);
|
|
413
|
+
if (!connection || connection.accounts.length === 0) {
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
return connection.accounts[0];
|
|
417
|
+
};
|
|
418
|
+
/**
|
|
419
|
+
* Get the connector name from Wagmi state
|
|
420
|
+
*/
|
|
421
|
+
WagmiEventHandler.prototype.getConnectorName = function (state) {
|
|
422
|
+
if (!state.current) {
|
|
423
|
+
return undefined;
|
|
424
|
+
}
|
|
425
|
+
var connection = state.connections.get(state.current);
|
|
426
|
+
return connection === null || connection === void 0 ? void 0 : connection.connector.name;
|
|
427
|
+
};
|
|
428
|
+
/**
|
|
429
|
+
* Clean up all subscriptions
|
|
430
|
+
*/
|
|
431
|
+
WagmiEventHandler.prototype.cleanup = function () {
|
|
432
|
+
logger_1.logger.info("WagmiEventHandler: Cleaning up subscriptions");
|
|
433
|
+
for (var _i = 0, _a = this.unsubscribers; _i < _a.length; _i++) {
|
|
434
|
+
var unsubscribe = _a[_i];
|
|
435
|
+
try {
|
|
436
|
+
unsubscribe();
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
logger_1.logger.error("WagmiEventHandler: Error during cleanup:", error);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
this.unsubscribers = [];
|
|
443
|
+
this.processedMutations.clear();
|
|
444
|
+
logger_1.logger.info("WagmiEventHandler: Cleanup complete");
|
|
445
|
+
};
|
|
446
|
+
return WagmiEventHandler;
|
|
447
|
+
}());
|
|
448
|
+
exports.WagmiEventHandler = WagmiEventHandler;
|
|
449
|
+
//# sourceMappingURL=WagmiEventHandler.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wagmi integration module
|
|
3
|
+
*
|
|
4
|
+
* Provides integration with Wagmi v2 for wallet event tracking.
|
|
5
|
+
* This module exports the WagmiEventHandler and related types.
|
|
6
|
+
*/
|
|
7
|
+
export { WagmiEventHandler } from "./WagmiEventHandler";
|
|
8
|
+
export type { WagmiState, WagmiConnection, WagmiConnector, WagmiConfig, MutationState, Mutation, MutationCacheEvent, MutationCache, QueryClient, UnsubscribeFn, WagmiMutationKey, WagmiTrackingState, } from "./types";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wagmi integration module
|
|
4
|
+
*
|
|
5
|
+
* Provides integration with Wagmi v2 for wallet event tracking.
|
|
6
|
+
* This module exports the WagmiEventHandler and related types.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.WagmiEventHandler = void 0;
|
|
10
|
+
var WagmiEventHandler_1 = require("./WagmiEventHandler");
|
|
11
|
+
Object.defineProperty(exports, "WagmiEventHandler", { enumerable: true, get: function () { return WagmiEventHandler_1.WagmiEventHandler; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wagmi-specific type definitions for wallet event tracking
|
|
3
|
+
*
|
|
4
|
+
* These types provide TypeScript interfaces for Wagmi v2 integration,
|
|
5
|
+
* allowing the SDK to hook into Wagmi's config.subscribe() and MutationCache
|
|
6
|
+
* to track wallet events without wrapping EIP-1193 providers.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Wagmi config state structure
|
|
10
|
+
* Based on Wagmi v2 internal state
|
|
11
|
+
*/
|
|
12
|
+
export interface WagmiState {
|
|
13
|
+
chainId?: number;
|
|
14
|
+
connections: Map<string, WagmiConnection>;
|
|
15
|
+
current?: string;
|
|
16
|
+
status: 'connected' | 'disconnected' | 'connecting' | 'reconnecting';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wagmi connection information
|
|
20
|
+
*/
|
|
21
|
+
export interface WagmiConnection {
|
|
22
|
+
accounts: readonly string[];
|
|
23
|
+
chainId: number;
|
|
24
|
+
connector: WagmiConnector;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wagmi connector interface
|
|
28
|
+
*/
|
|
29
|
+
export interface WagmiConnector {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
type: string;
|
|
33
|
+
uid: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Wagmi config interface
|
|
37
|
+
* This is the config object returned by createConfig() or getDefaultConfig() (RainbowKit)
|
|
38
|
+
*
|
|
39
|
+
* Note: Different Wagmi wrappers (RainbowKit, etc.) may expose state differently:
|
|
40
|
+
* - Some use getState() method
|
|
41
|
+
* - Some expose state as a direct property
|
|
42
|
+
* We support both patterns for maximum compatibility.
|
|
43
|
+
*/
|
|
44
|
+
export interface WagmiConfig {
|
|
45
|
+
subscribe<TData>(selector: (state: WagmiState) => TData, listener: (selectedState: TData, previousSelectedState: TData) => void, options?: {
|
|
46
|
+
equalityFn?: (a: TData, b: TData) => boolean;
|
|
47
|
+
fireImmediately?: boolean;
|
|
48
|
+
}): () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Get state method - available in some Wagmi versions
|
|
51
|
+
*/
|
|
52
|
+
getState?(): WagmiState;
|
|
53
|
+
/**
|
|
54
|
+
* Direct state property - available in RainbowKit and some Wagmi setups
|
|
55
|
+
*/
|
|
56
|
+
state?: WagmiState;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* React Query (TanStack Query) mutation state
|
|
60
|
+
*/
|
|
61
|
+
export interface MutationState {
|
|
62
|
+
status: 'idle' | 'pending' | 'success' | 'error';
|
|
63
|
+
data?: any;
|
|
64
|
+
error?: Error | null;
|
|
65
|
+
variables?: any;
|
|
66
|
+
context?: any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* React Query mutation object
|
|
70
|
+
*/
|
|
71
|
+
export interface Mutation {
|
|
72
|
+
state: MutationState;
|
|
73
|
+
options: {
|
|
74
|
+
mutationKey?: readonly unknown[];
|
|
75
|
+
[key: string]: any;
|
|
76
|
+
};
|
|
77
|
+
mutationId: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* React Query mutation cache event
|
|
81
|
+
*/
|
|
82
|
+
export interface MutationCacheEvent {
|
|
83
|
+
type: 'added' | 'removed' | 'updated';
|
|
84
|
+
mutation: Mutation;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* React Query MutationCache interface
|
|
88
|
+
*/
|
|
89
|
+
export interface MutationCache {
|
|
90
|
+
subscribe(listener: (event: MutationCacheEvent) => void): () => void;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* React Query QueryClient interface
|
|
94
|
+
*/
|
|
95
|
+
export interface QueryClient {
|
|
96
|
+
getMutationCache(): MutationCache;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Unsubscribe function returned by subscriptions
|
|
100
|
+
*/
|
|
101
|
+
export type UnsubscribeFn = () => void;
|
|
102
|
+
/**
|
|
103
|
+
* Wagmi mutation key types for identifying wallet operations
|
|
104
|
+
*/
|
|
105
|
+
export type WagmiMutationKey = 'signMessage' | 'signTypedData' | 'sendTransaction' | 'writeContract';
|
|
106
|
+
/**
|
|
107
|
+
* Internal tracking state for Wagmi event handler
|
|
108
|
+
*/
|
|
109
|
+
export interface WagmiTrackingState {
|
|
110
|
+
lastChainId?: number;
|
|
111
|
+
lastAddress?: string;
|
|
112
|
+
lastStatus?: WagmiState['status'];
|
|
113
|
+
isProcessing: boolean;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wagmi-specific type definitions for wallet event tracking
|
|
4
|
+
*
|
|
5
|
+
* These types provide TypeScript interfaces for Wagmi v2 integration,
|
|
6
|
+
* allowing the SDK to hook into Wagmi's config.subscribe() and MutationCache
|
|
7
|
+
* to track wallet events without wrapping EIP-1193 providers.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -24,6 +24,16 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
24
24
|
private _injectedProviderDetail?;
|
|
25
25
|
private _processingAccountsChanged;
|
|
26
26
|
private _seenProviders;
|
|
27
|
+
/**
|
|
28
|
+
* Wagmi event handler for tracking wallet events via Wagmi v2
|
|
29
|
+
* Only initialized when options.wagmi is provided
|
|
30
|
+
*/
|
|
31
|
+
private wagmiHandler?;
|
|
32
|
+
/**
|
|
33
|
+
* Flag indicating if Wagmi mode is enabled
|
|
34
|
+
* When true, EIP-1193 provider wrapping is skipped
|
|
35
|
+
*/
|
|
36
|
+
private isWagmiMode;
|
|
27
37
|
config: Config;
|
|
28
38
|
currentChainId?: ChainID;
|
|
29
39
|
currentAddress?: Address;
|
|
@@ -34,12 +44,6 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
34
44
|
* @returns true if there's a provider mismatch, false otherwise
|
|
35
45
|
*/
|
|
36
46
|
private isProviderMismatch;
|
|
37
|
-
/**
|
|
38
|
-
* Check if a provider is in a valid state for switching
|
|
39
|
-
* @param provider The provider to validate
|
|
40
|
-
* @returns true if the provider is in a valid state
|
|
41
|
-
*/
|
|
42
|
-
private isProviderInValidState;
|
|
43
47
|
private constructor();
|
|
44
48
|
static init(writeKey: string, options?: Options): Promise<FormoAnalytics>;
|
|
45
49
|
/**
|
|
@@ -57,6 +61,12 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
57
61
|
* @returns {void}
|
|
58
62
|
*/
|
|
59
63
|
reset(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Clean up resources and event listeners
|
|
66
|
+
* Call this when destroying the analytics instance
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
cleanup(): void;
|
|
60
70
|
/**
|
|
61
71
|
* Emits a connect wallet event.
|
|
62
72
|
* @param {ChainID} params.chainId
|
|
@@ -193,7 +203,13 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
193
203
|
* @returns {boolean} True if the user has opted out
|
|
194
204
|
*/
|
|
195
205
|
hasOptedOutTracking(): boolean;
|
|
196
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Track an EIP-1193 provider by wrapping its request method and adding event listeners
|
|
208
|
+
* Note: This is only used in non-Wagmi mode. When Wagmi is enabled, all tracking
|
|
209
|
+
* happens through Wagmi's connector system instead of EIP-1193/EIP-6963.
|
|
210
|
+
* @param provider The EIP-1193 provider to track
|
|
211
|
+
*/
|
|
212
|
+
private trackEIP1193Provider;
|
|
197
213
|
private trackProviders;
|
|
198
214
|
private addProviderListener;
|
|
199
215
|
private registerAccountsChangedListener;
|
|
@@ -229,19 +245,13 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
229
245
|
* @param eventType The wallet event type to check
|
|
230
246
|
* @returns {boolean} True if the event type should be autocaptured
|
|
231
247
|
*/
|
|
232
|
-
|
|
248
|
+
isAutocaptureEnabled(eventType: "connect" | "disconnect" | "signature" | "transaction" | "chain"): boolean;
|
|
233
249
|
/**
|
|
234
250
|
* Get provider information for a given provider
|
|
235
251
|
* @param provider The provider to get info for
|
|
236
252
|
* @returns Provider information
|
|
237
253
|
*/
|
|
238
254
|
private getProviderInfo;
|
|
239
|
-
/**
|
|
240
|
-
* Attempts to detect information about an injected provider
|
|
241
|
-
* @param provider The injected provider to analyze
|
|
242
|
-
* @returns Provider information with fallback values
|
|
243
|
-
*/
|
|
244
|
-
private detectInjectedProviderInfo;
|
|
245
255
|
private getProviders;
|
|
246
256
|
get providers(): readonly EIP6963ProviderDetail[];
|
|
247
257
|
private detectWallets;
|