@vue-solana/vue 1.2.0 → 2.1.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.
Files changed (220) hide show
  1. package/README.md +162 -23
  2. package/dist/buffer-polyfill.d.cts +0 -1
  3. package/dist/buffer-polyfill.d.mts +0 -1
  4. package/dist/buffer-polyfill.d.ts +0 -1
  5. package/dist/index.cjs +62 -22
  6. package/dist/index.d.cts +29 -13
  7. package/dist/index.d.mts +29 -13
  8. package/dist/index.d.ts +29 -13
  9. package/dist/index.mjs +41 -21
  10. package/dist/kit.d.cts +1 -1
  11. package/dist/kit.d.mts +1 -1
  12. package/dist/kit.d.ts +1 -1
  13. package/dist/shared/vue.5euWd6-V.mjs +59 -0
  14. package/dist/shared/vue.9TPxZPMf.cjs +59 -0
  15. package/dist/shared/vue.B4-LEdSE.cjs +102 -0
  16. package/dist/shared/{vue.C0uCLjJ6.cjs → vue.B6ainw2G.cjs} +1 -1
  17. package/dist/shared/vue.B8LptjZP.mjs +32 -0
  18. package/dist/shared/vue.B8pLQ8P4.cjs +105 -0
  19. package/dist/shared/vue.B8ub540p.mjs +109 -0
  20. package/dist/shared/{vue.D0ycWj82.mjs → vue.BD6Gm1nl.mjs} +9 -9
  21. package/dist/shared/{vue.BEesxsrA.cjs → vue.BGxz4dru.cjs} +7 -3
  22. package/dist/shared/{vue.DDxhSi72.mjs → vue.BINkrA8h.mjs} +9 -9
  23. package/dist/shared/{vue.COPnX5fq.cjs → vue.BIxphCAq.cjs} +1 -1
  24. package/dist/shared/{vue.CKTUFwSI.mjs → vue.BOpgWr43.mjs} +9 -10
  25. package/dist/shared/vue.BQRpjwKl.mjs +80 -0
  26. package/dist/shared/vue.BVaMoz9y.cjs +9 -0
  27. package/dist/shared/vue.BVj9lWBK.cjs +111 -0
  28. package/dist/shared/vue.BY0qpgYr.cjs +35 -0
  29. package/dist/shared/vue.Bfu1dCKe.mjs +10 -0
  30. package/dist/shared/vue.Bk5xjlUx.cjs +61 -0
  31. package/dist/shared/{vue.BtUKvuQw.mjs → vue.BsGwt78R.mjs} +2 -2
  32. package/dist/shared/{vue.BbX3ePDY.cjs → vue.Bwd1sGAM.cjs} +9 -10
  33. package/dist/shared/vue.ByxbBC3y.mjs +57 -0
  34. package/dist/shared/{vue.CPjEwHSg.mjs → vue.C13umiQi.mjs} +20 -8
  35. package/dist/shared/vue.C5FVoEZT.mjs +99 -0
  36. package/dist/shared/vue.CATOh_9G.mjs +42 -0
  37. package/dist/shared/{vue.Bhdhmz8d.cjs → vue.CIs8QhCw.cjs} +18 -74
  38. package/dist/shared/vue.CMohL_Cz.mjs +58 -0
  39. package/dist/shared/{vue.CYKT65tB.mjs → vue.CQh3AUE8.mjs} +2 -6
  40. package/dist/shared/{vue.DzKfcfpX.cjs → vue.CWZSMVnB.cjs} +6 -6
  41. package/dist/shared/{vue.B12Pt1PQ.mjs → vue.CXB4NEMA.mjs} +18 -74
  42. package/dist/shared/{vue.DFbay4mm.mjs → vue.C_4qJDiF.mjs} +1 -1
  43. package/dist/shared/vue.CoaIWGPT.cjs +38 -0
  44. package/dist/shared/vue.CogzzQXM.mjs +171 -0
  45. package/dist/shared/vue.CpkwC8Th.mjs +7 -0
  46. package/dist/shared/vue.CrkK_T15.cjs +86 -0
  47. package/dist/shared/vue.D-qi8PSL.cjs +82 -0
  48. package/dist/shared/{vue.B2AQR2bE.mjs → vue.D218Ow7t.mjs} +8 -4
  49. package/dist/shared/{vue.QHAHFnw8.mjs → vue.D3Y0PWbF.mjs} +3 -3
  50. package/dist/shared/vue.D5U1yLG3.mjs +83 -0
  51. package/dist/shared/{vue.j1vB3h1n.cjs → vue.DAg5wC1G.cjs} +9 -9
  52. package/dist/shared/vue.DDbVk0Zh.cjs +180 -0
  53. package/dist/shared/{vue.BE4KHksm.cjs → vue.DE3emjSF.cjs} +2 -7
  54. package/dist/shared/vue.DEHxNvUX.cjs +7 -0
  55. package/dist/shared/vue.DFaMJLAQ.cjs +60 -0
  56. package/dist/shared/vue.DImwKTwJ.mjs +103 -0
  57. package/dist/shared/{vue.G9t8pE0J.cjs → vue.DKyQ7J67.cjs} +1 -1
  58. package/dist/shared/vue.DNxOpDXz.cjs +12 -0
  59. package/dist/shared/vue.DXQVIRZA.mjs +174 -0
  60. package/dist/shared/vue.DYk0Xfr3.mjs +36 -0
  61. package/dist/shared/vue.D_P5SqqD.mjs +5 -0
  62. package/dist/shared/{vue.B14U1xmP.cjs → vue.Di7yjJ-R.cjs} +20 -8
  63. package/dist/shared/vue.DtCbCcPd.cjs +173 -0
  64. package/dist/shared/{vue.CM_uqVc0.mjs → vue.Dyi1OCI1.mjs} +6 -6
  65. package/dist/shared/{vue.BsD6AAmO.cjs → vue.E_npPFoV.cjs} +8 -8
  66. package/dist/shared/{vue.LNhX07HB.cjs → vue.FiMmnMHr.cjs} +2 -2
  67. package/dist/shared/{vue.CSzg70vB.mjs → vue.JUWqu6kD.mjs} +1 -1
  68. package/dist/shared/{vue.By1CUlOU.mjs → vue.Mxc8w6Qk.mjs} +1 -1
  69. package/dist/shared/{vue.ByUemLSf.cjs → vue.Sbbm9JSu.cjs} +3 -3
  70. package/dist/shared/vue.g8fnm_ca.cjs +45 -0
  71. package/dist/swr.cjs +136 -0
  72. package/dist/swr.d.cts +41 -0
  73. package/dist/swr.d.mts +41 -0
  74. package/dist/swr.d.ts +41 -0
  75. package/dist/swr.mjs +131 -0
  76. package/dist/useAccountInfo.cjs +7 -5
  77. package/dist/useAccountInfo.d.cts +12 -8
  78. package/dist/useAccountInfo.d.mts +12 -8
  79. package/dist/useAccountInfo.d.ts +12 -8
  80. package/dist/useAccountInfo.mjs +7 -5
  81. package/dist/useAction.cjs +9 -0
  82. package/dist/useAction.d.cts +45 -0
  83. package/dist/useAction.d.mts +45 -0
  84. package/dist/useAction.d.ts +45 -0
  85. package/dist/useAction.mjs +3 -0
  86. package/dist/useBalance.cjs +5 -4
  87. package/dist/useBalance.d.cts +4 -2
  88. package/dist/useBalance.d.mts +4 -2
  89. package/dist/useBalance.d.ts +4 -2
  90. package/dist/useBalance.mjs +5 -4
  91. package/dist/useClientCapability.cjs +12 -0
  92. package/dist/useClientCapability.d.cts +39 -0
  93. package/dist/useClientCapability.d.mts +39 -0
  94. package/dist/useClientCapability.d.ts +39 -0
  95. package/dist/useClientCapability.mjs +5 -0
  96. package/dist/useConnection.cjs +4 -3
  97. package/dist/useConnection.d.cts +9 -2
  98. package/dist/useConnection.d.mts +9 -2
  99. package/dist/useConnection.d.ts +9 -2
  100. package/dist/useConnection.mjs +4 -3
  101. package/dist/useIdentity.cjs +12 -0
  102. package/dist/useIdentity.d.cts +3 -0
  103. package/dist/useIdentity.d.mts +3 -0
  104. package/dist/useIdentity.d.ts +3 -0
  105. package/dist/useIdentity.mjs +6 -0
  106. package/dist/usePayer.cjs +13 -0
  107. package/dist/usePayer.d.cts +18 -0
  108. package/dist/usePayer.d.mts +18 -0
  109. package/dist/usePayer.d.ts +18 -0
  110. package/dist/usePayer.mjs +6 -0
  111. package/dist/usePlanTransaction.cjs +14 -0
  112. package/dist/usePlanTransaction.d.cts +37 -0
  113. package/dist/usePlanTransaction.d.mts +37 -0
  114. package/dist/usePlanTransaction.d.ts +37 -0
  115. package/dist/usePlanTransaction.mjs +7 -0
  116. package/dist/usePlanTransactions.cjs +13 -0
  117. package/dist/usePlanTransactions.d.cts +4 -0
  118. package/dist/usePlanTransactions.d.mts +4 -0
  119. package/dist/usePlanTransactions.d.ts +4 -0
  120. package/dist/usePlanTransactions.mjs +7 -0
  121. package/dist/useProgramAccounts.cjs +7 -5
  122. package/dist/useProgramAccounts.d.cts +24 -9
  123. package/dist/useProgramAccounts.d.mts +24 -9
  124. package/dist/useProgramAccounts.d.ts +24 -9
  125. package/dist/useProgramAccounts.mjs +7 -5
  126. package/dist/useRequest.cjs +11 -0
  127. package/dist/useRequest.d.cts +57 -0
  128. package/dist/useRequest.d.mts +57 -0
  129. package/dist/useRequest.d.ts +57 -0
  130. package/dist/useRequest.mjs +5 -0
  131. package/dist/useRpc.cjs +3 -2
  132. package/dist/useRpc.d.cts +5 -2
  133. package/dist/useRpc.d.mts +5 -2
  134. package/dist/useRpc.d.ts +5 -2
  135. package/dist/useRpc.mjs +3 -2
  136. package/dist/useSelectedWalletAccount.cjs +13 -0
  137. package/dist/useSelectedWalletAccount.d.cts +117 -0
  138. package/dist/useSelectedWalletAccount.d.mts +117 -0
  139. package/dist/useSelectedWalletAccount.d.ts +117 -0
  140. package/dist/useSelectedWalletAccount.mjs +3 -0
  141. package/dist/useSignAndSendTransaction.cjs +7 -6
  142. package/dist/useSignAndSendTransaction.d.cts +18 -24
  143. package/dist/useSignAndSendTransaction.d.mts +18 -24
  144. package/dist/useSignAndSendTransaction.d.ts +18 -24
  145. package/dist/useSignAndSendTransaction.mjs +7 -6
  146. package/dist/useSignAndSendTransactions.cjs +15 -0
  147. package/dist/useSignAndSendTransactions.d.cts +35 -0
  148. package/dist/useSignAndSendTransactions.d.mts +35 -0
  149. package/dist/useSignAndSendTransactions.d.ts +35 -0
  150. package/dist/useSignAndSendTransactions.mjs +8 -0
  151. package/dist/useSignIn.cjs +13 -0
  152. package/dist/useSignIn.d.cts +23 -0
  153. package/dist/useSignIn.d.mts +23 -0
  154. package/dist/useSignIn.d.ts +23 -0
  155. package/dist/useSignIn.mjs +7 -0
  156. package/dist/useSignMessage.cjs +4 -3
  157. package/dist/useSignMessage.mjs +4 -3
  158. package/dist/useSignTransactions.cjs +13 -0
  159. package/dist/useSignTransactions.d.cts +24 -0
  160. package/dist/useSignTransactions.d.mts +24 -0
  161. package/dist/useSignTransactions.d.ts +24 -0
  162. package/dist/useSignTransactions.mjs +7 -0
  163. package/dist/useSignatureStatus.cjs +5 -4
  164. package/dist/useSignatureStatus.d.cts +9 -5
  165. package/dist/useSignatureStatus.d.mts +9 -5
  166. package/dist/useSignatureStatus.d.ts +9 -5
  167. package/dist/useSignatureStatus.mjs +5 -4
  168. package/dist/useSolana.cjs +2 -1
  169. package/dist/useSolana.mjs +2 -1
  170. package/dist/useSolanaClient.cjs +3 -2
  171. package/dist/useSolanaClient.mjs +3 -2
  172. package/dist/useSubscription.cjs +9 -0
  173. package/dist/useSubscription.d.cts +58 -0
  174. package/dist/useSubscription.d.mts +58 -0
  175. package/dist/useSubscription.d.ts +58 -0
  176. package/dist/useSubscription.mjs +3 -0
  177. package/dist/useTokenAccounts.cjs +7 -6
  178. package/dist/useTokenAccounts.d.cts +6 -6
  179. package/dist/useTokenAccounts.d.mts +6 -6
  180. package/dist/useTokenAccounts.d.ts +6 -6
  181. package/dist/useTokenAccounts.mjs +7 -6
  182. package/dist/useTokenBalance.cjs +7 -6
  183. package/dist/useTokenBalance.d.cts +2 -2
  184. package/dist/useTokenBalance.d.mts +2 -2
  185. package/dist/useTokenBalance.d.ts +2 -2
  186. package/dist/useTokenBalance.mjs +7 -6
  187. package/dist/useTrackedData.cjs +10 -0
  188. package/dist/useTrackedData.d.cts +86 -0
  189. package/dist/useTrackedData.d.mts +86 -0
  190. package/dist/useTrackedData.d.ts +86 -0
  191. package/dist/useTrackedData.mjs +4 -0
  192. package/dist/useTransaction.cjs +2 -1
  193. package/dist/useTransaction.d.cts +13 -3
  194. package/dist/useTransaction.d.mts +13 -3
  195. package/dist/useTransaction.d.ts +13 -3
  196. package/dist/useTransaction.mjs +2 -1
  197. package/dist/useTransactionConfirmation.cjs +5 -4
  198. package/dist/useTransactionConfirmation.d.cts +18 -24
  199. package/dist/useTransactionConfirmation.d.mts +18 -24
  200. package/dist/useTransactionConfirmation.d.ts +18 -24
  201. package/dist/useTransactionConfirmation.mjs +5 -4
  202. package/dist/useWallet.cjs +3 -2
  203. package/dist/useWallet.d.cts +2 -2
  204. package/dist/useWallet.d.mts +2 -2
  205. package/dist/useWallet.d.ts +2 -2
  206. package/dist/useWallet.mjs +3 -2
  207. package/dist/useWallets.cjs +3 -2
  208. package/dist/useWallets.mjs +3 -2
  209. package/package.json +73 -9
  210. package/dist/shared/vue.C4d2JA8U.mjs +0 -44
  211. package/dist/shared/vue.CE5i8KZZ.cjs +0 -46
  212. package/dist/shared/vue.CfrVAzEf.mjs +0 -129
  213. package/dist/shared/vue.DCgByzxg.cjs +0 -9
  214. package/dist/shared/vue.DiNn3XHm.mjs +0 -7
  215. package/dist/shared/vue._CAClzAz.cjs +0 -131
  216. package/dist/web3.cjs +0 -13
  217. package/dist/web3.d.cts +0 -1
  218. package/dist/web3.d.mts +0 -1
  219. package/dist/web3.d.ts +0 -1
  220. package/dist/web3.mjs +0 -1
