@rango-dev/provider-safepal 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,242 @@
1
+ # [0.56.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.55.1...provider-safepal@0.56.0) (2025-12-02)
2
+
3
+
4
+
5
+ ## [0.55.1](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.55.0...provider-safepal@0.55.1) (2025-11-22)
6
+
7
+
8
+
9
+ # [0.53.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.52.0...provider-safepal@0.53.0) (2025-10-29)
10
+
11
+
12
+
13
+ # [0.52.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.51.0...provider-safepal@0.52.0) (2025-09-29)
14
+
15
+
16
+ ### Features
17
+
18
+ * migrate safepal to hub ([9abf9c9](https://github.com/rango-exchange/rango-client/commit/9abf9c9be4c009e55570b15b0c048b8554f681bc))
19
+
20
+
21
+
22
+ # [0.51.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.50.0...provider-safepal@0.51.0) (2025-09-06)
23
+
24
+
25
+
26
+ # [0.50.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.49.0...provider-safepal@0.50.0) (2025-08-19)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * add rango-dev/wallets-core to dependencies of providers ([84b4b2b](https://github.com/rango-exchange/rango-client/commit/84b4b2b7c3a7f5631228fb6ebf04617c3c4428e9))
32
+ * remove retry dynamic import and throw refined error on dynamic import failure ([a2944ac](https://github.com/rango-exchange/rango-client/commit/a2944ac3c05a0e945f6e5621fa5693ab89625485))
33
+
34
+
35
+ ### Features
36
+
37
+ * implement retry mechanism for lazy imports ([9a8e191](https://github.com/rango-exchange/rango-client/commit/9a8e191711d2319990ca4d0613e8188a5f86842f))
38
+
39
+
40
+
41
+ # [0.49.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.48.0...provider-safepal@0.49.0) (2025-08-05)
42
+
43
+
44
+
45
+ # [0.48.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.47.0...provider-safepal@0.48.0) (2025-07-22)
46
+
47
+
48
+ ### Reverts
49
+
50
+ * Revert "chore(release): publish" ([064ce15](https://github.com/rango-exchange/rango-client/commit/064ce157a2f819856f647f83aeb1c0410542e8d7))
51
+
52
+
53
+
54
+ # [0.46.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.45.1...provider-safepal@0.46.0) (2025-06-09)
55
+
56
+
57
+
58
+ ## [0.45.1](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.45.0...provider-safepal@0.45.1) (2025-05-04)
59
+
60
+
61
+
62
+ # [0.45.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.44.0...provider-safepal@0.45.0) (2025-04-30)
63
+
64
+
65
+ ### Bug Fixes
66
+
67
+ * rename pbt to ptb for sui ([3d6d89f](https://github.com/rango-exchange/rango-client/commit/3d6d89f2265766607a15d61e0df92643fb33072b))
68
+
69
+
70
+ ### Features
71
+
72
+ * update sui to consider recent api changes ([d764b25](https://github.com/rango-exchange/rango-client/commit/d764b2501df9bb295f63cdbc0b05acd4a3abb4b9))
73
+
74
+
75
+
76
+ # [0.44.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.43.0...provider-safepal@0.44.0) (2025-03-11)
77
+
78
+
79
+
80
+ # [0.43.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.42.0...provider-safepal@0.43.0) (2025-02-23)
81
+
82
+
83
+
84
+ # [0.42.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.41.0...provider-safepal@0.42.0) (2025-01-20)
85
+
86
+
87
+
88
+ # [0.41.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.40.0...provider-safepal@0.41.0) (2024-12-30)
89
+
90
+
91
+
92
+ # [0.40.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.39.0...provider-safepal@0.40.0) (2024-11-27)
93
+
94
+
95
+ ### Features
96
+
97
+ * add ton connect provider ([2a2dbb7](https://github.com/rango-exchange/rango-client/commit/2a2dbb79022263f19446ced49d298e04d63f927f))
98
+
99
+
100
+
101
+ # [0.39.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.38.0...provider-safepal@0.39.0) (2024-11-12)
102
+
103
+
104
+
105
+ # [0.38.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.37.0...provider-safepal@0.38.0) (2024-10-12)
106
+
107
+
108
+ ### Bug Fixes
109
+
110
+ * bump sdk and fix type issues ([d442208](https://github.com/rango-exchange/rango-client/commit/d4422083bf5dd27d5f509ce1db7f9560d05428c8))
111
+
112
+
113
+ ### Performance Improvements
114
+
115
+ * lazy load signer packages ([7b88f18](https://github.com/rango-exchange/rango-client/commit/7b88f1834f7b29b4b81ab6c81a07bb88e8ccf55c))
116
+
117
+
118
+
119
+ # [0.37.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.36.0...provider-safepal@0.37.0) (2024-09-10)
120
+
121
+
122
+
123
+ # [0.36.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.35.1...provider-safepal@0.36.0) (2024-08-11)
124
+
125
+
126
+
127
+ ## [0.35.1](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.35.0...provider-safepal@0.35.1) (2024-07-14)
128
+
129
+
130
+
131
+ # [0.35.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.33.2...provider-safepal@0.35.0) (2024-07-09)
132
+
133
+
134
+
135
+ # [0.34.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.33.2...provider-safepal@0.34.0) (2024-06-01)
136
+
137
+
138
+
139
+ ## [0.33.2](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.33.1...provider-safepal@0.33.2) (2024-05-26)
140
+
141
+
142
+
143
+ ## [0.33.1](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.33.0...provider-safepal@0.33.1) (2024-05-25)
144
+
145
+
146
+
147
+ # [0.33.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.32.0...provider-safepal@0.33.0) (2024-05-14)
148
+
149
+
150
+
151
+ # [0.32.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.31.0...provider-safepal@0.32.0) (2024-04-24)
152
+
153
+
154
+
155
+ # [0.31.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.30.0...provider-safepal@0.31.0) (2024-04-23)
156
+
157
+
158
+
159
+ # [0.30.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.29.0...provider-safepal@0.30.0) (2024-04-09)
160
+
161
+
162
+
163
+ # [0.29.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.28.0...provider-safepal@0.29.0) (2024-03-12)
164
+
165
+
166
+
167
+ # [0.28.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.27.0...provider-safepal@0.28.0) (2024-02-20)
168
+
169
+
170
+
171
+ # [0.27.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.26.0...provider-safepal@0.27.0) (2024-02-07)
172
+
173
+
174
+
175
+ # [0.26.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.25.0...provider-safepal@0.26.0) (2024-01-22)
176
+
177
+
178
+ ### Bug Fixes
179
+
180
+ * cleanup wallets' subscriber when setProvider get null ([88d6a42](https://github.com/rango-exchange/rango-client/commit/88d6a423c49b34b3d9ff567e22df36c3b009bb76))
181
+
182
+
183
+
184
+ # [0.25.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.23.0...provider-safepal@0.25.0) (2023-12-24)
185
+
186
+
187
+ ### Bug Fixes
188
+
189
+ * fix HMR for widget and playground ([8524820](https://github.com/rango-exchange/rango-client/commit/8524820f10cf0b8921f3db0c4f620ff98daa4103))
190
+
191
+
192
+
193
+ # [0.14.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.13.0...provider-safepal@0.14.0) (2023-08-03)
194
+
195
+
196
+
197
+ # [0.13.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.12.0...provider-safepal@0.13.0) (2023-08-01)
198
+
199
+
200
+
201
+ # [0.9.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.8.0...provider-safepal@0.9.0) (2023-07-31)
202
+
203
+
204
+
205
+ # [0.7.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.6.0...provider-safepal@0.7.0) (2023-07-11)
206
+
207
+
208
+
209
+ # [0.6.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.5.0...provider-safepal@0.6.0) (2023-07-11)
210
+
211
+
212
+ ### Reverts
213
+
214
+ * Revert "support for rango-types cjs format" ([ed4e050](https://github.com/rango-exchange/rango-client/commit/ed4e050bfc0dcde7aeffa6b0d73b02080a5721eb))
215
+
216
+
217
+
218
+ # [0.5.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.4.0...provider-safepal@0.5.0) (2023-05-31)
219
+
220
+
221
+
222
+ # [0.4.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.3.0...provider-safepal@0.4.0) (2023-05-31)
223
+
224
+
225
+
226
+ # [0.3.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.2.0...provider-safepal@0.3.0) (2023-05-30)
227
+
228
+
229
+
230
+ # [0.2.0](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.1.15...provider-safepal@0.2.0) (2023-05-30)
231
+
232
+
233
+
234
+ ## [0.1.14](https://github.com/rango-exchange/rango-client/compare/provider-safepal@0.1.13...provider-safepal@0.1.14) (2023-05-15)
235
+
236
+
237
+ ### Bug Fixes
238
+
239
+ * update rango-types and fix notification bugs ([993f185](https://github.com/rango-exchange/rango-client/commit/993f185e0b8c5e5e15a2c65ba2d85d1f9c8daa90))
240
+
241
+
242
+
@@ -0,0 +1,4 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ export declare const WALLET_ID = "safepal";
3
+ export declare const metadata: ProviderMetadata;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,eAAO,MAAM,SAAS,YAAY,CAAC;AACnC,eAAO,MAAM,QAAQ,EAAE,gBAiCtB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CanSwitchNetwork, Connect, Subscribe, SwitchNetwork, WalletInfo } from '@rango-dev/wallets-shared';
2
+ import type { BlockchainMeta, SignerFactory } from 'rango-types';
3
+ import { type LegacyProviderInterface, LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';
4
+ import { WalletTypes } from '@rango-dev/wallets-shared';
5
+ import { type Provider, safepal as safepal_instance } from '../utils.js';
6
+ export declare const config: {
7
+ type: WalletTypes;
8
+ defaultNetwork: Networks;
9
+ };
10
+ export declare const getInstance: typeof safepal_instance;
11
+ export declare const connect: Connect;
12
+ export declare const subscribe: Subscribe;
13
+ export declare const switchNetwork: SwitchNetwork;
14
+ export declare const canSwitchNetworkTo: CanSwitchNetwork;
15
+ export declare const getSigners: (provider: Provider) => Promise<SignerFactory>;
16
+ export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
17
+ declare const buildLegacyProvider: () => LegacyProviderInterface;
18
+ export { buildLegacyProvider };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/legacy/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EAEP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,KAAK,uBAAuB,EAC5B,cAAc,IAAI,QAAQ,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAML,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIzE,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,eAAO,MAAM,WAAW,yBAAmB,CAAC;AAC5C,eAAO,MAAM,OAAO,EAAE,OAWrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAiBvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAAmC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,aAAa,CAC9D,CAAC;AAET,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAuCjE,CAAC;AAEF,QAAA,MAAM,mBAAmB,EAAE,MAAM,uBAS/B,CAAC;AAEH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
package/dist/mod.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare const versions: () => import("@rango-dev/wallets-core/utils").VersionedProviders;
2
+ export { versions };
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,QAAQ,kEAIF,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/mod.js ADDED
@@ -0,0 +1,2 @@
1
+ var P=Object.defineProperty;var o=(e,t)=>P(e,"name",{value:t,configurable:!0});import{defineVersions as ie}from"@rango-dev/wallets-core/utils";import{LegacyNetworks as l}from"@rango-dev/wallets-core/legacy";import{canSwitchNetworkToEvm as L,chooseInstance as h,getEvmAccounts as C,subscribeToEvm as R,switchNetworkForEvm as B,WalletTypes as F}from"@rango-dev/wallets-shared";import{evmBlockchains as u,solanaBlockchain as w}from"rango-types";import{dynamicImportWithRefinedError as x,getNetworkInstance as k,Networks as T}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as I,TransactionType as M}from"rango-types";async function i(e){let t=k(e,T.ETHEREUM),r=new I,{DefaultEvmSigner:n}=await x(async()=>await import("@rango-dev/signer-evm"));return r.registerSigner(M.EVM,new n(t)),r}o(i,"getSigners");import{LegacyNetworks as d}from"@rango-dev/wallets-core/legacy";import{isEvmAddress as N}from"@rango-dev/wallets-shared";function a(){let{safepalProvider:e}=window;if(!e)return null;let t=new Map;return e&&t.set(d.ETHEREUM,e),t}o(a,"safepal");function s(){let t=a()?.get(d.ETHEREUM);if(!t)throw new Error("Safepal not injected or EVM not enabled. Please check your wallet.");return t}o(s,"evmSafepal");function f(){let e=a();if(!e)throw new Error("Trust Wallet is not injected. Please check your wallet.");return e}o(f,"getInstanceOrThrow");function g(e){let t=e.split(":")[2];return N(t)}o(g,"isValidEvmAddress");var V=F.SAFEPAL,W={type:V,defaultNetwork:l.ETHEREUM},U=a,H=o(async({instance:e,meta:t})=>{let r=h(e,t,l.ETHEREUM),n=[];if(r){let A=await C(r);n.push(A)}return n},"connect"),_=o(e=>{let t,r=h(e.instance,e.meta,l.ETHEREUM);return r&&(t=R({...e,instance:r})),()=>{t&&t()}},"subscribe"),D=B,j=L,O=i,z=o(e=>{let t=u(e),r=w(e);return{name:"SafePal",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa",BRAVE:"https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa",FIREFOX:"https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet",DEFAULT:"https://www.safepal.com/download"},color:"#4A21EF",supportedChains:[...t,...r],needsNamespace:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:n=>u(n)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:n=>w(n)}]}}},"getWalletInfo"),v=o(()=>({config:W,getInstance:U,connect:H,subscribe:_,switchNetwork:D,canSwitchNetworkTo:j,getSigners:O,getWalletInfo:z}),"buildLegacyProvider");import{ProviderBuilder as ne}from"@rango-dev/wallets-core";import"@rango-dev/wallets-core";import{evmBlockchains as X}from"rango-types";var c="safepal",E={name:"SafePal",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa",brave:"https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa",firefox:"https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet",homepage:"https://www.safepal.com/download"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>X(e)}]}},{name:"signers",value:{getSigners:async()=>i(f())}}]};import{ActionBuilder as Y,NamespaceBuilder as q}from"@rango-dev/wallets-core";import{builders as G,connectAndUpdateStateForMultiNetworks as J,intoConnecting as K,intoConnectionFinished as Q,standardizeAndThrowError as Z}from"@rango-dev/wallets-core/namespaces/common";import{actions as p,builders as m}from"@rango-dev/wallets-core/namespaces/evm";var[$,b]=m.changeAccountSubscriber(s).build(),ee=new Y("connect").action(p.connect(s)).before($).before(K).and((e,t)=>{if(t.accounts.some(r=>!g(r)))throw new Error("Non valid EVM address returned from wallet");return t}).and(J).after(Q).or(b).or(Z).build(),te=G.disconnect().after(b).build(),oe=m.canSwitchNetwork().action(p.canSwitchNetwork()).build(),re=m.getChainId().action(p.getChainId(s)).build(),S=new q("EVM",c).action(ee).action(te).action(oe).action(re).build();var ae=1e3,y=o(()=>new ne(c).init(function(e){setTimeout(()=>{if(a()){let[,t]=e.state();t("installed",!0),console.debug("[safepal] instance detected.",e)}},ae)}).config("metadata",E).add("evm",S).build(),"buildProvider");var Oe=o(()=>ie().version("0.0.0",v()).version("1.0.0",y()).build(),"versions");export{Oe as versions};
2
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/signer.ts", "../src/utils.ts", "../src/provider.ts", "../src/constants.ts", "../src/namespaces/evm.ts"],
4
+ "sourcesContent": ["import { defineVersions } from '@rango-dev/wallets-core/utils';\n\nimport { buildLegacyProvider } from './legacy/index.js';\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions()\n .version('0.0.0', buildLegacyProvider())\n .version('1.0.0', buildProvider())\n .build();\n\nexport { versions };\n", "import type {\n CanSwitchNetwork,\n Connect,\n ProviderConnectResult,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n type LegacyProviderInterface,\n LegacyNetworks as Networks,\n} from '@rango-dev/wallets-core/legacy';\nimport {\n canSwitchNetworkToEvm,\n chooseInstance,\n getEvmAccounts,\n subscribeToEvm,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains, solanaBlockchain } from 'rango-types';\n\nimport signer from '../signer.js';\nimport { type Provider, safepal as safepal_instance } from '../utils.js';\n\nconst WALLET = WalletTypes.SAFEPAL;\n\nexport const config = {\n type: WALLET,\n defaultNetwork: Networks.ETHEREUM,\n};\n\nexport const getInstance = safepal_instance;\nexport const connect: Connect = async ({ instance, meta }) => {\n const ethInstance = chooseInstance(instance, meta, Networks.ETHEREUM);\n\n const results: ProviderConnectResult[] = [];\n\n if (ethInstance) {\n const evmResult = await getEvmAccounts(ethInstance);\n results.push(evmResult);\n }\n\n return results;\n};\n\nexport const subscribe: Subscribe = (options) => {\n let cleanup: ReturnType<Subscribe>;\n const ethInstance = chooseInstance(\n options.instance,\n options.meta,\n Networks.ETHEREUM\n );\n\n if (ethInstance) {\n cleanup = subscribeToEvm({ ...options, instance: ethInstance });\n }\n\n return () => {\n if (cleanup) {\n cleanup();\n }\n };\n};\n\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: Provider) => Promise<SignerFactory> =\n 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: 'SafePal',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',\n FIREFOX:\n 'https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet',\n DEFAULT: 'https://www.safepal.com/download',\n },\n color: '#4A21EF',\n supportedChains: [...evms, ...solana],\n needsNamespace: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n evmBlockchains(allBlockchains),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n solanaBlockchain(allBlockchains),\n },\n ],\n },\n };\n};\n\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n subscribe,\n switchNetwork,\n canSwitchNetworkTo,\n getSigners,\n getWalletInfo,\n});\n\nexport { buildLegacyProvider };\n", "import type { Provider } from './utils.js';\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\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);\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 return signers;\n}\n", "import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { isEvmAddress } from '@rango-dev/wallets-shared';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Provider = Record<string, any>;\nexport function safepal(): Provider | null {\n const { safepalProvider: safePalEvm } = window;\n if (!safePalEvm) {\n return null;\n }\n const instances = new Map();\n if (safePalEvm) {\n instances.set(LegacyNetworks.ETHEREUM, safePalEvm);\n }\n\n return instances;\n}\n\nexport function evmSafepal(): EvmProviderApi {\n const instances = safepal();\n const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);\n if (!evmInstance) {\n throw new Error(\n 'Safepal not injected or EVM not enabled. Please check your wallet.'\n );\n }\n return evmInstance as EvmProviderApi;\n}\nexport function getInstanceOrThrow(): Provider {\n const instances = safepal();\n\n if (!instances) {\n throw new Error('Trust Wallet is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n/**\n * Return true if address is a valid EVM address.\n * Accepts:\n * - all-lowercase or all-uppercase 0x-prefixed hex (non-checksummed - allowed)\n * - checksummed (mixed-case according to EIP-55)\n */\nexport function isValidEvmAddress(address: string): boolean {\n // Pick wallet address.\n const walletAddress = address.split(':')[2];\n\n return isEvmAddress(walletAddress);\n}\n", "import { ProviderBuilder } from '@rango-dev/wallets-core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { safepal as safepalInstance } from './utils.js';\n\nconst WAIT_TO_LOAD_INSTANCE_DELAY = 1000;\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n setTimeout(() => {\n if (safepalInstance()) {\n const [, setState] = context.state();\n setState('installed', true);\n console.debug('[safepal] instance detected.', context);\n }\n }, WAIT_TO_LOAD_INSTANCE_DELAY);\n })\n\n .config('metadata', metadata)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "import { type ProviderMetadata } from '@rango-dev/wallets-core';\nimport { type BlockchainMeta, evmBlockchains } from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'safepal';\nexport const metadata: ProviderMetadata = {\n name: 'SafePal',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',\n brave:\n 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',\n firefox:\n 'https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet',\n homepage: 'https://www.safepal.com/download',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n evmBlockchains(allBlockchains),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n builders as commonBuilders,\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\n standardizeAndThrowError,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport { actions, builders } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmSafepal, isValidEvmAddress } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmSafepal)\n .build();\n\n/**\n * Important: Keep this implementation in sync with wallets/core/src/namespaces/evm/builders\n */\nconst connect = new ActionBuilder<EvmActions, 'connect'>('connect')\n .action(actions.connect(evmSafepal))\n .before(changeAccountSubscriber)\n .before(intoConnecting)\n /*\n * Validate all accounts are valid EVM addresses\n * Sometimes wallets may return non-EVM addresses - this check prevents that\n */\n .and((_, args) => {\n if (args.accounts.some((account: string) => !isValidEvmAddress(account))) {\n throw new Error('Non valid EVM address returned from wallet');\n }\n\n return args;\n })\n .and(connectAndUpdateStateForMultiNetworks)\n .after(intoConnectionFinished)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<EvmActions>()\n .after(changeAccountCleanup)\n .build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst getChainId = builders\n .getChainId()\n .action(actions.getChainId(evmSafepal))\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canSwitchNetwork)\n .action(getChainId)\n .build();\n\nexport { evm };\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "Networks", "canSwitchNetworkToEvm", "chooseInstance", "getEvmAccounts", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "solanaBlockchain", "dynamicImportWithRefinedError", "getNetworkInstance", "Networks", "DefaultSignerFactory", "TxType", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "__name", "LegacyNetworks", "isEvmAddress", "safepal", "safePalEvm", "instances", "LegacyNetworks", "__name", "evmSafepal", "evmInstance", "getInstanceOrThrow", "isValidEvmAddress", "address", "walletAddress", "isEvmAddress", "WALLET", "WalletTypes", "config", "Networks", "getInstance", "safepal", "connect", "__name", "instance", "meta", "ethInstance", "chooseInstance", "results", "evmResult", "getEvmAccounts", "subscribe", "options", "cleanup", "subscribeToEvm", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains", "solana", "solanaBlockchain", "allBlockchains", "buildLegacyProvider", "ProviderBuilder", "evmBlockchains", "WALLET_ID", "metadata", "allBlockchains", "evmBlockchains", "getSigners", "getInstanceOrThrow", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "standardizeAndThrowError", "actions", "builders", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmSafepal", "connect", "ActionBuilder", "actions", "intoConnecting", "_", "args", "account", "isValidEvmAddress", "connectAndUpdateStateForMultiNetworks", "intoConnectionFinished", "standardizeAndThrowError", "disconnect", "commonBuilders", "canSwitchNetwork", "getChainId", "evm", "NamespaceBuilder", "WALLET_ID", "WAIT_TO_LOAD_INSTANCE_DELAY", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "safepal", "setState", "metadata", "evm", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+ declare const evm: import("@rango-dev/wallets-core").ProxiedNamespace<EvmActions>;
3
+ export { evm };
4
+ //# sourceMappingURL=evm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/namespaces/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AA0DzE,QAAA,MAAM,GAAG,gEAKC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/signer.ts":{"bytes":715,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":1495,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/legacy/index.ts":{"bytes":3285,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"../signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":1295,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1912,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/common","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/evm","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/provider.ts":{"bytes":713,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":332,"imports":[{"path":"@rango-dev/wallets-core/utils","kind":"import-statement","external":true},{"path":"src/legacy/index.ts","kind":"import-statement","original":"./legacy/index.js"},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":16253},"dist/mod.js":{"imports":[{"path":"@rango-dev/wallets-core/utils","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","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/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/common","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/evm","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":144},"src/legacy/index.ts":{"bytesInOutput":1477},"src/signer.ts":{"bytesInOutput":371},"src/utils.ts":{"bytesInOutput":614},"src/provider.ts":{"bytesInOutput":280},"src/constants.ts":{"bytesInOutput":744},"src/namespaces/evm.ts":{"bytesInOutput":819}},"bytes":4584}}}
@@ -0,0 +1,3 @@
1
+ declare const buildProvider: () => import("@rango-dev/wallets-core").Provider;
2
+ export { buildProvider };
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,aAAa,kDAcP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from './utils.js';
2
+ import type { SignerFactory } from 'rango-types';
3
+ export default function getSigners(provider: Provider): 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,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAQxB"}
@@ -0,0 +1,13 @@
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+ export type Provider = Record<string, any>;
3
+ export declare function safepal(): Provider | null;
4
+ export declare function evmSafepal(): EvmProviderApi;
5
+ export declare function getInstanceOrThrow(): Provider;
6
+ /**
7
+ * Return true if address is a valid EVM address.
8
+ * Accepts:
9
+ * - all-lowercase or all-uppercase 0x-prefixed hex (non-checksummed - allowed)
10
+ * - checksummed (mixed-case according to EIP-55)
11
+ */
12
+ export declare function isValidEvmAddress(address: string): boolean;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAM5F,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3C,wBAAgB,OAAO,IAAI,QAAQ,GAAG,IAAI,CAWzC;AAED,wBAAgB,UAAU,IAAI,cAAc,CAS3C;AACD,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AACD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAK1D"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@rango-dev/provider-safepal",
3
+ "version": "0.0.0-experimental-936229e8-20251208",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "source": "./src/mod.ts",
7
+ "main": "./dist/mod.js",
8
+ "exports": {
9
+ ".": "./dist/mod.js"
10
+ },
11
+ "typings": "dist/mod.d.ts",
12
+ "files": [
13
+ "dist",
14
+ "src"
15
+ ],
16
+ "scripts": {
17
+ "build": "node ../../scripts/build/command.mjs --path wallets/provider-safepal --inputs src/mod.ts",
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
+ "rango-types": "^0.1.89"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }
package/readme.md ADDED
@@ -0,0 +1,35 @@
1
+ # SafePal
2
+ SafePal Wallet integration for hub.
3
+ [Homepage](https://www.safepal.com/) | [Docs](http://devdocs.safepal.com/Connect-wallet/Web/introduction.html)
4
+
5
+ More about implementation status can be found [here](../readme.md).
6
+
7
+ ## Implementation notes/limitations
8
+
9
+ ### Group
10
+
11
+ #### EVM
12
+ SafePal supports both EVM and Solana, but we only support EVM currently.
13
+ The wallet also supports **TON, Sui, Tron, and Aptos**, but these namespaces are **not yet supported**.
14
+
15
+ ### Feature
16
+
17
+ #### ⚠️ Connect
18
+ - SafePal Wallet sometimes returns **non-EVM addresses** (e.g., **Solana addresses**) during connect, which can incorrectly set invalid addresses for the EVM network.
19
+ - In such cases, the integration will **display an error** to prevent incorrect address usage.
20
+
21
+ #### ⚠️ Switch Account
22
+ - On **Solana**, switching accounts triggers a **full page reload**.
23
+ - Since **auto-connect is not supported**, the wallet **does not reconnect automatically** after reload.
24
+ - This results in both EVM and Solana **becoming disconnected** after switching accounts.
25
+
26
+ #### ❌ Auto Connect
27
+ - **Auto-connect is not supported**, as the wallet does **not support silent eager connection** on either EVM or Solana.
28
+ - A **popup is always triggered** when attempting to connect.
29
+ - Due to this limitation, **eager connect has been removed** from this integration.
30
+
31
+
32
+
33
+ ---
34
+
35
+ More wallet information can be found in [readme.md](../readme.md).
@@ -0,0 +1,41 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ import { type BlockchainMeta, evmBlockchains } from 'rango-types';
3
+
4
+ import getSigners from './signer.js';
5
+ import { getInstanceOrThrow } from './utils.js';
6
+
7
+ export const WALLET_ID = 'safepal';
8
+ export const metadata: ProviderMetadata = {
9
+ name: 'SafePal',
10
+ icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg',
11
+ extensions: {
12
+ chrome:
13
+ 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',
14
+ brave:
15
+ 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',
16
+ firefox:
17
+ 'https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet',
18
+ homepage: 'https://www.safepal.com/download',
19
+ },
20
+ properties: [
21
+ {
22
+ name: 'namespaces',
23
+ value: {
24
+ selection: 'multiple',
25
+ data: [
26
+ {
27
+ label: 'EVM',
28
+ value: 'EVM',
29
+ id: 'ETH',
30
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
31
+ evmBlockchains(allBlockchains),
32
+ },
33
+ ],
34
+ },
35
+ },
36
+ {
37
+ name: 'signers',
38
+ value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
39
+ },
40
+ ],
41
+ };
@@ -0,0 +1,127 @@
1
+ import type {
2
+ CanSwitchNetwork,
3
+ Connect,
4
+ ProviderConnectResult,
5
+ Subscribe,
6
+ SwitchNetwork,
7
+ WalletInfo,
8
+ } from '@rango-dev/wallets-shared';
9
+ import type { BlockchainMeta, SignerFactory } from 'rango-types';
10
+
11
+ import {
12
+ type LegacyProviderInterface,
13
+ LegacyNetworks as Networks,
14
+ } from '@rango-dev/wallets-core/legacy';
15
+ import {
16
+ canSwitchNetworkToEvm,
17
+ chooseInstance,
18
+ getEvmAccounts,
19
+ subscribeToEvm,
20
+ switchNetworkForEvm,
21
+ WalletTypes,
22
+ } from '@rango-dev/wallets-shared';
23
+ import { evmBlockchains, solanaBlockchain } from 'rango-types';
24
+
25
+ import signer from '../signer.js';
26
+ import { type Provider, safepal as safepal_instance } from '../utils.js';
27
+
28
+ const WALLET = WalletTypes.SAFEPAL;
29
+
30
+ export const config = {
31
+ type: WALLET,
32
+ defaultNetwork: Networks.ETHEREUM,
33
+ };
34
+
35
+ export const getInstance = safepal_instance;
36
+ export const connect: Connect = async ({ instance, meta }) => {
37
+ const ethInstance = chooseInstance(instance, meta, Networks.ETHEREUM);
38
+
39
+ const results: ProviderConnectResult[] = [];
40
+
41
+ if (ethInstance) {
42
+ const evmResult = await getEvmAccounts(ethInstance);
43
+ results.push(evmResult);
44
+ }
45
+
46
+ return results;
47
+ };
48
+
49
+ export const subscribe: Subscribe = (options) => {
50
+ let cleanup: ReturnType<Subscribe>;
51
+ const ethInstance = chooseInstance(
52
+ options.instance,
53
+ options.meta,
54
+ Networks.ETHEREUM
55
+ );
56
+
57
+ if (ethInstance) {
58
+ cleanup = subscribeToEvm({ ...options, instance: ethInstance });
59
+ }
60
+
61
+ return () => {
62
+ if (cleanup) {
63
+ cleanup();
64
+ }
65
+ };
66
+ };
67
+
68
+ export const switchNetwork: SwitchNetwork = switchNetworkForEvm;
69
+
70
+ export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
71
+
72
+ export const getSigners: (provider: Provider) => Promise<SignerFactory> =
73
+ signer;
74
+
75
+ export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (
76
+ allBlockChains
77
+ ) => {
78
+ const evms = evmBlockchains(allBlockChains);
79
+ const solana = solanaBlockchain(allBlockChains);
80
+ return {
81
+ name: 'SafePal',
82
+ img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safepal/icon.svg',
83
+ installLink: {
84
+ CHROME:
85
+ 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',
86
+ BRAVE:
87
+ 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa',
88
+ FIREFOX:
89
+ 'https://addons.mozilla.org/en-US/firefox/addon/safepal-extension-wallet',
90
+ DEFAULT: 'https://www.safepal.com/download',
91
+ },
92
+ color: '#4A21EF',
93
+ supportedChains: [...evms, ...solana],
94
+ needsNamespace: {
95
+ selection: 'multiple',
96
+ data: [
97
+ {
98
+ label: 'EVM',
99
+ value: 'EVM',
100
+ id: 'ETH',
101
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
102
+ evmBlockchains(allBlockchains),
103
+ },
104
+ {
105
+ label: 'Solana',
106
+ value: 'Solana',
107
+ id: 'SOLANA',
108
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
109
+ solanaBlockchain(allBlockchains),
110
+ },
111
+ ],
112
+ },
113
+ };
114
+ };
115
+
116
+ const buildLegacyProvider: () => LegacyProviderInterface = () => ({
117
+ config,
118
+ getInstance,
119
+ connect,
120
+ subscribe,
121
+ switchNetwork,
122
+ canSwitchNetworkTo,
123
+ getSigners,
124
+ getWalletInfo,
125
+ });
126
+
127
+ export { buildLegacyProvider };
package/src/mod.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { defineVersions } from '@rango-dev/wallets-core/utils';
2
+
3
+ import { buildLegacyProvider } from './legacy/index.js';
4
+ import { buildProvider } from './provider.js';
5
+
6
+ const versions = () =>
7
+ defineVersions()
8
+ .version('0.0.0', buildLegacyProvider())
9
+ .version('1.0.0', buildProvider())
10
+ .build();
11
+
12
+ export { versions };
@@ -0,0 +1,66 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+
3
+ import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
4
+ import {
5
+ builders as commonBuilders,
6
+ connectAndUpdateStateForMultiNetworks,
7
+ intoConnecting,
8
+ intoConnectionFinished,
9
+ standardizeAndThrowError,
10
+ } from '@rango-dev/wallets-core/namespaces/common';
11
+ import { actions, builders } from '@rango-dev/wallets-core/namespaces/evm';
12
+
13
+ import { WALLET_ID } from '../constants.js';
14
+ import { evmSafepal, isValidEvmAddress } from '../utils.js';
15
+
16
+ const [changeAccountSubscriber, changeAccountCleanup] = builders
17
+ .changeAccountSubscriber(evmSafepal)
18
+ .build();
19
+
20
+ /**
21
+ * Important: Keep this implementation in sync with wallets/core/src/namespaces/evm/builders
22
+ */
23
+ const connect = new ActionBuilder<EvmActions, 'connect'>('connect')
24
+ .action(actions.connect(evmSafepal))
25
+ .before(changeAccountSubscriber)
26
+ .before(intoConnecting)
27
+ /*
28
+ * Validate all accounts are valid EVM addresses
29
+ * Sometimes wallets may return non-EVM addresses - this check prevents that
30
+ */
31
+ .and((_, args) => {
32
+ if (args.accounts.some((account: string) => !isValidEvmAddress(account))) {
33
+ throw new Error('Non valid EVM address returned from wallet');
34
+ }
35
+
36
+ return args;
37
+ })
38
+ .and(connectAndUpdateStateForMultiNetworks)
39
+ .after(intoConnectionFinished)
40
+ .or(changeAccountCleanup)
41
+ .or(standardizeAndThrowError)
42
+ .build();
43
+
44
+ const disconnect = commonBuilders
45
+ .disconnect<EvmActions>()
46
+ .after(changeAccountCleanup)
47
+ .build();
48
+
49
+ const canSwitchNetwork = builders
50
+ .canSwitchNetwork()
51
+ .action(actions.canSwitchNetwork())
52
+ .build();
53
+
54
+ const getChainId = builders
55
+ .getChainId()
56
+ .action(actions.getChainId(evmSafepal))
57
+ .build();
58
+
59
+ const evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)
60
+ .action(connect)
61
+ .action(disconnect)
62
+ .action(canSwitchNetwork)
63
+ .action(getChainId)
64
+ .build();
65
+
66
+ export { evm };
@@ -0,0 +1,24 @@
1
+ import { ProviderBuilder } from '@rango-dev/wallets-core';
2
+
3
+ import { metadata, WALLET_ID } from './constants.js';
4
+ import { evm } from './namespaces/evm.js';
5
+ import { safepal as safepalInstance } from './utils.js';
6
+
7
+ const WAIT_TO_LOAD_INSTANCE_DELAY = 1000;
8
+ const buildProvider = () =>
9
+ new ProviderBuilder(WALLET_ID)
10
+ .init(function (context) {
11
+ setTimeout(() => {
12
+ if (safepalInstance()) {
13
+ const [, setState] = context.state();
14
+ setState('installed', true);
15
+ console.debug('[safepal] instance detected.', context);
16
+ }
17
+ }, WAIT_TO_LOAD_INSTANCE_DELAY);
18
+ })
19
+
20
+ .config('metadata', metadata)
21
+ .add('evm', evm)
22
+ .build();
23
+
24
+ export { buildProvider };
package/src/signer.ts ADDED
@@ -0,0 +1,21 @@
1
+ import type { Provider } from './utils.js';
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
+ export default async function getSigners(
12
+ provider: Provider
13
+ ): Promise<SignerFactory> {
14
+ const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
15
+ const signers = new DefaultSignerFactory();
16
+ const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
17
+ async () => await import('@rango-dev/signer-evm')
18
+ );
19
+ signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
20
+ return signers;
21
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,51 @@
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+
3
+ import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
4
+ import { isEvmAddress } from '@rango-dev/wallets-shared';
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ export type Provider = Record<string, any>;
8
+ export function safepal(): Provider | null {
9
+ const { safepalProvider: safePalEvm } = window;
10
+ if (!safePalEvm) {
11
+ return null;
12
+ }
13
+ const instances = new Map();
14
+ if (safePalEvm) {
15
+ instances.set(LegacyNetworks.ETHEREUM, safePalEvm);
16
+ }
17
+
18
+ return instances;
19
+ }
20
+
21
+ export function evmSafepal(): EvmProviderApi {
22
+ const instances = safepal();
23
+ const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);
24
+ if (!evmInstance) {
25
+ throw new Error(
26
+ 'Safepal not injected or EVM not enabled. Please check your wallet.'
27
+ );
28
+ }
29
+ return evmInstance as EvmProviderApi;
30
+ }
31
+ export function getInstanceOrThrow(): Provider {
32
+ const instances = safepal();
33
+
34
+ if (!instances) {
35
+ throw new Error('Trust Wallet is not injected. Please check your wallet.');
36
+ }
37
+
38
+ return instances;
39
+ }
40
+ /**
41
+ * Return true if address is a valid EVM address.
42
+ * Accepts:
43
+ * - all-lowercase or all-uppercase 0x-prefixed hex (non-checksummed - allowed)
44
+ * - checksummed (mixed-case according to EIP-55)
45
+ */
46
+ export function isValidEvmAddress(address: string): boolean {
47
+ // Pick wallet address.
48
+ const walletAddress = address.split(':')[2];
49
+
50
+ return isEvmAddress(walletAddress);
51
+ }