@formo/analytics 1.28.4 → 1.28.6

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 (45) hide show
  1. package/README.md +1 -2
  2. package/dist/cjs/src/FormoAnalytics.d.ts +7 -3
  3. package/dist/cjs/src/FormoAnalytics.js +24 -12
  4. package/dist/cjs/src/index.d.ts +3 -1
  5. package/dist/cjs/src/index.js +5 -1
  6. package/dist/cjs/src/solana/SolanaManager.d.ts +36 -11
  7. package/dist/cjs/src/solana/SolanaManager.js +47 -49
  8. package/dist/cjs/src/solana/SolanaStoreHandler.d.ts +88 -0
  9. package/dist/cjs/src/solana/SolanaStoreHandler.js +471 -0
  10. package/dist/cjs/src/solana/index.d.ts +8 -4
  11. package/dist/cjs/src/solana/index.js +10 -6
  12. package/dist/cjs/src/solana/storeTypes.d.ts +107 -0
  13. package/dist/cjs/src/solana/storeTypes.js +12 -0
  14. package/dist/cjs/src/solana/types.d.ts +23 -154
  15. package/dist/cjs/src/solana/types.js +4 -37
  16. package/dist/cjs/src/storage/StorageManager.d.ts +1 -0
  17. package/dist/cjs/src/storage/StorageManager.js +10 -2
  18. package/dist/cjs/src/types/base.d.ts +16 -5
  19. package/dist/cjs/src/version.d.ts +1 -1
  20. package/dist/cjs/src/version.js +1 -1
  21. package/dist/esm/src/FormoAnalytics.d.ts +7 -3
  22. package/dist/esm/src/FormoAnalytics.js +24 -12
  23. package/dist/esm/src/index.d.ts +3 -1
  24. package/dist/esm/src/index.js +1 -0
  25. package/dist/esm/src/solana/SolanaManager.d.ts +36 -11
  26. package/dist/esm/src/solana/SolanaManager.js +47 -49
  27. package/dist/esm/src/solana/SolanaStoreHandler.d.ts +88 -0
  28. package/dist/esm/src/solana/SolanaStoreHandler.js +468 -0
  29. package/dist/esm/src/solana/index.d.ts +8 -4
  30. package/dist/esm/src/solana/index.js +8 -4
  31. package/dist/esm/src/solana/storeTypes.d.ts +107 -0
  32. package/dist/esm/src/solana/storeTypes.js +11 -0
  33. package/dist/esm/src/solana/types.d.ts +23 -154
  34. package/dist/esm/src/solana/types.js +3 -34
  35. package/dist/esm/src/storage/StorageManager.d.ts +1 -0
  36. package/dist/esm/src/storage/StorageManager.js +10 -2
  37. package/dist/esm/src/types/base.d.ts +16 -5
  38. package/dist/esm/src/version.d.ts +1 -1
  39. package/dist/esm/src/version.js +1 -1
  40. package/dist/index.umd.min.js +1 -1
  41. package/package.json +5 -16
  42. package/dist/cjs/src/solana/SolanaAdapter.d.ts +0 -210
  43. package/dist/cjs/src/solana/SolanaAdapter.js +0 -988
  44. package/dist/esm/src/solana/SolanaAdapter.d.ts +0 -210
  45. package/dist/esm/src/solana/SolanaAdapter.js +0 -985
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Type definitions for framework-kit's zustand store integration.
3
+ *
4
+ * These types mirror the state shape of @solana-foundation/framework-kit's
5
+ * vanilla zustand store, allowing the SDK to subscribe to wallet and
6
+ * transaction state changes without wrapping any wallet methods.
7
+ *
8
+ * @see https://github.com/solana-foundation/framework-kit
9
+ */
10
+ /**
11
+ * The complete framework-kit client state shape.
12
+ * We only type the fields we subscribe to.
13
+ */
14
+ export interface SolanaClientState {
15
+ transactions: SolanaTransactionState;
16
+ wallet: SolanaWalletStatus;
17
+ cluster: SolanaClusterState;
18
+ lastUpdatedAt: number;
19
+ }
20
+ /**
21
+ * Transaction records keyed by signature.
22
+ */
23
+ export type SolanaTransactionState = Record<string, SolanaTransactionRecord>;
24
+ /**
25
+ * Individual transaction record in the store.
26
+ */
27
+ export interface SolanaTransactionRecord {
28
+ readonly error?: unknown;
29
+ readonly lastUpdatedAt: number;
30
+ readonly signature?: string;
31
+ readonly status: "idle" | "sending" | "waiting" | "confirmed" | "failed";
32
+ }
33
+ /**
34
+ * Wallet status — discriminated union.
35
+ */
36
+ export type SolanaWalletStatus = SolanaWalletDisconnected | SolanaWalletConnecting | SolanaWalletConnected | SolanaWalletError;
37
+ export interface SolanaWalletDisconnected {
38
+ readonly status: "disconnected";
39
+ }
40
+ export interface SolanaWalletConnecting {
41
+ readonly status: "connecting";
42
+ readonly connectorId: string;
43
+ readonly autoConnect?: boolean;
44
+ }
45
+ export interface SolanaWalletConnected {
46
+ readonly status: "connected";
47
+ readonly connectorId: string;
48
+ readonly session: SolanaWalletSession;
49
+ readonly autoConnect?: boolean;
50
+ }
51
+ export interface SolanaWalletError {
52
+ readonly status: "error";
53
+ readonly connectorId?: string;
54
+ readonly error: unknown;
55
+ readonly autoConnect?: boolean;
56
+ }
57
+ /**
58
+ * Wallet session — carries the connected wallet's capabilities and account.
59
+ */
60
+ export interface SolanaWalletSession {
61
+ readonly account: SolanaWalletAccount;
62
+ readonly connector: SolanaWalletConnectorMetadata;
63
+ disconnect(): Promise<void>;
64
+ }
65
+ export interface SolanaWalletAccount {
66
+ readonly address: string;
67
+ readonly label?: string;
68
+ readonly publicKey?: unknown;
69
+ }
70
+ export interface SolanaWalletConnectorMetadata {
71
+ readonly id: string;
72
+ readonly name: string;
73
+ readonly icon?: string;
74
+ }
75
+ /**
76
+ * Cluster state from the store.
77
+ */
78
+ export interface SolanaClusterState {
79
+ readonly endpoint: string;
80
+ readonly commitment?: string;
81
+ readonly status: "idle" | "connecting" | "ready" | "error";
82
+ }
83
+ /**
84
+ * The zustand vanilla store API that framework-kit exposes via `client.store`.
85
+ *
86
+ * Note: framework-kit's store uses vanilla zustand without the
87
+ * `subscribeWithSelector` middleware, so only the single-argument
88
+ * subscribe form (full-state listener) is supported.
89
+ */
90
+ export interface SolanaClientStore {
91
+ getState(): SolanaClientState;
92
+ /**
93
+ * Subscribe to all state changes.
94
+ */
95
+ subscribe(listener: (state: SolanaClientState, prevState: SolanaClientState) => void): () => void;
96
+ }
97
+ /**
98
+ * Options for configuring the store-based Solana integration.
99
+ */
100
+ export interface SolanaStoreOptions {
101
+ /**
102
+ * The framework-kit client store (client.store).
103
+ * This is a vanilla zustand store that tracks wallet, transaction, and cluster state.
104
+ */
105
+ store: SolanaClientStore;
106
+ }
107
+ //# sourceMappingURL=storeTypes.d.ts.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Type definitions for framework-kit's zustand store integration.
3
+ *
4
+ * These types mirror the state shape of @solana-foundation/framework-kit's
5
+ * vanilla zustand store, allowing the SDK to subscribe to wallet and
6
+ * transaction state changes without wrapping any wallet methods.
7
+ *
8
+ * @see https://github.com/solana-foundation/framework-kit
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=storeTypes.js.map
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Solana-specific type definitions for wallet event tracking
3
3
  *
