@formo/analytics 1.25.0 → 1.27.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 +6 -4
- package/dist/cjs/src/FormoAnalytics.d.ts +27 -15
- package/dist/cjs/src/FormoAnalytics.js +198 -257
- package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
- package/dist/{esm/src/lib/consent.d.ts → cjs/src/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 +2 -2
- package/dist/cjs/src/{lib/event → event}/EventFactory.js +9 -9
- 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/{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/fetch/index.d.ts +11 -0
- package/dist/cjs/src/fetch/index.js +126 -0
- 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/cjs/src/queue/EventQueue.d.ts +56 -0
- package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +161 -52
- 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 +35 -1
- package/dist/cjs/src/types/events.d.ts +5 -3
- 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 +93 -0
- package/dist/cjs/src/wagmi/WagmiEventHandler.js +669 -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 +146 -0
- package/dist/cjs/src/wagmi/types.js +10 -0
- package/dist/cjs/src/wagmi/utils.d.ts +74 -0
- package/dist/cjs/src/wagmi/utils.js +198 -0
- package/dist/esm/src/FormoAnalytics.d.ts +27 -15
- package/dist/esm/src/FormoAnalytics.js +88 -147
- package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
- package/dist/{cjs/src/lib/consent.d.ts → esm/src/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 +2 -2
- package/dist/esm/src/{lib/event → event}/EventFactory.js +9 -9
- 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/{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/fetch/index.d.ts +11 -0
- package/dist/esm/src/fetch/index.js +124 -0
- 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/esm/src/queue/EventQueue.d.ts +56 -0
- package/dist/esm/src/{lib/queue → queue}/EventQueue.js +161 -52
- 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 +35 -1
- package/dist/esm/src/types/events.d.ts +5 -3
- 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 +93 -0
- package/dist/esm/src/wagmi/WagmiEventHandler.js +666 -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 +146 -0
- package/dist/esm/src/wagmi/types.js +9 -0
- package/dist/esm/src/wagmi/utils.d.ts +74 -0
- package/dist/esm/src/wagmi/utils.js +192 -0
- package/dist/index.umd.min.js +1 -1
- package/package.json +23 -4
- package/dist/cjs/src/lib/fetch.d.ts +0 -3
- package/dist/cjs/src/lib/fetch.js +0 -8
- package/dist/cjs/src/lib/index.d.ts +0 -7
- package/dist/cjs/src/lib/index.js +0 -28
- package/dist/cjs/src/lib/queue/EventQueue.d.ts +0 -34
- package/dist/esm/src/lib/fetch.d.ts +0 -3
- package/dist/esm/src/lib/fetch.js +0 -3
- package/dist/esm/src/lib/index.d.ts +0 -7
- package/dist/esm/src/lib/index.js +0 -7
- package/dist/esm/src/lib/queue/EventQueue.d.ts +0 -34
- /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}/constants.d.ts +0 -0
- /package/dist/cjs/src/{lib/event → event}/constants.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}/constants.d.ts +0 -0
- /package/dist/esm/src/{lib/event → event}/constants.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,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,146 @@
|
|
|
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 query state
|
|
94
|
+
*/
|
|
95
|
+
export interface QueryState {
|
|
96
|
+
status: 'pending' | 'success' | 'error';
|
|
97
|
+
data?: any;
|
|
98
|
+
error?: Error | null;
|
|
99
|
+
fetchStatus: 'fetching' | 'paused' | 'idle';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* React Query query object
|
|
103
|
+
*/
|
|
104
|
+
export interface Query {
|
|
105
|
+
state: QueryState;
|
|
106
|
+
queryKey: readonly unknown[];
|
|
107
|
+
queryHash: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* React Query query cache event
|
|
111
|
+
*/
|
|
112
|
+
export interface QueryCacheEvent {
|
|
113
|
+
type: 'added' | 'removed' | 'updated';
|
|
114
|
+
query: Query;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* React Query QueryCache interface
|
|
118
|
+
*/
|
|
119
|
+
export interface QueryCache {
|
|
120
|
+
subscribe(listener: (event: QueryCacheEvent) => void): () => void;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* React Query QueryClient interface
|
|
124
|
+
*/
|
|
125
|
+
export interface QueryClient {
|
|
126
|
+
getMutationCache(): MutationCache;
|
|
127
|
+
getQueryCache(): QueryCache;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Unsubscribe function returned by subscriptions
|
|
131
|
+
*/
|
|
132
|
+
export type UnsubscribeFn = () => void;
|
|
133
|
+
/**
|
|
134
|
+
* Wagmi mutation key types for identifying wallet operations
|
|
135
|
+
*/
|
|
136
|
+
export type WagmiMutationKey = 'signMessage' | 'signTypedData' | 'sendTransaction' | 'writeContract';
|
|
137
|
+
/**
|
|
138
|
+
* Internal tracking state for Wagmi event handler
|
|
139
|
+
*/
|
|
140
|
+
export interface WagmiTrackingState {
|
|
141
|
+
lastChainId?: number;
|
|
142
|
+
lastAddress?: string;
|
|
143
|
+
lastStatus?: WagmiState['status'];
|
|
144
|
+
isProcessing: boolean;
|
|
145
|
+
}
|
|
146
|
+
//# 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
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for Wagmi event handling
|
|
3
|
+
*
|
|
4
|
+
* Provides ABI encoding utilities for extracting transaction data from
|
|
5
|
+
* writeContract mutations without requiring viem as a direct dependency.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Flatten a nested object into a flat object with underscore-separated keys.
|
|
9
|
+
* Only leaf values (primitives) are included; intermediate objects are not.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
* Input: { o: { x: "100", inner: { a: "42", b: "0xRecipient" } } }
|
|
13
|
+
* Output: { o_x: "100", o_inner_a: "42", o_inner_b: "0xRecipient" }
|
|
14
|
+
*
|
|
15
|
+
* @param obj - The object to flatten
|
|
16
|
+
* @param prefix - Optional prefix for keys (used in recursion)
|
|
17
|
+
* @returns A flat object with underscore-separated keys
|
|
18
|
+
*/
|
|
19
|
+
export declare function flattenObject(obj: Record<string, unknown>, prefix?: string): Record<string, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* ABI function item type
|
|
22
|
+
*/
|
|
23
|
+
export interface AbiItem {
|
|
24
|
+
type: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
inputs?: AbiInput[];
|
|
27
|
+
outputs?: AbiOutput[];
|
|
28
|
+
stateMutability?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface AbiInput {
|
|
31
|
+
name: string;
|
|
32
|
+
type: string;
|
|
33
|
+
indexed?: boolean;
|
|
34
|
+
components?: AbiInput[];
|
|
35
|
+
internalType?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AbiOutput {
|
|
38
|
+
name: string;
|
|
39
|
+
type: string;
|
|
40
|
+
components?: AbiOutput[];
|
|
41
|
+
internalType?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Encode writeContract data using viem's encodeFunctionData
|
|
45
|
+
*
|
|
46
|
+
* @param abi - The contract ABI
|
|
47
|
+
* @param functionName - The function name to encode
|
|
48
|
+
* @param args - The function arguments
|
|
49
|
+
* @returns The encoded calldata or undefined if encoding fails
|
|
50
|
+
*/
|
|
51
|
+
export declare function encodeWriteContractData(abi: AbiItem[], functionName: string, args?: unknown[]): string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Extract function arguments as a name-value map from ABI and args array
|
|
54
|
+
*
|
|
55
|
+
* @param abi - The contract ABI
|
|
56
|
+
* @param functionName - The function name
|
|
57
|
+
* @param args - The function arguments array
|
|
58
|
+
* @returns A map of argument names to values, or undefined if extraction fails
|
|
59
|
+
*/
|
|
60
|
+
export declare function extractFunctionArgs(abi: AbiItem[], functionName: string, args?: unknown[]): Record<string, unknown> | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Build safe function args with collision handling and struct flattening.
|
|
63
|
+
*
|
|
64
|
+
* This function:
|
|
65
|
+
* 1. Prefixes top-level args that collide with reserved fields (e.g., 'to' -> 'arg_to')
|
|
66
|
+
* 2. Flattens nested struct values for easier querying (e.g., order.maker -> order_maker)
|
|
67
|
+
* 3. Skips flattened keys that would collide with existing top-level args
|
|
68
|
+
*
|
|
69
|
+
* @param functionArgs - The extracted function arguments
|
|
70
|
+
* @param reservedFields - Set of reserved field names that need prefixing
|
|
71
|
+
* @returns Safe function args object, or undefined if input is undefined
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildSafeFunctionArgs(functionArgs: Record<string, unknown> | undefined, reservedFields: Set<string>): Record<string, unknown> | undefined;
|
|
74
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for Wagmi event handling
|
|
4
|
+
*
|
|
5
|
+
* Provides ABI encoding utilities for extracting transaction data from
|
|
6
|
+
* writeContract mutations without requiring viem as a direct dependency.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.flattenObject = flattenObject;
|
|
10
|
+
exports.encodeWriteContractData = encodeWriteContractData;
|
|
11
|
+
exports.extractFunctionArgs = extractFunctionArgs;
|
|
12
|
+
exports.buildSafeFunctionArgs = buildSafeFunctionArgs;
|
|
13
|
+
var logger_1 = require("../logger");
|
|
14
|
+
/**
|
|
15
|
+
* Flatten a nested object into a flat object with underscore-separated keys.
|
|
16
|
+
* Only leaf values (primitives) are included; intermediate objects are not.
|
|
17
|
+
*
|
|
18
|
+
* Example:
|
|
19
|
+
* Input: { o: { x: "100", inner: { a: "42", b: "0xRecipient" } } }
|
|
20
|
+
* Output: { o_x: "100", o_inner_a: "42", o_inner_b: "0xRecipient" }
|
|
21
|
+
*
|
|
22
|
+
* @param obj - The object to flatten
|
|
23
|
+
* @param prefix - Optional prefix for keys (used in recursion)
|
|
24
|
+
* @returns A flat object with underscore-separated keys
|
|
25
|
+
*/
|
|
26
|
+
function flattenObject(obj, prefix) {
|
|
27
|
+
if (prefix === void 0) { prefix = ""; }
|
|
28
|
+
var result = {};
|
|
29
|
+
for (var _i = 0, _a = Object.entries(obj); _i < _a.length; _i++) {
|
|
30
|
+
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
31
|
+
var newKey = prefix ? "".concat(prefix, "_").concat(key) : key;
|
|
32
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
33
|
+
// Recursively flatten nested objects
|
|
34
|
+
var nested = flattenObject(value, newKey);
|
|
35
|
+
Object.assign(result, nested);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Leaf value (primitive or array) - add directly
|
|
39
|
+
result[newKey] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Recursively convert all BigInt values to strings for JSON serialization
|
|
46
|
+
* Handles nested objects, arrays, and deeply nested structures (e.g., Solidity structs)
|
|
47
|
+
*
|
|
48
|
+
* @param value - The value to convert
|
|
49
|
+
* @returns The value with all BigInt converted to strings
|
|
50
|
+
*/
|
|
51
|
+
function convertBigIntToString(value) {
|
|
52
|
+
if (typeof value === "bigint") {
|
|
53
|
+
return value.toString();
|
|
54
|
+
}
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
return value.map(convertBigIntToString);
|
|
57
|
+
}
|
|
58
|
+
if (value !== null && typeof value === "object") {
|
|
59
|
+
var result = {};
|
|
60
|
+
for (var _i = 0, _a = Object.entries(value); _i < _a.length; _i++) {
|
|
61
|
+
var _b = _a[_i], key = _b[0], val = _b[1];
|
|
62
|
+
result[key] = convertBigIntToString(val);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
// Cached viem module reference
|
|
69
|
+
var viemModule;
|
|
70
|
+
/**
|
|
71
|
+
* Try to load viem synchronously via require
|
|
72
|
+
* Returns null if viem is not available
|
|
73
|
+
*/
|
|
74
|
+
function tryLoadViem() {
|
|
75
|
+
if (viemModule !== undefined) {
|
|
76
|
+
return viemModule;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
// Use require to load viem synchronously
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
81
|
+
var viem = require("viem");
|
|
82
|
+
if (viem === null || viem === void 0 ? void 0 : viem.encodeFunctionData) {
|
|
83
|
+
viemModule = {
|
|
84
|
+
encodeFunctionData: viem.encodeFunctionData,
|
|
85
|
+
};
|
|
86
|
+
return viemModule;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (_a) {
|
|
90
|
+
// viem is not available
|
|
91
|
+
}
|
|
92
|
+
viemModule = null;
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Encode writeContract data using viem's encodeFunctionData
|
|
97
|
+
*
|
|
98
|
+
* @param abi - The contract ABI
|
|
99
|
+
* @param functionName - The function name to encode
|
|
100
|
+
* @param args - The function arguments
|
|
101
|
+
* @returns The encoded calldata or undefined if encoding fails
|
|
102
|
+
*/
|
|
103
|
+
function encodeWriteContractData(abi, functionName, args) {
|
|
104
|
+
try {
|
|
105
|
+
var viem = tryLoadViem();
|
|
106
|
+
if (!viem) {
|
|
107
|
+
logger_1.logger.debug("WagmiEventHandler: viem not available, cannot encode function data");
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
var data = viem.encodeFunctionData({
|
|
111
|
+
abi: abi,
|
|
112
|
+
functionName: functionName,
|
|
113
|
+
args: args || [],
|
|
114
|
+
});
|
|
115
|
+
return data;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger_1.logger.warn("WagmiEventHandler: Failed to encode function data", error);
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract function arguments as a name-value map from ABI and args array
|
|
124
|
+
*
|
|
125
|
+
* @param abi - The contract ABI
|
|
126
|
+
* @param functionName - The function name
|
|
127
|
+
* @param args - The function arguments array
|
|
128
|
+
* @returns A map of argument names to values, or undefined if extraction fails
|
|
129
|
+
*/
|
|
130
|
+
function extractFunctionArgs(abi, functionName, args) {
|
|
131
|
+
if (!abi || !functionName || !args || !Array.isArray(args)) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
// Find the function in the ABI
|
|
136
|
+
var abiItem = abi.find(function (item) { return item.type === "function" && item.name === functionName; });
|
|
137
|
+
if (!(abiItem === null || abiItem === void 0 ? void 0 : abiItem.inputs) || !Array.isArray(abiItem.inputs)) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
var result_1 = {};
|
|
141
|
+
abiItem.inputs.forEach(function (input, index) {
|
|
142
|
+
if (index < args.length) {
|
|
143
|
+
var argValue = args[index];
|
|
144
|
+
var argName = input.name || "arg".concat(index);
|
|
145
|
+
// Recursively convert BigInt to string for JSON serialization
|
|
146
|
+
// Handles: direct BigInt, arrays with BigInt, nested objects/structs with BigInt
|
|
147
|
+
result_1[argName] = convertBigIntToString(argValue);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return result_1;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
logger_1.logger.warn("WagmiEventHandler: Failed to extract function args", error);
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build safe function args with collision handling and struct flattening.
|
|
159
|
+
*
|
|
160
|
+
* This function:
|
|
161
|
+
* 1. Prefixes top-level args that collide with reserved fields (e.g., 'to' -> 'arg_to')
|
|
162
|
+
* 2. Flattens nested struct values for easier querying (e.g., order.maker -> order_maker)
|
|
163
|
+
* 3. Skips flattened keys that would collide with existing top-level args
|
|
164
|
+
*
|
|
165
|
+
* @param functionArgs - The extracted function arguments
|
|
166
|
+
* @param reservedFields - Set of reserved field names that need prefixing
|
|
167
|
+
* @returns Safe function args object, or undefined if input is undefined
|
|
168
|
+
*/
|
|
169
|
+
function buildSafeFunctionArgs(functionArgs, reservedFields) {
|
|
170
|
+
if (!functionArgs) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
var result = {};
|
|
174
|
+
for (var _i = 0, _a = Object.entries(functionArgs); _i < _a.length; _i++) {
|
|
175
|
+
var _b = _a[_i], key = _b[0], val = _b[1];
|
|
176
|
+
var safeKey = reservedFields.has(key) ? "arg_".concat(key) : key;
|
|
177
|
+
result[safeKey] = val;
|
|
178
|
+
// If the value is a nested object (struct), flatten it
|
|
179
|
+
// Skip flattened keys that would overwrite existing top-level args
|
|
180
|
+
if (val !== null && typeof val === "object" && !Array.isArray(val)) {
|
|
181
|
+
var flattened = flattenObject(val, safeKey);
|
|
182
|
+
for (var _c = 0, _d = Object.entries(flattened); _c < _d.length; _c++) {
|
|
183
|
+
var _e = _d[_c], flatKey = _e[0], flatVal = _e[1];
|
|
184
|
+
if (!(flatKey in result)) {
|
|
185
|
+
result[flatKey] = flatVal;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
logger_1.logger.debug("WagmiEventHandler: Skipping flattened key collision", {
|
|
189
|
+
flatKey: flatKey,
|
|
190
|
+
existingValue: result[flatKey],
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=utils.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
|
|
@@ -129,7 +139,7 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
129
139
|
* @param {(...args: unknown[]) => void} callback
|
|
130
140
|
* @returns {Promise<void>}
|
|
131
141
|
*/
|
|
132
|
-
transaction({ status, chainId, address, data, to, value, transactionHash, }: {
|
|
142
|
+
transaction({ status, chainId, address, data, to, value, transactionHash, function_name, function_args, }: {
|
|
133
143
|
status: TransactionStatus;
|
|
134
144
|
chainId: ChainID;
|
|
135
145
|
address: Address;
|
|
@@ -137,6 +147,8 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
137
147
|
to?: string;
|
|
138
148
|
value?: string;
|
|
139
149
|
transactionHash?: string;
|
|
150
|
+
function_name?: string;
|
|
151
|
+
function_args?: Record<string, unknown>;
|
|
140
152
|
}, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
|
|
141
153
|
/**
|
|
142
154
|
* Emits an identify event with current wallet address and provider info.
|
|
@@ -193,7 +205,13 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
193
205
|
* @returns {boolean} True if the user has opted out
|
|
194
206
|
*/
|
|
195
207
|
hasOptedOutTracking(): boolean;
|
|
196
|
-
|
|
208
|
+
/**
|
|
209
|
+
* Track an EIP-1193 provider by wrapping its request method and adding event listeners
|
|
210
|
+
* Note: This is only used in non-Wagmi mode. When Wagmi is enabled, all tracking
|
|
211
|
+
* happens through Wagmi's connector system instead of EIP-1193/EIP-6963.
|
|
212
|
+
* @param provider The EIP-1193 provider to track
|
|
213
|
+
*/
|
|
214
|
+
private trackEIP1193Provider;
|
|
197
215
|
private trackProviders;
|
|
198
216
|
private addProviderListener;
|
|
199
217
|
private registerAccountsChangedListener;
|
|
@@ -229,19 +247,13 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
229
247
|
* @param eventType The wallet event type to check
|
|
230
248
|
* @returns {boolean} True if the event type should be autocaptured
|
|
231
249
|
*/
|
|
232
|
-
|
|
250
|
+
isAutocaptureEnabled(eventType: "connect" | "disconnect" | "signature" | "transaction" | "chain"): boolean;
|
|
233
251
|
/**
|
|
234
252
|
* Get provider information for a given provider
|
|
235
253
|
* @param provider The provider to get info for
|
|
236
254
|
* @returns Provider information
|
|
237
255
|
*/
|
|
238
256
|
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
257
|
private getProviders;
|
|
246
258
|
get providers(): readonly EIP6963ProviderDetail[];
|
|
247
259
|
private detectWallets;
|