@@ -0,0 +1,180 @@
1
+ 'use strict';
2
+
3
+ const vue = require('vue');
4
+ const injection = require('./vue.DEHxNvUX.cjs');
5
+
6
+ const SELECTED_WALLET_ACCOUNT_STORAGE_KEY = "vue-solana:selected-wallet-account";
7
+ function createLocalStorageSelectedWalletAccountStorage(storage = defaultLocalStorage()) {
8
+ return {
9
+ storeSelectedWallet(key) {
10
+ try {
11
+ storage?.setItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY, key);
12
+ } catch {
13
+ }
14
+ },
15
+ getSelectedWallet() {
16
+ try {
17
+ return storage?.getItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY) ?? null;
18
+ } catch {
19
+ return null;
20
+ }
21
+ },
22
+ deleteSelectedWallet() {
23
+ try {
24
+ storage?.removeItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY);
25
+ } catch {
26
+ }
27
+ }
28
+ };
29
+ }
30
+ function defaultLocalStorage() {
31
+ if (typeof window === "undefined") {
32
+ return null;
33
+ }
34
+ try {
35
+ return window.localStorage;
36
+ } catch {
37
+ return null;
38
+ }
39
+ }
40
+
41
+ const selectedWalletAccountInjectionKey = Symbol.for("vue-solana:selected-wallet-account");
42
+ function provideSelectedWalletAccount(options = {}) {
43
+ const context = createSelectedWalletAccountContext(options);
44
+ vue.provide(selectedWalletAccountInjectionKey, context);
45
+ return context;
46
+ }
47
+ function createSelectedWalletAccountContext(options = {}, solanaContextOverride) {
48
+ const solanaContext = solanaContextOverride ?? vue.inject(injection.solanaInjectionKey, null);
49
+ const stateSync = options.stateSync === void 0 ? defaultStateSync() : options.stateSync;
50
+ const selectedWalletAccount = vue.ref(null);
51
+ const walletsValue = () => solanaContext?.wallets.value ?? [];
52
+ let pendingKey = null;
53
+ let selectionGeneration = 0;
54
+ function findAccount(key) {
55
+ const separatorIndex = key.lastIndexOf(":");
56
+ const walletName = separatorIndex === -1 ? key : key.slice(0, separatorIndex);
57
+ const address = separatorIndex === -1 ? "" : key.slice(separatorIndex + 1);
58
+ const wallet = walletsValue().find((candidate) => candidate.name === walletName);
59
+ const account = wallet?.accounts.find((candidate) => candidate.address === address);
60
+ if (!wallet || !account) {
61
+ return null;
62
+ }
63
+ return { ...account, walletName: wallet.name };
64
+ }
65
+ function clearSelection() {
66
+ selectionGeneration += 1;
67
+ pendingKey = null;
68
+ selectedWalletAccount.value = null;
69
+ }
70
+ function applyExternalSelection(key) {
71
+ if (!key) {
72
+ clearSelection();
73
+ return;
74
+ }
75
+ const account = findAccount(key);
76
+ if (account) {
77
+ selectionGeneration += 1;
78
+ pendingKey = null;
79
+ selectedWalletAccount.value = account;
80
+ return;
81
+ }
82
+ pendingKey = key;
83
+ }
84
+ function restoreIfAvailable() {
85
+ if (!pendingKey || selectedWalletAccount.value) {
86
+ return;
87
+ }
88
+ const account = findAccount(pendingKey);
89
+ if (account) {
90
+ selectedWalletAccount.value = account;
91
+ pendingKey = null;
92
+ }
93
+ }
94
+ if (stateSync) {
95
+ const generation = selectionGeneration;
96
+ void Promise.resolve(stateSync.getSelectedWallet()).then((key) => {
97
+ if (generation !== selectionGeneration || !key || selectedWalletAccount.value) {
98
+ return;
99
+ }
100
+ pendingKey = key;
101
+ restoreIfAvailable();
102
+ }).catch(() => void 0);
103
+ }
104
+ if (solanaContext) {
105
+ vue.watch(
106
+ () => solanaContext.wallets.value,
107
+ () => restoreIfAvailable()
108
+ );
109
+ }
110
+ if (stateSync && typeof window !== "undefined") {
111
+ const onStorage = () => {
112
+ void Promise.resolve(stateSync.getSelectedWallet()).then((key) => applyExternalSelection(key)).catch(() => void 0);
113
+ };
114
+ window.addEventListener("storage", onStorage);
115
+ if (vue.getCurrentScope()) {
116
+ vue.onScopeDispose(() => window.removeEventListener("storage", onStorage));
117
+ }
118
+ }
119
+ const context = {
120
+ selectedWalletAccount,
121
+ setSelectedWalletAccount(account) {
122
+ selectionGeneration += 1;
123
+ selectedWalletAccount.value = account;
124
+ pendingKey = null;
125
+ if (!stateSync) {
126
+ return;
127
+ }
128
+ const persisted = account ? stateSync.storeSelectedWallet(`${account.walletName}:${account.address}`) : stateSync.deleteSelectedWallet();
129
+ void Promise.resolve(persisted).catch(() => void 0);
130
+ },
131
+ filteredWallets: vue.computed(() => {
132
+ const filter = options.filterWallet;
133
+ if (!filter) {
134
+ return walletsValue();
135
+ }
136
+ return walletsValue().map((wallet) => {
137
+ const accounts = wallet.accounts.filter((account) => filter(wallet.name, account));
138
+ return accounts.length === 0 ? null : { ...wallet, accounts };
139
+ }).filter((wallet) => wallet !== null);
140
+ })
141
+ };
142
+ return context;
143
+ }
144
+ function useSelectedWalletAccount() {
145
+ const context = vue.inject(selectedWalletAccountInjectionKey, null);
146
+ if (!context) {
147
+ throw new Error("useSelectedWalletAccount must be used inside a SelectedWalletAccountProvider");
148
+ }
149
+ return [context.selectedWalletAccount, context.setSelectedWalletAccount, context.filteredWallets];
150
+ }
151
+ function defaultStateSync() {
152
+ return createLocalStorageSelectedWalletAccountStorage();
153
+ }
154
+
155
+ const SelectedWalletAccountProvider = vue.defineComponent({
156
+ name: "SelectedWalletAccountProvider",
157
+ props: {
158
+ filterWallet: {
159
+ type: Function,
160
+ default: void 0
161
+ },
162
+ stateSync: {
163
+ type: [Object, null],
164
+ default: void 0
165
+ }
166
+ },
167
+ setup(props, { slots }) {
168
+ provideSelectedWalletAccount({
169
+ filterWallet: props.filterWallet,
170
+ stateSync: props.stateSync
171
+ });
172
+ return () => slots.default?.();
173
+ }
174
+ });
175
+
176
+ exports.SelectedWalletAccountProvider = SelectedWalletAccountProvider;
177
+ exports.createSelectedWalletAccountContext = createSelectedWalletAccountContext;
178
+ exports.provideSelectedWalletAccount = provideSelectedWalletAccount;
179
+ exports.selectedWalletAccountInjectionKey = selectedWalletAccountInjectionKey;
180
+ exports.useSelectedWalletAccount = useSelectedWalletAccount;
@@ -1,14 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  const vue = require('vue');
4
-
5
- const solanaInjectionKey = Symbol.for(
6
- "vue-solana:context"
7
- );
4
+ const injection = require('./vue.DEHxNvUX.cjs');
8
5
 
