@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
@@ -1,9 +1,15 @@
1
1
  import { EIP6963ProviderDetail } from "mipd";
2
2
  import { Address, ChainID, Config, EIP1193Provider, IFormoAnalytics, IFormoEventContext, IFormoEventProperties, Options, SignatureStatus, TransactionStatus } from "./types";
3
+ import { SolanaManager } from "./solana/SolanaManager";
3
4
  export declare class FormoAnalytics implements IFormoAnalytics {
4
5
  readonly writeKey: string;
5
6
  options: Options;
6
- private _provider?;
7
+ private _chainState;
8
+ private _activeNamespace?;
9
+ private get _provider();
10
+ private set _provider(value);
11
+ private get _evmAddress();
12
+ private get _evmChainId();
7
13
  private _providerListenersMap;
8
14
  private session;
9
15
  private eventManager;
@@ -29,6 +35,11 @@ export declare class FormoAnalytics implements IFormoAnalytics {
29
35
  * Only initialized when options.wagmi is provided
30
36
  */
31
37
  private wagmiHandler?;
38
+ /**
39
+ * Solana integration manager for tracking Solana wallet events.
40
+ * Only initialized when options.solana is provided or via formo.solana.
41
+ */
42
+ private solanaManager?;
32
43
  /**
33
44
  * Flag indicating if Wagmi mode is enabled
34
45
  * When true, EIP-1193 provider wrapping is skipped
@@ -139,7 +150,7 @@ export declare class FormoAnalytics implements IFormoAnalytics {
139
150
  * @param {(...args: unknown[]) => void} callback
140
151
  * @returns {Promise<void>}
141
152
  */
142
- transaction({ status, chainId, address, data, to, value, transactionHash, }: {
153
+ transaction({ status, chainId, address, data, to, value, transactionHash, function_name, function_args, builder_codes, }: {
143
154
  status: TransactionStatus;
144
155
  chainId: ChainID;
145
156
  address: Address;
@@ -147,20 +158,40 @@ export declare class FormoAnalytics implements IFormoAnalytics {
147
158
  to?: string;
148
159
  value?: string;
149
160
  transactionHash?: string;
161
+ function_name?: string;
162
+ function_args?: Record<string, unknown>;
163
+ builder_codes?: string;
150
164
  }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
151
165
  /**
152
166
  * Emits an identify event with current wallet address and provider info.
153
- * @param {string} params.address
154
- * @param {string} params.userId
155
- * @param {string} params.rdns
156
- * @param {string} params.providerName
157
- * @param {IFormoEventProperties} properties
167
+ *
168
+ * @param {string} params.address - Wallet address
169
+ * @param {string} params.userId - External user ID
170
+ * @param {string} params.rdns - Provider reverse domain name
171
+ * @param {string} params.providerName - Provider display name
172
+ * @param {IFormoEventProperties} properties - Additional properties to include with the identify event
158
173
  * @param {IFormoEventContext} context
159
174
  * @param {(...args: unknown[]) => void} callback
160
175
  * @returns {Promise<void>}
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * // Basic identify
180
+ * formo.identify({ address: '0x...', userId: 'user123' });
181
+ *
182
+ * // With Privy user
183
+ * import { parsePrivyProperties } from '@formo/analytics';
184
+ * const { user } = usePrivy();
185
+ * if (user) {
186
+ * const { properties, wallets } = parsePrivyProperties(user);
187
+ * for (const wallet of wallets) {
188
+ * formo.identify({ address: wallet.address, userId: user.id }, properties);
189
+ * }
190
+ * }
191
+ * ```
161
192
  */
162
193
  identify(params?: {
163
- address?: Address;
194
+ address: Address;
164
195
  providerName?: string;
165
196
  userId?: string;
166
197
  rdns?: string;
@@ -256,6 +287,19 @@ export declare class FormoAnalytics implements IFormoAnalytics {
256
287
  get providers(): readonly EIP6963ProviderDetail[];
257
288
  private detectWallets;
258
289
  get provider(): EIP1193Provider | undefined;
290
+ /**
291
+ * Access the Solana integration manager.
292
+ * Lazily creates one if not already initialized.
293
+ *
294
+ * @example
295
+ * ```tsx
296
+ * formo.solana.setWallet(wallet);
297
+ * formo.solana.setConnection(connection);
298
+ * formo.solana.setCluster("devnet");
299
+ * formo.solana.syncWalletState();
300
+ * ```
301
+ */
302
+ get solana(): SolanaManager;
259
303
  private getAddress;
260
304
  private getAccounts;
261
305
  private getCurrentChainId;
@@ -296,11 +340,26 @@ export declare class FormoAnalytics implements IFormoAnalytics {
296
340
  */
297
341
  private handleProviderMismatch;
298
342
  /**
299
- * Helper method to validate and checksum an address
300
- * @param address The address to validate and checksum
301
- * @returns The checksummed address or undefined if invalid
343
+ * Determine which namespace a chainId belongs to.
344
+ */
345
+ private getNamespace;
346
+ /**
347
+ * Update per-chain state and sync the derived currentAddress/currentChainId.
348
+ * Accepts either a namespace string ('evm'/'solana') or a chainId number
349
+ * to resolve the namespace automatically. When a chainId number is passed,
350
+ * it is also stored as the namespace's chainId (unless explicitly overridden
351
+ * in the update object).
352
+ */
353
+ private setChainState;
354
+ /**
355
+ * Clear per-chain state for a given namespace (or chainId) and sync derived state.
356
+ */
357
+ private clearChainState;
358
+ /**
359
+ * Synchronize currentAddress/currentChainId from the active namespace.
360
+ * Last-connected-chain-wins: _activeNamespace takes precedence.
302
361
  */
303
- private validateAndChecksumAddress;
362
+ private syncDerivedState;
304
363
  /**
305
364
  * Helper method to clear the active provider state
306
365
  * Centralizes provider clearing logic for consistency