4
- * These types provide TypeScript interfaces for Solana Wallet Adapter integration,
5
- * allowing the SDK to hook into Solana wallet events to track wallet interactions.
4
+ * Core types for the Solana integration: cluster mappings, chain ID utilities,
5
+ * and configuration options. Framework-kit store types are in storeTypes.ts.
6
6
  *
7
- * @see https://github.com/anza-xyz/wallet-adapter
7
+ * @see https://github.com/solana-foundation/framework-kit
8
8
  */
9
9
  /**
10
10
  * Solana cluster/network types
@@ -33,7 +33,7 @@ export declare const DEFAULT_SOLANA_CHAIN_ID: number;
33
33
  export declare function isSolanaChainId(chainId: number | undefined | null): boolean;
34
34
  /**
35
35
  * Solana PublicKey interface
36
- * Represents a Solana public key (32 bytes, Base58 encoded)
36
+ * Used by address validation utilities.
37
37
  */
38
38
  export interface SolanaPublicKey {
39
39
  toBase58(): string;
@@ -42,165 +42,34 @@ export interface SolanaPublicKey {
42
42
  equals(other: SolanaPublicKey): boolean;
43
43
  }
44
44
  /**
45
- * Solana transaction signature (64 bytes, Base58 encoded)
46
- */
47
- export type TransactionSignature = string;
48
- /**
49
- * Solana wallet adapter state
50
- */
51
- export type WalletAdapterState = "connected" | "disconnected" | "connecting" | "disconnecting";
52
- /**
53
- * Solana wallet adapter interface
54
- * Based on @solana/wallet-adapter-base WalletAdapter
55
- */
56
- export interface ISolanaAdapter {
57
- name: string;
58
- url: string;
59
- icon: string;
60
- readyState: WalletReadyState;
61
- publicKey: SolanaPublicKey | null;
62
- connecting: boolean;
63
- connected: boolean;
64
- connect(): Promise<void>;
65
- disconnect(): Promise<void>;
66
- sendTransaction?(transaction: SolanaTransaction, connection: SolanaConnection, options?: SendTransactionOptions): Promise<TransactionSignature>;
67
- signTransaction?(transaction: SolanaTransaction): Promise<SolanaTransaction>;
68
- signAllTransactions?(transactions: SolanaTransaction[]): Promise<SolanaTransaction[]>;
69
- signMessage?(message: Uint8Array): Promise<Uint8Array>;
70
- on(event: "connect", listener: (publicKey: SolanaPublicKey) => void): void;
71
- on(event: "disconnect", listener: () => void): void;
72
- on(event: "error", listener: (error: WalletError) => void): void;
73
- on(event: "readyStateChange", listener: (readyState: WalletReadyState) => void): void;
74
- off(event: string, listener: (...args: unknown[]) => void): void;
75
- removeAllListeners?(event?: string): void;
76
- }
77
- /**
78
- * Solana wallet ready state
79
- */
80
- export declare enum WalletReadyState {
81
- Installed = "Installed",
82
- NotDetected = "NotDetected",
83
- Loadable = "Loadable",
84
- Unsupported = "Unsupported"
85
- }
86
- /**
87
- * Solana wallet error
88
- */
89
- export interface WalletError extends Error {
90
- error?: unknown;
91
- }
92
- /**
93
- * Solana transaction interface (minimal)
94
- */
95
- export interface SolanaTransaction {
96
- signature?: Uint8Array;
97
- serialize(): Uint8Array;
98
- feePayer?: SolanaPublicKey;
99
- recentBlockhash?: string;
100
- }
101
- /**
102
- * Solana connection interface (minimal)
103
- */
104
- export interface SolanaConnection {
105
- rpcEndpoint: string;
106
- commitment?: string;
107
- getSignatureStatus?(signature: string): Promise<{
108
- value: SignatureStatus | null;
109
- }>;
110
- getSignatureStatuses?(signatures: string[]): Promise<{
111
- value: (SignatureStatus | null)[];
112
- }>;
113
- }
114
- /**
115
- * Solana signature status
116
- */
117
- export interface SignatureStatus {
118
- slot: number;
119
- confirmations: number | null;
120
- err: unknown | null;
121
- confirmationStatus?: "processed" | "confirmed" | "finalized";
122
- }
123
- /**
124
- * Send transaction options
125
- */
126
- export interface SendTransactionOptions {
127
- skipPreflight?: boolean;
128
- preflightCommitment?: string;
129
- maxRetries?: number;
130
- minContextSlot?: number;
131
- }
132
- /**
133
- * Wallet entry as returned by @solana/wallet-adapter-react useWallet().wallet
134
- * This is { adapter, readyState }, not a direct adapter.
135
- */
136
- export interface SolanaWalletEntry {
137
- adapter: ISolanaAdapter;
138
- readyState: WalletReadyState;
139
- }
140
- /**
141
- * @deprecated Use SolanaWalletEntry instead
142
- */
143
- export type SolanaWallet = SolanaWalletEntry;
144
- /**
145
- * Solana Wallet Context interface
146
- * Based on @solana/wallet-adapter-react useWallet hook
147
- * @see https://github.com/anza-xyz/wallet-adapter/blob/master/packages/core/react/src/useWallet.ts
45
+ * Unsubscribe function type
148
46
  */
149
- export interface SolanaWalletContext {
150
- autoConnect: boolean;
151
- wallets: SolanaWalletEntry[];
152
- wallet: SolanaWalletEntry | null;
153
- publicKey: SolanaPublicKey | null;
154
- connecting: boolean;
155
- connected: boolean;
156
- disconnecting: boolean;
157
- select(walletName: string | null): void;
158
- connect(): Promise<void>;
159
- disconnect(): Promise<void>;
160
- sendTransaction(transaction: SolanaTransaction, connection: SolanaConnection, options?: SendTransactionOptions): Promise<TransactionSignature>;
161
- signTransaction?(transaction: SolanaTransaction): Promise<SolanaTransaction>;
162
- signAllTransactions?(transactions: SolanaTransaction[]): Promise<SolanaTransaction[]>;
163
- signMessage?(message: Uint8Array): Promise<Uint8Array>;
164
- }
47
+ export type UnsubscribeFn = () => void;
165
48
  /**
166
49
  * Solana options for FormoAnalytics
167
50
  */
168
51
  export interface SolanaOptions {
169
52
  /**
170
- * The Solana wallet adapter instance or wallet context
171
- * Can be a single wallet adapter or the useWallet() context
172
- */
173
- wallet?: ISolanaAdapter | SolanaWalletContext;
174
- /**
175
- * The Solana connection for tracking transaction confirmations
53
+ * The framework-kit client store (client.store) for automatic event tracking.
54
+ * When provided, wallet connect/disconnect and transaction events are tracked
55
+ * automatically by subscribing to zustand store state changes.
56
+ *
57
+ * This is the recommended approach for apps using @solana-foundation/framework-kit.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * import { createClient } from '@solana-foundation/framework-kit';
62
+ * const client = createClient({ endpoint, walletConnectors: autoDiscover() });
63
+ * const formo = await Formo.init(writeKey, { solana: { store: client.store } });
64
+ * ```
176
65
  */
177
- connection?: SolanaConnection;
66
+ store?: import("./storeTypes").SolanaClientStore;
178
67
  /**
179
- * The Solana cluster/network
180
- * @default "mainnet-beta"
68
+ * The Solana cluster/network.
69
+ * Usually auto-detected from the store's endpoint URL.
70
+ * Only needed for custom RPC URLs that don't contain a recognizable cluster name.
71
+ * @default auto-detected, or "mainnet-beta" if detection fails
181
72
  */
182
73
  cluster?: SolanaCluster;
183
74
  }
184
- /**
185
- * Internal connection state for Solana event handler.
186
- * Tracks the last known wallet connection for disconnect event payloads
187
- * and provides a reentrancy guard for concurrent event handling.
188
- */
189
- export interface SolanaConnectionState {
190
- lastAddress?: string;
191
- lastChainId?: number;
192
- isProcessing: boolean;
193
- }
194
- /**
195
- * Unsubscribe function type
196
- */
197
- export type UnsubscribeFn = () => void;
198
- /**
199
- * Check if an object is a SolanaWalletContext (has wallets array)
200
- */
201
- export declare function isSolanaWalletContext(obj: ISolanaAdapter | SolanaWalletContext | undefined | null): obj is SolanaWalletContext;
202
- /**
203
- * Check if an object is a ISolanaAdapter
204
- */
205
- export declare function isSolanaAdapter(obj: ISolanaAdapter | SolanaWalletContext | undefined | null): obj is ISolanaAdapter;
206
75
  //# sourceMappingURL=types.d.ts.map
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Solana-specific type definitions for wallet event tracking
3
3
  *
4
- * These types provide TypeScript interfaces for Solana Wallet Adapter integration,
5
- * allowing the SDK to hook into Solana wallet events to track wallet interactions.
4
+ * Core types for the Solana integration: cluster mappings, chain ID utilities,
5
+ * and configuration options. Framework-kit store types are in storeTypes.ts.
6
6
  *
7
- * @see https://github.com/anza-xyz/wallet-adapter
7
+ * @see https://github.com/solana-foundation/framework-kit
8
8
  */
9
9
  /**
10
10
  * Mapping of Solana clusters to numeric chain IDs for consistency with EVM events
@@ -40,35 +40,4 @@ export function isSolanaChainId(chainId) {
40
40
  return false;
41
41
  return Object.values(SOLANA_CHAIN_IDS).includes(chainId);
42
42
  }
43
- /**
44
- * Solana wallet ready state
45
- */
46
- export var WalletReadyState;
47
- (function (WalletReadyState) {
48
- WalletReadyState["Installed"] = "Installed";
49
- WalletReadyState["NotDetected"] = "NotDetected";
50
- WalletReadyState["Loadable"] = "Loadable";
51
- WalletReadyState["Unsupported"] = "Unsupported";
52
- })(WalletReadyState || (WalletReadyState = {}));
53
- /**
54
- * Check if an object is a SolanaWalletContext (has wallets array)
55
- */
56
- export function isSolanaWalletContext(obj) {
57
- return (obj !== null &&
58
- obj !== undefined &&
59
- typeof obj === "object" &&
60
- "wallets" in obj &&
61
- Array.isArray(obj.wallets));
62
- }
63
- /**
64
- * Check if an object is a ISolanaAdapter
65
- */
66
- export function isSolanaAdapter(obj) {
67
- return (obj !== null &&
68
- obj !== undefined &&
69
- typeof obj === "object" &&
70
- "name" in obj &&
71
- "connect" in obj &&
72
- !("wallets" in obj));
73
- }
74
43
  //# sourceMappingURL=types.js.map
@@ -5,5 +5,6 @@ export declare class StorageManager {
5
5
  constructor(writeKey: string);
6
6
  getStorage(type: StorageType): IStorage;
7
7
  private createStorage;
8
+ private getWebStorage;
8
9
  }
9
10
  //# sourceMappingURL=StorageManager.d.ts.map
@@ -41,14 +41,22 @@ var StorageManager = /** @class */ (function () {
41
41
  case "cookieStorage":
42
42
  return new CookieStorage(this.writeKey);
43
43
  case "localStorage":
44
- return new WebStorage(this.writeKey, localStorage);
45
44
  case "sessionStorage":
46
- return new WebStorage(this.writeKey, sessionStorage);
45
+ return new WebStorage(this.writeKey, this.getWebStorage(type));
47
46
  case "memoryStorage":
48
47
  default:
49
48
  return new MemoryStorage(this.writeKey);
50
49
  }
51
50
  };
51
+ StorageManager.prototype.getWebStorage = function (type) {
52
+ try {
53
+ var storage = type === "localStorage" ? localStorage : sessionStorage;
54
+ return storage !== null && storage !== void 0 ? storage : null;
55
+ }
56
+ catch (_a) {
57
+ return null;
58
+ }
59
+ };
52
60
  return StorageManager;
53
61
  }());
