@reown/appkit-coinbase-react-native 0.0.1 → 2.0.0-alpha.3
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 -11
- 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 -13
- 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 -14
- 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,11 +54,10 @@ 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() {
|
|
60
|
-
// TODO: Add icon
|
|
61
61
|
return {
|
|
62
62
|
name: 'Coinbase Wallet',
|
|
63
63
|
description: 'Your home to everything onchain',
|
|
@@ -69,7 +69,7 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
69
69
|
}
|
|
70
70
|
async switchNetwork(network) {
|
|
71
71
|
const provider = this.getProvider();
|
|
72
|
-
const chainId_ =
|
|
72
|
+
const chainId_ = _appkitCommonReactNative.NumberUtil.convertNumericToHexString(network.id);
|
|
73
73
|
try {
|
|
74
74
|
await provider.request({
|
|
75
75
|
method: 'wallet_switchEthereumChain',
|
|
@@ -106,9 +106,9 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
106
106
|
}
|
|
107
107
|
saveSession(namespaces) {
|
|
108
108
|
const storage = this.getStorage();
|
|
109
|
-
storage.setItem(SESSION_KEY,
|
|
109
|
+
storage.setItem(SESSION_KEY, {
|
|
110
110
|
namespaces
|
|
111
|
-
})
|
|
111
|
+
});
|
|
112
112
|
}
|
|
113
113
|
async restoreSession() {
|
|
114
114
|
const storage = this.getStorage();
|
|
@@ -118,7 +118,7 @@ class CoinbaseConnector extends _appkitCommonReactNative.WalletConnector {
|
|
|
118
118
|
}
|
|
119
119
|
const {
|
|
120
120
|
namespaces
|
|
121
|
-
} =
|
|
121
|
+
} = session;
|
|
122
122
|
this.namespaces = namespaces;
|
|
123
123
|
return true;
|
|
124
124
|
}
|
|
@@ -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,11 +50,10 @@ 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() {
|
|
54
|
-
// TODO: Add icon
|
|
55
57
|
return {
|
|
56
58
|
name: 'Coinbase Wallet',
|
|
57
59
|
description: 'Your home to everything onchain',
|
|
@@ -63,7 +65,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
63
65
|
}
|
|
64
66
|
async switchNetwork(network) {
|
|
65
67
|
const provider = this.getProvider();
|
|
66
|
-
const chainId_ =
|
|
68
|
+
const chainId_ = NumberUtil.convertNumericToHexString(network.id);
|
|
67
69
|
try {
|
|
68
70
|
await provider.request({
|
|
69
71
|
method: 'wallet_switchEthereumChain',
|
|
@@ -100,9 +102,9 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
100
102
|
}
|
|
101
103
|
saveSession(namespaces) {
|
|
102
104
|
const storage = this.getStorage();
|
|
103
|
-
storage.setItem(SESSION_KEY,
|
|
105
|
+
storage.setItem(SESSION_KEY, {
|
|
104
106
|
namespaces
|
|
105
|
-
})
|
|
107
|
+
});
|
|
106
108
|
}
|
|
107
109
|
async restoreSession() {
|
|
108
110
|
const storage = this.getStorage();
|
|
@@ -112,7 +114,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
112
114
|
}
|
|
113
115
|
const {
|
|
114
116
|
namespaces
|
|
115
|
-
} =
|
|
117
|
+
} = session;
|
|
116
118
|
this.namespaces = namespaces;
|
|
117
119
|
return true;
|
|
118
120
|
}
|
|
@@ -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;IAQvC,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.3",
|
|
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.3"
|
|
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,13 +77,12 @@ 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
|
}
|
|
81
84
|
|
|
82
85
|
override getWalletInfo(): WalletInfo | undefined {
|
|
83
|
-
// TODO: Add icon
|
|
84
86
|
return {
|
|
85
87
|
name: 'Coinbase Wallet',
|
|
86
88
|
description: 'Your home to everything onchain',
|
|
@@ -94,7 +96,7 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
94
96
|
|
|
95
97
|
override async switchNetwork(network: AppKitNetwork): Promise<void> {
|
|
96
98
|
const provider = this.getProvider();
|
|
97
|
-
const chainId_ =
|
|
99
|
+
const chainId_ = NumberUtil.convertNumericToHexString(network.id);
|
|
98
100
|
|
|
99
101
|
try {
|
|
100
102
|
await provider.request({
|
|
@@ -134,17 +136,17 @@ export class CoinbaseConnector extends WalletConnector {
|
|
|
134
136
|
|
|
135
137
|
private saveSession(namespaces: Namespaces): void {
|
|
136
138
|
const storage = this.getStorage();
|
|
137
|
-
storage.setItem(SESSION_KEY,
|
|
139
|
+
storage.setItem<CoinbaseSession>(SESSION_KEY, { namespaces });
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
override async restoreSession(): Promise<boolean> {
|
|
141
143
|
const storage = this.getStorage();
|
|
142
|
-
const session = await storage.getItem<
|
|
144
|
+
const session = await storage.getItem<CoinbaseSession>(SESSION_KEY);
|
|
143
145
|
if (!session) {
|
|
144
146
|
return false;
|
|
145
147
|
}
|
|
146
148
|
|
|
147
|
-
const { namespaces } =
|
|
149
|
+
const { namespaces } = session;
|
|
148
150
|
this.namespaces = namespaces;
|
|
149
151
|
|
|
150
152
|
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
|
-
}
|