@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.
- package/README.md +1460 -0
- package/dist/chunk-52WUWW5R.mjs +2533 -0
- package/dist/chunk-52WUWW5R.mjs.map +1 -0
- package/dist/chunk-5NSUFMCB.js +393 -0
- package/dist/chunk-5NSUFMCB.js.map +1 -0
- package/dist/chunk-5ZUVZZWU.mjs +180 -0
- package/dist/chunk-5ZUVZZWU.mjs.map +1 -0
- package/dist/chunk-7TADXRFD.mjs +298 -0
- package/dist/chunk-7TADXRFD.mjs.map +1 -0
- package/dist/chunk-ACFSCMUI.mjs +359 -0
- package/dist/chunk-ACFSCMUI.mjs.map +1 -0
- package/dist/chunk-SGAIPK7Q.js +314 -0
- package/dist/chunk-SGAIPK7Q.js.map +1 -0
- package/dist/chunk-SMUUAKC3.js +186 -0
- package/dist/chunk-SMUUAKC3.js.map +1 -0
- package/dist/chunk-ZLPQUOFK.js +2594 -0
- package/dist/chunk-ZLPQUOFK.js.map +1 -0
- package/dist/compat.d.mts +106 -0
- package/dist/compat.d.ts +106 -0
- package/dist/compat.js +98 -0
- package/dist/compat.js.map +1 -0
- package/dist/compat.mjs +94 -0
- package/dist/compat.mjs.map +1 -0
- package/dist/headless.d.mts +400 -0
- package/dist/headless.d.ts +400 -0
- package/dist/headless.js +325 -0
- package/dist/headless.js.map +1 -0
- package/dist/headless.mjs +4 -0
- package/dist/headless.mjs.map +1 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +382 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react.d.mts +645 -0
- package/dist/react.d.ts +645 -0
- package/dist/react.js +65 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +4 -0
- package/dist/react.mjs.map +1 -0
- package/dist/transaction-signer-BtJPGXIg.d.mts +373 -0
- package/dist/transaction-signer-BtJPGXIg.d.ts +373 -0
- package/dist/wallet-standard-shim-Af7ejSld.d.mts +1090 -0
- package/dist/wallet-standard-shim-BGlvGRbB.d.ts +1090 -0
- package/package.json +87 -10
- 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 };
|
package/dist/compat.d.ts
ADDED
|
@@ -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"]}
|
package/dist/compat.mjs
ADDED
|
@@ -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"]}
|