@reown/appkit-solana-react-native 0.0.0-feat-multichain-20250513175016 → 0.0.0-feat-multichain-20250514142632

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.
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.SolanaAdapter = void 0;
7
7
  var _appkitCommonReactNative = require("@reown/appkit-common-react-native");
8
- var _web = require("@solana/web3.js");
8
+ var _helpers = require("./helpers");
9
9
  class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
10
10
  static supportedNamespace = 'solana';
11
11
  constructor(configParams) {
@@ -23,19 +23,20 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
23
23
  if (!network) throw new Error('No network provided');
24
24
  const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
25
25
  if (!balanceAddress) {
26
- return Promise.resolve({
26
+ return {
27
27
  amount: '0.00',
28
28
  symbol: 'SOL'
29
- });
29
+ };
30
30
  }
31
31
  try {
32
- const connection = new _web.Connection(network?.rpcUrls?.default?.http?.[0]); //TODO: check connection settings
33
- const balanceAmount = await connection.getBalance(new _web.PublicKey(balanceAddress.split(':')[2]));
34
- const formattedBalance = (balanceAmount / 1000000000).toString(); //TODO: add util with LAMPORTS_PER_SOL
35
-
32
+ const rpcUrl = network.rpcUrls?.default?.http?.[0];
33
+ if (!rpcUrl) throw new Error('No RPC URL available');
34
+ const base58Address = balanceAddress.split(':')[2];
35
+ if (!base58Address) throw new Error('Invalid balance address');
36
+ const amount = await (0, _helpers.getSolanaBalance)(rpcUrl, base58Address);
36
37
  const balance = {
37
- amount: formattedBalance,
38
- symbol: network?.nativeCurrency.symbol || 'SOL'
38
+ amount: amount.toString(),
39
+ symbol: network.nativeCurrency?.symbol ?? 'SOL'
39
40
  };
40
41
  this.emit('balanceChanged', {
41
42
  namespace: this.getSupportedNamespace(),
@@ -67,7 +68,7 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
67
68
  return namespaces[this.getSupportedNamespace()]?.accounts;
68
69
  }
69
70
  disconnect() {
70
- if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
71
+ if (!this.connector) throw new Error('No active connector');
71
72
  return this.connector.disconnect();
72
73
  }
73
74
  async request(method, params) {
@@ -1 +1 @@
1
- {"version":3,"names":["_appkitCommonReactNative","require","_web","SolanaAdapter","SolanaBaseAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","Promise","resolve","amount","symbol","connection","Connection","rpcUrls","default","http","balanceAmount","PublicKey","split","formattedBalance","balance","nativeCurrency","emit","namespace","getSupportedNamespace","error","switchNetwork","provider","getProvider","switchError","namespaces","getNamespaces","accounts","disconnect","request","method","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_appkitCommonReactNative","require","_helpers","SolanaAdapter","SolanaBaseAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","getSolanaBalance","balance","nativeCurrency","emit","namespace","getSupportedNamespace","error","switchNetwork","provider","getProvider","switchError","namespaces","getNamespaces","accounts","disconnect","request","method","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSolanaBalance = getSolanaBalance;
7
+ exports.isSolanaAddress = isSolanaAddress;
8
+ /**
9
+ * Validates if the given string is a Solana address.
10
+ * @param address The string to validate.
11
+ * @returns True if the address is valid, false otherwise.
12
+ */
13
+ function isSolanaAddress(address) {
14
+ const solanaAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
15
+ return solanaAddressRegex.test(address);
16
+ }
17
+
18
+ /**
19
+ * Helper to fetch SOL balance using JSON-RPC
20
+ * @param rpcUrl Solana RPC endpoint
21
+ * @param address Solana public address (base58)
22
+ */
23
+ async function getSolanaBalance(rpcUrl, address) {
24
+ if (!isSolanaAddress(address)) {
25
+ throw new Error('Invalid Solana address format');
26
+ }
27
+ const response = await fetch(rpcUrl, {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'application/json'
31
+ },
32
+ body: JSON.stringify({
33
+ jsonrpc: '2.0',
34
+ id: 1,
35
+ method: 'getBalance',
36
+ params: [address]
37
+ })
38
+ });
39
+ const json = await response.json();
40
+ if (json.error) throw new Error(json.error.message);
41
+ return json.result.value / 1000000000; // Convert lamports to SOL
42
+ }
43
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isSolanaAddress","address","solanaAddressRegex","test","getSolanaBalance","rpcUrl","Error","response","fetch","method","headers","body","JSON","stringify","jsonrpc","id","params","json","error","message","result","value"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAeA,CAACC,OAAe,EAAW;EACxD,MAAMC,kBAAkB,GAAG,+BAA+B;EAE1D,OAAOA,kBAAkB,CAACC,IAAI,CAACF,OAAO,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACO,eAAeG,gBAAgBA,CAACC,MAAc,EAAEJ,OAAe,EAAmB;EACvF,IAAI,CAACD,eAAe,CAACC,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIK,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEA,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACH,MAAM,EAAE;IACnCI,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MAAE,cAAc,EAAE;IAAmB,CAAC;IAC/CC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;MACnBC,OAAO,EAAE,KAAK;MACdC,EAAE,EAAE,CAAC;MACLN,MAAM,EAAE,YAAY;MACpBO,MAAM,EAAE,CAACf,OAAO;IAClB,CAAC;EACH,CAAC,CAAC;EAEF,MAAMgB,IAAI,GAAI,MAAMV,QAAQ,CAACU,IAAI,CAAC,CAGjC;EACD,IAAIA,IAAI,CAACC,KAAK,EAAE,MAAM,IAAIZ,KAAK,CAACW,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC;EAEnD,OAAOF,IAAI,CAACG,MAAM,CAACC,KAAK,GAAG,UAAU,CAAC,CAAC;AACzC"}
@@ -1,5 +1,5 @@
1
1
  import { SolanaBaseAdapter } from '@reown/appkit-common-react-native';
2
- import { Connection, PublicKey } from '@solana/web3.js';
2
+ import { getSolanaBalance } from './helpers';
3
3
  export class SolanaAdapter extends SolanaBaseAdapter {
4
4
  static supportedNamespace = 'solana';
5
5
  constructor(configParams) {
@@ -17,19 +17,20 @@ export class SolanaAdapter extends SolanaBaseAdapter {
17
17
  if (!network) throw new Error('No network provided');
18
18
  const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
19
19
  if (!balanceAddress) {
20
- return Promise.resolve({
20
+ return {
21
21
  amount: '0.00',
22
22
  symbol: 'SOL'
23
- });
23
+ };
24
24
  }
25
25
  try {
26
- const connection = new Connection(network?.rpcUrls?.default?.http?.[0]); //TODO: check connection settings
27
- const balanceAmount = await connection.getBalance(new PublicKey(balanceAddress.split(':')[2]));
28
- const formattedBalance = (balanceAmount / 1000000000).toString(); //TODO: add util with LAMPORTS_PER_SOL
29
-
26
+ const rpcUrl = network.rpcUrls?.default?.http?.[0];
27
+ if (!rpcUrl) throw new Error('No RPC URL available');
28
+ const base58Address = balanceAddress.split(':')[2];
29
+ if (!base58Address) throw new Error('Invalid balance address');
30
+ const amount = await getSolanaBalance(rpcUrl, base58Address);
30
31
  const balance = {
31
- amount: formattedBalance,
32
- symbol: network?.nativeCurrency.symbol || 'SOL'
32
+ amount: amount.toString(),
33
+ symbol: network.nativeCurrency?.symbol ?? 'SOL'
33
34
  };
34
35
  this.emit('balanceChanged', {
35
36
  namespace: this.getSupportedNamespace(),
@@ -61,7 +62,7 @@ export class SolanaAdapter extends SolanaBaseAdapter {
61
62
  return namespaces[this.getSupportedNamespace()]?.accounts;
62
63
  }
63
64
  disconnect() {
64
- if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
65
+ if (!this.connector) throw new Error('No active connector');
65
66
  return this.connector.disconnect();
66
67
  }
67
68
  async request(method, params) {
@@ -1 +1 @@
1
- {"version":3,"names":["SolanaBaseAdapter","Connection","PublicKey","SolanaAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","Promise","resolve","amount","symbol","connection","rpcUrls","default","http","balanceAmount","split","formattedBalance","balance","nativeCurrency","emit","namespace","getSupportedNamespace","error","switchNetwork","provider","getProvider","switchError","namespaces","getNamespaces","accounts","disconnect","request","method"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"AAAA,SACEA,iBAAiB,QAMZ,mCAAmC;AAC1C,SAASC,UAAU,EAAEC,SAAS,QAAQ,iBAAiB;AAEvD,OAAO,MAAMC,aAAa,SAASH,iBAAiB,CAAC;EACnD,OAAeI,kBAAkB,GAAmB,QAAQ;EAE5DC,WAAWA,CAACC,YAAmC,EAAE;IAC/C,KAAK,CAAC;MACJC,SAAS,EAAED,YAAY,CAACC,SAAS;MACjCH,kBAAkB,EAAED,aAAa,CAACC;IACpC,CAAC,CAAC;EACJ;EAEA,MAAMI,UAAUA,CAACC,MAAwB,EAA+B;IACtE,MAAM;MAAEC,OAAO;MAAEC;IAAQ,CAAC,GAAGF,MAAM;IAEnC,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,IAAI,CAACH,OAAO,EAAE,MAAM,IAAIG,KAAK,CAAC,qBAAqB,CAAC;IAEpD,MAAMC,cAAc,GAClBH,OAAO,IAAI,IAAI,CAACI,WAAW,CAAC,CAAC,EAAEC,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,QAAQ,CAACR,OAAO,CAACS,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEzF,IAAI,CAACN,cAAc,EAAE;MACnB,OAAOO,OAAO,CAACC,OAAO,CAAC;QAAEC,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC,CAAC;IAC3D;IAEA,IAAI;MACF,MAAMC,UAAU,GAAG,IAAIxB,UAAU,CAACS,OAAO,EAAEgB,OAAO,EAAEC,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;MACnF,MAAMC,aAAa,GAAG,MAAMJ,UAAU,CAACjB,UAAU,CAC/C,IAAIN,SAAS,CAACY,cAAc,CAACgB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CACtD,CAAC;MACD,MAAMC,gBAAgB,GAAG,CAACF,aAAa,GAAG,UAAU,EAAET,QAAQ,CAAC,CAAC,CAAC,CAAC;;MAElE,MAAMY,OAAO,GAAG;QACdT,MAAM,EAAEQ,gBAAgB;QACxBP,MAAM,EAAEd,OAAO,EAAEuB,cAAc,CAACT,MAAM,IAAI;MAC5C,CAAC;MAED,IAAI,CAACU,IAAI,CAAC,gBAAgB,EAAE;QAC1BC,SAAS,EAAE,IAAI,CAACC,qBAAqB,CAAC,CAAC;QACvCzB,OAAO,EAAEG,cAAc;QACvBkB;MACF,CAAC,CAAC;MAEF,OAAOA,OAAO;IAChB,CAAC,CAAC,OAAOK,KAAK,EAAE;MACd,OAAO;QAAEd,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;EACF;EAEA,MAAMc,aAAaA,CAAC5B,OAAsB,EAAiB;IACzD,IAAI,CAAC,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,MAAM0B,QAAQ,GAAG,IAAI,CAAC3B,SAAS,CAAC4B,WAAW,CAAC,CAAC;IAC7C,IAAI,CAACD,QAAQ,EAAE,MAAM,IAAI1B,KAAK,CAAC,oBAAoB,CAAC;IAEpD,IAAI;MACF,MAAM,IAAI,CAACD,SAAS,CAAC0B,aAAa,CAAC5B,OAAO,CAAC;MAE3C;IACF,CAAC,CAAC,OAAO+B,WAAgB,EAAE;MACzB,MAAMA,WAAW;IACnB;EACF;EAEA1B,WAAWA,CAAA,EAA8B;IACvC,IAAI,CAAC,IAAI,CAACH,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAM6B,UAAU,GAAG,IAAI,CAAC9B,SAAS,CAAC+B,aAAa,CAAC,CAAC;IAEjD,OAAOD,UAAU,CAAC,IAAI,CAACN,qBAAqB,CAAC,CAAC,CAAC,EAAEQ,QAAQ;EAC3D;EAEAC,UAAUA,CAAA,EAAkB;IAC1B,IAAI,CAAC,IAAI,CAACjC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,gDAAgD,CAAC;IAEtF,OAAO,IAAI,CAACD,SAAS,CAACiC,UAAU,CAAC,CAAC;EACpC;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAEtC,MAAc,EAAE;IAC5C,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAM0B,QAAQ,GAAG,IAAI,CAAC3B,SAAS,CAAC4B,WAAW,CAAC,CAAC;IAE7C,OAAOD,QAAQ,CAACO,OAAO,CAAC;MAAEC,MAAM;MAAEtC;IAAO,CAAC,CAAC;EAC7C;EAEA2B,qBAAqBA,CAAA,EAAmB;IACtC,OAAOjC,aAAa,CAACC,kBAAkB;EACzC;AACF"}
1
+ {"version":3,"names":["SolanaBaseAdapter","getSolanaBalance","SolanaAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","balance","nativeCurrency","emit","namespace","getSupportedNamespace","error","switchNetwork","provider","getProvider","switchError","namespaces","getNamespaces","accounts","disconnect","request","method"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Validates if the given string is a Solana address.
3
+ * @param address The string to validate.
4
+ * @returns True if the address is valid, false otherwise.
5
+ */
6
+ export function isSolanaAddress(address) {
7
+ const solanaAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
8
+ return solanaAddressRegex.test(address);
9
+ }
10
+
11
+ /**
12
+ * Helper to fetch SOL balance using JSON-RPC
13
+ * @param rpcUrl Solana RPC endpoint
14
+ * @param address Solana public address (base58)
15
+ */
16
+ export async function getSolanaBalance(rpcUrl, address) {
17
+ if (!isSolanaAddress(address)) {
18
+ throw new Error('Invalid Solana address format');
19
+ }
20
+ const response = await fetch(rpcUrl, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json'
24
+ },
25
+ body: JSON.stringify({
26
+ jsonrpc: '2.0',
27
+ id: 1,
28
+ method: 'getBalance',
29
+ params: [address]
30
+ })
31
+ });
32
+ const json = await response.json();
33
+ if (json.error) throw new Error(json.error.message);
34
+ return json.result.value / 1000000000; // Convert lamports to SOL
35
+ }
36
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isSolanaAddress","address","solanaAddressRegex","test","getSolanaBalance","rpcUrl","Error","response","fetch","method","headers","body","JSON","stringify","jsonrpc","id","params","json","error","message","result","value"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,eAAeA,CAACC,OAAe,EAAW;EACxD,MAAMC,kBAAkB,GAAG,+BAA+B;EAE1D,OAAOA,kBAAkB,CAACC,IAAI,CAACF,OAAO,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeG,gBAAgBA,CAACC,MAAc,EAAEJ,OAAe,EAAmB;EACvF,IAAI,CAACD,eAAe,CAACC,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIK,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEA,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACH,MAAM,EAAE;IACnCI,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MAAE,cAAc,EAAE;IAAmB,CAAC;IAC/CC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;MACnBC,OAAO,EAAE,KAAK;MACdC,EAAE,EAAE,CAAC;MACLN,MAAM,EAAE,YAAY;MACpBO,MAAM,EAAE,CAACf,OAAO;IAClB,CAAC;EACH,CAAC,CAAC;EAEF,MAAMgB,IAAI,GAAI,MAAMV,QAAQ,CAACU,IAAI,CAAC,CAGjC;EACD,IAAIA,IAAI,CAACC,KAAK,EAAE,MAAM,IAAIZ,KAAK,CAACW,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC;EAEnD,OAAOF,IAAI,CAACG,MAAM,CAACC,KAAK,GAAG,UAAU,CAAC,CAAC;AACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAG3C,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;gBAEjD,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAOzC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqCjE,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAOxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE;IAO5C,qBAAqB,IAAI,cAAc;CAGxC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAG3C,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;gBAEjD,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAOzC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwCjE,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAOxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE;IAO5C,qBAAqB,IAAI,cAAc;CAGxC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validates if the given string is a Solana address.
3
+ * @param address The string to validate.
4
+ * @returns True if the address is valid, false otherwise.
5
+ */
6
+ export declare function isSolanaAddress(address: string): boolean;
7
+ /**
8
+ * Helper to fetch SOL balance using JSON-RPC
9
+ * @param rpcUrl Solana RPC endpoint
10
+ * @param address Solana public address (base58)
11
+ */
12
+ export declare function getSolanaBalance(rpcUrl: string, address: string): Promise<number>;
13
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBvF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reown/appkit-solana-react-native",
3
- "version": "0.0.0-feat-multichain-20250513175016",
3
+ "version": "0.0.0-feat-multichain-20250514142632",
4
4
  "main": "lib/commonjs/index.js",
5
5
  "types": "lib/typescript/index.d.ts",
6
6
  "module": "lib/module/index.js",
@@ -38,15 +38,7 @@
38
38
  "access": "public"
39
39
  },
40
40
  "dependencies": {
41
- "@reown/appkit-common-react-native": "0.0.0-feat-multichain-20250513175016",
42
- "@solana/web3.js": "1.98.2"
43
- },
44
- "peerDependencies": {
45
- "@solana/web3.js": ">=1.90.0",
46
- "bs58": ">=6.0.0"
47
- },
48
- "devDependencies": {
49
- "@solana/web3.js": "1.98.2"
41
+ "@reown/appkit-common-react-native": "0.0.0-feat-multichain-20250514142632"
50
42
  },
51
43
  "react-native": "src/index.tsx"
52
44
  }
package/src/adapter.ts CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  type GetBalanceParams,
7
7
  type GetBalanceResponse
8
8
  } from '@reown/appkit-common-react-native';
9
- import { Connection, PublicKey } from '@solana/web3.js';
9
+ import { getSolanaBalance } from './helpers';
10
10
 
11
11
  export class SolanaAdapter extends SolanaBaseAdapter {
12
12
  private static supportedNamespace: ChainNamespace = 'solana';
@@ -28,19 +28,22 @@ export class SolanaAdapter extends SolanaBaseAdapter {
28
28
  address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
29
29
 
30
30
  if (!balanceAddress) {
31
- return Promise.resolve({ amount: '0.00', symbol: 'SOL' });
31
+ return { amount: '0.00', symbol: 'SOL' };
32
32
  }
33
33
 
34
34
  try {
35
- const connection = new Connection(network?.rpcUrls?.default?.http?.[0] as string); //TODO: check connection settings
36
- const balanceAmount = await connection.getBalance(
37
- new PublicKey(balanceAddress.split(':')[2] as string)
38
- );
39
- const formattedBalance = (balanceAmount / 1000000000).toString(); //TODO: add util with LAMPORTS_PER_SOL
35
+ const rpcUrl = network.rpcUrls?.default?.http?.[0];
36
+ if (!rpcUrl) throw new Error('No RPC URL available');
37
+
38
+ const base58Address = balanceAddress.split(':')[2];
39
+
40
+ if (!base58Address) throw new Error('Invalid balance address');
41
+
42
+ const amount = await getSolanaBalance(rpcUrl, base58Address);
40
43
 
41
44
  const balance = {
42
- amount: formattedBalance,
43
- symbol: network?.nativeCurrency.symbol || 'SOL'
45
+ amount: amount.toString(),
46
+ symbol: network.nativeCurrency?.symbol ?? 'SOL'
44
47
  };
45
48
 
46
49
  this.emit('balanceChanged', {
@@ -78,7 +81,7 @@ export class SolanaAdapter extends SolanaBaseAdapter {
78
81
  }
79
82
 
80
83
  disconnect(): Promise<void> {
81
- if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
84
+ if (!this.connector) throw new Error('No active connector');
82
85
 
83
86
  return this.connector.disconnect();
84
87
  }
package/src/helpers.ts ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Validates if the given string is a Solana address.
3
+ * @param address The string to validate.
4
+ * @returns True if the address is valid, false otherwise.
5
+ */
6
+ export function isSolanaAddress(address: string): boolean {
7
+ const solanaAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
8
+
9
+ return solanaAddressRegex.test(address);
10
+ }
11
+
12
+ /**
13
+ * Helper to fetch SOL balance using JSON-RPC
14
+ * @param rpcUrl Solana RPC endpoint
15
+ * @param address Solana public address (base58)
16
+ */
17
+ export async function getSolanaBalance(rpcUrl: string, address: string): Promise<number> {
18
+ if (!isSolanaAddress(address)) {
19
+ throw new Error('Invalid Solana address format');
20
+ }
21
+
22
+ const response = await fetch(rpcUrl, {
23
+ method: 'POST',
24
+ headers: { 'Content-Type': 'application/json' },
25
+ body: JSON.stringify({
26
+ jsonrpc: '2.0',
27
+ id: 1,
28
+ method: 'getBalance',
29
+ params: [address]
30
+ })
31
+ });
32
+
33
+ const json = (await response.json()) as {
34
+ result: { value: number };
35
+ error?: { message: string };
36
+ };
37
+ if (json.error) throw new Error(json.error.message);
38
+
39
+ return json.result.value / 1000000000; // Convert lamports to SOL
40
+ }