9
6
  let ssrContext;
10
7
  function tryUseSolana() {
11
- return vue.inject(solanaInjectionKey, null);
8
+ return vue.inject(injection.solanaInjectionKey, null);
12
9
  }
13
10
  function useSolana() {
14
11
  return tryUseSolana() ?? getSsrContext();
@@ -18,7 +15,6 @@ function getSsrContext() {
18
15
  cluster: "devnet",
19
16
  endpoint: "",
20
17
  wsEndpoint: "",
21
- connection: createUnavailableProxy(),
22
18
  client: createUnavailableProxy(),
23
19
  wallet: vue.shallowRef(null),
24
20
  status: vue.ref("idle"),
@@ -48,6 +44,5 @@ function createUnavailableProxy() {
48
44
  );
49
45
  }
50
46
 
51
- exports.solanaInjectionKey = solanaInjectionKey;
52
47
  exports.tryUseSolana = tryUseSolana;
53
48
  exports.useSolana = useSolana;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const solanaInjectionKey = Symbol.for(
4
+ "vue-solana:context"
5
+ );
6
+
7
+ exports.solanaInjectionKey = solanaInjectionKey;
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ const errors = require('@vue-solana/core/errors');
4
+ const wallet = require('@vue-solana/core/wallet');
5
+ const vue = require('vue');
6
+ const useWallet = require('./vue.BGxz4dru.cjs');
7
+
8
+ function useSignTransactions() {
9
+ const { wallet: wallet$1 } = useWallet.useWallet();
10
+ const signedTransactions = vue.shallowRef(null);
11
+ const status = vue.ref("idle");
12
+ const loading = vue.ref(false);
13
+ const error = vue.ref(null);
14
+ let executionId = 0;
15
+ async function execute(transactions) {
16
+ const currentExecutionId = ++executionId;
17
+ status.value = "signing";
18
+ loading.value = true;
19
+ error.value = null;
20
+ signedTransactions.value = null;
21
+ const activeWallet = wallet$1.value;
22
+ if (!activeWallet) {
23
+ const normalizedError = wallet.createNoWalletSelectedError();
24
+ error.value = normalizedError;
25
+ status.value = "error";
26
+ loading.value = false;
27
+ throw normalizedError;
28
+ }
29
+ try {
30
+ wallet.assertWalletCanSignTransactions(activeWallet);
31
+ const sign = activeWallet.signTransactions ? activeWallet.signTransactions.bind(activeWallet) : activeWallet.signAllTransactions.bind(activeWallet);
32
+ const result = await sign([...transactions]);
33
+ if (currentExecutionId === executionId) {
34
+ signedTransactions.value = result;
35
+ status.value = "signed";
36
+ }
37
+ return result;
38
+ } catch (cause) {
39
+ const normalizedError = errors.normalizeSolanaError(cause, "RPC_FAILURE");
40
+ if (currentExecutionId === executionId) {
41
+ error.value = normalizedError;
42
+ status.value = "error";
43
+ }
44
+ throw normalizedError;
45
+ } finally {
46
+ if (currentExecutionId === executionId) {
47
+ loading.value = false;
48
+ }
49
+ }
50
+ }
51
+ return {
52
+ signedTransactions,
53
+ status,
54
+ loading,
55
+ error,
56
+ execute
57
+ };
58
+ }
59
+
60
+ exports.useSignTransactions = useSignTransactions;
@@ -0,0 +1,103 @@
1
+ import { createSolanaActionStore } from '@vue-solana/core/action';
2
+ import { getAbortablePromise } from '@vue-solana/core/kit';
3
+ import { normalizeSolanaError } from '@vue-solana/core/errors';
4
+ import { shallowRef, onScopeDispose, watch, isRef, onMounted, getCurrentInstance, computed } from 'vue';
5
+
6
+ function useRequest(source, options = {}) {
7
+ const data = shallowRef(void 0);
8
+ const error = shallowRef(null);
9
+ const status = shallowRef("fetching");
10
+ let disposed = false;
11
+ let attempt = 0;
12
+ const store = createSolanaActionStore(
13
+ async (signal, resolved) => {
14
+ attempt += 1;
15
+ const callerSignal = options.getAbortSignal?.(attempt);
16
+ const composedSignal = callerSignal ? AbortSignal.any([signal, callerSignal]) : signal;
17
+ let pending;
18
+ if (isSendSource(resolved)) {
19
+ pending = Promise.resolve(resolved.send({ abortSignal: composedSignal }));
20
+ } else if (typeof resolved === "function") {
21
+ pending = Promise.resolve(resolved(composedSignal)).then(
22
+ (result) => isSendSource(result) ? result.send({ abortSignal: composedSignal }) : result
23
+ );
24
+ } else {
25
+ throw new Error("useRequest source did not resolve to a request function");
26
+ }
27
+ return getAbortablePromise(pending, composedSignal);
28
+ }
29
+ );
30
+ const unsubscribe = store.subscribe(() => {
31
+ const next = store.getState();
32
+ if (next.status === "success") {
33
+ data.value = next.data;
34
+ error.value = null;
35
+ status.value = "success";
36
+ } else if (next.status === "error") {
37
+ error.value = normalizeSolanaError(next.error, "RPC_FAILURE");
38
+ status.value = "error";
39
+ } else if (next.status === "running") {
40
+ status.value = "fetching";
41
+ }
42
+ });
43
+ onScopeDispose(() => {
44
+ disposed = true;
45
+ unsubscribe();
46
+ store.reset();
47
+ });
48
+ function unwrapSource() {
49
+ if (isRef(source)) {
50
+ return source.value;
51
+ }
52
+ return source;
53
+ }
54
+ async function run() {
55
+ if (disposed) {
56
+ return void 0;
57
+ }
58
+ const resolved = unwrapSource();
59
+ if (isDisabled(resolved)) {
60
+ data.value = void 0;
61
+ error.value = null;
62
+ status.value = "disabled";
63
+ store.reset();
64
+ return void 0;
65
+ }
66
+ status.value = "fetching";
67
+ try {
68
+ return await store.dispatchAsync(resolved);
69
+ } catch (cause) {
70
+ if (store.getState().status !== "error") {
71
+ return void 0;
72
+ }
73
+ throw normalizeSolanaError(cause, "RPC_FAILURE");
74
+ }
75
+ }
76
+ const refresh = () => run();
77
+ watch(
78
+ () => isRef(source) ? source.value : source,
79
+ () => {
80
+ void refresh().catch(() => void 0);
81
+ }
82
+ );
83
+ onMounted(() => {
84
+ void refresh().catch(() => void 0);
85
+ });
86
+ if (!getCurrentInstance()) {
87
+ void refresh().catch(() => void 0);
88
+ }
89
+ return {
90
+ data: computed(() => data.value),
91
+ error: computed(() => error.value),
92
+ refresh,
93
+ status: computed(() => status.value)
94
+ };
95
+ }
96
+ function isDisabled(resolved) {
97
+ return resolved === null || resolved === void 0;
98
+ }
99
+ function isSendSource(resolved) {
100
+ return typeof resolved === "object" && resolved !== null && "send" in resolved && typeof resolved.send === "function";
101
+ }
102
+
103
+ export { useRequest as u };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const useSolana = require('./vue.BE4KHksm.cjs');
3
+ const useSolana = require('./vue.DE3emjSF.cjs');
4
4
 
5
5
  function useWallets() {
6
6
  const solana = useSolana.useSolana();
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ function decodeBase64(value) {
4
+ const binary = atob(value);
5
+ const bytes = new Uint8Array(binary.length);
6
+ for (let index = 0; index < binary.length; index += 1) {
7
+ bytes[index] = binary.charCodeAt(index);
8
+ }
9
+ return bytes;
10
+ }
11
+
12
+ exports.decodeBase64 = decodeBase64;
@@ -0,0 +1,174 @@
1
+ import { provide, inject, ref, watch, getCurrentScope, onScopeDispose, computed, defineComponent } from 'vue';
2
+ import { s as solanaInjectionKey } from './vue.D_P5SqqD.mjs';
3
+
4
+ const SELECTED_WALLET_ACCOUNT_STORAGE_KEY = "vue-solana:selected-wallet-account";
5
+ function createLocalStorageSelectedWalletAccountStorage(storage = defaultLocalStorage()) {
6
+ return {
7
+ storeSelectedWallet(key) {
8
+ try {
9
+ storage?.setItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY, key);
10
+ } catch {
11
+ }
12
+ },
13
+ getSelectedWallet() {
14
+ try {
15
+ return storage?.getItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY) ?? null;
16
+ } catch {
17
+ return null;
18
+ }
19
+ },
20
+ deleteSelectedWallet() {
21
+ try {
22
+ storage?.removeItem(SELECTED_WALLET_ACCOUNT_STORAGE_KEY);
23
+ } catch {
24
+ }
25
+ }
26
+ };
27
+ }
28
+ function defaultLocalStorage() {
29
+ if (typeof window === "undefined") {
30
+ return null;
31
+ }
32
+ try {
33
+ return window.localStorage;
34
+ } catch {
35
+ return null;
36
+ }
37
+ }
38
+
39
+ const selectedWalletAccountInjectionKey = Symbol.for("vue-solana:selected-wallet-account");
40
+ function provideSelectedWalletAccount(options = {}) {
41
+ const context = createSelectedWalletAccountContext(options);
42
+ provide(selectedWalletAccountInjectionKey, context);
43
+ return context;
44
+ }
45
+ function createSelectedWalletAccountContext(options = {}, solanaContextOverride) {
46
+ const solanaContext = solanaContextOverride ?? inject(solanaInjectionKey, null);
47
+ const stateSync = options.stateSync === void 0 ? defaultStateSync() : options.stateSync;
48
+ const selectedWalletAccount = ref(null);
49
+ const walletsValue = () => solanaContext?.wallets.value ?? [];
50
+ let pendingKey = null;
51
+ let selectionGeneration = 0;
52
+ function findAccount(key) {
53
+ const separatorIndex = key.lastIndexOf(":");
54
+ const walletName = separatorIndex === -1 ? key : key.slice(0, separatorIndex);
55
+ const address = separatorIndex === -1 ? "" : key.slice(separatorIndex + 1);
56
+ const wallet = walletsValue().find((candidate) => candidate.name === walletName);
57
+ const account = wallet?.accounts.find((candidate) => candidate.address === address);
58
+ if (!wallet || !account) {
59
+ return null;
60
+ }
61
+ return { ...account, walletName: wallet.name };
62
+ }
63
+ function clearSelection() {
64
+ selectionGeneration += 1;
65
+ pendingKey = null;
66
+ selectedWalletAccount.value = null;
67
+ }
68
+ function applyExternalSelection(key) {
69
+ if (!key) {
70
+ clearSelection();
71
+ return;
72
+ }
73
+ const account = findAccount(key);
74
+ if (account) {
75
+ selectionGeneration += 1;
76
+ pendingKey = null;
77
+ selectedWalletAccount.value = account;
78
+ return;
79
+ }
80
+ pendingKey = key;
81
+ }
82
+ function restoreIfAvailable() {
83
+ if (!pendingKey || selectedWalletAccount.value) {
84
+ return;
85
+ }
86
+ const account = findAccount(pendingKey);
87
+ if (account) {
88
+ selectedWalletAccount.value = account;
89
+ pendingKey = null;
90
+ }
91
+ }
92
+ if (stateSync) {
93
+ const generation = selectionGeneration;
94
+ void Promise.resolve(stateSync.getSelectedWallet()).then((key) => {
95
+ if (generation !== selectionGeneration || !key || selectedWalletAccount.value) {
96
+ return;
97
+ }
98
+ pendingKey = key;
99
+ restoreIfAvailable();
100
+ }).catch(() => void 0);
101
+ }
102
+ if (solanaContext) {
103
+ watch(
104
+ () => solanaContext.wallets.value,
105
+ () => restoreIfAvailable()
106
+ );
107
+ }
108
+ if (stateSync && typeof window !== "undefined") {
109
+ const onStorage = () => {
110
+ void Promise.resolve(stateSync.getSelectedWallet()).then((key) => applyExternalSelection(key)).catch(() => void 0);
111
+ };
112
+ window.addEventListener("storage", onStorage);
113
+ if (getCurrentScope()) {
114
+ onScopeDispose(() => window.removeEventListener("storage", onStorage));
115
+ }
116
+ }
117
+ const context = {
118
+ selectedWalletAccount,
119
+ setSelectedWalletAccount(account) {
120
+ selectionGeneration += 1;
121
+ selectedWalletAccount.value = account;
122
+ pendingKey = null;
123
+ if (!stateSync) {
124
+ return;
125
+ }
126
+ const persisted = account ? stateSync.storeSelectedWallet(`${account.walletName}:${account.address}`) : stateSync.deleteSelectedWallet();
127
+ void Promise.resolve(persisted).catch(() => void 0);
128
+ },
129
+ filteredWallets: computed(() => {
130
+ const filter = options.filterWallet;
131
+ if (!filter) {
132
+ return walletsValue();
133
+ }
134
+ return walletsValue().map((wallet) => {
135
+ const accounts = wallet.accounts.filter((account) => filter(wallet.name, account));
136
+ return accounts.length === 0 ? null : { ...wallet, accounts };
137
+ }).filter((wallet) => wallet !== null);
138
+ })
139
+ };
140
+ return context;
141
+ }
142
+ function useSelectedWalletAccount() {
143
+ const context = inject(selectedWalletAccountInjectionKey, null);
144
+ if (!context) {
145
+ throw new Error("useSelectedWalletAccount must be used inside a SelectedWalletAccountProvider");
146
+ }
147
+ return [context.selectedWalletAccount, context.setSelectedWalletAccount, context.filteredWallets];
148
+ }
149
+ function defaultStateSync() {
150
+ return createLocalStorageSelectedWalletAccountStorage();
151
+ }
152
+
153
+ const SelectedWalletAccountProvider = defineComponent({
154
+ name: "SelectedWalletAccountProvider",
155
+ props: {
156
+ filterWallet: {
157
+ type: Function,
158
+ default: void 0
159
+ },
160
+ stateSync: {
161
+ type: [Object, null],
162
+ default: void 0
163
+ }
164
+ },
165
+ setup(props, { slots }) {
166
+ provideSelectedWalletAccount({
167
+ filterWallet: props.filterWallet,
168
+ stateSync: props.stateSync
169
+ });
170
+ return () => slots.default?.();
171
+ }
172
+ });
173
+
174
+ export { SelectedWalletAccountProvider as S, createSelectedWalletAccountContext as c, provideSelectedWalletAccount as p, selectedWalletAccountInjectionKey as s, useSelectedWalletAccount as u };
@@ -0,0 +1,36 @@
1
+ import { createSolanaActionStore } from '@vue-solana/core/action';
2
+ import { unref, shallowRef, onScopeDispose, computed } from 'vue';
3
+
4
+ function useAction(action, options = {}) {
5
+ const store = createSolanaActionStore(
6
+ (signal, ...args) => unref(action)(signal, ...args)
7
+ );
8
+ const state = shallowRef(store.getState());
9
+ const unsubscribe = store.subscribe(() => {
10
+ const next = store.getState();
11
+ const previous = state.value;
12
+ if (next.status === "success" && previous.status !== "success") {
13
+ options.onSuccess?.(next.data);
14
+ }
15
+ if (next.status === "error" && previous.status !== "error") {
16
+ options.onError?.(next.error);
17
+ }
18
+ state.value = next;
19
+ });
20
+ onScopeDispose(() => {
21
+ unsubscribe();
22
+ store.reset();
23
+ });
24
+ return {
25
+ data: computed(() => state.value.data),
26
+ dispatch: (...args) => store.dispatchAsync(...args),
27
+ error: computed(() => state.value.error),
28
+ isRunning: computed(() => state.value.status === "running"),
29
+ reset: () => {
30
+ store.reset();
31
+ },
32
+ status: computed(() => state.value.status)
33
+ };
34
+ }
35
+
36
+ export { useAction as u };
@@ -0,0 +1,5 @@
1
+ const solanaInjectionKey = Symbol.for(
2
+ "vue-solana:context"
3
+ );
4
+
5
+ export { solanaInjectionKey as s };
@@ -1,14 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const address = require('@vue-solana/core/address');
4
3
  const errors = require('@vue-solana/core/errors');
