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,349 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
let _solana_web3_js = require("@solana/web3.js");
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
let _wallet_standard_core = require("@wallet-standard/core");
//#region src/base64Utils.ts
function fromUint8Array(byteArray) {
return window.btoa(String.fromCharCode.call(null, ...byteArray));
}
//#endregion
//#region src/getIsSupported.ts
function getIsSupported() {
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
}
//#endregion
//#region src/adapter.ts
const SolanaMobileWalletAdapterWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterWalletName;
const SolanaMobileWalletAdapterRemoteWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterRemoteWalletName;
const SIGNATURE_LENGTH_IN_BYTES = 64;
function isVersionedTransaction(transaction) {
return "version" in transaction;
}
function chainOrClusterToChainId(chain) {
switch (chain) {
case "mainnet-beta": return "solana:mainnet";
case "testnet": return "solana:testnet";
case "devnet": return "solana:devnet";
default: return chain;
}
}
function getErrorMessage(error) {
return error instanceof Error ? error.message : "Unknown error";
}
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
supportedTransactionVersions = new Set(["legacy", 0]);
name;
icon;
url;
#wallet;
#connecting = false;
#readyState = getIsSupported() ? _solana_wallet_adapter_base.WalletReadyState.Loadable : _solana_wallet_adapter_base.WalletReadyState.Unsupported;
#accountSelector;
#selectedAccount;
#publicKey;
#handleChangeEvent = async (properties) => {
if (properties.accounts && properties.accounts.length > 0) {
this.#declareWalletAsInstalled();
const nextSelectedAccount = await this.#accountSelector(properties.accounts);
if (nextSelectedAccount !== this.#selectedAccount) {
this.#selectedAccount = nextSelectedAccount;
this.#publicKey = void 0;
this.emit("connect", this.publicKey);
}
}
};
constructor(wallet, config) {
super();
this.#accountSelector = async (accounts) => {
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))));
return accounts.find(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
};
this.#wallet = wallet;
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
this.name = this.#wallet.name;
this.icon = this.#wallet.icon;
this.url = this.#wallet.url;
}
get publicKey() {
if (!this.#publicKey && this.#selectedAccount) try {
this.#publicKey = new _solana_web3_js.PublicKey(this.#selectedAccount.publicKey);
} catch (e) {
throw new _solana_wallet_adapter_base.WalletPublicKeyError(e instanceof Error && e?.message || "Unknown error", e);
}
return this.#publicKey ?? null;
}
get connected() {
return this.#wallet.connected;
}
get connecting() {
return this.#connecting;
}
get readyState() {
return this.#readyState;
}
/** @deprecated Use `autoConnect()` instead. */
async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED() {
return await this.autoConnect();
}
async autoConnect() {
this.#connect(true);
}
async connect() {
this.#connect();
}
async #connect(autoConnect = false) {
if (this.connecting || this.connected) return;
return await this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: autoConnect });
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
/** @deprecated Use `connect()` or `autoConnect()` instead. */
async performAuthorization(signInPayload) {
try {
const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;
if (cachedAuthorizationResult) {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: true });
return cachedAuthorizationResult;
}
if (signInPayload) await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn(signInPayload);
else await this.#wallet.features[_wallet_standard_core.StandardConnect].connect();
return await await this.#wallet.cachedAuthorizationResult;
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
}
}
async disconnect() {
return await this.#runWithGuard(async () => {
this.#connecting = false;
this.#publicKey = void 0;
this.#selectedAccount = void 0;
await this.#wallet.features[_wallet_standard_core.StandardDisconnect].disconnect();
this.emit("disconnect");
});
}
async signIn(input) {
return this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
const outputs = await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn({
...input,
domain: input?.domain ?? window.location.host
});
if (outputs.length > 0) return outputs[0];
else throw new Error("Sign in failed, no sign in result returned by wallet");
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
async signMessage(message) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
return (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignMessage].signMessage({
account,
message
}))[0].signature;
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
}
});
}
async sendTransaction(transaction, connection, options) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
function getTargetCommitment() {
let targetCommitment;
switch (connection.commitment) {
case "confirmed":
case "finalized":
case "processed":
targetCommitment = connection.commitment;
break;
default: targetCommitment = "finalized";
}
let targetPreflightCommitment;
switch (options?.preflightCommitment) {
case "confirmed":
case "finalized":
case "processed":
targetPreflightCommitment = options.preflightCommitment;
break;
case void 0:
targetPreflightCommitment = targetCommitment;
break;
default: targetPreflightCommitment = "finalized";
}
return (targetPreflightCommitment === "finalized" ? 2 : targetPreflightCommitment === "confirmed" ? 1 : 0) < (targetCommitment === "finalized" ? 2 : targetCommitment === "confirmed" ? 1 : 0) ? targetPreflightCommitment : targetCommitment;
}
if (_solana_wallet_standard_features.SolanaSignAndSendTransaction in this.#wallet.features) {
const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization.chain);
const [signature] = (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignAndSendTransaction].signAndSendTransaction({
account,
transaction: transaction.serialize(),
chain,
options: options ? {
skipPreflight: options.skipPreflight,
maxRetries: options.maxRetries
} : void 0
})).map((output) => {
return fromUint8Array(output.signature);
});
return signature;
} else {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
if (isVersionedTransaction(signedTransaction)) return await connection.sendTransaction(signedTransaction);
else {
const serializedTransaction = signedTransaction.serialize();
return await connection.sendRawTransaction(serializedTransaction, {
...options,
preflightCommitment: getTargetCommitment()
});
}
}
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
}
});
}
async signTransaction(transaction) {
return await this.#runWithGuard(async () => {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
return signedTransaction;
});
}
async signAllTransactions(transactions) {
return await this.#runWithGuard(async () => {
return await this.#performSignTransactions(transactions);
});
}
#declareWalletAsInstalled() {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed) this.emit("readyStateChange", this.#readyState = _solana_wallet_adapter_base.WalletReadyState.Installed);
}
#assertIsAuthorized() {
if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new _solana_wallet_adapter_base.WalletNotConnectedError();
return this.#selectedAccount;
}
async #performSignTransactions(transactions) {
const account = this.#assertIsAuthorized();
try {
if (_solana_wallet_standard_features.SolanaSignTransaction in this.#wallet.features) return this.#wallet.features[_solana_wallet_standard_features.SolanaSignTransaction].signTransaction(...transactions.map((value) => {
return {
account,
transaction: value.serialize()
};
})).then((outputs) => {
return outputs.map((output) => {
const byteArray = output.signedTransaction;
const messageOffset = byteArray[0] * SIGNATURE_LENGTH_IN_BYTES + 1;
if (_solana_web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length)) === "legacy") return _solana_web3_js.Transaction.from(byteArray);
else return _solana_web3_js.VersionedTransaction.deserialize(byteArray);
});
});
else throw new Error("Connected wallet does not support signing transactions");
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
}
}
async #runWithGuard(callback) {
try {
return await callback();
} catch (e) {
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
throw e;
}
}
};
var LocalSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain ?? config.cluster);
super(new _solana_mobile_wallet_standard_mobile.LocalSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var RemoteSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain);
super(new _solana_mobile_wallet_standard_mobile.RemoteSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
remoteHostAuthority: config.remoteHostAuthority,
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var SolanaMobileWalletAdapter = class extends LocalSolanaMobileWalletAdapter {};
//#endregion
//#region src/createDefaultAddressSelector.ts
function createDefaultAddressSelector() {
return { async select(addresses) {
return addresses[0];
} };
}
//#endregion
//#region src/createDefaultAuthorizationResultCache.ts
function createDefaultAuthorizationResultCache() {
return (0, _solana_mobile_wallet_standard_mobile.createDefaultAuthorizationCache)();
}
//#endregion
//#region src/createDefaultWalletNotFoundHandler.ts
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
}
function createDefaultWalletNotFoundHandler() {
return defaultWalletNotFoundHandler;
}
//#endregion
exports.LocalSolanaMobileWalletAdapter = LocalSolanaMobileWalletAdapter;
exports.RemoteSolanaMobileWalletAdapter = RemoteSolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapter = SolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapterRemoteWalletName = SolanaMobileWalletAdapterRemoteWalletName;
exports.SolanaMobileWalletAdapterWalletName = SolanaMobileWalletAdapterWalletName;
exports.createDefaultAddressSelector = createDefaultAddressSelector;
exports.createDefaultAuthorizationResultCache = createDefaultAuthorizationResultCache;
exports.createDefaultWalletNotFoundHandler = createDefaultWalletNotFoundHandler;
//# sourceMappingURL=index.browser.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,349 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
let _solana_web3_js = require("@solana/web3.js");
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
let _wallet_standard_core = require("@wallet-standard/core");
//#region src/base64Utils.ts
function fromUint8Array(byteArray) {
return window.btoa(String.fromCharCode.call(null, ...byteArray));
}
//#endregion
//#region src/getIsSupported.ts
function getIsSupported() {
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
}
//#endregion
//#region src/adapter.ts
const SolanaMobileWalletAdapterWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterWalletName;
const SolanaMobileWalletAdapterRemoteWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterRemoteWalletName;
const SIGNATURE_LENGTH_IN_BYTES = 64;
function isVersionedTransaction(transaction) {
return "version" in transaction;
}
function chainOrClusterToChainId(chain) {
switch (chain) {
case "mainnet-beta": return "solana:mainnet";
case "testnet": return "solana:testnet";
case "devnet": return "solana:devnet";
default: return chain;
}
}
function getErrorMessage(error) {
return error instanceof Error ? error.message : "Unknown error";
}
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
supportedTransactionVersions = new Set(["legacy", 0]);
name;
icon;
url;
#wallet;
#connecting = false;
#readyState = getIsSupported() ? _solana_wallet_adapter_base.WalletReadyState.Loadable : _solana_wallet_adapter_base.WalletReadyState.Unsupported;
#accountSelector;
#selectedAccount;
#publicKey;
#handleChangeEvent = async (properties) => {
if (properties.accounts && properties.accounts.length > 0) {
this.#declareWalletAsInstalled();
const nextSelectedAccount = await this.#accountSelector(properties.accounts);
if (nextSelectedAccount !== this.#selectedAccount) {
this.#selectedAccount = nextSelectedAccount;
this.#publicKey = void 0;
this.emit("connect", this.publicKey);
}
}
};
constructor(wallet, config) {
super();
this.#accountSelector = async (accounts) => {
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))));
return accounts.find(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
};
this.#wallet = wallet;
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
this.name = this.#wallet.name;
this.icon = this.#wallet.icon;
this.url = this.#wallet.url;
}
get publicKey() {
if (!this.#publicKey && this.#selectedAccount) try {
this.#publicKey = new _solana_web3_js.PublicKey(this.#selectedAccount.publicKey);
} catch (e) {
throw new _solana_wallet_adapter_base.WalletPublicKeyError(e instanceof Error && e?.message || "Unknown error", e);
}
return this.#publicKey ?? null;
}
get connected() {
return this.#wallet.connected;
}
get connecting() {
return this.#connecting;
}
get readyState() {
return this.#readyState;
}
/** @deprecated Use `autoConnect()` instead. */
async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED() {
return await this.autoConnect();
}
async autoConnect() {
this.#connect(true);
}
async connect() {
this.#connect();
}
async #connect(autoConnect = false) {
if (this.connecting || this.connected) return;
return await this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: autoConnect });
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
/** @deprecated Use `connect()` or `autoConnect()` instead. */
async performAuthorization(signInPayload) {
try {
const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;
if (cachedAuthorizationResult) {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: true });
return cachedAuthorizationResult;
}
if (signInPayload) await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn(signInPayload);
else await this.#wallet.features[_wallet_standard_core.StandardConnect].connect();
return await await this.#wallet.cachedAuthorizationResult;
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
}
}
async disconnect() {
return await this.#runWithGuard(async () => {
this.#connecting = false;
this.#publicKey = void 0;
this.#selectedAccount = void 0;
await this.#wallet.features[_wallet_standard_core.StandardDisconnect].disconnect();
this.emit("disconnect");
});
}
async signIn(input) {
return this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
const outputs = await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn({
...input,
domain: input?.domain ?? window.location.host
});
if (outputs.length > 0) return outputs[0];
else throw new Error("Sign in failed, no sign in result returned by wallet");
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
async signMessage(message) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
return (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignMessage].signMessage({
account,
message
}))[0].signature;
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
}
});
}
async sendTransaction(transaction, connection, options) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
function getTargetCommitment() {
let targetCommitment;
switch (connection.commitment) {
case "confirmed":
case "finalized":
case "processed":
targetCommitment = connection.commitment;
break;
default: targetCommitment = "finalized";
}
let targetPreflightCommitment;
switch (options?.preflightCommitment) {
case "confirmed":
case "finalized":
case "processed":
targetPreflightCommitment = options.preflightCommitment;
break;
case void 0:
targetPreflightCommitment = targetCommitment;
break;
default: targetPreflightCommitment = "finalized";
}
return (targetPreflightCommitment === "finalized" ? 2 : targetPreflightCommitment === "confirmed" ? 1 : 0) < (targetCommitment === "finalized" ? 2 : targetCommitment === "confirmed" ? 1 : 0) ? targetPreflightCommitment : targetCommitment;
}
if (_solana_wallet_standard_features.SolanaSignAndSendTransaction in this.#wallet.features) {
const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization.chain);
const [signature] = (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignAndSendTransaction].signAndSendTransaction({
account,
transaction: transaction.serialize(),
chain,
options: options ? {
skipPreflight: options.skipPreflight,
maxRetries: options.maxRetries
} : void 0
})).map((output) => {
return fromUint8Array(output.signature);
});
return signature;
} else {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
if (isVersionedTransaction(signedTransaction)) return await connection.sendTransaction(signedTransaction);
else {
const serializedTransaction = signedTransaction.serialize();
return await connection.sendRawTransaction(serializedTransaction, {
...options,
preflightCommitment: getTargetCommitment()
});
}
}
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
}
});
}
async signTransaction(transaction) {
return await this.#runWithGuard(async () => {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
return signedTransaction;
});
}
async signAllTransactions(transactions) {
return await this.#runWithGuard(async () => {
return await this.#performSignTransactions(transactions);
});
}
#declareWalletAsInstalled() {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed) this.emit("readyStateChange", this.#readyState = _solana_wallet_adapter_base.WalletReadyState.Installed);
}
#assertIsAuthorized() {
if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new _solana_wallet_adapter_base.WalletNotConnectedError();
return this.#selectedAccount;
}
async #performSignTransactions(transactions) {
const account = this.#assertIsAuthorized();
try {
if (_solana_wallet_standard_features.SolanaSignTransaction in this.#wallet.features) return this.#wallet.features[_solana_wallet_standard_features.SolanaSignTransaction].signTransaction(...transactions.map((value) => {
return {
account,
transaction: value.serialize()
};
})).then((outputs) => {
return outputs.map((output) => {
const byteArray = output.signedTransaction;
const messageOffset = byteArray[0] * SIGNATURE_LENGTH_IN_BYTES + 1;
if (_solana_web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length)) === "legacy") return _solana_web3_js.Transaction.from(byteArray);
else return _solana_web3_js.VersionedTransaction.deserialize(byteArray);
});
});
else throw new Error("Connected wallet does not support signing transactions");
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
}
}
async #runWithGuard(callback) {
try {
return await callback();
} catch (e) {
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
throw e;
}
}
};
var LocalSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain ?? config.cluster);
super(new _solana_mobile_wallet_standard_mobile.LocalSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var RemoteSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain);
super(new _solana_mobile_wallet_standard_mobile.RemoteSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
remoteHostAuthority: config.remoteHostAuthority,
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var SolanaMobileWalletAdapter = class extends LocalSolanaMobileWalletAdapter {};
//#endregion
//#region src/createDefaultAddressSelector.ts
function createDefaultAddressSelector() {
return { async select(addresses) {
return addresses[0];
} };
}
//#endregion
//#region src/createDefaultAuthorizationResultCache.ts
function createDefaultAuthorizationResultCache() {
return (0, _solana_mobile_wallet_standard_mobile.createDefaultAuthorizationCache)();
}
//#endregion
//#region src/createDefaultWalletNotFoundHandler.ts
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
}
function createDefaultWalletNotFoundHandler() {
return defaultWalletNotFoundHandler;
}
//#endregion
exports.LocalSolanaMobileWalletAdapter = LocalSolanaMobileWalletAdapter;
exports.RemoteSolanaMobileWalletAdapter = RemoteSolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapter = SolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapterRemoteWalletName = SolanaMobileWalletAdapterRemoteWalletName;
exports.SolanaMobileWalletAdapterWalletName = SolanaMobileWalletAdapterWalletName;
exports.createDefaultAddressSelector = createDefaultAddressSelector;
exports.createDefaultAuthorizationResultCache = createDefaultAuthorizationResultCache;
exports.createDefaultWalletNotFoundHandler = createDefaultWalletNotFoundHandler;
//# sourceMappingURL=index.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,387 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
//#region \0rolldown/runtime.js
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
let _solana_web3_js = require("@solana/web3.js");
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
let _wallet_standard_core = require("@wallet-standard/core");
let js_base64 = require("js-base64");
let react_native = require("react-native");
let _react_native_async_storage_async_storage = require("@react-native-async-storage/async-storage");
_react_native_async_storage_async_storage = __toESM(_react_native_async_storage_async_storage);
//#region src/__forks__/react-native/getIsSupported.ts
function getIsSupported() {
return react_native.Platform.OS === "android";
}
//#endregion
//#region src/adapter.ts
const SolanaMobileWalletAdapterWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterWalletName;
const SolanaMobileWalletAdapterRemoteWalletName = _solana_mobile_wallet_standard_mobile.SolanaMobileWalletAdapterRemoteWalletName;
const SIGNATURE_LENGTH_IN_BYTES = 64;
function isVersionedTransaction(transaction) {
return "version" in transaction;
}
function chainOrClusterToChainId(chain) {
switch (chain) {
case "mainnet-beta": return "solana:mainnet";
case "testnet": return "solana:testnet";
case "devnet": return "solana:devnet";
default: return chain;
}
}
function getErrorMessage(error) {
return error instanceof Error ? error.message : "Unknown error";
}
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
supportedTransactionVersions = new Set(["legacy", 0]);
name;
icon;
url;
#wallet;
#connecting = false;
#readyState = getIsSupported() ? _solana_wallet_adapter_base.WalletReadyState.Loadable : _solana_wallet_adapter_base.WalletReadyState.Unsupported;
#accountSelector;
#selectedAccount;
#publicKey;
#handleChangeEvent = async (properties) => {
if (properties.accounts && properties.accounts.length > 0) {
this.#declareWalletAsInstalled();
const nextSelectedAccount = await this.#accountSelector(properties.accounts);
if (nextSelectedAccount !== this.#selectedAccount) {
this.#selectedAccount = nextSelectedAccount;
this.#publicKey = void 0;
this.emit("connect", this.publicKey);
}
}
};
constructor(wallet, config) {
super();
this.#accountSelector = async (accounts) => {
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, js_base64.fromUint8Array)(new Uint8Array(publicKey))));
return accounts.find(({ publicKey }) => (0, js_base64.fromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
};
this.#wallet = wallet;
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
this.name = this.#wallet.name;
this.icon = this.#wallet.icon;
this.url = this.#wallet.url;
}
get publicKey() {
if (!this.#publicKey && this.#selectedAccount) try {
this.#publicKey = new _solana_web3_js.PublicKey(this.#selectedAccount.publicKey);
} catch (e) {
throw new _solana_wallet_adapter_base.WalletPublicKeyError(e instanceof Error && e?.message || "Unknown error", e);
}
return this.#publicKey ?? null;
}
get connected() {
return this.#wallet.connected;
}
get connecting() {
return this.#connecting;
}
get readyState() {
return this.#readyState;
}
/** @deprecated Use `autoConnect()` instead. */
async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED() {
return await this.autoConnect();
}
async autoConnect() {
this.#connect(true);
}
async connect() {
this.#connect();
}
async #connect(autoConnect = false) {
if (this.connecting || this.connected) return;
return await this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: autoConnect });
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
/** @deprecated Use `connect()` or `autoConnect()` instead. */
async performAuthorization(signInPayload) {
try {
const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;
if (cachedAuthorizationResult) {
await this.#wallet.features[_wallet_standard_core.StandardConnect].connect({ silent: true });
return cachedAuthorizationResult;
}
if (signInPayload) await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn(signInPayload);
else await this.#wallet.features[_wallet_standard_core.StandardConnect].connect();
return await await this.#wallet.cachedAuthorizationResult;
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
}
}
async disconnect() {
return await this.#runWithGuard(async () => {
this.#connecting = false;
this.#publicKey = void 0;
this.#selectedAccount = void 0;
await this.#wallet.features[_wallet_standard_core.StandardDisconnect].disconnect();
this.emit("disconnect");
});
}
async signIn(input) {
return this.#runWithGuard(async () => {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed && this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Loadable) throw new _solana_wallet_adapter_base.WalletNotReadyError();
this.#connecting = true;
try {
const outputs = await this.#wallet.features[_solana_wallet_standard_features.SolanaSignIn].signIn({
...input,
domain: input?.domain ?? window.location.host
});
if (outputs.length > 0) return outputs[0];
else throw new Error("Sign in failed, no sign in result returned by wallet");
} catch (e) {
throw new _solana_wallet_adapter_base.WalletConnectionError(e instanceof Error && e.message || "Unknown error", e);
} finally {
this.#connecting = false;
}
});
}
async signMessage(message) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
return (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignMessage].signMessage({
account,
message
}))[0].signature;
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
}
});
}
async sendTransaction(transaction, connection, options) {
return await this.#runWithGuard(async () => {
const account = this.#assertIsAuthorized();
try {
function getTargetCommitment() {
let targetCommitment;
switch (connection.commitment) {
case "confirmed":
case "finalized":
case "processed":
targetCommitment = connection.commitment;
break;
default: targetCommitment = "finalized";
}
let targetPreflightCommitment;
switch (options?.preflightCommitment) {
case "confirmed":
case "finalized":
case "processed":
targetPreflightCommitment = options.preflightCommitment;
break;
case void 0:
targetPreflightCommitment = targetCommitment;
break;
default: targetPreflightCommitment = "finalized";
}
return (targetPreflightCommitment === "finalized" ? 2 : targetPreflightCommitment === "confirmed" ? 1 : 0) < (targetCommitment === "finalized" ? 2 : targetCommitment === "confirmed" ? 1 : 0) ? targetPreflightCommitment : targetCommitment;
}
if (_solana_wallet_standard_features.SolanaSignAndSendTransaction in this.#wallet.features) {
const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization.chain);
const [signature] = (await this.#wallet.features[_solana_wallet_standard_features.SolanaSignAndSendTransaction].signAndSendTransaction({
account,
transaction: transaction.serialize(),
chain,
options: options ? {
skipPreflight: options.skipPreflight,
maxRetries: options.maxRetries
} : void 0
})).map((output) => {
return (0, js_base64.fromUint8Array)(output.signature);
});
return signature;
} else {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
if (isVersionedTransaction(signedTransaction)) return await connection.sendTransaction(signedTransaction);
else {
const serializedTransaction = signedTransaction.serialize();
return await connection.sendRawTransaction(serializedTransaction, {
...options,
preflightCommitment: getTargetCommitment()
});
}
}
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
}
});
}
async signTransaction(transaction) {
return await this.#runWithGuard(async () => {
const [signedTransaction] = await this.#performSignTransactions([transaction]);
return signedTransaction;
});
}
async signAllTransactions(transactions) {
return await this.#runWithGuard(async () => {
return await this.#performSignTransactions(transactions);
});
}
#declareWalletAsInstalled() {
if (this.#readyState !== _solana_wallet_adapter_base.WalletReadyState.Installed) this.emit("readyStateChange", this.#readyState = _solana_wallet_adapter_base.WalletReadyState.Installed);
}
#assertIsAuthorized() {
if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new _solana_wallet_adapter_base.WalletNotConnectedError();
return this.#selectedAccount;
}
async #performSignTransactions(transactions) {
const account = this.#assertIsAuthorized();
try {
if (_solana_wallet_standard_features.SolanaSignTransaction in this.#wallet.features) return this.#wallet.features[_solana_wallet_standard_features.SolanaSignTransaction].signTransaction(...transactions.map((value) => {
return {
account,
transaction: value.serialize()
};
})).then((outputs) => {
return outputs.map((output) => {
const byteArray = output.signedTransaction;
const messageOffset = byteArray[0] * SIGNATURE_LENGTH_IN_BYTES + 1;
if (_solana_web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length)) === "legacy") return _solana_web3_js.Transaction.from(byteArray);
else return _solana_web3_js.VersionedTransaction.deserialize(byteArray);
});
});
else throw new Error("Connected wallet does not support signing transactions");
} catch (error) {
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
}
}
async #runWithGuard(callback) {
try {
return await callback();
} catch (e) {
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
throw e;
}
}
};
var LocalSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain ?? config.cluster);
super(new _solana_mobile_wallet_standard_mobile.LocalSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var RemoteSolanaMobileWalletAdapter = class extends BaseSolanaMobileWalletAdapter {
constructor(config) {
const chain = chainOrClusterToChainId(config.chain);
super(new _solana_mobile_wallet_standard_mobile.RemoteSolanaMobileWalletAdapterWallet({
appIdentity: config.appIdentity,
authorizationCache: {
set: config.authorizationResultCache.set,
get: async () => {
return await config.authorizationResultCache.get();
},
clear: config.authorizationResultCache.clear
},
chains: [chain],
chainSelector: (0, _solana_mobile_wallet_standard_mobile.createDefaultChainSelector)(),
remoteHostAuthority: config.remoteHostAuthority,
onWalletNotFound: async () => {
config.onWalletNotFound(this);
}
}), {
addressSelector: config.addressSelector,
chain
});
}
};
var SolanaMobileWalletAdapter = class extends LocalSolanaMobileWalletAdapter {};
//#endregion
//#region src/createDefaultAddressSelector.ts
function createDefaultAddressSelector() {
return { async select(addresses) {
return addresses[0];
} };
}
//#endregion
//#region src/__forks__/react-native/createDefaultAuthorizationResultCache.ts
const CACHE_KEY = "SolanaMobileWalletAdapterDefaultAuthorizationCache";
function createDefaultAuthorizationResultCache() {
return {
async clear() {
try {
await _react_native_async_storage_async_storage.default.removeItem(CACHE_KEY);
} catch {}
},
async get() {
try {
return JSON.parse(await _react_native_async_storage_async_storage.default.getItem(CACHE_KEY)) || void 0;
} catch {}
},
async set(authorizationResult) {
try {
await _react_native_async_storage_async_storage.default.setItem(CACHE_KEY, JSON.stringify(authorizationResult));
} catch {}
}
};
}
//#endregion
//#region src/createDefaultWalletNotFoundHandler.ts
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
}
function createDefaultWalletNotFoundHandler() {
return defaultWalletNotFoundHandler;
}
//#endregion
exports.LocalSolanaMobileWalletAdapter = LocalSolanaMobileWalletAdapter;
exports.RemoteSolanaMobileWalletAdapter = RemoteSolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapter = SolanaMobileWalletAdapter;
exports.SolanaMobileWalletAdapterRemoteWalletName = SolanaMobileWalletAdapterRemoteWalletName;
exports.SolanaMobileWalletAdapterWalletName = SolanaMobileWalletAdapterWalletName;
exports.createDefaultAddressSelector = createDefaultAddressSelector;
exports.createDefaultAuthorizationResultCache = createDefaultAuthorizationResultCache;
exports.createDefaultWalletNotFoundHandler = createDefaultWalletNotFoundHandler;
//# sourceMappingURL=index.native.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"type":"commonjs"}