@reown/appkit-coinbase-react-native 0.0.1 → 2.0.0-alpha.2
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/connectors/CoinbaseConnector.js +11 -10
- package/lib/commonjs/connectors/CoinbaseConnector.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/providers/CoinbaseProvider.js +30 -3
- package/lib/commonjs/providers/CoinbaseProvider.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils.js +0 -14
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/connectors/CoinbaseConnector.js +15 -12
- package/lib/module/connectors/CoinbaseConnector.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/providers/CoinbaseProvider.js +32 -3
- package/lib/module/providers/CoinbaseProvider.js.map +1 -1
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils.js +2 -12
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/connectors/CoinbaseConnector.d.ts +1 -1
- package/lib/typescript/connectors/CoinbaseConnector.d.ts.map +1 -1
- package/lib/typescript/providers/CoinbaseProvider.d.ts +3 -1
- package/lib/typescript/providers/CoinbaseProvider.d.ts.map +1 -1
- package/lib/typescript/utils.d.ts +0 -2
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +8 -20
- package/src/connectors/CoinbaseConnector.ts +16 -13
- package/src/providers/CoinbaseProvider.ts +40 -3
- package/src/utils.ts +0 -15
|
@@ -14,16 +14,17 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
14
14
|
super({
|
|
15
15
|
type: 'coinbase'
|
|
16
16
|
});
|
|
17
|
-
this.config = config;
|
|
17
|
+
this.config = config ?? {};
|
|
18
18
|
}
|
|
19
19
|
async init(ops) {
|
|
20
20
|
super.init(ops);
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const redirect = ops.metadata.redirect?.universal ?? ops.metadata.redirect?.native;
|
|
22
|
+
if (!redirect) {
|
|
23
|
+
throw new Error('CoinbaseConnector: Redirect link not found in metadata');
|
|
23
24
|
}
|
|
24
25
|
this.provider = new _CoinbaseProvider.CoinbaseProvider({
|
|
25
|
-
redirect
|
|
26
|
-
// use config storage
|
|
26
|
+
redirect,
|
|
27
|
+
// use config storage, as it needs to be mmkv-compatible
|
|
27
28
|
storage: this.config.storage
|
|
28
29
|
});
|
|
29
30
|
await this.restoreSession();
|
|
@@ -53,7 +54,7 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
53
54
|
}
|
|
54
55
|
getChainId() {
|
|
55
56
|
const hexChainId = this.getProvider().getChainId();
|
|
56
|
-
const chainId =
|
|
57
|
+
const chainId = _appkitCommonReactNative.StringUtil.hexToString(hexChainId);
|
|
57
58
|
return `${CoinbaseConnector.SUPPORTED_NAMESPACE}:${chainId}`;
|
|
58
59
|
}
|
|
59
60
|
getWalletInfo() {
|
|
@@ -69,7 +70,7 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
69
70
|
}
|
|
70
71
|
async switchNetwork(network) {
|
|
71
72
|
const provider = this.getProvider();
|
|
72
|
-
const chainId_ =
|
|
73
|
+
const chainId_ = _appkitCommonReactNative.NumberUtil.convertNumericToHexString(network.id);
|
|
73
74
|
try {
|
|
74
75
|
await provider.request({
|
|
75
76
|
method: 'wallet_switchEthereumChain',
|
|
@@ -106,9 +107,9 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
106
107
|
}
|
|
107
108
|
saveSession(namespaces) {
|
|
108
109
|
const storage = this.getStorage();
|
|
109
|
-
storage.setItem(SESSION_KEY,
|
|
110
|
+
storage.setItem(SESSION_KEY, {
|
|
110
111
|
namespaces
|
|
111
|
-
})
|
|
112
|
+
});
|
|
112
113
|
}
|
|
113
114
|
async restoreSession() {
|
|
114
115
|
const storage = this.getStorage();
|
|
@@ -118,7 +119,7 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
118
119
|
}
|
|
119
120
|
const {
|
|
120
121
|
namespaces
|
|
121
|
-
} =
|
|
122
|
+
} = session;
|
|
122
123
|
this.namespaces = namespaces;
|
|
123
124
|
return true;
|
|
124
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_appkitCommonReactNative","require","_utils","_CoinbaseProvider","SESSION_KEY","CoinbaseConnector","WalletConnector","SUPPORTED_NAMESPACE","constructor","config","type","init","ops","
|
|
1
|
+
{"version":3,"names":["_appkitCommonReactNative","require","_utils","_CoinbaseProvider","SESSION_KEY","CoinbaseConnector","WalletConnector","SUPPORTED_NAMESPACE","constructor","config","type","init","ops","redirect","metadata","universal","native","Error","provider","CoinbaseProvider","storage","restoreSession","connect","opts","accounts","getProvider","namespaces","getCoinbaseNamespace","saveSession","disconnect","deleteSession","getNamespaces","getChainId","hexChainId","chainId","StringUtil","hexToString","getWalletInfo","name","description","url","getProperties","undefined","switchNetwork","network","chainId_","NumberUtil","convertNumericToHexString","id","request","method","params","error","code","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","e","console","warn","getStorage","removeItem","setItem","session","getItem","exports"],"sourceRoot":"../../../src","sources":["connectors/CoinbaseConnector.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_CoinbaseConnector","require"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA"}
|
|
1
|
+
{"version":3,"names":["_CoinbaseConnector","require"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -5,10 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.CoinbaseProvider = void 0;
|
|
7
7
|
var _events = _interopRequireDefault(require("events"));
|
|
8
|
+
var _appkitCommonReactNative = require("@reown/appkit-common-react-native");
|
|
8
9
|
var _walletMobileSdk = require("@coinbase/wallet-mobile-sdk");
|
|
9
10
|
var _utils = require("../utils");
|
|
10
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
12
|
class CoinbaseProvider extends _events.default {
|
|
13
|
+
chainChangedListeners = new Map();
|
|
12
14
|
constructor(config) {
|
|
13
15
|
super();
|
|
14
16
|
this.config = config;
|
|
@@ -37,9 +39,6 @@ class CoinbaseProvider extends _events.default {
|
|
|
37
39
|
} else {
|
|
38
40
|
accounts = this.provider.selectedAddress ? [this.provider.selectedAddress] : [];
|
|
39
41
|
}
|
|
40
|
-
|
|
41
|
-
//TODO: check switch chain
|
|
42
|
-
|
|
43
42
|
return accounts;
|
|
44
43
|
} catch (error) {
|
|
45
44
|
console.warn('CoinbaseProvider: connect error', error);
|
|
@@ -59,10 +58,38 @@ class CoinbaseProvider extends _events.default {
|
|
|
59
58
|
getChainId() {
|
|
60
59
|
return this.provider.chainId;
|
|
61
60
|
}
|
|
61
|
+
onChainChanged(hexChainId) {
|
|
62
|
+
const chainId = _appkitCommonReactNative.StringUtil.hexToString(hexChainId);
|
|
63
|
+
this.emit('chainChanged', {
|
|
64
|
+
chainId
|
|
65
|
+
});
|
|
66
|
+
}
|
|
62
67
|
on(event, listener) {
|
|
68
|
+
if (event === 'chainChanged') {
|
|
69
|
+
// Create middleware that formats the chain ID before calling the original listener
|
|
70
|
+
const chainChangedMiddleware = hexChainId => {
|
|
71
|
+
const chainId = _appkitCommonReactNative.StringUtil.hexToString(hexChainId);
|
|
72
|
+
listener(chainId);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Store the mapping between original listener and middleware
|
|
76
|
+
this.chainChangedListeners.set(listener, chainChangedMiddleware);
|
|
77
|
+
return this.provider.on('chainChanged', chainChangedMiddleware);
|
|
78
|
+
}
|
|
63
79
|
return this.provider.on(event, listener);
|
|
64
80
|
}
|
|
65
81
|
off(event, listener) {
|
|
82
|
+
if (event === 'chainChanged') {
|
|
83
|
+
// Get the middleware wrapper for this listener
|
|
84
|
+
const middleware = this.chainChangedListeners.get(listener);
|
|
85
|
+
if (middleware) {
|
|
86
|
+
// Remove the middleware from the provider
|
|
87
|
+
this.provider.off('chainChanged', middleware);
|
|
88
|
+
// Remove the mapping
|
|
89
|
+
this.chainChangedListeners.delete(listener);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
66
93
|
return this.provider.off(event, listener);
|
|
67
94
|
}
|
|
68
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_walletMobileSdk","_utils","e","__esModule","default","CoinbaseProvider","EventEmitter","constructor","config","configure","hostURL","URL","callbackURL","redirect","hostPackageName","provider","WalletMobileSDKEVMProvider","jsonRpcUrl","rpcUrl","chainId","defaultChain","storage","connect","accounts","isConnected","connected","request","method","params","selectedAddress","error","console","warn","disconnect","Promise","resolve","args","isValidMethod","Error","getChainId","on","event","listener","off","exports"],"sourceRoot":"../../../src","sources":["providers/CoinbaseProvider.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_appkitCommonReactNative","_walletMobileSdk","_utils","e","__esModule","default","CoinbaseProvider","EventEmitter","chainChangedListeners","Map","constructor","config","configure","hostURL","URL","callbackURL","redirect","hostPackageName","provider","WalletMobileSDKEVMProvider","jsonRpcUrl","rpcUrl","chainId","defaultChain","storage","connect","accounts","isConnected","connected","request","method","params","selectedAddress","error","console","warn","disconnect","Promise","resolve","args","isValidMethod","Error","getChainId","onChainChanged","hexChainId","StringUtil","hexToString","emit","on","event","listener","chainChangedMiddleware","set","off","middleware","get","delete","exports"],"sourceRoot":"../../../src","sources":["providers/CoinbaseProvider.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
package/lib/commonjs/utils.js
CHANGED
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.COINBASE_METHODS = void 0;
|
|
7
7
|
exports.getCoinbaseNamespace = getCoinbaseNamespace;
|
|
8
|
-
exports.hexToString = hexToString;
|
|
9
8
|
exports.isValidMethod = isValidMethod;
|
|
10
|
-
exports.numberToHex = numberToHex;
|
|
11
9
|
const COINBASE_METHODS = exports.COINBASE_METHODS = {
|
|
12
10
|
REQUEST_ACCOUNTS: 'eth_requestAccounts',
|
|
13
11
|
SIGN_TRANSACTION: 'eth_signTransaction',
|
|
@@ -44,16 +42,4 @@ function getCoinbaseNamespace(namespaces, accounts) {
|
|
|
44
42
|
}
|
|
45
43
|
};
|
|
46
44
|
}
|
|
47
|
-
function numberToHex(value) {
|
|
48
|
-
// Convert string to number first, then to hex
|
|
49
|
-
const num = typeof value === 'string' ? parseInt(value, 10) : value;
|
|
50
|
-
return `0x${num.toString(16)}`;
|
|
51
|
-
}
|
|
52
|
-
function hexToString(hexValue) {
|
|
53
|
-
// Remove 0x prefix if present
|
|
54
|
-
const cleanHex = hexValue.startsWith('0x') ? hexValue.slice(2) : hexValue;
|
|
55
|
-
// Convert hex to decimal number, then to string
|
|
56
|
-
|
|
57
|
-
return parseInt(cleanHex, 16).toString();
|
|
58
|
-
}
|
|
59
45
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["COINBASE_METHODS","exports","REQUEST_ACCOUNTS","SIGN_TRANSACTION","SEND_TRANSACTION","SIGN_MESSAGE","SIGN_TYPED_DATA_V3","SIGN_TYPED_DATA_V4","SWITCH_CHAIN","ADD_ETHEREUM_CHAIN","WATCH_ASSET","isValidMethod","method","Object","values","includes","getCoinbaseNamespace","namespaces","accounts","Error","namespace","caipAddresses","account","chains","forEach","chain","push","methods"
|
|
1
|
+
{"version":3,"names":["COINBASE_METHODS","exports","REQUEST_ACCOUNTS","SIGN_TRANSACTION","SEND_TRANSACTION","SIGN_MESSAGE","SIGN_TYPED_DATA_V3","SIGN_TYPED_DATA_V4","SWITCH_CHAIN","ADD_ETHEREUM_CHAIN","WATCH_ASSET","isValidMethod","method","Object","values","includes","getCoinbaseNamespace","namespaces","accounts","Error","namespace","caipAddresses","account","chains","forEach","chain","push","methods"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":";;;;;;;;AAOO,MAAMA,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EAC9BE,gBAAgB,EAAE,qBAAqB;EACvCC,gBAAgB,EAAE,qBAAqB;EACvCC,gBAAgB,EAAE,qBAAqB;EACvCC,YAAY,EAAE,eAAe;EAC7BC,kBAAkB,EAAE,sBAAsB;EAC1CC,kBAAkB,EAAE,sBAAsB;EAC1CC,YAAY,EAAE,4BAA4B;EAC1CC,kBAAkB,EAAE,yBAAyB;EAC7CC,WAAW,EAAE;AACf,CAAU;AAEH,SAASC,aAAaA,CAACC,MAAc,EAA4B;EACtE,OAAOC,MAAM,CAACC,MAAM,CAACd,gBAAgB,CAAC,CAACe,QAAQ,CAACH,MAAwB,CAAC;AAC3E;AAEO,SAASI,oBAAoBA,CAClCC,UAA+B,EAC/BC,QAAmB,EACP;EACZ,IAAI,CAACD,UAAU,IAAI,CAACC,QAAQ,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EACxE;EAEA,MAAMC,SAAS,GAAGH,UAAU,CAAC,QAAQ,CAAC;EAEtC,IAAI,CAACG,SAAS,EAAE;IACd,MAAM,IAAID,KAAK,CAAC,wCAAwC,CAAC;EAC3D;EAEA,IAAIE,aAA4B,GAAG,EAAE;EAErC,KAAK,MAAMC,OAAO,IAAIJ,QAAQ,EAAE;IAC9BE,SAAS,CAACG,MAAM,EAAEC,OAAO,CAACC,KAAK,IAAI;MACjCJ,aAAa,CAACK,IAAI,CAAC,GAAGD,KAAK,IAAIH,OAAO,EAAE,CAAC;IAC3C,CAAC,CAAC;EACJ;EAEA,OAAO;IACL,CAAC,QAAQ,GAAG;MACV,GAAGF,SAAS;MACZO,OAAO,EAAEd,MAAM,CAACC,MAAM,CAACd,gBAAgB,CAAC;MACxCkB,QAAQ,EAAEG;IACZ;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { WalletConnector, NumberUtil, StringUtil } from '@reown/appkit-common-react-native';
|
|
4
|
+
import { getCoinbaseNamespace } from '../utils';
|
|
3
5
|
import { CoinbaseProvider } from '../providers/CoinbaseProvider';
|
|
4
6
|
const SESSION_KEY = '@appkit/coinbase-connector/session';
|
|
5
7
|
export class CoinbaseConnector extends WalletConnector {
|
|
@@ -8,16 +10,17 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
8
10
|
super({
|
|
9
11
|
type: 'coinbase'
|
|
10
12
|
});
|
|
11
|
-
this.config = config;
|
|
13
|
+
this.config = config ?? {};
|
|
12
14
|
}
|
|
13
15
|
async init(ops) {
|
|
14
16
|
super.init(ops);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
const redirect = ops.metadata.redirect?.universal ?? ops.metadata.redirect?.native;
|
|
18
|
+
if (!redirect) {
|
|
19
|
+
throw new Error('CoinbaseConnector: Redirect link not found in metadata');
|
|
17
20
|
}
|
|
18
21
|
this.provider = new CoinbaseProvider({
|
|
19
|
-
redirect
|
|
20
|
-
// use config storage
|
|
22
|
+
redirect,
|
|
23
|
+
// use config storage, as it needs to be mmkv-compatible
|
|
21
24
|
storage: this.config.storage
|
|
22
25
|
});
|
|
23
26
|
await this.restoreSession();
|
|
@@ -47,7 +50,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
47
50
|
}
|
|
48
51
|
getChainId() {
|
|
49
52
|
const hexChainId = this.getProvider().getChainId();
|
|
50
|
-
const chainId = hexToString(hexChainId);
|
|
53
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
51
54
|
return `${CoinbaseConnector.SUPPORTED_NAMESPACE}:${chainId}`;
|
|
52
55
|
}
|
|
53
56
|
getWalletInfo() {
|
|
@@ -63,7 +66,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
63
66
|
}
|
|
64
67
|
async switchNetwork(network) {
|
|
65
68
|
const provider = this.getProvider();
|
|
66
|
-
const chainId_ =
|
|
69
|
+
const chainId_ = NumberUtil.convertNumericToHexString(network.id);
|
|
67
70
|
try {
|
|
68
71
|
await provider.request({
|
|
69
72
|
method: 'wallet_switchEthereumChain',
|
|
@@ -100,9 +103,9 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
100
103
|
}
|
|
101
104
|
saveSession(namespaces) {
|
|
102
105
|
const storage = this.getStorage();
|
|
103
|
-
storage.setItem(SESSION_KEY,
|
|
106
|
+
storage.setItem(SESSION_KEY, {
|
|
104
107
|
namespaces
|
|
105
|
-
})
|
|
108
|
+
});
|
|
106
109
|
}
|
|
107
110
|
async restoreSession() {
|
|
108
111
|
const storage = this.getStorage();
|
|
@@ -112,7 +115,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
112
115
|
}
|
|
113
116
|
const {
|
|
114
117
|
namespaces
|
|
115
|
-
} =
|
|
118
|
+
} = session;
|
|
116
119
|
this.namespaces = namespaces;
|
|
117
120
|
return true;
|
|
118
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WalletConnector","
|
|
1
|
+
{"version":3,"names":["WalletConnector","NumberUtil","StringUtil","getCoinbaseNamespace","CoinbaseProvider","SESSION_KEY","CoinbaseConnector","SUPPORTED_NAMESPACE","constructor","config","type","init","ops","redirect","metadata","universal","native","Error","provider","storage","restoreSession","connect","opts","accounts","getProvider","namespaces","saveSession","disconnect","deleteSession","getNamespaces","getChainId","hexChainId","chainId","hexToString","getWalletInfo","name","description","url","getProperties","undefined","switchNetwork","network","chainId_","convertNumericToHexString","id","request","method","params","error","code","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","e","console","warn","getStorage","removeItem","setItem","session","getItem"],"sourceRoot":"../../../src","sources":["connectors/CoinbaseConnector.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CoinbaseConnector"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,gCAAgC"}
|
|
1
|
+
{"version":3,"names":["CoinbaseConnector"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,gCAAgC","ignoreList":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import EventEmitter from 'events';
|
|
4
|
+
import { StringUtil } from '@reown/appkit-common-react-native';
|
|
2
5
|
import { configure, WalletMobileSDKEVMProvider } from '@coinbase/wallet-mobile-sdk';
|
|
3
6
|
import { isValidMethod } from '../utils';
|
|
4
7
|
export class CoinbaseProvider extends EventEmitter {
|
|
8
|
+
chainChangedListeners = new Map();
|
|
5
9
|
constructor(config) {
|
|
6
10
|
super();
|
|
7
11
|
this.config = config;
|
|
@@ -30,9 +34,6 @@ export class CoinbaseProvider extends EventEmitter {
|
|
|
30
34
|
} else {
|
|
31
35
|
accounts = this.provider.selectedAddress ? [this.provider.selectedAddress] : [];
|
|
32
36
|
}
|
|
33
|
-
|
|
34
|
-
//TODO: check switch chain
|
|
35
|
-
|
|
36
37
|
return accounts;
|
|
37
38
|
} catch (error) {
|
|
38
39
|
console.warn('CoinbaseProvider: connect error', error);
|
|
@@ -52,10 +53,38 @@ export class CoinbaseProvider extends EventEmitter {
|
|
|
52
53
|
getChainId() {
|
|
53
54
|
return this.provider.chainId;
|
|
54
55
|
}
|
|
56
|
+
onChainChanged(hexChainId) {
|
|
57
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
58
|
+
this.emit('chainChanged', {
|
|
59
|
+
chainId
|
|
60
|
+
});
|
|
61
|
+
}
|
|
55
62
|
on(event, listener) {
|
|
63
|
+
if (event === 'chainChanged') {
|
|
64
|
+
// Create middleware that formats the chain ID before calling the original listener
|
|
65
|
+
const chainChangedMiddleware = hexChainId => {
|
|
66
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
67
|
+
listener(chainId);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Store the mapping between original listener and middleware
|
|
71
|
+
this.chainChangedListeners.set(listener, chainChangedMiddleware);
|
|
72
|
+
return this.provider.on('chainChanged', chainChangedMiddleware);
|
|
73
|
+
}
|
|
56
74
|
return this.provider.on(event, listener);
|
|
57
75
|
}
|
|
58
76
|
off(event, listener) {
|
|
77
|
+
if (event === 'chainChanged') {
|
|
78
|
+
// Get the middleware wrapper for this listener
|
|
79
|
+
const middleware = this.chainChangedListeners.get(listener);
|
|
80
|
+
if (middleware) {
|
|
81
|
+
// Remove the middleware from the provider
|
|
82
|
+
this.provider.off('chainChanged', middleware);
|
|
83
|
+
// Remove the mapping
|
|
84
|
+
this.chainChangedListeners.delete(listener);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
59
88
|
return this.provider.off(event, listener);
|
|
60
89
|
}
|
|
61
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EventEmitter","configure","WalletMobileSDKEVMProvider","isValidMethod","CoinbaseProvider","constructor","config","hostURL","URL","callbackURL","redirect","hostPackageName","provider","jsonRpcUrl","rpcUrl","chainId","defaultChain","storage","connect","accounts","isConnected","connected","request","method","params","selectedAddress","error","console","warn","disconnect","Promise","resolve","args","Error","getChainId","on","event","listener","off"],"sourceRoot":"../../../src","sources":["providers/CoinbaseProvider.ts"],"mappings":"AAAA,OAAOA,YAAY,MAAM,QAAQ;
|
|
1
|
+
{"version":3,"names":["EventEmitter","StringUtil","configure","WalletMobileSDKEVMProvider","isValidMethod","CoinbaseProvider","chainChangedListeners","Map","constructor","config","hostURL","URL","callbackURL","redirect","hostPackageName","provider","jsonRpcUrl","rpcUrl","chainId","defaultChain","storage","connect","accounts","isConnected","connected","request","method","params","selectedAddress","error","console","warn","disconnect","Promise","resolve","args","Error","getChainId","onChainChanged","hexChainId","hexToString","emit","on","event","listener","chainChangedMiddleware","set","off","middleware","get","delete"],"sourceRoot":"../../../src","sources":["providers/CoinbaseProvider.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/types.js
CHANGED
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
package/lib/module/utils.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
export const COINBASE_METHODS = {
|
|
2
4
|
REQUEST_ACCOUNTS: 'eth_requestAccounts',
|
|
3
5
|
SIGN_TRANSACTION: 'eth_signTransaction',
|
|
@@ -34,16 +36,4 @@ export function getCoinbaseNamespace(namespaces, accounts) {
|
|
|
34
36
|
}
|
|
35
37
|
};
|
|
36
38
|
}
|
|
37
|
-
export function numberToHex(value) {
|
|
38
|
-
// Convert string to number first, then to hex
|
|
39
|
-
const num = typeof value === 'string' ? parseInt(value, 10) : value;
|
|
40
|
-
return `0x${num.toString(16)}`;
|
|
41
|
-
}
|
|
42
|
-
export function hexToString(hexValue) {
|
|
43
|
-
// Remove 0x prefix if present
|
|
44
|
-
const cleanHex = hexValue.startsWith('0x') ? hexValue.slice(2) : hexValue;
|
|
45
|
-
// Convert hex to decimal number, then to string
|
|
46
|
-
|
|
47
|
-
return parseInt(cleanHex, 16).toString();
|
|
48
|
-
}
|
|
49
39
|
//# sourceMappingURL=utils.js.map
|
package/lib/module/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["COINBASE_METHODS","REQUEST_ACCOUNTS","SIGN_TRANSACTION","SEND_TRANSACTION","SIGN_MESSAGE","SIGN_TYPED_DATA_V3","SIGN_TYPED_DATA_V4","SWITCH_CHAIN","ADD_ETHEREUM_CHAIN","WATCH_ASSET","isValidMethod","method","Object","values","includes","getCoinbaseNamespace","namespaces","accounts","Error","namespace","caipAddresses","account","chains","forEach","chain","push","methods"
|
|
1
|
+
{"version":3,"names":["COINBASE_METHODS","REQUEST_ACCOUNTS","SIGN_TRANSACTION","SEND_TRANSACTION","SIGN_MESSAGE","SIGN_TYPED_DATA_V3","SIGN_TYPED_DATA_V4","SWITCH_CHAIN","ADD_ETHEREUM_CHAIN","WATCH_ASSET","isValidMethod","method","Object","values","includes","getCoinbaseNamespace","namespaces","accounts","Error","namespace","caipAddresses","account","chains","forEach","chain","push","methods"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":";;AAOA,OAAO,MAAMA,gBAAgB,GAAG;EAC9BC,gBAAgB,EAAE,qBAAqB;EACvCC,gBAAgB,EAAE,qBAAqB;EACvCC,gBAAgB,EAAE,qBAAqB;EACvCC,YAAY,EAAE,eAAe;EAC7BC,kBAAkB,EAAE,sBAAsB;EAC1CC,kBAAkB,EAAE,sBAAsB;EAC1CC,YAAY,EAAE,4BAA4B;EAC1CC,kBAAkB,EAAE,yBAAyB;EAC7CC,WAAW,EAAE;AACf,CAAU;AAEV,OAAO,SAASC,aAAaA,CAACC,MAAc,EAA4B;EACtE,OAAOC,MAAM,CAACC,MAAM,CAACb,gBAAgB,CAAC,CAACc,QAAQ,CAACH,MAAwB,CAAC;AAC3E;AAEA,OAAO,SAASI,oBAAoBA,CAClCC,UAA+B,EAC/BC,QAAmB,EACP;EACZ,IAAI,CAACD,UAAU,IAAI,CAACC,QAAQ,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EACxE;EAEA,MAAMC,SAAS,GAAGH,UAAU,CAAC,QAAQ,CAAC;EAEtC,IAAI,CAACG,SAAS,EAAE;IACd,MAAM,IAAID,KAAK,CAAC,wCAAwC,CAAC;EAC3D;EAEA,IAAIE,aAA4B,GAAG,EAAE;EAErC,KAAK,MAAMC,OAAO,IAAIJ,QAAQ,EAAE;IAC9BE,SAAS,CAACG,MAAM,EAAEC,OAAO,CAACC,KAAK,IAAI;MACjCJ,aAAa,CAACK,IAAI,CAAC,GAAGD,KAAK,IAAIH,OAAO,EAAE,CAAC;IAC3C,CAAC,CAAC;EACJ;EAEA,OAAO;IACL,CAAC,QAAQ,GAAG;MACV,GAAGF,SAAS;MACZO,OAAO,EAAEd,MAAM,CAACC,MAAM,CAACb,gBAAgB,CAAC;MACxCiB,QAAQ,EAAEG;IACZ;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ import type { CoinbaseConnectorConfig } from '../types';
|
|
|
4
4
|
export declare class CoinbaseConnector extends WalletConnector {
|
|
5
5
|
private static readonly SUPPORTED_NAMESPACE;
|
|
6
6
|
private config;
|
|
7
|
-
constructor(config
|
|
7
|
+
constructor(config?: CoinbaseConnectorConfig);
|
|
8
8
|
init(ops: ConnectorInitOptions): Promise<void>;
|
|
9
9
|
connect(opts?: ConnectOptions): Promise<Namespaces | undefined>;
|
|
10
10
|
disconnect(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinbaseConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/CoinbaseConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"CoinbaseConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/CoinbaseConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,UAAU,EAIhB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAmB,MAAM,UAAU,CAAC;AAIzE,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAA4B;IACvE,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,CAAC,EAAE,uBAAuB;IAK7B,IAAI,CAAC,GAAG,EAAE,oBAAoB;IAiB9B,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAU/D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,WAAW,IAAI,gBAAgB;IAQ/B,aAAa,IAAI,UAAU;IAQ3B,UAAU,IAAI,aAAa,GAAG,SAAS;IAOvC,aAAa,IAAI,UAAU,GAAG,SAAS;IASvC,aAAa,IAAI,oBAAoB,GAAG,SAAS;IAI3C,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCnE,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IAKJ,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAajD,OAAO,CAAC,UAAU;CAOnB"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import EventEmitter from 'events';
|
|
3
|
-
import type
|
|
3
|
+
import { type Provider, type RequestArguments } from '@reown/appkit-common-react-native';
|
|
4
4
|
import type { CoinbaseProviderConfig } from '../types';
|
|
5
5
|
export declare class CoinbaseProvider extends EventEmitter implements Provider {
|
|
6
6
|
private readonly config;
|
|
7
7
|
private provider;
|
|
8
|
+
private chainChangedListeners;
|
|
8
9
|
constructor(config: CoinbaseProviderConfig);
|
|
9
10
|
connect<T = string[]>(): Promise<T>;
|
|
10
11
|
disconnect(): Promise<void>;
|
|
11
12
|
request<T = unknown>(args: RequestArguments): Promise<T>;
|
|
12
13
|
getChainId(): `0x${string}`;
|
|
14
|
+
onChainChanged(hexChainId: `0x${string}`): void;
|
|
13
15
|
on(event: string, listener: (args?: any) => void): any;
|
|
14
16
|
off(event: string, listener: (args?: any) => void): any;
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinbaseProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/CoinbaseProvider.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"CoinbaseProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/CoinbaseProvider.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EAEtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,QAAQ;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,qBAAqB,CAGzB;gBAEQ,MAAM,EAAE,sBAAsB;IAgBpC,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC;IAqBnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAQxD,UAAU,IAAI,KAAK,MAAM,EAAE;IAI3B,cAAc,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI;IAKtC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG;IAiBtD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG;CAgBjE"}
|
|
@@ -13,6 +13,4 @@ export declare const COINBASE_METHODS: {
|
|
|
13
13
|
};
|
|
14
14
|
export declare function isValidMethod(method: string): method is CoinbaseMethod;
|
|
15
15
|
export declare function getCoinbaseNamespace(namespaces?: ProposalNamespaces, accounts?: string[]): Namespaces;
|
|
16
|
-
export declare function numberToHex(value: string | number): string;
|
|
17
|
-
export declare function hexToString(hexValue: string): string;
|
|
18
16
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EACV,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,cAAc,CAEtE;AAED,wBAAgB,oBAAoB,CAClC,UAAU,CAAC,EAAE,kBAAkB,EAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,UAAU,CA0BZ
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EACV,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,cAAc,CAEtE;AAED,wBAAgB,oBAAoB,CAClC,UAAU,CAAC,EAAE,kBAAkB,EAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,UAAU,CA0BZ"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reown/appkit-coinbase-react-native",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "2.0.0-alpha.2",
|
|
4
4
|
"main": "lib/commonjs/index.js",
|
|
5
5
|
"types": "lib/typescript/index.d.ts",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
7
|
+
"react-native": "src/index.ts",
|
|
7
8
|
"source": "src/index.ts",
|
|
8
9
|
"scripts": {
|
|
9
10
|
"build": "bob build",
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"coinbase"
|
|
25
26
|
],
|
|
26
27
|
"repository": "https://github.com/reown-com/appkit-react-native",
|
|
27
|
-
"author": "Reown
|
|
28
|
+
"author": "Reown (https://discord.gg/reown)",
|
|
28
29
|
"homepage": "https://reown.com/appkit",
|
|
29
30
|
"license": "Apache-2.0",
|
|
30
31
|
"bugs": {
|
|
@@ -35,28 +36,15 @@
|
|
|
35
36
|
"access": "public"
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"@reown/appkit-common-react-native": "2.0.0-alpha.
|
|
39
|
+
"@reown/appkit-common-react-native": "2.0.0-alpha.2"
|
|
39
40
|
},
|
|
40
41
|
"peerDependencies": {
|
|
41
|
-
"@coinbase/wallet-mobile-sdk": ">=1.1.2"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"react-native-builder-bob": {
|
|
45
|
-
"source": "src",
|
|
46
|
-
"output": "lib",
|
|
47
|
-
"targets": [
|
|
48
|
-
"commonjs",
|
|
49
|
-
"module",
|
|
50
|
-
[
|
|
51
|
-
"typescript",
|
|
52
|
-
{
|
|
53
|
-
"tsc": "../../node_modules/.bin/tsc"
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
]
|
|
42
|
+
"@coinbase/wallet-mobile-sdk": ">=1.1.2",
|
|
43
|
+
"react": ">=18",
|
|
44
|
+
"react-native": ">=0.72"
|
|
57
45
|
},
|
|
58
46
|
"eslintIgnore": [
|
|
59
47
|
"node_modules/",
|
|
60
48
|
"lib/"
|
|
61
49
|
]
|
|
62
|
-
}
|
|
50
|
+
}
|
|
@@ -8,9 +8,11 @@ import {
|
|
|
8
8
|
type ConnectorInitOptions,
|
|
9
9
|
type Namespaces,
|
|
10
10
|
type WalletInfo,
|
|
11
|
-
type Storage
|
|
11
|
+
type Storage,
|
|
12
|
+
NumberUtil,
|
|
13
|
+
StringUtil
|
|
12
14
|
} from '@reown/appkit-common-react-native';
|
|
13
|
-
import { getCoinbaseNamespace
|
|
15
|
+
import { getCoinbaseNamespace } from '../utils';
|
|
14
16
|
import { CoinbaseProvider } from '../providers/CoinbaseProvider';
|
|
15
17
|
import type { CoinbaseConnectorConfig, CoinbaseSession } from '../types';
|
|
16
18
|
|
|
@@ -20,21 +22,22 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
20
22
|
private static readonly SUPPORTED_NAMESPACE: ChainNamespace = 'eip155';
|
|
21
23
|
private config: CoinbaseConnectorConfig;
|
|
22
24
|
|
|
23
|
-
constructor(config
|
|
25
|
+
constructor(config?: CoinbaseConnectorConfig) {
|
|
24
26
|
super({ type: 'coinbase' });
|
|
25
|
-
this.config = config;
|
|
27
|
+
this.config = config ?? {};
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
override async init(ops: ConnectorInitOptions) {
|
|
29
31
|
super.init(ops);
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const redirect = ops.metadata.redirect?.universal ?? ops.metadata.redirect?.native;
|
|
34
|
+
if (!redirect) {
|
|
35
|
+
throw new Error('CoinbaseConnector: Redirect link not found in metadata');
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
this.provider = new CoinbaseProvider({
|
|
36
|
-
redirect
|
|
37
|
-
// use config storage
|
|
39
|
+
redirect,
|
|
40
|
+
// use config storage, as it needs to be mmkv-compatible
|
|
38
41
|
storage: this.config.storage
|
|
39
42
|
});
|
|
40
43
|
|
|
@@ -74,7 +77,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
74
77
|
|
|
75
78
|
override getChainId(): CaipNetworkId | undefined {
|
|
76
79
|
const hexChainId = this.getProvider().getChainId();
|
|
77
|
-
const chainId = hexToString(hexChainId);
|
|
80
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
78
81
|
|
|
79
82
|
return `${CoinbaseConnector.SUPPORTED_NAMESPACE}:${chainId}` as CaipNetworkId;
|
|
80
83
|
}
|
|
@@ -94,7 +97,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
94
97
|
|
|
95
98
|
override async switchNetwork(network: AppKitNetwork): Promise<void> {
|
|
96
99
|
const provider = this.getProvider();
|
|
97
|
-
const chainId_ =
|
|
100
|
+
const chainId_ = NumberUtil.convertNumericToHexString(network.id);
|
|
98
101
|
|
|
99
102
|
try {
|
|
100
103
|
await provider.request({
|
|
@@ -134,17 +137,17 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
134
137
|
|
|
135
138
|
private saveSession(namespaces: Namespaces): void {
|
|
136
139
|
const storage = this.getStorage();
|
|
137
|
-
storage.setItem(SESSION_KEY,
|
|
140
|
+
storage.setItem<CoinbaseSession>(SESSION_KEY, { namespaces });
|
|
138
141
|
}
|
|
139
142
|
|
|
140
143
|
override async restoreSession(): Promise<boolean> {
|
|
141
144
|
const storage = this.getStorage();
|
|
142
|
-
const session = await storage.getItem<
|
|
145
|
+
const session = await storage.getItem<CoinbaseSession>(SESSION_KEY);
|
|
143
146
|
if (!session) {
|
|
144
147
|
return false;
|
|
145
148
|
}
|
|
146
149
|
|
|
147
|
-
const { namespaces } =
|
|
150
|
+
const { namespaces } = session;
|
|
148
151
|
this.namespaces = namespaces;
|
|
149
152
|
|
|
150
153
|
return true;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
type Provider,
|
|
4
|
+
type RequestArguments,
|
|
5
|
+
StringUtil
|
|
6
|
+
} from '@reown/appkit-common-react-native';
|
|
3
7
|
import { configure, WalletMobileSDKEVMProvider } from '@coinbase/wallet-mobile-sdk';
|
|
4
8
|
import { isValidMethod } from '../utils';
|
|
5
9
|
import type { CoinbaseProviderConfig } from '../types';
|
|
@@ -7,6 +11,10 @@ import type { CoinbaseProviderConfig } from '../types';
|
|
|
7
11
|
export class CoinbaseProvider extends EventEmitter implements Provider {
|
|
8
12
|
private readonly config: CoinbaseProviderConfig;
|
|
9
13
|
private provider: WalletMobileSDKEVMProvider;
|
|
14
|
+
private chainChangedListeners = new Map<
|
|
15
|
+
(args?: any) => void,
|
|
16
|
+
(hexChainId: `0x${string}`) => void
|
|
17
|
+
>();
|
|
10
18
|
|
|
11
19
|
constructor(config: CoinbaseProviderConfig) {
|
|
12
20
|
super();
|
|
@@ -38,8 +46,6 @@ export class CoinbaseProvider extends EventEmitter implements Provider {
|
|
|
38
46
|
accounts = this.provider.selectedAddress ? [this.provider.selectedAddress] : [];
|
|
39
47
|
}
|
|
40
48
|
|
|
41
|
-
//TODO: check switch chain
|
|
42
|
-
|
|
43
49
|
return accounts as T;
|
|
44
50
|
} catch (error) {
|
|
45
51
|
console.warn('CoinbaseProvider: connect error', error);
|
|
@@ -65,11 +71,42 @@ export class CoinbaseProvider extends EventEmitter implements Provider {
|
|
|
65
71
|
return this.provider.chainId as `0x${string}`;
|
|
66
72
|
}
|
|
67
73
|
|
|
74
|
+
onChainChanged(hexChainId: `0x${string}`): void {
|
|
75
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
76
|
+
this.emit('chainChanged', { chainId });
|
|
77
|
+
}
|
|
78
|
+
|
|
68
79
|
override on(event: string, listener: (args?: any) => void): any {
|
|
80
|
+
if (event === 'chainChanged') {
|
|
81
|
+
// Create middleware that formats the chain ID before calling the original listener
|
|
82
|
+
const chainChangedMiddleware = (hexChainId: `0x${string}`) => {
|
|
83
|
+
const chainId = StringUtil.hexToString(hexChainId);
|
|
84
|
+
listener(chainId);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// Store the mapping between original listener and middleware
|
|
88
|
+
this.chainChangedListeners.set(listener, chainChangedMiddleware);
|
|
89
|
+
|
|
90
|
+
return this.provider.on('chainChanged', chainChangedMiddleware);
|
|
91
|
+
}
|
|
92
|
+
|
|
69
93
|
return this.provider.on(event, listener);
|
|
70
94
|
}
|
|
71
95
|
|
|
72
96
|
override off(event: string, listener: (args?: any) => void): any {
|
|
97
|
+
if (event === 'chainChanged') {
|
|
98
|
+
// Get the middleware wrapper for this listener
|
|
99
|
+
const middleware = this.chainChangedListeners.get(listener);
|
|
100
|
+
if (middleware) {
|
|
101
|
+
// Remove the middleware from the provider
|
|
102
|
+
this.provider.off('chainChanged', middleware);
|
|
103
|
+
// Remove the mapping
|
|
104
|
+
this.chainChangedListeners.delete(listener);
|
|
105
|
+
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
73
110
|
return this.provider.off(event, listener);
|
|
74
111
|
}
|
|
75
112
|
}
|
package/src/utils.ts
CHANGED
|
@@ -51,18 +51,3 @@ export function getCoinbaseNamespace(
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
export function numberToHex(value: string | number) {
|
|
56
|
-
// Convert string to number first, then to hex
|
|
57
|
-
const num = typeof value === 'string' ? parseInt(value, 10) : value;
|
|
58
|
-
|
|
59
|
-
return `0x${num.toString(16)}`;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function hexToString(hexValue: string) {
|
|
63
|
-
// Remove 0x prefix if present
|
|
64
|
-
const cleanHex = hexValue.startsWith('0x') ? hexValue.slice(2) : hexValue;
|
|
65
|
-
// Convert hex to decimal number, then to string
|
|
66
|
-
|
|
67
|
-
return parseInt(cleanHex, 16).toString();
|
|
68
|
-
}
|