5
4
  const vue = require('vue');
6
- const useConnection = require('./vue.DCgByzxg.cjs');
7
- const useSolana = require('./vue.BE4KHksm.cjs');
5
+ const address = require('@vue-solana/core/address');
6
+ const useConnection = require('./vue.BVaMoz9y.cjs');
7
+ const useSolana = require('./vue.DE3emjSF.cjs');
8
+ const decodeBase64 = require('./vue.DNxOpDXz.cjs');
8
9
 
9
10
  function useProgramAccounts(programId, options = {}) {
10
11
  const solana = useSolana.tryUseSolana();
11
- const connection = solana?.connection ?? useConnection.useConnection();
12
+ const client = solana?.client ?? useConnection.useConnection();
12
13
  const accounts = vue.shallowRef([]);
13
14
  const loading = vue.shallowRef(false);
14
15
  const error = vue.shallowRef(null);
@@ -25,16 +26,27 @@ function useProgramAccounts(programId, options = {}) {
25
26
  loading.value = true;
26
27
  error.value = null;
27
28
  try {
28
- const publicKey = address.parsePublicKey(value);
29
- if (!publicKey) {
29
+ const parsedAddress = address.parseAddress(value);
30
+ if (!parsedAddress) {
30
31
  accounts.value = [];
31
32
  return [];
32
33
  }
33
- const nextAccounts = await connection.getProgramAccounts(publicKey, {
34
+ const { value: response } = await client.rpc.getProgramAccounts(parsedAddress, {
35
+ encoding: "base64",
34
36
  commitment: options.commitment,
35
37
  dataSlice: options.dataSlice,
36
38
  filters: options.filters
37
- });
39
+ }).send();
40
+ const nextAccounts = response.map(({ pubkey, account }) => ({
41
+ pubkey,
42
+ account: {
43
+ executable: account.executable,
44
+ lamports: Number(account.lamports),
45
+ owner: account.owner,
46
+ space: Number(account.space),
47
+ data: decodeBase64.decodeBase64(account.data[0])
48
+ }
49
+ }));
38
50
  if (requestId === refreshId) {
39
51
  accounts.value = nextAccounts;
40
52
  }