FRE-600: Fix code review blockers

- Consolidated duplicate UndoManagers to single instance
- Fixed connection promise to only resolve on 'connected' status
- Fixed WebSocketProvider import (WebsocketProvider)
- Added proper doc.destroy() cleanup
- Renamed isPresenceInitialized property to avoid conflict

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-25 00:08:01 -04:00
parent 65b552bb08
commit 7c684a42cc
48450 changed files with 5679671 additions and 383 deletions

View File

@@ -0,0 +1,397 @@
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _StandardWalletAdapter_instances, _StandardWalletAdapter_account, _StandardWalletAdapter_publicKey, _StandardWalletAdapter_connecting, _StandardWalletAdapter_disconnecting, _StandardWalletAdapter_off, _StandardWalletAdapter_supportedTransactionVersions, _StandardWalletAdapter_wallet, _StandardWalletAdapter_readyState, _StandardWalletAdapter_connect, _StandardWalletAdapter_connected, _StandardWalletAdapter_disconnected, _StandardWalletAdapter_reset, _StandardWalletAdapter_changed, _StandardWalletAdapter_signTransaction, _StandardWalletAdapter_signAllTransactions, _StandardWalletAdapter_signMessage, _StandardWalletAdapter_signIn;
import { BaseWalletAdapter, isVersionedTransaction, WalletAccountError, WalletConfigError, WalletConnectionError, WalletDisconnectedError, WalletDisconnectionError, WalletError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignInError, WalletSignMessageError, WalletSignTransactionError, } from '@solana/wallet-adapter-base';
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction, } from '@solana/wallet-standard-features';
import { getChainForEndpoint, getCommitment } from '@solana/wallet-standard-util';
import { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';
import { StandardConnect, StandardDisconnect, StandardEvents, } from '@wallet-standard/features';
import { arraysEqual } from '@wallet-standard/wallet';
import bs58 from 'bs58';
/** TODO: docs */
export class StandardWalletAdapter extends BaseWalletAdapter {
get name() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").name;
}
get url() {
return 'https://github.com/solana-labs/wallet-standard';
}
get icon() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").icon;
}
get readyState() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_readyState, "f");
}
get publicKey() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_publicKey, "f");
}
get connecting() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_connecting, "f");
}
get supportedTransactionVersions() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_supportedTransactionVersions, "f");
}
get wallet() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f");
}
get standard() {
return true;
}
constructor({ wallet }) {
super();
_StandardWalletAdapter_instances.add(this);
_StandardWalletAdapter_account.set(this, void 0);
_StandardWalletAdapter_publicKey.set(this, void 0);
_StandardWalletAdapter_connecting.set(this, void 0);
_StandardWalletAdapter_disconnecting.set(this, void 0);
_StandardWalletAdapter_off.set(this, void 0);
_StandardWalletAdapter_supportedTransactionVersions.set(this, void 0);
_StandardWalletAdapter_wallet.set(this, void 0);
_StandardWalletAdapter_readyState.set(this, typeof window === 'undefined' || typeof document === 'undefined'
? WalletReadyState.Unsupported
: WalletReadyState.Installed);
_StandardWalletAdapter_changed.set(this, (properties) => {
// If accounts have changed on the wallet, reflect this on the adapter.
if ('accounts' in properties) {
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").accounts[0];
// If the adapter isn't connected, or is disconnecting, or the first account hasn't changed, do nothing.
if (__classPrivateFieldGet(this, _StandardWalletAdapter_account, "f") && !__classPrivateFieldGet(this, _StandardWalletAdapter_disconnecting, "f") && account !== __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f")) {
// If there's a connected account, connect the adapter. Otherwise, disconnect it.
if (account) {
// Connect the adapter.
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_connected).call(this, account);
}
else {
// Emit an error because the wallet spontaneously disconnected.
this.emit('error', new WalletDisconnectedError());
// Disconnect the adapter.
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_disconnected).call(this);
}
}
}
// After reflecting account changes, if features have changed on the wallet, reflect this on the adapter.
if ('features' in properties) {
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_reset).call(this);
}
});
__classPrivateFieldSet(this, _StandardWalletAdapter_wallet, wallet, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_account, null, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_publicKey, null, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_connecting, false, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_disconnecting, false, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_off, __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[StandardEvents].on('change', __classPrivateFieldGet(this, _StandardWalletAdapter_changed, "f")), "f");
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_reset).call(this);
}
destroy() {
__classPrivateFieldSet(this, _StandardWalletAdapter_account, null, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_publicKey, null, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_connecting, false, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_disconnecting, false, "f");
const off = __classPrivateFieldGet(this, _StandardWalletAdapter_off, "f");
if (off) {
__classPrivateFieldSet(this, _StandardWalletAdapter_off, null, "f");
off();
}
}
async autoConnect() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_connect).call(this, { silent: true });
}
async connect() {
return __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_connect).call(this);
}
async disconnect() {
if (StandardDisconnect in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features) {
try {
__classPrivateFieldSet(this, _StandardWalletAdapter_disconnecting, true, "f");
await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[StandardDisconnect].disconnect();
}
catch (error) {
this.emit('error', new WalletDisconnectionError(error?.message, error));
}
finally {
__classPrivateFieldSet(this, _StandardWalletAdapter_disconnecting, false, "f");
}
}
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_disconnected).call(this);
}
async sendTransaction(transaction, connection, options = {}) {
try {
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f");
if (!account)
throw new WalletNotConnectedError();
let feature;
if (SolanaSignAndSendTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features) {
if (account.features.includes(SolanaSignAndSendTransaction)) {
feature = SolanaSignAndSendTransaction;
}
else if (SolanaSignTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features &&
account.features.includes(SolanaSignTransaction)) {
feature = SolanaSignTransaction;
}
else {
throw new WalletAccountError();
}
}
else if (SolanaSignTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features) {
if (!account.features.includes(SolanaSignTransaction))
throw new WalletAccountError();
feature = SolanaSignTransaction;
}
else {
throw new WalletConfigError();
}
const chain = getChainForEndpoint(connection.rpcEndpoint);
if (!account.chains.includes(chain))
throw new WalletSendTransactionError();
try {
const { signers, ...sendOptions } = options;
let serializedTransaction;
if (isVersionedTransaction(transaction)) {
signers?.length && transaction.sign(signers);
serializedTransaction = transaction.serialize();
}
else {
transaction = (await this.prepareTransaction(transaction, connection, sendOptions));
signers?.length && transaction.partialSign(...signers);
serializedTransaction = new Uint8Array(transaction.serialize({
requireAllSignatures: false,
verifySignatures: false,
}));
}
if (feature === SolanaSignAndSendTransaction) {
const [output] = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignAndSendTransaction].signAndSendTransaction({
account,
chain,
transaction: serializedTransaction,
options: {
preflightCommitment: getCommitment(sendOptions.preflightCommitment || connection.commitment),
skipPreflight: sendOptions.skipPreflight,
maxRetries: sendOptions.maxRetries,
minContextSlot: sendOptions.minContextSlot,
},
});
return bs58.encode(output.signature);
}
else {
const [output] = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignTransaction].signTransaction({
account,
chain,
transaction: serializedTransaction,
options: {
preflightCommitment: getCommitment(sendOptions.preflightCommitment || connection.commitment),
minContextSlot: sendOptions.minContextSlot,
},
});
return await connection.sendRawTransaction(output.signedTransaction, {
...sendOptions,
preflightCommitment: getCommitment(sendOptions.preflightCommitment || connection.commitment),
});
}
}
catch (error) {
if (error instanceof WalletError)
throw error;
throw new WalletSendTransactionError(error?.message, error);
}
}
catch (error) {
this.emit('error', error);
throw error;
}
}
}
_StandardWalletAdapter_account = new WeakMap(), _StandardWalletAdapter_publicKey = new WeakMap(), _StandardWalletAdapter_connecting = new WeakMap(), _StandardWalletAdapter_disconnecting = new WeakMap(), _StandardWalletAdapter_off = new WeakMap(), _StandardWalletAdapter_supportedTransactionVersions = new WeakMap(), _StandardWalletAdapter_wallet = new WeakMap(), _StandardWalletAdapter_readyState = new WeakMap(), _StandardWalletAdapter_changed = new WeakMap(), _StandardWalletAdapter_instances = new WeakSet(), _StandardWalletAdapter_connect = async function _StandardWalletAdapter_connect(input) {
try {
if (this.connected || this.connecting)
return;
if (__classPrivateFieldGet(this, _StandardWalletAdapter_readyState, "f") !== WalletReadyState.Installed)
throw new WalletNotReadyError();
__classPrivateFieldSet(this, _StandardWalletAdapter_connecting, true, "f");
if (!__classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").accounts.length) {
try {
await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[StandardConnect].connect(input);
}
catch (error) {
throw new WalletConnectionError(error?.message, error);
}
}
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").accounts[0];
if (!account)
throw new WalletAccountError();
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_connected).call(this, account);
}
catch (error) {
this.emit('error', error);
throw error;
}
finally {
__classPrivateFieldSet(this, _StandardWalletAdapter_connecting, false, "f");
}
}, _StandardWalletAdapter_connected = function _StandardWalletAdapter_connected(account) {
let publicKey;
try {
// Use account.address instead of account.publicKey since address could be a PDA
publicKey = new PublicKey(account.address);
}
catch (error) {
throw new WalletPublicKeyError(error?.message, error);
}
__classPrivateFieldSet(this, _StandardWalletAdapter_account, account, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_publicKey, publicKey, "f");
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_reset).call(this);
this.emit('connect', publicKey);
}, _StandardWalletAdapter_disconnected = function _StandardWalletAdapter_disconnected() {
__classPrivateFieldSet(this, _StandardWalletAdapter_account, null, "f");
__classPrivateFieldSet(this, _StandardWalletAdapter_publicKey, null, "f");
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_reset).call(this);
this.emit('disconnect');
}, _StandardWalletAdapter_reset = function _StandardWalletAdapter_reset() {
const supportedTransactionVersions = SolanaSignAndSendTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features
? __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignAndSendTransaction].supportedTransactionVersions
: __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignTransaction].supportedTransactionVersions;
__classPrivateFieldSet(this, _StandardWalletAdapter_supportedTransactionVersions, arraysEqual(supportedTransactionVersions, ['legacy'])
? null
: new Set(supportedTransactionVersions), "f");
if (SolanaSignTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features && __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f")?.features.includes(SolanaSignTransaction)) {
this.signTransaction = __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_signTransaction);
this.signAllTransactions = __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_signAllTransactions);
}
else {
delete this.signTransaction;
delete this.signAllTransactions;
}
if (SolanaSignMessage in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features && __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f")?.features.includes(SolanaSignMessage)) {
this.signMessage = __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_signMessage);
}
else {
delete this.signMessage;
}
if (SolanaSignIn in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features) {
this.signIn = __classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_signIn);
}
else {
delete this.signIn;
}
}, _StandardWalletAdapter_signTransaction = async function _StandardWalletAdapter_signTransaction(transaction) {
try {
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f");
if (!account)
throw new WalletNotConnectedError();
if (!(SolanaSignTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features))
throw new WalletConfigError();
if (!account.features.includes(SolanaSignTransaction))
throw new WalletAccountError();
try {
const signedTransactions = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignTransaction].signTransaction({
account,
transaction: isVersionedTransaction(transaction)
? transaction.serialize()
: new Uint8Array(transaction.serialize({
requireAllSignatures: false,
verifySignatures: false,
})),
});
const serializedTransaction = signedTransactions[0].signedTransaction;
return (isVersionedTransaction(transaction)
? VersionedTransaction.deserialize(serializedTransaction)
: Transaction.from(serializedTransaction));
}
catch (error) {
if (error instanceof WalletError)
throw error;
throw new WalletSignTransactionError(error?.message, error);
}
}
catch (error) {
this.emit('error', error);
throw error;
}
}, _StandardWalletAdapter_signAllTransactions = async function _StandardWalletAdapter_signAllTransactions(transactions) {
try {
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f");
if (!account)
throw new WalletNotConnectedError();
if (!(SolanaSignTransaction in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features))
throw new WalletConfigError();
if (!account.features.includes(SolanaSignTransaction))
throw new WalletAccountError();
try {
const signedTransactions = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignTransaction].signTransaction(...transactions.map((transaction) => ({
account,
transaction: isVersionedTransaction(transaction)
? transaction.serialize()
: new Uint8Array(transaction.serialize({
requireAllSignatures: false,
verifySignatures: false,
})),
})));
return transactions.map((transaction, index) => {
const signedTransaction = signedTransactions[index].signedTransaction;
return (isVersionedTransaction(transaction)
? VersionedTransaction.deserialize(signedTransaction)
: Transaction.from(signedTransaction));
});
}
catch (error) {
throw new WalletSignTransactionError(error?.message, error);
}
}
catch (error) {
this.emit('error', error);
throw error;
}
}, _StandardWalletAdapter_signMessage = async function _StandardWalletAdapter_signMessage(message) {
try {
const account = __classPrivateFieldGet(this, _StandardWalletAdapter_account, "f");
if (!account)
throw new WalletNotConnectedError();
if (!(SolanaSignMessage in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features))
throw new WalletConfigError();
if (!account.features.includes(SolanaSignMessage))
throw new WalletAccountError();
try {
const signedMessages = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignMessage].signMessage({
account,
message,
});
return signedMessages[0].signature;
}
catch (error) {
throw new WalletSignMessageError(error?.message, error);
}
}
catch (error) {
this.emit('error', error);
throw error;
}
}, _StandardWalletAdapter_signIn = async function _StandardWalletAdapter_signIn(input = {}) {
try {
if (!(SolanaSignIn in __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features))
throw new WalletConfigError();
let output;
try {
[output] = await __classPrivateFieldGet(this, _StandardWalletAdapter_wallet, "f").features[SolanaSignIn].signIn(input);
}
catch (error) {
throw new WalletSignInError(error?.message, error);
}
if (!output)
throw new WalletSignInError();
__classPrivateFieldGet(this, _StandardWalletAdapter_instances, "m", _StandardWalletAdapter_connected).call(this, output.account);
return output;
}
catch (error) {
this.emit('error', error);
throw error;
}
};
//# sourceMappingURL=adapter.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
export * from './adapter.js';
export * from './types.js';
export * from './wallet.js';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}

