@formo/analytics-react-native 0.1.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/README.md +302 -0
- package/lib/commonjs/FormoAnalytics.js +526 -0
- package/lib/commonjs/FormoAnalytics.js.map +1 -0
- package/lib/commonjs/FormoAnalyticsProvider.js +265 -0
- package/lib/commonjs/FormoAnalyticsProvider.js.map +1 -0
- package/lib/commonjs/constants/config.js +69 -0
- package/lib/commonjs/constants/config.js.map +1 -0
- package/lib/commonjs/constants/events.js +30 -0
- package/lib/commonjs/constants/events.js.map +1 -0
- package/lib/commonjs/constants/index.js +39 -0
- package/lib/commonjs/constants/index.js.map +1 -0
- package/lib/commonjs/constants/storage.js +23 -0
- package/lib/commonjs/constants/storage.js.map +1 -0
- package/lib/commonjs/index.js +65 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib/consent/index.js +56 -0
- package/lib/commonjs/lib/consent/index.js.map +1 -0
- package/lib/commonjs/lib/event/EventFactory.js +493 -0
- package/lib/commonjs/lib/event/EventFactory.js.map +1 -0
- package/lib/commonjs/lib/event/EventManager.js +46 -0
- package/lib/commonjs/lib/event/EventManager.js.map +1 -0
- package/lib/commonjs/lib/event/EventQueue.js +290 -0
- package/lib/commonjs/lib/event/EventQueue.js.map +1 -0
- package/lib/commonjs/lib/event/index.js +50 -0
- package/lib/commonjs/lib/event/index.js.map +1 -0
- package/lib/commonjs/lib/event/types.js +6 -0
- package/lib/commonjs/lib/event/types.js.map +1 -0
- package/lib/commonjs/lib/lifecycle/index.js +196 -0
- package/lib/commonjs/lib/lifecycle/index.js.map +1 -0
- package/lib/commonjs/lib/logger/index.js +48 -0
- package/lib/commonjs/lib/logger/index.js.map +1 -0
- package/lib/commonjs/lib/session/index.js +109 -0
- package/lib/commonjs/lib/session/index.js.map +1 -0
- package/lib/commonjs/lib/storage/AsyncStorageAdapter.js +164 -0
- package/lib/commonjs/lib/storage/AsyncStorageAdapter.js.map +1 -0
- package/lib/commonjs/lib/storage/MemoryStorage.js +41 -0
- package/lib/commonjs/lib/storage/MemoryStorage.js.map +1 -0
- package/lib/commonjs/lib/storage/StorageBlueprint.js +24 -0
- package/lib/commonjs/lib/storage/StorageBlueprint.js.map +1 -0
- package/lib/commonjs/lib/storage/StorageManager.js +126 -0
- package/lib/commonjs/lib/storage/StorageManager.js.map +1 -0
- package/lib/commonjs/lib/storage/index.js +49 -0
- package/lib/commonjs/lib/storage/index.js.map +1 -0
- package/lib/commonjs/lib/storage/types.js +2 -0
- package/lib/commonjs/lib/storage/types.js.map +1 -0
- package/lib/commonjs/lib/wagmi/WagmiEventHandler.js +445 -0
- package/lib/commonjs/lib/wagmi/WagmiEventHandler.js.map +1 -0
- package/lib/commonjs/lib/wagmi/index.js +28 -0
- package/lib/commonjs/lib/wagmi/index.js.map +1 -0
- package/lib/commonjs/lib/wagmi/types.js +2 -0
- package/lib/commonjs/lib/wagmi/types.js.map +1 -0
- package/lib/commonjs/types/base.js +6 -0
- package/lib/commonjs/types/base.js.map +1 -0
- package/lib/commonjs/types/events.js +22 -0
- package/lib/commonjs/types/events.js.map +1 -0
- package/lib/commonjs/types/index.js +28 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/utils/address.js +82 -0
- package/lib/commonjs/utils/address.js.map +1 -0
- package/lib/commonjs/utils/hash.js +30 -0
- package/lib/commonjs/utils/hash.js.map +1 -0
- package/lib/commonjs/utils/helpers.js +116 -0
- package/lib/commonjs/utils/helpers.js.map +1 -0
- package/lib/commonjs/utils/index.js +61 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/timestamp.js +34 -0
- package/lib/commonjs/utils/timestamp.js.map +1 -0
- package/lib/commonjs/utils/trafficSource.js +147 -0
- package/lib/commonjs/utils/trafficSource.js.map +1 -0
- package/lib/commonjs/version.js +10 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/FormoAnalytics.js +519 -0
- package/lib/module/FormoAnalytics.js.map +1 -0
- package/lib/module/FormoAnalyticsProvider.js +256 -0
- package/lib/module/FormoAnalyticsProvider.js.map +1 -0
- package/lib/module/constants/config.js +62 -0
- package/lib/module/constants/config.js.map +1 -0
- package/lib/module/constants/events.js +24 -0
- package/lib/module/constants/events.js.map +1 -0
- package/lib/module/constants/index.js +4 -0
- package/lib/module/constants/index.js.map +1 -0
- package/lib/module/constants/storage.js +17 -0
- package/lib/module/constants/storage.js.map +1 -0
- package/lib/module/index.js +51 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/lib/consent/index.js +49 -0
- package/lib/module/lib/consent/index.js.map +1 -0
- package/lib/module/lib/event/EventFactory.js +488 -0
- package/lib/module/lib/event/EventFactory.js.map +1 -0
- package/lib/module/lib/event/EventManager.js +41 -0
- package/lib/module/lib/event/EventManager.js.map +1 -0
- package/lib/module/lib/event/EventQueue.js +283 -0
- package/lib/module/lib/event/EventQueue.js.map +1 -0
- package/lib/module/lib/event/index.js +5 -0
- package/lib/module/lib/event/index.js.map +1 -0
- package/lib/module/lib/event/types.js +2 -0
- package/lib/module/lib/event/types.js.map +1 -0
- package/lib/module/lib/lifecycle/index.js +190 -0
- package/lib/module/lib/lifecycle/index.js.map +1 -0
- package/lib/module/lib/logger/index.js +42 -0
- package/lib/module/lib/logger/index.js.map +1 -0
- package/lib/module/lib/session/index.js +92 -0
- package/lib/module/lib/session/index.js.map +1 -0
- package/lib/module/lib/storage/AsyncStorageAdapter.js +158 -0
- package/lib/module/lib/storage/AsyncStorageAdapter.js.map +1 -0
- package/lib/module/lib/storage/MemoryStorage.js +35 -0
- package/lib/module/lib/storage/MemoryStorage.js.map +1 -0
- package/lib/module/lib/storage/StorageBlueprint.js +18 -0
- package/lib/module/lib/storage/StorageBlueprint.js.map +1 -0
- package/lib/module/lib/storage/StorageManager.js +115 -0
- package/lib/module/lib/storage/StorageManager.js.map +1 -0
- package/lib/module/lib/storage/index.js +5 -0
- package/lib/module/lib/storage/index.js.map +1 -0
- package/lib/module/lib/storage/types.js +2 -0
- package/lib/module/lib/storage/types.js.map +1 -0
- package/lib/module/lib/wagmi/WagmiEventHandler.js +439 -0
- package/lib/module/lib/wagmi/WagmiEventHandler.js.map +1 -0
- package/lib/module/lib/wagmi/index.js +3 -0
- package/lib/module/lib/wagmi/index.js.map +1 -0
- package/lib/module/lib/wagmi/types.js +2 -0
- package/lib/module/lib/wagmi/types.js.map +1 -0
- package/lib/module/types/base.js +2 -0
- package/lib/module/types/base.js.map +1 -0
- package/lib/module/types/events.js +17 -0
- package/lib/module/types/events.js.map +1 -0
- package/lib/module/types/index.js +3 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/address.js +74 -0
- package/lib/module/utils/address.js.map +1 -0
- package/lib/module/utils/hash.js +24 -0
- package/lib/module/utils/hash.js.map +1 -0
- package/lib/module/utils/helpers.js +105 -0
- package/lib/module/utils/helpers.js.map +1 -0
- package/lib/module/utils/index.js +6 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/timestamp.js +26 -0
- package/lib/module/utils/timestamp.js.map +1 -0
- package/lib/module/utils/trafficSource.js +137 -0
- package/lib/module/utils/trafficSource.js.map +1 -0
- package/lib/module/version.js +4 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/FormoAnalytics.d.ts +163 -0
- package/lib/typescript/FormoAnalytics.d.ts.map +1 -0
- package/lib/typescript/FormoAnalyticsProvider.d.ts +29 -0
- package/lib/typescript/FormoAnalyticsProvider.d.ts.map +1 -0
- package/lib/typescript/constants/config.d.ts +8 -0
- package/lib/typescript/constants/config.d.ts.map +1 -0
- package/lib/typescript/constants/events.d.ts +23 -0
- package/lib/typescript/constants/events.d.ts.map +1 -0
- package/lib/typescript/constants/index.d.ts +4 -0
- package/lib/typescript/constants/index.d.ts.map +1 -0
- package/lib/typescript/constants/storage.d.ts +10 -0
- package/lib/typescript/constants/storage.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +44 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/lib/consent/index.d.ts +13 -0
- package/lib/typescript/lib/consent/index.d.ts.map +1 -0
- package/lib/typescript/lib/event/EventFactory.d.ts +61 -0
- package/lib/typescript/lib/event/EventFactory.d.ts.map +1 -0
- package/lib/typescript/lib/event/EventManager.d.ts +17 -0
- package/lib/typescript/lib/event/EventManager.d.ts.map +1 -0
- package/lib/typescript/lib/event/EventQueue.d.ts +74 -0
- package/lib/typescript/lib/event/EventQueue.d.ts.map +1 -0
- package/lib/typescript/lib/event/index.d.ts +5 -0
- package/lib/typescript/lib/event/index.d.ts.map +1 -0
- package/lib/typescript/lib/event/types.d.ts +23 -0
- package/lib/typescript/lib/event/types.d.ts.map +1 -0
- package/lib/typescript/lib/lifecycle/index.d.ts +46 -0
- package/lib/typescript/lib/lifecycle/index.d.ts.map +1 -0
- package/lib/typescript/lib/logger/index.d.ts +19 -0
- package/lib/typescript/lib/logger/index.d.ts.map +1 -0
- package/lib/typescript/lib/session/index.d.ts +41 -0
- package/lib/typescript/lib/session/index.d.ts.map +1 -0
- package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts +48 -0
- package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts.map +1 -0
- package/lib/typescript/lib/storage/MemoryStorage.d.ts +18 -0
- package/lib/typescript/lib/storage/MemoryStorage.d.ts.map +1 -0
- package/lib/typescript/lib/storage/StorageBlueprint.d.ts +21 -0
- package/lib/typescript/lib/storage/StorageBlueprint.d.ts.map +1 -0
- package/lib/typescript/lib/storage/StorageManager.d.ts +45 -0
- package/lib/typescript/lib/storage/StorageManager.d.ts.map +1 -0
- package/lib/typescript/lib/storage/index.d.ts +5 -0
- package/lib/typescript/lib/storage/index.d.ts.map +1 -0
- package/lib/typescript/lib/storage/types.d.ts +22 -0
- package/lib/typescript/lib/storage/types.d.ts.map +1 -0
- package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts +104 -0
- package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts.map +1 -0
- package/lib/typescript/lib/wagmi/index.d.ts +3 -0
- package/lib/typescript/lib/wagmi/index.d.ts.map +1 -0
- package/lib/typescript/lib/wagmi/types.d.ts +54 -0
- package/lib/typescript/lib/wagmi/types.d.ts.map +1 -0
- package/lib/typescript/types/base.d.ts +219 -0
- package/lib/typescript/types/base.d.ts.map +1 -0
- package/lib/typescript/types/events.d.ts +111 -0
- package/lib/typescript/types/events.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +3 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/lib/typescript/utils/address.d.ts +25 -0
- package/lib/typescript/utils/address.d.ts.map +1 -0
- package/lib/typescript/utils/hash.d.ts +10 -0
- package/lib/typescript/utils/hash.d.ts.map +1 -0
- package/lib/typescript/utils/helpers.d.ts +26 -0
- package/lib/typescript/utils/helpers.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +6 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/lib/typescript/utils/timestamp.d.ts +13 -0
- package/lib/typescript/utils/timestamp.d.ts.map +1 -0
- package/lib/typescript/utils/trafficSource.d.ts +30 -0
- package/lib/typescript/utils/trafficSource.d.ts.map +1 -0
- package/lib/typescript/version.d.ts +2 -0
- package/lib/typescript/version.d.ts.map +1 -0
- package/package.json +143 -0
- package/src/FormoAnalytics.ts +685 -0
- package/src/FormoAnalyticsProvider.tsx +296 -0
- package/src/constants/config.ts +62 -0
- package/src/constants/events.ts +26 -0
- package/src/constants/index.ts +3 -0
- package/src/constants/storage.ts +16 -0
- package/src/index.ts +55 -0
- package/src/lib/consent/index.ts +52 -0
- package/src/lib/event/EventFactory.ts +682 -0
- package/src/lib/event/EventManager.ts +50 -0
- package/src/lib/event/EventQueue.ts +371 -0
- package/src/lib/event/index.ts +4 -0
- package/src/lib/event/types.ts +107 -0
- package/src/lib/lifecycle/index.ts +215 -0
- package/src/lib/logger/index.ts +56 -0
- package/src/lib/session/index.ts +103 -0
- package/src/lib/storage/AsyncStorageAdapter.ts +173 -0
- package/src/lib/storage/MemoryStorage.ts +43 -0
- package/src/lib/storage/StorageBlueprint.ts +30 -0
- package/src/lib/storage/StorageManager.ts +121 -0
- package/src/lib/storage/index.ts +4 -0
- package/src/lib/storage/types.ts +23 -0
- package/src/lib/wagmi/WagmiEventHandler.ts +574 -0
- package/src/lib/wagmi/index.ts +2 -0
- package/src/lib/wagmi/types.ts +71 -0
- package/src/types/base.ts +287 -0
- package/src/types/events.ts +140 -0
- package/src/types/index.ts +2 -0
- package/src/utils/address.ts +84 -0
- package/src/utils/hash.ts +23 -0
- package/src/utils/helpers.ts +139 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/timestamp.ts +25 -0
- package/src/utils/trafficSource.ts +153 -0
- package/src/version.ts +3 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WagmiEventHandler for React Native
|
|
3
|
+
*
|
|
4
|
+
* Handles wallet event tracking by hooking into Wagmi v2's config.subscribe()
|
|
5
|
+
* and TanStack Query's MutationCache.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { SignatureStatus, TransactionStatus } from "../../types/events";
|
|
9
|
+
import { logger } from "../logger";
|
|
10
|
+
|
|
11
|
+
// Interface for FormoAnalytics to avoid circular dependency
|
|
12
|
+
|
|
13
|
+
export class WagmiEventHandler {
|
|
14
|
+
unsubscribers = [];
|
|
15
|
+
trackingState = {
|
|
16
|
+
isProcessing: false
|
|
17
|
+
};
|
|
18
|
+
processedMutations = new Set();
|
|
19
|
+
pendingStatusChanges = [];
|
|
20
|
+
constructor(formoAnalytics, wagmiConfig, queryClient) {
|
|
21
|
+
this.formo = formoAnalytics;
|
|
22
|
+
this.wagmiConfig = wagmiConfig;
|
|
23
|
+
this.queryClient = queryClient;
|
|
24
|
+
logger.info("WagmiEventHandler: Initializing Wagmi integration");
|
|
25
|
+
this.setupConnectionListeners();
|
|
26
|
+
if (this.queryClient) {
|
|
27
|
+
this.setupMutationTracking();
|
|
28
|
+
} else {
|
|
29
|
+
logger.warn("WagmiEventHandler: QueryClient not provided, signature and transaction events will not be tracked");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Set up listeners for wallet connection, disconnection, and chain changes
|
|
35
|
+
*/
|
|
36
|
+
setupConnectionListeners() {
|
|
37
|
+
logger.info("WagmiEventHandler: Setting up connection listeners");
|
|
38
|
+
|
|
39
|
+
// Subscribe to status changes
|
|
40
|
+
const statusUnsubscribe = this.wagmiConfig.subscribe(state => state.status, (status, prevStatus) => {
|
|
41
|
+
this.handleStatusChange(status, prevStatus);
|
|
42
|
+
});
|
|
43
|
+
this.unsubscribers.push(statusUnsubscribe);
|
|
44
|
+
|
|
45
|
+
// Subscribe to chain ID changes
|
|
46
|
+
const chainIdUnsubscribe = this.wagmiConfig.subscribe(state => state.chainId, (chainId, prevChainId) => {
|
|
47
|
+
this.handleChainChange(chainId, prevChainId);
|
|
48
|
+
});
|
|
49
|
+
this.unsubscribers.push(chainIdUnsubscribe);
|
|
50
|
+
logger.info("WagmiEventHandler: Connection listeners set up successfully");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Maximum pending status changes to prevent unbounded queue growth
|
|
54
|
+
static MAX_PENDING_STATUS_CHANGES = 10;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Handle status changes (connect/disconnect)
|
|
58
|
+
*/
|
|
59
|
+
async handleStatusChange(status, prevStatus) {
|
|
60
|
+
if (this.trackingState.isProcessing) {
|
|
61
|
+
// Limit queue size to prevent unbounded growth during rapid status changes
|
|
62
|
+
if (this.pendingStatusChanges.length >= WagmiEventHandler.MAX_PENDING_STATUS_CHANGES) {
|
|
63
|
+
logger.warn("WagmiEventHandler: Pending status change queue full, dropping oldest");
|
|
64
|
+
this.pendingStatusChanges.shift();
|
|
65
|
+
}
|
|
66
|
+
// Queue status change to process after current one completes
|
|
67
|
+
this.pendingStatusChanges.push({
|
|
68
|
+
status,
|
|
69
|
+
prevStatus
|
|
70
|
+
});
|
|
71
|
+
logger.debug("WagmiEventHandler: Queuing status change for later processing");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.trackingState.isProcessing = true;
|
|
75
|
+
try {
|
|
76
|
+
// Process current status change
|
|
77
|
+
await this.processStatusChange(status, prevStatus);
|
|
78
|
+
|
|
79
|
+
// Process pending status changes iteratively (inline, no recursion)
|
|
80
|
+
while (this.pendingStatusChanges.length > 0) {
|
|
81
|
+
const pending = this.pendingStatusChanges.shift();
|
|
82
|
+
await this.processStatusChange(pending.status, pending.prevStatus);
|
|
83
|
+
}
|
|
84
|
+
} finally {
|
|
85
|
+
this.trackingState.isProcessing = false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Process a single status change (extracted for iterative processing)
|
|
91
|
+
*/
|
|
92
|
+
async processStatusChange(status, prevStatus) {
|
|
93
|
+
try {
|
|
94
|
+
const state = this.getState();
|
|
95
|
+
const address = this.getConnectedAddress(state);
|
|
96
|
+
const chainId = state.chainId;
|
|
97
|
+
logger.info("WagmiEventHandler: Status changed", {
|
|
98
|
+
status,
|
|
99
|
+
prevStatus,
|
|
100
|
+
address,
|
|
101
|
+
chainId
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Handle disconnect
|
|
105
|
+
if (status === "disconnected" && prevStatus === "connected") {
|
|
106
|
+
if (this.formo.isAutocaptureEnabled("disconnect")) {
|
|
107
|
+
await this.formo.disconnect({
|
|
108
|
+
chainId: this.trackingState.lastChainId,
|
|
109
|
+
address: this.trackingState.lastAddress
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
this.trackingState.lastAddress = undefined;
|
|
113
|
+
this.trackingState.lastChainId = undefined;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Handle connect
|
|
117
|
+
if (status === "connected" && prevStatus !== "connected") {
|
|
118
|
+
if (address && chainId !== undefined) {
|
|
119
|
+
this.trackingState.lastAddress = address;
|
|
120
|
+
this.trackingState.lastChainId = chainId;
|
|
121
|
+
if (this.formo.isAutocaptureEnabled("connect")) {
|
|
122
|
+
const connectorName = this.getConnectorName(state);
|
|
123
|
+
const connectorId = this.getConnectorId(state);
|
|
124
|
+
await this.formo.connect({
|
|
125
|
+
chainId,
|
|
126
|
+
address
|
|
127
|
+
}, {
|
|
128
|
+
...(connectorName && {
|
|
129
|
+
providerName: connectorName
|
|
130
|
+
}),
|
|
131
|
+
// Connector ID is typically the rdns for EIP-6963 wallets
|
|
132
|
+
...(connectorId && {
|
|
133
|
+
rdns: connectorId
|
|
134
|
+
})
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
this.trackingState.lastStatus = status;
|
|
140
|
+
} catch (error) {
|
|
141
|
+
logger.error("WagmiEventHandler: Error handling status change:", error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Handle chain ID changes
|
|
147
|
+
*/
|
|
148
|
+
async handleChainChange(chainId, prevChainId) {
|
|
149
|
+
// Skip if no change, chainId is undefined, or this is initial connection (prevChainId undefined)
|
|
150
|
+
if (chainId === prevChainId || chainId === undefined || prevChainId === undefined) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const state = this.getState();
|
|
154
|
+
if (state.status !== "connected") {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const address = this.getConnectedAddress(state);
|
|
158
|
+
if (!address) {
|
|
159
|
+
logger.warn("WagmiEventHandler: Chain changed but no address found");
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
logger.info("WagmiEventHandler: Chain changed", {
|
|
163
|
+
chainId,
|
|
164
|
+
prevChainId,
|
|
165
|
+
address
|
|
166
|
+
});
|
|
167
|
+
this.trackingState.lastChainId = chainId;
|
|
168
|
+
if (this.formo.isAutocaptureEnabled("chain")) {
|
|
169
|
+
try {
|
|
170
|
+
await this.formo.chain({
|
|
171
|
+
chainId,
|
|
172
|
+
address
|
|
173
|
+
});
|
|
174
|
+
} catch (error) {
|
|
175
|
+
logger.error("WagmiEventHandler: Error tracking chain change:", error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Set up mutation tracking for signatures and transactions
|
|
182
|
+
*/
|
|
183
|
+
setupMutationTracking() {
|
|
184
|
+
if (!this.queryClient) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
logger.info("WagmiEventHandler: Setting up mutation tracking");
|
|
188
|
+
const mutationCache = this.queryClient.getMutationCache();
|
|
189
|
+
const unsubscribe = mutationCache.subscribe(event => {
|
|
190
|
+
this.handleMutationEvent(event);
|
|
191
|
+
});
|
|
192
|
+
this.unsubscribers.push(unsubscribe);
|
|
193
|
+
logger.info("WagmiEventHandler: Mutation tracking set up successfully");
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Handle mutation cache events
|
|
198
|
+
*/
|
|
199
|
+
handleMutationEvent(event) {
|
|
200
|
+
if (event.type !== "updated") {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const mutation = event.mutation;
|
|
204
|
+
const mutationKey = mutation.options.mutationKey;
|
|
205
|
+
if (!mutationKey || mutationKey.length === 0) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const mutationType = mutationKey[0];
|
|
209
|
+
const state = mutation.state;
|
|
210
|
+
const mutationStateKey = `${mutation.mutationId}:${state.status}`;
|
|
211
|
+
if (this.processedMutations.has(mutationStateKey)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.processedMutations.add(mutationStateKey);
|
|
215
|
+
logger.debug("WagmiEventHandler: Mutation event", {
|
|
216
|
+
mutationType,
|
|
217
|
+
mutationId: mutation.mutationId,
|
|
218
|
+
status: state.status
|
|
219
|
+
});
|
|
220
|
+
if (mutationType === "signMessage" || mutationType === "signTypedData") {
|
|
221
|
+
this.handleSignatureMutation(mutationType, mutation);
|
|
222
|
+
}
|
|
223
|
+
if (mutationType === "sendTransaction" || mutationType === "writeContract") {
|
|
224
|
+
this.handleTransactionMutation(mutationType, mutation);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Cleanup old mutations
|
|
228
|
+
if (this.processedMutations.size > 1000) {
|
|
229
|
+
const entries = Array.from(this.processedMutations);
|
|
230
|
+
for (let i = 0; i < 500; i++) {
|
|
231
|
+
const entry = entries[i];
|
|
232
|
+
if (entry) {
|
|
233
|
+
this.processedMutations.delete(entry);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Handle signature mutations
|
|
241
|
+
*/
|
|
242
|
+
handleSignatureMutation(mutationType, mutation) {
|
|
243
|
+
if (!this.formo.isAutocaptureEnabled("signature")) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const state = mutation.state;
|
|
247
|
+
const variables = state.variables || {};
|
|
248
|
+
const chainId = this.trackingState.lastChainId;
|
|
249
|
+
const address = this.trackingState.lastAddress;
|
|
250
|
+
if (!address) {
|
|
251
|
+
logger.warn("WagmiEventHandler: Signature event but no address available");
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (!chainId || chainId === 0) {
|
|
255
|
+
logger.warn("WagmiEventHandler: Signature event but no valid chainId available");
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
let status;
|
|
260
|
+
let signatureHash;
|
|
261
|
+
if (state.status === "pending") {
|
|
262
|
+
status = SignatureStatus.REQUESTED;
|
|
263
|
+
} else if (state.status === "success") {
|
|
264
|
+
status = SignatureStatus.CONFIRMED;
|
|
265
|
+
signatureHash = state.data;
|
|
266
|
+
} else if (state.status === "error") {
|
|
267
|
+
status = SignatureStatus.REJECTED;
|
|
268
|
+
} else {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
let message;
|
|
272
|
+
if (mutationType === "signMessage") {
|
|
273
|
+
message = variables.message || "";
|
|
274
|
+
} else {
|
|
275
|
+
message = JSON.stringify(variables.message || variables.types || {});
|
|
276
|
+
}
|
|
277
|
+
logger.info("WagmiEventHandler: Tracking signature event", {
|
|
278
|
+
status,
|
|
279
|
+
mutationType,
|
|
280
|
+
address,
|
|
281
|
+
chainId
|
|
282
|
+
});
|
|
283
|
+
this.formo.signature({
|
|
284
|
+
status,
|
|
285
|
+
chainId,
|
|
286
|
+
address,
|
|
287
|
+
message,
|
|
288
|
+
...(signatureHash && {
|
|
289
|
+
signatureHash
|
|
290
|
+
})
|
|
291
|
+
}).catch(error => {
|
|
292
|
+
logger.error("WagmiEventHandler: Error tracking signature:", error);
|
|
293
|
+
});
|
|
294
|
+
} catch (error) {
|
|
295
|
+
logger.error("WagmiEventHandler: Error handling signature mutation:", error);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Handle transaction mutations
|
|
301
|
+
*/
|
|
302
|
+
handleTransactionMutation(mutationType, mutation) {
|
|
303
|
+
if (!this.formo.isAutocaptureEnabled("transaction")) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
const state = mutation.state;
|
|
307
|
+
const variables = state.variables || {};
|
|
308
|
+
const chainId = this.trackingState.lastChainId || variables.chainId;
|
|
309
|
+
// Only use variables.account as fallback, not variables.address which is the contract address
|
|
310
|
+
const address = this.trackingState.lastAddress || variables.account;
|
|
311
|
+
if (!address) {
|
|
312
|
+
logger.warn("WagmiEventHandler: Transaction event but no address available");
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if (!chainId || chainId === 0) {
|
|
316
|
+
logger.warn("WagmiEventHandler: Transaction event but no valid chainId available");
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
let status;
|
|
321
|
+
let transactionHash;
|
|
322
|
+
if (state.status === "pending") {
|
|
323
|
+
status = TransactionStatus.STARTED;
|
|
324
|
+
} else if (state.status === "success") {
|
|
325
|
+
status = TransactionStatus.BROADCASTED;
|
|
326
|
+
transactionHash = state.data;
|
|
327
|
+
} else if (state.status === "error") {
|
|
328
|
+
status = TransactionStatus.REJECTED;
|
|
329
|
+
} else {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const data = variables.data;
|
|
333
|
+
const to = variables.to || variables.address;
|
|
334
|
+
const value = variables.value?.toString();
|
|
335
|
+
logger.info("WagmiEventHandler: Tracking transaction event", {
|
|
336
|
+
status,
|
|
337
|
+
mutationType,
|
|
338
|
+
address,
|
|
339
|
+
chainId,
|
|
340
|
+
transactionHash
|
|
341
|
+
});
|
|
342
|
+
this.formo.transaction({
|
|
343
|
+
status,
|
|
344
|
+
chainId,
|
|
345
|
+
address,
|
|
346
|
+
...(data && {
|
|
347
|
+
data
|
|
348
|
+
}),
|
|
349
|
+
...(to && {
|
|
350
|
+
to
|
|
351
|
+
}),
|
|
352
|
+
...(value && {
|
|
353
|
+
value
|
|
354
|
+
}),
|
|
355
|
+
...(transactionHash && {
|
|
356
|
+
transactionHash
|
|
357
|
+
})
|
|
358
|
+
}).catch(error => {
|
|
359
|
+
logger.error("WagmiEventHandler: Error tracking transaction:", error);
|
|
360
|
+
});
|
|
361
|
+
} catch (error) {
|
|
362
|
+
logger.error("WagmiEventHandler: Error handling transaction mutation:", error);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Get current Wagmi state
|
|
368
|
+
*/
|
|
369
|
+
getState() {
|
|
370
|
+
if (typeof this.wagmiConfig.getState === "function") {
|
|
371
|
+
return this.wagmiConfig.getState();
|
|
372
|
+
}
|
|
373
|
+
if (this.wagmiConfig.state) {
|
|
374
|
+
return this.wagmiConfig.state;
|
|
375
|
+
}
|
|
376
|
+
logger.warn("WagmiEventHandler: Unable to get state from config, returning default state");
|
|
377
|
+
return {
|
|
378
|
+
status: "disconnected",
|
|
379
|
+
connections: new Map(),
|
|
380
|
+
current: undefined,
|
|
381
|
+
chainId: undefined
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Get connected address from state
|
|
387
|
+
*/
|
|
388
|
+
getConnectedAddress(state) {
|
|
389
|
+
if (!state.current) {
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
const connection = state.connections.get(state.current);
|
|
393
|
+
if (!connection || connection.accounts.length === 0) {
|
|
394
|
+
return undefined;
|
|
395
|
+
}
|
|
396
|
+
return connection.accounts[0];
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Get connector name from state
|
|
401
|
+
*/
|
|
402
|
+
getConnectorName(state) {
|
|
403
|
+
if (!state.current) {
|
|
404
|
+
return undefined;
|
|
405
|
+
}
|
|
406
|
+
const connection = state.connections.get(state.current);
|
|
407
|
+
return connection?.connector.name;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Get connector ID from state (typically the rdns for EIP-6963 wallets)
|
|
412
|
+
*/
|
|
413
|
+
getConnectorId(state) {
|
|
414
|
+
if (!state.current) {
|
|
415
|
+
return undefined;
|
|
416
|
+
}
|
|
417
|
+
const connection = state.connections.get(state.current);
|
|
418
|
+
return connection?.connector.id;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Clean up subscriptions
|
|
423
|
+
*/
|
|
424
|
+
cleanup() {
|
|
425
|
+
logger.info("WagmiEventHandler: Cleaning up subscriptions");
|
|
426
|
+
for (const unsubscribe of this.unsubscribers) {
|
|
427
|
+
try {
|
|
428
|
+
unsubscribe();
|
|
429
|
+
} catch (error) {
|
|
430
|
+
logger.error("WagmiEventHandler: Error during cleanup:", error);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
this.unsubscribers = [];
|
|
434
|
+
this.processedMutations.clear();
|
|
435
|
+
this.pendingStatusChanges = [];
|
|
436
|
+
logger.info("WagmiEventHandler: Cleanup complete");
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=WagmiEventHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SignatureStatus","TransactionStatus","logger","WagmiEventHandler","unsubscribers","trackingState","isProcessing","processedMutations","Set","pendingStatusChanges","constructor","formoAnalytics","wagmiConfig","queryClient","formo","info","setupConnectionListeners","setupMutationTracking","warn","statusUnsubscribe","subscribe","state","status","prevStatus","handleStatusChange","push","chainIdUnsubscribe","chainId","prevChainId","handleChainChange","MAX_PENDING_STATUS_CHANGES","length","shift","debug","processStatusChange","pending","getState","address","getConnectedAddress","isAutocaptureEnabled","disconnect","lastChainId","lastAddress","undefined","connectorName","getConnectorName","connectorId","getConnectorId","connect","providerName","rdns","lastStatus","error","chain","mutationCache","getMutationCache","unsubscribe","event","handleMutationEvent","type","mutation","mutationKey","options","mutationType","mutationStateKey","mutationId","has","add","handleSignatureMutation","handleTransactionMutation","size","entries","Array","from","i","entry","delete","variables","signatureHash","REQUESTED","CONFIRMED","data","REJECTED","message","JSON","stringify","types","signature","catch","account","transactionHash","STARTED","BROADCASTED","to","value","toString","transaction","connections","Map","current","connection","get","accounts","connector","name","id","cleanup","clear"],"sourceRoot":"../../../../src","sources":["lib/wagmi/WagmiEventHandler.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["lib/wagmi/index.ts"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["lib/wagmi/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/base.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region Specific Event Types
|
|
2
|
+
|
|
3
|
+
export let SignatureStatus = /*#__PURE__*/function (SignatureStatus) {
|
|
4
|
+
SignatureStatus["REQUESTED"] = "requested";
|
|
5
|
+
SignatureStatus["REJECTED"] = "rejected";
|
|
6
|
+
SignatureStatus["CONFIRMED"] = "confirmed";
|
|
7
|
+
return SignatureStatus;
|
|
8
|
+
}({});
|
|
9
|
+
export let TransactionStatus = /*#__PURE__*/function (TransactionStatus) {
|
|
10
|
+
TransactionStatus["STARTED"] = "started";
|
|
11
|
+
TransactionStatus["REJECTED"] = "rejected";
|
|
12
|
+
TransactionStatus["BROADCASTED"] = "broadcasted";
|
|
13
|
+
TransactionStatus["CONFIRMED"] = "confirmed";
|
|
14
|
+
TransactionStatus["REVERTED"] = "reverted";
|
|
15
|
+
return TransactionStatus;
|
|
16
|
+
}({});
|
|
17
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SignatureStatus","TransactionStatus"],"sourceRoot":"../../../src","sources":["types/events.ts"],"mappings":"AAyCA;;AAsFA,WAAYA,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B,WAAYC,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Address validation and checksum utilities
|
|
3
|
+
*
|
|
4
|
+
* Uses ethereum-cryptography for proper EIP-55 checksum computation
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { keccak256 } from "ethereum-cryptography/keccak.js";
|
|
8
|
+
import { utf8ToBytes } from "ethereum-cryptography/utils.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Convert Uint8Array to hex string
|
|
12
|
+
*/
|
|
13
|
+
function toHex(bytes) {
|
|
14
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Check if a string is a valid Ethereum address
|
|
19
|
+
*/
|
|
20
|
+
export function isValidAddress(address) {
|
|
21
|
+
if (!address) return false;
|
|
22
|
+
if (typeof address !== "string") return false;
|
|
23
|
+
|
|
24
|
+
// Check if it matches basic hex address format
|
|
25
|
+
return /^0x[a-fA-F0-9]{40}$/.test(address);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Convert address to EIP-55 checksum format
|
|
30
|
+
*
|
|
31
|
+
* Uses keccak256 from ethereum-cryptography for correct checksumming
|
|
32
|
+
* See: https://eips.ethereum.org/EIPS/eip-55
|
|
33
|
+
*/
|
|
34
|
+
export function toChecksumAddress(address) {
|
|
35
|
+
if (!isValidAddress(address)) {
|
|
36
|
+
return address;
|
|
37
|
+
}
|
|
38
|
+
const lowercaseAddress = address.toLowerCase().replace("0x", "");
|
|
39
|
+
const hash = toHex(keccak256(utf8ToBytes(lowercaseAddress)));
|
|
40
|
+
let checksumAddress = "0x";
|
|
41
|
+
for (let i = 0; i < lowercaseAddress.length; i++) {
|
|
42
|
+
const char = lowercaseAddress[i];
|
|
43
|
+
if (char && parseInt(hash[i] || "0", 16) >= 8) {
|
|
44
|
+
checksumAddress += char.toUpperCase();
|
|
45
|
+
} else {
|
|
46
|
+
checksumAddress += char;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return checksumAddress;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get valid address or null
|
|
54
|
+
*/
|
|
55
|
+
export function getValidAddress(address) {
|
|
56
|
+
if (!address) return null;
|
|
57
|
+
const trimmed = typeof address === "string" ? address.trim() : address;
|
|
58
|
+
if (!isValidAddress(trimmed)) return null;
|
|
59
|
+
return trimmed;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Blocked addresses that should not emit events
|
|
64
|
+
* (zero address, dead address)
|
|
65
|
+
*/
|
|
66
|
+
const BLOCKED_ADDRESSES = new Set(["0x0000000000000000000000000000000000000000", "0x000000000000000000000000000000000000dead"]);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Check if address is in blocked list
|
|
70
|
+
*/
|
|
71
|
+
export function isBlockedAddress(address) {
|
|
72
|
+
return BLOCKED_ADDRESSES.has(address.toLowerCase());
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["keccak256","utf8ToBytes","toHex","bytes","Array","from","map","b","toString","padStart","join","isValidAddress","address","test","toChecksumAddress","lowercaseAddress","toLowerCase","replace","hash","checksumAddress","i","length","char","parseInt","toUpperCase","getValidAddress","trimmed","trim","BLOCKED_ADDRESSES","Set","isBlockedAddress","has"],"sourceRoot":"../../../src","sources":["utils/address.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,QAAQ,iCAAiC;AAC3D,SAASC,WAAW,QAAQ,gCAAgC;;AAE5D;AACA;AACA;AACA,SAASC,KAAKA,CAACC,KAAiB,EAAU;EACxC,OAAOC,KAAK,CAACC,IAAI,CAACF,KAAK,CAAC,CACrBG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAC3CC,IAAI,CAAC,EAAE,CAAC;AACb;;AAEA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,OAAe,EAAW;EACvD,IAAI,CAACA,OAAO,EAAE,OAAO,KAAK;EAC1B,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE,OAAO,KAAK;;EAE7C;EACA,OAAO,qBAAqB,CAACC,IAAI,CAACD,OAAO,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,iBAAiBA,CAACF,OAAe,EAAU;EACzD,IAAI,CAACD,cAAc,CAACC,OAAO,CAAC,EAAE;IAC5B,OAAOA,OAAO;EAChB;EAEA,MAAMG,gBAAgB,GAAGH,OAAO,CAACI,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;EAChE,MAAMC,IAAI,GAAGhB,KAAK,CAACF,SAAS,CAACC,WAAW,CAACc,gBAAgB,CAAC,CAAC,CAAC;EAE5D,IAAII,eAAe,GAAG,IAAI;EAE1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,gBAAgB,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;IAChD,MAAME,IAAI,GAAGP,gBAAgB,CAACK,CAAC,CAAC;IAChC,IAAIE,IAAI,IAAIC,QAAQ,CAACL,IAAI,CAACE,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC7CD,eAAe,IAAIG,IAAI,CAACE,WAAW,CAAC,CAAC;IACvC,CAAC,MAAM;MACLL,eAAe,IAAIG,IAAI;IACzB;EACF;EAEA,OAAOH,eAAe;AACxB;;AAEA;AACA;AACA;AACA,OAAO,SAASM,eAAeA,CAC7Bb,OAAkC,EACnB;EACf,IAAI,CAACA,OAAO,EAAE,OAAO,IAAI;EACzB,MAAMc,OAAO,GAAG,OAAOd,OAAO,KAAK,QAAQ,GAAGA,OAAO,CAACe,IAAI,CAAC,CAAC,GAAGf,OAAO;EACtE,IAAI,CAACD,cAAc,CAACe,OAAO,CAAC,EAAE,OAAO,IAAI;EACzC,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA,MAAME,iBAAiB,GAAG,IAAIC,GAAG,CAAS,CACxC,4CAA4C,EAC5C,4CAA4C,CAC7C,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAClB,OAAe,EAAW;EACzD,OAAOgB,iBAAiB,CAACG,GAAG,CAACnB,OAAO,CAACI,WAAW,CAAC,CAAC,CAAC;AACrD","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { sha256 } from "ethereum-cryptography/sha256";
|
|
2
|
+
import { utf8ToBytes, bytesToHex } from "ethereum-cryptography/utils";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generate a SHA-256 hash for event deduplication
|
|
6
|
+
* Returns full 64 hex chars to match web SDK format
|
|
7
|
+
*/
|
|
8
|
+
export async function hash(input) {
|
|
9
|
+
const bytes = utf8ToBytes(input);
|
|
10
|
+
const hashBytes = sha256(bytes);
|
|
11
|
+
return bytesToHex(hashBytes);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generate a UUID v4
|
|
16
|
+
*/
|
|
17
|
+
export function generateUUID() {
|
|
18
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => {
|
|
19
|
+
const r = Math.random() * 16 | 0;
|
|
20
|
+
const v = c === "x" ? r : r & 0x3 | 0x8;
|
|
21
|
+
return v.toString(16);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sha256","utf8ToBytes","bytesToHex","hash","input","bytes","hashBytes","generateUUID","replace","c","r","Math","random","v","toString"],"sourceRoot":"../../../src","sources":["utils/hash.ts"],"mappings":"AAAA,SAASA,MAAM,QAAQ,8BAA8B;AACrD,SAASC,WAAW,EAAEC,UAAU,QAAQ,6BAA6B;;AAErE;AACA;AACA;AACA;AACA,OAAO,eAAeC,IAAIA,CAACC,KAAa,EAAmB;EACzD,MAAMC,KAAK,GAAGJ,WAAW,CAACG,KAAK,CAAC;EAChC,MAAME,SAAS,GAAGN,MAAM,CAACK,KAAK,CAAC;EAC/B,OAAOH,UAAU,CAACI,SAAS,CAAC;AAC9B;;AAEA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAW;EACrC,OAAO,sCAAsC,CAACC,OAAO,CAAC,OAAO,EAAGC,CAAC,IAAK;IACpE,MAAMC,CAAC,GAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;IAClC,MAAMC,CAAC,GAAGJ,CAAC,KAAK,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;IACzC,OAAOG,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;AACJ","ignoreList":[]}
|