@multiplatform.one/web3 7.18.0 → 7.19.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 (246) hide show
  1. package/README.md +60 -0
  2. package/dist/cjs/clients/adapter.cjs +33 -0
  3. package/dist/cjs/clients/adapter.native.js +36 -0
  4. package/dist/cjs/clients/adapter.native.js.map +1 -0
  5. package/dist/cjs/clients/bitcoin.cjs +46 -0
  6. package/dist/cjs/clients/bitcoin.native.js +51 -0
  7. package/dist/cjs/clients/bitcoin.native.js.map +1 -0
  8. package/dist/cjs/clients/connector.cjs +45 -0
  9. package/dist/cjs/clients/connector.native.js +49 -0
  10. package/dist/cjs/clients/connector.native.js.map +1 -0
  11. package/dist/cjs/clients/evm.cjs +171 -0
  12. package/dist/cjs/clients/evm.native.js +198 -0
  13. package/dist/cjs/clients/evm.native.js.map +1 -0
  14. package/dist/cjs/clients/gpg.cjs +31 -0
  15. package/dist/cjs/clients/gpg.native.js +34 -0
  16. package/dist/cjs/clients/gpg.native.js.map +1 -0
  17. package/dist/cjs/clients/hooks.cjs +78 -0
  18. package/dist/cjs/clients/hooks.native.js +85 -0
  19. package/dist/cjs/clients/hooks.native.js.map +1 -0
  20. package/dist/cjs/clients/index.cjs +49 -0
  21. package/dist/cjs/clients/index.native.js +52 -0
  22. package/dist/cjs/clients/index.native.js.map +1 -0
  23. package/dist/cjs/clients/solana.cjs +322 -0
  24. package/dist/cjs/clients/solana.native.js +511 -0
  25. package/dist/cjs/clients/solana.native.js.map +1 -0
  26. package/dist/cjs/clients/solanaMessage.cjs +38 -0
  27. package/dist/cjs/clients/solanaMessage.native.js +44 -0
  28. package/dist/cjs/clients/solanaMessage.native.js.map +1 -0
  29. package/dist/cjs/clients/sui.cjs +46 -0
  30. package/dist/cjs/clients/sui.native.js +51 -0
  31. package/dist/cjs/clients/sui.native.js.map +1 -0
  32. package/dist/cjs/clients/types.cjs +37 -0
  33. package/dist/cjs/clients/types.native.js +160 -0
  34. package/dist/cjs/clients/types.native.js.map +1 -0
  35. package/dist/cjs/clients/useSolanaClient.cjs +50 -0
  36. package/dist/cjs/clients/useSolanaClient.native.js +57 -0
  37. package/dist/cjs/clients/useSolanaClient.native.js.map +1 -0
  38. package/dist/cjs/clients/walletStandard.cjs +63 -0
  39. package/dist/cjs/clients/walletStandard.native.js +71 -0
  40. package/dist/cjs/clients/walletStandard.native.js.map +1 -0
  41. package/dist/cjs/connectkit/connectors/walletAdapterConnector.cjs +2 -0
  42. package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js +2 -0
  43. package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  44. package/dist/cjs/connectkit/siwe/SIWEProvider.cjs +4 -5
  45. package/dist/cjs/connectkit/siwe/SIWEProvider.native.js +4 -5
  46. package/dist/cjs/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  47. package/dist/cjs/index.cjs +2 -1
  48. package/dist/cjs/index.native.js +1 -0
  49. package/dist/cjs/index.native.js.map +1 -1
  50. package/dist/cjs/solana.cjs +41 -0
  51. package/dist/cjs/solana.native.js +44 -0
  52. package/dist/cjs/solana.native.js.map +1 -0
  53. package/dist/esm/clients/adapter.mjs +8 -0
  54. package/dist/esm/clients/adapter.mjs.map +1 -0
  55. package/dist/esm/clients/adapter.native.js +8 -0
  56. package/dist/esm/clients/adapter.native.js.map +1 -0
  57. package/dist/esm/clients/bitcoin.mjs +21 -0
  58. package/dist/esm/clients/bitcoin.mjs.map +1 -0
  59. package/dist/esm/clients/bitcoin.native.js +23 -0
  60. package/dist/esm/clients/bitcoin.native.js.map +1 -0
  61. package/dist/esm/clients/connector.mjs +20 -0
  62. package/dist/esm/clients/connector.mjs.map +1 -0
  63. package/dist/esm/clients/connector.native.js +21 -0
  64. package/dist/esm/clients/connector.native.js.map +1 -0
  65. package/dist/esm/clients/evm.mjs +146 -0
  66. package/dist/esm/clients/evm.mjs.map +1 -0
  67. package/dist/esm/clients/evm.native.js +170 -0
  68. package/dist/esm/clients/evm.native.js.map +1 -0
  69. package/dist/esm/clients/gpg.mjs +3 -0
  70. package/dist/esm/clients/gpg.mjs.map +1 -0
  71. package/dist/esm/clients/gpg.native.js +3 -0
  72. package/dist/esm/clients/gpg.native.js.map +1 -0
  73. package/dist/esm/clients/hooks.mjs +51 -0
  74. package/dist/esm/clients/hooks.mjs.map +1 -0
  75. package/dist/esm/clients/hooks.native.js +55 -0
  76. package/dist/esm/clients/hooks.native.js.map +1 -0
  77. package/dist/esm/clients/index.mjs +11 -0
  78. package/dist/esm/clients/index.mjs.map +1 -0
  79. package/dist/esm/clients/index.native.js +11 -0
  80. package/dist/esm/clients/index.native.js.map +1 -0
  81. package/dist/esm/clients/solana.mjs +289 -0
  82. package/dist/esm/clients/solana.mjs.map +1 -0
  83. package/dist/esm/clients/solana.native.js +475 -0
  84. package/dist/esm/clients/solana.native.js.map +1 -0
  85. package/dist/esm/clients/solanaMessage.mjs +13 -0
  86. package/dist/esm/clients/solanaMessage.mjs.map +1 -0
  87. package/dist/esm/clients/solanaMessage.native.js +16 -0
  88. package/dist/esm/clients/solanaMessage.native.js.map +1 -0
  89. package/dist/esm/clients/sui.mjs +21 -0
  90. package/dist/esm/clients/sui.mjs.map +1 -0
  91. package/dist/esm/clients/sui.native.js +23 -0
  92. package/dist/esm/clients/sui.native.js.map +1 -0
  93. package/dist/esm/clients/types.mjs +12 -0
  94. package/dist/esm/clients/types.mjs.map +1 -0
  95. package/dist/esm/clients/types.native.js +132 -0
  96. package/dist/esm/clients/types.native.js.map +1 -0
  97. package/dist/esm/clients/useSolanaClient.mjs +25 -0
  98. package/dist/esm/clients/useSolanaClient.mjs.map +1 -0
  99. package/dist/esm/clients/useSolanaClient.native.js +29 -0
  100. package/dist/esm/clients/useSolanaClient.native.js.map +1 -0
  101. package/dist/esm/clients/walletStandard.mjs +33 -0
  102. package/dist/esm/clients/walletStandard.mjs.map +1 -0
  103. package/dist/esm/clients/walletStandard.native.js +38 -0
  104. package/dist/esm/clients/walletStandard.native.js.map +1 -0
  105. package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs +2 -0
  106. package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  107. package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js +2 -0
  108. package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  109. package/dist/esm/connectkit/siwe/SIWEProvider.mjs +4 -5
  110. package/dist/esm/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  111. package/dist/esm/connectkit/siwe/SIWEProvider.native.js +4 -5
  112. package/dist/esm/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  113. package/dist/esm/index.mjs +1 -0
  114. package/dist/esm/index.mjs.map +1 -1
  115. package/dist/esm/index.native.js +1 -0
  116. package/dist/esm/index.native.js.map +1 -1
  117. package/dist/esm/solana.mjs +5 -0
  118. package/dist/esm/solana.mjs.map +1 -0
  119. package/dist/esm/solana.native.js +5 -0
  120. package/dist/esm/solana.native.js.map +1 -0
  121. package/dist/jsx/clients/adapter.mjs +8 -0
  122. package/dist/jsx/clients/adapter.mjs.map +1 -0
  123. package/dist/jsx/clients/adapter.native.js +36 -0
  124. package/dist/jsx/clients/adapter.native.js.map +1 -0
  125. package/dist/jsx/clients/bitcoin.mjs +21 -0
  126. package/dist/jsx/clients/bitcoin.mjs.map +1 -0
  127. package/dist/jsx/clients/bitcoin.native.js +51 -0
  128. package/dist/jsx/clients/bitcoin.native.js.map +1 -0
  129. package/dist/jsx/clients/connector.mjs +20 -0
  130. package/dist/jsx/clients/connector.mjs.map +1 -0
  131. package/dist/jsx/clients/connector.native.js +49 -0
  132. package/dist/jsx/clients/connector.native.js.map +1 -0
  133. package/dist/jsx/clients/evm.mjs +146 -0
  134. package/dist/jsx/clients/evm.mjs.map +1 -0
  135. package/dist/jsx/clients/evm.native.js +198 -0
  136. package/dist/jsx/clients/evm.native.js.map +1 -0
  137. package/dist/jsx/clients/gpg.mjs +3 -0
  138. package/dist/jsx/clients/gpg.mjs.map +1 -0
  139. package/dist/jsx/clients/gpg.native.js +34 -0
  140. package/dist/jsx/clients/gpg.native.js.map +1 -0
  141. package/dist/jsx/clients/hooks.mjs +51 -0
  142. package/dist/jsx/clients/hooks.mjs.map +1 -0
  143. package/dist/jsx/clients/hooks.native.js +85 -0
  144. package/dist/jsx/clients/hooks.native.js.map +1 -0
  145. package/dist/jsx/clients/index.mjs +11 -0
  146. package/dist/jsx/clients/index.mjs.map +1 -0
  147. package/dist/jsx/clients/index.native.js +52 -0
  148. package/dist/jsx/clients/index.native.js.map +1 -0
  149. package/dist/jsx/clients/solana.mjs +289 -0
  150. package/dist/jsx/clients/solana.mjs.map +1 -0
  151. package/dist/jsx/clients/solana.native.js +511 -0
  152. package/dist/jsx/clients/solana.native.js.map +1 -0
  153. package/dist/jsx/clients/solanaMessage.mjs +13 -0
  154. package/dist/jsx/clients/solanaMessage.mjs.map +1 -0
  155. package/dist/jsx/clients/solanaMessage.native.js +44 -0
  156. package/dist/jsx/clients/solanaMessage.native.js.map +1 -0
  157. package/dist/jsx/clients/sui.mjs +21 -0
  158. package/dist/jsx/clients/sui.mjs.map +1 -0
  159. package/dist/jsx/clients/sui.native.js +51 -0
  160. package/dist/jsx/clients/sui.native.js.map +1 -0
  161. package/dist/jsx/clients/types.mjs +12 -0
  162. package/dist/jsx/clients/types.mjs.map +1 -0
  163. package/dist/jsx/clients/types.native.js +160 -0
  164. package/dist/jsx/clients/types.native.js.map +1 -0
  165. package/dist/jsx/clients/useSolanaClient.mjs +25 -0
  166. package/dist/jsx/clients/useSolanaClient.mjs.map +1 -0
  167. package/dist/jsx/clients/useSolanaClient.native.js +57 -0
  168. package/dist/jsx/clients/useSolanaClient.native.js.map +1 -0
  169. package/dist/jsx/clients/walletStandard.mjs +33 -0
  170. package/dist/jsx/clients/walletStandard.mjs.map +1 -0
  171. package/dist/jsx/clients/walletStandard.native.js +71 -0
  172. package/dist/jsx/clients/walletStandard.native.js.map +1 -0
  173. package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs +2 -0
  174. package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  175. package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js +2 -0
  176. package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  177. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs +4 -5
  178. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  179. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js +4 -5
  180. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  181. package/dist/jsx/index.js +1 -0
  182. package/dist/jsx/index.js.map +1 -1
  183. package/dist/jsx/index.mjs +1 -0
  184. package/dist/jsx/index.mjs.map +1 -1
  185. package/dist/jsx/index.native.js +1 -0
  186. package/dist/jsx/index.native.js.map +1 -1
  187. package/dist/jsx/solana.mjs +5 -0
  188. package/dist/jsx/solana.mjs.map +1 -0
  189. package/dist/jsx/solana.native.js +44 -0
  190. package/dist/jsx/solana.native.js.map +1 -0
  191. package/package.json +13 -6
  192. package/src/clients/adapter.ts +13 -0
  193. package/src/clients/bitcoin.ts +42 -0
  194. package/src/clients/connector.spec.ts +78 -0
  195. package/src/clients/connector.ts +36 -0
  196. package/src/clients/evm.spec.ts +265 -0
  197. package/src/clients/evm.ts +223 -0
  198. package/src/clients/gpg.spec.ts +169 -0
  199. package/src/clients/gpg.ts +8 -0
  200. package/src/clients/hooks.spec.tsx +113 -0
  201. package/src/clients/hooks.ts +51 -0
  202. package/src/clients/index.ts +40 -0
  203. package/src/clients/solana.spec.ts +444 -0
  204. package/src/clients/solana.ts +465 -0
  205. package/src/clients/solanaMessage.ts +34 -0
  206. package/src/clients/sui.ts +42 -0
  207. package/src/clients/types.ts +40 -0
  208. package/src/clients/useSolanaClient.ts +31 -0
  209. package/src/clients/walletStandard.ts +87 -0
  210. package/src/connectkit/connectors/walletAdapterConnector.ts +2 -0
  211. package/src/connectkit/siwe/SIWEProvider.spec.tsx +112 -0
  212. package/src/connectkit/siwe/SIWEProvider.tsx +6 -10
  213. package/src/index.ts +4 -0
  214. package/src/solana.ts +30 -0
  215. package/types/clients/adapter.d.ts +5 -0
  216. package/types/clients/adapter.d.ts.map +1 -0
  217. package/types/clients/bitcoin.d.ts +21 -0
  218. package/types/clients/bitcoin.d.ts.map +1 -0
  219. package/types/clients/connector.d.ts +14 -0
  220. package/types/clients/connector.d.ts.map +1 -0
  221. package/types/clients/evm.d.ts +68 -0
  222. package/types/clients/evm.d.ts.map +1 -0
  223. package/types/clients/gpg.d.ts +2 -0
  224. package/types/clients/gpg.d.ts.map +1 -0
  225. package/types/clients/hooks.d.ts +16 -0
  226. package/types/clients/hooks.d.ts.map +1 -0
  227. package/types/clients/index.d.ts +10 -0
  228. package/types/clients/index.d.ts.map +1 -0
  229. package/types/clients/solana.d.ts +111 -0
  230. package/types/clients/solana.d.ts.map +1 -0
  231. package/types/clients/solanaMessage.d.ts +18 -0
  232. package/types/clients/solanaMessage.d.ts.map +1 -0
  233. package/types/clients/sui.d.ts +21 -0
  234. package/types/clients/sui.d.ts.map +1 -0
  235. package/types/clients/types.d.ts +27 -0
  236. package/types/clients/types.d.ts.map +1 -0
  237. package/types/clients/useSolanaClient.d.ts +11 -0
  238. package/types/clients/useSolanaClient.d.ts.map +1 -0
  239. package/types/clients/walletStandard.d.ts +63 -0
  240. package/types/clients/walletStandard.d.ts.map +1 -0
  241. package/types/connectkit/connectors/walletAdapterConnector.d.ts.map +1 -1
  242. package/types/connectkit/siwe/SIWEProvider.d.ts.map +1 -1
  243. package/types/index.d.ts +1 -0
  244. package/types/index.d.ts.map +1 -1
  245. package/types/solana.d.ts +4 -0
  246. package/types/solana.d.ts.map +1 -0
