@formo/analytics 1.27.0 → 1.28.1

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 (74) hide show
  1. package/dist/cjs/src/FormoAnalytics.d.ts +69 -12
  2. package/dist/cjs/src/FormoAnalytics.js +273 -147
  3. package/dist/cjs/src/event/EventFactory.d.ts +10 -2
  4. package/dist/cjs/src/event/EventFactory.js +32 -21
  5. package/dist/cjs/src/index.d.ts +4 -0
  6. package/dist/cjs/src/index.js +6 -0
  7. package/dist/cjs/src/privy/index.d.ts +9 -0
  8. package/dist/cjs/src/privy/index.js +12 -0
  9. package/dist/cjs/src/privy/types.d.ts +176 -0
  10. package/dist/cjs/src/privy/types.js +12 -0
  11. package/dist/cjs/src/privy/utils.d.ts +32 -0
  12. package/dist/cjs/src/privy/utils.js +191 -0
  13. package/dist/cjs/src/session/index.js +2 -1
  14. package/dist/cjs/src/solana/SolanaAdapter.d.ts +211 -0
  15. package/dist/cjs/src/solana/SolanaAdapter.js +975 -0
  16. package/dist/cjs/src/solana/SolanaManager.d.ts +24 -0
  17. package/dist/cjs/src/solana/SolanaManager.js +80 -0
  18. package/dist/cjs/src/solana/address.d.ts +72 -0
  19. package/dist/cjs/src/solana/address.js +176 -0
  20. package/dist/cjs/src/solana/index.d.ts +13 -0
  21. package/dist/cjs/src/solana/index.js +32 -0
  22. package/dist/cjs/src/solana/types.d.ts +206 -0
  23. package/dist/cjs/src/solana/types.js +80 -0
  24. package/dist/cjs/src/types/base.d.ts +17 -0
  25. package/dist/cjs/src/types/events.d.ts +4 -3
  26. package/dist/cjs/src/utils/address.d.ts +21 -0
  27. package/dist/cjs/src/utils/address.js +48 -1
  28. package/dist/cjs/src/utils/builderCode.d.ts +30 -0
  29. package/dist/cjs/src/utils/builderCode.js +143 -0
  30. package/dist/cjs/src/utils/index.d.ts +1 -0
  31. package/dist/cjs/src/utils/index.js +1 -0
  32. package/dist/cjs/src/version.d.ts +1 -1
  33. package/dist/cjs/src/version.js +1 -1
  34. package/dist/cjs/src/wagmi/WagmiEventHandler.js +13 -15
  35. package/dist/cjs/src/wagmi/utils.d.ts +5 -0
  36. package/dist/cjs/src/wagmi/utils.js +20 -0
  37. package/dist/esm/src/FormoAnalytics.d.ts +69 -12
  38. package/dist/esm/src/FormoAnalytics.js +274 -148
  39. package/dist/esm/src/event/EventFactory.d.ts +10 -2
  40. package/dist/esm/src/event/EventFactory.js +34 -23
  41. package/dist/esm/src/index.d.ts +4 -0
  42. package/dist/esm/src/index.js +3 -0
  43. package/dist/esm/src/privy/index.d.ts +9 -0
  44. package/dist/esm/src/privy/index.js +8 -0
  45. package/dist/esm/src/privy/types.d.ts +176 -0
  46. package/dist/esm/src/privy/types.js +11 -0
  47. package/dist/esm/src/privy/utils.d.ts +32 -0
  48. package/dist/esm/src/privy/utils.js +188 -0
  49. package/dist/esm/src/session/index.js +2 -1
  50. package/dist/esm/src/solana/SolanaAdapter.d.ts +211 -0
  51. package/dist/esm/src/solana/SolanaAdapter.js +972 -0
  52. package/dist/esm/src/solana/SolanaManager.d.ts +24 -0
  53. package/dist/esm/src/solana/SolanaManager.js +77 -0
  54. package/dist/esm/src/solana/address.d.ts +72 -0
  55. package/dist/esm/src/solana/address.js +167 -0
  56. package/dist/esm/src/solana/index.d.ts +13 -0
  57. package/dist/esm/src/solana/index.js +13 -0
  58. package/dist/esm/src/solana/types.d.ts +206 -0
  59. package/dist/esm/src/solana/types.js +74 -0
  60. package/dist/esm/src/types/base.d.ts +17 -0
  61. package/dist/esm/src/types/events.d.ts +4 -3
  62. package/dist/esm/src/utils/address.d.ts +21 -0
  63. package/dist/esm/src/utils/address.js +45 -0
  64. package/dist/esm/src/utils/builderCode.d.ts +30 -0
  65. package/dist/esm/src/utils/builderCode.js +140 -0
  66. package/dist/esm/src/utils/index.d.ts +1 -0
  67. package/dist/esm/src/utils/index.js +1 -0
  68. package/dist/esm/src/version.d.ts +1 -1
  69. package/dist/esm/src/version.js +1 -1
  70. package/dist/esm/src/wagmi/WagmiEventHandler.js +14 -16
  71. package/dist/esm/src/wagmi/utils.d.ts +5 -0
  72. package/dist/esm/src/wagmi/utils.js +19 -0
  73. package/dist/index.umd.min.js +1 -1
  74. package/package.json +15 -3
@@ -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, function_name, function_args, }: {
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;
@@ -149,20 +160,38 @@ export declare class FormoAnalytics implements IFormoAnalytics {
149
160
  transactionHash?: string;
150
161
  function_name?: string;
151
162
  function_args?: Record<string, unknown>;
163
+ builder_codes?: string;
152
164
  }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
153
165
  /**
154
166
  * Emits an identify event with current wallet address and provider info.
155
- * @param {string} params.address
156
- * @param {string} params.userId
157
- * @param {string} params.rdns
158
- * @param {string} params.providerName
159
- * @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
160
173
  * @param {IFormoEventContext} context
161
174
  * @param {(...args: unknown[]) => void} callback
162
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
+ * ```
163
192
  */
164
193
  identify(params?: {
165
- address?: Address;
194
+ address: Address;
166
195
  providerName?: string;
167
196
  userId?: string;
168
197
  rdns?: string;
@@ -258,6 +287,19 @@ export declare class FormoAnalytics implements IFormoAnalytics {
258
287
  get providers(): readonly EIP6963ProviderDetail[];
259
288
  private detectWallets;
260
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;
261
303
  private getAddress;
262
304
  private getAccounts;
263
305
  private getCurrentChainId;
@@ -298,11 +340,26 @@ export declare class FormoAnalytics implements IFormoAnalytics {
298
340
  */
299
341
  private handleProviderMismatch;
300
342
  /**
301
- * Helper method to validate and checksum an address
302
- * @param address The address to validate and checksum
303
- * @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.
304
361
  */
305
- private validateAndChecksumAddress;
362
+ private syncDerivedState;
306
363
  /**
307
364
  * Helper method to clear the active provider state
308
365
  * Centralizes provider clearing logic for consistency