@rango-dev/provider-coin98 0.0.0-experimental-936229e8-20251208
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/CHANGELOG.md +248 -0
- package/dist/helpers.d.ts +5 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/provider-coin98.build.json +1 -0
- package/dist/signer.d.ts +4 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/solana-signer.d.ts +12 -0
- package/dist/solana-signer.d.ts.map +1 -0
- package/package.json +35 -0
- package/readme.md +1 -0
- package/src/helpers.ts +36 -0
- package/src/index.ts +121 -0
- package/src/signer.ts +25 -0
- package/src/solana-signer.ts +53 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# [0.57.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.56.1...provider-coin98@0.57.0) (2025-12-02)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## [0.56.1](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.56.0...provider-coin98@0.56.1) (2025-11-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# [0.54.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.53.0...provider-coin98@0.54.0) (2025-10-29)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# [0.53.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.52.0...provider-coin98@0.53.0) (2025-09-29)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [0.52.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.51.0...provider-coin98@0.52.0) (2025-09-06)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# [0.51.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.50.0...provider-coin98@0.51.0) (2025-08-19)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* add rango-dev/wallets-core to dependencies of providers ([84b4b2b](https://github.com/rango-exchange/rango-client/commit/84b4b2b7c3a7f5631228fb6ebf04617c3c4428e9))
|
|
27
|
+
* remove retry dynamic import and throw refined error on dynamic import failure ([a2944ac](https://github.com/rango-exchange/rango-client/commit/a2944ac3c05a0e945f6e5621fa5693ab89625485))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
|
|
32
|
+
* implement retry mechanism for lazy imports ([9a8e191](https://github.com/rango-exchange/rango-client/commit/9a8e191711d2319990ca4d0613e8188a5f86842f))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# [0.50.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.49.0...provider-coin98@0.50.0) (2025-08-05)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# [0.49.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.48.0...provider-coin98@0.49.0) (2025-07-22)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Reverts
|
|
44
|
+
|
|
45
|
+
* Revert "chore(release): publish" ([064ce15](https://github.com/rango-exchange/rango-client/commit/064ce157a2f819856f647f83aeb1c0410542e8d7))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# [0.47.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.46.1...provider-coin98@0.47.0) (2025-06-09)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
## [0.46.1](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.46.0...provider-coin98@0.46.1) (2025-05-04)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# [0.46.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.45.0...provider-coin98@0.46.0) (2025-04-30)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
* rename pbt to ptb for sui ([3d6d89f](https://github.com/rango-exchange/rango-client/commit/3d6d89f2265766607a15d61e0df92643fb33072b))
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### Features
|
|
66
|
+
|
|
67
|
+
* update sui to consider recent api changes ([d764b25](https://github.com/rango-exchange/rango-client/commit/d764b2501df9bb295f63cdbc0b05acd4a3abb4b9))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# [0.45.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.44.0...provider-coin98@0.45.0) (2025-03-11)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# [0.44.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.43.0...provider-coin98@0.44.0) (2025-02-23)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# [0.43.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.42.0...provider-coin98@0.43.0) (2025-01-20)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# [0.42.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.41.0...provider-coin98@0.42.0) (2024-12-30)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# [0.41.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.40.0...provider-coin98@0.41.0) (2024-11-27)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### Features
|
|
91
|
+
|
|
92
|
+
* add ton connect provider ([2a2dbb7](https://github.com/rango-exchange/rango-client/commit/2a2dbb79022263f19446ced49d298e04d63f927f))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# [0.40.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.39.0...provider-coin98@0.40.0) (2024-11-12)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# [0.39.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.38.0...provider-coin98@0.39.0) (2024-10-12)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
### Bug Fixes
|
|
104
|
+
|
|
105
|
+
* bump sdk and fix type issues ([d442208](https://github.com/rango-exchange/rango-client/commit/d4422083bf5dd27d5f509ce1db7f9560d05428c8))
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
### Performance Improvements
|
|
109
|
+
|
|
110
|
+
* enable code splitting in build process ([fe5a41e](https://github.com/rango-exchange/rango-client/commit/fe5a41e0e297298de11cd74ca5825544742aa03a))
|
|
111
|
+
* lazy load signer packages ([7b88f18](https://github.com/rango-exchange/rango-client/commit/7b88f1834f7b29b4b81ab6c81a07bb88e8ccf55c))
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# [0.38.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.37.0...provider-coin98@0.38.0) (2024-09-10)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# [0.37.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.36.1...provider-coin98@0.37.0) (2024-08-11)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
### Features
|
|
123
|
+
|
|
124
|
+
* implement sign message method for providers with a custom signer ([cf9515f](https://github.com/rango-exchange/rango-client/commit/cf9515feb5d3754aac9c228fe83315daf1350c85))
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## [0.36.1](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.36.0...provider-coin98@0.36.1) (2024-07-14)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# [0.36.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.34.2...provider-coin98@0.36.0) (2024-07-09)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# [0.35.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.34.2...provider-coin98@0.35.0) (2024-06-01)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
## [0.34.2](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.34.1...provider-coin98@0.34.2) (2024-05-26)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## [0.34.1](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.34.0...provider-coin98@0.34.1) (2024-05-25)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# [0.34.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.33.0...provider-coin98@0.34.0) (2024-05-14)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# [0.33.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.32.0...provider-coin98@0.33.0) (2024-04-24)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
# [0.32.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.31.0...provider-coin98@0.32.0) (2024-04-23)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
# [0.31.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.30.0...provider-coin98@0.31.0) (2024-04-09)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
### Bug Fixes
|
|
164
|
+
|
|
165
|
+
* fix the connection problem that happens when another wallet takes over the requested one ([42df212](https://github.com/rango-exchange/rango-client/commit/42df2120aadd84c95045b0bf76844c19305fb59a))
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
# [0.30.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.29.0...provider-coin98@0.30.0) (2024-03-12)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
# [0.29.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.28.0...provider-coin98@0.29.0) (2024-02-20)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# [0.28.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.27.0...provider-coin98@0.28.0) (2024-02-07)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
# [0.27.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.26.0...provider-coin98@0.27.0) (2024-01-22)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
### Bug Fixes
|
|
185
|
+
|
|
186
|
+
* cleanup wallets' subscriber when setProvider get null ([88d6a42](https://github.com/rango-exchange/rango-client/commit/88d6a423c49b34b3d9ff567e22df36c3b009bb76))
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# [0.26.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.24.0...provider-coin98@0.26.0) (2023-12-24)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
### Bug Fixes
|
|
194
|
+
|
|
195
|
+
* fix HMR for widget and playground ([8524820](https://github.com/rango-exchange/rango-client/commit/8524820f10cf0b8921f3db0c4f620ff98daa4103))
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
# [0.14.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.13.0...provider-coin98@0.14.0) (2023-08-03)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
# [0.13.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.12.0...provider-coin98@0.13.0) (2023-08-01)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
# [0.9.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.8.0...provider-coin98@0.9.0) (2023-07-31)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
# [0.7.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.6.0...provider-coin98@0.7.0) (2023-07-11)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
# [0.6.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.5.0...provider-coin98@0.6.0) (2023-07-11)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
### Reverts
|
|
219
|
+
|
|
220
|
+
* Revert "support for rango-types cjs format" ([ed4e050](https://github.com/rango-exchange/rango-client/commit/ed4e050bfc0dcde7aeffa6b0d73b02080a5721eb))
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
# [0.5.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.4.0...provider-coin98@0.5.0) (2023-05-31)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
# [0.4.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.3.0...provider-coin98@0.4.0) (2023-05-31)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
# [0.3.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.2.0...provider-coin98@0.3.0) (2023-05-30)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
# [0.2.0](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.1.15...provider-coin98@0.2.0) (2023-05-30)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
## [0.1.14](https://github.com/rango-exchange/rango-client/compare/provider-coin98@0.1.13...provider-coin98@0.1.14) (2023-05-15)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
### Bug Fixes
|
|
244
|
+
|
|
245
|
+
* update rango-types and fix notification bugs ([993f185](https://github.com/rango-exchange/rango-client/commit/993f185e0b8c5e5e15a2c65ba2d85d1f9c8daa90))
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,yBAqBrB;AAMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,GAAG;;GAMpD"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CanSwitchNetwork, Connect, Subscribe, SwitchNetwork, WalletInfo } from '@rango-dev/wallets-shared';
|
|
2
|
+
import type { BlockchainMeta, SignerFactory } from 'rango-types';
|
|
3
|
+
import { Networks, WalletTypes } from '@rango-dev/wallets-shared';
|
|
4
|
+
import { coin98 as coin98_instances } from './helpers.js';
|
|
5
|
+
export declare const config: {
|
|
6
|
+
type: WalletTypes;
|
|
7
|
+
defaultNetwork: Networks;
|
|
8
|
+
};
|
|
9
|
+
export declare const getInstance: typeof coin98_instances;
|
|
10
|
+
export declare const connect: Connect;
|
|
11
|
+
export declare const subscribe: Subscribe;
|
|
12
|
+
export declare const switchNetwork: SwitchNetwork;
|
|
13
|
+
export declare const canSwitchNetworkTo: CanSwitchNetwork;
|
|
14
|
+
export declare const getSigners: (provider: any) => Promise<SignerFactory>;
|
|
15
|
+
export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAKL,QAAQ,EAER,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AAK7E,eAAO,MAAM,MAAM;;;CAIlB,CAAC;AACF,eAAO,MAAM,WAAW,yBAAmB,CAAC;AAE5C,eAAO,MAAM,OAAO,EAAE,OAarB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAqCvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,aAAa,CAAU,CAAC;AAE5E,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAkBjE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var k=Object.defineProperty;var n=(e,o)=>k(e,"name",{value:o,configurable:!0});import{canSwitchNetworkToEvm as M,chooseInstance as i,getBlockChainNameFromId as I,getEvmAccounts as P,Networks as c,switchNetworkForEvm as R,WalletTypes as L}from"@rango-dev/wallets-shared";import{evmBlockchains as F,solanaBlockchain as O}from"rango-types";import{Networks as p}from"@rango-dev/wallets-shared";function u(){let{coin98:e,ethereum:o}=window;if(!e)return null;let t=new Map;return e.provider&&t.set(p.ETHEREUM,e.provider),o&&o.isCoin98&&t.set(p.ETHEREUM,o),e.sol&&t.set(p.SOLANA,e.sol),t}n(u,"coin98");async function w(e){return await e.enable(),{accounts:await e.request({method:"sol_accounts"})}}n(w,"getSolanaAccounts");import{dynamicImportWithRefinedError as b,getNetworkInstance as d,Networks as S}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as C,TransactionType as f}from"rango-types";import{generalSolanaTransactionExecutor as v}from"@rango-dev/signer-solana";import{PublicKey as N}from"@solana/web3.js";import T from"bs58";import{SignerError as x,SignerErrorCode as A}from"rango-types";var m=class{static{n(this,"CustomSolanaSigner")}provider;constructor(o){this.provider=o}async signMessage(o){try{return(await this.provider.signMessage(o)).signature}catch(t){throw new x(A.SIGN_TX_ERROR,void 0,t)}}async signAndSendTx(o){return{hash:await v(o,n(async r=>{let s=await this.provider.request({method:"sol_sign",params:[r]}),l=new N(s.publicKey),g=T.decode(s.signature);return r.addSignature(l,Buffer.from(g)),r.serialize()},"DefaultSolanaSigner"))}}};async function h(e){let o=d(e,S.ETHEREUM),t=d(e,S.SOLANA),a=new C,{DefaultEvmSigner:r}=await b(async()=>await import("@rango-dev/signer-evm"));return a.registerSigner(f.EVM,new r(o)),a.registerSigner(f.SOLANA,new m(t)),a}n(h,"getSigners");var U=L.COIN98,te={type:U,defaultNetwork:c.ETHEREUM},ne=u,re=n(async({instance:e,meta:o})=>{let t=i(e,o,c.ETHEREUM),a=i(e,o,c.SOLANA),r=await P(t),{accounts:s}=await w(a);return[r,{accounts:s,chainId:c.SOLANA}]},"connect"),ae=n(({instance:e,meta:o,updateChainId:t,connect:a})=>{let r=i(e,o,c.ETHEREUM),s=n(l=>{let g=I(l,o)||c.Unknown;i(e,o,g).request({method:"eth_requestAccounts"}).then(()=>{}).catch(E=>{console.log({err:E})}),t(l),a(g)},"handleChainChanged");return r?.on?.("chainChanged",s),()=>{r?.off?.("chainChanged",s)}},"subscribe"),se=n(async e=>{let o=i(e.instance,e.meta,e.network);return R({...e,instance:o})},"switchNetwork"),ce=M,ie=h,le=n(e=>{let o=F(e),t=O(e);return{name:"Coin98",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coin98/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg",BRAVE:"https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg",DEFAULT:"https://coin98.com/wallet"},color:"#1d1c25",supportedChains:[...o,...t]}},"getWalletInfo");export{ce as canSwitchNetworkTo,te as config,re as connect,ne as getInstance,ie as getSigners,le as getWalletInfo,ae as subscribe,se as switchNetwork};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/helpers.ts", "../src/signer.ts", "../src/solana-signer.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n CanSwitchNetwork,\n Connect,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n canSwitchNetworkToEvm,\n chooseInstance,\n getBlockChainNameFromId,\n getEvmAccounts,\n Networks,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains, solanaBlockchain } from 'rango-types';\n\nimport { coin98 as coin98_instances, getSolanaAccounts } from './helpers.js';\nimport signer from './signer.js';\n\nconst WALLET = WalletTypes.COIN98;\n\nexport const config = {\n type: WALLET,\n // TODO: Get from evm networks\n defaultNetwork: Networks.ETHEREUM,\n};\nexport const getInstance = coin98_instances;\n\nexport const connect: Connect = async ({ instance, meta }) => {\n const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);\n const sol_instance = chooseInstance(instance, meta, Networks.SOLANA);\n const evm = await getEvmAccounts(evm_instance);\n const { accounts: solanaAccounts } = await getSolanaAccounts(sol_instance);\n\n return [\n evm,\n {\n accounts: solanaAccounts,\n chainId: Networks.SOLANA,\n },\n ];\n};\n\nexport const subscribe: Subscribe = ({\n instance,\n meta,\n updateChainId,\n connect,\n}) => {\n const eth = chooseInstance(instance, meta, Networks.ETHEREUM);\n const handleChainChanged = (chainId: string) => {\n const network = getBlockChainNameFromId(chainId, meta) || Networks.Unknown;\n const targetInstance = chooseInstance(instance, meta, network);\n targetInstance\n .request({ method: 'eth_requestAccounts' })\n .then(() => undefined)\n .catch((err: unknown) => {\n console.log({ err });\n });\n /*\n *TODO:\n *We are calling `connect` here because signer can't detect\n *currect network, I guess the bug is in our signer and it\n *gets the wrong network by calling a wrong method or something.\n *Anyways, this works for now, maybe we can reconsider it in future\n *Whenever we refactored the signer code as well.\n */\n\n /*\n * we need to update `network` first, if not, it will goes through\n * the switching network and will open unneccessary pop ups.\n */\n updateChainId(chainId);\n connect(network);\n };\n eth?.on?.('chainChanged', handleChainChanged);\n\n return () => {\n eth?.off?.('chainChanged', handleChainChanged);\n };\n};\n\nexport const switchNetwork: SwitchNetwork = async (options) => {\n const instance = chooseInstance(\n options.instance,\n options.meta,\n options.network\n );\n return switchNetworkForEvm({\n ...options,\n instance,\n });\n};\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => Promise<SignerFactory> = signer;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const evms = evmBlockchains(allBlockChains);\n const solana = solanaBlockchain(allBlockChains);\n return {\n name: 'Coin98',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coin98/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg',\n DEFAULT: 'https://coin98.com/wallet',\n },\n color: '#1d1c25',\n supportedChains: [...evms, ...solana],\n };\n};\n", "import { Networks } from '@rango-dev/wallets-shared';\n\nexport function coin98() {\n const { coin98, ethereum } = window;\n\n if (!coin98) {\n return null;\n }\n\n const instances = new Map();\n\n // When disabled overring metamask\n if (coin98.provider) {\n instances.set(Networks.ETHEREUM, coin98.provider);\n }\n if (ethereum && ethereum.isCoin98) {\n instances.set(Networks.ETHEREUM, ethereum);\n }\n if (coin98.sol) {\n instances.set(Networks.SOLANA, coin98.sol);\n }\n\n return instances;\n}\n\n/*\n *This is how coin98 is getting solana accounts.\n *That's the reason we haven't moved it to `shared`\n */\nexport async function getSolanaAccounts(instance: any) {\n await instance.enable();\n const accounts = await instance.request({ method: 'sol_accounts' });\n return {\n accounts,\n };\n}\n", "import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';\nimport type { SignerFactory } from 'rango-types';\n\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n Networks,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { CustomSolanaSigner } from './solana-signer.js';\n\nexport default async function getSigners(\n provider: LegacyNetworkProviderMap\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);\n const solProvider = getNetworkInstance(provider, Networks.SOLANA);\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));\n signers.registerSigner(TxType.SOLANA, new CustomSolanaSigner(solProvider));\n return signers;\n}\n", "import type { SolanaWeb3Signer } from '@rango-dev/signer-solana';\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport type { GenericSigner, SolanaTransaction } from 'rango-types';\n\nimport { generalSolanaTransactionExecutor } from '@rango-dev/signer-solana';\nimport { PublicKey } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { SignerError, SignerErrorCode } from 'rango-types';\n\n/*\n * TODO - replace with real type\n * tslint:disable-next-line: no-any\n */\ntype SolanaExternalProvider = any;\n\nexport class CustomSolanaSigner implements GenericSigner<SolanaTransaction> {\n private provider: SolanaExternalProvider;\n constructor(provider: SolanaExternalProvider) {\n this.provider = provider;\n }\n\n async signMessage(msg: string): Promise<string> {\n try {\n const result = await this.provider.signMessage(msg);\n return result.signature;\n } catch (error) {\n throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);\n }\n }\n\n async signAndSendTx(tx: SolanaTransaction): Promise<{ hash: string }> {\n const DefaultSolanaSigner: SolanaWeb3Signer = async (\n solanaWeb3Transaction: Transaction | VersionedTransaction\n ) => {\n const response: { publicKey: string; signature: string } =\n await this.provider.request({\n method: 'sol_sign',\n params: [solanaWeb3Transaction],\n });\n const publicKey = new PublicKey(response.publicKey);\n const sign = bs58.decode(response.signature);\n\n solanaWeb3Transaction.addSignature(publicKey, Buffer.from(sign));\n const raw = solanaWeb3Transaction.serialize();\n return raw;\n };\n const hash = await generalSolanaTransactionExecutor(\n tx,\n DefaultSolanaSigner\n );\n return { hash };\n }\n}\n"],
|
|
5
|
+
"mappings": "+EASA,OACE,yBAAAA,EACA,kBAAAC,EACA,2BAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,uBAAAC,EACA,eAAAC,MACK,4BACP,OAAS,kBAAAC,EAAgB,oBAAAC,MAAwB,cClBjD,OAAS,YAAAC,MAAgB,4BAElB,SAASC,GAAS,CACvB,GAAM,CAAE,OAAAA,EAAQ,SAAAC,CAAS,EAAI,OAE7B,GAAI,CAACD,EACH,OAAO,KAGT,IAAME,EAAY,IAAI,IAGtB,OAAIF,EAAO,UACTE,EAAU,IAAIC,EAAS,SAAUH,EAAO,QAAQ,EAE9CC,GAAYA,EAAS,UACvBC,EAAU,IAAIC,EAAS,SAAUF,CAAQ,EAEvCD,EAAO,KACTE,EAAU,IAAIC,EAAS,OAAQH,EAAO,GAAG,EAGpCE,CACT,CArBgBE,EAAAJ,EAAA,UA2BhB,eAAsBK,EAAkBC,EAAe,CACrD,aAAMA,EAAS,OAAO,EAEf,CACL,SAFe,MAAMA,EAAS,QAAQ,CAAE,OAAQ,cAAe,CAAC,CAGlE,CACF,CANsBF,EAAAC,EAAA,qBC1BtB,OACE,iCAAAE,EACA,sBAAAC,EACA,YAAAC,MACK,4BACP,OAAS,wBAAAC,EAAsB,mBAAmBC,MAAc,cCJhE,OAAS,oCAAAC,MAAwC,2BACjD,OAAS,aAAAC,MAAiB,kBAC1B,OAAOC,MAAU,OACjB,OAAS,eAAAC,EAAa,mBAAAC,MAAuB,cAQtC,IAAMC,EAAN,KAAqE,CAf5E,MAe4E,CAAAC,EAAA,2BAClE,SACR,YAAYC,EAAkC,CAC5C,KAAK,SAAWA,CAClB,CAEA,MAAM,YAAYC,EAA8B,CAC9C,GAAI,CAEF,OADe,MAAM,KAAK,SAAS,YAAYA,CAAG,GACpC,SAChB,OAASC,EAAO,CACd,MAAM,IAAIC,EAAYC,EAAgB,cAAe,OAAWF,CAAK,CACvE,CACF,CAEA,MAAM,cAAcG,EAAkD,CAoBpE,MAAO,CAAE,KAJI,MAAMC,EACjBD,EAhB4CN,EAAA,MAC5CQ,GACG,CACH,IAAMC,EACJ,MAAM,KAAK,SAAS,QAAQ,CAC1B,OAAQ,WACR,OAAQ,CAACD,CAAqB,CAChC,CAAC,EACGE,EAAY,IAAIC,EAAUF,EAAS,SAAS,EAC5CG,EAAOC,EAAK,OAAOJ,EAAS,SAAS,EAE3C,OAAAD,EAAsB,aAAaE,EAAW,OAAO,KAAKE,CAAI,CAAC,EACnDJ,EAAsB,UAAU,CAE9C,EAd8C,sBAkB9C,CACc,CAChB,CACF,EDxCA,eAAOM,EACLC,EACwB,CACxB,IAAMC,EAAcC,EAAmBF,EAAUG,EAAS,QAAQ,EAC5DC,EAAcF,EAAmBF,EAAUG,EAAS,MAAM,EAC1DE,EAAU,IAAIC,EACd,CAAE,iBAAAC,CAAiB,EAAI,MAAMC,EACjC,SAAY,KAAM,QAAO,uBAAuB,CAClD,EACA,OAAAH,EAAQ,eAAeI,EAAO,IAAK,IAAIF,EAAiBN,CAAW,CAAC,EACpEI,EAAQ,eAAeI,EAAO,OAAQ,IAAIC,EAAmBN,CAAW,CAAC,EAClEC,CACT,CAZ8BM,EAAAZ,EAAA,cFW9B,IAAMa,EAASC,EAAY,OAEdC,GAAS,CACpB,KAAMF,EAEN,eAAgBG,EAAS,QAC3B,EACaC,GAAcC,EAEdC,GAAmBC,EAAA,MAAO,CAAE,SAAAC,EAAU,KAAAC,CAAK,IAAM,CAC5D,IAAMC,EAAeC,EAAeH,EAAUC,EAAMN,EAAS,QAAQ,EAC/DS,EAAeD,EAAeH,EAAUC,EAAMN,EAAS,MAAM,EAC7DU,EAAM,MAAMC,EAAeJ,CAAY,EACvC,CAAE,SAAUK,CAAe,EAAI,MAAMC,EAAkBJ,CAAY,EAEzE,MAAO,CACLC,EACA,CACE,SAAUE,EACV,QAASZ,EAAS,MACpB,CACF,CACF,EAbgC,WAenBc,GAAuBV,EAAA,CAAC,CACnC,SAAAC,EACA,KAAAC,EACA,cAAAS,EACA,QAAAZ,CACF,IAAM,CACJ,IAAMa,EAAMR,EAAeH,EAAUC,EAAMN,EAAS,QAAQ,EACtDiB,EAAqBb,EAACc,GAAoB,CAC9C,IAAMC,EAAUC,EAAwBF,EAASZ,CAAI,GAAKN,EAAS,QAC5CQ,EAAeH,EAAUC,EAAMa,CAAO,EAE1D,QAAQ,CAAE,OAAQ,qBAAsB,CAAC,EACzC,KAAK,IAAG,EAAY,EACpB,MAAOE,GAAiB,CACvB,QAAQ,IAAI,CAAE,IAAAA,CAAI,CAAC,CACrB,CAAC,EAcHN,EAAcG,CAAO,EACrBf,EAAQgB,CAAO,CACjB,EAxB2B,sBAyB3B,OAAAH,GAAK,KAAK,eAAgBC,CAAkB,EAErC,IAAM,CACXD,GAAK,MAAM,eAAgBC,CAAkB,CAC/C,CACF,EArCoC,aAuCvBK,GAA+BlB,EAAA,MAAOmB,GAAY,CAC7D,IAAMlB,EAAWG,EACfe,EAAQ,SACRA,EAAQ,KACRA,EAAQ,OACV,EACA,OAAOC,EAAoB,CACzB,GAAGD,EACH,SAAAlB,CACF,CAAC,CACH,EAV4C,iBAY/BoB,GAAuCC,EAEvCC,GAAwDA,EAExDC,GAAkExB,EAC7EyB,GACG,CACH,IAAMC,EAAOC,EAAeF,CAAc,EACpCG,EAASC,EAAiBJ,CAAc,EAC9C,MAAO,CACL,KAAM,SACN,IAAK,uFACL,YAAa,CACX,OACE,2FACF,MACE,2FACF,QAAS,2BACX,EACA,MAAO,UACP,gBAAiB,CAAC,GAAGC,EAAM,GAAGE,CAAM,CACtC,CACF,EAlB+E",
|
|
6
|
+
"names": ["canSwitchNetworkToEvm", "chooseInstance", "getBlockChainNameFromId", "getEvmAccounts", "Networks", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "solanaBlockchain", "Networks", "coin98", "ethereum", "instances", "Networks", "__name", "getSolanaAccounts", "instance", "dynamicImportWithRefinedError", "getNetworkInstance", "Networks", "DefaultSignerFactory", "TxType", "generalSolanaTransactionExecutor", "PublicKey", "bs58", "SignerError", "SignerErrorCode", "CustomSolanaSigner", "__name", "provider", "msg", "error", "SignerError", "SignerErrorCode", "tx", "generalSolanaTransactionExecutor", "solanaWeb3Transaction", "response", "publicKey", "PublicKey", "sign", "bs58", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "solProvider", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "CustomSolanaSigner", "__name", "WALLET", "WalletTypes", "config", "Networks", "getInstance", "coin98", "connect", "__name", "instance", "meta", "evm_instance", "chooseInstance", "sol_instance", "evm", "getEvmAccounts", "solanaAccounts", "getSolanaAccounts", "subscribe", "updateChainId", "eth", "handleChainChanged", "chainId", "network", "getBlockChainNameFromId", "err", "switchNetwork", "options", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains", "solana", "solanaBlockchain"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/helpers.ts":{"bytes":796,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/solana-signer.ts":{"bytes":1784,"imports":[{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"@solana/web3.js","kind":"import-statement","external":true},{"path":"bs58","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":972,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/solana-signer.ts","kind":"import-statement","original":"./solana-signer.js"},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":3500,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/helpers.ts","kind":"import-statement","original":"./helpers.js"},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11857},"dist/index.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"@solana/web3.js","kind":"import-statement","external":true},{"path":"bs58","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true}],"exports":["canSwitchNetworkTo","config","connect","getInstance","getSigners","getWalletInfo","subscribe","switchNetwork"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":1355},"src/helpers.ts":{"bytesInOutput":379},"src/signer.ts":{"bytesInOutput":423},"src/solana-signer.ts":{"bytesInOutput":667}},"bytes":3089}}}
|
package/dist/signer.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GenericSigner, SolanaTransaction } from 'rango-types';
|
|
2
|
+
type SolanaExternalProvider = any;
|
|
3
|
+
export declare class CustomSolanaSigner implements GenericSigner<SolanaTransaction> {
|
|
4
|
+
private provider;
|
|
5
|
+
constructor(provider: SolanaExternalProvider);
|
|
6
|
+
signMessage(msg: string): Promise<string>;
|
|
7
|
+
signAndSendTx(tx: SolanaTransaction): Promise<{
|
|
8
|
+
hash: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=solana-signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-signer.d.ts","sourceRoot":"","sources":["../src/solana-signer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWpE,KAAK,sBAAsB,GAAG,GAAG,CAAC;AAElC,qBAAa,kBAAmB,YAAW,aAAa,CAAC,iBAAiB,CAAC;IACzE,OAAO,CAAC,QAAQ,CAAyB;gBAC7B,QAAQ,EAAE,sBAAsB;IAItC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASzC,aAAa,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAsBtE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rango-dev/provider-coin98",
|
|
3
|
+
"version": "0.0.0-experimental-936229e8-20251208",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"source": "./src/index.ts",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"typings": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"src"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "node ../../scripts/build/command.mjs --path wallets/provider-coin98",
|
|
18
|
+
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
|
|
19
|
+
"clean": "rimraf dist",
|
|
20
|
+
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
|
|
21
|
+
"lint": "eslint \"**/*.{ts,tsx}\""
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@rango-dev/signer-evm": "^0.40.0",
|
|
25
|
+
"@rango-dev/signer-solana": "^0.46.1",
|
|
26
|
+
"@rango-dev/wallets-core": "^0.0.0-experimental-936229e8-20251208",
|
|
27
|
+
"@rango-dev/wallets-shared": "^0.0.0-experimental-936229e8-20251208",
|
|
28
|
+
"@solana/web3.js": "^1.91.4",
|
|
29
|
+
"bs58": "^5.0.0",
|
|
30
|
+
"rango-types": "^0.1.89"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @rango-dev/provider-coin98
|
package/src/helpers.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Networks } from '@rango-dev/wallets-shared';
|
|
2
|
+
|
|
3
|
+
export function coin98() {
|
|
4
|
+
const { coin98, ethereum } = window;
|
|
5
|
+
|
|
6
|
+
if (!coin98) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const instances = new Map();
|
|
11
|
+
|
|
12
|
+
// When disabled overring metamask
|
|
13
|
+
if (coin98.provider) {
|
|
14
|
+
instances.set(Networks.ETHEREUM, coin98.provider);
|
|
15
|
+
}
|
|
16
|
+
if (ethereum && ethereum.isCoin98) {
|
|
17
|
+
instances.set(Networks.ETHEREUM, ethereum);
|
|
18
|
+
}
|
|
19
|
+
if (coin98.sol) {
|
|
20
|
+
instances.set(Networks.SOLANA, coin98.sol);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return instances;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
*This is how coin98 is getting solana accounts.
|
|
28
|
+
*That's the reason we haven't moved it to `shared`
|
|
29
|
+
*/
|
|
30
|
+
export async function getSolanaAccounts(instance: any) {
|
|
31
|
+
await instance.enable();
|
|
32
|
+
const accounts = await instance.request({ method: 'sol_accounts' });
|
|
33
|
+
return {
|
|
34
|
+
accounts,
|
|
35
|
+
};
|
|
36
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CanSwitchNetwork,
|
|
3
|
+
Connect,
|
|
4
|
+
Subscribe,
|
|
5
|
+
SwitchNetwork,
|
|
6
|
+
WalletInfo,
|
|
7
|
+
} from '@rango-dev/wallets-shared';
|
|
8
|
+
import type { BlockchainMeta, SignerFactory } from 'rango-types';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
canSwitchNetworkToEvm,
|
|
12
|
+
chooseInstance,
|
|
13
|
+
getBlockChainNameFromId,
|
|
14
|
+
getEvmAccounts,
|
|
15
|
+
Networks,
|
|
16
|
+
switchNetworkForEvm,
|
|
17
|
+
WalletTypes,
|
|
18
|
+
} from '@rango-dev/wallets-shared';
|
|
19
|
+
import { evmBlockchains, solanaBlockchain } from 'rango-types';
|
|
20
|
+
|
|
21
|
+
import { coin98 as coin98_instances, getSolanaAccounts } from './helpers.js';
|
|
22
|
+
import signer from './signer.js';
|
|
23
|
+
|
|
24
|
+
const WALLET = WalletTypes.COIN98;
|
|
25
|
+
|
|
26
|
+
export const config = {
|
|
27
|
+
type: WALLET,
|
|
28
|
+
// TODO: Get from evm networks
|
|
29
|
+
defaultNetwork: Networks.ETHEREUM,
|
|
30
|
+
};
|
|
31
|
+
export const getInstance = coin98_instances;
|
|
32
|
+
|
|
33
|
+
export const connect: Connect = async ({ instance, meta }) => {
|
|
34
|
+
const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);
|
|
35
|
+
const sol_instance = chooseInstance(instance, meta, Networks.SOLANA);
|
|
36
|
+
const evm = await getEvmAccounts(evm_instance);
|
|
37
|
+
const { accounts: solanaAccounts } = await getSolanaAccounts(sol_instance);
|
|
38
|
+
|
|
39
|
+
return [
|
|
40
|
+
evm,
|
|
41
|
+
{
|
|
42
|
+
accounts: solanaAccounts,
|
|
43
|
+
chainId: Networks.SOLANA,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const subscribe: Subscribe = ({
|
|
49
|
+
instance,
|
|
50
|
+
meta,
|
|
51
|
+
updateChainId,
|
|
52
|
+
connect,
|
|
53
|
+
}) => {
|
|
54
|
+
const eth = chooseInstance(instance, meta, Networks.ETHEREUM);
|
|
55
|
+
const handleChainChanged = (chainId: string) => {
|
|
56
|
+
const network = getBlockChainNameFromId(chainId, meta) || Networks.Unknown;
|
|
57
|
+
const targetInstance = chooseInstance(instance, meta, network);
|
|
58
|
+
targetInstance
|
|
59
|
+
.request({ method: 'eth_requestAccounts' })
|
|
60
|
+
.then(() => undefined)
|
|
61
|
+
.catch((err: unknown) => {
|
|
62
|
+
console.log({ err });
|
|
63
|
+
});
|
|
64
|
+
/*
|
|
65
|
+
*TODO:
|
|
66
|
+
*We are calling `connect` here because signer can't detect
|
|
67
|
+
*currect network, I guess the bug is in our signer and it
|
|
68
|
+
*gets the wrong network by calling a wrong method or something.
|
|
69
|
+
*Anyways, this works for now, maybe we can reconsider it in future
|
|
70
|
+
*Whenever we refactored the signer code as well.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* we need to update `network` first, if not, it will goes through
|
|
75
|
+
* the switching network and will open unneccessary pop ups.
|
|
76
|
+
*/
|
|
77
|
+
updateChainId(chainId);
|
|
78
|
+
connect(network);
|
|
79
|
+
};
|
|
80
|
+
eth?.on?.('chainChanged', handleChainChanged);
|
|
81
|
+
|
|
82
|
+
return () => {
|
|
83
|
+
eth?.off?.('chainChanged', handleChainChanged);
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const switchNetwork: SwitchNetwork = async (options) => {
|
|
88
|
+
const instance = chooseInstance(
|
|
89
|
+
options.instance,
|
|
90
|
+
options.meta,
|
|
91
|
+
options.network
|
|
92
|
+
);
|
|
93
|
+
return switchNetworkForEvm({
|
|
94
|
+
...options,
|
|
95
|
+
instance,
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
|
|
100
|
+
|
|
101
|
+
export const getSigners: (provider: any) => Promise<SignerFactory> = signer;
|
|
102
|
+
|
|
103
|
+
export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (
|
|
104
|
+
allBlockChains
|
|
105
|
+
) => {
|
|
106
|
+
const evms = evmBlockchains(allBlockChains);
|
|
107
|
+
const solana = solanaBlockchain(allBlockChains);
|
|
108
|
+
return {
|
|
109
|
+
name: 'Coin98',
|
|
110
|
+
img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coin98/icon.svg',
|
|
111
|
+
installLink: {
|
|
112
|
+
CHROME:
|
|
113
|
+
'https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg',
|
|
114
|
+
BRAVE:
|
|
115
|
+
'https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg',
|
|
116
|
+
DEFAULT: 'https://coin98.com/wallet',
|
|
117
|
+
},
|
|
118
|
+
color: '#1d1c25',
|
|
119
|
+
supportedChains: [...evms, ...solana],
|
|
120
|
+
};
|
|
121
|
+
};
|
package/src/signer.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';
|
|
2
|
+
import type { SignerFactory } from 'rango-types';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
dynamicImportWithRefinedError,
|
|
6
|
+
getNetworkInstance,
|
|
7
|
+
Networks,
|
|
8
|
+
} from '@rango-dev/wallets-shared';
|
|
9
|
+
import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
|
|
10
|
+
|
|
11
|
+
import { CustomSolanaSigner } from './solana-signer.js';
|
|
12
|
+
|
|
13
|
+
export default async function getSigners(
|
|
14
|
+
provider: LegacyNetworkProviderMap
|
|
15
|
+
): Promise<SignerFactory> {
|
|
16
|
+
const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
|
|
17
|
+
const solProvider = getNetworkInstance(provider, Networks.SOLANA);
|
|
18
|
+
const signers = new DefaultSignerFactory();
|
|
19
|
+
const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
|
|
20
|
+
async () => await import('@rango-dev/signer-evm')
|
|
21
|
+
);
|
|
22
|
+
signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
|
|
23
|
+
signers.registerSigner(TxType.SOLANA, new CustomSolanaSigner(solProvider));
|
|
24
|
+
return signers;
|
|
25
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SolanaWeb3Signer } from '@rango-dev/signer-solana';
|
|
2
|
+
import type { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
3
|
+
import type { GenericSigner, SolanaTransaction } from 'rango-types';
|
|
4
|
+
|
|
5
|
+
import { generalSolanaTransactionExecutor } from '@rango-dev/signer-solana';
|
|
6
|
+
import { PublicKey } from '@solana/web3.js';
|
|
7
|
+
import bs58 from 'bs58';
|
|
8
|
+
import { SignerError, SignerErrorCode } from 'rango-types';
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* TODO - replace with real type
|
|
12
|
+
* tslint:disable-next-line: no-any
|
|
13
|
+
*/
|
|
14
|
+
type SolanaExternalProvider = any;
|
|
15
|
+
|
|
16
|
+
export class CustomSolanaSigner implements GenericSigner<SolanaTransaction> {
|
|
17
|
+
private provider: SolanaExternalProvider;
|
|
18
|
+
constructor(provider: SolanaExternalProvider) {
|
|
19
|
+
this.provider = provider;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async signMessage(msg: string): Promise<string> {
|
|
23
|
+
try {
|
|
24
|
+
const result = await this.provider.signMessage(msg);
|
|
25
|
+
return result.signature;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async signAndSendTx(tx: SolanaTransaction): Promise<{ hash: string }> {
|
|
32
|
+
const DefaultSolanaSigner: SolanaWeb3Signer = async (
|
|
33
|
+
solanaWeb3Transaction: Transaction | VersionedTransaction
|
|
34
|
+
) => {
|
|
35
|
+
const response: { publicKey: string; signature: string } =
|
|
36
|
+
await this.provider.request({
|
|
37
|
+
method: 'sol_sign',
|
|
38
|
+
params: [solanaWeb3Transaction],
|
|
39
|
+
});
|
|
40
|
+
const publicKey = new PublicKey(response.publicKey);
|
|
41
|
+
const sign = bs58.decode(response.signature);
|
|
42
|
+
|
|
43
|
+
solanaWeb3Transaction.addSignature(publicKey, Buffer.from(sign));
|
|
44
|
+
const raw = solanaWeb3Transaction.serialize();
|
|
45
|
+
return raw;
|
|
46
|
+
};
|
|
47
|
+
const hash = await generalSolanaTransactionExecutor(
|
|
48
|
+
tx,
|
|
49
|
+
DefaultSolanaSigner
|
|
50
|
+
);
|
|
51
|
+
return { hash };
|
|
52
|
+
}
|
|
53
|
+
}
|