@@ -0,0 +1,322 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var solana_exports = {};
24
+ __export(solana_exports, {
25
+ SolanaConfirmationError: () => SolanaConfirmationError,
26
+ connectSolanaWallet: () => connectSolanaWallet,
27
+ findSolanaSigner: () => findSolanaSigner,
28
+ injectedSolanaSigner: () => injectedSolanaSigner,
29
+ solanaChainFromRpcUrl: () => solanaChainFromRpcUrl,
30
+ solanaClient: () => solanaClient,
31
+ solanaRpcUrls: () => solanaRpcUrls,
32
+ standardSolanaSigner: () => standardSolanaSigner,
33
+ transferSolInstruction: () => transferSolInstruction
34
+ });
35
+ module.exports = __toCommonJS(solana_exports);
36
+ var import_kit = require("@solana/kit");
37
+ var import_types = require("./types.cjs");
38
+ var import_walletStandard = require("./walletStandard.cjs");
39
+ const solanaRpcUrls = {
40
+ "solana:mainnet": "https://api.mainnet-beta.solana.com",
41
+ "solana:devnet": "https://api.devnet.solana.com",
42
+ "solana:testnet": "https://api.testnet.solana.com",
43
+ "solana:localnet": "http://127.0.0.1:8899"
44
+ };
45
+ function solanaChainFromRpcUrl(rpcUrl) {
46
+ if (!rpcUrl) return "solana:mainnet";
47
+ if (/devnet/i.test(rpcUrl)) return "solana:devnet";
48
+ if (/testnet/i.test(rpcUrl)) return "solana:testnet";
49
+ if (/\/\/(localhost|127\.0\.0\.1|10\.0\.2\.2|\[::1\])[:/]/i.test(rpcUrl)) return "solana:localnet";
50
+ return "solana:mainnet";
51
+ }
52
+ class SolanaConfirmationError extends Error {
53
+ constructor(signature, reason, detail) {
54
+ const mayStillLand = reason === "timeout";
55
+ super(`solana transaction ${signature} ${detail}; ${mayStillLand ? "it may still land, so do not resend it until its blockhash expires" : "it will not land, so it is safe to retry"}`);
56
+ this.signature = signature;
57
+ this.reason = reason;
58
+ this.name = "SolanaConfirmationError";
59
+ this.mayStillLand = mayStillLand;
60
+ }
61
+ signature;
62
+ reason;
63
+ mayStillLand;
64
+ }
65
+ const capabilities = ["signMessage", "signTransaction", "signAndSendTransaction", "sendTransaction"];
66
+ const systemProgram = (0, import_kit.address)("11111111111111111111111111111111");
67
+ const maxU64 = 0xffffffffffffffffn;
68
+ function transferSolInstruction(from, to, lamports) {
69
+ if (lamports < 0n || lamports > maxU64) {
70
+ throw new RangeError(`lamports must fit a u64, got ${lamports}`);
71
+ }
72
+ const data = new Uint8Array(12);
73
+ data[0] = 2;
74
+ let value = lamports;
75
+ for (let i = 4; i < 12; i++) {
76
+ data[i] = Number(value & 0xffn);
77
+ value >>= 8n;
78
+ }
79
+ return {
80
+ programAddress: systemProgram,
81
+ accounts: [{
82
+ address: from,
83
+ role: import_kit.AccountRole.WRITABLE_SIGNER
84
+ }, {
85
+ address: to,
86
+ role: import_kit.AccountRole.WRITABLE
87
+ }],
88
+ data
89
+ };
90
+ }
91
+ const toWire = transaction => transaction instanceof Uint8Array ? transaction : Uint8Array.from((0, import_kit.getTransactionEncoder)().encode(transaction));
92
+ const fromWire = bytes => (0, import_kit.getTransactionDecoder)().decode(bytes);
93
+ const toSignature = bytes => (0, import_kit.getBase58Decoder)().decode(bytes);
94
+ const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
95
+ const lastValidBlockHeightOf = transaction => {
96
+ if (transaction instanceof Uint8Array) return void 0;
97
+ const lifetime = transaction.lifetimeConstraint;
98
+ return lifetime?.lastValidBlockHeight;
99
+ };
100
+ const reached = (status, commitment) => status?.confirmationStatus === "finalized" || commitment === "confirmed" && status?.confirmationStatus === "confirmed";
101
+ function solanaClient(config) {
102
+ const {
103
+ signer
104
+ } = config;
105
+ const chain = config.chain ?? solanaChainFromRpcUrl(config.rpcUrl);
106
+ const rpc = config.rpc ?? (0, import_kit.createSolanaRpc)(config.rpcUrl ?? solanaRpcUrls[chain]);
107
+ const owner = (0, import_kit.address)(signer.address);
108
+ const signTransaction = async transaction => fromWire(await signer.signTransaction(toWire(transaction)));
109
+ const broadcast = transaction => {
110
+ const tx = transaction instanceof Uint8Array ? fromWire(transaction) : transaction;
111
+ return rpc.sendTransaction((0, import_kit.getBase64EncodedWireTransaction)(tx), {
112
+ encoding: "base64"
113
+ }).send();
114
+ };
115
+ const sendTransaction = async transaction => ({
116
+ signature: await broadcast(transaction),
117
+ lastValidBlockHeight: lastValidBlockHeightOf(transaction)
118
+ });
119
+ const signAndSendTransaction = async transaction => {
120
+ const lastValidBlockHeight = lastValidBlockHeightOf(transaction);
121
+ const wire = toWire(transaction);
122
+ if (signer.signAndSendTransaction) {
123
+ try {
124
+ const signature = toSignature(await signer.signAndSendTransaction(wire));
125
+ return {
126
+ signature,
127
+ lastValidBlockHeight
128
+ };
129
+ } catch (error) {
130
+ if (!(error instanceof import_types.UnsupportedClientMethodError)) throw error;
131
+ }
132
+ }
133
+ return {
134
+ signature: await broadcast(await signer.signTransaction(wire)),
135
+ lastValidBlockHeight
136
+ };
137
+ };
138
+ const statusOf = async signature => {
139
+ const {
140
+ value
141
+ } = await rpc.getSignatureStatuses([signature], {
142
+ searchTransactionHistory: true
143
+ }).send();
144
+ const status = value[0];
145
+ if (status?.err) {
146
+ throw new SolanaConfirmationError(signature, "failed", `failed on chain: ${JSON.stringify(status.err, (_, v) => typeof v === "bigint" ? `${v}` : v)}`);
147
+ }
148
+ return status;
149
+ };
150
+ return {
151
+ family: "solana",
152
+ address: owner,
153
+ chainId: chain,
154
+ capabilities,
155
+ rpc,
156
+ signer,
157
+ async signMessage(message) {
158
+ const bytes = typeof message === "string" ? new TextEncoder().encode(message) : message;
159
+ return (0, import_kit.getBase58Decoder)().decode(await signer.signMessage(bytes));
160
+ },
161
+ signTransaction,
162
+ signAndSendTransaction,
163
+ sendTransaction,
164
+ async confirmTransaction(submission, options = {}) {
165
+ const {
166
+ signature,
167
+ lastValidBlockHeight: submitted
168
+ } = typeof submission === "string" ? {
169
+ signature: submission
170
+ } : submission;
171
+ const {
172
+ commitment = "confirmed",
173
+ lastValidBlockHeight = submitted,
174
+ timeoutMs = 9e4,
175
+ pollMs = 500
176
+ } = options;
177
+ const deadline = Date.now() + timeoutMs;
178
+ for (;;) {
179
+ if (reached(await statusOf(signature), commitment)) return;
180
+ if (lastValidBlockHeight !== void 0) {
181
+ const height = await rpc.getBlockHeight({
182
+ commitment
183
+ }).send();
184
+ if (height > lastValidBlockHeight) {
185
+ const status = await statusOf(signature);
186
+ if (reached(status, commitment)) return;
187
+ if (!status) {
188
+ throw new SolanaConfirmationError(signature, "expired", `expired: block height ${height} passed ${lastValidBlockHeight}`);
189
+ }
190
+ }
191
+ } else if (Date.now() > deadline) {
192
+ throw new SolanaConfirmationError(signature, "timeout", `not ${commitment} after ${timeoutMs}ms`);
193
+ }
194
+ await sleep(pollMs);
195
+ }
196
+ },
197
+ async getBalance(target) {
198
+ const {
199
+ value
200
+ } = await rpc.getBalance(target ? (0, import_kit.address)(target) : owner).send();
201
+ return value;
202
+ },
203
+ async transferSol({
204
+ to,
205
+ lamports
206
+ }) {
207
+ const {
208
+ value: latestBlockhash
209
+ } = await rpc.getLatestBlockhash().send();
210
+ const message = (0, import_kit.pipe)((0, import_kit.createTransactionMessage)({
211
+ version: 0
212
+ }), m => (0, import_kit.setTransactionMessageFeePayer)(owner, m), m => (0, import_kit.setTransactionMessageLifetimeUsingBlockhash)(latestBlockhash, m), m => (0, import_kit.appendTransactionMessageInstruction)(transferSolInstruction(owner, (0, import_kit.address)(to), lamports), m));
213
+ const {
214
+ signature
215
+ } = await signAndSendTransaction((0, import_kit.compileTransaction)(message));
216
+ return {
217
+ signature,
218
+ lastValidBlockHeight: latestBlockhash.lastValidBlockHeight
219
+ };
220
+ }
221
+ };
222
+ }
223
+ function walletFeature(wallet, name) {
224
+ const feature = wallet.features[name];
225
+ if (!feature) {
226
+ throw new import_types.UnsupportedClientMethodError("solana", name, `${wallet.name} does not implement it`);
227
+ }
228
+ return feature;
229
+ }
230
+ function standardSolanaSigner(wallet, account, chain = "solana:mainnet") {
231
+ const signer = {
232
+ address: account.address,
233
+ async signMessage(message) {
234
+ const feature = walletFeature(wallet, import_walletStandard.SolanaSignMessage);
235
+ const [output] = await feature.signMessage({
236
+ account,
237
+ message
238
+ });
239
+ return output.signature;
240
+ },
241
+ async signTransaction(transaction) {
242
+ const feature = walletFeature(wallet, import_walletStandard.SolanaSignTransaction);
243
+ const [output] = await feature.signTransaction({
244
+ account,
245
+ transaction,
246
+ chain
247
+ });
248
+ return output.signedTransaction;
249
+ }
250
+ };
251
+ if (wallet.features[import_walletStandard.SolanaSignAndSendTransaction]) {
252
+ signer.signAndSendTransaction = async transaction => {
253
+ const feature = walletFeature(wallet, import_walletStandard.SolanaSignAndSendTransaction);
254
+ const [output] = await feature.signAndSendTransaction({
255
+ account,
256
+ transaction,
257
+ chain
258
+ });
259
+ return output.signature;
260
+ };
261
+ }
262
+ return signer;
263
+ }
264
+ function findSolanaSigner(owner, chain) {
265
+ for (const wallet of (0, import_walletStandard.getSolanaWallets)()) {
266
+ const account = wallet.accounts.find(a => a.address === owner);
267
+ if (account) return standardSolanaSigner(wallet, account, chain);
268
+ }
269
+ return null;
270
+ }
271
+ async function connectSolanaWallet(options = {}) {
272
+ const wallets = (0, import_walletStandard.getSolanaWallets)();
273
+ const wallet = options.wallet ? wallets.find(w => w.name.toLowerCase() === options.wallet?.toLowerCase()) : wallets[0];
274
+ if (!wallet) {
275
+ throw new Error(options.wallet ? `No Solana wallet named ${options.wallet} is installed` : "No Solana wallet found. Install Phantom, Solflare or Backpack.");
276
+ }
277
+ const {
278
+ accounts
279
+ } = await walletFeature(wallet, import_walletStandard.StandardConnect).connect({
280
+ silent: options.silent
281
+ });
282
+ const chain = options.chain ?? "solana:mainnet";
283
+ const account = accounts.find(a => a.chains.includes(chain)) ?? accounts[0];
284
+ if (!account) throw new Error(`${wallet.name} returned no Solana account`);
285
+ return standardSolanaSigner(wallet, account, chain);
286
+ }
287
+ const utf8 = bytes => {
288
+ try {
289
+ return new TextDecoder("utf-8", {
290
+ fatal: true
291
+ }).decode(bytes);
292
+ } catch {
293
+ return null;
294
+ }
295
+ };
296
+ function injectedSolanaSigner(adapter, chain) {
297
+ const owner = adapter.address;
298
+ if (!owner) throw new Error("injectedSolanaSigner: connect a Solana wallet first");
299
+ const standard = method => {
300
+ const signer = findSolanaSigner(owner, chain);
301
+ if (!signer) {
302
+ throw new import_types.UnsupportedClientMethodError("solana", method, `no Wallet Standard wallet holds ${owner}; connect Phantom, Solflare or Backpack`);
303
+ }
304
+ return signer;
305
+ };
306
+ return {
307
+ address: owner,
308
+ async signMessage(message) {
309
+ const text = utf8(message);
310
+ if (text === null) return standard("signMessage").signMessage(message);
311
+ return Uint8Array.from((0, import_kit.getBase58Encoder)().encode(await adapter.signMessage(text)));
312
+ },
313
+ signTransaction: async transaction => standard("signTransaction").signTransaction(transaction),
314
+ async signAndSendTransaction(transaction) {
315
+ const signer = standard("signAndSendTransaction");
316
+ if (!signer.signAndSendTransaction) {
317
+ throw new import_types.UnsupportedClientMethodError("solana", "signAndSendTransaction");
318
+ }
319
+ return signer.signAndSendTransaction(transaction);
320
+ }
321
+ };
322
+ }