54
62
  export { StorageManager };
@@ -164,6 +164,14 @@ export interface Options {
164
164
  * @default true
165
165
  */
166
166
  autocapture?: boolean | AutocaptureOptions;
167
+ /**
168
+ * EVM provider tracking.
169
+ * Set to `false` to disable all EVM provider detection and tracking
170
+ * (EIP-1193, EIP-6963, window.ethereum). Useful for Solana-only apps
171
+ * that don't need EVM wallet event capture.
172
+ * @default true
173
+ */
174
+ evm?: boolean;
167
175
  /**
168
176
  * Wagmi integration configuration
169
177
  * When provided, the SDK will hook into Wagmi's event system instead of wrapping EIP-1193 providers
@@ -173,11 +181,14 @@ export interface Options {
173
181
  */
174
182
  wagmi?: WagmiOptions;
175
183
  /**
176
- * Solana Wallet Adapter integration configuration
177
- * When provided, the SDK will track Solana wallet events in addition to EVM wallet events
178
- * This works alongside EIP-1193/Wagmi tracking - you can track both EVM and Solana wallets
179
- * @requires @solana/wallet-adapter-base (optional peer dependency)
180
- * @requires @solana/wallet-adapter-react (optional peer dependency, for React apps)
184
+ * Solana integration configuration.
185
+ * Pass `store: client.store` from framework-kit for automatic tracking of
186
+ * wallet connect/disconnect and transaction events.
187
+ *
188
+ * For signMessage/signTransaction, use formo.signature() directly
189
+ * (framework-kit doesn't track these in the store).
190
+ *
191
+ * @see https://github.com/solana-foundation/framework-kit
181
192
  */
182
193
  solana?: SolanaOptions;
183
194
  /**
@@ -1,2 +1,2 @@
1
- export declare const version = "1.28.4";
1
+ export declare const version = "1.28.6";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // This file is auto-generated by scripts/update-version.js during npm version
2
2
  // Do not edit manually - it will be overwritten
3
- export var version = '1.28.4';
3
+ export var version = '1.28.6';
4
4
  //# sourceMappingURL=version.js.map