@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 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,5 @@
1
+ export declare function coin98(): Map<any, any> | null;
2
+ export declare function getSolanaAccounts(instance: any): Promise<{
3
+ accounts: any;
4
+ }>;
5
+ //# sourceMappingURL=helpers.d.ts.map
@@ -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"}
@@ -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": "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",
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}}}
@@ -0,0 +1,4 @@
1
+ import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';
2
+ import type { SignerFactory } from 'rango-types';
3
+ export default function getSigners(provider: LegacyNetworkProviderMap): Promise<SignerFactory>;
4
+ //# sourceMappingURL=signer.d.ts.map
@@ -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
+ }