@solana/connector 0.0.0 → 0.1.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 (47) hide show
  1. package/README.md +1460 -0
  2. package/dist/chunk-52WUWW5R.mjs +2533 -0
  3. package/dist/chunk-52WUWW5R.mjs.map +1 -0
  4. package/dist/chunk-5NSUFMCB.js +393 -0
  5. package/dist/chunk-5NSUFMCB.js.map +1 -0
  6. package/dist/chunk-5ZUVZZWU.mjs +180 -0
  7. package/dist/chunk-5ZUVZZWU.mjs.map +1 -0
  8. package/dist/chunk-7TADXRFD.mjs +298 -0
  9. package/dist/chunk-7TADXRFD.mjs.map +1 -0
  10. package/dist/chunk-ACFSCMUI.mjs +359 -0
  11. package/dist/chunk-ACFSCMUI.mjs.map +1 -0
  12. package/dist/chunk-SGAIPK7Q.js +314 -0
  13. package/dist/chunk-SGAIPK7Q.js.map +1 -0
  14. package/dist/chunk-SMUUAKC3.js +186 -0
  15. package/dist/chunk-SMUUAKC3.js.map +1 -0
  16. package/dist/chunk-ZLPQUOFK.js +2594 -0
  17. package/dist/chunk-ZLPQUOFK.js.map +1 -0
  18. package/dist/compat.d.mts +106 -0
  19. package/dist/compat.d.ts +106 -0
  20. package/dist/compat.js +98 -0
  21. package/dist/compat.js.map +1 -0
  22. package/dist/compat.mjs +94 -0
  23. package/dist/compat.mjs.map +1 -0
  24. package/dist/headless.d.mts +400 -0
  25. package/dist/headless.d.ts +400 -0
  26. package/dist/headless.js +325 -0
  27. package/dist/headless.js.map +1 -0
  28. package/dist/headless.mjs +4 -0
  29. package/dist/headless.mjs.map +1 -0
  30. package/dist/index.d.mts +10 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.js +382 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/index.mjs +5 -0
  35. package/dist/index.mjs.map +1 -0
  36. package/dist/react.d.mts +645 -0
  37. package/dist/react.d.ts +645 -0
  38. package/dist/react.js +65 -0
  39. package/dist/react.js.map +1 -0
  40. package/dist/react.mjs +4 -0
  41. package/dist/react.mjs.map +1 -0
  42. package/dist/transaction-signer-BtJPGXIg.d.mts +373 -0
  43. package/dist/transaction-signer-BtJPGXIg.d.ts +373 -0
  44. package/dist/wallet-standard-shim-Af7ejSld.d.mts +1090 -0
  45. package/dist/wallet-standard-shim-BGlvGRbB.d.ts +1090 -0
  46. package/package.json +87 -10
  47. package/index.js +0 -1
