@vue-solana/vue 4.1.2 → 4.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -319,7 +319,7 @@ Browser extension wallets are discovered through the Solana Wallet Standard. And
|
|
|
319
319
|
|
|
320
320
|
Connecting a wallet also disconnects every other discovered wallet through its `standard:disconnect` feature, so only one wallet stays authorized for the app. An extension the user authorized in an earlier page session can otherwise keep answering signing requests, which is the usual cause of the wrong wallet prompting for a `signMessage` confirmation. A wallet that fails or never answers its disconnect is ignored after a 2 second timeout, and `connect()` resolves only after the sweep finishes.
|
|
321
321
|
|
|
322
|
-
Selected discovered wallets are persisted under `localStorage["vue-solana:selected-wallet"]` as non-sensitive identity metadata: `name`,
|
|
322
|
+
Selected discovered wallets are persisted under `localStorage["vue-solana:selected-wallet"]` as non-sensitive identity metadata: `name`, `platform`/`source` when available, and `connected: true` while the wallet is connected. On reload, Vue Solana restores the selected wallet if the same wallet is discovered again. A wallet the user left connected is restored after a reload even without `autoConnect`, through a silent connect (`connect({ silent: true })`) that does not prompt or launch a wallet app for wallets that honour the Wallet Standard `silent` hint (a wallet that ignores it can prompt on page load); an explicit `disconnect()` forgets that session. Pass `autoConnect: true` to also connect a restored wallet that was only selected; arbitrary installed wallets are never auto-connected. Calling `selectWallet(null)` or `setWallet(customWallet)` clears the stored selection.
|
|
323
323
|
|
|
324
324
|
Desktop native app wallet adapters are planned but not implemented yet.
|
|
325
325
|
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { SendTransactionConfig, SendTransactionInput, SendTransactionStatus, Sen
|
|
|
14
14
|
export { SignMessageStatus, useSignMessage } from './useSignMessage.js';
|
|
15
15
|
export { SignAndSendTransactionOptions, SignAndSendTransactionStatus, useSignAndSendTransaction } from './useSignAndSendTransaction.js';
|
|
16
16
|
export { SignTransactionsStatus, useSignTransactions } from './useSignTransactions.js';
|
|
17
|
-
export {
|
|
17
|
+
export { SignAndSendTransactionsStatus, useSignAndSendTransactions } from './useSignAndSendTransactions.js';
|
|
18
18
|
export { SignatureStatus, UseSignatureStatusOptions, useSignatureStatus } from './useSignatureStatus.js';
|
|
19
19
|
export { SignInStatus, useSignIn } from './useSignIn.js';
|
|
20
20
|
export { tryUseSolana, useSolana } from './useSolana.js';
|
|
@@ -39,7 +39,7 @@ import { SolanaConfig, SolanaWallet } from '@vue-solana/core/types';
|
|
|
39
39
|
export * from '@vue-solana/core/types';
|
|
40
40
|
export { TransactionStatus } from '@vue-solana/core/types';
|
|
41
41
|
import { App } from 'vue';
|
|
42
|
-
export { SolanaError, SolanaErrorCode, isSolanaError } from '@vue-solana/core/errors';
|
|
42
|
+
export { PartialSignAndSendError, SolanaError, SolanaErrorCode, isSolanaError } from '@vue-solana/core/errors';
|
|
43
43
|
export * from '@vue-solana/core/kit';
|
|
44
44
|
import '@vue-solana/core';
|
|
45
45
|
import '@solana/kit-plugin-rpc';
|
package/dist/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ export { u as useSendTransaction, a as useSendTransactions } from './shared/vue.
|
|
|
14
14
|
export { u as useSignMessage } from './shared/vue.Ddf_Cdjx.mjs';
|
|
15
15
|
export { u as useSignAndSendTransaction } from './shared/vue.BTD4usyi.mjs';
|
|
16
16
|
export { u as useSignTransactions } from './shared/vue.BHBifdbc.mjs';
|
|
17
|
-
export {
|
|
17
|
+
export { u as useSignAndSendTransactions } from './shared/vue.sPcsjyKU.mjs';
|
|
18
18
|
export { u as useSignatureStatus } from './shared/vue.Bu2cQ690.mjs';
|
|
19
19
|
export { u as useSignIn } from './shared/vue.SeuJipQ8.mjs';
|
|
20
20
|
export { t as tryUseSolana, u as useSolana } from './shared/vue.CcOZ9858.mjs';
|
|
@@ -33,13 +33,14 @@ export { u as useWallet } from './shared/vue.Bc_Kbwr5.mjs';
|
|
|
33
33
|
export { u as useWallets } from './shared/vue.DyLgoSbX.mjs';
|
|
34
34
|
import { s as solanaInjectionKey } from './shared/vue.D_P5SqqD.mjs';
|
|
35
35
|
import { createSolanaError, normalizeSolanaError } from '@vue-solana/core/errors';
|
|
36
|
-
export { SolanaError, isSolanaError } from '@vue-solana/core/errors';
|
|
36
|
+
export { PartialSignAndSendError, SolanaError, isSolanaError } from '@vue-solana/core/errors';
|
|
37
37
|
import { isSolanaMobileWalletSupported } from '@vue-solana/core/mobile-wallet-support';
|
|
38
38
|
import { createSolanaContext } from '@vue-solana/core/rpc';
|
|
39
39
|
import { withTimeout } from '@vue-solana/core/timeout';
|
|
40
40
|
import { getRegisteredSolanaWallets, getSolanaChain, adaptSolanaStandardWallet, disconnectSolanaStandardWallet, subscribeSolanaWallets } from '@vue-solana/core/wallet-standard';
|
|
41
41
|
import { shallowRef, ref, triggerRef } from 'vue';
|
|
42
42
|
import { handleSolanaIosWalletCallback, getSolanaIosWallets, isSolanaIosWalletInfo, adaptSolanaIosWallet } from '@vue-solana/core/ios-wallet';
|
|
43
|
+
import { sendSignedTransaction } from '@vue-solana/core/transaction';
|
|
43
44
|
export * from '@vue-solana/core/types';
|
|
44
45
|
export * from '@vue-solana/core/kit';
|
|
45
46
|
|
|
@@ -47,39 +48,47 @@ const SELECTED_WALLET_STORAGE_KEY = "vue-solana:selected-wallet";
|
|
|
47
48
|
function readSelectedWallet() {
|
|
48
49
|
const { storage, error } = getLocalStorage();
|
|
49
50
|
if (error || !storage) {
|
|
50
|
-
return { wallet: null, error };
|
|
51
|
+
return { wallet: null, connected: false, error };
|
|
51
52
|
}
|
|
52
53
|
try {
|
|
53
54
|
const value = storage.getItem(SELECTED_WALLET_STORAGE_KEY);
|
|
54
55
|
if (!value) {
|
|
55
|
-
return { wallet: null, error: null };
|
|
56
|
+
return { wallet: null, connected: false, error: null };
|
|
56
57
|
}
|
|
57
58
|
const wallet = JSON.parse(value);
|
|
59
|
+
const hasName = typeof wallet.name === "string";
|
|
58
60
|
return {
|
|
59
|
-
wallet:
|
|
61
|
+
wallet: hasName ? {
|
|
60
62
|
name: wallet.name,
|
|
61
63
|
platform: wallet.platform,
|
|
62
64
|
source: wallet.source
|
|
63
65
|
} : null,
|
|
66
|
+
connected: hasName && wallet.connected === true,
|
|
64
67
|
error: null
|
|
65
68
|
};
|
|
66
69
|
} catch (cause) {
|
|
67
70
|
return {
|
|
68
71
|
wallet: null,
|
|
72
|
+
connected: false,
|
|
69
73
|
error: createSolanaError("STORAGE_FAILURE", "Unable to read the selected Solana wallet", {
|
|
70
74
|
cause
|
|
71
75
|
})
|
|
72
76
|
};
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
|
-
function writeSelectedWallet(wallet) {
|
|
79
|
+
function writeSelectedWallet(wallet, connected = false) {
|
|
76
80
|
const { storage, error } = getLocalStorage();
|
|
77
81
|
if (error || !storage) {
|
|
78
82
|
return error;
|
|
79
83
|
}
|
|
80
84
|
try {
|
|
81
85
|
if (wallet) {
|
|
82
|
-
storage.setItem(
|
|
86
|
+
storage.setItem(
|
|
87
|
+
SELECTED_WALLET_STORAGE_KEY,
|
|
88
|
+
JSON.stringify(
|
|
89
|
+
connected ? { ...toPersistedSelectedWallet(wallet), connected: true } : toPersistedSelectedWallet(wallet)
|
|
90
|
+
)
|
|
91
|
+
);
|
|
83
92
|
} else {
|
|
84
93
|
storage.removeItem(SELECTED_WALLET_STORAGE_KEY);
|
|
85
94
|
}
|
|
@@ -91,6 +100,9 @@ function writeSelectedWallet(wallet) {
|
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
102
|
function stringifySelectedWallet(wallet) {
|
|
103
|
+
return JSON.stringify(toPersistedSelectedWallet(wallet));
|
|
104
|
+
}
|
|
105
|
+
function toPersistedSelectedWallet(wallet) {
|
|
94
106
|
const value = { name: wallet.name };
|
|
95
107
|
if (wallet.platform) {
|
|
96
108
|
value.platform = wallet.platform;
|
|
@@ -98,7 +110,7 @@ function stringifySelectedWallet(wallet) {
|
|
|
98
110
|
if (wallet.source) {
|
|
99
111
|
value.source = wallet.source;
|
|
100
112
|
}
|
|
101
|
-
return
|
|
113
|
+
return value;
|
|
102
114
|
}
|
|
103
115
|
function getLocalStorage() {
|
|
104
116
|
if (typeof window === "undefined") {
|
|
@@ -121,6 +133,7 @@ function createSolanaWalletRegistry(options) {
|
|
|
121
133
|
const adaptedWallets = /* @__PURE__ */ new WeakMap();
|
|
122
134
|
const adaptedPrimitiveWallets = /* @__PURE__ */ new Map();
|
|
123
135
|
const trackedAdapters = /* @__PURE__ */ new Set();
|
|
136
|
+
const sendTransaction = (signedTransaction, sendOptions) => sendSignedTransaction(options.client, signedTransaction, sendOptions);
|
|
124
137
|
function trackAdapter(adapter) {
|
|
125
138
|
trackedAdapters.add(adapter);
|
|
126
139
|
return adapter;
|
|
@@ -131,7 +144,7 @@ function createSolanaWalletRegistry(options) {
|
|
|
131
144
|
if (cachedIosWallet) {
|
|
132
145
|
return cachedIosWallet;
|
|
133
146
|
}
|
|
134
|
-
const iosAdapter =
|
|
147
|
+
const iosAdapter = decorateAdapter(
|
|
135
148
|
adaptSolanaIosWallet(walletInfo, {
|
|
136
149
|
chain: getSolanaChain(options.cluster),
|
|
137
150
|
cluster: options.cluster,
|
|
@@ -149,10 +162,11 @@ function createSolanaWalletRegistry(options) {
|
|
|
149
162
|
if (cachedPrimitiveWallet) {
|
|
150
163
|
return cachedPrimitiveWallet;
|
|
151
164
|
}
|
|
152
|
-
const primitiveAdapter =
|
|
165
|
+
const primitiveAdapter = decorateAdapter(
|
|
153
166
|
adaptSolanaStandardWallet(walletInfo, {
|
|
154
167
|
chain: getSolanaChain(options.cluster),
|
|
155
|
-
onChange: options.onWalletChange
|
|
168
|
+
onChange: options.onWalletChange,
|
|
169
|
+
sendTransaction
|
|
156
170
|
}),
|
|
157
171
|
walletInfo
|
|
158
172
|
);
|
|
@@ -163,10 +177,11 @@ function createSolanaWalletRegistry(options) {
|
|
|
163
177
|
if (cachedWallet) {
|
|
164
178
|
return cachedWallet;
|
|
165
179
|
}
|
|
166
|
-
const cachedAdapter =
|
|
180
|
+
const cachedAdapter = decorateAdapter(
|
|
167
181
|
adaptSolanaStandardWallet(walletInfo, {
|
|
168
182
|
chain: getSolanaChain(options.cluster),
|
|
169
|
-
onChange: options.onWalletChange
|
|
183
|
+
onChange: options.onWalletChange,
|
|
184
|
+
sendTransaction
|
|
170
185
|
}),
|
|
171
186
|
walletInfo
|
|
172
187
|
);
|
|
@@ -193,14 +208,50 @@ function createSolanaWalletRegistry(options) {
|
|
|
193
208
|
options.onError?.(cause);
|
|
194
209
|
}
|
|
195
210
|
}
|
|
211
|
+
function decorateAdapter(adapter, walletInfo) {
|
|
212
|
+
return reportConnectionChanges(makeConnectExclusive(adapter, walletInfo), walletInfo);
|
|
213
|
+
}
|
|
196
214
|
function makeConnectExclusive(adapter, walletInfo) {
|
|
197
215
|
const connect = adapter.connect.bind(adapter);
|
|
198
|
-
adapter.connect = async () => {
|
|
199
|
-
await connect();
|
|
216
|
+
adapter.connect = async (connectOptions) => {
|
|
217
|
+
await connect(connectOptions);
|
|
218
|
+
if (connectOptions?.silent && !adapter.connected) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
200
221
|
await disconnectOtherWallets(walletInfo, adapter);
|
|
201
222
|
};
|
|
202
223
|
return adapter;
|
|
203
224
|
}
|
|
225
|
+
function reportConnectionChanges(adapter, walletInfo) {
|
|
226
|
+
const connect = adapter.connect.bind(adapter);
|
|
227
|
+
const disconnect = adapter.disconnect.bind(adapter);
|
|
228
|
+
const signIn = adapter.signIn?.bind(adapter);
|
|
229
|
+
const report = () => options.onConnectionChange?.(walletInfo, adapter.connected);
|
|
230
|
+
adapter.connect = async (connectOptions) => {
|
|
231
|
+
await connect(connectOptions);
|
|
232
|
+
report();
|
|
233
|
+
};
|
|
234
|
+
adapter.disconnect = async () => {
|
|
235
|
+
try {
|
|
236
|
+
await disconnect();
|
|
237
|
+
} finally {
|
|
238
|
+
report();
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
if (signIn) {
|
|
242
|
+
adapter.signIn = async (input) => {
|
|
243
|
+
const wasConnected = adapter.connected;
|
|
244
|
+
try {
|
|
245
|
+
return await signIn(input);
|
|
246
|
+
} finally {
|
|
247
|
+
if (adapter.connected !== wasConnected) {
|
|
248
|
+
report();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
return adapter;
|
|
254
|
+
}
|
|
204
255
|
async function disconnectOtherWallets(currentWallet, currentAdapter) {
|
|
205
256
|
await Promise.all(
|
|
206
257
|
options.getWalletInfos().map(async (walletInfo) => {
|
|
@@ -263,9 +314,15 @@ function createSolanaPlugin(options = {}) {
|
|
|
263
314
|
const latestBlockhash = ref(null);
|
|
264
315
|
const walletRegistry = createSolanaWalletRegistry({
|
|
265
316
|
cluster: context.cluster,
|
|
317
|
+
client: context.client,
|
|
266
318
|
iosWallet: options.iosWallet,
|
|
267
319
|
getWalletInfos: () => wallets.value,
|
|
268
320
|
onWalletChange: () => triggerRef(wallet),
|
|
321
|
+
onConnectionChange: (walletInfo, connected) => {
|
|
322
|
+
if (selectedWallet.value && isSameWallet(walletInfo, selectedWallet.value)) {
|
|
323
|
+
persistSelectedWallet(selectedWallet.value, connected);
|
|
324
|
+
}
|
|
325
|
+
},
|
|
269
326
|
onError: (cause) => {
|
|
270
327
|
error.value = normalizeSolanaError(cause, "WALLET_FAILURE");
|
|
271
328
|
logDevError("Failed to handle Solana iOS wallet callback", cause);
|
|
@@ -312,6 +369,7 @@ function createSolanaPlugin(options = {}) {
|
|
|
312
369
|
walletRegistry.handleIosWalletCallback();
|
|
313
370
|
wallets.value = walletRegistry.getDiscoveredWallets();
|
|
314
371
|
let restoredWallet = null;
|
|
372
|
+
let restoreConnection = false;
|
|
315
373
|
if (selectedWallet.value) {
|
|
316
374
|
selectedWallet.value = wallets.value.find((nextWallet) => isSameWallet(nextWallet, selectedWallet.value)) ?? null;
|
|
317
375
|
if (!selectedWallet.value) {
|
|
@@ -319,6 +377,7 @@ function createSolanaPlugin(options = {}) {
|
|
|
319
377
|
}
|
|
320
378
|
} else if (!options.wallet) {
|
|
321
379
|
const persistedWallet = readSelectedWallet();
|
|
380
|
+
restoreConnection = persistedWallet.connected;
|
|
322
381
|
if (persistedWallet.error) {
|
|
323
382
|
error.value = persistedWallet.error;
|
|
324
383
|
logDevError("Failed to read the persisted Solana wallet", persistedWallet.error);
|
|
@@ -335,7 +394,7 @@ function createSolanaPlugin(options = {}) {
|
|
|
335
394
|
registerMobileWallets();
|
|
336
395
|
}
|
|
337
396
|
if (restoredWallet) {
|
|
338
|
-
autoConnectWallet(restoredWallet);
|
|
397
|
+
autoConnectWallet(restoredWallet, restoreConnection);
|
|
339
398
|
}
|
|
340
399
|
}
|
|
341
400
|
function registerMobileWallets() {
|
|
@@ -361,14 +420,17 @@ function createSolanaPlugin(options = {}) {
|
|
|
361
420
|
function selectWallet(nextWallet) {
|
|
362
421
|
selectedWallet.value = nextWallet;
|
|
363
422
|
wallet.value = nextWallet ? walletRegistry.getAdaptedWallet(nextWallet) : options.wallet ?? null;
|
|
364
|
-
|
|
423
|
+
persistSelectedWallet(nextWallet, Boolean(nextWallet && wallet.value?.connected));
|
|
424
|
+
}
|
|
425
|
+
function persistSelectedWallet(walletInfo, connected) {
|
|
426
|
+
const storageError = writeSelectedWallet(walletInfo, connected);
|
|
365
427
|
if (storageError) {
|
|
366
428
|
error.value = storageError;
|
|
367
429
|
logDevError("Failed to persist the selected Solana wallet", storageError);
|
|
368
430
|
}
|
|
369
431
|
}
|
|
370
|
-
function autoConnectWallet(walletInfo) {
|
|
371
|
-
if (!options.autoConnect) {
|
|
432
|
+
function autoConnectWallet(walletInfo, wasConnected) {
|
|
433
|
+
if (!options.autoConnect && !wasConnected) {
|
|
372
434
|
return;
|
|
373
435
|
}
|
|
374
436
|
const activeWallet = wallet.value;
|
|
@@ -377,8 +439,10 @@ function createSolanaPlugin(options = {}) {
|
|
|
377
439
|
return;
|
|
378
440
|
}
|
|
379
441
|
attemptedAutoConnectWallet = storageValue;
|
|
380
|
-
void activeWallet.connect().catch((cause) => {
|
|
381
|
-
|
|
442
|
+
void activeWallet.connect({ silent: true }).catch((cause) => {
|
|
443
|
+
if (options.autoConnect) {
|
|
444
|
+
error.value = normalizeSolanaError(cause, "WALLET_FAILURE");
|
|
445
|
+
}
|
|
382
446
|
logDevError("Failed to auto-connect Solana wallet", cause);
|
|
383
447
|
}).finally(() => {
|
|
384
448
|
triggerRef(wallet);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PartialSignAndSendError, normalizeSolanaError } from '@vue-solana/core/errors';
|
|
2
2
|
import { withSolanaTimeout } from '@vue-solana/core/timeout';
|
|
3
3
|
import { createNoWalletSelectedError, assertWalletCanSignAndSendTransactions } from '@vue-solana/core/wallet';
|
|
4
4
|
import { shallowRef } from 'vue';
|
|
@@ -6,13 +6,6 @@ import { u as useExecution } from './vue.BiKE9Xuv.mjs';
|
|
|
6
6
|
import { u as useWallet } from './vue.Bc_Kbwr5.mjs';
|
|
7
7
|
|
|
8
8
|
const SIGN_AND_SEND_TIMEOUT_MS = 12e4;
|
|
9
|
-
class PartialSignAndSendError extends SolanaError {
|
|
10
|
-
constructor(cause, signatures) {
|
|
11
|
-
super(cause.code, cause.message, { cause: cause.cause, feature: cause.feature });
|
|
12
|
-
this.signatures = signatures;
|
|
13
|
-
this.name = "PartialSignAndSendError";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
9
|
function useSignAndSendTransactions() {
|
|
17
10
|
const { wallet } = useWallet();
|
|
18
11
|
const signatures = shallowRef(null);
|
|
@@ -63,4 +56,4 @@ function useSignAndSendTransactions() {
|
|
|
63
56
|
};
|
|
64
57
|
}
|
|
65
58
|
|
|
66
|
-
export {
|
|
59
|
+
export { useSignAndSendTransactions as u };
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
+
import * as _vue_solana_core from '@vue-solana/core';
|
|
1
2
|
import * as vue from 'vue';
|
|
2
3
|
import { Signature } from '@vue-solana/core/kit';
|
|
3
4
|
import { SolanaTransaction, SendTransactionOptions } from '@vue-solana/core/types';
|
|
4
|
-
|
|
5
|
+
export { PartialSignAndSendError } from '@vue-solana/core/errors';
|
|
5
6
|
|
|
6
7
|
type SignAndSendTransactionsStatus = "idle" | "sending" | "sent" | "error";
|
|
7
|
-
|
|
8
|
-
* Thrown when the singular fallback path fails partway through: the earlier
|
|
9
|
-
* transactions in the batch have already been sent, and their signatures are
|
|
10
|
-
* exposed here so callers can avoid resubmitting them.
|
|
11
|
-
*/
|
|
12
|
-
declare class PartialSignAndSendError extends SolanaError {
|
|
13
|
-
readonly signatures: Signature[];
|
|
14
|
-
constructor(cause: SolanaError, signatures: Signature[]);
|
|
15
|
-
}
|
|
8
|
+
|
|
16
9
|
/**
|
|
17
10
|
* Sign and send multiple serialized transactions in a single wallet request,
|
|
18
11
|
* returning one signature per transaction.
|
|
@@ -27,9 +20,9 @@ declare function useSignAndSendTransactions(): {
|
|
|
27
20
|
signatures: vue.ShallowRef<Signature[] | null, Signature[] | null>;
|
|
28
21
|
status: vue.ShallowRef<SignAndSendTransactionsStatus>;
|
|
29
22
|
loading: vue.ComputedRef<boolean>;
|
|
30
|
-
error: vue.Ref<SolanaError | null, SolanaError | null>;
|
|
23
|
+
error: vue.Ref<_vue_solana_core.SolanaError | null, _vue_solana_core.SolanaError | null>;
|
|
31
24
|
execute: (transactions: SolanaTransaction[], options?: SendTransactionOptions) => Promise<Signature[]>;
|
|
32
25
|
};
|
|
33
26
|
|
|
34
|
-
export {
|
|
27
|
+
export { useSignAndSendTransactions };
|
|
35
28
|
export type { SignAndSendTransactionsStatus };
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { u as useSignAndSendTransactions } from './shared/vue.sPcsjyKU.mjs';
|
|
2
|
+
export { PartialSignAndSendError } from '@vue-solana/core/errors';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue-solana/vue",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.4",
|
|
4
4
|
"description": "Vue plugin and composables for Solana applications.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
"access": "public"
|
|
195
195
|
},
|
|
196
196
|
"dependencies": {
|
|
197
|
-
"@vue-solana/core": "4.1.
|
|
197
|
+
"@vue-solana/core": "4.1.4"
|
|
198
198
|
},
|
|
199
199
|
"peerDependencies": {
|
|
200
200
|
"vue": "^3.5.0"
|