@vue-solana/core 0.2.1 → 0.3.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/dist/index.d.mts CHANGED
@@ -1,78 +1,9 @@
1
- import { SendOptions, Commitment, Connection, Transaction, VersionedTransaction, PublicKey, TransactionSignature } from '@solana/web3-compat';
2
- import { WalletAccount, Wallet } from '@wallet-standard/base';
3
-
4
- type SolanaCluster = "mainnet-beta" | "testnet" | "devnet" | "localnet";
5
- type SolanaChain = "solana:mainnet" | "solana:testnet" | "solana:devnet" | "solana:localnet";
6
- interface SolanaConfig {
7
- cluster?: SolanaCluster;
8
- endpoint?: string;
9
- wsEndpoint?: string;
10
- commitment?: Commitment;
11
- autoConnect?: boolean;
12
- }
13
- interface SolanaContext {
14
- cluster: SolanaCluster;
15
- endpoint: string;
16
- wsEndpoint: string;
17
- connection: Connection;
18
- }
19
- type SolanaTransaction = Transaction | VersionedTransaction;
20
- interface SolanaWallet {
21
- publicKey: PublicKey | null;
22
- connected: boolean;
23
- connecting?: boolean;
24
- disconnecting?: boolean;
25
- connect: () => Promise<void>;
26
- disconnect: () => Promise<void>;
27
- signTransaction?: <T extends SolanaTransaction>(transaction: T) => Promise<T>;
28
- signAllTransactions?: <T extends SolanaTransaction>(transactions: T[]) => Promise<T[]>;
29
- signAndSendTransaction?: (transaction: SolanaTransaction, options?: SendOptions) => Promise<{
30
- signature: TransactionSignature;
31
- }>;
32
- }
33
- interface SolanaWalletInfo {
34
- name: string;
35
- icon: string;
36
- chains: readonly string[];
37
- accounts: readonly {
38
- address: string;
39
- publicKey: Uint8Array;
40
- chains: readonly string[];
41
- label?: string;
42
- icon?: string;
43
- }[];
44
- wallet: unknown;
45
- }
46
- interface SendTransactionOptions extends SendOptions {
47
- skipPreflight?: boolean;
48
- }
49
-
50
- declare const DEFAULT_CLUSTER: SolanaCluster;
51
- declare function getClusterEndpoint(cluster?: SolanaCluster): string;
52
- declare function getClusterWebSocketEndpoint(cluster?: SolanaCluster): string;
53
- declare function getWebSocketEndpoint(endpoint: string): string;
54
-
55
- declare function createSolanaConnection(config?: SolanaConfig): Connection;
56
- declare function createSolanaContext(config?: SolanaConfig): SolanaContext;
57
-
58
- declare function signAndSendTransaction(connection: Connection, wallet: SolanaWallet, transaction: SolanaTransaction, options?: SendTransactionOptions): Promise<TransactionSignature>;
59
-
60
- declare function isWalletConnected(wallet: Pick<SolanaWallet, "connected" | "publicKey"> | null | undefined): boolean;
61
- declare function assertWalletConnected(wallet: SolanaWallet | null | undefined): asserts wallet is SolanaWallet & {
62
- publicKey: NonNullable<SolanaWallet["publicKey"]>;
63
- };
64
- declare function assertWalletCanSign(wallet: SolanaWallet | null | undefined): asserts wallet is SolanaWallet & Required<Pick<SolanaWallet, "signTransaction">>;
65
-
66
- interface AdaptSolanaWalletOptions {
67
- chain?: SolanaChain;
68
- account?: WalletAccount;
69
- onChange?: () => void;
70
- }
71
- declare function getSolanaChain(cluster: SolanaCluster): SolanaChain;
72
- declare function isSolanaStandardWallet(wallet: Wallet): boolean;
73
- declare function getRegisteredSolanaWallets(): SolanaWalletInfo[];
74
- declare function subscribeSolanaWallets(listener: () => void): () => void;
75
- declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
76
-
77
- export { DEFAULT_CLUSTER, adaptSolanaStandardWallet, assertWalletCanSign, assertWalletConnected, createSolanaConnection, createSolanaContext, getClusterEndpoint, getClusterWebSocketEndpoint, getRegisteredSolanaWallets, getSolanaChain, getWebSocketEndpoint, isSolanaStandardWallet, isWalletConnected, signAndSendTransaction, subscribeSolanaWallets };
78
- export type { AdaptSolanaWalletOptions, SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo };
1
+ export { DEFAULT_CLUSTER, getClusterEndpoint, getClusterWebSocketEndpoint, getWebSocketEndpoint } from './clusters.mjs';
2
+ export { RegisterSolanaMobileWalletOptions, SolanaMobileWalletAppIdentity, getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet } from './mobile-wallet.mjs';
3
+ export { createSolanaConnection, createSolanaContext } from './rpc.mjs';
4
+ export { signAndSendTransaction } from './transaction.mjs';
5
+ export { SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo } from './types.mjs';
6
+ export { assertWalletCanSign, assertWalletConnected, isWalletConnected } from './wallet.mjs';
7
+ export { AdaptSolanaWalletOptions, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets } from './wallet-standard.mjs';
8
+ import '@solana/web3-compat';
9
+ import '@wallet-standard/base';
package/dist/index.d.ts CHANGED
@@ -1,78 +1,9 @@
1
- import { SendOptions, Commitment, Connection, Transaction, VersionedTransaction, PublicKey, TransactionSignature } from '@solana/web3-compat';
2
- import { WalletAccount, Wallet } from '@wallet-standard/base';
3
-
4
- type SolanaCluster = "mainnet-beta" | "testnet" | "devnet" | "localnet";
5
- type SolanaChain = "solana:mainnet" | "solana:testnet" | "solana:devnet" | "solana:localnet";
6
- interface SolanaConfig {
7
- cluster?: SolanaCluster;
8
- endpoint?: string;
9
- wsEndpoint?: string;
10
- commitment?: Commitment;
11
- autoConnect?: boolean;
12
- }
13
- interface SolanaContext {
14
- cluster: SolanaCluster;
15
- endpoint: string;
16
- wsEndpoint: string;
17
- connection: Connection;
18
- }
19
- type SolanaTransaction = Transaction | VersionedTransaction;
20
- interface SolanaWallet {
21
- publicKey: PublicKey | null;
22
- connected: boolean;
23
- connecting?: boolean;
24
- disconnecting?: boolean;
25
- connect: () => Promise<void>;
26
- disconnect: () => Promise<void>;
27
- signTransaction?: <T extends SolanaTransaction>(transaction: T) => Promise<T>;
28
- signAllTransactions?: <T extends SolanaTransaction>(transactions: T[]) => Promise<T[]>;
29
- signAndSendTransaction?: (transaction: SolanaTransaction, options?: SendOptions) => Promise<{
30
- signature: TransactionSignature;
31
- }>;
32
- }
33
- interface SolanaWalletInfo {
34
- name: string;
35
- icon: string;
36
- chains: readonly string[];
37
- accounts: readonly {
38
- address: string;
39
- publicKey: Uint8Array;
40
- chains: readonly string[];
41
- label?: string;
42
- icon?: string;
43
- }[];
44
- wallet: unknown;
45
- }
46
- interface SendTransactionOptions extends SendOptions {
47
- skipPreflight?: boolean;
48
- }
49
-
50
- declare const DEFAULT_CLUSTER: SolanaCluster;
51
- declare function getClusterEndpoint(cluster?: SolanaCluster): string;
52
- declare function getClusterWebSocketEndpoint(cluster?: SolanaCluster): string;
53
- declare function getWebSocketEndpoint(endpoint: string): string;
54
-
55
- declare function createSolanaConnection(config?: SolanaConfig): Connection;
56
- declare function createSolanaContext(config?: SolanaConfig): SolanaContext;
57
-
58
- declare function signAndSendTransaction(connection: Connection, wallet: SolanaWallet, transaction: SolanaTransaction, options?: SendTransactionOptions): Promise<TransactionSignature>;
59
-
60
- declare function isWalletConnected(wallet: Pick<SolanaWallet, "connected" | "publicKey"> | null | undefined): boolean;
61
- declare function assertWalletConnected(wallet: SolanaWallet | null | undefined): asserts wallet is SolanaWallet & {
62
- publicKey: NonNullable<SolanaWallet["publicKey"]>;
63
- };
64
- declare function assertWalletCanSign(wallet: SolanaWallet | null | undefined): asserts wallet is SolanaWallet & Required<Pick<SolanaWallet, "signTransaction">>;
65
-
66
- interface AdaptSolanaWalletOptions {
67
- chain?: SolanaChain;
68
- account?: WalletAccount;
69
- onChange?: () => void;
70
- }
71
- declare function getSolanaChain(cluster: SolanaCluster): SolanaChain;
72
- declare function isSolanaStandardWallet(wallet: Wallet): boolean;
73
- declare function getRegisteredSolanaWallets(): SolanaWalletInfo[];
74
- declare function subscribeSolanaWallets(listener: () => void): () => void;
75
- declare function adaptSolanaStandardWallet(walletInfo: SolanaWalletInfo, options?: AdaptSolanaWalletOptions): SolanaWallet;
76
-
77
- export { DEFAULT_CLUSTER, adaptSolanaStandardWallet, assertWalletCanSign, assertWalletConnected, createSolanaConnection, createSolanaContext, getClusterEndpoint, getClusterWebSocketEndpoint, getRegisteredSolanaWallets, getSolanaChain, getWebSocketEndpoint, isSolanaStandardWallet, isWalletConnected, signAndSendTransaction, subscribeSolanaWallets };
78
- export type { AdaptSolanaWalletOptions, SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo };
1
+ export { DEFAULT_CLUSTER, getClusterEndpoint, getClusterWebSocketEndpoint, getWebSocketEndpoint } from './clusters.js';
2
+ export { RegisterSolanaMobileWalletOptions, SolanaMobileWalletAppIdentity, getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet } from './mobile-wallet.js';
3
+ export { createSolanaConnection, createSolanaContext } from './rpc.js';
4
+ export { signAndSendTransaction } from './transaction.js';
5
+ export { SendTransactionOptions, SolanaChain, SolanaCluster, SolanaConfig, SolanaContext, SolanaTransaction, SolanaWallet, SolanaWalletInfo } from './types.js';
6
+ export { assertWalletCanSign, assertWalletConnected, isWalletConnected } from './wallet.js';
7
+ export { AdaptSolanaWalletOptions, adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets } from './wallet-standard.js';
8
+ import '@solana/web3-compat';
9
+ import '@wallet-standard/base';
package/dist/index.mjs CHANGED
@@ -1,283 +1,12 @@
1
- import { Connection, PublicKey, Transaction, VersionedTransaction } from '@solana/web3-compat';
2
- import { getWallets } from '@wallet-standard/app';
3
- import { StandardEvents, StandardDisconnect, StandardConnect } from '@wallet-standard/features';
4
- import { SolanaSignAndSendTransaction, SolanaSignTransaction } from '@solana/wallet-standard-features';
5
- import bs58 from 'bs58';
6
-
7
- const DEFAULT_CLUSTER = "devnet";
8
- const CLUSTER_ENDPOINTS = {
9
- "mainnet-beta": "https://api.mainnet-beta.solana.com",
10
- testnet: "https://api.testnet.solana.com",
11
- devnet: "https://api.devnet.solana.com",
12
- localnet: "http://127.0.0.1:8899"
13
- };
14
- const CLUSTER_WEBSOCKET_ENDPOINTS = {
15
- "mainnet-beta": "wss://api.mainnet-beta.solana.com",
16
- testnet: "wss://api.testnet.solana.com",
17
- devnet: "wss://api.devnet.solana.com",
18
- localnet: "ws://127.0.0.1:8900"
19
- };
20
- function getClusterEndpoint(cluster = DEFAULT_CLUSTER) {
21
- return CLUSTER_ENDPOINTS[cluster];
22
- }
23
- function getClusterWebSocketEndpoint(cluster = DEFAULT_CLUSTER) {
24
- return CLUSTER_WEBSOCKET_ENDPOINTS[cluster];
25
- }
26
- function getWebSocketEndpoint(endpoint) {
27
- const url = new URL(endpoint);
28
- if (url.protocol === "https:") {
29
- url.protocol = "wss:";
30
- } else if (url.protocol === "http:") {
31
- url.protocol = "ws:";
32
- }
33
- return url.toString();
34
- }
35
-
36
- function createSolanaConnection(config = {}) {
37
- const cluster = config.cluster ?? DEFAULT_CLUSTER;
38
- const endpoint = config.endpoint ?? getClusterEndpoint(cluster);
39
- const wsEndpoint = config.wsEndpoint ?? (config.endpoint ? getWebSocketEndpoint(endpoint) : getClusterWebSocketEndpoint(cluster));
40
- return new Connection(endpoint, {
41
- commitment: config.commitment,
42
- wsEndpoint
43
- });
44
- }
45
- function createSolanaContext(config = {}) {
46
- const cluster = config.cluster ?? DEFAULT_CLUSTER;
47
- const endpoint = config.endpoint ?? getClusterEndpoint(cluster);
48
- const wsEndpoint = config.wsEndpoint ?? (config.endpoint ? getWebSocketEndpoint(endpoint) : getClusterWebSocketEndpoint(cluster));
49
- return {
50
- cluster,
51
- endpoint,
52
- wsEndpoint,
53
- connection: new Connection(endpoint, {
54
- commitment: config.commitment,
55
- wsEndpoint
56
- })
57
- };
58
- }
59
-
60
- function isWalletConnected(wallet) {
61
- return Boolean(wallet?.connected && wallet.publicKey);
62
- }
63
- function assertWalletConnected(wallet) {
64
- if (!isWalletConnected(wallet)) {
65
- throw new Error("Solana wallet is not connected");
66
- }
67
- }
68
- function assertWalletCanSign(wallet) {
69
- assertWalletConnected(wallet);
70
- if (!wallet.signTransaction) {
71
- throw new Error("Solana wallet does not support signTransaction");
72
- }
73
- }
74
-
75
- async function signAndSendTransaction(connection, wallet, transaction, options) {
76
- assertWalletConnected(wallet);
77
- if (wallet.signAndSendTransaction) {
78
- const result = await wallet.signAndSendTransaction(transaction, options);
79
- return result.signature;
80
- }
81
- assertWalletCanSign(wallet);
82
- const signedTransaction = await wallet.signTransaction(transaction);
83
- const rawTransaction = signedTransaction.serialize();
84
- return connection.sendRawTransaction(rawTransaction, options);
85
- }
86
-
87
- const SOLANA_CHAINS = [
88
- "solana:mainnet",
89
- "solana:testnet",
90
- "solana:devnet",
91
- "solana:localnet"
92
- ];
93
- function getSolanaChain(cluster) {
94
- if (cluster === "mainnet-beta") {
95
- return "solana:mainnet";
96
- }
97
- return `solana:${cluster}`;
98
- }
99
- function isSolanaStandardWallet(wallet) {
100
- return StandardConnect in wallet.features && StandardDisconnect in wallet.features && wallet.chains.some((chain) => SOLANA_CHAINS.includes(chain));
101
- }
102
- function getRegisteredSolanaWallets() {
103
- if (typeof window === "undefined") {
104
- return [];
105
- }
106
- return getWallets().get().filter(isSolanaStandardWallet).map(createSolanaWalletInfo);
107
- }
108
- function subscribeSolanaWallets(listener) {
109
- if (typeof window === "undefined") {
110
- return () => {
111
- };
112
- }
113
- const wallets = getWallets();
114
- const offRegister = wallets.on("register", listener);
115
- const offUnregister = wallets.on("unregister", listener);
116
- return () => {
117
- offRegister();
118
- offUnregister();
119
- };
120
- }
121
- function adaptSolanaStandardWallet(walletInfo, options = {}) {
122
- const wallet = walletInfo.wallet;
123
- let accounts = wallet.accounts;
124
- let account = options.account;
125
- let allowAccountUpdates = Boolean(options.account);
126
- let connecting = false;
127
- let disconnecting = false;
128
- let manuallyDisconnected = false;
129
- const eventsFeature = wallet.features[StandardEvents];
130
- eventsFeature?.on("change", (properties) => {
131
- if (properties.accounts) {
132
- accounts = properties.accounts;
133
- account = allowAccountUpdates && !manuallyDisconnected ? getSolanaAccount(accounts, options.chain) : void 0;
134
- options.onChange?.();
135
- }
136
- });
137
- return {
138
- get publicKey() {
139
- return account ? new PublicKey(account.publicKey) : null;
140
- },
141
- get connected() {
142
- return Boolean(account);
143
- },
144
- get connecting() {
145
- return connecting;
146
- },
147
- get disconnecting() {
148
- return disconnecting;
149
- },
150
- async connect() {
151
- connecting = true;
152
- manuallyDisconnected = false;
153
- options.onChange?.();
154
- try {
155
- const feature = wallet.features[StandardConnect];
156
- const result = await feature.connect();
157
- accounts = result.accounts;
158
- allowAccountUpdates = true;
159
- account = getSolanaAccount(accounts, options.chain);
160
- if (!account) {
161
- throw new Error("Solana wallet did not authorize a Solana account");
162
- }
163
- } finally {
164
- connecting = false;
165
- options.onChange?.();
166
- }
167
- },
168
- async disconnect() {
169
- const feature = wallet.features[StandardDisconnect];
170
- disconnecting = true;
171
- manuallyDisconnected = true;
172
- allowAccountUpdates = false;
173
- account = void 0;
174
- options.onChange?.();
175
- try {
176
- await feature.disconnect();
177
- accounts = [];
178
- account = void 0;
179
- } catch (error) {
180
- manuallyDisconnected = false;
181
- allowAccountUpdates = true;
182
- account = getSolanaAccount(accounts, options.chain);
183
- throw error;
184
- } finally {
185
- disconnecting = false;
186
- options.onChange?.();
187
- }
188
- },
189
- signTransaction: hasSignTransaction(wallet) ? async (transaction) => {
190
- const activeAccount = getActiveAccount(account);
191
- const [result] = await wallet.features[SolanaSignTransaction].signTransaction({
192
- account: activeAccount,
193
- transaction: serializeTransaction(transaction),
194
- chain: options.chain
195
- });
196
- if (!result) {
197
- throw new Error("Solana wallet did not return a signed transaction");
198
- }
199
- return deserializeTransaction(transaction, result.signedTransaction);
200
- } : void 0,
201
- signAllTransactions: hasSignTransaction(wallet) ? async (transactions) => {
202
- const activeAccount = getActiveAccount(account);
203
- const results = await wallet.features[SolanaSignTransaction].signTransaction(
204
- ...transactions.map((transaction) => ({
205
- account: activeAccount,
206
- transaction: serializeTransaction(transaction),
207
- chain: options.chain
208
- }))
209
- );
210
- return results.map(
211
- (result, index) => deserializeTransaction(transactions[index], result.signedTransaction)
212
- );
213
- } : void 0,
214
- signAndSendTransaction: hasSignAndSendTransaction(wallet) ? async (transaction, sendOptions) => {
215
- const activeAccount = getActiveAccount(account);
216
- const [result] = await wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({
217
- account: activeAccount,
218
- transaction: serializeTransaction(transaction),
219
- chain: options.chain ?? getSolanaAccountChain(activeAccount),
220
- options: sendOptions
221
- });
222
- if (!result) {
223
- throw new Error("Solana wallet did not return a transaction signature");
224
- }
225
- return { signature: bs58.encode(result.signature) };
226
- } : void 0
227
- };
228
- }
229
- function createSolanaWalletInfo(wallet) {
230
- return {
231
- name: wallet.name,
232
- icon: wallet.icon,
233
- chains: wallet.chains,
234
- accounts: wallet.accounts.map((account) => ({
235
- address: account.address,
236
- publicKey: Uint8Array.from(account.publicKey),
237
- chains: account.chains,
238
- label: account.label,
239
- icon: account.icon
240
- })),
241
- wallet
242
- };
243
- }
244
- function getSolanaAccount(accounts, chain) {
245
- return accounts.find((account) => account.chains.some((accountChain) => accountChain === chain)) ?? accounts.find(
246
- (account) => account.chains.some((accountChain) => SOLANA_CHAINS.includes(accountChain))
247
- );
248
- }
249
- function getActiveAccount(account) {
250
- if (!account) {
251
- throw new Error("Solana wallet is not connected");
252
- }
253
- return account;
254
- }
255
- function getSolanaAccountChain(account) {
256
- const chain = account.chains.find(
257
- (accountChain) => SOLANA_CHAINS.includes(accountChain)
258
- );
259
- if (!chain) {
260
- throw new Error("Solana wallet account does not support a Solana chain");
261
- }
262
- return chain;
263
- }
264
- function hasSignTransaction(wallet) {
265
- return SolanaSignTransaction in wallet.features;
266
- }
267
- function hasSignAndSendTransaction(wallet) {
268
- return SolanaSignAndSendTransaction in wallet.features;
269
- }
270
- function serializeTransaction(transaction) {
271
- if (transaction instanceof Transaction) {
272
- return transaction.serialize({ requireAllSignatures: false, verifySignatures: false });
273
- }
274
- return transaction.serialize();
275
- }
276
- function deserializeTransaction(source, bytes) {
277
- if (source instanceof Transaction) {
278
- return Transaction.from(bytes);
279
- }
280
- return VersionedTransaction.deserialize(bytes);
281
- }
282
-
283
- export { DEFAULT_CLUSTER, adaptSolanaStandardWallet, assertWalletCanSign, assertWalletConnected, createSolanaConnection, createSolanaContext, getClusterEndpoint, getClusterWebSocketEndpoint, getRegisteredSolanaWallets, getSolanaChain, getWebSocketEndpoint, isSolanaStandardWallet, isWalletConnected, signAndSendTransaction, subscribeSolanaWallets };
1
+ export { DEFAULT_CLUSTER, getClusterEndpoint, getClusterWebSocketEndpoint, getWebSocketEndpoint } from './clusters.mjs';
2
+ export { getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet } from './mobile-wallet.mjs';
3
+ export { createSolanaConnection, createSolanaContext } from './rpc.mjs';
4
+ export { signAndSendTransaction } from './transaction.mjs';
5
+ export { assertWalletCanSign, assertWalletConnected, isWalletConnected } from './wallet.mjs';
6
+ export { adaptSolanaStandardWallet, getRegisteredSolanaWallets, getSolanaChain, isSolanaStandardWallet, subscribeSolanaWallets } from './wallet-standard.mjs';
7
+ import '@solana-mobile/wallet-standard-mobile';
8
+ import '@solana/web3-compat';
9
+ import '@wallet-standard/app';
10
+ import '@wallet-standard/features';
11
+ import '@solana/wallet-standard-features';
12
+ import 'bs58';
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ const walletStandardMobile = require('@solana-mobile/wallet-standard-mobile');
4
+
5
+ const DEFAULT_MOBILE_WALLET_CHAINS = ["solana:mainnet", "solana:devnet"];
6
+ const registeredMobileWalletKeys = /* @__PURE__ */ new Set();
7
+ function registerSolanaMobileWallet(options = {}) {
8
+ if (!isSolanaMobileWalletSupported()) {
9
+ return false;
10
+ }
11
+ const appIdentity = options.appIdentity ?? getDefaultMobileWalletAppIdentity();
12
+ const chains = options.chains?.length ? options.chains : DEFAULT_MOBILE_WALLET_CHAINS;
13
+ const registrationKey = JSON.stringify({
14
+ appIdentity,
15
+ chains,
16
+ remoteHostAuthority: options.remoteHostAuthority
17
+ });
18
+ if (registeredMobileWalletKeys.has(registrationKey)) {
19
+ return true;
20
+ }
21
+ walletStandardMobile.registerMwa({
22
+ appIdentity,
23
+ authorizationCache: walletStandardMobile.createDefaultAuthorizationCache(),
24
+ chains,
25
+ chainSelector: walletStandardMobile.createDefaultChainSelector(),
26
+ remoteHostAuthority: options.remoteHostAuthority,
27
+ onWalletNotFound: walletStandardMobile.createDefaultWalletNotFoundHandler()
28
+ });
29
+ registeredMobileWalletKeys.add(registrationKey);
30
+ return true;
31
+ }
32
+ function isSolanaMobileWalletSupported() {
33
+ if (typeof window === "undefined" || typeof navigator === "undefined") {
34
+ return false;
35
+ }
36
+ const userAgent = navigator.userAgent;
37
+ const isAndroid = /Android/i.test(userAgent);
38
+ const isChrome = /Chrome|CriOS/i.test(userAgent) && !/Edg|OPR|Firefox|FxiOS/i.test(userAgent);
39
+ return isAndroid && isChrome;
40
+ }
41
+ function getDefaultMobileWalletAppIdentity() {
42
+ if (typeof window === "undefined") {
43
+ return {
44
+ name: "Vue Solana App",
45
+ uri: "https://localhost"
46
+ };
47
+ }
48
+ return {
49
+ name: document.title || "Vue Solana App",
50
+ uri: window.location.origin,
51
+ icon: getDocumentIconPath()
52
+ };
53
+ }
54
+ function getDocumentIconPath() {
55
+ const icon = document.querySelector(
56
+ 'link[rel="icon"], link[rel="shortcut icon"], link[rel="apple-touch-icon"]'
57
+ );
58
+ if (!icon?.href) {
59
+ return void 0;
60
+ }
61
+ if (icon.href.startsWith(window.location.origin)) {
62
+ return icon.href.slice(window.location.origin.length).replace(/^\//, "");
63
+ }
64
+ return icon.href;
65
+ }
66
+
67
+ exports.getDefaultMobileWalletAppIdentity = getDefaultMobileWalletAppIdentity;
68
+ exports.isSolanaMobileWalletSupported = isSolanaMobileWalletSupported;
69
+ exports.registerSolanaMobileWallet = registerSolanaMobileWallet;
@@ -0,0 +1,19 @@
1
+ import { SolanaChain } from './types.cjs';
2
+ import '@solana/web3-compat';
3
+
4
+ interface SolanaMobileWalletAppIdentity {
5
+ name: string;
6
+ uri: string;
7
+ icon?: string;
8
+ }
9
+ interface RegisterSolanaMobileWalletOptions {
10
+ appIdentity?: SolanaMobileWalletAppIdentity;
11
+ chains?: readonly SolanaChain[];
12
+ remoteHostAuthority?: string;
13
+ }
14
+ declare function registerSolanaMobileWallet(options?: RegisterSolanaMobileWalletOptions): boolean;
15
+ declare function isSolanaMobileWalletSupported(): boolean;
16
+ declare function getDefaultMobileWalletAppIdentity(): SolanaMobileWalletAppIdentity;
17
+
18
+ export { getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet };
19
+ export type { RegisterSolanaMobileWalletOptions, SolanaMobileWalletAppIdentity };
@@ -0,0 +1,19 @@
1
+ import { SolanaChain } from './types.mjs';
2
+ import '@solana/web3-compat';
3
+
4
+ interface SolanaMobileWalletAppIdentity {
5
+ name: string;
6
+ uri: string;
7
+ icon?: string;
8
+ }
9
+ interface RegisterSolanaMobileWalletOptions {
10
+ appIdentity?: SolanaMobileWalletAppIdentity;
11
+ chains?: readonly SolanaChain[];
12
+ remoteHostAuthority?: string;
13
+ }
14
+ declare function registerSolanaMobileWallet(options?: RegisterSolanaMobileWalletOptions): boolean;
15
+ declare function isSolanaMobileWalletSupported(): boolean;
16
+ declare function getDefaultMobileWalletAppIdentity(): SolanaMobileWalletAppIdentity;
17
+
18
+ export { getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet };
19
+ export type { RegisterSolanaMobileWalletOptions, SolanaMobileWalletAppIdentity };
@@ -0,0 +1,19 @@
1
+ import { SolanaChain } from './types.js';
2
+ import '@solana/web3-compat';
3
+
4
+ interface SolanaMobileWalletAppIdentity {
5
+ name: string;
6
+ uri: string;
7
+ icon?: string;
8
+ }
9
+ interface RegisterSolanaMobileWalletOptions {
10
+ appIdentity?: SolanaMobileWalletAppIdentity;
11
+ chains?: readonly SolanaChain[];
12
+ remoteHostAuthority?: string;
13
+ }
14
+ declare function registerSolanaMobileWallet(options?: RegisterSolanaMobileWalletOptions): boolean;
15
+ declare function isSolanaMobileWalletSupported(): boolean;
16
+ declare function getDefaultMobileWalletAppIdentity(): SolanaMobileWalletAppIdentity;
17
+
18
+ export { getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet };
19
+ export type { RegisterSolanaMobileWalletOptions, SolanaMobileWalletAppIdentity };
@@ -0,0 +1,65 @@
1
+ import { registerMwa, createDefaultWalletNotFoundHandler, createDefaultChainSelector, createDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';
2
+
3
+ const DEFAULT_MOBILE_WALLET_CHAINS = ["solana:mainnet", "solana:devnet"];
4
+ const registeredMobileWalletKeys = /* @__PURE__ */ new Set();
5
+ function registerSolanaMobileWallet(options = {}) {
6
+ if (!isSolanaMobileWalletSupported()) {
7
+ return false;
8
+ }
9
+ const appIdentity = options.appIdentity ?? getDefaultMobileWalletAppIdentity();
10
+ const chains = options.chains?.length ? options.chains : DEFAULT_MOBILE_WALLET_CHAINS;
11
+ const registrationKey = JSON.stringify({
12
+ appIdentity,
13
+ chains,
14
+ remoteHostAuthority: options.remoteHostAuthority
15
+ });
16
+ if (registeredMobileWalletKeys.has(registrationKey)) {
17
+ return true;
18
+ }
19
+ registerMwa({
20
+ appIdentity,
21
+ authorizationCache: createDefaultAuthorizationCache(),
22
+ chains,
23
+ chainSelector: createDefaultChainSelector(),
24
+ remoteHostAuthority: options.remoteHostAuthority,
25
+ onWalletNotFound: createDefaultWalletNotFoundHandler()
26
+ });
27
+ registeredMobileWalletKeys.add(registrationKey);
28
+ return true;
29
+ }
30
+ function isSolanaMobileWalletSupported() {
31
+ if (typeof window === "undefined" || typeof navigator === "undefined") {
32
+ return false;
33
+ }
34
+ const userAgent = navigator.userAgent;
35
+ const isAndroid = /Android/i.test(userAgent);
36
+ const isChrome = /Chrome|CriOS/i.test(userAgent) && !/Edg|OPR|Firefox|FxiOS/i.test(userAgent);
37
+ return isAndroid && isChrome;
38
+ }
39
+ function getDefaultMobileWalletAppIdentity() {
40
+ if (typeof window === "undefined") {
41
+ return {
42
+ name: "Vue Solana App",
43
+ uri: "https://localhost"
44
+ };
45
+ }
46
+ return {
47
+ name: document.title || "Vue Solana App",
48
+ uri: window.location.origin,
49
+ icon: getDocumentIconPath()
50
+ };
51
+ }
52
+ function getDocumentIconPath() {
53
+ const icon = document.querySelector(
54
+ 'link[rel="icon"], link[rel="shortcut icon"], link[rel="apple-touch-icon"]'
55
+ );
56
+ if (!icon?.href) {
57
+ return void 0;
58
+ }
59
+ if (icon.href.startsWith(window.location.origin)) {
60
+ return icon.href.slice(window.location.origin.length).replace(/^\//, "");
61
+ }
62
+ return icon.href;
63
+ }
64
+
65
+ export { getDefaultMobileWalletAppIdentity, isSolanaMobileWalletSupported, registerSolanaMobileWallet };