@vue-solana/core 0.4.1 → 0.5.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 +12 -2
- package/dist/index.cjs +19 -17
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +4 -4
- package/dist/ios-wallet.cjs +12 -538
- package/dist/ios-wallet.d.cts +27 -8
- package/dist/ios-wallet.d.mts +27 -8
- package/dist/ios-wallet.d.ts +27 -8
- package/dist/ios-wallet.mjs +4 -517
- package/dist/rpc.cjs +1 -4
- package/dist/rpc.mjs +1 -4
- package/dist/shared/core.8V8PLE-S.cjs +237 -0
- package/dist/shared/core.D7olTUN_.mjs +225 -0
- package/dist/shared/core.DJZldB_x.cjs +612 -0
- package/dist/shared/core.DSI7vIfT.mjs +586 -0
- package/dist/transaction.cjs +35 -0
- package/dist/transaction.d.cts +3 -2
- package/dist/transaction.d.mts +3 -2
- package/dist/transaction.d.ts +3 -2
- package/dist/transaction.mjs +35 -1
- package/dist/types.d.cts +11 -2
- package/dist/types.d.mts +11 -2
- package/dist/types.d.ts +11 -2
- package/dist/wallet-standard.cjs +13 -219
- package/dist/wallet-standard.d.cts +6 -3
- package/dist/wallet-standard.d.mts +6 -3
- package/dist/wallet-standard.d.ts +6 -3
- package/dist/wallet-standard.mjs +6 -213
- package/package.json +1 -1
package/dist/transaction.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { assertWalletConnected, assertWalletCanSign } from './wallet.mjs';
|
|
2
2
|
|
|
3
|
+
const DEFAULT_CONFIRMATION_COMMITMENT = "confirmed";
|
|
4
|
+
const DEFAULT_CONFIRMATION_TIMEOUT_MS = 6e4;
|
|
3
5
|
async function signAndSendTransaction(connection, wallet, transaction, options) {
|
|
4
6
|
assertWalletConnected(wallet);
|
|
5
7
|
if (isMobileWalletAdapterWallet(wallet) && wallet.signTransaction) {
|
|
@@ -13,6 +15,23 @@ async function signAndSendTransaction(connection, wallet, transaction, options)
|
|
|
13
15
|
assertWalletCanSign(wallet);
|
|
14
16
|
return signAndSendRawTransaction(connection, wallet, transaction, options);
|
|
15
17
|
}
|
|
18
|
+
async function confirmTransactionSignature(connection, signature, options = {}) {
|
|
19
|
+
const commitment = options.commitment ?? DEFAULT_CONFIRMATION_COMMITMENT;
|
|
20
|
+
const confirmation = connection.confirmTransaction(signature, commitment);
|
|
21
|
+
const result = await withTransactionTimeout(
|
|
22
|
+
confirmation,
|
|
23
|
+
options.timeoutMs ?? DEFAULT_CONFIRMATION_TIMEOUT_MS,
|
|
24
|
+
`Timed out waiting for transaction ${signature} to reach ${commitment} commitment.`
|
|
25
|
+
);
|
|
26
|
+
if (result.value.err) {
|
|
27
|
+
throw new Error(`Transaction ${signature} failed to reach ${commitment} commitment.`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
signature,
|
|
31
|
+
commitment,
|
|
32
|
+
result
|
|
33
|
+
};
|
|
34
|
+
}
|
|
16
35
|
async function signAndSendRawTransaction(connection, wallet, transaction, options) {
|
|
17
36
|
const signedTransaction = await wallet.signTransaction(transaction);
|
|
18
37
|
const rawTransaction = signedTransaction.serialize();
|
|
@@ -21,5 +40,20 @@ async function signAndSendRawTransaction(connection, wallet, transaction, option
|
|
|
21
40
|
function isMobileWalletAdapterWallet(wallet) {
|
|
22
41
|
return wallet.source === "mobile-wallet-adapter";
|
|
23
42
|
}
|
|
43
|
+
async function withTransactionTimeout(promise, timeoutMs, message) {
|
|
44
|
+
let timeoutId;
|
|
45
|
+
try {
|
|
46
|
+
const timeout = new Promise((_, reject) => {
|
|
47
|
+
timeoutId = setTimeout(() => {
|
|
48
|
+
reject(new Error(message));
|
|
49
|
+
}, timeoutMs);
|
|
50
|
+
});
|
|
51
|
+
return await Promise.race([promise, timeout]);
|
|
52
|
+
} finally {
|
|
53
|
+
if (timeoutId) {
|
|
54
|
+
clearTimeout(timeoutId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
24
58
|
|
|
25
|
-
export { signAndSendTransaction };
|
|
59
|
+
export { confirmTransactionSignature, signAndSendTransaction };
|
package/dist/types.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Commitment, SendOptions, Connection, Transaction, VersionedTransaction, PublicKey, TransactionSignature, RpcResponseAndContext, SignatureResult } from '@solana/web3-compat';
|
|
2
2
|
|
|
3
3
|
type SolanaCluster = "mainnet-beta" | "testnet" | "devnet" | "localnet";
|
|
4
4
|
type SolanaChain = "solana:mainnet" | "solana:testnet" | "solana:devnet" | "solana:localnet";
|
|
@@ -58,5 +58,14 @@ interface SolanaWalletInfo {
|
|
|
58
58
|
interface SendTransactionOptions extends SendOptions {
|
|
59
59
|
skipPreflight?: boolean;
|
|
60
60
|
}
|
|
61
|
+
interface ConfirmTransactionOptions {
|
|
62
|
+
commitment?: Commitment;
|
|
63
|
+
timeoutMs?: number;
|
|
64
|
+
}
|
|
65
|
+
interface TransactionConfirmation {
|
|
66
|
+
signature: TransactionSignature;
|
|
67
|
+
commitment: Commitment;
|
|
68
|
+
result: RpcResponseAndContext<SignatureResult>;
|
|
69
|
+
}
|
|
61
70
|
|
|
62
|
-
export type { SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo };
|
|
71
|
+
export type { ConfirmTransactionOptions, SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo, TransactionConfirmation };
|
package/dist/types.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Commitment, SendOptions, Connection, Transaction, VersionedTransaction, PublicKey, TransactionSignature, RpcResponseAndContext, SignatureResult } from '@solana/web3-compat';
|
|
2
2
|
|
|
3
3
|
type SolanaCluster = "mainnet-beta" | "testnet" | "devnet" | "localnet";
|
|
4
4
|
type SolanaChain = "solana:mainnet" | "solana:testnet" | "solana:devnet" | "solana:localnet";
|
|
@@ -58,5 +58,14 @@ interface SolanaWalletInfo {
|
|
|
58
58
|
interface SendTransactionOptions extends SendOptions {
|
|
59
59
|
skipPreflight?: boolean;
|
|
60
60
|
}
|
|
61
|
+
interface ConfirmTransactionOptions {
|
|
62
|
+
commitment?: Commitment;
|
|
63
|
+
timeoutMs?: number;
|
|
64
|
+
}
|
|
65
|
+
interface TransactionConfirmation {
|
|
66
|
+
signature: TransactionSignature;
|
|
67
|
+
commitment: Commitment;
|
|
68
|
+
result: RpcResponseAndContext<SignatureResult>;
|
|
69
|
+
}
|
|
61
70
|
|
|
62
|
-
export type { SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo };
|
|
71
|
+
export type { ConfirmTransactionOptions, SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo, TransactionConfirmation };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Commitment, SendOptions, Connection, Transaction, VersionedTransaction, PublicKey, TransactionSignature, RpcResponseAndContext, SignatureResult } from '@solana/web3-compat';
|
|
2
2
|
|
|
3
3
|
type SolanaCluster = "mainnet-beta" | "testnet" | "devnet" | "localnet";
|
|
4
4
|
type SolanaChain = "solana:mainnet" | "solana:testnet" | "solana:devnet" | "solana:localnet";
|
|
@@ -58,5 +58,14 @@ interface SolanaWalletInfo {
|
|
|
58
58
|
interface SendTransactionOptions extends SendOptions {
|
|
59
59
|
skipPreflight?: boolean;
|
|
60
60
|
}
|
|
61
|
+
interface ConfirmTransactionOptions {
|
|
62
|
+
commitment?: Commitment;
|
|
63
|
+
timeoutMs?: number;
|
|
64
|
+
}
|
|
65
|
+
interface TransactionConfirmation {
|
|
66
|
+
signature: TransactionSignature;
|
|
67
|
+
commitment: Commitment;
|
|
68
|
+
result: RpcResponseAndContext<SignatureResult>;
|
|
69
|
+
}
|
|
61
70
|
|
|
62
|
-
export type { SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo };
|
|
71
|
+
export type { ConfirmTransactionOptions, SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo, TransactionConfirmation };
|
package/dist/wallet-standard.cjs
CHANGED
|
@@ -1,224 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const discovery = require('./shared/core.8V8PLE-S.cjs');
|
|
4
|
+
require('@wallet-standard/features');
|
|
5
|
+
require('@solana/wallet-standard-features');
|
|
6
|
+
require('@solana/web3-compat');
|
|
7
|
+
require('bs58');
|
|
8
|
+
require('@wallet-standard/app');
|
|
8
9
|
|
|
9
|
-
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
10
10
|
|
|
11
|
-
const bs58__default = /*#__PURE__*/_interopDefaultCompat(bs58);
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
function getSolanaChain(cluster) {
|
|
21
|
-
if (cluster === "mainnet-beta") {
|
|
22
|
-
return "solana:mainnet";
|
|
23
|
-
}
|
|
24
|
-
return `solana:${cluster}`;
|
|
25
|
-
}
|
|
26
|
-
function isSolanaStandardWallet(wallet) {
|
|
27
|
-
return features.StandardConnect in wallet.features && features.StandardDisconnect in wallet.features && wallet.chains.some((chain) => SOLANA_CHAINS.includes(chain));
|
|
28
|
-
}
|
|
29
|
-
function getRegisteredSolanaWallets() {
|
|
30
|
-
if (typeof window === "undefined") {
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
return app.getWallets().get().filter(isSolanaStandardWallet).map(createSolanaWalletInfo);
|
|
34
|
-
}
|
|
35
|
-
function subscribeSolanaWallets(listener) {
|
|
36
|
-
if (typeof window === "undefined") {
|
|
37
|
-
return () => {
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const wallets = app.getWallets();
|
|
41
|
-
const offRegister = wallets.on("register", listener);
|
|
42
|
-
const offUnregister = wallets.on("unregister", listener);
|
|
43
|
-
return () => {
|
|
44
|
-
offRegister();
|
|
45
|
-
offUnregister();
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function adaptSolanaStandardWallet(walletInfo, options = {}) {
|
|
49
|
-
const wallet = walletInfo.wallet;
|
|
50
|
-
let accounts = wallet.accounts;
|
|
51
|
-
let account = options.account;
|
|
52
|
-
let allowAccountUpdates = Boolean(options.account);
|
|
53
|
-
let connecting = false;
|
|
54
|
-
let disconnecting = false;
|
|
55
|
-
let manuallyDisconnected = false;
|
|
56
|
-
const eventsFeature = wallet.features[features.StandardEvents];
|
|
57
|
-
eventsFeature?.on("change", (properties) => {
|
|
58
|
-
if (properties.accounts) {
|
|
59
|
-
accounts = properties.accounts;
|
|
60
|
-
account = allowAccountUpdates && !manuallyDisconnected ? getSolanaAccount(accounts, options.chain) : void 0;
|
|
61
|
-
options.onChange?.();
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
return {
|
|
65
|
-
platform: walletInfo.platform,
|
|
66
|
-
source: walletInfo.source,
|
|
67
|
-
get publicKey() {
|
|
68
|
-
return account ? new web3Compat.PublicKey(account.publicKey) : null;
|
|
69
|
-
},
|
|
70
|
-
get connected() {
|
|
71
|
-
return Boolean(account);
|
|
72
|
-
},
|
|
73
|
-
get connecting() {
|
|
74
|
-
return connecting;
|
|
75
|
-
},
|
|
76
|
-
get disconnecting() {
|
|
77
|
-
return disconnecting;
|
|
78
|
-
},
|
|
79
|
-
async connect() {
|
|
80
|
-
connecting = true;
|
|
81
|
-
manuallyDisconnected = false;
|
|
82
|
-
options.onChange?.();
|
|
83
|
-
try {
|
|
84
|
-
const feature = wallet.features[features.StandardConnect];
|
|
85
|
-
const result = await feature.connect();
|
|
86
|
-
accounts = result.accounts;
|
|
87
|
-
allowAccountUpdates = true;
|
|
88
|
-
account = getSolanaAccount(accounts, options.chain);
|
|
89
|
-
if (!account) {
|
|
90
|
-
throw new Error("Solana wallet did not authorize a Solana account");
|
|
91
|
-
}
|
|
92
|
-
} finally {
|
|
93
|
-
connecting = false;
|
|
94
|
-
options.onChange?.();
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
async disconnect() {
|
|
98
|
-
const feature = wallet.features[features.StandardDisconnect];
|
|
99
|
-
disconnecting = true;
|
|
100
|
-
manuallyDisconnected = true;
|
|
101
|
-
allowAccountUpdates = false;
|
|
102
|
-
account = void 0;
|
|
103
|
-
options.onChange?.();
|
|
104
|
-
try {
|
|
105
|
-
await feature.disconnect();
|
|
106
|
-
accounts = [];
|
|
107
|
-
account = void 0;
|
|
108
|
-
} catch (error) {
|
|
109
|
-
manuallyDisconnected = false;
|
|
110
|
-
allowAccountUpdates = true;
|
|
111
|
-
account = getSolanaAccount(accounts, options.chain);
|
|
112
|
-
throw error;
|
|
113
|
-
} finally {
|
|
114
|
-
disconnecting = false;
|
|
115
|
-
options.onChange?.();
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
signTransaction: hasSignTransaction(wallet) ? async (transaction) => {
|
|
119
|
-
const activeAccount = getActiveAccount(account);
|
|
120
|
-
const [result] = await wallet.features[walletStandardFeatures.SolanaSignTransaction].signTransaction({
|
|
121
|
-
account: activeAccount,
|
|
122
|
-
transaction: serializeTransaction(transaction),
|
|
123
|
-
chain: options.chain
|
|
124
|
-
});
|
|
125
|
-
if (!result) {
|
|
126
|
-
throw new Error("Solana wallet did not return a signed transaction");
|
|
127
|
-
}
|
|
128
|
-
return deserializeTransaction(transaction, result.signedTransaction);
|
|
129
|
-
} : void 0,
|
|
130
|
-
signAllTransactions: hasSignTransaction(wallet) ? async (transactions) => {
|
|
131
|
-
const activeAccount = getActiveAccount(account);
|
|
132
|
-
const results = await wallet.features[walletStandardFeatures.SolanaSignTransaction].signTransaction(
|
|
133
|
-
...transactions.map((transaction) => ({
|
|
134
|
-
account: activeAccount,
|
|
135
|
-
transaction: serializeTransaction(transaction),
|
|
136
|
-
chain: options.chain
|
|
137
|
-
}))
|
|
138
|
-
);
|
|
139
|
-
return results.map(
|
|
140
|
-
(result, index) => deserializeTransaction(transactions[index], result.signedTransaction)
|
|
141
|
-
);
|
|
142
|
-
} : void 0,
|
|
143
|
-
signAndSendTransaction: hasSignAndSendTransaction(wallet) ? async (transaction, sendOptions) => {
|
|
144
|
-
const activeAccount = getActiveAccount(account);
|
|
145
|
-
const [result] = await wallet.features[walletStandardFeatures.SolanaSignAndSendTransaction].signAndSendTransaction({
|
|
146
|
-
account: activeAccount,
|
|
147
|
-
transaction: serializeTransaction(transaction),
|
|
148
|
-
chain: options.chain ?? getSolanaAccountChain(activeAccount),
|
|
149
|
-
options: sendOptions
|
|
150
|
-
});
|
|
151
|
-
if (!result) {
|
|
152
|
-
throw new Error("Solana wallet did not return a transaction signature");
|
|
153
|
-
}
|
|
154
|
-
return { signature: bs58__default.encode(result.signature) };
|
|
155
|
-
} : void 0
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
function createSolanaWalletInfo(wallet) {
|
|
159
|
-
const isMobileWallet = wallet.name === SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME;
|
|
160
|
-
return {
|
|
161
|
-
name: wallet.name,
|
|
162
|
-
icon: wallet.icon,
|
|
163
|
-
chains: wallet.chains,
|
|
164
|
-
platform: isMobileWallet ? "mobile" : "browser",
|
|
165
|
-
source: isMobileWallet ? "mobile-wallet-adapter" : "wallet-standard",
|
|
166
|
-
appUrl: getWalletUrl(wallet),
|
|
167
|
-
accounts: wallet.accounts.map((account) => ({
|
|
168
|
-
address: account.address,
|
|
169
|
-
publicKey: Uint8Array.from(account.publicKey),
|
|
170
|
-
chains: account.chains,
|
|
171
|
-
label: account.label,
|
|
172
|
-
icon: account.icon
|
|
173
|
-
})),
|
|
174
|
-
wallet
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
function getWalletUrl(wallet) {
|
|
178
|
-
return "url" in wallet && typeof wallet.url === "string" ? wallet.url : void 0;
|
|
179
|
-
}
|
|
180
|
-
function getSolanaAccount(accounts, chain) {
|
|
181
|
-
return accounts.find((account) => account.chains.some((accountChain) => accountChain === chain)) ?? accounts.find(
|
|
182
|
-
(account) => account.chains.some((accountChain) => SOLANA_CHAINS.includes(accountChain))
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
function getActiveAccount(account) {
|
|
186
|
-
if (!account) {
|
|
187
|
-
throw new Error("Solana wallet is not connected");
|
|
188
|
-
}
|
|
189
|
-
return account;
|
|
190
|
-
}
|
|
191
|
-
function getSolanaAccountChain(account) {
|
|
192
|
-
const chain = account.chains.find(
|
|
193
|
-
(accountChain) => SOLANA_CHAINS.includes(accountChain)
|
|
194
|
-
);
|
|
195
|
-
if (!chain) {
|
|
196
|
-
throw new Error("Solana wallet account does not support a Solana chain");
|
|
197
|
-
}
|
|
198
|
-
return chain;
|
|
199
|
-
}
|
|
200
|
-
function hasSignTransaction(wallet) {
|
|
201
|
-
return walletStandardFeatures.SolanaSignTransaction in wallet.features;
|
|
202
|
-
}
|
|
203
|
-
function hasSignAndSendTransaction(wallet) {
|
|
204
|
-
return walletStandardFeatures.SolanaSignAndSendTransaction in wallet.features;
|
|
205
|
-
}
|
|
206
|
-
function serializeTransaction(transaction) {
|
|
207
|
-
if (transaction instanceof web3Compat.Transaction) {
|
|
208
|
-
return transaction.serialize({ requireAllSignatures: false, verifySignatures: false });
|
|
209
|
-
}
|
|
210
|
-
return transaction.serialize();
|
|
211
|
-
}
|
|
212
|
-
function deserializeTransaction(source, bytes) {
|
|
213
|
-
if (source instanceof web3Compat.Transaction) {
|
|
214
|
-
return web3Compat.Transaction.from(bytes);
|
|
215
|
-
}
|
|
216
|
-
return web3Compat.VersionedTransaction.deserialize(bytes);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
exports.SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME;
|
|
220
|
-
exports.adaptSolanaStandardWallet = adaptSolanaStandardWallet;
|
|
221
|
-
exports.getRegisteredSolanaWallets = getRegisteredSolanaWallets;
|
|
222
|
-
exports.getSolanaChain = getSolanaChain;
|
|
223
|
-
exports.isSolanaStandardWallet = isSolanaStandardWallet;
|
|
224
|
-
exports.subscribeSolanaWallets = subscribeSolanaWallets;
|
|
12
|
+
exports.SOLANA_CHAINS = discovery.SOLANA_CHAINS;
|
|
13
|
+
exports.SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = discovery.SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME;
|
|
14
|
+
exports.adaptSolanaStandardWallet = discovery.adaptSolanaStandardWallet;
|
|
15
|
+
exports.getRegisteredSolanaWallets = discovery.getRegisteredSolanaWallets;
|
|
16
|
+
exports.getSolanaChain = discovery.getSolanaChain;
|
|
17
|
+
exports.isSolanaStandardWallet = discovery.isSolanaStandardWallet;
|
|
18
|
+
exports.subscribeSolanaWallets = discovery.subscribeSolanaWallets;
|
|
@@ -2,17 +2,20 @@ import { WalletAccount, Wallet } from '@wallet-standard/base';
|
|
|
2
2
|
import { SolanaChain, SolanaWalletInfo, SolanaWallet, SolanaCluster } from './types.cjs';
|
|
3
3
|
import '@solana/web3-compat';
|
|
4
4
|
|
|
5
|
-
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
6
5
|
interface AdaptSolanaWalletOptions {
|
|
7
6
|
chain?: SolanaChain;
|
|
8
7
|
account?: WalletAccount;
|
|
9
8
|
onChange?: () => void;
|
|
10
9
|
}
|
|
10
|
+
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
11
|
+
|
|
12
|
+
declare const SOLANA_CHAINS: readonly SolanaChain[];
|
|
11
13
|
declare function getSolanaChain(cluster: SolanaCluster): SolanaChain;
|
|
14
|
+
|
|
15
|
+
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
12
16
|
declare function isSolanaStandardWallet(wallet: Wallet): boolean;
|
|
13
17
|
declare function getRegisteredSolanaWallets(): SolanaWalletInfo[];
|
|
14
18
|
declare function subscribeSolanaWallets(listener: () => void): () => void;
|
|
15
|
-
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
16
19
|
|
|
17
|
-
export { SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
20
|
+
export { SOLANA_CHAINS, SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
18
21
|
export type { AdaptSolanaWalletOptions };
|
|
@@ -2,17 +2,20 @@ import { WalletAccount, Wallet } from '@wallet-standard/base';
|
|
|
2
2
|
import { SolanaChain, SolanaWalletInfo, SolanaWallet, SolanaCluster } from './types.mjs';
|
|
3
3
|
import '@solana/web3-compat';
|
|
4
4
|
|
|
5
|
-
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
6
5
|
interface AdaptSolanaWalletOptions {
|
|
7
6
|
chain?: SolanaChain;
|
|
8
7
|
account?: WalletAccount;
|
|
9
8
|
onChange?: () => void;
|
|
10
9
|
}
|
|
10
|
+
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
11
|
+
|
|
12
|
+
declare const SOLANA_CHAINS: readonly SolanaChain[];
|
|
11
13
|
declare function getSolanaChain(cluster: SolanaCluster): SolanaChain;
|
|
14
|
+
|
|
15
|
+
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
12
16
|
declare function isSolanaStandardWallet(wallet: Wallet): boolean;
|
|
13
17
|
declare function getRegisteredSolanaWallets(): SolanaWalletInfo[];
|
|
14
18
|
declare function subscribeSolanaWallets(listener: () => void): () => void;
|
|
15
|
-
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
16
19
|
|
|
17
|
-
export { SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
20
|
+
export { SOLANA_CHAINS, SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
18
21
|
export type { AdaptSolanaWalletOptions };
|
|
@@ -2,17 +2,20 @@ import { WalletAccount, Wallet } from '@wallet-standard/base';
|
|
|
2
2
|
import { SolanaChain, SolanaWalletInfo, SolanaWallet, SolanaCluster } from './types.js';
|
|
3
3
|
import '@solana/web3-compat';
|
|
4
4
|
|
|
5
|
-
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
6
5
|
interface AdaptSolanaWalletOptions {
|
|
7
6
|
chain?: SolanaChain;
|
|
8
7
|
account?: WalletAccount;
|
|
9
8
|
onChange?: () => void;
|
|
10
9
|
}
|
|
10
|
+
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
11
|
+
|
|
12
|
+
declare const SOLANA_CHAINS: readonly SolanaChain[];
|
|
11
13
|
declare function getSolanaChain(cluster: SolanaCluster): SolanaChain;
|
|
14
|
+
|
|
15
|
+
declare const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
12
16
|
declare function isSolanaStandardWallet(wallet: Wallet): boolean;
|
|
13
17
|
declare function getRegisteredSolanaWallets(): SolanaWalletInfo[];
|
|
14
18
|
declare function subscribeSolanaWallets(listener: () => void): () => void;
|
|
15
|
-
declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
|
|
16
19
|
|
|
17
|
-
export { SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
20
|
+
export { SOLANA_CHAINS, SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
18
21
|
export type { AdaptSolanaWalletOptions };
|
package/dist/wallet-standard.mjs
CHANGED
|
@@ -1,213 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
const SOLANA_CHAINS = [
|
|
8
|
-
"solana:mainnet",
|
|
9
|
-
"solana:testnet",
|
|
10
|
-
"solana:devnet",
|
|
11
|
-
"solana:localnet"
|
|
12
|
-
];
|
|
13
|
-
const SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME = "Mobile Wallet Adapter";
|
|
14
|
-
function getSolanaChain(cluster) {
|
|
15
|
-
if (cluster === "mainnet-beta") {
|
|
16
|
-
return "solana:mainnet";
|
|
17
|
-
}
|
|
18
|
-
return `solana:${cluster}`;
|
|
19
|
-
}
|
|
20
|
-
function isSolanaStandardWallet(wallet) {
|
|
21
|
-
return StandardConnect in wallet.features && StandardDisconnect in wallet.features && wallet.chains.some((chain) => SOLANA_CHAINS.includes(chain));
|
|
22
|
-
}
|
|
23
|
-
function getRegisteredSolanaWallets() {
|
|
24
|
-
if (typeof window === "undefined") {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
return getWallets().get().filter(isSolanaStandardWallet).map(createSolanaWalletInfo);
|
|
28
|
-
}
|
|
29
|
-
function subscribeSolanaWallets(listener) {
|
|
30
|
-
if (typeof window === "undefined") {
|
|
31
|
-
return () => {
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
const wallets = getWallets();
|
|
35
|
-
const offRegister = wallets.on("register", listener);
|
|
36
|
-
const offUnregister = wallets.on("unregister", listener);
|
|
37
|
-
return () => {
|
|
38
|
-
offRegister();
|
|
39
|
-
offUnregister();
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function adaptSolanaStandardWallet(walletInfo, options = {}) {
|
|
43
|
-
const wallet = walletInfo.wallet;
|
|
44
|
-
let accounts = wallet.accounts;
|
|
45
|
-
let account = options.account;
|
|
46
|
-
let allowAccountUpdates = Boolean(options.account);
|
|
47
|
-
let connecting = false;
|
|
48
|
-
let disconnecting = false;
|
|
49
|
-
let manuallyDisconnected = false;
|
|
50
|
-
const eventsFeature = wallet.features[StandardEvents];
|
|
51
|
-
eventsFeature?.on("change", (properties) => {
|
|
52
|
-
if (properties.accounts) {
|
|
53
|
-
accounts = properties.accounts;
|
|
54
|
-
account = allowAccountUpdates && !manuallyDisconnected ? getSolanaAccount(accounts, options.chain) : void 0;
|
|
55
|
-
options.onChange?.();
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
return {
|
|
59
|
-
platform: walletInfo.platform,
|
|
60
|
-
source: walletInfo.source,
|
|
61
|
-
get publicKey() {
|
|
62
|
-
return account ? new PublicKey(account.publicKey) : null;
|
|
63
|
-
},
|
|
64
|
-
get connected() {
|
|
65
|
-
return Boolean(account);
|
|
66
|
-
},
|
|
67
|
-
get connecting() {
|
|
68
|
-
return connecting;
|
|
69
|
-
},
|
|
70
|
-
get disconnecting() {
|
|
71
|
-
return disconnecting;
|
|
72
|
-
},
|
|
73
|
-
async connect() {
|
|
74
|
-
connecting = true;
|
|
75
|
-
manuallyDisconnected = false;
|
|
76
|
-
options.onChange?.();
|
|
77
|
-
try {
|
|
78
|
-
const feature = wallet.features[StandardConnect];
|
|
79
|
-
const result = await feature.connect();
|
|
80
|
-
accounts = result.accounts;
|
|
81
|
-
allowAccountUpdates = true;
|
|
82
|
-
account = getSolanaAccount(accounts, options.chain);
|
|
83
|
-
if (!account) {
|
|
84
|
-
throw new Error("Solana wallet did not authorize a Solana account");
|
|
85
|
-
}
|
|
86
|
-
} finally {
|
|
87
|
-
connecting = false;
|
|
88
|
-
options.onChange?.();
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
async disconnect() {
|
|
92
|
-
const feature = wallet.features[StandardDisconnect];
|
|
93
|
-
disconnecting = true;
|
|
94
|
-
manuallyDisconnected = true;
|
|
95
|
-
allowAccountUpdates = false;
|
|
96
|
-
account = void 0;
|
|
97
|
-
options.onChange?.();
|
|
98
|
-
try {
|
|
99
|
-
await feature.disconnect();
|
|
100
|
-
accounts = [];
|
|
101
|
-
account = void 0;
|
|
102
|
-
} catch (error) {
|
|
103
|
-
manuallyDisconnected = false;
|
|
104
|
-
allowAccountUpdates = true;
|
|
105
|
-
account = getSolanaAccount(accounts, options.chain);
|
|
106
|
-
throw error;
|
|
107
|
-
} finally {
|
|
108
|
-
disconnecting = false;
|
|
109
|
-
options.onChange?.();
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
signTransaction: hasSignTransaction(wallet) ? async (transaction) => {
|
|
113
|
-
const activeAccount = getActiveAccount(account);
|
|
114
|
-
const [result] = await wallet.features[SolanaSignTransaction].signTransaction({
|
|
115
|
-
account: activeAccount,
|
|
116
|
-
transaction: serializeTransaction(transaction),
|
|
117
|
-
chain: options.chain
|
|
118
|
-
});
|
|
119
|
-
if (!result) {
|
|
120
|
-
throw new Error("Solana wallet did not return a signed transaction");
|
|
121
|
-
}
|
|
122
|
-
return deserializeTransaction(transaction, result.signedTransaction);
|
|
123
|
-
} : void 0,
|
|
124
|
-
signAllTransactions: hasSignTransaction(wallet) ? async (transactions) => {
|
|
125
|
-
const activeAccount = getActiveAccount(account);
|
|
126
|
-
const results = await wallet.features[SolanaSignTransaction].signTransaction(
|
|
127
|
-
...transactions.map((transaction) => ({
|
|
128
|
-
account: activeAccount,
|
|
129
|
-
transaction: serializeTransaction(transaction),
|
|
130
|
-
chain: options.chain
|
|
131
|
-
}))
|
|
132
|
-
);
|
|
133
|
-
return results.map(
|
|
134
|
-
(result, index) => deserializeTransaction(transactions[index], result.signedTransaction)
|
|
135
|
-
);
|
|
136
|
-
} : void 0,
|
|
137
|
-
signAndSendTransaction: hasSignAndSendTransaction(wallet) ? async (transaction, sendOptions) => {
|
|
138
|
-
const activeAccount = getActiveAccount(account);
|
|
139
|
-
const [result] = await wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({
|
|
140
|
-
account: activeAccount,
|
|
141
|
-
transaction: serializeTransaction(transaction),
|
|
142
|
-
chain: options.chain ?? getSolanaAccountChain(activeAccount),
|
|
143
|
-
options: sendOptions
|
|
144
|
-
});
|
|
145
|
-
if (!result) {
|
|
146
|
-
throw new Error("Solana wallet did not return a transaction signature");
|
|
147
|
-
}
|
|
148
|
-
return { signature: bs58.encode(result.signature) };
|
|
149
|
-
} : void 0
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
function createSolanaWalletInfo(wallet) {
|
|
153
|
-
const isMobileWallet = wallet.name === SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME;
|
|
154
|
-
return {
|
|
155
|
-
name: wallet.name,
|
|
156
|
-
icon: wallet.icon,
|
|
157
|
-
chains: wallet.chains,
|
|
158
|
-
platform: isMobileWallet ? "mobile" : "browser",
|
|
159
|
-
source: isMobileWallet ? "mobile-wallet-adapter" : "wallet-standard",
|
|
160
|
-
appUrl: getWalletUrl(wallet),
|
|
161
|
-
accounts: wallet.accounts.map((account) => ({
|
|
162
|
-
address: account.address,
|
|
163
|
-
publicKey: Uint8Array.from(account.publicKey),
|
|
164
|
-
chains: account.chains,
|
|
165
|
-
label: account.label,
|
|
166
|
-
icon: account.icon
|
|
167
|
-
})),
|
|
168
|
-
wallet
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
function getWalletUrl(wallet) {
|
|
172
|
-
return "url" in wallet && typeof wallet.url === "string" ? wallet.url : void 0;
|
|
173
|
-
}
|
|
174
|
-
function getSolanaAccount(accounts, chain) {
|
|
175
|
-
return accounts.find((account) => account.chains.some((accountChain) => accountChain === chain)) ?? accounts.find(
|
|
176
|
-
(account) => account.chains.some((accountChain) => SOLANA_CHAINS.includes(accountChain))
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
function getActiveAccount(account) {
|
|
180
|
-
if (!account) {
|
|
181
|
-
throw new Error("Solana wallet is not connected");
|
|
182
|
-
}
|
|
183
|
-
return account;
|
|
184
|
-
}
|
|
185
|
-
function getSolanaAccountChain(account) {
|
|
186
|
-
const chain = account.chains.find(
|
|
187
|
-
(accountChain) => SOLANA_CHAINS.includes(accountChain)
|
|
188
|
-
);
|
|
189
|
-
if (!chain) {
|
|
190
|
-
throw new Error("Solana wallet account does not support a Solana chain");
|
|
191
|
-
}
|
|
192
|
-
return chain;
|
|
193
|
-
}
|
|
194
|
-
function hasSignTransaction(wallet) {
|
|
195
|
-
return SolanaSignTransaction in wallet.features;
|
|
196
|
-
}
|
|
197
|
-
function hasSignAndSendTransaction(wallet) {
|
|
198
|
-
return SolanaSignAndSendTransaction in wallet.features;
|
|
199
|
-
}
|
|
200
|
-
function serializeTransaction(transaction) {
|
|
201
|
-
if (transaction instanceof Transaction) {
|
|
202
|
-
return transaction.serialize({ requireAllSignatures: false, verifySignatures: false });
|
|
203
|
-
}
|
|
204
|
-
return transaction.serialize();
|
|
205
|
-
}
|
|
206
|
-
function deserializeTransaction(source, bytes) {
|
|
207
|
-
if (source instanceof Transaction) {
|
|
208
|
-
return Transaction.from(bytes);
|
|
209
|
-
}
|
|
210
|
-
return VersionedTransaction.deserialize(bytes);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
export { SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets };
|
|
1
|
+
export { S as SOLANA_CHAINS, a as SOLANA_MOBILE_WALLET_ADAPTER_WALLET_NAME, b as adaptSolanaStandardWallet, g as getRegisteredSolanaWallets, c as getSolanaChain, i as isSolanaStandardWallet, s as subscribeSolanaWallets } from './shared/core.D7olTUN_.mjs';
|
|
2
|
+
import '@wallet-standard/features';
|
|
3
|
+
import '@solana/wallet-standard-features';
|
|
4
|
+
import '@solana/web3-compat';
|
|
5
|
+
import 'bs58';
|
|
6
|
+
import '@wallet-standard/app';
|