View File

@@ -0,0 +1 @@
{"root":["../../src/adapter.ts","../../src/index.ts","../../src/types.ts","../../src/wallet.ts"],"version":"5.7.3"}

View File

@@ -0,0 +1,8 @@
import { isWalletAdapterCompatibleStandardWallet, } from '@solana/wallet-adapter-base';
/**
* @deprecated Use `isWalletAdapterCompatibleStandardWallet` from `@solana/wallet-adapter-base` instead.
*
* @group Deprecated
*/
export const isWalletAdapterCompatibleWallet = isWalletAdapterCompatibleStandardWallet;
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,uCAAuC,GAG1C,MAAM,6BAA6B,CAAC;AAgBrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,uCAAuC,CAAC"}

View File

@@ -0,0 +1,349 @@
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _SolanaWalletAdapterWalletAccount_adapter, _SolanaWalletAdapterWallet_instances, _SolanaWalletAdapterWallet_listeners, _SolanaWalletAdapterWallet_adapter, _SolanaWalletAdapterWallet_supportedTransactionVersions, _SolanaWalletAdapterWallet_chain, _SolanaWalletAdapterWallet_endpoint, _SolanaWalletAdapterWallet_account, _SolanaWalletAdapterWallet_connected, _SolanaWalletAdapterWallet_disconnected, _SolanaWalletAdapterWallet_connect, _SolanaWalletAdapterWallet_disconnect, _SolanaWalletAdapterWallet_on, _SolanaWalletAdapterWallet_emit, _SolanaWalletAdapterWallet_off, _SolanaWalletAdapterWallet_deserializeTransaction, _SolanaWalletAdapterWallet_signAndSendTransaction, _SolanaWalletAdapterWallet_signTransaction, _SolanaWalletAdapterWallet_signMessage, _SolanaWalletAdapterWallet_signIn;
import { isVersionedTransaction, WalletReadyState } from '@solana/wallet-adapter-base';
import { isSolanaChain } from '@solana/wallet-standard-chains';
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction, } from '@solana/wallet-standard-features';
import { getEndpointForChain } from '@solana/wallet-standard-util';
import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
import { getWallets } from '@wallet-standard/app';
import { StandardConnect, StandardDisconnect, StandardEvents, } from '@wallet-standard/features';
import { arraysEqual, bytesEqual, ReadonlyWalletAccount } from '@wallet-standard/wallet';
import bs58 from 'bs58';
/** TODO: docs */
export class SolanaWalletAdapterWalletAccount extends ReadonlyWalletAccount {
constructor({ adapter, address, publicKey, chains, }) {
const features = [SolanaSignAndSendTransaction];
if ('signTransaction' in adapter) {
features.push(SolanaSignTransaction);
}
if ('signMessage' in adapter) {
features.push(SolanaSignMessage);
}
if ('signIn' in adapter) {
features.push(SolanaSignIn);
}
super({ address, publicKey, chains, features });
// eslint-disable-next-line no-unused-private-class-members
_SolanaWalletAdapterWalletAccount_adapter.set(this, void 0);
if (new.target === SolanaWalletAdapterWalletAccount) {
Object.freeze(this);
}
__classPrivateFieldSet(this, _SolanaWalletAdapterWalletAccount_adapter, adapter, "f");
}
}
_SolanaWalletAdapterWalletAccount_adapter = new WeakMap();
/** TODO: docs */
export class SolanaWalletAdapterWallet {
get version() {
return '1.0.0';
}
get name() {
return __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").name;
}
get icon() {
return __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").icon;
}
get chains() {
return [__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_chain, "f")];
}
get features() {
const features = {
[StandardConnect]: {
version: '1.0.0',
connect: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_connect, "f"),
},
[StandardDisconnect]: {
version: '1.0.0',
disconnect: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_disconnect, "f"),
},
[StandardEvents]: {
version: '1.0.0',
on: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_on, "f"),
},
[SolanaSignAndSendTransaction]: {
version: '1.0.0',
supportedTransactionVersions: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_supportedTransactionVersions, "f"),
signAndSendTransaction: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signAndSendTransaction, "f"),
},
};
let signTransactionFeature;
if ('signTransaction' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")) {
signTransactionFeature = {
[SolanaSignTransaction]: {
version: '1.0.0',
supportedTransactionVersions: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_supportedTransactionVersions, "f"),
signTransaction: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signTransaction, "f"),
},
};
}
let signMessageFeature;
if ('signMessage' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")) {
signMessageFeature = {
[SolanaSignMessage]: {
version: '1.0.0',
signMessage: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signMessage, "f"),
},
};
}
let signInFeature;
if ('signIn' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")) {
signInFeature = {
[SolanaSignIn]: {
version: '1.0.0',
signIn: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signIn, "f"),
},
};
}
return { ...features, ...signTransactionFeature, ...signMessageFeature };
}
get accounts() {
return __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f") ? [__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f")] : [];
}
get endpoint() {
return __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_endpoint, "f");
}
constructor(adapter, chain, endpoint) {
_SolanaWalletAdapterWallet_instances.add(this);
_SolanaWalletAdapterWallet_listeners.set(this, {});
_SolanaWalletAdapterWallet_adapter.set(this, void 0);
_SolanaWalletAdapterWallet_supportedTransactionVersions.set(this, void 0);
_SolanaWalletAdapterWallet_chain.set(this, void 0);
_SolanaWalletAdapterWallet_endpoint.set(this, void 0);
_SolanaWalletAdapterWallet_account.set(this, void 0);
_SolanaWalletAdapterWallet_connect.set(this, async ({ silent } = {}) => {
if (!silent && !__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").connected) {
await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").connect();
}
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_connected).call(this);
return { accounts: this.accounts };
});
_SolanaWalletAdapterWallet_disconnect.set(this, async () => {
await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").disconnect();
});
_SolanaWalletAdapterWallet_on.set(this, (event, listener) => {
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_listeners, "f")[event]?.push(listener) || (__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_listeners, "f")[event] = [listener]);
return () => __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_off).call(this, event, listener);
});
_SolanaWalletAdapterWallet_signAndSendTransaction.set(this, async (...inputs) => {
const outputs = [];
if (inputs.length === 1) {
const input = inputs[0];
if (input.account !== __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f"))
throw new Error('invalid account');
if (!isSolanaChain(input.chain))
throw new Error('invalid chain');
const transaction = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_deserializeTransaction).call(this, input.transaction);
const { commitment, preflightCommitment, skipPreflight, maxRetries, minContextSlot } = input.options || {};
const endpoint = getEndpointForChain(input.chain, __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_endpoint, "f"));
const connection = new Connection(endpoint, commitment || 'confirmed');
const latestBlockhash = commitment
? await connection.getLatestBlockhash({
commitment: preflightCommitment || commitment,
minContextSlot,
})
: undefined;
const signature = await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").sendTransaction(transaction, connection, {
preflightCommitment,
skipPreflight,
maxRetries,
minContextSlot,
});
if (latestBlockhash) {
await connection.confirmTransaction({
...latestBlockhash,
signature,
}, commitment || 'confirmed');
}
outputs.push({ signature: bs58.decode(signature) });
}
else if (inputs.length > 1) {
// Adapters have no `sendAllTransactions` method, so just sign and send each transaction in serial.
for (const input of inputs) {
outputs.push(...(await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signAndSendTransaction, "f").call(this, input)));
}
}
return outputs;
});
_SolanaWalletAdapterWallet_signTransaction.set(this, async (...inputs) => {
if (!('signTransaction' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")))
throw new Error('signTransaction not implemented by adapter');
const outputs = [];
if (inputs.length === 1) {
const input = inputs[0];
if (input.account !== __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f"))
throw new Error('invalid account');
if (input.chain && !isSolanaChain(input.chain))
throw new Error('invalid chain');
const transaction = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_deserializeTransaction).call(this, input.transaction);
const signedTransaction = await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").signTransaction(transaction);
const serializedTransaction = isVersionedTransaction(signedTransaction)
? signedTransaction.serialize()
: new Uint8Array(signedTransaction.serialize({
requireAllSignatures: false,
verifySignatures: false,
}));
outputs.push({ signedTransaction: serializedTransaction });
}
else if (inputs.length > 1) {
for (const input of inputs) {
if (input.account !== __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f"))
throw new Error('invalid account');
if (input.chain && !isSolanaChain(input.chain))
throw new Error('invalid chain');
}
const transactions = inputs.map(({ transaction }) => __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_deserializeTransaction).call(this, transaction));
const signedTransactions = await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").signAllTransactions(transactions);
outputs.push(...signedTransactions.map((signedTransaction) => {
const serializedTransaction = isVersionedTransaction(signedTransaction)
? signedTransaction.serialize()
: new Uint8Array(signedTransaction.serialize({
requireAllSignatures: false,
verifySignatures: false,
}));
return { signedTransaction: serializedTransaction };
}));
}
return outputs;
});
_SolanaWalletAdapterWallet_signMessage.set(this, async (...inputs) => {
if (!('signMessage' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")))
throw new Error('signMessage not implemented by adapter');
const outputs = [];
if (inputs.length === 1) {
const input = inputs[0];
if (input.account !== __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f"))
throw new Error('invalid account');
const signature = await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").signMessage(input.message);
outputs.push({ signedMessage: input.message, signature });
}
else if (inputs.length > 1) {
// Adapters have no `signAllMessages` method, so just sign each message in serial.
for (const input of inputs) {
outputs.push(...(await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_signMessage, "f").call(this, input)));
}
}
return outputs;
});
_SolanaWalletAdapterWallet_signIn.set(this, async (...inputs) => {
if (!('signIn' in __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f")))
throw new Error('signIn not implemented by adapter');
if (inputs.length > 1) {
// Adapters don't support `signIn` with multiple inputs, so just sign in with each input in serial.
const outputs = [];
for (const input of inputs) {
outputs.push(await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").signIn(input));
}
return outputs;
}
else {
return [await __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").signIn(inputs[0])];
}
});
if (new.target === SolanaWalletAdapterWallet) {
Object.freeze(this);
}
const supportedTransactionVersions = [...(adapter.supportedTransactionVersions || ['legacy'])];
if (!supportedTransactionVersions.length) {
supportedTransactionVersions.push('legacy');
}
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_adapter, adapter, "f");
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_supportedTransactionVersions, supportedTransactionVersions, "f");
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_chain, chain, "f");
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_endpoint, endpoint, "f");
adapter.on('connect', __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_connected), this);
adapter.on('disconnect', __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_disconnected), this);
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_connected).call(this);
}
destroy() {
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").off('connect', __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_connected), this);
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").off('disconnect', __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_disconnected), this);
}
}
_SolanaWalletAdapterWallet_listeners = new WeakMap(), _SolanaWalletAdapterWallet_adapter = new WeakMap(), _SolanaWalletAdapterWallet_supportedTransactionVersions = new WeakMap(), _SolanaWalletAdapterWallet_chain = new WeakMap(), _SolanaWalletAdapterWallet_endpoint = new WeakMap(), _SolanaWalletAdapterWallet_account = new WeakMap(), _SolanaWalletAdapterWallet_connect = new WeakMap(), _SolanaWalletAdapterWallet_disconnect = new WeakMap(), _SolanaWalletAdapterWallet_on = new WeakMap(), _SolanaWalletAdapterWallet_signAndSendTransaction = new WeakMap(), _SolanaWalletAdapterWallet_signTransaction = new WeakMap(), _SolanaWalletAdapterWallet_signMessage = new WeakMap(), _SolanaWalletAdapterWallet_signIn = new WeakMap(), _SolanaWalletAdapterWallet_instances = new WeakSet(), _SolanaWalletAdapterWallet_connected = function _SolanaWalletAdapterWallet_connected() {
const publicKey = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").publicKey?.toBytes();
if (publicKey) {
const address = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f").publicKey.toBase58();
const account = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f");
if (!account ||
account.address !== address ||
account.chains.includes(__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_chain, "f")) ||
!bytesEqual(account.publicKey, publicKey)) {
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_account, new SolanaWalletAdapterWalletAccount({
adapter: __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_adapter, "f"),
address,
publicKey,
chains: [__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_chain, "f")],
}), "f");
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_emit).call(this, 'change', { accounts: this.accounts });
}
}
}, _SolanaWalletAdapterWallet_disconnected = function _SolanaWalletAdapterWallet_disconnected() {
if (__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_account, "f")) {
__classPrivateFieldSet(this, _SolanaWalletAdapterWallet_account, undefined, "f");
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_instances, "m", _SolanaWalletAdapterWallet_emit).call(this, 'change', { accounts: this.accounts });
}
}, _SolanaWalletAdapterWallet_emit = function _SolanaWalletAdapterWallet_emit(event, ...args) {
// eslint-disable-next-line prefer-spread
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_listeners, "f")[event]?.forEach((listener) => listener.apply(null, args));
}, _SolanaWalletAdapterWallet_off = function _SolanaWalletAdapterWallet_off(event, listener) {
__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_listeners, "f")[event] = __classPrivateFieldGet(this, _SolanaWalletAdapterWallet_listeners, "f")[event]?.filter((existingListener) => listener !== existingListener);
}, _SolanaWalletAdapterWallet_deserializeTransaction = function _SolanaWalletAdapterWallet_deserializeTransaction(serializedTransaction) {
const transaction = VersionedTransaction.deserialize(serializedTransaction);
if (!__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_supportedTransactionVersions, "f").includes(transaction.version))
throw new Error('unsupported transaction version');
if (transaction.version === 'legacy' && arraysEqual(__classPrivateFieldGet(this, _SolanaWalletAdapterWallet_supportedTransactionVersions, "f"), ['legacy']))
return Transaction.from(serializedTransaction);
return transaction;
};
/** TODO: docs */
export function registerWalletAdapter(adapter, chain, endpoint, match = (wallet) => wallet.name === adapter.name) {
const { register, get, on } = getWallets();
const destructors = [];
function destroy() {
destructors.forEach((destroy) => destroy());
destructors.length = 0;
}
function setup() {
// If the adapter is unsupported, or a standard wallet that matches it has already been registered, do nothing.
if (adapter.readyState === WalletReadyState.Unsupported || get().some(match))
return true;
// If the adapter isn't ready, try again later.
const ready = adapter.readyState === WalletReadyState.Installed || adapter.readyState === WalletReadyState.Loadable;
if (ready) {
const wallet = new SolanaWalletAdapterWallet(adapter, chain, endpoint);
destructors.push(() => wallet.destroy());
// Register the adapter wrapped as a standard wallet, and receive a function to unregister the adapter.
destructors.push(register(wallet));
// Whenever a standard wallet is registered ...
destructors.push(on('register', (...wallets) => {
// ... check if it matches the adapter.
if (wallets.some(match)) {
// If it does, remove the event listener and unregister the adapter.
destroy();
}
}));
}
return ready;
}
if (!setup()) {
function listener() {
if (setup()) {
adapter.off('readyStateChange', listener);
}
}
adapter.on('readyStateChange', listener);
destructors.push(() => adapter.off('readyStateChange', listener));
}
return destroy;
}
//# sourceMappingURL=wallet.js.map

File diff suppressed because one or more lines are too long