@@ -0,0 +1,106 @@
1
+ import { S as SolanaTransaction, j as TransactionSigner } from './transaction-signer-BtJPGXIg.mjs';
2
+ import { Connection, SendOptions } from '@solana/web3.js';
3
+ import '@wallet-standard/base';
4
+ import '@wallet-ui/core';
5
+ import 'gill';
6
+
7
+ /**
8
+ * Wallet Adapter Compatibility Bridge
9
+ *
10
+ * Provides a compatibility layer that bridges connector-kit's TransactionSigner
11
+ * with @solana/wallet-adapter interface for seamless integration with
12
+ * libraries expecting wallet-adapter (Jupiter, Serum, Raydium, etc.)
13
+ */
14
+
15
+ /**
16
+ * Wallet adapter compatible interface that libraries expect
17
+ */
18
+ interface WalletAdapterCompatible {
19
+ publicKey: string | null;
20
+ connected: boolean;
21
+ connecting: boolean;
22
+ disconnecting: boolean;
23
+ signTransaction: (transaction: SolanaTransaction) => Promise<SolanaTransaction>;
24
+ signAllTransactions: (transactions: SolanaTransaction[]) => Promise<SolanaTransaction[]>;
25
+ sendTransaction: (transaction: SolanaTransaction, connection: Connection, options?: SendOptions) => Promise<string>;
26
+ connect: () => Promise<void>;
27
+ disconnect: () => Promise<void>;
28
+ signMessage?: (message: Uint8Array) => Promise<Uint8Array>;
29
+ }
30
+ /**
31
+ * Options for creating wallet adapter compatibility
32
+ */
33
+ interface WalletAdapterCompatOptions {
34
+ /** Function to handle disconnect */
35
+ disconnect: () => Promise<void>;
36
+ /** Optional function to transform transactions before signing */
37
+ transformTransaction?: (tx: SolanaTransaction) => SolanaTransaction;
38
+ /** Optional error handler */
39
+ onError?: (error: Error, operation: string) => void;
40
+ }
41
+ /**
42
+ * Creates a wallet-adapter compatible interface from a TransactionSigner.
43
+ * This allows using connector-kit with any library that expects @solana/wallet-adapter.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { createWalletAdapterCompat } from '@solana/connector/compat';
48
+ * import { useTransactionSigner, useConnector } from '@solana/connector';
49
+ *
50
+ * function JupiterIntegration() {
51
+ * const { signer } = useTransactionSigner();
52
+ * const { disconnect } = useConnector();
53
+ *
54
+ * const walletAdapter = createWalletAdapterCompat(signer, {
55
+ * disconnect: async () => {
56
+ * await disconnect();
57
+ * }
58
+ * });
59
+ *
60
+ * return <JupiterTerminal wallet={walletAdapter} />;
61
+ * }
62
+ * ```
63
+ *
64
+ * @param signer - TransactionSigner from connector-kit (can be null)
65
+ * @param options - Configuration options including disconnect handler
66
+ * @returns WalletAdapterCompatible interface
67
+ */
68
+ declare function createWalletAdapterCompat(signer: TransactionSigner | null, options: WalletAdapterCompatOptions): WalletAdapterCompatible;
69
+ /**
70
+ * React hook version of createWalletAdapterCompat.
71
+ * Automatically memoizes the adapter when signer changes.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * import { useWalletAdapterCompat } from '@solana/connector/compat';
76
+ * import { useTransactionSigner, useConnector } from '@solana/connector';
77
+ *
78
+ * function MyComponent() {
79
+ * const { signer } = useTransactionSigner();
80
+ * const { disconnect } = useConnector();
81
+ *
82
+ * const walletAdapter = useWalletAdapterCompat(signer, disconnect, {
83
+ * onError: (error, operation) => {
84
+ * console.error(`Error in ${operation}:`, error);
85
+ * }
86
+ * });
87
+ *
88
+ * return <JupiterTerminal wallet={walletAdapter} />;
89
+ * }
90
+ * ```
91
+ *
92
+ * @param signer - TransactionSigner from useTransactionSigner
93
+ * @param disconnect - Disconnect function from useConnector
94
+ * @param options - Additional options (excluding disconnect)
95
+ * @returns Memoized WalletAdapterCompatible interface
96
+ */
97
+ declare function useWalletAdapterCompat(signer: TransactionSigner | null, disconnect: () => Promise<void>, options?: Omit<WalletAdapterCompatOptions, 'disconnect'>): WalletAdapterCompatible;
98
+ /**
99
+ * Type guard to check if an object implements WalletAdapterCompatible interface
100
+ *
101
+ * @param obj - Object to check
102
+ * @returns True if object implements WalletAdapterCompatible
103
+ */
104
+ declare function isWalletAdapterCompatible(obj: unknown): obj is WalletAdapterCompatible;
105
+
106
+ export { type WalletAdapterCompatOptions, type WalletAdapterCompatible, createWalletAdapterCompat, isWalletAdapterCompatible, useWalletAdapterCompat };
@@ -0,0 +1,106 @@
1
+ import { S as SolanaTransaction, j as TransactionSigner } from './transaction-signer-BtJPGXIg.js';
2
+ import { Connection, SendOptions } from '@solana/web3.js';
3
+ import '@wallet-standard/base';
4
+ import '@wallet-ui/core';
5
+ import 'gill';
6
+
7
+ /**
8
+ * Wallet Adapter Compatibility Bridge
9
+ *
10
+ * Provides a compatibility layer that bridges connector-kit's TransactionSigner
11
+ * with @solana/wallet-adapter interface for seamless integration with
12
+ * libraries expecting wallet-adapter (Jupiter, Serum, Raydium, etc.)
13
+ */
14
+
15
+ /**
16
+ * Wallet adapter compatible interface that libraries expect
17
+ */
18
+ interface WalletAdapterCompatible {
19
+ publicKey: string | null;
20
+ connected: boolean;
21
+ connecting: boolean;
22
+ disconnecting: boolean;
23
+ signTransaction: (transaction: SolanaTransaction) => Promise<SolanaTransaction>;
24
+ signAllTransactions: (transactions: SolanaTransaction[]) => Promise<SolanaTransaction[]>;
25
+ sendTransaction: (transaction: SolanaTransaction, connection: Connection, options?: SendOptions) => Promise<string>;
26
+ connect: () => Promise<void>;
27
+ disconnect: () => Promise<void>;
28
+ signMessage?: (message: Uint8Array) => Promise<Uint8Array>;
29
+ }
30
+ /**
31
+ * Options for creating wallet adapter compatibility
32
+ */
33
+ interface WalletAdapterCompatOptions {
34
+ /** Function to handle disconnect */
35
+ disconnect: () => Promise<void>;
36
+ /** Optional function to transform transactions before signing */
37
+ transformTransaction?: (tx: SolanaTransaction) => SolanaTransaction;
38
+ /** Optional error handler */
39
+ onError?: (error: Error, operation: string) => void;
40
+ }
41
+ /**
42
+ * Creates a wallet-adapter compatible interface from a TransactionSigner.
43
+ * This allows using connector-kit with any library that expects @solana/wallet-adapter.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { createWalletAdapterCompat } from '@solana/connector/compat';
48
+ * import { useTransactionSigner, useConnector } from '@solana/connector';
49
+ *
50
+ * function JupiterIntegration() {
51
+ * const { signer } = useTransactionSigner();
52
+ * const { disconnect } = useConnector();
53
+ *
54
+ * const walletAdapter = createWalletAdapterCompat(signer, {
55
+ * disconnect: async () => {
56
+ * await disconnect();
57
+ * }
58
+ * });
59
+ *
60
+ * return <JupiterTerminal wallet={walletAdapter} />;
61
+ * }
62
+ * ```
63
+ *
64
+ * @param signer - TransactionSigner from connector-kit (can be null)
65
+ * @param options - Configuration options including disconnect handler
66
+ * @returns WalletAdapterCompatible interface
67
+ */
68
+ declare function createWalletAdapterCompat(signer: TransactionSigner | null, options: WalletAdapterCompatOptions): WalletAdapterCompatible;
69
+ /**
70
+ * React hook version of createWalletAdapterCompat.
71
+ * Automatically memoizes the adapter when signer changes.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * import { useWalletAdapterCompat } from '@solana/connector/compat';
76
+ * import { useTransactionSigner, useConnector } from '@solana/connector';
77
+ *
78
+ * function MyComponent() {
79
+ * const { signer } = useTransactionSigner();
80
+ * const { disconnect } = useConnector();
81
+ *
82
+ * const walletAdapter = useWalletAdapterCompat(signer, disconnect, {
83
+ * onError: (error, operation) => {
84
+ * console.error(`Error in ${operation}:`, error);
85
+ * }
86
+ * });
87
+ *
88
+ * return <JupiterTerminal wallet={walletAdapter} />;
89
+ * }
90
+ * ```
91
+ *
92
+ * @param signer - TransactionSigner from useTransactionSigner
93
+ * @param disconnect - Disconnect function from useConnector
94
+ * @param options - Additional options (excluding disconnect)
95
+ * @returns Memoized WalletAdapterCompatible interface
96
+ */
97
+ declare function useWalletAdapterCompat(signer: TransactionSigner | null, disconnect: () => Promise<void>, options?: Omit<WalletAdapterCompatOptions, 'disconnect'>): WalletAdapterCompatible;
98
+ /**
99
+ * Type guard to check if an object implements WalletAdapterCompatible interface
100
+ *
101
+ * @param obj - Object to check
102
+ * @returns True if object implements WalletAdapterCompatible
103
+ */
104
+ declare function isWalletAdapterCompatible(obj: unknown): obj is WalletAdapterCompatible;
105
+
106
+ export { type WalletAdapterCompatOptions, type WalletAdapterCompatible, createWalletAdapterCompat, isWalletAdapterCompatible, useWalletAdapterCompat };
package/dist/compat.js ADDED
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ var chunkSMUUAKC3_js = require('./chunk-SMUUAKC3.js');
4
+ var react = require('react');
5
+
6
+ var logger = chunkSMUUAKC3_js.createLogger("WalletAdapterCompat");
7
+ function createWalletAdapterCompat(signer, options) {
8
+ let { disconnect, transformTransaction, onError } = options, handleError = (error, operation) => {
9
+ onError ? onError(error, operation) : logger.error("Wallet adapter compat error", { operation, error });
10
+ };
11
+ return {
12
+ publicKey: signer?.address || null,
13
+ connected: !!signer,
14
+ connecting: false,
15
+ disconnecting: false,
16
+ signTransaction: async (transaction) => {
17
+ if (!signer) {
18
+ let error = new Error("Wallet not connected");
19
+ throw handleError(error, "signTransaction"), error;
20
+ }
21
+ try {
22
+ let tx = transformTransaction ? transformTransaction(transaction) : transaction;
23
+ return await signer.signTransaction(tx);
24
+ } catch (error) {
25
+ throw handleError(error, "signTransaction"), error;
26
+ }
27
+ },
28
+ signAllTransactions: async (transactions) => {
29
+ if (!signer) {
30
+ let error = new Error("Wallet not connected");
31
+ throw handleError(error, "signAllTransactions"), error;
32
+ }
33
+ try {
34
+ let txs = transformTransaction ? transactions.map((tx) => transformTransaction(tx)) : transactions;
35
+ return await Promise.all(txs.map((tx) => signer.signTransaction(tx)));
36
+ } catch (error) {
37
+ throw handleError(error, "signAllTransactions"), error;
38
+ }
39
+ },
40
+ sendTransaction: async (transaction, connection, sendOptions) => {
41
+ if (!signer) {
42
+ let error = new Error("Wallet not connected");
43
+ throw handleError(error, "sendTransaction"), error;
44
+ }
45
+ try {
46
+ let tx = transformTransaction ? transformTransaction(transaction) : transaction;
47
+ if (!signer.getCapabilities().canSign)
48
+ throw new Error("Wallet does not support transaction signing");
49
+ let signedTx = await signer.signTransaction(tx), rawTransaction;
50
+ if (chunkSMUUAKC3_js.isWeb3jsTransaction(signedTx))
51
+ rawTransaction = signedTx.serialize();
52
+ else if (signedTx instanceof Uint8Array)
53
+ rawTransaction = signedTx;
54
+ else
55
+ throw new Error("Unexpected signed transaction format");
56
+ return await connection.sendRawTransaction(rawTransaction, sendOptions);
57
+ } catch (error) {
58
+ throw handleError(error, "sendTransaction"), error;
59
+ }
60
+ },
61
+ connect: async () => Promise.resolve(),
62
+ disconnect: async () => {
63
+ try {
64
+ await disconnect();
65
+ } catch (error) {
66
+ throw handleError(error, "disconnect"), error;
67
+ }
68
+ },
69
+ signMessage: signer?.signMessage ? async (message) => {
70
+ if (!signer?.signMessage) {
71
+ let error = new Error("Message signing not supported");
72
+ throw handleError(error, "signMessage"), error;
73
+ }
74
+ try {
75
+ return await signer.signMessage(message);
76
+ } catch (error) {
77
+ throw handleError(error, "signMessage"), error;
78
+ }
79
+ } : void 0
80
+ };
81
+ }
82
+ function useWalletAdapterCompat(signer, disconnect, options) {
83
+ return react.useMemo(() => createWalletAdapterCompat(signer, {
84
+ disconnect,
85
+ ...options
86
+ }), [signer, disconnect, options?.transformTransaction, options?.onError]);
87
+ }
88
+ function isWalletAdapterCompatible(obj) {
89
+ if (!obj || typeof obj != "object") return false;
90
+ let wallet = obj;
91
+ return "publicKey" in wallet && "connected" in wallet && "connecting" in wallet && "disconnecting" in wallet && typeof wallet.signTransaction == "function" && typeof wallet.signAllTransactions == "function" && typeof wallet.sendTransaction == "function" && typeof wallet.connect == "function" && typeof wallet.disconnect == "function";
92
+ }
93
+
94
+ exports.createWalletAdapterCompat = createWalletAdapterCompat;
95
+ exports.isWalletAdapterCompatible = isWalletAdapterCompatible;
96
+ exports.useWalletAdapterCompat = useWalletAdapterCompat;
97
+ //# sourceMappingURL=compat.js.map
98
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compat.ts"],"names":["createLogger","isWeb3jsTransaction","useMemo"],"mappings":"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","file":"compat.js","sourcesContent":["/**\n * Wallet Adapter Compatibility Bridge\n *\n * Provides a compatibility layer that bridges connector-kit's TransactionSigner\n * with @solana/wallet-adapter interface for seamless integration with\n * libraries expecting wallet-adapter (Jupiter, Serum, Raydium, etc.)\n */\n\nimport { useMemo } from 'react';\nimport type { TransactionSigner } from './lib/transaction/transaction-signer';\nimport type { SolanaTransaction } from './types/transactions';\nimport type { Connection, SendOptions } from '@solana/web3.js';\nimport { isWeb3jsTransaction } from './utils/transaction-format';\nimport { createLogger } from './lib/utils/secure-logger';\n\nconst logger = createLogger('WalletAdapterCompat');\n\n/**\n * Wallet adapter compatible interface that libraries expect\n */\nexport interface WalletAdapterCompatible {\n publicKey: string | null;\n connected: boolean;\n connecting: boolean;\n disconnecting: boolean;\n\n signTransaction: (transaction: SolanaTransaction) => Promise<SolanaTransaction>;\n signAllTransactions: (transactions: SolanaTransaction[]) => Promise<SolanaTransaction[]>;\n sendTransaction: (transaction: SolanaTransaction, connection: Connection, options?: SendOptions) => Promise<string>;\n\n connect: () => Promise<void>;\n disconnect: () => Promise<void>;\n\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n}\n\n/**\n * Options for creating wallet adapter compatibility\n */\nexport interface WalletAdapterCompatOptions {\n /** Function to handle disconnect */\n disconnect: () => Promise<void>;\n\n /** Optional function to transform transactions before signing */\n transformTransaction?: (tx: SolanaTransaction) => SolanaTransaction;\n\n /** Optional error handler */\n onError?: (error: Error, operation: string) => void;\n}\n\n/**\n * Creates a wallet-adapter compatible interface from a TransactionSigner.\n * This allows using connector-kit with any library that expects @solana/wallet-adapter.\n *\n * @example\n * ```typescript\n * import { createWalletAdapterCompat } from '@solana/connector/compat';\n * import { useTransactionSigner, useConnector } from '@solana/connector';\n *\n * function JupiterIntegration() {\n * const { signer } = useTransactionSigner();\n * const { disconnect } = useConnector();\n *\n * const walletAdapter = createWalletAdapterCompat(signer, {\n * disconnect: async () => {\n * await disconnect();\n * }\n * });\n *\n * return <JupiterTerminal wallet={walletAdapter} />;\n * }\n * ```\n *\n * @param signer - TransactionSigner from connector-kit (can be null)\n * @param options - Configuration options including disconnect handler\n * @returns WalletAdapterCompatible interface\n */\nexport function createWalletAdapterCompat(\n signer: TransactionSigner | null,\n options: WalletAdapterCompatOptions,\n): WalletAdapterCompatible {\n const { disconnect, transformTransaction, onError } = options;\n\n const handleError = (error: Error, operation: string) => {\n if (onError) {\n onError(error, operation);\n } else {\n logger.error('Wallet adapter compat error', { operation, error });\n }\n };\n\n return {\n publicKey: signer?.address || null,\n connected: !!signer,\n connecting: false,\n disconnecting: false,\n\n signTransaction: async (transaction: SolanaTransaction) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'signTransaction');\n throw error;\n }\n\n try {\n const tx = transformTransaction ? transformTransaction(transaction) : transaction;\n\n // Use the signer's sign method\n const signed = await signer.signTransaction(tx);\n return signed;\n } catch (error) {\n handleError(error as Error, 'signTransaction');\n throw error;\n }\n },\n\n signAllTransactions: async (transactions: SolanaTransaction[]) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'signAllTransactions');\n throw error;\n }\n\n try {\n const txs = transformTransaction ? transactions.map(tx => transformTransaction(tx)) : transactions;\n\n // Sign each transaction\n const signedTxs = await Promise.all(txs.map(tx => signer.signTransaction(tx)));\n\n return signedTxs;\n } catch (error) {\n handleError(error as Error, 'signAllTransactions');\n throw error;\n }\n },\n\n sendTransaction: async (transaction: SolanaTransaction, connection: Connection, sendOptions?: SendOptions) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'sendTransaction');\n throw error;\n }\n\n try {\n const tx = transformTransaction ? transformTransaction(transaction) : transaction;\n\n // Wallet adapter pattern: Sign the transaction, then send via connection\n // The signer.signTransaction now handles format conversion automatically:\n // web3.js → Wallet Standard (serialized) → web3.js\n const capabilities = signer.getCapabilities();\n\n if (!capabilities.canSign) {\n throw new Error('Wallet does not support transaction signing');\n }\n\n // Sign the transaction (format conversion happens inside signTransaction)\n const signedTx = await signer.signTransaction(tx);\n\n // Serialize the signed transaction\n let rawTransaction: Uint8Array;\n if (isWeb3jsTransaction(signedTx)) {\n rawTransaction = signedTx.serialize();\n } else if (signedTx instanceof Uint8Array) {\n rawTransaction = signedTx;\n } else {\n throw new Error('Unexpected signed transaction format');\n }\n\n const signature = await connection.sendRawTransaction(rawTransaction, sendOptions);\n\n return signature;\n } catch (error) {\n handleError(error as Error, 'sendTransaction');\n throw error;\n }\n },\n\n connect: async () => {\n // Connect is handled by connector-kit's ConnectorProvider\n // This is a no-op for compatibility\n return Promise.resolve();\n },\n\n disconnect: async () => {\n try {\n await disconnect();\n } catch (error) {\n handleError(error as Error, 'disconnect');\n throw error;\n }\n },\n\n signMessage: signer?.signMessage\n ? async (message: Uint8Array) => {\n if (!signer?.signMessage) {\n const error = new Error('Message signing not supported');\n handleError(error, 'signMessage');\n throw error;\n }\n\n try {\n return await signer.signMessage(message);\n } catch (error) {\n handleError(error as Error, 'signMessage');\n throw error;\n }\n }\n : undefined,\n };\n}\n\n/**\n * React hook version of createWalletAdapterCompat.\n * Automatically memoizes the adapter when signer changes.\n *\n * @example\n * ```typescript\n * import { useWalletAdapterCompat } from '@solana/connector/compat';\n * import { useTransactionSigner, useConnector } from '@solana/connector';\n *\n * function MyComponent() {\n * const { signer } = useTransactionSigner();\n * const { disconnect } = useConnector();\n *\n * const walletAdapter = useWalletAdapterCompat(signer, disconnect, {\n * onError: (error, operation) => {\n * console.error(`Error in ${operation}:`, error);\n * }\n * });\n *\n * return <JupiterTerminal wallet={walletAdapter} />;\n * }\n * ```\n *\n * @param signer - TransactionSigner from useTransactionSigner\n * @param disconnect - Disconnect function from useConnector\n * @param options - Additional options (excluding disconnect)\n * @returns Memoized WalletAdapterCompatible interface\n */\nexport function useWalletAdapterCompat(\n signer: TransactionSigner | null,\n disconnect: () => Promise<void>,\n options?: Omit<WalletAdapterCompatOptions, 'disconnect'>,\n): WalletAdapterCompatible {\n return useMemo(() => {\n return createWalletAdapterCompat(signer, {\n disconnect,\n ...options,\n });\n }, [signer, disconnect, options?.transformTransaction, options?.onError]);\n}\n\n/**\n * Type guard to check if an object implements WalletAdapterCompatible interface\n *\n * @param obj - Object to check\n * @returns True if object implements WalletAdapterCompatible\n */\nexport function isWalletAdapterCompatible(obj: unknown): obj is WalletAdapterCompatible {\n if (!obj || typeof obj !== 'object') return false;\n\n const wallet = obj as Record<string, unknown>;\n\n return (\n 'publicKey' in wallet &&\n 'connected' in wallet &&\n 'connecting' in wallet &&\n 'disconnecting' in wallet &&\n typeof wallet.signTransaction === 'function' &&\n typeof wallet.signAllTransactions === 'function' &&\n typeof wallet.sendTransaction === 'function' &&\n typeof wallet.connect === 'function' &&\n typeof wallet.disconnect === 'function'\n );\n}\n"]}
@@ -0,0 +1,94 @@
1
+ import { createLogger, isWeb3jsTransaction } from './chunk-5ZUVZZWU.mjs';
2
+ import { useMemo } from 'react';
3
+
4
+ var logger = createLogger("WalletAdapterCompat");
5
+ function createWalletAdapterCompat(signer, options) {
6
+ let { disconnect, transformTransaction, onError } = options, handleError = (error, operation) => {
7
+ onError ? onError(error, operation) : logger.error("Wallet adapter compat error", { operation, error });
8
+ };
9
+ return {
10
+ publicKey: signer?.address || null,
11
+ connected: !!signer,
12
+ connecting: false,
13
+ disconnecting: false,
14
+ signTransaction: async (transaction) => {
15
+ if (!signer) {
16
+ let error = new Error("Wallet not connected");
17
+ throw handleError(error, "signTransaction"), error;
18
+ }
19
+ try {
20
+ let tx = transformTransaction ? transformTransaction(transaction) : transaction;
21
+ return await signer.signTransaction(tx);
22
+ } catch (error) {
23
+ throw handleError(error, "signTransaction"), error;
24
+ }
25
+ },
26
+ signAllTransactions: async (transactions) => {
27
+ if (!signer) {
28
+ let error = new Error("Wallet not connected");
29
+ throw handleError(error, "signAllTransactions"), error;
30
+ }
31
+ try {
32
+ let txs = transformTransaction ? transactions.map((tx) => transformTransaction(tx)) : transactions;
33
+ return await Promise.all(txs.map((tx) => signer.signTransaction(tx)));
34
+ } catch (error) {
35
+ throw handleError(error, "signAllTransactions"), error;
36
+ }
37
+ },
38
+ sendTransaction: async (transaction, connection, sendOptions) => {
39
+ if (!signer) {
40
+ let error = new Error("Wallet not connected");
41
+ throw handleError(error, "sendTransaction"), error;
42
+ }
43
+ try {
44
+ let tx = transformTransaction ? transformTransaction(transaction) : transaction;
45
+ if (!signer.getCapabilities().canSign)
46
+ throw new Error("Wallet does not support transaction signing");
47
+ let signedTx = await signer.signTransaction(tx), rawTransaction;
48
+ if (isWeb3jsTransaction(signedTx))
49
+ rawTransaction = signedTx.serialize();
50
+ else if (signedTx instanceof Uint8Array)
51
+ rawTransaction = signedTx;
52
+ else
53
+ throw new Error("Unexpected signed transaction format");
54
+ return await connection.sendRawTransaction(rawTransaction, sendOptions);
55
+ } catch (error) {
56
+ throw handleError(error, "sendTransaction"), error;
57
+ }
58
+ },
59
+ connect: async () => Promise.resolve(),
60
+ disconnect: async () => {
61
+ try {
62
+ await disconnect();
63
+ } catch (error) {
64
+ throw handleError(error, "disconnect"), error;
65
+ }
66
+ },
67
+ signMessage: signer?.signMessage ? async (message) => {
68
+ if (!signer?.signMessage) {
69
+ let error = new Error("Message signing not supported");
70
+ throw handleError(error, "signMessage"), error;
71
+ }
72
+ try {
73
+ return await signer.signMessage(message);
74
+ } catch (error) {
75
+ throw handleError(error, "signMessage"), error;
76
+ }
77
+ } : void 0
78
+ };
79
+ }
80
+ function useWalletAdapterCompat(signer, disconnect, options) {
81
+ return useMemo(() => createWalletAdapterCompat(signer, {
82
+ disconnect,
83
+ ...options
84
+ }), [signer, disconnect, options?.transformTransaction, options?.onError]);
85
+ }
86
+ function isWalletAdapterCompatible(obj) {
87
+ if (!obj || typeof obj != "object") return false;
88
+ let wallet = obj;
89
+ return "publicKey" in wallet && "connected" in wallet && "connecting" in wallet && "disconnecting" in wallet && typeof wallet.signTransaction == "function" && typeof wallet.signAllTransactions == "function" && typeof wallet.sendTransaction == "function" && typeof wallet.connect == "function" && typeof wallet.disconnect == "function";
90
+ }
91
+
92
+ export { createWalletAdapterCompat, isWalletAdapterCompatible, useWalletAdapterCompat };
93
+ //# sourceMappingURL=compat.mjs.map
94
+ //# sourceMappingURL=compat.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compat.ts"],"names":[],"mappings":"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","file":"compat.mjs","sourcesContent":["/**\n * Wallet Adapter Compatibility Bridge\n *\n * Provides a compatibility layer that bridges connector-kit's TransactionSigner\n * with @solana/wallet-adapter interface for seamless integration with\n * libraries expecting wallet-adapter (Jupiter, Serum, Raydium, etc.)\n */\n\nimport { useMemo } from 'react';\nimport type { TransactionSigner } from './lib/transaction/transaction-signer';\nimport type { SolanaTransaction } from './types/transactions';\nimport type { Connection, SendOptions } from '@solana/web3.js';\nimport { isWeb3jsTransaction } from './utils/transaction-format';\nimport { createLogger } from './lib/utils/secure-logger';\n\nconst logger = createLogger('WalletAdapterCompat');\n\n/**\n * Wallet adapter compatible interface that libraries expect\n */\nexport interface WalletAdapterCompatible {\n publicKey: string | null;\n connected: boolean;\n connecting: boolean;\n disconnecting: boolean;\n\n signTransaction: (transaction: SolanaTransaction) => Promise<SolanaTransaction>;\n signAllTransactions: (transactions: SolanaTransaction[]) => Promise<SolanaTransaction[]>;\n sendTransaction: (transaction: SolanaTransaction, connection: Connection, options?: SendOptions) => Promise<string>;\n\n connect: () => Promise<void>;\n disconnect: () => Promise<void>;\n\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n}\n\n/**\n * Options for creating wallet adapter compatibility\n */\nexport interface WalletAdapterCompatOptions {\n /** Function to handle disconnect */\n disconnect: () => Promise<void>;\n\n /** Optional function to transform transactions before signing */\n transformTransaction?: (tx: SolanaTransaction) => SolanaTransaction;\n\n /** Optional error handler */\n onError?: (error: Error, operation: string) => void;\n}\n\n/**\n * Creates a wallet-adapter compatible interface from a TransactionSigner.\n * This allows using connector-kit with any library that expects @solana/wallet-adapter.\n *\n * @example\n * ```typescript\n * import { createWalletAdapterCompat } from '@solana/connector/compat';\n * import { useTransactionSigner, useConnector } from '@solana/connector';\n *\n * function JupiterIntegration() {\n * const { signer } = useTransactionSigner();\n * const { disconnect } = useConnector();\n *\n * const walletAdapter = createWalletAdapterCompat(signer, {\n * disconnect: async () => {\n * await disconnect();\n * }\n * });\n *\n * return <JupiterTerminal wallet={walletAdapter} />;\n * }\n * ```\n *\n * @param signer - TransactionSigner from connector-kit (can be null)\n * @param options - Configuration options including disconnect handler\n * @returns WalletAdapterCompatible interface\n */\nexport function createWalletAdapterCompat(\n signer: TransactionSigner | null,\n options: WalletAdapterCompatOptions,\n): WalletAdapterCompatible {\n const { disconnect, transformTransaction, onError } = options;\n\n const handleError = (error: Error, operation: string) => {\n if (onError) {\n onError(error, operation);\n } else {\n logger.error('Wallet adapter compat error', { operation, error });\n }\n };\n\n return {\n publicKey: signer?.address || null,\n connected: !!signer,\n connecting: false,\n disconnecting: false,\n\n signTransaction: async (transaction: SolanaTransaction) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'signTransaction');\n throw error;\n }\n\n try {\n const tx = transformTransaction ? transformTransaction(transaction) : transaction;\n\n // Use the signer's sign method\n const signed = await signer.signTransaction(tx);\n return signed;\n } catch (error) {\n handleError(error as Error, 'signTransaction');\n throw error;\n }\n },\n\n signAllTransactions: async (transactions: SolanaTransaction[]) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'signAllTransactions');\n throw error;\n }\n\n try {\n const txs = transformTransaction ? transactions.map(tx => transformTransaction(tx)) : transactions;\n\n // Sign each transaction\n const signedTxs = await Promise.all(txs.map(tx => signer.signTransaction(tx)));\n\n return signedTxs;\n } catch (error) {\n handleError(error as Error, 'signAllTransactions');\n throw error;\n }\n },\n\n sendTransaction: async (transaction: SolanaTransaction, connection: Connection, sendOptions?: SendOptions) => {\n if (!signer) {\n const error = new Error('Wallet not connected');\n handleError(error, 'sendTransaction');\n throw error;\n }\n\n try {\n const tx = transformTransaction ? transformTransaction(transaction) : transaction;\n\n // Wallet adapter pattern: Sign the transaction, then send via connection\n // The signer.signTransaction now handles format conversion automatically:\n // web3.js → Wallet Standard (serialized) → web3.js\n const capabilities = signer.getCapabilities();\n\n if (!capabilities.canSign) {\n throw new Error('Wallet does not support transaction signing');\n }\n\n // Sign the transaction (format conversion happens inside signTransaction)\n const signedTx = await signer.signTransaction(tx);\n\n // Serialize the signed transaction\n let rawTransaction: Uint8Array;\n if (isWeb3jsTransaction(signedTx)) {\n rawTransaction = signedTx.serialize();\n } else if (signedTx instanceof Uint8Array) {\n rawTransaction = signedTx;\n } else {\n throw new Error('Unexpected signed transaction format');\n }\n\n const signature = await connection.sendRawTransaction(rawTransaction, sendOptions);\n\n return signature;\n } catch (error) {\n handleError(error as Error, 'sendTransaction');\n throw error;\n }\n },\n\n connect: async () => {\n // Connect is handled by connector-kit's ConnectorProvider\n // This is a no-op for compatibility\n return Promise.resolve();\n },\n\n disconnect: async () => {\n try {\n await disconnect();\n } catch (error) {\n handleError(error as Error, 'disconnect');\n throw error;\n }\n },\n\n signMessage: signer?.signMessage\n ? async (message: Uint8Array) => {\n if (!signer?.signMessage) {\n const error = new Error('Message signing not supported');\n handleError(error, 'signMessage');\n throw error;\n }\n\n try {\n return await signer.signMessage(message);\n } catch (error) {\n handleError(error as Error, 'signMessage');\n throw error;\n }\n }\n : undefined,\n };\n}\n\n/**\n * React hook version of createWalletAdapterCompat.\n * Automatically memoizes the adapter when signer changes.\n *\n * @example\n * ```typescript\n * import { useWalletAdapterCompat } from '@solana/connector/compat';\n * import { useTransactionSigner, useConnector } from '@solana/connector';\n *\n * function MyComponent() {\n * const { signer } = useTransactionSigner();\n * const { disconnect } = useConnector();\n *\n * const walletAdapter = useWalletAdapterCompat(signer, disconnect, {\n * onError: (error, operation) => {\n * console.error(`Error in ${operation}:`, error);\n * }\n * });\n *\n * return <JupiterTerminal wallet={walletAdapter} />;\n * }\n * ```\n *\n * @param signer - TransactionSigner from useTransactionSigner\n * @param disconnect - Disconnect function from useConnector\n * @param options - Additional options (excluding disconnect)\n * @returns Memoized WalletAdapterCompatible interface\n */\nexport function useWalletAdapterCompat(\n signer: TransactionSigner | null,\n disconnect: () => Promise<void>,\n options?: Omit<WalletAdapterCompatOptions, 'disconnect'>,\n): WalletAdapterCompatible {\n return useMemo(() => {\n return createWalletAdapterCompat(signer, {\n disconnect,\n ...options,\n });\n }, [signer, disconnect, options?.transformTransaction, options?.onError]);\n}\n\n/**\n * Type guard to check if an object implements WalletAdapterCompatible interface\n *\n * @param obj - Object to check\n * @returns True if object implements WalletAdapterCompatible\n */\nexport function isWalletAdapterCompatible(obj: unknown): obj is WalletAdapterCompatible {\n if (!obj || typeof obj !== 'object') return false;\n\n const wallet = obj as Record<string, unknown>;\n\n return (\n 'publicKey' in wallet &&\n 'connected' in wallet &&\n 'connecting' in wallet &&\n 'disconnecting' in wallet &&\n typeof wallet.signTransaction === 'function' &&\n typeof wallet.signAllTransactions === 'function' &&\n typeof wallet.sendTransaction === 'function' &&\n typeof wallet.connect === 'function' &&\n typeof wallet.disconnect === 'function'\n );\n}\n"]}