@reown/appkit-solana-react-native 0.0.0-canary-20251008180350

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 (73) hide show
  1. package/lib/commonjs/adapter.js +271 -0
  2. package/lib/commonjs/adapter.js.map +1 -0
  3. package/lib/commonjs/connectors/DeeplinkConnector.js +271 -0
  4. package/lib/commonjs/connectors/DeeplinkConnector.js.map +1 -0
  5. package/lib/commonjs/connectors/PhantomConnector.js +39 -0
  6. package/lib/commonjs/connectors/PhantomConnector.js.map +1 -0
  7. package/lib/commonjs/connectors/SolflareConnector.js +39 -0
  8. package/lib/commonjs/connectors/SolflareConnector.js.map +1 -0
  9. package/lib/commonjs/helpers.js +102 -0
  10. package/lib/commonjs/helpers.js.map +1 -0
  11. package/lib/commonjs/index.js +27 -0
  12. package/lib/commonjs/index.js.map +1 -0
  13. package/lib/commonjs/package.json +1 -0
  14. package/lib/commonjs/providers/DeeplinkProvider.js +432 -0
  15. package/lib/commonjs/providers/DeeplinkProvider.js.map +1 -0
  16. package/lib/commonjs/types.js +6 -0
  17. package/lib/commonjs/types.js.map +1 -0
  18. package/lib/commonjs/utils/createSPLTokenTransaction.js +96 -0
  19. package/lib/commonjs/utils/createSPLTokenTransaction.js.map +1 -0
  20. package/lib/commonjs/utils/createSendTransaction.js +30 -0
  21. package/lib/commonjs/utils/createSendTransaction.js.map +1 -0
  22. package/lib/module/adapter.js +265 -0
  23. package/lib/module/adapter.js.map +1 -0
  24. package/lib/module/connectors/DeeplinkConnector.js +265 -0
  25. package/lib/module/connectors/DeeplinkConnector.js.map +1 -0
  26. package/lib/module/connectors/PhantomConnector.js +34 -0
  27. package/lib/module/connectors/PhantomConnector.js.map +1 -0
  28. package/lib/module/connectors/SolflareConnector.js +34 -0
  29. package/lib/module/connectors/SolflareConnector.js.map +1 -0
  30. package/lib/module/helpers.js +95 -0
  31. package/lib/module/helpers.js.map +1 -0
  32. package/lib/module/index.js +11 -0
  33. package/lib/module/index.js.map +1 -0
  34. package/lib/module/providers/DeeplinkProvider.js +426 -0
  35. package/lib/module/providers/DeeplinkProvider.js.map +1 -0
  36. package/lib/module/types.js +4 -0
  37. package/lib/module/types.js.map +1 -0
  38. package/lib/module/utils/createSPLTokenTransaction.js +92 -0
  39. package/lib/module/utils/createSPLTokenTransaction.js.map +1 -0
  40. package/lib/module/utils/createSendTransaction.js +26 -0
  41. package/lib/module/utils/createSendTransaction.js.map +1 -0
  42. package/lib/typescript/adapter.d.ts +23 -0
  43. package/lib/typescript/adapter.d.ts.map +1 -0
  44. package/lib/typescript/connectors/DeeplinkConnector.d.ts +30 -0
  45. package/lib/typescript/connectors/DeeplinkConnector.d.ts.map +1 -0
  46. package/lib/typescript/connectors/PhantomConnector.d.ts +12 -0
  47. package/lib/typescript/connectors/PhantomConnector.d.ts.map +1 -0
  48. package/lib/typescript/connectors/SolflareConnector.d.ts +12 -0
  49. package/lib/typescript/connectors/SolflareConnector.d.ts.map +1 -0
  50. package/lib/typescript/helpers.d.ts +31 -0
  51. package/lib/typescript/helpers.d.ts.map +1 -0
  52. package/lib/typescript/index.d.ts +5 -0
  53. package/lib/typescript/index.d.ts.map +1 -0
  54. package/lib/typescript/providers/DeeplinkProvider.d.ts +59 -0
  55. package/lib/typescript/providers/DeeplinkProvider.d.ts.map +1 -0
  56. package/lib/typescript/types.d.ts +99 -0
  57. package/lib/typescript/types.d.ts.map +1 -0
  58. package/lib/typescript/utils/createSPLTokenTransaction.d.ts +4 -0
  59. package/lib/typescript/utils/createSPLTokenTransaction.d.ts.map +1 -0
  60. package/lib/typescript/utils/createSendTransaction.d.ts +10 -0
  61. package/lib/typescript/utils/createSendTransaction.d.ts.map +1 -0
  62. package/package.json +54 -0
  63. package/readme.md +9 -0
  64. package/src/adapter.ts +315 -0
  65. package/src/connectors/DeeplinkConnector.ts +353 -0
  66. package/src/connectors/PhantomConnector.ts +36 -0
  67. package/src/connectors/SolflareConnector.ts +36 -0
  68. package/src/helpers.ts +102 -0
  69. package/src/index.ts +9 -0
  70. package/src/providers/DeeplinkProvider.ts +605 -0
  71. package/src/types.ts +132 -0
  72. package/src/utils/createSPLTokenTransaction.ts +152 -0
  73. package/src/utils/createSendTransaction.ts +41 -0
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSPLTokenTransaction = createSPLTokenTransaction;
7
+ var _splToken = require("@solana/spl-token");
8
+ var _web = require("@solana/web3.js");
9
+ const SPL_COMPUTE_BUDGET_CONSTANTS = {
10
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
11
+ UNIT_LIMIT_WITH_ATA_CREATION: 400000
12
+ };
13
+ async function getMintOwnerProgramId(connection, mint) {
14
+ const info = await connection.getAccountInfo(mint);
15
+ if (!info) {
16
+ throw new Error('Mint account not found');
17
+ }
18
+ if (info.owner.equals(_splToken.TOKEN_PROGRAM_ID)) {
19
+ return _splToken.TOKEN_PROGRAM_ID;
20
+ }
21
+ if (info.owner.equals(_splToken.TOKEN_2022_PROGRAM_ID)) {
22
+ return _splToken.TOKEN_2022_PROGRAM_ID;
23
+ }
24
+ throw new Error('Unknown mint owner program');
25
+ }
26
+ async function createSPLTokenTransaction({
27
+ fromAddress,
28
+ toAddress,
29
+ amount,
30
+ tokenMint,
31
+ connection
32
+ }) {
33
+ if (!fromAddress) {
34
+ throw new Error('No public key found');
35
+ }
36
+ if (amount <= 0) {
37
+ throw new Error('Amount must be greater than 0');
38
+ }
39
+ try {
40
+ const fromPubkey = new _web.PublicKey(fromAddress);
41
+ const toPubkey = new _web.PublicKey(toAddress);
42
+ const mintPubkey = new _web.PublicKey(tokenMint);
43
+ const programId = await getMintOwnerProgramId(connection, mintPubkey);
44
+ const mintInfo = await (0, _splToken.getMint)(connection, mintPubkey, undefined, programId);
45
+ const decimals = mintInfo.decimals;
46
+ if (decimals < 0) {
47
+ throw new Error('Invalid token decimals');
48
+ }
49
+ const tokenAmount = Math.floor(amount * 10 ** decimals);
50
+ const fromTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, fromPubkey, false, programId);
51
+ const toTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, toPubkey, false, programId);
52
+ try {
53
+ const fromAccount = await (0, _splToken.getAccount)(connection, fromTokenAccount, undefined, programId);
54
+ if (fromAccount.amount < BigInt(tokenAmount)) {
55
+ throw new Error('Insufficient token balance');
56
+ }
57
+ } catch (error) {
58
+ if (error instanceof _splToken.TokenAccountNotFoundError) {
59
+ throw new Error('Sender does not have a token account for this mint');
60
+ }
61
+ throw error;
62
+ }
63
+ let shouldCreateATA = false;
64
+ try {
65
+ await (0, _splToken.getAccount)(connection, toTokenAccount, undefined, programId);
66
+ } catch (error) {
67
+ if (error instanceof _splToken.TokenAccountNotFoundError) {
68
+ shouldCreateATA = true;
69
+ } else {
70
+ throw error;
71
+ }
72
+ }
73
+ const instructions = [];
74
+ if (shouldCreateATA) {
75
+ instructions.push(_web.ComputeBudgetProgram.setComputeUnitPrice({
76
+ microLamports: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_PRICE_MICRO_LAMPORTS
77
+ }), _web.ComputeBudgetProgram.setComputeUnitLimit({
78
+ units: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_WITH_ATA_CREATION
79
+ }));
80
+ instructions.push((0, _splToken.createAssociatedTokenAccountInstruction)(fromPubkey, toTokenAccount, toPubkey, mintPubkey, programId));
81
+ }
82
+ instructions.push((0, _splToken.createTransferCheckedInstruction)(fromTokenAccount, mintPubkey, toTokenAccount, fromPubkey, tokenAmount, decimals, [], programId));
83
+ const {
84
+ blockhash,
85
+ lastValidBlockHeight
86
+ } = await connection.getLatestBlockhash();
87
+ return new _web.Transaction({
88
+ feePayer: fromPubkey,
89
+ blockhash,
90
+ lastValidBlockHeight
91
+ }).add(...instructions);
92
+ } catch (error) {
93
+ throw new Error(`Failed to create SPL token transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
94
+ }
95
+ }
96
+ //# sourceMappingURL=createSPLTokenTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_splToken","require","_web","SPL_COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT_WITH_ATA_CREATION","getMintOwnerProgramId","connection","mint","info","getAccountInfo","Error","owner","equals","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","createSPLTokenTransaction","fromAddress","toAddress","amount","tokenMint","fromPubkey","PublicKey","toPubkey","mintPubkey","programId","mintInfo","getMint","undefined","decimals","tokenAmount","Math","floor","fromTokenAccount","getAssociatedTokenAddressSync","toTokenAccount","fromAccount","getAccount","BigInt","error","TokenAccountNotFoundError","shouldCreateATA","instructions","push","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","createAssociatedTokenAccountInstruction","createTransferCheckedInstruction","blockhash","lastValidBlockHeight","getLatestBlockhash","Transaction","feePayer","add","message"],"sourceRoot":"../../../src","sources":["utils/createSPLTokenTransaction.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSendTransaction = createSendTransaction;
7
+ var _web = require("@solana/web3.js");
8
+ async function createSendTransaction({
9
+ fromAddress,
10
+ toAddress,
11
+ amount,
12
+ connection
13
+ }) {
14
+ const fromPubkey = new _web.PublicKey(fromAddress);
15
+ const toPubkey = new _web.PublicKey(toAddress);
16
+ const lamports = Math.floor(amount * _web.LAMPORTS_PER_SOL);
17
+ const {
18
+ blockhash
19
+ } = await connection.getLatestBlockhash();
20
+ const instructions = [_web.SystemProgram.transfer({
21
+ fromPubkey,
22
+ toPubkey,
23
+ lamports
24
+ })];
25
+ const transaction = new _web.Transaction().add(...instructions);
26
+ transaction.feePayer = fromPubkey;
27
+ transaction.recentBlockhash = blockhash;
28
+ return transaction;
29
+ }
30
+ //# sourceMappingURL=createSendTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_web","require","createSendTransaction","fromAddress","toAddress","amount","connection","fromPubkey","PublicKey","toPubkey","lamports","Math","floor","LAMPORTS_PER_SOL","blockhash","getLatestBlockhash","instructions","SystemProgram","transfer","transaction","Transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAeO,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,MAAM;EACNC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIC,cAAS,CAACL,WAAW,CAAC;EAC7C,MAAMM,QAAQ,GAAG,IAAID,cAAS,CAACJ,SAAS,CAAC;EACzC,MAAMM,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACP,MAAM,GAAGQ,qBAAgB,CAAC;EAEtD,MAAM;IAAEC;EAAU,CAAC,GAAG,MAAMR,UAAU,CAACS,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBC,kBAAa,CAACC,QAAQ,CAAC;IACrBX,UAAU;IACVE,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMS,WAAW,GAAG,IAAIC,gBAAW,CAAC,CAAC,CAACC,GAAG,CAAC,GAAGL,YAAY,CAAC;EAC1DG,WAAW,CAACG,QAAQ,GAAGf,UAAU;EACjCY,WAAW,CAACI,eAAe,GAAGT,SAAS;EAEvC,OAAOK,WAAW;AACpB","ignoreList":[]}
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ import { SolanaBaseAdapter } from '@reown/appkit-common-react-native';
4
+ import { getSolanaNativeBalance, getSolanaTokenBalance } from './helpers';
5
+ import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
6
+ import base58 from 'bs58';
7
+ import { createSendTransaction } from './utils/createSendTransaction';
8
+ import { createSPLTokenTransaction } from './utils/createSPLTokenTransaction';
9
+ export class SolanaAdapter extends SolanaBaseAdapter {
10
+ static supportedNamespace = 'solana';
11
+ constructor() {
12
+ super({
13
+ supportedNamespace: SolanaAdapter.supportedNamespace,
14
+ adapterType: 'solana'
15
+ });
16
+ }
17
+ async getBalance(params) {
18
+ const {
19
+ network,
20
+ address,
21
+ tokens
22
+ } = params;
23
+ if (!this.connector) throw new Error('No active connector');
24
+ if (!network) throw new Error('No network provided');
25
+ const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
26
+ if (!balanceAddress) {
27
+ return {
28
+ amount: '0.00',
29
+ symbol: 'SOL'
30
+ };
31
+ }
32
+ try {
33
+ const rpcUrl = network.rpcUrls?.default?.http?.[0];
34
+ if (!rpcUrl) throw new Error('No RPC URL available');
35
+ const base58Address = balanceAddress.split(':')[2];
36
+ if (!base58Address) throw new Error('Invalid balance address');
37
+ const token = network?.caipNetworkId && tokens?.[network.caipNetworkId]?.address;
38
+ let balance;
39
+ if (token) {
40
+ const {
41
+ amount,
42
+ symbol
43
+ } = await getSolanaTokenBalance(rpcUrl, base58Address, token);
44
+ balance = {
45
+ amount,
46
+ symbol
47
+ };
48
+ } else {
49
+ const amount = await getSolanaNativeBalance(rpcUrl, base58Address);
50
+ balance = {
51
+ amount: amount.toString(),
52
+ symbol: 'SOL'
53
+ };
54
+ }
55
+ this.emit('balanceChanged', {
56
+ address: balanceAddress,
57
+ balance
58
+ });
59
+ return balance;
60
+ } catch (error) {
61
+ return {
62
+ amount: '0.00',
63
+ symbol: 'SOL'
64
+ };
65
+ }
66
+ }
67
+ async signTransaction(transaction, network) {
68
+ if (!this.connector) {
69
+ throw new Error('SolanaAdapter:signTransaction - no active connector');
70
+ }
71
+ if (!network) {
72
+ throw new Error('SolanaAdapter:signTransaction - network is undefined');
73
+ }
74
+ const provider = this.connector.getProvider('solana');
75
+ if (!provider) {
76
+ throw new Error('SolanaAdapter:signTransaction - provider is undefined');
77
+ }
78
+ try {
79
+ // Check if this is a deeplink provider (Phantom/Solflare)
80
+ const isDeeplinkProvider = this.connector.type === 'phantom' || this.connector.type === 'solflare';
81
+
82
+ // Serialize transaction based on provider type
83
+ let serializedTransaction;
84
+ if (isDeeplinkProvider) {
85
+ // Deeplink providers (Phantom/Solflare) expect base58
86
+ const transactionBytes = new Uint8Array(transaction.serialize({
87
+ verifySignatures: false
88
+ }));
89
+ serializedTransaction = base58.encode(transactionBytes);
90
+ } else {
91
+ // WalletConnect providers expect base64 (following WalletConnect standard)
92
+ serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
93
+ verifySignatures: false
94
+ }))).toString('base64');
95
+ }
96
+ const result = await provider.request({
97
+ method: 'solana_signTransaction',
98
+ params: {
99
+ transaction: serializedTransaction,
100
+ pubkey: this.getAccounts()?.[0]?.split(':')[2] || ''
101
+ }
102
+ }, network.caipNetworkId);
103
+
104
+ // Handle different response formats
105
+ if ('signature' in result && result.signature) {
106
+ // Old RPC response format - add signature to transaction
107
+ const decoded = base58.decode(result.signature);
108
+ if (transaction instanceof Transaction && transaction.feePayer) {
109
+ transaction.addSignature(transaction.feePayer, Buffer.from(decoded));
110
+ }
111
+ return transaction;
112
+ }
113
+ if ('transaction' in result && result.transaction) {
114
+ // New response format - deserialize the signed transaction
115
+ let decodedTransaction;
116
+ if (isDeeplinkProvider) {
117
+ // Deeplink providers return base58 encoded transactions
118
+ try {
119
+ const decodedBytes = base58.decode(result.transaction);
120
+ decodedTransaction = Buffer.from(decodedBytes);
121
+ } catch (error) {
122
+ throw new Error('Failed to decode base58 transaction from deeplink provider');
123
+ }
124
+ } else {
125
+ // WalletConnect providers return base64 encoded transactions
126
+ decodedTransaction = Buffer.from(result.transaction, 'base64');
127
+ }
128
+ if (transaction instanceof VersionedTransaction) {
129
+ return VersionedTransaction.deserialize(new Uint8Array(decodedTransaction));
130
+ }
131
+ return Transaction.from(decodedTransaction);
132
+ }
133
+ throw new Error('SolanaAdapter:signTransaction - invalid response format');
134
+ } catch (error) {
135
+ if (error instanceof Error) {
136
+ throw new Error(`SolanaAdapter:signTransaction - ${error.message}`);
137
+ }
138
+ throw new Error('SolanaAdapter:signTransaction - unknown error occurred');
139
+ }
140
+ }
141
+ async sendTransaction(data) {
142
+ const {
143
+ fromAddress,
144
+ toAddress,
145
+ amount,
146
+ network,
147
+ rpcUrl,
148
+ tokenMint
149
+ } = data;
150
+ if (!this.connector) {
151
+ throw new Error('SolanaAdapter:sendTransaction - no active connector');
152
+ }
153
+ const provider = this.connector.getProvider('solana');
154
+ if (!provider) {
155
+ throw new Error('SolanaAdapter:sendTransaction - provider is undefined');
156
+ }
157
+ if (!network) {
158
+ throw new Error('SolanaAdapter:sendTransaction - network is undefined');
159
+ }
160
+ if (!fromAddress) {
161
+ throw new Error('SolanaAdapter:sendTransaction - fromAddress is undefined');
162
+ }
163
+ if (!toAddress) {
164
+ throw new Error('SolanaAdapter:sendTransaction - toAddress is undefined');
165
+ }
166
+ if (!amount || amount <= 0) {
167
+ throw new Error('SolanaAdapter:sendTransaction - amount must be greater than 0');
168
+ }
169
+ try {
170
+ // Determine RPC URL
171
+ let connectionRpcUrl = rpcUrl;
172
+ if (!connectionRpcUrl && network) {
173
+ connectionRpcUrl = network.rpcUrls?.default?.http?.[0];
174
+ }
175
+ if (!connectionRpcUrl) {
176
+ throw new Error('SolanaAdapter:sendTransaction - no RPC URL available');
177
+ }
178
+
179
+ // Create connection
180
+ const connection = new Connection(connectionRpcUrl, 'confirmed');
181
+ const transaction = tokenMint ? await createSPLTokenTransaction({
182
+ connection,
183
+ fromAddress,
184
+ toAddress,
185
+ amount,
186
+ tokenMint
187
+ }) : await createSendTransaction({
188
+ connection,
189
+ fromAddress,
190
+ toAddress,
191
+ amount
192
+ });
193
+
194
+ // Sign the transaction
195
+ const signedTransaction = await this.signTransaction(transaction, network);
196
+
197
+ // Send the signed transaction
198
+ const signature = await connection.sendRawTransaction(signedTransaction.serialize(), {
199
+ skipPreflight: false,
200
+ preflightCommitment: 'confirmed'
201
+ });
202
+ if (!signature) {
203
+ throw new Error('SolanaAdapter:sendTransaction - no signature returned');
204
+ }
205
+ return signature;
206
+ } catch (error) {
207
+ if (error instanceof Error) {
208
+ throw new Error(`SolanaAdapter:sendTransaction - ${error.message}`);
209
+ }
210
+ throw new Error('SolanaAdapter:sendTransaction - unknown error occurred');
211
+ }
212
+ }
213
+ async signMessage(address, message, chainId) {
214
+ try {
215
+ if (!this.connector) {
216
+ throw new Error('SolanaAdapter:signMessage - no active connector');
217
+ }
218
+ const provider = this.connector.getProvider('solana');
219
+ if (!provider) {
220
+ throw new Error('SolanaAdapter:signMessage - provider is undefined');
221
+ }
222
+ const chain = chainId ? `${this.getSupportedNamespace()}:${chainId}` : undefined;
223
+ const encodedMessage = new TextEncoder().encode(message);
224
+ const params = {
225
+ message: base58.encode(encodedMessage),
226
+ pubkey: address
227
+ // For Phantom, pubkey is not part of signMessage params directly with session
228
+ // For other wallets, it might be needed if they don't infer from session
229
+ };
230
+ const {
231
+ signature
232
+ } = await provider.request({
233
+ method: 'solana_signMessage',
234
+ params
235
+ }, chain);
236
+ return signature;
237
+ } catch (error) {
238
+ throw error;
239
+ }
240
+ }
241
+ async switchNetwork(network) {
242
+ if (!this.connector) throw new Error('No active connector');
243
+ const provider = this.connector.getProvider('solana');
244
+ if (!provider) throw new Error('No active provider');
245
+ try {
246
+ await this.connector.switchNetwork(network);
247
+ return;
248
+ } catch (switchError) {
249
+ throw switchError;
250
+ }
251
+ }
252
+ getAccounts() {
253
+ if (!this.connector) throw new Error('No active connector');
254
+ const namespaces = this.connector.getNamespaces();
255
+ return namespaces[this.getSupportedNamespace()]?.accounts;
256
+ }
257
+ disconnect() {
258
+ if (!this.connector) throw new Error('No active connector');
259
+ return this.connector.disconnect();
260
+ }
261
+ getSupportedNamespace() {
262
+ return SolanaAdapter.supportedNamespace;
263
+ }
264
+ }
265
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SolanaBaseAdapter","getSolanaNativeBalance","getSolanaTokenBalance","Connection","Transaction","VersionedTransaction","base58","createSendTransaction","createSPLTokenTransaction","SolanaAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","token","caipNetworkId","balance","emit","error","signTransaction","transaction","provider","getProvider","isDeeplinkProvider","type","serializedTransaction","transactionBytes","Uint8Array","serialize","verifySignatures","encode","Buffer","from","result","request","method","pubkey","signature","decoded","decode","feePayer","addSignature","decodedTransaction","decodedBytes","deserialize","message","sendTransaction","data","fromAddress","toAddress","tokenMint","connectionRpcUrl","connection","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":";;AAAA,SACEA,iBAAiB,QAMZ,mCAAmC;AAC1C,SAASC,sBAAsB,EAAEC,qBAAqB,QAAQ,WAAW;AACzE,SAASC,UAAU,EAAEC,WAAW,EAAEC,oBAAoB,QAAQ,iBAAiB;AAC/E,OAAOC,MAAM,MAAM,MAAM;AACzB,SAASC,qBAAqB,QAAQ,+BAA+B;AACrE,SAASC,yBAAyB,QAAQ,mCAAmC;AAW7E,OAAO,MAAMC,aAAa,SAAST,iBAAiB,CAAC;EACnD,OAAeU,kBAAkB,GAAmB,QAAQ;EAE5DC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC;MACJD,kBAAkB,EAAED,aAAa,CAACC,kBAAkB;MACpDE,WAAW,EAAE;IACf,CAAC,CAAC;EACJ;EAEA,MAAMC,UAAUA,CAACC,MAAwB,EAA+B;IACtE,MAAM;MAAEC,OAAO;MAAEC,OAAO;MAAEC;IAAO,CAAC,GAAGH,MAAM;IAE3C,IAAI,CAAC,IAAI,CAACI,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,IAAI,CAACJ,OAAO,EAAE,MAAM,IAAII,KAAK,CAAC,qBAAqB,CAAC;IAEpD,MAAMC,cAAc,GAClBJ,OAAO,IAAI,IAAI,CAACK,WAAW,CAAC,CAAC,EAAEC,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,QAAQ,CAACT,OAAO,CAACU,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEzF,IAAI,CAACN,cAAc,EAAE;MACnB,OAAO;QAAEO,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;IAEA,IAAI;MACF,MAAMC,MAAM,GAAGd,OAAO,CAACe,OAAO,EAAEC,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAC;MAClD,IAAI,CAACH,MAAM,EAAE,MAAM,IAAIV,KAAK,CAAC,sBAAsB,CAAC;MAEpD,MAAMc,aAAa,GAAGb,cAAc,CAACc,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAElD,IAAI,CAACD,aAAa,EAAE,MAAM,IAAId,KAAK,CAAC,yBAAyB,CAAC;MAE9D,MAAMgB,KAAK,GAAGpB,OAAO,EAAEqB,aAAa,IAAInB,MAAM,GAAGF,OAAO,CAACqB,aAAa,CAAC,EAAEpB,OAAO;MAChF,IAAIqB,OAAO;MAEX,IAAIF,KAAK,EAAE;QACT,MAAM;UAAER,MAAM;UAAEC;QAAO,CAAC,GAAG,MAAM1B,qBAAqB,CAAC2B,MAAM,EAAEI,aAAa,EAAEE,KAAK,CAAC;QACpFE,OAAO,GAAG;UACRV,MAAM;UACNC;QACF,CAAC;MACH,CAAC,MAAM;QACL,MAAMD,MAAM,GAAG,MAAM1B,sBAAsB,CAAC4B,MAAM,EAAEI,aAAa,CAAC;QAClEI,OAAO,GAAG;UACRV,MAAM,EAAEA,MAAM,CAACD,QAAQ,CAAC,CAAC;UACzBE,MAAM,EAAE;QACV,CAAC;MACH;MAEA,IAAI,CAACU,IAAI,CAAC,gBAAgB,EAAE;QAAEtB,OAAO,EAAEI,cAAc;QAAEiB;MAAQ,CAAC,CAAC;MAEjE,OAAOA,OAAO;IAChB,CAAC,CAAC,OAAOE,KAAK,EAAE;MACd,OAAO;QAAEZ,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;EACF;EAEA,MAAMY,eAAeA,CACnBC,WAAc,EACd1B,OAAuB,EACX;IACZ,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE;MACnB,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,CAACJ,OAAO,EAAE;MACZ,MAAM,IAAII,KAAK,CAAC,sDAAsD,CAAC;IACzE;IAEA,MAAMuB,QAAQ,GAAG,IAAI,CAACxB,SAAS,CAACyB,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIvB,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IAEA,IAAI;MACF;MACA,MAAMyB,kBAAkB,GACtB,IAAI,CAAC1B,SAAS,CAAC2B,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC3B,SAAS,CAAC2B,IAAI,KAAK,UAAU;;MAEzE;MACA,IAAIC,qBAA6B;MACjC,IAAIF,kBAAkB,EAAE;QACtB;QACA,MAAMG,gBAAgB,GAAG,IAAIC,UAAU,CAACP,WAAW,CAACQ,SAAS,CAAC;UAAEC,gBAAgB,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3FJ,qBAAqB,GAAGxC,MAAM,CAAC6C,MAAM,CAACJ,gBAAgB,CAAC;MACzD,CAAC,MAAM;QACL;QACAD,qBAAqB,GAAGM,MAAM,CAACC,IAAI,CACjC,IAAIL,UAAU,CAACP,WAAW,CAACQ,SAAS,CAAC;UAAEC,gBAAgB,EAAE;QAAM,CAAC,CAAC,CACnE,CAAC,CAACxB,QAAQ,CAAC,QAAQ,CAAC;MACtB;MAEA,MAAM4B,MAAM,GAAI,MAAMZ,QAAQ,CAACa,OAAO,CACpC;QACEC,MAAM,EAAE,wBAAwB;QAChC1C,MAAM,EAAE;UACN2B,WAAW,EAAEK,qBAAqB;UAClCW,MAAM,EAAE,IAAI,CAACpC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACpD;MACF,CAAC,EACDnB,OAAO,CAACqB,aACV,CAAkD;;MAElD;MACA,IAAI,WAAW,IAAIkB,MAAM,IAAIA,MAAM,CAACI,SAAS,EAAE;QAC7C;QACA,MAAMC,OAAO,GAAGrD,MAAM,CAACsD,MAAM,CAACN,MAAM,CAACI,SAAS,CAAC;QAC/C,IAAIjB,WAAW,YAAYrC,WAAW,IAAIqC,WAAW,CAACoB,QAAQ,EAAE;UAC9DpB,WAAW,CAACqB,YAAY,CACtBrB,WAAW,CAACoB,QAAQ,EACpBT,MAAM,CAACC,IAAI,CAACM,OAAO,CACrB,CAAC;QACH;QAEA,OAAOlB,WAAW;MACpB;MAEA,IAAI,aAAa,IAAIa,MAAM,IAAIA,MAAM,CAACb,WAAW,EAAE;QACjD;QACA,IAAIsB,kBAA0B;QAE9B,IAAInB,kBAAkB,EAAE;UACtB;UACA,IAAI;YACF,MAAMoB,YAAY,GAAG1D,MAAM,CAACsD,MAAM,CAACN,MAAM,CAACb,WAAW,CAAC;YACtDsB,kBAAkB,GAAGX,MAAM,CAACC,IAAI,CAACW,YAAY,CAAC;UAChD,CAAC,CAAC,OAAOzB,KAAK,EAAE;YACd,MAAM,IAAIpB,KAAK,CAAC,4DAA4D,CAAC;UAC/E;QACF,CAAC,MAAM;UACL;UACA4C,kBAAkB,GAAGX,MAAM,CAACC,IAAI,CAACC,MAAM,CAACb,WAAW,EAAE,QAAQ,CAAC;QAChE;QAEA,IAAIA,WAAW,YAAYpC,oBAAoB,EAAE;UAC/C,OAAOA,oBAAoB,CAAC4D,WAAW,CAAC,IAAIjB,UAAU,CAACe,kBAAkB,CAAC,CAAC;QAC7E;QAEA,OAAO3D,WAAW,CAACiD,IAAI,CAACU,kBAAkB,CAAC;MAC7C;MAEA,MAAM,IAAI5C,KAAK,CAAC,yDAAyD,CAAC;IAC5E,CAAC,CAAC,OAAOoB,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYpB,KAAK,EAAE;QAC1B,MAAM,IAAIA,KAAK,CAAC,mCAAmCoB,KAAK,CAAC2B,OAAO,EAAE,CAAC;MACrE;MACA,MAAM,IAAI/C,KAAK,CAAC,wDAAwD,CAAC;IAC3E;EACF;EAEA,MAAMgD,eAAeA,CAACC,IAA2B,EAA0B;IACzE,MAAM;MAAEC,WAAW;MAAEC,SAAS;MAAE3C,MAAM;MAAEZ,OAAO;MAAEc,MAAM;MAAE0C;IAAU,CAAC,GAAGH,IAAI;IAE3E,IAAI,CAAC,IAAI,CAAClD,SAAS,EAAE;MACnB,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,MAAMuB,QAAQ,GAAG,IAAI,CAACxB,SAAS,CAACyB,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIvB,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IAEA,IAAI,CAACJ,OAAO,EAAE;MACZ,MAAM,IAAII,KAAK,CAAC,sDAAsD,CAAC;IACzE;IAEA,IAAI,CAACkD,WAAW,EAAE;MAChB,MAAM,IAAIlD,KAAK,CAAC,0DAA0D,CAAC;IAC7E;IAEA,IAAI,CAACmD,SAAS,EAAE;MACd,MAAM,IAAInD,KAAK,CAAC,wDAAwD,CAAC;IAC3E;IAEA,IAAI,CAACQ,MAAM,IAAIA,MAAM,IAAI,CAAC,EAAE;MAC1B,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,IAAI;MACF;MACA,IAAIqD,gBAAgB,GAAG3C,MAAM;MAC7B,IAAI,CAAC2C,gBAAgB,IAAIzD,OAAO,EAAE;QAChCyD,gBAAgB,GAAGzD,OAAO,CAACe,OAAO,EAAEC,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAC;MACxD;MACA,IAAI,CAACwC,gBAAgB,EAAE;QACrB,MAAM,IAAIrD,KAAK,CAAC,sDAAsD,CAAC;MACzE;;MAEA;MACA,MAAMsD,UAAU,GAAG,IAAItE,UAAU,CAACqE,gBAAgB,EAAE,WAAW,CAAC;MAEhE,MAAM/B,WAAW,GAAG8B,SAAS,GACzB,MAAM/D,yBAAyB,CAAC;QAC9BiE,UAAU;QACVJ,WAAW;QACXC,SAAS;QACT3C,MAAM;QACN4C;MACF,CAAC,CAAC,GACF,MAAMhE,qBAAqB,CAAC;QAC1BkE,UAAU;QACVJ,WAAW;QACXC,SAAS;QACT3C;MACF,CAAC,CAAC;;MAEN;MACA,MAAM+C,iBAAiB,GAAG,MAAM,IAAI,CAAClC,eAAe,CAACC,WAAW,EAAE1B,OAAO,CAAC;;MAE1E;MACA,MAAM2C,SAAS,GAAG,MAAMe,UAAU,CAACE,kBAAkB,CAACD,iBAAiB,CAACzB,SAAS,CAAC,CAAC,EAAE;QACnF2B,aAAa,EAAE,KAAK;QACpBC,mBAAmB,EAAE;MACvB,CAAC,CAAC;MAEF,IAAI,CAACnB,SAAS,EAAE;QACd,MAAM,IAAIvC,KAAK,CAAC,uDAAuD,CAAC;MAC1E;MAEA,OAAOuC,SAAS;IAClB,CAAC,CAAC,OAAOnB,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYpB,KAAK,EAAE;QAC1B,MAAM,IAAIA,KAAK,CAAC,mCAAmCoB,KAAK,CAAC2B,OAAO,EAAE,CAAC;MACrE;MACA,MAAM,IAAI/C,KAAK,CAAC,wDAAwD,CAAC;IAC3E;EACF;EAEA,MAAe2D,WAAWA,CAAC9D,OAAe,EAAEkD,OAAe,EAAEa,OAAgB,EAAmB;IAC9F,IAAI;MACF,IAAI,CAAC,IAAI,CAAC7D,SAAS,EAAE;QACnB,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;MACpE;MAEA,MAAMuB,QAAQ,GAAG,IAAI,CAACxB,SAAS,CAACyB,WAAW,CAAC,QAAQ,CAAC;MACrD,IAAI,CAACD,QAAQ,EAAE;QACb,MAAM,IAAIvB,KAAK,CAAC,mDAAmD,CAAC;MACtE;MAEA,MAAM6D,KAAK,GAAGD,OAAO,GAAG,GAAG,IAAI,CAACE,qBAAqB,CAAC,CAAC,IAAIF,OAAO,EAAE,GAAGG,SAAS;MAEhF,MAAMC,cAAc,GAAG,IAAIC,WAAW,CAAC,CAAC,CAACjC,MAAM,CAACe,OAAO,CAAC;MACxD,MAAMpD,MAAM,GAAG;QACboD,OAAO,EAAE5D,MAAM,CAAC6C,MAAM,CAACgC,cAAc,CAAC;QACtC1B,MAAM,EAAEzC;QACR;QACA;MACF,CAAC;MACD,MAAM;QAAE0C;MAAU,CAAC,GAAI,MAAMhB,QAAQ,CAACa,OAAO,CAC3C;QAAEC,MAAM,EAAE,oBAAoB;QAAE1C;MAAO,CAAC,EACxCkE,KACF,CAEC;MAED,OAAOtB,SAAS;IAClB,CAAC,CAAC,OAAOnB,KAAK,EAAE;MACd,MAAMA,KAAK;IACb;EACF;EAEA,MAAM8C,aAAaA,CAACtE,OAAsB,EAAiB;IACzD,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,MAAMuB,QAAQ,GAAG,IAAI,CAACxB,SAAS,CAACyB,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE,MAAM,IAAIvB,KAAK,CAAC,oBAAoB,CAAC;IAEpD,IAAI;MACF,MAAM,IAAI,CAACD,SAAS,CAACmE,aAAa,CAACtE,OAAO,CAAC;MAE3C;IACF,CAAC,CAAC,OAAOuE,WAAgB,EAAE;MACzB,MAAMA,WAAW;IACnB;EACF;EAEAjE,WAAWA,CAAA,EAA8B;IACvC,IAAI,CAAC,IAAI,CAACH,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAMoE,UAAU,GAAG,IAAI,CAACrE,SAAS,CAACsE,aAAa,CAAC,CAAC;IAEjD,OAAOD,UAAU,CAAC,IAAI,CAACN,qBAAqB,CAAC,CAAC,CAAC,EAAEQ,QAAQ;EAC3D;EAEAC,UAAUA,CAAA,EAAkB;IAC1B,IAAI,CAAC,IAAI,CAACxE,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,OAAO,IAAI,CAACD,SAAS,CAACwE,UAAU,CAAC,CAAC;EACpC;EAEAT,qBAAqBA,CAAA,EAAmB;IACtC,OAAOxE,aAAa,CAACC,kBAAkB;EACzC;AACF","ignoreList":[]}