@reown/appkit-solana-react-native 0.0.0-feat-multichain-20250513175016
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/adapter.js +86 -0
- package/lib/commonjs/adapter.js.map +1 -0
- package/lib/commonjs/index.js +13 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/adapter.js +79 -0
- package/lib/module/adapter.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -0
- package/lib/typescript/adapter.d.ts +14 -0
- package/lib/typescript/adapter.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/package.json +52 -0
- package/readme.md +9 -0
- package/src/adapter.ts +96 -0
- package/src/index.tsx +2 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SolanaAdapter = void 0;
|
|
7
|
+
var _appkitCommonReactNative = require("@reown/appkit-common-react-native");
|
|
8
|
+
var _web = require("@solana/web3.js");
|
|
9
|
+
class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
|
|
10
|
+
static supportedNamespace = 'solana';
|
|
11
|
+
constructor(configParams) {
|
|
12
|
+
super({
|
|
13
|
+
projectId: configParams.projectId,
|
|
14
|
+
supportedNamespace: SolanaAdapter.supportedNamespace
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async getBalance(params) {
|
|
18
|
+
const {
|
|
19
|
+
network,
|
|
20
|
+
address
|
|
21
|
+
} = params;
|
|
22
|
+
if (!this.connector) throw new Error('No active connector');
|
|
23
|
+
if (!network) throw new Error('No network provided');
|
|
24
|
+
const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
25
|
+
if (!balanceAddress) {
|
|
26
|
+
return Promise.resolve({
|
|
27
|
+
amount: '0.00',
|
|
28
|
+
symbol: 'SOL'
|
|
29
|
+
});
|
|
30
|
+
}
|
|
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
|
+
|
|
36
|
+
const balance = {
|
|
37
|
+
amount: formattedBalance,
|
|
38
|
+
symbol: network?.nativeCurrency.symbol || 'SOL'
|
|
39
|
+
};
|
|
40
|
+
this.emit('balanceChanged', {
|
|
41
|
+
namespace: this.getSupportedNamespace(),
|
|
42
|
+
address: balanceAddress,
|
|
43
|
+
balance
|
|
44
|
+
});
|
|
45
|
+
return balance;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
amount: '0.00',
|
|
49
|
+
symbol: 'SOL'
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async switchNetwork(network) {
|
|
54
|
+
if (!this.connector) throw new Error('No active connector');
|
|
55
|
+
const provider = this.connector.getProvider();
|
|
56
|
+
if (!provider) throw new Error('No active provider');
|
|
57
|
+
try {
|
|
58
|
+
await this.connector.switchNetwork(network);
|
|
59
|
+
return;
|
|
60
|
+
} catch (switchError) {
|
|
61
|
+
throw switchError;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
getAccounts() {
|
|
65
|
+
if (!this.connector) throw new Error('No active connector');
|
|
66
|
+
const namespaces = this.connector.getNamespaces();
|
|
67
|
+
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
68
|
+
}
|
|
69
|
+
disconnect() {
|
|
70
|
+
if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
|
|
71
|
+
return this.connector.disconnect();
|
|
72
|
+
}
|
|
73
|
+
async request(method, params) {
|
|
74
|
+
if (!this.connector) throw new Error('No active connector');
|
|
75
|
+
const provider = this.connector.getProvider();
|
|
76
|
+
return provider.request({
|
|
77
|
+
method,
|
|
78
|
+
params
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
getSupportedNamespace() {
|
|
82
|
+
return SolanaAdapter.supportedNamespace;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.SolanaAdapter = SolanaAdapter;
|
|
86
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +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":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAQA,IAAAC,IAAA,GAAAD,OAAA;AAEO,MAAME,aAAa,SAASC,0CAAiB,CAAC;EACnD,OAAeC,kBAAkB,GAAmB,QAAQ;EAE5DC,WAAWA,CAACC,YAAmC,EAAE;IAC/C,KAAK,CAAC;MACJC,SAAS,EAAED,YAAY,CAACC,SAAS;MACjCH,kBAAkB,EAAEF,aAAa,CAACE;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,IAAIC,eAAU,CAAChB,OAAO,EAAEiB,OAAO,EAAEC,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;MACnF,MAAMC,aAAa,GAAG,MAAML,UAAU,CAACjB,UAAU,CAC/C,IAAIuB,cAAS,CAACjB,cAAc,CAACkB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CACtD,CAAC;MACD,MAAMC,gBAAgB,GAAG,CAACH,aAAa,GAAG,UAAU,EAAEV,QAAQ,CAAC,CAAC,CAAC,CAAC;;MAElE,MAAMc,OAAO,GAAG;QACdX,MAAM,EAAEU,gBAAgB;QACxBT,MAAM,EAAEd,OAAO,EAAEyB,cAAc,CAACX,MAAM,IAAI;MAC5C,CAAC;MAED,IAAI,CAACY,IAAI,CAAC,gBAAgB,EAAE;QAC1BC,SAAS,EAAE,IAAI,CAACC,qBAAqB,CAAC,CAAC;QACvC3B,OAAO,EAAEG,cAAc;QACvBoB;MACF,CAAC,CAAC;MAEF,OAAOA,OAAO;IAChB,CAAC,CAAC,OAAOK,KAAK,EAAE;MACd,OAAO;QAAEhB,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;EACF;EAEA,MAAMgB,aAAaA,CAAC9B,OAAsB,EAAiB;IACzD,IAAI,CAAC,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,MAAM4B,QAAQ,GAAG,IAAI,CAAC7B,SAAS,CAAC8B,WAAW,CAAC,CAAC;IAC7C,IAAI,CAACD,QAAQ,EAAE,MAAM,IAAI5B,KAAK,CAAC,oBAAoB,CAAC;IAEpD,IAAI;MACF,MAAM,IAAI,CAACD,SAAS,CAAC4B,aAAa,CAAC9B,OAAO,CAAC;MAE3C;IACF,CAAC,CAAC,OAAOiC,WAAgB,EAAE;MACzB,MAAMA,WAAW;IACnB;EACF;EAEA5B,WAAWA,CAAA,EAA8B;IACvC,IAAI,CAAC,IAAI,CAACH,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAM+B,UAAU,GAAG,IAAI,CAAChC,SAAS,CAACiC,aAAa,CAAC,CAAC;IAEjD,OAAOD,UAAU,CAAC,IAAI,CAACN,qBAAqB,CAAC,CAAC,CAAC,EAAEQ,QAAQ;EAC3D;EAEAC,UAAUA,CAAA,EAAkB;IAC1B,IAAI,CAAC,IAAI,CAACnC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,gDAAgD,CAAC;IAEtF,OAAO,IAAI,CAACD,SAAS,CAACmC,UAAU,CAAC,CAAC;EACpC;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAExC,MAAc,EAAE;IAC5C,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAM4B,QAAQ,GAAG,IAAI,CAAC7B,SAAS,CAAC8B,WAAW,CAAC,CAAC;IAE7C,OAAOD,QAAQ,CAACO,OAAO,CAAC;MAAEC,MAAM;MAAExC;IAAO,CAAC,CAAC;EAC7C;EAEA6B,qBAAqBA,CAAA,EAAmB;IACtC,OAAOpC,aAAa,CAACE,kBAAkB;EACzC;AACF;AAAC8C,OAAA,CAAAhD,aAAA,GAAAA,aAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "SolanaAdapter", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _adapter.SolanaAdapter;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _adapter = require("./adapter");
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_adapter","require"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { SolanaBaseAdapter } from '@reown/appkit-common-react-native';
|
|
2
|
+
import { Connection, PublicKey } from '@solana/web3.js';
|
|
3
|
+
export class SolanaAdapter extends SolanaBaseAdapter {
|
|
4
|
+
static supportedNamespace = 'solana';
|
|
5
|
+
constructor(configParams) {
|
|
6
|
+
super({
|
|
7
|
+
projectId: configParams.projectId,
|
|
8
|
+
supportedNamespace: SolanaAdapter.supportedNamespace
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
async getBalance(params) {
|
|
12
|
+
const {
|
|
13
|
+
network,
|
|
14
|
+
address
|
|
15
|
+
} = params;
|
|
16
|
+
if (!this.connector) throw new Error('No active connector');
|
|
17
|
+
if (!network) throw new Error('No network provided');
|
|
18
|
+
const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
19
|
+
if (!balanceAddress) {
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
amount: '0.00',
|
|
22
|
+
symbol: 'SOL'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
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
|
+
|
|
30
|
+
const balance = {
|
|
31
|
+
amount: formattedBalance,
|
|
32
|
+
symbol: network?.nativeCurrency.symbol || 'SOL'
|
|
33
|
+
};
|
|
34
|
+
this.emit('balanceChanged', {
|
|
35
|
+
namespace: this.getSupportedNamespace(),
|
|
36
|
+
address: balanceAddress,
|
|
37
|
+
balance
|
|
38
|
+
});
|
|
39
|
+
return balance;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
return {
|
|
42
|
+
amount: '0.00',
|
|
43
|
+
symbol: 'SOL'
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async switchNetwork(network) {
|
|
48
|
+
if (!this.connector) throw new Error('No active connector');
|
|
49
|
+
const provider = this.connector.getProvider();
|
|
50
|
+
if (!provider) throw new Error('No active provider');
|
|
51
|
+
try {
|
|
52
|
+
await this.connector.switchNetwork(network);
|
|
53
|
+
return;
|
|
54
|
+
} catch (switchError) {
|
|
55
|
+
throw switchError;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
getAccounts() {
|
|
59
|
+
if (!this.connector) throw new Error('No active connector');
|
|
60
|
+
const namespaces = this.connector.getNamespaces();
|
|
61
|
+
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
62
|
+
}
|
|
63
|
+
disconnect() {
|
|
64
|
+
if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
|
|
65
|
+
return this.connector.disconnect();
|
|
66
|
+
}
|
|
67
|
+
async request(method, params) {
|
|
68
|
+
if (!this.connector) throw new Error('No active connector');
|
|
69
|
+
const provider = this.connector.getProvider();
|
|
70
|
+
return provider.request({
|
|
71
|
+
method,
|
|
72
|
+
params
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
getSupportedNamespace() {
|
|
76
|
+
return SolanaAdapter.supportedNamespace;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SolanaAdapter"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,QAAQ,WAAW;AACzC,SAASA,aAAa"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SolanaBaseAdapter, type AppKitNetwork, type CaipAddress, type ChainNamespace, type GetBalanceParams, type GetBalanceResponse } from '@reown/appkit-common-react-native';
|
|
2
|
+
export declare class SolanaAdapter extends SolanaBaseAdapter {
|
|
3
|
+
private static supportedNamespace;
|
|
4
|
+
constructor(configParams: {
|
|
5
|
+
projectId: string;
|
|
6
|
+
});
|
|
7
|
+
getBalance(params: GetBalanceParams): Promise<GetBalanceResponse>;
|
|
8
|
+
switchNetwork(network: AppKitNetwork): Promise<void>;
|
|
9
|
+
getAccounts(): CaipAddress[] | undefined;
|
|
10
|
+
disconnect(): Promise<void>;
|
|
11
|
+
request(method: string, params?: any[]): Promise<unknown>;
|
|
12
|
+
getSupportedNamespace(): ChainNamespace;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@reown/appkit-solana-react-native",
|
|
3
|
+
"version": "0.0.0-feat-multichain-20250513175016",
|
|
4
|
+
"main": "lib/commonjs/index.js",
|
|
5
|
+
"types": "lib/typescript/index.d.ts",
|
|
6
|
+
"module": "lib/module/index.js",
|
|
7
|
+
"source": "src/index.tsx",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "bob build",
|
|
10
|
+
"clean": "rm -rf lib",
|
|
11
|
+
"lint": "eslint . --ext .js,.jsx,.ts,.tsx"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"src",
|
|
15
|
+
"lib",
|
|
16
|
+
"!**/__tests__",
|
|
17
|
+
"!**/__fixtures__",
|
|
18
|
+
"!**/__mocks__"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"web3",
|
|
22
|
+
"crypto",
|
|
23
|
+
"solana",
|
|
24
|
+
"appkit",
|
|
25
|
+
"reown",
|
|
26
|
+
"walletconnect",
|
|
27
|
+
"react-native"
|
|
28
|
+
],
|
|
29
|
+
"repository": "https://github.com/reown-com/appkit-react-native",
|
|
30
|
+
"author": "Reown <support@reown.com> (https://reown.com)",
|
|
31
|
+
"homepage": "https://reown.com/appkit",
|
|
32
|
+
"license": "Apache-2.0",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/reown-com/appkit-react-native/issues"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"registry": "https://registry.npmjs.org/",
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
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"
|
|
50
|
+
},
|
|
51
|
+
"react-native": "src/index.tsx"
|
|
52
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#### 📚 [Documentation](https://docs.reown.com/appkit/react-native/core/installation)
|
|
2
|
+
|
|
3
|
+
#### 🔎 [Examples](https://github.com/reown-com/react-native-examples)
|
|
4
|
+
|
|
5
|
+
#### 🔗 [Website](https://reown.com/appkit)
|
|
6
|
+
|
|
7
|
+
# AppKit
|
|
8
|
+
|
|
9
|
+
Your on-ramp to web3 multichain. AppKit is a versatile library that makes it super easy to connect users with your Dapp and start interacting with the blockchain.
|
package/src/adapter.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SolanaBaseAdapter,
|
|
3
|
+
type AppKitNetwork,
|
|
4
|
+
type CaipAddress,
|
|
5
|
+
type ChainNamespace,
|
|
6
|
+
type GetBalanceParams,
|
|
7
|
+
type GetBalanceResponse
|
|
8
|
+
} from '@reown/appkit-common-react-native';
|
|
9
|
+
import { Connection, PublicKey } from '@solana/web3.js';
|
|
10
|
+
|
|
11
|
+
export class SolanaAdapter extends SolanaBaseAdapter {
|
|
12
|
+
private static supportedNamespace: ChainNamespace = 'solana';
|
|
13
|
+
|
|
14
|
+
constructor(configParams: { projectId: string }) {
|
|
15
|
+
super({
|
|
16
|
+
projectId: configParams.projectId,
|
|
17
|
+
supportedNamespace: SolanaAdapter.supportedNamespace
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async getBalance(params: GetBalanceParams): Promise<GetBalanceResponse> {
|
|
22
|
+
const { network, address } = params;
|
|
23
|
+
|
|
24
|
+
if (!this.connector) throw new Error('No active connector');
|
|
25
|
+
if (!network) throw new Error('No network provided');
|
|
26
|
+
|
|
27
|
+
const balanceAddress =
|
|
28
|
+
address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
29
|
+
|
|
30
|
+
if (!balanceAddress) {
|
|
31
|
+
return Promise.resolve({ amount: '0.00', symbol: 'SOL' });
|
|
32
|
+
}
|
|
33
|
+
|
|
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
|
|
40
|
+
|
|
41
|
+
const balance = {
|
|
42
|
+
amount: formattedBalance,
|
|
43
|
+
symbol: network?.nativeCurrency.symbol || 'SOL'
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
this.emit('balanceChanged', {
|
|
47
|
+
namespace: this.getSupportedNamespace(),
|
|
48
|
+
address: balanceAddress,
|
|
49
|
+
balance
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return balance;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return { amount: '0.00', symbol: 'SOL' };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async switchNetwork(network: AppKitNetwork): Promise<void> {
|
|
59
|
+
if (!this.connector) throw new Error('No active connector');
|
|
60
|
+
|
|
61
|
+
const provider = this.connector.getProvider();
|
|
62
|
+
if (!provider) throw new Error('No active provider');
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
await this.connector.switchNetwork(network);
|
|
66
|
+
|
|
67
|
+
return;
|
|
68
|
+
} catch (switchError: any) {
|
|
69
|
+
throw switchError;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
getAccounts(): CaipAddress[] | undefined {
|
|
74
|
+
if (!this.connector) throw new Error('No active connector');
|
|
75
|
+
const namespaces = this.connector.getNamespaces();
|
|
76
|
+
|
|
77
|
+
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
disconnect(): Promise<void> {
|
|
81
|
+
if (!this.connector) throw new Error('SolanaAdapter:disconnect - No active connector');
|
|
82
|
+
|
|
83
|
+
return this.connector.disconnect();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async request(method: string, params?: any[]) {
|
|
87
|
+
if (!this.connector) throw new Error('No active connector');
|
|
88
|
+
const provider = this.connector.getProvider();
|
|
89
|
+
|
|
90
|
+
return provider.request({ method, params });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
getSupportedNamespace(): ChainNamespace {
|
|
94
|
+
return SolanaAdapter.supportedNamespace;
|
|
95
|
+
}
|
|
96
|
+
}
|
package/src/index.tsx
ADDED