@formo/analytics 1.26.0 → 1.28.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.
Files changed (87) hide show
  1. package/README.md +6 -4
  2. package/dist/cjs/src/FormoAnalytics.d.ts +71 -12
  3. package/dist/cjs/src/FormoAnalytics.js +274 -147
  4. package/dist/cjs/src/event/EventFactory.d.ts +10 -2
  5. package/dist/cjs/src/event/EventFactory.js +32 -21
  6. package/dist/cjs/src/fetch/index.d.ts +10 -2
  7. package/dist/cjs/src/fetch/index.js +122 -4
  8. package/dist/cjs/src/index.d.ts +4 -0
  9. package/dist/cjs/src/index.js +6 -0
  10. package/dist/cjs/src/privy/index.d.ts +9 -0
  11. package/dist/cjs/src/privy/index.js +12 -0
  12. package/dist/cjs/src/privy/types.d.ts +175 -0
  13. package/dist/cjs/src/privy/types.js +12 -0
  14. package/dist/cjs/src/privy/utils.d.ts +32 -0
  15. package/dist/cjs/src/privy/utils.js +188 -0
  16. package/dist/cjs/src/queue/EventQueue.d.ts +24 -2
  17. package/dist/cjs/src/queue/EventQueue.js +158 -49
  18. package/dist/cjs/src/session/index.js +2 -1
  19. package/dist/cjs/src/solana/SolanaAdapter.d.ts +211 -0
  20. package/dist/cjs/src/solana/SolanaAdapter.js +975 -0
  21. package/dist/cjs/src/solana/SolanaManager.d.ts +24 -0
  22. package/dist/cjs/src/solana/SolanaManager.js +80 -0
  23. package/dist/cjs/src/solana/address.d.ts +72 -0
  24. package/dist/cjs/src/solana/address.js +176 -0
  25. package/dist/cjs/src/solana/index.d.ts +13 -0
  26. package/dist/cjs/src/solana/index.js +32 -0
  27. package/dist/cjs/src/solana/types.d.ts +206 -0
  28. package/dist/cjs/src/solana/types.js +80 -0
  29. package/dist/cjs/src/types/base.d.ts +25 -0
  30. package/dist/cjs/src/types/events.d.ts +9 -6
  31. package/dist/cjs/src/utils/address.d.ts +21 -0
  32. package/dist/cjs/src/utils/address.js +48 -1
  33. package/dist/cjs/src/utils/builderCode.d.ts +30 -0
  34. package/dist/cjs/src/utils/builderCode.js +143 -0
  35. package/dist/cjs/src/utils/index.d.ts +1 -0
  36. package/dist/cjs/src/utils/index.js +1 -0
  37. package/dist/cjs/src/version.d.ts +1 -1
  38. package/dist/cjs/src/version.js +1 -1
  39. package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +24 -0
  40. package/dist/cjs/src/wagmi/WagmiEventHandler.js +242 -24
  41. package/dist/cjs/src/wagmi/types.d.ts +31 -0
  42. package/dist/cjs/src/wagmi/utils.d.ts +79 -0
  43. package/dist/cjs/src/wagmi/utils.js +218 -0
  44. package/dist/esm/src/FormoAnalytics.d.ts +71 -12
  45. package/dist/esm/src/FormoAnalytics.js +275 -148
  46. package/dist/esm/src/event/EventFactory.d.ts +10 -2
  47. package/dist/esm/src/event/EventFactory.js +34 -23
  48. package/dist/esm/src/fetch/index.d.ts +10 -2
  49. package/dist/esm/src/fetch/index.js +123 -2
  50. package/dist/esm/src/index.d.ts +4 -0
  51. package/dist/esm/src/index.js +3 -0
  52. package/dist/esm/src/privy/index.d.ts +9 -0
  53. package/dist/esm/src/privy/index.js +8 -0
  54. package/dist/esm/src/privy/types.d.ts +175 -0
  55. package/dist/esm/src/privy/types.js +11 -0
  56. package/dist/esm/src/privy/utils.d.ts +32 -0
  57. package/dist/esm/src/privy/utils.js +185 -0
  58. package/dist/esm/src/queue/EventQueue.d.ts +24 -2
  59. package/dist/esm/src/queue/EventQueue.js +158 -49
  60. package/dist/esm/src/session/index.js +2 -1
  61. package/dist/esm/src/solana/SolanaAdapter.d.ts +211 -0
  62. package/dist/esm/src/solana/SolanaAdapter.js +972 -0
  63. package/dist/esm/src/solana/SolanaManager.d.ts +24 -0
  64. package/dist/esm/src/solana/SolanaManager.js +77 -0
  65. package/dist/esm/src/solana/address.d.ts +72 -0
  66. package/dist/esm/src/solana/address.js +167 -0
  67. package/dist/esm/src/solana/index.d.ts +13 -0
  68. package/dist/esm/src/solana/index.js +13 -0
  69. package/dist/esm/src/solana/types.d.ts +206 -0
  70. package/dist/esm/src/solana/types.js +74 -0
  71. package/dist/esm/src/types/base.d.ts +25 -0
  72. package/dist/esm/src/types/events.d.ts +9 -6
  73. package/dist/esm/src/utils/address.d.ts +21 -0
  74. package/dist/esm/src/utils/address.js +45 -0
  75. package/dist/esm/src/utils/builderCode.d.ts +30 -0
  76. package/dist/esm/src/utils/builderCode.js +140 -0
  77. package/dist/esm/src/utils/index.d.ts +1 -0
  78. package/dist/esm/src/utils/index.js +1 -0
  79. package/dist/esm/src/version.d.ts +1 -1
  80. package/dist/esm/src/version.js +1 -1
  81. package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +24 -0
  82. package/dist/esm/src/wagmi/WagmiEventHandler.js +242 -24
  83. package/dist/esm/src/wagmi/types.d.ts +31 -0
  84. package/dist/esm/src/wagmi/utils.d.ts +79 -0
  85. package/dist/esm/src/wagmi/utils.js +211 -0
  86. package/dist/index.umd.min.js +1 -1
  87. package/package.json +20 -4
@@ -2,9 +2,18 @@ import { LogLevel } from "../logger";
2
2
  import { IFormoEventContext, IFormoEventProperties, SignatureStatus, TransactionStatus } from "./events";
3
3
  import { EIP1193Provider } from "./provider";
4
4
  import { ReactNode } from "react";
5
+ import { SolanaOptions } from "../solana/types";
5
6
  export type Nullable<T> = T | null;
6
7
  export type ChainID = number;
7
8
  export type Address = string;
9
+ export type ChainNamespace = 'evm' | 'solana';
10
+ export interface ChainState {
11
+ address?: Address;
12
+ chainId?: ChainID;
13
+ }
14
+ export interface EvmChainState extends ChainState {
15
+ provider?: EIP1193Provider;
16
+ }
8
17
  export type ValidInputTypes = Uint8Array | bigint | string | number | boolean;
9
18
  export interface IFormoAnalytics {
10
19
  page(category?: string, name?: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
@@ -41,6 +50,8 @@ export interface IFormoAnalytics {
41
50
  to?: string;
42
51
  value?: string;
43
52
  transactionHash?: string;
53
+ function_name?: string;
54
+ function_args?: Record<string, unknown>;
44
55
  }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
45
56
  identify(params: {
46
57
  address: Address;
@@ -149,6 +160,14 @@ export interface Options {
149
160
  * @requires @tanstack/react-query@>=5.0.0 (for mutation tracking)
150
161
  */
151
162
  wagmi?: WagmiOptions;
163
+ /**
164
+ * Solana Wallet Adapter integration configuration
165
+ * When provided, the SDK will track Solana wallet events in addition to EVM wallet events
166
+ * This works alongside EIP-1193/Wagmi tracking - you can track both EVM and Solana wallets
167
+ * @requires @solana/wallet-adapter-base (optional peer dependency)
168
+ * @requires @solana/wallet-adapter-react (optional peer dependency, for React apps)
169
+ */
170
+ solana?: SolanaOptions;
152
171
  /**
153
172
  * Custom API host for sending events through your own domain to bypass ad blockers
154
173
  * - If not provided, events are sent directly to events.formo.so
@@ -172,6 +191,12 @@ export interface Options {
172
191
  * @example { queryParams: ["via"], pathPattern: "/r/([^/]+)" }
173
192
  */
174
193
  referral?: ReferralOptions;
194
+ /**
195
+ * Optional error handler for analytics network failures.
196
+ * Called when event flush fails after all retries.
197
+ * If not provided, errors are silently swallowed.
198
+ */
199
+ errorHandler?: (err: Error) => void;
175
200
  ready?: (formo: IFormoAnalytics) => void;
176
201
  }
177
202
  export interface FormoAnalyticsProviderProps {
@@ -44,9 +44,9 @@ export interface DetectAPIEvent {
44
44
  }
45
45
  export interface IdentifyAPIEvent {
46
46
  type: "identify";
47
- address: string;
48
- providerName: string;
49
- rdns: string;
47
+ address: Address;
48
+ providerName?: string;
49
+ rdns?: string;
50
50
  userId?: Nullable<string>;
51
51
  }
52
52
  export interface ChainAPIEvent {
@@ -59,10 +59,13 @@ export interface TransactionAPIEvent {
59
59
  status: TransactionStatus;
60
60
  chainId: ChainID;
61
61
  address: Address;
62
- data: string;
63
- to: string;
64
- value: string;
62
+ data?: string;
63
+ to?: string;
64
+ value?: string;
65
65
  transactionHash?: string;
66
+ function_name?: string;
67
+ function_args?: Record<string, unknown>;
68
+ builder_codes?: string;
66
69
  }
67
70
  export interface SignatureAPIEvent {
68
71
  type: "signature";
@@ -26,4 +26,25 @@ export declare const getValidAddress: (address: Address | null | undefined) => s
26
26
  */
27
27
  export declare const isBlockedAddress: (address: Address | null | undefined) => boolean;
28
28
  export declare const toChecksumAddress: (address: Address) => string;
29
+ /**
30
+ * Validates an EVM address and returns it in checksummed format.
31
+ * @param address The address to validate
32
+ * @returns The checksummed address or undefined if invalid
33
+ */
34
+ export declare const validateAndChecksumAddress: (address: string) => Address | undefined;
35
+ /**
36
+ * Validates an address for both EVM and Solana chains.
37
+ * For EVM addresses, returns checksummed format.
38
+ * For Solana addresses, returns the Base58 address as-is.
39
+ *
40
+ * When chainId is explicitly provided, validation is strict:
41
+ * - Solana chainId → only Solana validation
42
+ * - Non-Solana chainId → only EVM validation
43
+ * When chainId is omitted, EVM is tried first with Solana fallback.
44
+ *
45
+ * @param address The address to validate
46
+ * @param chainId Optional chain ID to determine address type
47
+ * @returns The validated address or undefined if invalid
48
+ */
49
+ export declare const validateAddress: (address: string, chainId?: number) => Address | undefined;
29
50
  //# sourceMappingURL=address.d.ts.map
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toChecksumAddress = exports.isBlockedAddress = exports.getValidAddress = exports.isValidAddress = void 0;
3
+ exports.validateAddress = exports.validateAndChecksumAddress = exports.toChecksumAddress = exports.isBlockedAddress = exports.getValidAddress = exports.isValidAddress = void 0;
4
4
  var keccak_js_1 = require("ethereum-cryptography/keccak.js");
5
5
  var utils_js_1 = require("ethereum-cryptography/utils.js");
6
6
  var validators_1 = require("../validators");
7
7
  var object_1 = require("../validators/object");
8
8
  var constants_1 = require("../constants");
9
+ var address_1 = require("../solana/address");
10
+ var types_1 = require("../solana/types");
9
11
  /**
10
12
  * Private helper function to validate and trim an address
11
13
  * @param address The address to validate and trim
@@ -85,4 +87,49 @@ var toChecksumAddress = function (address) {
85
87
  return checksumAddress;
86
88
  };
87
89
  exports.toChecksumAddress = toChecksumAddress;
90
+ /**
91
+ * Validates an EVM address and returns it in checksummed format.
92
+ * @param address The address to validate
93
+ * @returns The checksummed address or undefined if invalid
94
+ */
95
+ var validateAndChecksumAddress = function (address) {
96
+ var validAddress = (0, exports.getValidAddress)(address);
97
+ return validAddress ? (0, exports.toChecksumAddress)(validAddress) : undefined;
98
+ };
99
+ exports.validateAndChecksumAddress = validateAndChecksumAddress;
100
+ /**
101
+ * Validates an address for both EVM and Solana chains.
102
+ * For EVM addresses, returns checksummed format.
103
+ * For Solana addresses, returns the Base58 address as-is.
104
+ *
105
+ * When chainId is explicitly provided, validation is strict:
106
+ * - Solana chainId → only Solana validation
107
+ * - Non-Solana chainId → only EVM validation
108
+ * When chainId is omitted, EVM is tried first with Solana fallback.
109
+ *
110
+ * @param address The address to validate
111
+ * @param chainId Optional chain ID to determine address type
112
+ * @returns The validated address or undefined if invalid
113
+ */
114
+ var validateAddress = function (address, chainId) {
115
+ var solanaChainIds = Object.values(types_1.SOLANA_CHAIN_IDS);
116
+ // Explicit Solana chainId → validate ONLY as Solana
117
+ if (chainId !== undefined && chainId !== null && solanaChainIds.includes(chainId)) {
118
+ return (0, address_1.getValidSolanaAddress)(address) || undefined;
119
+ }
120
+ // Explicit non-Solana chainId → validate ONLY as EVM
121
+ if (chainId !== undefined && chainId !== null) {
122
+ return (0, exports.validateAndChecksumAddress)(address);
123
+ }
124
+ // No chainId → try EVM first, then Solana fallback
125
+ var validEvmAddress = (0, exports.validateAndChecksumAddress)(address);
126
+ if (validEvmAddress) {
127
+ return validEvmAddress;
128
+ }
129
+ if ((0, address_1.isSolanaAddress)(address)) {
130
+ return (0, address_1.getValidSolanaAddress)(address) || undefined;
131
+ }
132
+ return undefined;
133
+ };
134
+ exports.validateAddress = validateAddress;
88
135
  //# sourceMappingURL=address.js.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ERC-8021 Builder Code Extraction
3
+ *
4
+ * Extracts builder codes from transaction calldata by parsing the ERC-8021
5
+ * data suffix. The suffix is appended to the end of calldata and parsed
6
+ * backwards:
7
+ *
8
+ * [original calldata] [schemaData] [schemaId (1 byte)] [ercMarker (16 bytes)]
9
+ *
10
+ * Schema 0 (canonical registry):
11
+ * [codes (variable ASCII)] [codesLength (1 byte)] [schemaId 0x00] [ercMarker]
12
+ *
13
+ * Schema 1 (custom registry):
14
+ * [registryAddress (20 bytes)] [chainId (variable)] [chainIdLength (1 byte)]
15
+ * [codes (variable ASCII)] [codesLength (1 byte)] [schemaId 0x01] [ercMarker]
16
+ *
17
+ * - ercMarker: 0x80218021802180218021802180218021 (16 bytes)
18
+ * - codes: ASCII-encoded entity codes delimited by 0x2C (comma)
19
+ *
20
+ * @see https://docs.base.org/base-chain/builder-codes/builder-codes
21
+ * @see https://www.erc8021.com/
22
+ */
23
+ /**
24
+ * Extract builder codes from transaction calldata by parsing the ERC-8021 suffix.
25
+ *
26
+ * @param data - The transaction calldata hex string (with or without 0x prefix)
27
+ * @returns A comma-separated string of builder codes (e.g. "uniswap,base"), or undefined if no valid ERC-8021 suffix is found
28
+ */
29
+ export declare function extractBuilderCodes(data: string | undefined | null): string | undefined;
30
+ //# sourceMappingURL=builderCode.d.ts.map
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * ERC-8021 Builder Code Extraction
4
+ *
5
+ * Extracts builder codes from transaction calldata by parsing the ERC-8021
6
+ * data suffix. The suffix is appended to the end of calldata and parsed
7
+ * backwards:
8
+ *
9
+ * [original calldata] [schemaData] [schemaId (1 byte)] [ercMarker (16 bytes)]
10
+ *
11
+ * Schema 0 (canonical registry):
12
+ * [codes (variable ASCII)] [codesLength (1 byte)] [schemaId 0x00] [ercMarker]
13
+ *
14
+ * Schema 1 (custom registry):
15
+ * [registryAddress (20 bytes)] [chainId (variable)] [chainIdLength (1 byte)]
16
+ * [codes (variable ASCII)] [codesLength (1 byte)] [schemaId 0x01] [ercMarker]
17
+ *
18
+ * - ercMarker: 0x80218021802180218021802180218021 (16 bytes)
19
+ * - codes: ASCII-encoded entity codes delimited by 0x2C (comma)
20
+ *
21
+ * @see https://docs.base.org/base-chain/builder-codes/builder-codes
22
+ * @see https://www.erc8021.com/
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.extractBuilderCodes = extractBuilderCodes;
26
+ /** The 16-byte ERC-8021 marker appended at the very end of calldata */
27
+ var ERC_MARKER = "80218021802180218021802180218021";
28
+ /** Length of the ERC marker in hex characters (16 bytes = 32 hex chars) */
29
+ var ERC_MARKER_HEX_LENGTH = 32;
30
+ /** Supported schema IDs */
31
+ var SCHEMA_ID_CANONICAL = "00";
32
+ var SCHEMA_ID_CUSTOM_REGISTRY = "01";
33
+ /** Comma delimiter (0x2C) used to separate multiple codes */
34
+ var COMMA_BYTE = 0x2c;
35
+ /**
36
+ * Decode the codes field from a hex string into a comma-separated string.
37
+ * Validates that all bytes are printable ASCII (0x20–0x7E).
38
+ *
39
+ * @param codesHex - Hex string of the codes field
40
+ * @returns Comma-separated builder codes string, or undefined if invalid
41
+ */
42
+ function decodeCodes(codesHex) {
43
+ var bytes = [];
44
+ for (var i = 0; i < codesHex.length; i += 2) {
45
+ var byte = parseInt(codesHex.slice(i, i + 2), 16);
46
+ // Reject NaN (invalid hex), non-printable or non-ASCII bytes
47
+ if (isNaN(byte) || byte < 0x20 || byte > 0x7e) {
48
+ return undefined;
49
+ }
50
+ bytes.push(byte);
51
+ }
52
+ // Split on comma delimiter and decode each code as ASCII
53
+ var codes = [];
54
+ var current = [];
55
+ for (var _i = 0, bytes_1 = bytes; _i < bytes_1.length; _i++) {
56
+ var byte = bytes_1[_i];
57
+ if (byte === COMMA_BYTE) {
58
+ if (current.length > 0) {
59
+ codes.push(String.fromCharCode.apply(String, current));
60
+ current = [];
61
+ }
62
+ }
63
+ else {
64
+ current.push(byte);
65
+ }
66
+ }
67
+ // Push the last code segment
68
+ if (current.length > 0) {
69
+ codes.push(String.fromCharCode.apply(String, current));
70
+ }
71
+ return codes.length > 0 ? codes.join(",") : undefined;
72
+ }
73
+ /**
74
+ * Read codesLength and codes from the hex string ending at the given position.
75
+ *
76
+ * @param hex - Full hex string (lowercase, no 0x prefix)
77
+ * @param endPos - Hex char position where codesLength byte ends (i.e. start of schemaId)
78
+ * @returns Object with decoded codes string and the hex char position where codes start, or undefined
79
+ */
80
+ function readCodes(hex, endPos) {
81
+ // Read codesLength (1 byte before endPos)
82
+ var codesLengthStart = endPos - 2;
83
+ if (codesLengthStart < 0) {
84
+ return undefined;
85
+ }
86
+ var codesLength = parseInt(hex.slice(codesLengthStart, endPos), 16);
87
+ if (codesLength === 0 || isNaN(codesLength)) {
88
+ return undefined;
89
+ }
90
+ // Read the codes field
91
+ var codesHexLength = codesLength * 2;
92
+ var codesStart = codesLengthStart - codesHexLength;
93
+ if (codesStart < 0) {
94
+ return undefined;
95
+ }
96
+ var codesHex = hex.slice(codesStart, codesLengthStart);
97
+ var codes = decodeCodes(codesHex);
98
+ if (!codes) {
99
+ return undefined;
100
+ }
101
+ return { codes: codes, codesStart: codesStart };
102
+ }
103
+ /**
104
+ * Extract builder codes from transaction calldata by parsing the ERC-8021 suffix.
105
+ *
106
+ * @param data - The transaction calldata hex string (with or without 0x prefix)
107
+ * @returns A comma-separated string of builder codes (e.g. "uniswap,base"), or undefined if no valid ERC-8021 suffix is found
108
+ */
109
+ function extractBuilderCodes(data) {
110
+ if (!data || typeof data !== "string") {
111
+ return undefined;
112
+ }
113
+ // Normalize: remove 0x prefix and work with lowercase hex
114
+ var hex = data.startsWith("0x") || data.startsWith("0X")
115
+ ? data.slice(2).toLowerCase()
116
+ : data.toLowerCase();
117
+ // Minimum suffix: 1+ byte codes + 1 byte codesLength + 1 byte schemaId + 16 bytes marker = 19 bytes = 38 hex chars
118
+ if (hex.length < 38) {
119
+ return undefined;
120
+ }
121
+ // Step 1: Check last 16 bytes for ERC marker
122
+ var markerStart = hex.length - ERC_MARKER_HEX_LENGTH;
123
+ var marker = hex.slice(markerStart);
124
+ if (marker !== ERC_MARKER) {
125
+ return undefined;
126
+ }
127
+ // Step 2: Read schemaId (1 byte before the marker)
128
+ var schemaIdStart = markerStart - 2;
129
+ if (schemaIdStart < 0) {
130
+ return undefined;
131
+ }
132
+ var schemaId = hex.slice(schemaIdStart, markerStart);
133
+ // Step 3: Parse based on schemaId
134
+ if (schemaId === SCHEMA_ID_CANONICAL || schemaId === SCHEMA_ID_CUSTOM_REGISTRY) {
135
+ // Both Schema 0 and Schema 1 have codes in the same position
136
+ // (immediately before schemaId when parsing backwards)
137
+ var result = readCodes(hex, schemaIdStart);
138
+ return result === null || result === void 0 ? void 0 : result.codes;
139
+ }
140
+ // Unknown schema - cannot parse
141
+ return undefined;
142
+ }
143
+ //# sourceMappingURL=builderCode.js.map
@@ -1,5 +1,6 @@
1
1
  export * from "./address";
2
2
  export * from "./base";
3
+ export * from "./builderCode";
3
4
  export * from "./converter";
4
5
  export * from "./generate";
5
6
  export * from "./hash";
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./address"), exports);
18
18
  __exportStar(require("./base"), exports);
19
+ __exportStar(require("./builderCode"), exports);
19
20
  __exportStar(require("./converter"), exports);
20
21
  __exportStar(require("./generate"), exports);
21
22
  __exportStar(require("./hash"), exports);
@@ -1,2 +1,2 @@
1
- export declare const version = "1.26.0";
1
+ export declare const version = "1.28.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
4
  // This file is auto-generated by scripts/update-version.js during npm version
5
5
  // Do not edit manually - it will be overwritten
6
- exports.version = '1.26.0';
6
+ exports.version = '1.28.0';
7
7
  //# sourceMappingURL=version.js.map
@@ -18,6 +18,16 @@ export declare class WagmiEventHandler {
18
18
  * Key format: `${mutationId}:${status}`
19
19
  */
20
20
  private processedMutations;
21
+ /**
22
+ * Track processed query states to prevent duplicate event emissions
23
+ * Key format: `${queryHash}:${status}`
24
+ */
25
+ private processedQueries;
26
+ /**
27
+ * Store transaction details from BROADCASTED events for use in CONFIRMED/REVERTED
28
+ * Key: transactionHash, Value: transaction details including the original sender address
29
+ */
30
+ private pendingTransactions;
21
31
  constructor(formoAnalytics: FormoAnalytics, wagmiConfig: WagmiConfig, queryClient?: QueryClient);
22
32
  /**
23
33
  * Set up listeners for wallet connection, disconnection, and chain changes
@@ -35,6 +45,20 @@ export declare class WagmiEventHandler {
35
45
  * Set up mutation tracking for signatures and transactions
36
46
  */
37
47
  private setupMutationTracking;
48
+ /**
49
+ * Set up query tracking for transaction confirmations
50
+ * Listens for waitForTransactionReceipt queries to detect CONFIRMED status
51
+ */
52
+ private setupQueryTracking;
53
+ /**
54
+ * Handle query cache events (transaction confirmations)
55
+ */
56
+ private handleQueryEvent;
57
+ /**
58
+ * Handle waitForTransactionReceipt query completion
59
+ * Emits CONFIRMED or REVERTED transaction status
60
+ */
61
+ private handleTransactionReceiptQuery;
38
62
  /**
39
63
  * Handle mutation cache events (signatures, transactions)
40
64
  */