@rango-dev/wallets-core 0.5.1-next.10 → 0.5.1-next.11
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/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/helpers.d.ts +11 -4
- package/dist/helpers.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/provider.d.ts.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wallet.d.ts +6 -5
- package/dist/wallet.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/constants.ts +1 -1
- package/src/helpers.ts +90 -30
- package/src/provider.tsx +20 -9
- package/src/types.ts +3 -1
- package/src/wallet.ts +28 -6
package/dist/constants.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const LAST_CONNECTED_WALLETS = "last-connected-wallets";
|
|
2
2
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,2BAA2B,CAAC"}
|
package/dist/helpers.d.ts
CHANGED
|
@@ -19,10 +19,17 @@ export declare function isAsync(fn: Function): boolean;
|
|
|
19
19
|
export declare function needsCheckInstallation(options: Options): boolean;
|
|
20
20
|
export declare function isWalletDerivedFromWalletConnect(wallet_type: WalletType): boolean;
|
|
21
21
|
export declare function getComptaibleProvider(supportedChains: BlockchainMeta[], provider: any, type: WalletType): any;
|
|
22
|
-
export declare function
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
export declare function tryPersistWallet({ type, walletActions, getState, }: {
|
|
23
|
+
type: WalletType;
|
|
24
|
+
walletActions: WalletActions;
|
|
25
|
+
getState: (walletType: WalletType) => WalletState;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
export declare function tryRemoveWalletFromPersistance({ type, walletActions, }: {
|
|
28
|
+
type: WalletType;
|
|
29
|
+
walletActions: WalletActions;
|
|
30
|
+
}): void;
|
|
31
|
+
export declare function clearPersistance(): void;
|
|
32
|
+
export declare function autoConnect(wallets: WalletProviders, getWalletInstance: (wallet: {
|
|
26
33
|
actions: WalletActions;
|
|
27
34
|
config: WalletConfig;
|
|
28
35
|
}) => Wallet<any>): Promise<void>;
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,YAAY,EACZ,UAAU,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnE,wBAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,GAAG,GAAG,IAAI,CAEnE;AAED,eAAO,MAAM,kBAAkB,EAAE,WAOhC,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SA0BtD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,UAGzB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,YAOzB;AAED,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAOA;AAED,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,KAAK,GAAG,UAAU,EAAE,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,KAAK,GAAG,UAAU,EAAE,CAIpE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EAAE,GACxB,eAAe,CAYjB;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,WAEnC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,WAGtD;AAOD,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,UAAU,WAEvE;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,cAAc,EAAE,EACjC,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,UAAU,OAejB;AAED,wBAAsB,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,YAAY,EACZ,UAAU,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnE,wBAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,GAAG,GAAG,IAAI,CAEnE;AAED,eAAO,MAAM,kBAAkB,EAAE,WAOhC,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SA0BtD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,UAGzB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,YAOzB;AAED,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAOA;AAED,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,KAAK,GAAG,UAAU,EAAE,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,KAAK,GAAG,UAAU,EAAE,CAIpE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EAAE,GACxB,eAAe,CAYjB;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,WAEnC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,WAGtD;AAOD,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,UAAU,WAEvE;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,cAAc,EAAE,EACjC,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,UAAU,OAejB;AAED,wBAAsB,gBAAgB,CAAC,EACrC,IAAI,EACJ,aAAa,EACb,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,WAAW,CAAC;CACnD,iBAoBA;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,aAAa,GACd,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;CAC9B,QAUA;AAED,wBAAgB,gBAAgB,SAI/B;AAMD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,CAAC,MAAM,EAAE;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,KAAK,MAAM,CAAC,GAAG,CAAC,iBAqDlB;AAOD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,GAAG,EACf,aAAa,CAAC,EAAE,kBAAkB,sBAoBnC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var U=Object.defineProperty;var i=(e,t)=>U(e,"name",{value:t,configurable:!0});import _ from"@walletconnect/ethereum-provider";import{convertEvmBlockchainMetaToEvmChainInfo as R,evmChainsToRpcMap as D,WalletTypes as F}from"@rango-dev/wallets-shared";import{isEvmBlockchain as $}from"rango-types";var f=class{getItem(t){let n=localStorage.getItem(t);return n?JSON.parse(n):null}setItem(t,n){localStorage.setItem(t,JSON.stringify(n))}removeItem(t){localStorage.removeItem(t)}};i(f,"Persistor");var u="last-connected-wallets";function ht(e,t){return e.find(n=>n.type===t)||null}i(ht,"choose");var I={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null};function E(e,t){if(t.type==="new_state"){let n=e[t.wallet];return n?{...e,[t.wallet]:{...n,[t.name]:t.value}}:{...e,[t.wallet]:{...I,[t.name]:t.value}}}return e}i(E,"state_reducer");function Y(e,t){return`${t||""}:${e}`}i(Y,"formatAddressWithNetwork");function y(e,t){return e?e.map(n=>Y(n,t)):[]}i(y,"accountAddressesWithNetwork");function ft(e){let[t,n]=e.split(":");return{network:t,address:n}}i(ft,"readAccountAddress");function P(e){return Object.entries(e).filter(([,t])=>t?.connected).map(([t])=>t)}i(P,"connectedWallets");function T(e){return Object.entries(e).map(([t])=>t)}i(T,"availableWallets");function A(e){let t=new Map;return e.forEach(n=>{let{config:o,...a}=n;t.set(o.type,{actions:a,config:o})}),t}i(A,"checkWalletProviders");function wt(e){return e?.constructor?.name==="AsyncFunction"}i(wt,"isAsync");function C(e){let{checkInstallation:t=!0}=e.config;return t}i(C,"needsCheckInstallation");function z(e){return e===F.WALLET_CONNECT}i(z,"isWalletDerivedFromWalletConnect");function b(e,t,n){if(z(n)){let o=e.filter($),a=D(R(o));return new _({qrcode:!1,rpc:a,connector:t,chainId:t.chainId})}return t}i(b,"getComptaibleProvider");async function B(e){let t=new f,n=t.getItem(u),o=!!n?.find(a=>a===e);n&&!o?t.setItem(u,n.concat(e)):t.setItem(u,[e])}i(B,"persistWallet");function S(e){let t=new f,n=t.getItem(u);n&&t.setItem(u,n.filter(o=>o!==e))}i(S,"removeWalletFromPersist");function O(){let e=new f;e.getItem(u)&&e.removeItem(u)}i(O,"clearPersistStorage");async function M(e,t){let o=new f().getItem(u);if(o&&o.length){let a=[];o.forEach(s=>{let d=e.get(s);if(d){let r=t(d);a.push({walletType:s,connect:r.connect.bind(r)})}});for(let{connect:s,walletType:d}of a)try{await s()}catch{S(d)}}}i(M,"autoConnect");function x(e,t){return i((o,a,s,d,r)=>{e({type:"new_state",wallet:o,name:a,value:s}),t&&t(o,a,s,d,r)},"handler")}i(x,"makeEventHandler");import V,{useEffect as W,useReducer as X}from"react";import{useContext as J,useRef as K}from"react";import{createContext as j}from"react";var w="Context hasn't been initialized yet.",q={async connect(){throw new Error(w)},async disconnect(){throw new Error(w)},async disconnectAll(){throw new Error(w)},state(){throw new Error(w)},canSwitchNetworkTo(){throw new Error(w)},providers(){throw new Error(w)},getWalletInfo(){throw new Error(w)},getSigners(){throw new Error(w)}},k=j(q);import{getBlockChainNameFromId as g,Networks as m}from"@rango-dev/wallets-shared";var H=(d=>(d.CONNECTED="connected",d.CONNECTING="connecting",d.REACHABLE="reachable",d.INSTALLED="installed",d.ACCOUNTS="accounts",d.NETWORK="network",d))(H||{});var v=class{constructor(t,n){this.actions=n,this.options=t,this.provider=null,this.meta=[],this.state={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null},C(t)||this.setInstalledAs(!0)}async eagerConnection(){return this.state.connected&&this.provider?{accounts:this.state.accounts,network:this.state.network,provider:this.provider}:null}async connect(t){if(this.state.connecting)throw new Error("Connecting...");let n=await this.eagerConnection(),o=this.state.network,a=t||o||this.options.config.defaultNetwork;if(n){let c=o!==a&&!!a;if(o===a)return n;if(c&&this.actions.switchNetwork)return await this.actions.switchNetwork({instance:this.provider,meta:this.meta,network:a,newInstance:this.tryGetInstance.bind(this)}),{accounts:n.accounts,network:a,provider:this.provider}}let s=await this.tryGetInstance({network:t});this.updateState({connecting:!0}),this.setInstalledAs(!0);try{var d=await this.actions.connect({instance:s,network:a||void 0,meta:this.meta||[]})}catch(c){throw this.resetState(),c}this.updateState({connected:!0,reachable:!0,connecting:!1});let r=[],l=null;if(Array.isArray(d))r=d.flatMap(p=>{let h=p.chainId||m.Unknown,N=g(h,this.meta)||m.Unknown;return y(p.accounts,N)}).filter(Boolean),l=a||this.options.config.defaultNetwork;else{let c=d.chainId||m.Unknown,p=g(c,this.meta)||m.Unknown;r=y(d.accounts,p),l=p}return r.length>0&&this.updateState({accounts:r,network:l}),{accounts:this.state.accounts,network:this.state.network,provider:this.provider}}async disconnect(){this.resetState(),this.actions.disconnect&&this.actions.disconnect({instance:this.provider,destroyInstance:()=>{this.setProvider(null)}})}getSigners(t){return this.actions.getSigners(t)}getWalletInfo(t){return this.actions.getWalletInfo(t)}canSwitchNetworkTo(t,n){let o=this.actions.canSwitchNetworkTo;return o?o({network:t,meta:this.meta,provider:n}):!1}onInit(){this.options.config.isAsyncInstance||this.actions.getInstance()&&!this.state.installed&&this.setInstalledAs(!0)}setProvider(t){this.provider=t,t&&this.actions.subscribe&&this.actions.subscribe({instance:t,state:this.state,meta:this.meta,connect:this.connect.bind(this),disconnect:this.disconnect.bind(this),updateAccounts:(n,o)=>{let a=this.state.network;o&&(a=g(o,this.meta)||m.Unknown);let s=y(n,a);s.length>0&&this.updateState({accounts:s})},updateChainId:n=>{let o=n?g(n,this.meta):m.Unknown;this.updateState({network:o})}})}setMeta(t){this.meta=t}setHandler(t){this.options.handler=t}getState(){return this.state}updateState(t){let n=[];typeof t.connected<"u"&&(this.state.connected=t.connected,n.push(["connected",t.connected])),typeof t.connecting<"u"&&(this.state.connecting=t.connecting,n.push(["connecting",t.connecting])),typeof t.reachable<"u"&&(this.state.reachable=t.reachable,n.push(["reachable",t.reachable])),typeof t.installed<"u"&&(this.state.installed=t.installed,n.push(["installed",t.installed])),typeof t.accounts<"u"&&(this.state.accounts=t.accounts,n.push(["accounts",t.accounts])),typeof t.network<"u"&&(this.state.network=t.network,n.push(["network",t.network]));let o=this.getState();n.forEach(([a,s])=>{this.options.handler(this.options.config.type,a,s,o,this.meta)})}resetState(){this.updateState({connected:!1,connecting:!1,reachable:!1,accounts:null,network:null})}setInstalledAs(t){!C(this.options)&&t===!1||this.updateState({installed:t})}async tryGetInstance({network:t,force:n}){let o=null;if(this.setProvider(null),this.options.config.isAsyncInstance){let a={currentProvider:this.provider,meta:this.meta,force:n||!1,updateChainId:s=>{let d=s?g(s,this.meta):m.Unknown;this.updateState({network:d})}};t&&(a.network=t),o=await this.actions.getInstance(a)}else o=this.actions.getInstance();if(!o){this.setInstalledAs(!1),this.resetState();let a=`It seems your selected wallet (${this.options.config.type}) isn't installed.`;throw new Error(a)}return this.setProvider(o),o}};i(v,"Wallet");var L=v;function G(e){let t=K({});function n(o){let a=o.config.type;return typeof t.current[a]>"u"&&(t.current[a]=new L({config:o.config,handler:e},o.actions)),t.current[a]}return i(n,"updater"),n}i(G,"useInitializers");function Q(){let e=J(k);if(!e)throw Error("useWallet can only be used within the Provider component");return e}i(Q,"useWallets");function Z(e){let[t,n]=X(E,{}),o=G(x(n,e.onUpdateState)),a=e.providers,s=A(a),d={async connect(r,l){let c=s.get(r);if(!c)throw new Error(`You should add ${r} to provider first.`);let h=await o(c).connect(l);return e.autoConnect&&B(r),h},async disconnect(r){let l=s.get(r);if(!l)throw new Error(`You should add ${r} to provider first.`);await o(l).disconnect(),e.autoConnect&&S(r)},async disconnectAll(){let r=[];return P(t).forEach(l=>{let c=s.get(l);if(c){let p=o(c);r.push(p.disconnect())}}),e.autoConnect&&O(),await Promise.allSettled(r)},state(r){return t[r]||I},canSwitchNetworkTo(r,l){let c=s.get(r);if(!c)return!1;let p=o(c);return p.canSwitchNetworkTo?p.canSwitchNetworkTo(l,p.provider):!1},providers(){let r={};return T(t).forEach(l=>{let c=s.get(l);if(c){let p=o(c);r[l]=p.provider}}),r},getWalletInfo(r){let l=s.get(r);if(!l)throw new Error(`You should add ${r} to provider first.`);return l.actions.getWalletInfo(e.allBlockChains||[])},getSigners(r){let l=s.get(r);if(!l)throw new Error(`You should add ${r} to provider first.`);let c=o(l),p=c.getWalletInfo(e.allBlockChains||[]).supportedChains,h=b(p,c.provider,r);return c.getSigners(h)}};return W(()=>{s.forEach(r=>{let l=o(r),c=i(()=>{l.onInit&&l.onInit()},"runOnInit"),p=i(h=>{h.target&&h.target.readyState==="complete"&&(c(),document.removeEventListener("readystatechange",p))},"initWhenPageIsReady");c(),document.addEventListener("readystatechange",p)})},[]),W(()=>{e.allBlockChains&&s.forEach(l=>{let c=o(l),p=c.getWalletInfo(e.allBlockChains||[]).supportedChains;c.setMeta(p)})},[e.allBlockChains]),W(()=>{s.forEach(r=>{o(r).setHandler(x(n,e.onUpdateState))})},[e.onUpdateState]),W(()=>{e.allBlockChains&&e.allBlockChains.length&&e.autoConnect&&(async()=>await M(s,o))()},[e.autoConnect,e.allBlockChains]),V.createElement(k.Provider,{value:d},e.children)}i(Z,"Provider");var tt=Z;export{H as Events,tt as Provider,y as accountAddressesWithNetwork,M as autoConnect,T as availableWallets,A as checkWalletProviders,ht as choose,O as clearPersistStorage,P as connectedWallets,I as defaultWalletState,Y as formatAddressWithNetwork,b as getComptaibleProvider,wt as isAsync,z as isWalletDerivedFromWalletConnect,x as makeEventHandler,C as needsCheckInstallation,B as persistWallet,ft as readAccountAddress,S as removeWalletFromPersist,E as state_reducer,Q as useWallets};
|
|
1
|
+
var G=Object.defineProperty;var s=(e,t)=>G(e,"name",{value:t,configurable:!0});import _ from"@walletconnect/ethereum-provider";import{convertEvmBlockchainMetaToEvmChainInfo as F,evmChainsToRpcMap as U,WalletTypes as D}from"@rango-dev/wallets-shared";import{isEvmBlockchain as $}from"rango-types";var w=class{getItem(t){let n=localStorage.getItem(t);return n?JSON.parse(n):null}setItem(t,n){localStorage.setItem(t,JSON.stringify(n))}removeItem(t){localStorage.removeItem(t)}};s(w,"Persistor");var f="last-connected-wallets";function wt(e,t){return e.find(n=>n.type===t)||null}s(wt,"choose");var I={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null};function x(e,t){if(t.type==="new_state"){let n=e[t.wallet];return n?{...e,[t.wallet]:{...n,[t.name]:t.value}}:{...e,[t.wallet]:{...I,[t.name]:t.value}}}return e}s(x,"state_reducer");function Y(e,t){return`${t||""}:${e}`}s(Y,"formatAddressWithNetwork");function k(e,t){return e?e.map(n=>Y(n,t)):[]}s(k,"accountAddressesWithNetwork");function mt(e){let[t,n]=e.split(":");return{network:t,address:n}}s(mt,"readAccountAddress");function T(e){return Object.entries(e).filter(([,t])=>t?.connected).map(([t])=>t)}s(T,"connectedWallets");function N(e){return Object.entries(e).map(([t])=>t)}s(N,"availableWallets");function A(e){let t=new Map;return e.forEach(n=>{let{config:r,...o}=n;t.set(r.type,{actions:o,config:r})}),t}s(A,"checkWalletProviders");function gt(e){return e?.constructor?.name==="AsyncFunction"}s(gt,"isAsync");function S(e){let{checkInstallation:t=!0}=e.config;return t}s(S,"needsCheckInstallation");function j(e){return e===D.WALLET_CONNECT}s(j,"isWalletDerivedFromWalletConnect");function b(e,t,n){if(j(n)){let r=e.filter($),o=U(F(r));return new _({qrcode:!1,rpc:o,connector:t,chainId:t.chainId})}return t}s(b,"getComptaibleProvider");async function B({type:e,walletActions:t,getState:n}){if(t.canEagerConnect){let r=new w,o=r.getItem(f);o?.find(d=>!n(d).connected)&&E();let c=!!o?.find(d=>d===e);o&&!c?r.setItem(f,o.concat(e)):r.setItem(f,[e])}}s(B,"tryPersistWallet");function O({type:e,walletActions:t}){if(t.canEagerConnect){let n=new w,r=n.getItem(f);r&&n.setItem(f,r.filter(o=>o!==e))}}s(O,"tryRemoveWalletFromPersistance");function E(){let e=new w;e.getItem(f)&&e.removeItem(f)}s(E,"clearPersistance");async function M(e,t){let n=new w,r=n.getItem(f);if(r&&r.length){let o=[];r.forEach(d=>{let a=e.get(d);if(a){let i=t(a);o.push({walletType:d,eagerConnect:i.connect.bind(i)})}});let u=await Promise.allSettled(o.map(({eagerConnect:d})=>d()));if(!!u.find(({status:d})=>d==="fulfilled")){let d=[];u.forEach(({status:a},i)=>{a==="rejected"&&d.push(o[i].walletType)}),d.length&&n.setItem(f,r.filter(a=>!d.includes(a)))}}}s(M,"autoConnect");function P(e,t){return s((r,o,u,c,d)=>{e({type:"new_state",wallet:r,name:o,value:u}),t&&t(r,o,u,c,d)},"handler")}s(P,"makeEventHandler");import V,{useEffect as W,useReducer as X,useRef as Z}from"react";import{useContext as J,useRef as K}from"react";import{createContext as z}from"react";var m="Context hasn't been initialized yet.",q={async connect(){throw new Error(m)},async disconnect(){throw new Error(m)},async disconnectAll(){throw new Error(m)},state(){throw new Error(m)},canSwitchNetworkTo(){throw new Error(m)},providers(){throw new Error(m)},getWalletInfo(){throw new Error(m)},getSigners(){throw new Error(m)}},v=z(q);import{getBlockChainNameFromId as y,Networks as g}from"@rango-dev/wallets-shared";var H=(c=>(c.CONNECTED="connected",c.CONNECTING="connecting",c.REACHABLE="reachable",c.INSTALLED="installed",c.ACCOUNTS="accounts",c.NETWORK="network",c))(H||{});var C=class{constructor(t,n){this.actions=n,this.options=t,this.provider=null,this.meta=[],this.state={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null},S(t)||this.setInstalledAs(!0)}async getConnectionFromState(){return this.state.connected&&this.provider?{accounts:this.state.accounts,network:this.state.network,provider:this.provider}:null}async connect(t){if(this.state.connecting)throw new Error("Connecting...");let n=await this.getConnectionFromState(),r=this.state.network,o=t||r||this.options.config.defaultNetwork;if(n){let i=r!==o&&!!o;if(r===o)return n;if(i&&this.actions.switchNetwork)return await this.actions.switchNetwork({instance:this.provider,meta:this.meta,network:o,newInstance:this.tryGetInstance.bind(this)}),{accounts:n.accounts,network:o,provider:this.provider}}let u=await this.tryGetInstance({network:t});this.updateState({connecting:!0}),this.setInstalledAs(!0);try{var c=await this.actions.connect({instance:u,network:o||void 0,meta:this.meta||[]})}catch(i){throw this.resetState(),i}this.updateState({connected:!0,reachable:!0,connecting:!1});let d=[],a=null;if(Array.isArray(c))d=c.flatMap(l=>{let p=l.chainId||g.Unknown,h=y(p,this.meta)||g.Unknown;return k(l.accounts,h)}).filter(Boolean),a=o||this.options.config.defaultNetwork;else{let i=c.chainId||g.Unknown,l=y(i,this.meta)||g.Unknown;d=k(c.accounts,l),a=l}return d.length>0&&this.updateState({accounts:d,network:a}),{accounts:this.state.accounts,network:this.state.network,provider:this.provider}}async disconnect(){this.resetState(),this.actions.disconnect&&this.actions.disconnect({instance:this.provider,destroyInstance:()=>{this.setProvider(null)}})}async eagerConnect(){let t=await this.tryGetInstance({network:void 0}),{canEagerConnect:n}=this.actions,r=`can't restore connection for ${this.options.config.type} .`;if(n){if(await n({instance:t}))return this.connect();throw new Error(r)}else throw new Error(r)}getSigners(t){return this.actions.getSigners(t)}getWalletInfo(t){return this.actions.getWalletInfo(t)}canSwitchNetworkTo(t,n){let r=this.actions.canSwitchNetworkTo;return r?r({network:t,meta:this.meta,provider:n}):!1}onInit(){this.options.config.isAsyncInstance||this.actions.getInstance()&&!this.state.installed&&this.setInstalledAs(!0)}setProvider(t){this.provider=t,t&&this.actions.subscribe&&this.actions.subscribe({instance:t,state:this.state,meta:this.meta,connect:this.connect.bind(this),disconnect:this.disconnect.bind(this),updateAccounts:(n,r)=>{let o=this.state.network;r&&(o=y(r,this.meta)||g.Unknown);let u=k(n,o);u.length>0&&this.updateState({accounts:u})},updateChainId:n=>{let r=n?y(n,this.meta):g.Unknown;this.updateState({network:r})}})}setMeta(t){this.meta=t}setHandler(t){this.options.handler=t}getState(){return this.state}updateState(t){let n=[];typeof t.connected<"u"&&(this.state.connected=t.connected,n.push(["connected",t.connected])),typeof t.connecting<"u"&&(this.state.connecting=t.connecting,n.push(["connecting",t.connecting])),typeof t.reachable<"u"&&(this.state.reachable=t.reachable,n.push(["reachable",t.reachable])),typeof t.installed<"u"&&(this.state.installed=t.installed,n.push(["installed",t.installed])),typeof t.accounts<"u"&&(this.state.accounts=t.accounts,n.push(["accounts",t.accounts])),typeof t.network<"u"&&(this.state.network=t.network,n.push(["network",t.network]));let r=this.getState();n.forEach(([o,u])=>{this.options.handler(this.options.config.type,o,u,r,this.meta)})}resetState(){this.updateState({connected:!1,connecting:!1,reachable:!1,accounts:null,network:null})}setInstalledAs(t){!S(this.options)&&t===!1||this.updateState({installed:t})}async tryGetInstance({network:t,force:n}){let r=null;if(this.setProvider(null),this.options.config.isAsyncInstance){let o={currentProvider:this.provider,meta:this.meta,force:n||!1,updateChainId:u=>{let c=u?y(u,this.meta):g.Unknown;this.updateState({network:c})}};t&&(o.network=t),r=await this.actions.getInstance(o)}else r=this.actions.getInstance();if(!r){this.setInstalledAs(!1),this.resetState();let o=`It seems your selected wallet (${this.options.config.type}) isn't installed.`;throw new Error(o)}return this.setProvider(r),r}};s(C,"Wallet");var R=C;function L(e){let t=K({});function n(r){let o=r.config.type;return typeof t.current[o]>"u"&&(t.current[o]=new R({config:r.config,handler:e},r.actions)),t.current[o]}return s(n,"updater"),n}s(L,"useInitializers");function Q(){let e=J(v);if(!e)throw Error("useWallet can only be used within the Provider component");return e}s(Q,"useWallets");function tt(e){let[t,n]=X(x,{}),r=Z(!1),o=L(P(n,e.onUpdateState)),u=e.providers,c=A(u),d={async connect(a,i){let l=c.get(a);if(!l)throw new Error(`You should add ${a} to provider first.`);let h=await o(l).connect(i);return e.autoConnect&&B({type:a,walletActions:l.actions,getState:d.state}),h},async disconnect(a){let i=c.get(a);if(!i)throw new Error(`You should add ${a} to provider first.`);await o(i).disconnect(),e.autoConnect&&O({type:a,walletActions:i.actions})},async disconnectAll(){let a=[];return T(t).forEach(i=>{let l=c.get(i);if(l){let p=o(l);a.push(p.disconnect())}}),e.autoConnect&&E(),await Promise.allSettled(a)},state(a){return t[a]||I},canSwitchNetworkTo(a,i){let l=c.get(a);if(!l)return!1;let p=o(l);return p.canSwitchNetworkTo?p.canSwitchNetworkTo(i,p.provider):!1},providers(){let a={};return N(t).forEach(i=>{let l=c.get(i);if(l){let p=o(l);a[i]=p.provider}}),a},getWalletInfo(a){let i=c.get(a);if(!i)throw new Error(`You should add ${a} to provider first.`);return i.actions.getWalletInfo(e.allBlockChains||[])},getSigners(a){let i=c.get(a);if(!i)throw new Error(`You should add ${a} to provider first.`);let l=o(i),p=l.getWalletInfo(e.allBlockChains||[]).supportedChains,h=b(p,l.provider,a);return l.getSigners(h)}};return W(()=>{c.forEach(a=>{let i=o(a),l=s(()=>{i.onInit&&i.onInit()},"runOnInit"),p=s(h=>{h.target&&h.target.readyState==="complete"&&(l(),document.removeEventListener("readystatechange",p))},"initWhenPageIsReady");l(),document.addEventListener("readystatechange",p)})},[]),W(()=>{e.allBlockChains&&c.forEach(i=>{let l=o(i),p=l.getWalletInfo(e.allBlockChains||[]).supportedChains;l.setMeta(p)})},[e.allBlockChains]),W(()=>{c.forEach(a=>{o(a).setHandler(P(n,e.onUpdateState))})},[e.onUpdateState]),W(()=>{e.allBlockChains&&e.allBlockChains.length&&e.autoConnect&&!r.current&&(r.current=!0,(async()=>await M(c,o))())},[e.autoConnect,e.allBlockChains]),V.createElement(v.Provider,{value:d},e.children)}s(tt,"Provider");var et=tt;export{H as Events,et as Provider,k as accountAddressesWithNetwork,M as autoConnect,N as availableWallets,A as checkWalletProviders,wt as choose,E as clearPersistance,T as connectedWallets,I as defaultWalletState,Y as formatAddressWithNetwork,b as getComptaibleProvider,gt as isAsync,j as isWalletDerivedFromWalletConnect,P as makeEventHandler,S as needsCheckInstallation,mt as readAccountAddress,x as state_reducer,B as tryPersistWallet,O as tryRemoveWalletFromPersistance,Q as useWallets};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/helpers.ts", "../src/persistor.ts", "../src/constants.ts", "../src/provider.tsx", "../src/hooks.ts", "../src/context.ts", "../src/wallet.ts", "../src/types.ts"],
|
|
4
|
-
"sourcesContent": ["import WalletConnectProvider from '@walletconnect/ethereum-provider';\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n evmChainsToRpcMap,\n Network,\n WalletConfig,\n WalletType,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport {\n State,\n WalletActions,\n ProviderInterface,\n WalletProviders,\n} from './types';\nimport Wallet, { Options, State as WalletState } from './wallet';\nimport type { BlockchainMeta } from 'rango-types';\nimport { isEvmBlockchain } from 'rango-types';\nimport { Persistor } from './persistor';\nimport { LASTE_CONNECTED_WALLETS } from './constants';\nimport type { EventHandler as WalletEventHandler } from './wallet';\n\nexport function choose(wallets: any[], type: WalletType): any | null {\n return wallets.find((wallet) => wallet.type === type) || null;\n}\n\nexport const defaultWalletState: WalletState = {\n connected: false,\n connecting: false,\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n};\n\nexport function state_reducer(state: State, action: any) {\n if (action.type === 'new_state') {\n // TODO fix problem and remove ts-ignore\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const target_wallet = state[action.wallet];\n if (!target_wallet) {\n return {\n ...state,\n [action.wallet]: {\n ...defaultWalletState,\n [action.name]: action.value,\n },\n };\n }\n\n return {\n ...state,\n [action.wallet]: {\n ...target_wallet,\n [action.name]: action.value,\n },\n };\n }\n\n return state;\n}\n\nexport function formatAddressWithNetwork(\n address: string,\n network?: Network | null\n) {\n return `${network || ''}:${address}`;\n}\n\nexport function accountAddressesWithNetwork(\n addresses: string[] | null,\n network?: Network | null\n) {\n if (!addresses) return [];\n\n return addresses.map((address) => {\n return formatAddressWithNetwork(address, network);\n });\n}\n\nexport function readAccountAddress(addressWithNetwork: string): {\n address: string;\n network: Network;\n} {\n const [network, address] = addressWithNetwork.split(':');\n\n return {\n network,\n address,\n };\n}\n\nexport function connectedWallets(providersState: State): WalletType[] {\n return Object.entries(providersState)\n .filter(([, wallet_state]) => {\n return wallet_state?.connected;\n })\n .map(([type]) => {\n return type;\n });\n}\n\nexport function availableWallets(providersState: State): WalletType[] {\n return Object.entries(providersState).map(([type]) => {\n return type;\n });\n}\n\nexport function checkWalletProviders(\n list: ProviderInterface[]\n): WalletProviders {\n const wallets: WalletProviders = new Map();\n\n list.forEach((provider) => {\n const { config, ...actions } = provider;\n wallets.set(config.type, {\n actions,\n config,\n });\n });\n\n return wallets;\n}\n\n/* eslint-disable @typescript-eslint/ban-types */\nexport function isAsync(fn: Function) {\n return fn?.constructor?.name === 'AsyncFunction';\n}\n\nexport function needsCheckInstallation(options: Options) {\n const { checkInstallation = true } = options.config;\n return checkInstallation;\n}\n\n/*\n WalletConnect instance is not compatible with ethers.providers.Web3Provider,\n Here we are returning a comptable instance, instead of the original one. \n*/\n\nexport function isWalletDerivedFromWalletConnect(wallet_type: WalletType) {\n return wallet_type === WalletTypes.WALLET_CONNECT;\n}\n\nexport function getComptaibleProvider(\n supportedChains: BlockchainMeta[],\n provider: any,\n type: WalletType\n) {\n if (isWalletDerivedFromWalletConnect(type)) {\n const evmBlockchains = supportedChains.filter(isEvmBlockchain);\n const rpcUrls = evmChainsToRpcMap(\n convertEvmBlockchainMetaToEvmChainInfo(evmBlockchains)\n );\n return new WalletConnectProvider({\n qrcode: false,\n rpc: rpcUrls,\n connector: provider,\n chainId: provider.chainId,\n });\n }\n return provider;\n}\n\nexport async function persistWallet(type: WalletType) {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LASTE_CONNECTED_WALLETS);\n const walletAlreadyPersisted = !!wallets?.find((wallet) => wallet === type);\n if (wallets && !walletAlreadyPersisted)\n persistor.setItem(LASTE_CONNECTED_WALLETS, wallets.concat(type));\n else persistor.setItem(LASTE_CONNECTED_WALLETS, [type]);\n}\n\nexport function removeWalletFromPersist(type: WalletType) {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LASTE_CONNECTED_WALLETS);\n if (wallets)\n persistor.setItem(\n LASTE_CONNECTED_WALLETS,\n wallets.filter((wallet) => wallet !== type)\n );\n}\n\nexport function clearPersistStorage() {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LASTE_CONNECTED_WALLETS);\n if (wallets) persistor.removeItem(LASTE_CONNECTED_WALLETS);\n}\n\nexport async function autoConnect(\n wallets: WalletProviders,\n addWalletRef: (wallet: {\n actions: WalletActions;\n config: WalletConfig;\n }) => Wallet<any>\n) {\n const persistor = new Persistor<string[]>();\n const lastConnectedWallets = persistor.getItem(LASTE_CONNECTED_WALLETS);\n if (lastConnectedWallets && lastConnectedWallets.length) {\n const connect_promises: {\n walletType: WalletType;\n connect: () => Promise<any>;\n }[] = [];\n lastConnectedWallets.forEach((walletType) => {\n const wallet = wallets.get(walletType);\n\n if (!!wallet) {\n const ref = addWalletRef(wallet);\n connect_promises.push({ walletType, connect: ref.connect.bind(ref) });\n }\n });\n\n for (const { connect, walletType } of connect_promises) {\n try {\n await connect();\n } catch (error) {\n removeWalletFromPersist(walletType);\n }\n }\n }\n}\n/*\n Our event handler includes an internal state updater, and a notifier\n for the outside listener.\n On creating first wallet refrence, and on chaning `props.onUpdateState`\n we are using this function.\n*/\nexport function makeEventHandler(\n dispatcher: any,\n onUpdateState?: WalletEventHandler\n) {\n const handler: WalletEventHandler = (\n type,\n name,\n value,\n coreState,\n supportedChains\n ) => {\n const action = { type: 'new_state', wallet: type, name, value };\n // Update state\n dispatcher(action);\n\n // Giving the event to the outside listener\n if (onUpdateState) {\n onUpdateState(type, name, value, coreState, supportedChains);\n }\n };\n\n return handler;\n}\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "export const LASTE_CONNECTED_WALLETS = 'last-connected-wallets';\n", "import React, { useEffect, useReducer } from 'react';\n\nimport {\n autoConnect,\n availableWallets,\n checkWalletProviders,\n clearPersistStorage,\n connectedWallets,\n defaultWalletState,\n getComptaibleProvider,\n persistWallet,\n removeWalletFromPersist,\n makeEventHandler,\n state_reducer,\n} from './helpers';\nimport { ProviderProps, ProviderContext } from './types';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { useInitializers } from './hooks';\nimport { WalletContext } from './context';\n\nfunction Provider(props: ProviderProps) {\n const [providersState, dispatch] = useReducer(state_reducer, {});\n\n // Get (or add) wallet instance (`provider`s will be wraped in a `Wallet`)\n const getWalletInstance = useInitializers(\n makeEventHandler(dispatch, props.onUpdateState)\n );\n\n // Getting providers from props and put all of them in a `Map` with an appropriate interface.\n const listOfProviders = props.providers;\n const wallets = checkWalletProviders(listOfProviders);\n\n // Final API we put in context and it will be available to use for users.\n const api: ProviderContext = {\n async connect(type, network) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const walletInstance = getWalletInstance(wallet);\n const result = await walletInstance.connect(network);\n if (props.autoConnect) persistWallet(type);\n\n return result;\n },\n async disconnect(type) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const walletInstance = getWalletInstance(wallet);\n await walletInstance.disconnect();\n if (props.autoConnect) removeWalletFromPersist(type);\n },\n async disconnectAll() {\n const disconnect_promises: Promise<any>[] = [];\n\n // When a wallet is initializing, a record will be added to `providersState`\n // So we use them to know what wallet has been initialized then we need to\n // filter connected wallets only.\n connectedWallets(providersState).forEach((type) => {\n const wallet = wallets.get(type);\n\n if (wallet) {\n const walletInstance = getWalletInstance(wallet);\n disconnect_promises.push(walletInstance.disconnect());\n }\n });\n\n if (props.autoConnect) clearPersistStorage();\n return await Promise.allSettled(disconnect_promises);\n },\n state(type) {\n return providersState[type] || defaultWalletState;\n },\n canSwitchNetworkTo(type, network) {\n const wallet = wallets.get(type);\n if (!wallet) {\n return false;\n }\n\n const walletInstance = getWalletInstance(wallet);\n return walletInstance.canSwitchNetworkTo\n ? walletInstance.canSwitchNetworkTo(network, walletInstance.provider)\n : false;\n },\n providers() {\n const providers: { [type in WalletType]?: any } = {};\n availableWallets(providersState).forEach((type) => {\n const wallet = wallets.get(type);\n if (wallet) {\n const walletInstance = getWalletInstance(wallet);\n providers[type] = walletInstance.provider;\n }\n });\n\n return providers;\n },\n getWalletInfo(type) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n // Get wallet info could be used in render methods to show wallets data\n // So, addWalletRef method shouldn't be called in this method\n\n return wallet.actions.getWalletInfo(props.allBlockChains || []);\n },\n getSigners(type) {\n const wallet = wallets.get(type);\n\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n const walletInstance = getWalletInstance(wallet);\n const supportedChains = walletInstance.getWalletInfo(\n props.allBlockChains || []\n ).supportedChains;\n const provider = getComptaibleProvider(\n supportedChains,\n walletInstance.provider,\n type\n );\n const result = walletInstance.getSigners(provider);\n\n return result;\n },\n };\n\n useEffect(() => {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n const runOnInit = () => {\n if (walletInstance.onInit) {\n walletInstance.onInit();\n }\n };\n\n const initWhenPageIsReady = (event: Event) => {\n if (\n event.target &&\n (event.target as Document).readyState === 'complete'\n ) {\n runOnInit();\n\n document.removeEventListener('readystatechange', initWhenPageIsReady);\n }\n };\n\n // Try to run, maybe it's ready.\n runOnInit();\n\n // Try again when the page has been completely loaded.\n // Some of wallets, take some time to be fully injected and loaded.\n document.addEventListener('readystatechange', initWhenPageIsReady);\n });\n }, []);\n\n useEffect(() => {\n const allBlockChains = props.allBlockChains;\n if (allBlockChains) {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n const supportedChains = walletInstance.getWalletInfo(\n props.allBlockChains || []\n ).supportedChains;\n walletInstance.setMeta(supportedChains);\n });\n }\n }, [props.allBlockChains]);\n\n useEffect(() => {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n walletInstance.setHandler(\n makeEventHandler(dispatch, props.onUpdateState)\n );\n });\n }, [props.onUpdateState]);\n\n useEffect(() => {\n const shouldTryAutoConnect =\n props.allBlockChains && props.allBlockChains.length && props.autoConnect;\n if (shouldTryAutoConnect) {\n (async () => {\n await autoConnect(wallets, getWalletInstance);\n })();\n }\n }, [props.autoConnect, props.allBlockChains]);\n\n return (\n <WalletContext.Provider value={api}>\n {props.children}\n </WalletContext.Provider>\n );\n}\n\nexport default Provider;\n", "import { useContext, useRef } from 'react';\nimport { WalletContext } from './context';\nimport { ProviderContext, WalletActions, WalletConfig } from './types';\nimport Wallet, { EventHandler as WalletEventHandler } from './wallet';\n\n/**\n *\n *\n */\nexport function useInitializers(onChangeState: WalletEventHandler) {\n const availableWallets = useRef<{\n [key: string]: Wallet | undefined;\n }>({});\n\n // If `wallet` hasn't been added to `availableWallets`,\n // Get a instance of `Wallet` and save the refrence in `availableWallets`.\n // Otherwise, return the already created instance.\n function updater(wallet: {\n actions: WalletActions;\n config: WalletConfig;\n }): Wallet {\n const type = wallet.config.type;\n // We only update, if there is no instance available.\n if (typeof availableWallets.current[type] === 'undefined') {\n availableWallets.current[type] = new Wallet(\n {\n config: wallet.config,\n handler: onChangeState,\n },\n wallet.actions\n );\n }\n\n return availableWallets.current[type]!;\n }\n\n return updater;\n}\n\nexport function useWallets(): ProviderContext {\n const context = useContext(WalletContext);\n if (!context)\n throw Error('useWallet can only be used within the Provider component');\n return context;\n}\n", "import { createContext } from 'react';\nimport { ProviderContext } from './types';\n\nconst defaultErrorMesssage = \"Context hasn't been initialized yet.\";\nconst defaultContext: ProviderContext = {\n async connect() {\n throw new Error(defaultErrorMesssage);\n },\n async disconnect() {\n throw new Error(defaultErrorMesssage);\n },\n async disconnectAll() {\n throw new Error(defaultErrorMesssage);\n },\n state() {\n throw new Error(defaultErrorMesssage);\n },\n canSwitchNetworkTo() {\n throw new Error(defaultErrorMesssage);\n },\n providers() {\n throw new Error(defaultErrorMesssage);\n },\n getWalletInfo() {\n throw new Error(defaultErrorMesssage);\n },\n getSigners() {\n throw new Error(defaultErrorMesssage);\n },\n};\n\nexport const WalletContext = createContext<ProviderContext>(defaultContext);\n", "import {\n getBlockChainNameFromId,\n Network,\n Networks,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport { accountAddressesWithNetwork, needsCheckInstallation } from './helpers';\nimport {\n Events,\n GetInstanceOptions,\n WalletActions,\n WalletConfig,\n} from './types';\nimport { BlockchainMeta } from 'rango-types';\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n value: any,\n coreState: State,\n supportedChains: BlockchainMeta[]\n) => void;\n\nexport interface State {\n connected: boolean;\n connecting: boolean;\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n}\n\nexport interface Options {\n config: WalletConfig;\n handler: EventHandler;\n}\n\nclass Wallet<InstanceType = any> {\n private actions: WalletActions;\n private state: State;\n private options: Options;\n private meta: BlockchainMeta[];\n public provider: InstanceType | null;\n\n constructor(options: Options, actions: WalletActions) {\n this.actions = actions;\n this.options = options;\n this.provider = null;\n this.meta = [];\n this.state = {\n connected: false,\n connecting: false,\n // TODO: Remove\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n };\n\n if (!needsCheckInstallation(options)) {\n this.setInstalledAs(true);\n }\n }\n\n async eagerConnection() {\n // Already connected, so we return provider that we have in memory.\n\n // For switching network on Trust Wallet (WalletConnect),\n // We only kill the session (and not restting the whole state)\n // So we are relying on this.provider for achieving this functionality.\n if (this.state.connected && !!this.provider) {\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n // TODO: call actions.eagerConnection\n return null;\n }\n async connect(network?: Network) {\n // If it's connecting, nothing do.\n if (this.state.connecting) {\n throw new Error('Connecting...');\n }\n\n const eagerConnection = await this.eagerConnection();\n const currentNetwork = this.state.network;\n // If a network hasn't been provided and also we have `lastNetwork`\n // We will use lastNetwork to make sure we will not\n // Ask the user to switch his network wrongly.\n const requestedNetwork =\n network || currentNetwork || this.options.config.defaultNetwork;\n\n if (eagerConnection) {\n const networkChanged =\n currentNetwork !== requestedNetwork && !!requestedNetwork;\n\n // Reuse current connection if nothing has changed and we already have the connection in memory.\n if (currentNetwork === requestedNetwork) {\n return eagerConnection;\n }\n if (networkChanged && !!this.actions.switchNetwork) {\n await this.actions.switchNetwork({\n instance: this.provider,\n meta: this.meta,\n // TODO: Fix type error\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n network: requestedNetwork,\n newInstance: this.tryGetInstance.bind(this),\n });\n\n return {\n // Only network has been changed, so we reuse accounts from what we have already.\n accounts: eagerConnection.accounts,\n network: requestedNetwork,\n provider: this.provider,\n };\n }\n\n // If none of the above conditions didn't match, continute to connect.\n }\n\n // We are connecting to wallet for the first time\n\n // Trying to get wallet's instance, if it's not available, raise an error.\n const instance = await this.tryGetInstance({ network });\n\n // Instance exists, trying to connect\n this.updateState({\n connecting: true,\n });\n this.setInstalledAs(true);\n\n try {\n // eslint-disable-next-line no-var\n var connectResult = await this.actions.connect({\n instance,\n network: requestedNetwork || undefined,\n meta: this.meta || [],\n });\n } catch (e) {\n this.resetState();\n throw e;\n }\n\n this.updateState({\n connected: true,\n reachable: true,\n connecting: false,\n });\n\n // TODO: Handle accounts.length > 0\n\n // Inserting accounts into our state.\n let nextAccounts: string[] = [];\n let nextNetwork: Network | null | undefined = null;\n if (Array.isArray(connectResult)) {\n const accounts = connectResult.flatMap((blockchain) => {\n const chainId = blockchain.chainId || Networks.Unknown;\n // Try to map chainId with a Network, if not found, we use chainId directly.\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // TODO: second parameter should be `string` when we decided to open source the package.\n return accountAddressesWithNetwork(blockchain.accounts, network);\n });\n // Typescript can not detect we are filtering out null values:(\n nextAccounts = accounts.filter(Boolean) as string[];\n nextNetwork = requestedNetwork || this.options.config.defaultNetwork;\n } else {\n const chainId = connectResult.chainId || Networks.Unknown;\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // We fallback to current active network if `chainId` not provided.\n nextAccounts = accountAddressesWithNetwork(\n connectResult.accounts,\n network\n );\n nextNetwork = network;\n }\n\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n network: nextNetwork,\n });\n }\n\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n async disconnect() {\n this.resetState();\n\n if (this.actions.disconnect) {\n this.actions.disconnect({\n instance: this.provider,\n // On wallet connect, we need to destory the instance and get a whole new instance when we are going to connect\n destroyInstance: () => {\n this.setProvider(null);\n },\n });\n }\n }\n\n getSigners(provider: any) {\n return this.actions.getSigners(provider);\n }\n getWalletInfo(allBlockChains: BlockchainMeta[]) {\n return this.actions.getWalletInfo(allBlockChains);\n }\n canSwitchNetworkTo(network: Network, provider: any) {\n const switchTo = this.actions.canSwitchNetworkTo;\n if (!switchTo) return false;\n\n return switchTo({\n network,\n meta: this.meta,\n provider,\n });\n }\n\n onInit() {\n if (!this.options.config.isAsyncInstance) {\n const instance = this.actions.getInstance();\n if (!!instance && !this.state.installed) {\n this.setInstalledAs(true);\n }\n }\n }\n\n setProvider(value: any) {\n this.provider = value;\n if (!!value && !!this.actions.subscribe) {\n this.actions.subscribe({\n instance: value,\n state: this.state,\n meta: this.meta,\n connect: this.connect.bind(this),\n disconnect: this.disconnect.bind(this),\n updateAccounts: (accounts, chainId) => {\n let network = this.state.network;\n if (chainId) {\n network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n }\n\n const nextAccounts = accountAddressesWithNetwork(accounts, network);\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n });\n }\n },\n updateChainId: (chainId) => {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.meta)\n : Networks.Unknown;\n this.updateState({\n network,\n });\n },\n });\n }\n }\n\n setMeta(value: BlockchainMeta[]) {\n this.meta = value;\n }\n\n setHandler(handler: EventHandler) {\n this.options.handler = handler;\n }\n\n getState(): State {\n return this.state;\n }\n updateState(states: Partial<State>) {\n // We will notify handler after updating all the states.\n // Because when we call `handler` it will has latest states.\n const updates: [Events, any][] = [];\n\n if (typeof states.connected !== 'undefined') {\n this.state.connected = states.connected;\n updates.push([Events.CONNECTED, states.connected]);\n }\n if (typeof states.connecting !== 'undefined') {\n this.state.connecting = states.connecting;\n updates.push([Events.CONNECTING, states.connecting]);\n }\n if (typeof states.reachable !== 'undefined') {\n this.state.reachable = states.reachable;\n updates.push([Events.REACHABLE, states.reachable]);\n }\n if (typeof states.installed !== 'undefined') {\n this.state.installed = states.installed;\n updates.push([Events.INSTALLED, states.installed]);\n }\n if (typeof states.accounts !== 'undefined') {\n this.state.accounts = states.accounts;\n updates.push([Events.ACCOUNTS, states.accounts]);\n }\n if (typeof states.network !== 'undefined') {\n this.state.network = states.network;\n updates.push([Events.NETWORK, states.network]);\n }\n\n const state = this.getState();\n updates.forEach(([name, value]) => {\n this.options.handler(\n this.options.config.type,\n name,\n value,\n state,\n this.meta\n );\n });\n }\n\n resetState() {\n this.updateState({\n connected: false,\n connecting: false,\n reachable: false,\n accounts: null,\n network: null,\n });\n }\n\n private setInstalledAs(value: boolean) {\n if (!needsCheckInstallation(this.options) && value === false) return;\n\n this.updateState({\n installed: value,\n });\n }\n private async tryGetInstance({\n network,\n force,\n }: {\n network?: Network;\n force?: boolean;\n }) {\n let instance = null;\n // For switching network on Trust Wallet (WalletConnect),\n // We only kill the session (and not restting the whole state)\n // So we are relying on this.provider for achieving this functionality.\n this.setProvider(null);\n if (this.options.config.isAsyncInstance) {\n // Trying to connect\n const instanceOptions: GetInstanceOptions = {\n currentProvider: this.provider,\n meta: this.meta,\n force: force || false,\n updateChainId: (chainId) => {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.meta)\n : Networks.Unknown;\n this.updateState({\n network,\n });\n },\n };\n\n if (network) {\n instanceOptions.network = network;\n }\n instance = await this.actions.getInstance(instanceOptions);\n } else {\n instance = this.actions.getInstance();\n }\n\n if (!instance) {\n this.setInstalledAs(false);\n this.resetState();\n\n const error_message = `It seems your selected wallet (${this.options.config.type}) isn't installed.`;\n throw new Error(error_message);\n }\n\n this.setProvider(instance);\n return instance;\n }\n}\n\nexport default Wallet;\n", "import { PropsWithChildren } from 'react';\nimport { Network, WalletType, WalletInfo } from '@rango-dev/wallets-shared';\nimport {\n EventHandler as WalletEventHandler,\n State as WalletState,\n} from './wallet';\nimport { SignerFactory, BlockchainMeta } from 'rango-types';\n\nexport type State = {\n [key: string]: WalletState | undefined;\n};\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n provider: any;\n};\n\nexport type Providers = { [type in WalletType]?: any };\n\nexport type ProviderContext = {\n connect(type: WalletType, network?: Network): Promise<ConnectResult>;\n disconnect(type: WalletType): Promise<void>;\n disconnectAll(): Promise<PromiseSettledResult<any>[]>;\n state(type: WalletType): WalletState;\n canSwitchNetworkTo(type: WalletType, network: Network): boolean;\n providers(): Providers;\n getSigners(type: WalletType): SignerFactory;\n getWalletInfo(type: WalletType): WalletInfo;\n};\n\nexport type ProviderProps = PropsWithChildren<{\n onUpdateState?: WalletEventHandler;\n allBlockChains?: BlockchainMeta[];\n autoConnect?: boolean;\n providers: ProviderInterface[];\n}>;\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n}\n\nexport type ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n};\n\nexport type GetInstanceOptions = {\n network?: Network;\n currentProvider: any;\n meta: BlockchainMeta[];\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\nexport type GetInstance =\n | (() => any)\n | ((options: GetInstanceOptions) => Promise<any>);\nexport type TryGetInstance =\n | (() => any)\n | ((options: Pick<GetInstanceOptions, 'force' | 'network'>) => Promise<any>);\nexport type Connect = (options: {\n instance: any;\n network?: Network;\n meta: BlockchainMeta[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\nexport type Disconnect = (options: {\n instance: any;\n destroyInstance: () => void;\n}) => Promise<void>;\nexport type Subscribe = (options: {\n instance: any;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => void;\n\nexport type SwitchNetwork = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n}) => Promise<void>;\n\nexport type CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: any;\n}) => boolean;\n\nexport interface WalletActions {\n connect: Connect;\n getInstance: any;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // eagerConnect, // optional?\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: any) => SignerFactory;\n canSwitchNetworkTo?: CanSwitchNetwork;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\nexport interface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n}\n\nexport type WalletProviders = Map<\n WalletType,\n {\n actions: WalletActions;\n config: WalletConfig;\n }\n>;\n\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["WalletConnectProvider", "convertEvmBlockchainMetaToEvmChainInfo", "evmChainsToRpcMap", "WalletTypes", "isEvmBlockchain", "Persistor", "name", "item", "value", "__name", "
|
|
4
|
+
"sourcesContent": ["import WalletConnectProvider from '@walletconnect/ethereum-provider';\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n evmChainsToRpcMap,\n Network,\n WalletConfig,\n WalletType,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport {\n State,\n WalletActions,\n ProviderInterface,\n WalletProviders,\n} from './types';\nimport Wallet, { Options, State as WalletState } from './wallet';\nimport type { BlockchainMeta } from 'rango-types';\nimport { isEvmBlockchain } from 'rango-types';\nimport { Persistor } from './persistor';\nimport { LAST_CONNECTED_WALLETS } from './constants';\nimport type { EventHandler as WalletEventHandler } from './wallet';\n\nexport function choose(wallets: any[], type: WalletType): any | null {\n return wallets.find((wallet) => wallet.type === type) || null;\n}\n\nexport const defaultWalletState: WalletState = {\n connected: false,\n connecting: false,\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n};\n\nexport function state_reducer(state: State, action: any) {\n if (action.type === 'new_state') {\n // TODO fix problem and remove ts-ignore\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const target_wallet = state[action.wallet];\n if (!target_wallet) {\n return {\n ...state,\n [action.wallet]: {\n ...defaultWalletState,\n [action.name]: action.value,\n },\n };\n }\n\n return {\n ...state,\n [action.wallet]: {\n ...target_wallet,\n [action.name]: action.value,\n },\n };\n }\n\n return state;\n}\n\nexport function formatAddressWithNetwork(\n address: string,\n network?: Network | null\n) {\n return `${network || ''}:${address}`;\n}\n\nexport function accountAddressesWithNetwork(\n addresses: string[] | null,\n network?: Network | null\n) {\n if (!addresses) return [];\n\n return addresses.map((address) => {\n return formatAddressWithNetwork(address, network);\n });\n}\n\nexport function readAccountAddress(addressWithNetwork: string): {\n address: string;\n network: Network;\n} {\n const [network, address] = addressWithNetwork.split(':');\n\n return {\n network,\n address,\n };\n}\n\nexport function connectedWallets(providersState: State): WalletType[] {\n return Object.entries(providersState)\n .filter(([, wallet_state]) => {\n return wallet_state?.connected;\n })\n .map(([type]) => {\n return type;\n });\n}\n\nexport function availableWallets(providersState: State): WalletType[] {\n return Object.entries(providersState).map(([type]) => {\n return type;\n });\n}\n\nexport function checkWalletProviders(\n list: ProviderInterface[]\n): WalletProviders {\n const wallets: WalletProviders = new Map();\n\n list.forEach((provider) => {\n const { config, ...actions } = provider;\n wallets.set(config.type, {\n actions,\n config,\n });\n });\n\n return wallets;\n}\n\n/* eslint-disable @typescript-eslint/ban-types */\nexport function isAsync(fn: Function) {\n return fn?.constructor?.name === 'AsyncFunction';\n}\n\nexport function needsCheckInstallation(options: Options) {\n const { checkInstallation = true } = options.config;\n return checkInstallation;\n}\n\n/*\n WalletConnect instance is not compatible with ethers.providers.Web3Provider,\n Here we are returning a comptable instance, instead of the original one. \n*/\n\nexport function isWalletDerivedFromWalletConnect(wallet_type: WalletType) {\n return wallet_type === WalletTypes.WALLET_CONNECT;\n}\n\nexport function getComptaibleProvider(\n supportedChains: BlockchainMeta[],\n provider: any,\n type: WalletType\n) {\n if (isWalletDerivedFromWalletConnect(type)) {\n const evmBlockchains = supportedChains.filter(isEvmBlockchain);\n const rpcUrls = evmChainsToRpcMap(\n convertEvmBlockchainMetaToEvmChainInfo(evmBlockchains)\n );\n return new WalletConnectProvider({\n qrcode: false,\n rpc: rpcUrls,\n connector: provider,\n chainId: provider.chainId,\n });\n }\n return provider;\n}\n\nexport async function tryPersistWallet({\n type,\n walletActions,\n getState,\n}: {\n type: WalletType;\n walletActions: WalletActions;\n getState: (walletType: WalletType) => WalletState;\n}) {\n if (walletActions.canEagerConnect) {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);\n\n /*\n If on the last attempt we are unable to eagerly connect to any wallet and the user connects any wallet manualy,\n persistance will be outdated and will need to be removed.\n */\n const shouldClearPersistance = wallets?.find(\n (walletType) => !getState(walletType).connected\n );\n\n if (shouldClearPersistance) clearPersistance();\n\n const walletAlreadyPersisted = !!wallets?.find((wallet) => wallet === type);\n if (wallets && !walletAlreadyPersisted)\n persistor.setItem(LAST_CONNECTED_WALLETS, wallets.concat(type));\n else persistor.setItem(LAST_CONNECTED_WALLETS, [type]);\n }\n}\n\nexport function tryRemoveWalletFromPersistance({\n type,\n walletActions,\n}: {\n type: WalletType;\n walletActions: WalletActions;\n}) {\n if (walletActions.canEagerConnect) {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);\n if (wallets)\n persistor.setItem(\n LAST_CONNECTED_WALLETS,\n wallets.filter((wallet) => wallet !== type)\n );\n }\n}\n\nexport function clearPersistance() {\n const persistor = new Persistor<string[]>();\n const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);\n if (wallets) persistor.removeItem(LAST_CONNECTED_WALLETS);\n}\n\n/*\n If a wallet has multiple providers and one of them can be eagerly connected,\n then the whole wallet will support it at that point and we try to connect to that wallet as usual in eagerConnect method.\n*/\nexport async function autoConnect(\n wallets: WalletProviders,\n getWalletInstance: (wallet: {\n actions: WalletActions;\n config: WalletConfig;\n }) => Wallet<any>\n) {\n const persistor = new Persistor<string[]>();\n const lastConnectedWallets = persistor.getItem(LAST_CONNECTED_WALLETS);\n if (lastConnectedWallets && lastConnectedWallets.length) {\n const connect_promises: {\n walletType: WalletType;\n eagerConnect: () => Promise<any>;\n }[] = [];\n lastConnectedWallets.forEach((walletType) => {\n const wallet = wallets.get(walletType);\n\n if (!!wallet) {\n const walletInstance = getWalletInstance(wallet);\n connect_promises.push({\n walletType,\n eagerConnect: walletInstance.connect.bind(walletInstance),\n });\n }\n });\n\n const result = await Promise.allSettled(\n connect_promises.map(({ eagerConnect }) => eagerConnect())\n );\n\n const canRestoreAnyConnection = !!result.find(\n ({ status }) => status === 'fulfilled'\n );\n\n /*\n After successfully connecting to at least one wallet,\n we will removing the other wallets from persistence.\n If we are unable to connect to any wallet,\n the persistence will not be removed and the eager connection will be retried with another page load.\n */\n if (canRestoreAnyConnection) {\n const walletsToRemoveFromPersistance: WalletType[] = [];\n result.forEach(({ status }, index) => {\n if (status === 'rejected')\n walletsToRemoveFromPersistance.push(\n connect_promises[index].walletType\n );\n });\n\n if (walletsToRemoveFromPersistance.length)\n persistor.setItem(\n LAST_CONNECTED_WALLETS,\n lastConnectedWallets.filter(\n (walletType) => !walletsToRemoveFromPersistance.includes(walletType)\n )\n );\n }\n }\n}\n/*\n Our event handler includes an internal state updater, and a notifier\n for the outside listener.\n On creating first wallet refrence, and on chaning `props.onUpdateState`\n we are using this function.\n*/\nexport function makeEventHandler(\n dispatcher: any,\n onUpdateState?: WalletEventHandler\n) {\n const handler: WalletEventHandler = (\n type,\n name,\n value,\n coreState,\n supportedChains\n ) => {\n const action = { type: 'new_state', wallet: type, name, value };\n // Update state\n dispatcher(action);\n\n // Giving the event to the outside listener\n if (onUpdateState) {\n onUpdateState(type, name, value, coreState, supportedChains);\n }\n };\n\n return handler;\n}\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "export const LAST_CONNECTED_WALLETS = 'last-connected-wallets';\n", "import React, { useEffect, useReducer, useRef } from 'react';\n\nimport {\n autoConnect,\n availableWallets,\n checkWalletProviders,\n clearPersistance,\n connectedWallets,\n defaultWalletState,\n getComptaibleProvider,\n tryPersistWallet,\n tryRemoveWalletFromPersistance,\n makeEventHandler,\n state_reducer,\n} from './helpers';\nimport { ProviderProps, ProviderContext } from './types';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { useInitializers } from './hooks';\nimport { WalletContext } from './context';\n\nfunction Provider(props: ProviderProps) {\n const [providersState, dispatch] = useReducer(state_reducer, {});\n const autoConnectInitiated = useRef(false);\n\n // Get (or add) wallet instance (`provider`s will be wraped in a `Wallet`)\n const getWalletInstance = useInitializers(\n makeEventHandler(dispatch, props.onUpdateState)\n );\n\n // Getting providers from props and put all of them in a `Map` with an appropriate interface.\n const listOfProviders = props.providers;\n const wallets = checkWalletProviders(listOfProviders);\n\n // Final API we put in context and it will be available to use for users.\n const api: ProviderContext = {\n async connect(type, network) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n const walletInstance = getWalletInstance(wallet);\n const result = await walletInstance.connect(network);\n if (props.autoConnect)\n tryPersistWallet({\n type,\n walletActions: wallet.actions,\n getState: api.state,\n });\n\n return result;\n },\n async disconnect(type) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const walletInstance = getWalletInstance(wallet);\n await walletInstance.disconnect();\n if (props.autoConnect)\n tryRemoveWalletFromPersistance({ type, walletActions: wallet.actions });\n },\n async disconnectAll() {\n const disconnect_promises: Promise<any>[] = [];\n\n // When a wallet is initializing, a record will be added to `providersState`\n // So we use them to know what wallet has been initialized then we need to\n // filter connected wallets only.\n connectedWallets(providersState).forEach((type) => {\n const wallet = wallets.get(type);\n\n if (wallet) {\n const walletInstance = getWalletInstance(wallet);\n disconnect_promises.push(walletInstance.disconnect());\n }\n });\n\n if (props.autoConnect) clearPersistance();\n return await Promise.allSettled(disconnect_promises);\n },\n state(type) {\n return providersState[type] || defaultWalletState;\n },\n canSwitchNetworkTo(type, network) {\n const wallet = wallets.get(type);\n if (!wallet) {\n return false;\n }\n\n const walletInstance = getWalletInstance(wallet);\n return walletInstance.canSwitchNetworkTo\n ? walletInstance.canSwitchNetworkTo(network, walletInstance.provider)\n : false;\n },\n providers() {\n const providers: { [type in WalletType]?: any } = {};\n availableWallets(providersState).forEach((type) => {\n const wallet = wallets.get(type);\n if (wallet) {\n const walletInstance = getWalletInstance(wallet);\n providers[type] = walletInstance.provider;\n }\n });\n\n return providers;\n },\n getWalletInfo(type) {\n const wallet = wallets.get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n // Get wallet info could be used in render methods to show wallets data\n // So, addWalletRef method shouldn't be called in this method\n\n return wallet.actions.getWalletInfo(props.allBlockChains || []);\n },\n getSigners(type) {\n const wallet = wallets.get(type);\n\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n const walletInstance = getWalletInstance(wallet);\n const supportedChains = walletInstance.getWalletInfo(\n props.allBlockChains || []\n ).supportedChains;\n const provider = getComptaibleProvider(\n supportedChains,\n walletInstance.provider,\n type\n );\n const result = walletInstance.getSigners(provider);\n\n return result;\n },\n };\n\n useEffect(() => {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n const runOnInit = () => {\n if (walletInstance.onInit) {\n walletInstance.onInit();\n }\n };\n\n const initWhenPageIsReady = (event: Event) => {\n if (\n event.target &&\n (event.target as Document).readyState === 'complete'\n ) {\n runOnInit();\n\n document.removeEventListener('readystatechange', initWhenPageIsReady);\n }\n };\n\n // Try to run, maybe it's ready.\n runOnInit();\n\n // Try again when the page has been completely loaded.\n // Some of wallets, take some time to be fully injected and loaded.\n document.addEventListener('readystatechange', initWhenPageIsReady);\n });\n }, []);\n\n useEffect(() => {\n const allBlockChains = props.allBlockChains;\n if (allBlockChains) {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n const supportedChains = walletInstance.getWalletInfo(\n props.allBlockChains || []\n ).supportedChains;\n walletInstance.setMeta(supportedChains);\n });\n }\n }, [props.allBlockChains]);\n\n useEffect(() => {\n wallets.forEach((wallet) => {\n const walletInstance = getWalletInstance(wallet);\n walletInstance.setHandler(\n makeEventHandler(dispatch, props.onUpdateState)\n );\n });\n }, [props.onUpdateState]);\n\n useEffect(() => {\n const shouldTryAutoConnect =\n props.allBlockChains &&\n props.allBlockChains.length &&\n props.autoConnect &&\n !autoConnectInitiated.current;\n\n if (shouldTryAutoConnect) {\n autoConnectInitiated.current = true;\n (async () => {\n await autoConnect(wallets, getWalletInstance);\n })();\n }\n }, [props.autoConnect, props.allBlockChains]);\n\n return (\n <WalletContext.Provider value={api}>\n {props.children}\n </WalletContext.Provider>\n );\n}\n\nexport default Provider;\n", "import { useContext, useRef } from 'react';\nimport { WalletContext } from './context';\nimport { ProviderContext, WalletActions, WalletConfig } from './types';\nimport Wallet, { EventHandler as WalletEventHandler } from './wallet';\n\n/**\n *\n *\n */\nexport function useInitializers(onChangeState: WalletEventHandler) {\n const availableWallets = useRef<{\n [key: string]: Wallet | undefined;\n }>({});\n\n // If `wallet` hasn't been added to `availableWallets`,\n // Get a instance of `Wallet` and save the refrence in `availableWallets`.\n // Otherwise, return the already created instance.\n function updater(wallet: {\n actions: WalletActions;\n config: WalletConfig;\n }): Wallet {\n const type = wallet.config.type;\n // We only update, if there is no instance available.\n if (typeof availableWallets.current[type] === 'undefined') {\n availableWallets.current[type] = new Wallet(\n {\n config: wallet.config,\n handler: onChangeState,\n },\n wallet.actions\n );\n }\n\n return availableWallets.current[type]!;\n }\n\n return updater;\n}\n\nexport function useWallets(): ProviderContext {\n const context = useContext(WalletContext);\n if (!context)\n throw Error('useWallet can only be used within the Provider component');\n return context;\n}\n", "import { createContext } from 'react';\nimport { ProviderContext } from './types';\n\nconst defaultErrorMesssage = \"Context hasn't been initialized yet.\";\nconst defaultContext: ProviderContext = {\n async connect() {\n throw new Error(defaultErrorMesssage);\n },\n async disconnect() {\n throw new Error(defaultErrorMesssage);\n },\n async disconnectAll() {\n throw new Error(defaultErrorMesssage);\n },\n state() {\n throw new Error(defaultErrorMesssage);\n },\n canSwitchNetworkTo() {\n throw new Error(defaultErrorMesssage);\n },\n providers() {\n throw new Error(defaultErrorMesssage);\n },\n getWalletInfo() {\n throw new Error(defaultErrorMesssage);\n },\n getSigners() {\n throw new Error(defaultErrorMesssage);\n },\n};\n\nexport const WalletContext = createContext<ProviderContext>(defaultContext);\n", "import {\n getBlockChainNameFromId,\n Network,\n Networks,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport { accountAddressesWithNetwork, needsCheckInstallation } from './helpers';\nimport {\n Events,\n GetInstanceOptions,\n WalletActions,\n WalletConfig,\n} from './types';\nimport { BlockchainMeta } from 'rango-types';\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n value: any,\n coreState: State,\n supportedChains: BlockchainMeta[]\n) => void;\n\nexport interface State {\n connected: boolean;\n connecting: boolean;\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n}\n\nexport interface Options {\n config: WalletConfig;\n handler: EventHandler;\n}\n\nclass Wallet<InstanceType = any> {\n private actions: WalletActions;\n private state: State;\n private options: Options;\n private meta: BlockchainMeta[];\n public provider: InstanceType | null;\n\n constructor(options: Options, actions: WalletActions) {\n this.actions = actions;\n this.options = options;\n this.provider = null;\n this.meta = [];\n this.state = {\n connected: false,\n connecting: false,\n // TODO: Remove\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n };\n\n if (!needsCheckInstallation(options)) {\n this.setInstalledAs(true);\n }\n }\n\n private async getConnectionFromState() {\n // Already connected, so we return provider that we have in memory.\n\n // For switching network on Trust Wallet (WalletConnect),\n // We only kill the session (and not restting the whole state)\n // So we are relying on this.provider for achieving this functionality.\n if (this.state.connected && !!this.provider) {\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n return null;\n }\n async connect(network?: Network) {\n // If it's connecting, nothing do.\n if (this.state.connecting) {\n throw new Error('Connecting...');\n }\n\n const connectionFromState = await this.getConnectionFromState();\n const currentNetwork = this.state.network;\n // If a network hasn't been provided and also we have `lastNetwork`\n // We will use lastNetwork to make sure we will not\n // Ask the user to switch his network wrongly.\n const requestedNetwork =\n network || currentNetwork || this.options.config.defaultNetwork;\n\n if (connectionFromState) {\n const networkChanged =\n currentNetwork !== requestedNetwork && !!requestedNetwork;\n\n // Reuse current connection if nothing has changed and we already have the connection in memory.\n if (currentNetwork === requestedNetwork) {\n return connectionFromState;\n }\n if (networkChanged && !!this.actions.switchNetwork) {\n await this.actions.switchNetwork({\n instance: this.provider,\n meta: this.meta,\n // TODO: Fix type error\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n network: requestedNetwork,\n newInstance: this.tryGetInstance.bind(this),\n });\n\n return {\n // Only network has been changed, so we reuse accounts from what we have already.\n accounts: connectionFromState.accounts,\n network: requestedNetwork,\n provider: this.provider,\n };\n }\n\n // If none of the above conditions didn't match, continute to connect.\n }\n\n // We are connecting to wallet for the first time\n\n // Trying to get wallet's instance, if it's not available, raise an error.\n const instance = await this.tryGetInstance({ network });\n\n // Instance exists, trying to connect\n this.updateState({\n connecting: true,\n });\n this.setInstalledAs(true);\n\n try {\n // eslint-disable-next-line no-var\n var connectResult = await this.actions.connect({\n instance,\n network: requestedNetwork || undefined,\n meta: this.meta || [],\n });\n } catch (e) {\n this.resetState();\n throw e;\n }\n\n this.updateState({\n connected: true,\n reachable: true,\n connecting: false,\n });\n\n // TODO: Handle accounts.length > 0\n\n // Inserting accounts into our state.\n let nextAccounts: string[] = [];\n let nextNetwork: Network | null | undefined = null;\n if (Array.isArray(connectResult)) {\n const accounts = connectResult.flatMap((blockchain) => {\n const chainId = blockchain.chainId || Networks.Unknown;\n // Try to map chainId with a Network, if not found, we use chainId directly.\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // TODO: second parameter should be `string` when we decided to open source the package.\n return accountAddressesWithNetwork(blockchain.accounts, network);\n });\n // Typescript can not detect we are filtering out null values:(\n nextAccounts = accounts.filter(Boolean) as string[];\n nextNetwork = requestedNetwork || this.options.config.defaultNetwork;\n } else {\n const chainId = connectResult.chainId || Networks.Unknown;\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // We fallback to current active network if `chainId` not provided.\n nextAccounts = accountAddressesWithNetwork(\n connectResult.accounts,\n network\n );\n nextNetwork = network;\n }\n\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n network: nextNetwork,\n });\n }\n\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n async disconnect() {\n this.resetState();\n\n if (this.actions.disconnect) {\n this.actions.disconnect({\n instance: this.provider,\n // On wallet connect, we need to destory the instance and get a whole new instance when we are going to connect\n destroyInstance: () => {\n this.setProvider(null);\n },\n });\n }\n }\n\n // This method is only used for auto connection\n async eagerConnect() {\n const instance = await this.tryGetInstance({ network: undefined });\n const { canEagerConnect } = this.actions;\n const error_message = `can't restore connection for ${this.options.config.type} .`;\n\n if (canEagerConnect) {\n // Check if we can eagerly connect to the wallet\n const eagerConnection = await canEagerConnect({\n instance: instance,\n });\n\n if (eagerConnection) {\n // Connect to wallet as usual\n return this.connect();\n } else {\n throw new Error(error_message);\n }\n } else {\n throw new Error(error_message);\n }\n }\n\n getSigners(provider: any) {\n return this.actions.getSigners(provider);\n }\n getWalletInfo(allBlockChains: BlockchainMeta[]) {\n return this.actions.getWalletInfo(allBlockChains);\n }\n canSwitchNetworkTo(network: Network, provider: any) {\n const switchTo = this.actions.canSwitchNetworkTo;\n if (!switchTo) return false;\n\n return switchTo({\n network,\n meta: this.meta,\n provider,\n });\n }\n\n onInit() {\n if (!this.options.config.isAsyncInstance) {\n const instance = this.actions.getInstance();\n if (!!instance && !this.state.installed) {\n this.setInstalledAs(true);\n }\n }\n }\n\n setProvider(value: any) {\n this.provider = value;\n if (!!value && !!this.actions.subscribe) {\n this.actions.subscribe({\n instance: value,\n state: this.state,\n meta: this.meta,\n connect: this.connect.bind(this),\n disconnect: this.disconnect.bind(this),\n updateAccounts: (accounts, chainId) => {\n let network = this.state.network;\n if (chainId) {\n network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n }\n\n const nextAccounts = accountAddressesWithNetwork(accounts, network);\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n });\n }\n },\n updateChainId: (chainId) => {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.meta)\n : Networks.Unknown;\n this.updateState({\n network,\n });\n },\n });\n }\n }\n\n setMeta(value: BlockchainMeta[]) {\n this.meta = value;\n }\n\n setHandler(handler: EventHandler) {\n this.options.handler = handler;\n }\n\n getState(): State {\n return this.state;\n }\n updateState(states: Partial<State>) {\n // We will notify handler after updating all the states.\n // Because when we call `handler` it will has latest states.\n const updates: [Events, any][] = [];\n\n if (typeof states.connected !== 'undefined') {\n this.state.connected = states.connected;\n updates.push([Events.CONNECTED, states.connected]);\n }\n if (typeof states.connecting !== 'undefined') {\n this.state.connecting = states.connecting;\n updates.push([Events.CONNECTING, states.connecting]);\n }\n if (typeof states.reachable !== 'undefined') {\n this.state.reachable = states.reachable;\n updates.push([Events.REACHABLE, states.reachable]);\n }\n if (typeof states.installed !== 'undefined') {\n this.state.installed = states.installed;\n updates.push([Events.INSTALLED, states.installed]);\n }\n if (typeof states.accounts !== 'undefined') {\n this.state.accounts = states.accounts;\n updates.push([Events.ACCOUNTS, states.accounts]);\n }\n if (typeof states.network !== 'undefined') {\n this.state.network = states.network;\n updates.push([Events.NETWORK, states.network]);\n }\n\n const state = this.getState();\n updates.forEach(([name, value]) => {\n this.options.handler(\n this.options.config.type,\n name,\n value,\n state,\n this.meta\n );\n });\n }\n\n resetState() {\n this.updateState({\n connected: false,\n connecting: false,\n reachable: false,\n accounts: null,\n network: null,\n });\n }\n\n private setInstalledAs(value: boolean) {\n if (!needsCheckInstallation(this.options) && value === false) return;\n\n this.updateState({\n installed: value,\n });\n }\n private async tryGetInstance({\n network,\n force,\n }: {\n network?: Network;\n force?: boolean;\n }) {\n let instance = null;\n // For switching network on Trust Wallet (WalletConnect),\n // We only kill the session (and not restting the whole state)\n // So we are relying on this.provider for achieving this functionality.\n this.setProvider(null);\n if (this.options.config.isAsyncInstance) {\n // Trying to connect\n const instanceOptions: GetInstanceOptions = {\n currentProvider: this.provider,\n meta: this.meta,\n force: force || false,\n updateChainId: (chainId) => {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.meta)\n : Networks.Unknown;\n this.updateState({\n network,\n });\n },\n };\n\n if (network) {\n instanceOptions.network = network;\n }\n instance = await this.actions.getInstance(instanceOptions);\n } else {\n instance = this.actions.getInstance();\n }\n\n if (!instance) {\n this.setInstalledAs(false);\n this.resetState();\n\n const error_message = `It seems your selected wallet (${this.options.config.type}) isn't installed.`;\n throw new Error(error_message);\n }\n\n this.setProvider(instance);\n return instance;\n }\n}\n\nexport default Wallet;\n", "import { PropsWithChildren } from 'react';\nimport { Network, WalletType, WalletInfo } from '@rango-dev/wallets-shared';\nimport {\n EventHandler as WalletEventHandler,\n State as WalletState,\n} from './wallet';\nimport { SignerFactory, BlockchainMeta } from 'rango-types';\n\nexport type State = {\n [key: string]: WalletState | undefined;\n};\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n provider: any;\n};\n\nexport type Providers = { [type in WalletType]?: any };\n\nexport type ProviderContext = {\n connect(type: WalletType, network?: Network): Promise<ConnectResult>;\n disconnect(type: WalletType): Promise<void>;\n disconnectAll(): Promise<PromiseSettledResult<any>[]>;\n state(type: WalletType): WalletState;\n canSwitchNetworkTo(type: WalletType, network: Network): boolean;\n providers(): Providers;\n getSigners(type: WalletType): SignerFactory;\n getWalletInfo(type: WalletType): WalletInfo;\n};\n\nexport type ProviderProps = PropsWithChildren<{\n onUpdateState?: WalletEventHandler;\n allBlockChains?: BlockchainMeta[];\n autoConnect?: boolean;\n providers: ProviderInterface[];\n}>;\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n}\n\nexport type ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n};\n\nexport type GetInstanceOptions = {\n network?: Network;\n currentProvider: any;\n meta: BlockchainMeta[];\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\nexport type GetInstance =\n | (() => any)\n | ((options: GetInstanceOptions) => Promise<any>);\nexport type TryGetInstance =\n | (() => any)\n | ((options: Pick<GetInstanceOptions, 'force' | 'network'>) => Promise<any>);\nexport type Connect = (options: {\n instance: any;\n network?: Network;\n meta: BlockchainMeta[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\nexport type Disconnect = (options: {\n instance: any;\n destroyInstance: () => void;\n}) => Promise<void>;\nexport type Subscribe = (options: {\n instance: any;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => void;\n\nexport type SwitchNetwork = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n}) => Promise<void>;\n\nexport type CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: any;\n}) => boolean;\n\nexport type CanEagerConnect = (options: { instance: any }) => Promise<boolean>;\n\nexport interface WalletActions {\n connect: Connect;\n getInstance: any;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: any) => SignerFactory;\n canSwitchNetworkTo?: CanSwitchNetwork;\n canEagerConnect?: CanEagerConnect;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\nexport interface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n}\n\nexport type WalletProviders = Map<\n WalletType,\n {\n actions: WalletActions;\n config: WalletConfig;\n }\n>;\n\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n"],
|
|
5
|
+
"mappings": "+EAAA,OAAOA,MAA2B,mCAClC,OACE,0CAAAC,EACA,qBAAAC,EAIA,eAAAC,MACK,4BASP,OAAS,mBAAAC,MAAuB,cCXzB,IAAMC,EAAN,KAAgD,CACrD,QAAQC,EAAc,CACpB,IAAMC,EAAO,aAAa,QAAQD,CAAI,EAEtC,OADmBC,EAAQ,KAAK,MAAMA,CAAI,EAAU,IAEtD,CACA,QAAQD,EAAcE,EAAU,CAC9B,aAAa,QAAQF,EAAM,KAAK,UAAUE,CAAK,CAAC,CAClD,CACA,WAAWF,EAAc,CACvB,aAAa,WAAWA,CAAI,CAC9B,CACF,EAZaG,EAAAJ,EAAA,aCNN,IAAMK,EAAyB,yBFsB/B,SAASC,GAAOC,EAAgBC,EAA8B,CACnE,OAAOD,EAAQ,KAAME,GAAWA,EAAO,OAASD,CAAI,GAAK,IAC3D,CAFgBE,EAAAJ,GAAA,UAIT,IAAMK,EAAkC,CAC7C,UAAW,GACX,WAAY,GACZ,UAAW,GACX,UAAW,GACX,SAAU,KACV,QAAS,IACX,EAEO,SAASC,EAAcC,EAAcC,EAAa,CACvD,GAAIA,EAAO,OAAS,YAAa,CAI/B,IAAMC,EAAgBF,EAAMC,EAAO,MAAM,EACzC,OAAKC,EAUE,CACL,GAAGF,EACH,CAACC,EAAO,MAAM,EAAG,CACf,GAAGC,EACH,CAACD,EAAO,IAAI,EAAGA,EAAO,KACxB,CACF,EAfS,CACL,GAAGD,EACH,CAACC,EAAO,MAAM,EAAG,CACf,GAAGH,EACH,CAACG,EAAO,IAAI,EAAGA,EAAO,KACxB,CACF,EAYJ,OAAOD,CACT,CA1BgBH,EAAAE,EAAA,iBA4BT,SAASI,EACdC,EACAC,EACA,CACA,MAAO,GAAGA,GAAW,MAAMD,GAC7B,CALgBP,EAAAM,EAAA,4BAOT,SAASG,EACdC,EACAF,EACA,CACA,OAAKE,EAEEA,EAAU,IAAKH,GACbD,EAAyBC,EAASC,CAAO,CACjD,EAJsB,CAAC,CAK1B,CATgBR,EAAAS,EAAA,+BAWT,SAASE,GAAmBC,EAGjC,CACA,GAAM,CAACJ,EAASD,CAAO,EAAIK,EAAmB,MAAM,GAAG,EAEvD,MAAO,CACL,QAAAJ,EACA,QAAAD,CACF,CACF,CAVgBP,EAAAW,GAAA,sBAYT,SAASE,EAAiBC,EAAqC,CACpE,OAAO,OAAO,QAAQA,CAAc,EACjC,OAAO,CAAC,CAAC,CAAEC,CAAY,IACfA,GAAc,SACtB,EACA,IAAI,CAAC,CAACjB,CAAI,IACFA,CACR,CACL,CARgBE,EAAAa,EAAA,oBAUT,SAASG,EAAiBF,EAAqC,CACpE,OAAO,OAAO,QAAQA,CAAc,EAAE,IAAI,CAAC,CAAChB,CAAI,IACvCA,CACR,CACH,CAJgBE,EAAAgB,EAAA,oBAMT,SAASC,EACdC,EACiB,CACjB,IAAMrB,EAA2B,IAAI,IAErC,OAAAqB,EAAK,QAASC,GAAa,CACzB,GAAM,CAAE,OAAAC,EAAQ,GAAGC,CAAQ,EAAIF,EAC/BtB,EAAQ,IAAIuB,EAAO,KAAM,CACvB,QAAAC,EACA,OAAAD,CACF,CAAC,CACH,CAAC,EAEMvB,CACT,CAdgBG,EAAAiB,EAAA,wBAiBT,SAASK,GAAQC,EAAc,CACpC,OAAOA,GAAI,aAAa,OAAS,eACnC,CAFgBvB,EAAAsB,GAAA,WAIT,SAASE,EAAuBC,EAAkB,CACvD,GAAM,CAAE,kBAAAC,EAAoB,EAAK,EAAID,EAAQ,OAC7C,OAAOC,CACT,CAHgB1B,EAAAwB,EAAA,0BAUT,SAASG,EAAiCC,EAAyB,CACxE,OAAOA,IAAgBC,EAAY,cACrC,CAFgB7B,EAAA2B,EAAA,oCAIT,SAASG,EACdC,EACAZ,EACArB,EACA,CACA,GAAI6B,EAAiC7B,CAAI,EAAG,CAC1C,IAAMkC,EAAiBD,EAAgB,OAAOE,CAAe,EACvDC,EAAUC,EACdC,EAAuCJ,CAAc,CACvD,EACA,OAAO,IAAIK,EAAsB,CAC/B,OAAQ,GACR,IAAKH,EACL,UAAWf,EACX,QAASA,EAAS,OACpB,CAAC,EAEH,OAAOA,CACT,CAlBgBnB,EAAA8B,EAAA,yBAoBhB,eAAsBQ,EAAiB,CACrC,KAAAxC,EACA,cAAAyC,EACA,SAAAC,CACF,EAIG,CACD,GAAID,EAAc,gBAAiB,CACjC,IAAME,EAAY,IAAIC,EAChB7C,EAAU4C,EAAU,QAAQE,CAAsB,EAMzB9C,GAAS,KACrC+C,GAAe,CAACJ,EAASI,CAAU,EAAE,SACxC,GAE4BC,EAAiB,EAE7C,IAAMC,EAAyB,CAAC,CAACjD,GAAS,KAAME,GAAWA,IAAWD,CAAI,EACtED,GAAW,CAACiD,EACdL,EAAU,QAAQE,EAAwB9C,EAAQ,OAAOC,CAAI,CAAC,EAC3D2C,EAAU,QAAQE,EAAwB,CAAC7C,CAAI,CAAC,EAEzD,CA5BsBE,EAAAsC,EAAA,oBA8Bf,SAASS,EAA+B,CAC7C,KAAAjD,EACA,cAAAyC,CACF,EAGG,CACD,GAAIA,EAAc,gBAAiB,CACjC,IAAME,EAAY,IAAIC,EAChB7C,EAAU4C,EAAU,QAAQE,CAAsB,EACpD9C,GACF4C,EAAU,QACRE,EACA9C,EAAQ,OAAQE,GAAWA,IAAWD,CAAI,CAC5C,EAEN,CAhBgBE,EAAA+C,EAAA,kCAkBT,SAASF,GAAmB,CACjC,IAAMJ,EAAY,IAAIC,EACND,EAAU,QAAQE,CAAsB,GAC3CF,EAAU,WAAWE,CAAsB,CAC1D,CAJgB3C,EAAA6C,EAAA,oBAUhB,eAAsBG,EACpBnD,EACAoD,EAIA,CACA,IAAMR,EAAY,IAAIC,EAChBQ,EAAuBT,EAAU,QAAQE,CAAsB,EACrE,GAAIO,GAAwBA,EAAqB,OAAQ,CACvD,IAAMC,EAGA,CAAC,EACPD,EAAqB,QAASN,GAAe,CAC3C,IAAM7C,EAASF,EAAQ,IAAI+C,CAAU,EAErC,GAAM7C,EAAQ,CACZ,IAAMqD,EAAiBH,EAAkBlD,CAAM,EAC/CoD,EAAiB,KAAK,CACpB,WAAAP,EACA,aAAcQ,EAAe,QAAQ,KAAKA,CAAc,CAC1D,CAAC,EAEL,CAAC,EAED,IAAMC,EAAS,MAAM,QAAQ,WAC3BF,EAAiB,IAAI,CAAC,CAAE,aAAAG,CAAa,IAAMA,EAAa,CAAC,CAC3D,EAYA,GAVgC,CAAC,CAACD,EAAO,KACvC,CAAC,CAAE,OAAAE,CAAO,IAAMA,IAAW,WAC7B,EAQ6B,CAC3B,IAAMC,EAA+C,CAAC,EACtDH,EAAO,QAAQ,CAAC,CAAE,OAAAE,CAAO,EAAGE,IAAU,CAChCF,IAAW,YACbC,EAA+B,KAC7BL,EAAiBM,CAAK,EAAE,UAC1B,CACJ,CAAC,EAEGD,EAA+B,QACjCf,EAAU,QACRE,EACAO,EAAqB,OAClBN,GAAe,CAACY,EAA+B,SAASZ,CAAU,CACrE,CACF,GAGR,CA1DsB5C,EAAAgD,EAAA,eAiEf,SAASU,EACdC,EACAC,EACA,CAkBA,OAjBoC5D,EAAA,CAClCF,EACA+D,EACAC,EACAC,EACAhC,IACG,CAGH4B,EAFe,CAAE,KAAM,YAAa,OAAQ7D,EAAM,KAAA+D,EAAM,MAAAC,CAAM,CAE7C,EAGbF,GACFA,EAAc9D,EAAM+D,EAAMC,EAAOC,EAAWhC,CAAe,CAE/D,EAfoC,UAkBtC,CAtBgB/B,EAAA0D,EAAA,oBG/RhB,OAAOM,GAAS,aAAAC,EAAW,cAAAC,EAAY,UAAAC,MAAc,QCArD,OAAS,cAAAC,EAAY,UAAAC,MAAc,QCAnC,OAAS,iBAAAC,MAAqB,QAG9B,IAAMC,EAAuB,uCACvBC,EAAkC,CACtC,MAAM,SAAU,CACd,MAAM,IAAI,MAAMD,CAAoB,CACtC,EACA,MAAM,YAAa,CACjB,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,MAAM,eAAgB,CACpB,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,OAAQ,CACN,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,oBAAqB,CACnB,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,WAAY,CACV,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,eAAgB,CACd,MAAM,IAAI,MAAMA,CAAoB,CACtC,EACA,YAAa,CACX,MAAM,IAAI,MAAMA,CAAoB,CACtC,CACF,EAEaE,EAAgBH,EAA+BE,CAAc,EC/B1E,OACE,2BAAAE,EAEA,YAAAC,MAEK,4BCiCA,IAAKC,OACVA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,QAAU,UANAA,OAAA,IDDZ,IAAMC,EAAN,KAAiC,CAO/B,YAAYC,EAAkBC,EAAwB,CACpD,KAAK,QAAUA,EACf,KAAK,QAAUD,EACf,KAAK,SAAW,KAChB,KAAK,KAAO,CAAC,EACb,KAAK,MAAQ,CACX,UAAW,GACX,WAAY,GAEZ,UAAW,GACX,UAAW,GACX,SAAU,KACV,QAAS,IACX,EAEKE,EAAuBF,CAAO,GACjC,KAAK,eAAe,EAAI,CAE5B,CAEA,MAAc,wBAAyB,CAMrC,OAAI,KAAK,MAAM,WAAe,KAAK,SAC1B,CACL,SAAU,KAAK,MAAM,SACrB,QAAS,KAAK,MAAM,QACpB,SAAU,KAAK,QACjB,EAGK,IACT,CACA,MAAM,QAAQG,EAAmB,CAE/B,GAAI,KAAK,MAAM,WACb,MAAM,IAAI,MAAM,eAAe,EAGjC,IAAMC,EAAsB,MAAM,KAAK,uBAAuB,EACxDC,EAAiB,KAAK,MAAM,QAI5BC,EACJH,GAAWE,GAAkB,KAAK,QAAQ,OAAO,eAEnD,GAAID,EAAqB,CACvB,IAAMG,EACJF,IAAmBC,GAAoB,CAAC,CAACA,EAG3C,GAAID,IAAmBC,EACrB,OAAOF,EAET,GAAIG,GAAoB,KAAK,QAAQ,cACnC,aAAM,KAAK,QAAQ,cAAc,CAC/B,SAAU,KAAK,SACf,KAAM,KAAK,KAIX,QAASD,EACT,YAAa,KAAK,eAAe,KAAK,IAAI,CAC5C,CAAC,EAEM,CAEL,SAAUF,EAAoB,SAC9B,QAASE,EACT,SAAU,KAAK,QACjB,EASJ,IAAME,EAAW,MAAM,KAAK,eAAe,CAAE,QAAAL,CAAQ,CAAC,EAGtD,KAAK,YAAY,CACf,WAAY,EACd,CAAC,EACD,KAAK,eAAe,EAAI,EAExB,GAAI,CAEF,IAAIM,EAAgB,MAAM,KAAK,QAAQ,QAAQ,CAC7C,SAAAD,EACA,QAASF,GAAoB,OAC7B,KAAM,KAAK,MAAQ,CAAC,CACtB,CAAC,CACH,OAASI,EAAP,CACA,WAAK,WAAW,EACVA,CACR,CAEA,KAAK,YAAY,CACf,UAAW,GACX,UAAW,GACX,WAAY,EACd,CAAC,EAKD,IAAIC,EAAyB,CAAC,EAC1BC,EAA0C,KAC9C,GAAI,MAAM,QAAQH,CAAa,EAU7BE,EATiBF,EAAc,QAASI,GAAe,CACrD,IAAMC,EAAUD,EAAW,SAAWE,EAAS,QAEzCZ,EACJa,EAAwBF,EAAS,KAAK,IAAI,GAAKC,EAAS,QAE1D,OAAOE,EAA4BJ,EAAW,SAAUV,CAAO,CACjE,CAAC,EAEuB,OAAO,OAAO,EACtCS,EAAcN,GAAoB,KAAK,QAAQ,OAAO,mBACjD,CACL,IAAMQ,EAAUL,EAAc,SAAWM,EAAS,QAC5CZ,EACJa,EAAwBF,EAAS,KAAK,IAAI,GAAKC,EAAS,QAE1DJ,EAAeM,EACbR,EAAc,SACdN,CACF,EACAS,EAAcT,EAGhB,OAAIQ,EAAa,OAAS,GACxB,KAAK,YAAY,CACf,SAAUA,EACV,QAASC,CACX,CAAC,EAGI,CACL,SAAU,KAAK,MAAM,SACrB,QAAS,KAAK,MAAM,QACpB,SAAU,KAAK,QACjB,CACF,CAEA,MAAM,YAAa,CACjB,KAAK,WAAW,EAEZ,KAAK,QAAQ,YACf,KAAK,QAAQ,WAAW,CACtB,SAAU,KAAK,SAEf,gBAAiB,IAAM,CACrB,KAAK,YAAY,IAAI,CACvB,CACF,CAAC,CAEL,CAGA,MAAM,cAAe,CACnB,IAAMJ,EAAW,MAAM,KAAK,eAAe,CAAE,QAAS,MAAU,CAAC,EAC3D,CAAE,gBAAAU,CAAgB,EAAI,KAAK,QAC3BC,EAAgB,gCAAgC,KAAK,QAAQ,OAAO,SAE1E,GAAID,EAAiB,CAMnB,GAJwB,MAAMA,EAAgB,CAC5C,SAAUV,CACZ,CAAC,EAIC,OAAO,KAAK,QAAQ,EAEpB,MAAM,IAAI,MAAMW,CAAa,MAG/B,OAAM,IAAI,MAAMA,CAAa,CAEjC,CAEA,WAAWC,EAAe,CACxB,OAAO,KAAK,QAAQ,WAAWA,CAAQ,CACzC,CACA,cAAcC,EAAkC,CAC9C,OAAO,KAAK,QAAQ,cAAcA,CAAc,CAClD,CACA,mBAAmBlB,EAAkBiB,EAAe,CAClD,IAAME,EAAW,KAAK,QAAQ,mBAC9B,OAAKA,EAEEA,EAAS,CACd,QAAAnB,EACA,KAAM,KAAK,KACX,SAAAiB,CACF,CAAC,EANqB,EAOxB,CAEA,QAAS,CACF,KAAK,QAAQ,OAAO,iBACN,KAAK,QAAQ,YAAY,GACxB,CAAC,KAAK,MAAM,WAC5B,KAAK,eAAe,EAAI,CAG9B,CAEA,YAAYG,EAAY,CACtB,KAAK,SAAWA,EACVA,GAAW,KAAK,QAAQ,WAC5B,KAAK,QAAQ,UAAU,CACrB,SAAUA,EACV,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,QAAS,KAAK,QAAQ,KAAK,IAAI,EAC/B,WAAY,KAAK,WAAW,KAAK,IAAI,EACrC,eAAgB,CAACC,EAAUV,IAAY,CACrC,IAAIX,EAAU,KAAK,MAAM,QACrBW,IACFX,EACEa,EAAwBF,EAAS,KAAK,IAAI,GAAKC,EAAS,SAG5D,IAAMJ,EAAeM,EAA4BO,EAAUrB,CAAO,EAC9DQ,EAAa,OAAS,GACxB,KAAK,YAAY,CACf,SAAUA,CACZ,CAAC,CAEL,EACA,cAAgBG,GAAY,CAC1B,IAAMX,EAAUW,EACZE,EAAwBF,EAAS,KAAK,IAAI,EAC1CC,EAAS,QACb,KAAK,YAAY,CACf,QAAAZ,CACF,CAAC,CACH,CACF,CAAC,CAEL,CAEA,QAAQoB,EAAyB,CAC/B,KAAK,KAAOA,CACd,CAEA,WAAWE,EAAuB,CAChC,KAAK,QAAQ,QAAUA,CACzB,CAEA,UAAkB,CAChB,OAAO,KAAK,KACd,CACA,YAAYC,EAAwB,CAGlC,IAAMC,EAA2B,CAAC,EAE9B,OAAOD,EAAO,UAAc,MAC9B,KAAK,MAAM,UAAYA,EAAO,UAC9BC,EAAQ,KAAK,aAAmBD,EAAO,SAAS,CAAC,GAE/C,OAAOA,EAAO,WAAe,MAC/B,KAAK,MAAM,WAAaA,EAAO,WAC/BC,EAAQ,KAAK,cAAoBD,EAAO,UAAU,CAAC,GAEjD,OAAOA,EAAO,UAAc,MAC9B,KAAK,MAAM,UAAYA,EAAO,UAC9BC,EAAQ,KAAK,aAAmBD,EAAO,SAAS,CAAC,GAE/C,OAAOA,EAAO,UAAc,MAC9B,KAAK,MAAM,UAAYA,EAAO,UAC9BC,EAAQ,KAAK,aAAmBD,EAAO,SAAS,CAAC,GAE/C,OAAOA,EAAO,SAAa,MAC7B,KAAK,MAAM,SAAWA,EAAO,SAC7BC,EAAQ,KAAK,YAAkBD,EAAO,QAAQ,CAAC,GAE7C,OAAOA,EAAO,QAAY,MAC5B,KAAK,MAAM,QAAUA,EAAO,QAC5BC,EAAQ,KAAK,WAAiBD,EAAO,OAAO,CAAC,GAG/C,IAAME,EAAQ,KAAK,SAAS,EAC5BD,EAAQ,QAAQ,CAAC,CAACE,EAAMN,CAAK,IAAM,CACjC,KAAK,QAAQ,QACX,KAAK,QAAQ,OAAO,KACpBM,EACAN,EACAK,EACA,KAAK,IACP,CACF,CAAC,CACH,CAEA,YAAa,CACX,KAAK,YAAY,CACf,UAAW,GACX,WAAY,GACZ,UAAW,GACX,SAAU,KACV,QAAS,IACX,CAAC,CACH,CAEQ,eAAeL,EAAgB,CACjC,CAACrB,EAAuB,KAAK,OAAO,GAAKqB,IAAU,IAEvD,KAAK,YAAY,CACf,UAAWA,CACb,CAAC,CACH,CACA,MAAc,eAAe,CAC3B,QAAApB,EACA,MAAA2B,CACF,EAGG,CACD,IAAItB,EAAW,KAKf,GADA,KAAK,YAAY,IAAI,EACjB,KAAK,QAAQ,OAAO,gBAAiB,CAEvC,IAAMuB,EAAsC,CAC1C,gBAAiB,KAAK,SACtB,KAAM,KAAK,KACX,MAAOD,GAAS,GAChB,cAAgBhB,GAAY,CAC1B,IAAMX,EAAUW,EACZE,EAAwBF,EAAS,KAAK,IAAI,EAC1CC,EAAS,QACb,KAAK,YAAY,CACf,QAAAZ,CACF,CAAC,CACH,CACF,EAEIA,IACF4B,EAAgB,QAAU5B,GAE5BK,EAAW,MAAM,KAAK,QAAQ,YAAYuB,CAAe,OAEzDvB,EAAW,KAAK,QAAQ,YAAY,EAGtC,GAAI,CAACA,EAAU,CACb,KAAK,eAAe,EAAK,EACzB,KAAK,WAAW,EAEhB,IAAMW,EAAgB,kCAAkC,KAAK,QAAQ,OAAO,yBAC5E,MAAM,IAAI,MAAMA,CAAa,EAG/B,YAAK,YAAYX,CAAQ,EAClBA,CACT,CACF,EAtXMwB,EAAAjC,EAAA,UAwXN,IAAOkC,EAAQlC,EFpZR,SAASmC,EAAgBC,EAAmC,CACjE,IAAMC,EAAmBC,EAEtB,CAAC,CAAC,EAKL,SAASC,EAAQC,EAGN,CACT,IAAMC,EAAOD,EAAO,OAAO,KAE3B,OAAI,OAAOH,EAAiB,QAAQI,CAAI,EAAM,MAC5CJ,EAAiB,QAAQI,CAAI,EAAI,IAAIC,EACnC,CACE,OAAQF,EAAO,OACf,QAASJ,CACX,EACAI,EAAO,OACT,GAGKH,EAAiB,QAAQI,CAAI,CACtC,CAjBS,OAAAE,EAAAJ,EAAA,WAmBFA,CACT,CA5BgBI,EAAAR,EAAA,mBA8BT,SAASS,GAA8B,CAC5C,IAAMC,EAAUC,EAAWC,CAAa,EACxC,GAAI,CAACF,EACH,MAAM,MAAM,0DAA0D,EACxE,OAAOA,CACT,CALgBF,EAAAC,EAAA,cDnBhB,SAASI,GAASC,EAAsB,CACtC,GAAM,CAACC,EAAgBC,CAAQ,EAAIC,EAAWC,EAAe,CAAC,CAAC,EACzDC,EAAuBC,EAAO,EAAK,EAGnCC,EAAoBC,EACxBC,EAAiBP,EAAUF,EAAM,aAAa,CAChD,EAGMU,EAAkBV,EAAM,UACxBW,EAAUC,EAAqBF,CAAe,EAG9CG,EAAuB,CAC3B,MAAM,QAAQC,EAAMC,EAAS,CAC3B,IAAMC,EAASL,EAAQ,IAAIG,CAAI,EAC/B,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,kBAAkBF,sBAAyB,EAG7D,IAAMG,EAAS,MADQV,EAAkBS,CAAM,EACX,QAAQD,CAAO,EACnD,OAAIf,EAAM,aACRkB,EAAiB,CACf,KAAAJ,EACA,cAAeE,EAAO,QACtB,SAAUH,EAAI,KAChB,CAAC,EAEII,CACT,EACA,MAAM,WAAWH,EAAM,CACrB,IAAME,EAASL,EAAQ,IAAIG,CAAI,EAC/B,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,kBAAkBF,sBAAyB,EAI7D,MADuBP,EAAkBS,CAAM,EAC1B,WAAW,EAC5BhB,EAAM,aACRmB,EAA+B,CAAE,KAAAL,EAAM,cAAeE,EAAO,OAAQ,CAAC,CAC1E,EACA,MAAM,eAAgB,CACpB,IAAMI,EAAsC,CAAC,EAK7C,OAAAC,EAAiBpB,CAAc,EAAE,QAASa,GAAS,CACjD,IAAME,EAASL,EAAQ,IAAIG,CAAI,EAE/B,GAAIE,EAAQ,CACV,IAAMM,EAAiBf,EAAkBS,CAAM,EAC/CI,EAAoB,KAAKE,EAAe,WAAW,CAAC,EAExD,CAAC,EAEGtB,EAAM,aAAauB,EAAiB,EACjC,MAAM,QAAQ,WAAWH,CAAmB,CACrD,EACA,MAAMN,EAAM,CACV,OAAOb,EAAea,CAAI,GAAKU,CACjC,EACA,mBAAmBV,EAAMC,EAAS,CAChC,IAAMC,EAASL,EAAQ,IAAIG,CAAI,EAC/B,GAAI,CAACE,EACH,MAAO,GAGT,IAAMM,EAAiBf,EAAkBS,CAAM,EAC/C,OAAOM,EAAe,mBAClBA,EAAe,mBAAmBP,EAASO,EAAe,QAAQ,EAClE,EACN,EACA,WAAY,CACV,IAAMG,EAA4C,CAAC,EACnD,OAAAC,EAAiBzB,CAAc,EAAE,QAASa,GAAS,CACjD,IAAME,EAASL,EAAQ,IAAIG,CAAI,EAC/B,GAAIE,EAAQ,CACV,IAAMM,EAAiBf,EAAkBS,CAAM,EAC/CS,EAAUX,CAAI,EAAIQ,EAAe,SAErC,CAAC,EAEMG,CACT,EACA,cAAcX,EAAM,CAClB,IAAME,EAASL,EAAQ,IAAIG,CAAI,EAC/B,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,kBAAkBF,sBAAyB,EAM7D,OAAOE,EAAO,QAAQ,cAAchB,EAAM,gBAAkB,CAAC,CAAC,CAChE,EACA,WAAWc,EAAM,CACf,IAAME,EAASL,EAAQ,IAAIG,CAAI,EAE/B,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,kBAAkBF,sBAAyB,EAE7D,IAAMQ,EAAiBf,EAAkBS,CAAM,EACzCW,EAAkBL,EAAe,cACrCtB,EAAM,gBAAkB,CAAC,CAC3B,EAAE,gBACI4B,EAAWC,EACfF,EACAL,EAAe,SACfR,CACF,EAGA,OAFeQ,EAAe,WAAWM,CAAQ,CAGnD,CACF,EAEA,OAAAE,EAAU,IAAM,CACdnB,EAAQ,QAASK,GAAW,CAC1B,IAAMM,EAAiBf,EAAkBS,CAAM,EACzCe,EAAYC,EAAA,IAAM,CAClBV,EAAe,QACjBA,EAAe,OAAO,CAE1B,EAJkB,aAMZW,EAAsBD,EAACE,GAAiB,CAE1CA,EAAM,QACLA,EAAM,OAAoB,aAAe,aAE1CH,EAAU,EAEV,SAAS,oBAAoB,mBAAoBE,CAAmB,EAExE,EAT4B,uBAY5BF,EAAU,EAIV,SAAS,iBAAiB,mBAAoBE,CAAmB,CACnE,CAAC,CACH,EAAG,CAAC,CAAC,EAELH,EAAU,IAAM,CACS9B,EAAM,gBAE3BW,EAAQ,QAASK,GAAW,CAC1B,IAAMM,EAAiBf,EAAkBS,CAAM,EACzCW,EAAkBL,EAAe,cACrCtB,EAAM,gBAAkB,CAAC,CAC3B,EAAE,gBACFsB,EAAe,QAAQK,CAAe,CACxC,CAAC,CAEL,EAAG,CAAC3B,EAAM,cAAc,CAAC,EAEzB8B,EAAU,IAAM,CACdnB,EAAQ,QAASK,GAAW,CACHT,EAAkBS,CAAM,EAChC,WACbP,EAAiBP,EAAUF,EAAM,aAAa,CAChD,CACF,CAAC,CACH,EAAG,CAACA,EAAM,aAAa,CAAC,EAExB8B,EAAU,IAAM,CAEZ9B,EAAM,gBACNA,EAAM,eAAe,QACrBA,EAAM,aACN,CAACK,EAAqB,UAGtBA,EAAqB,QAAU,IAC9B,SACC,MAAM8B,EAAYxB,EAASJ,CAAiB,KAGlD,EAAG,CAACP,EAAM,YAAaA,EAAM,cAAc,CAAC,EAG1CoC,EAAA,cAACC,EAAc,SAAd,CAAuB,MAAOxB,GAC5Bb,EAAM,QACT,CAEJ,CA7LSgC,EAAAjC,GAAA,YA+LT,IAAOuC,GAAQvC",
|
|
6
|
+
"names": ["WalletConnectProvider", "convertEvmBlockchainMetaToEvmChainInfo", "evmChainsToRpcMap", "WalletTypes", "isEvmBlockchain", "Persistor", "name", "item", "value", "__name", "LAST_CONNECTED_WALLETS", "choose", "wallets", "type", "wallet", "__name", "defaultWalletState", "state_reducer", "state", "action", "target_wallet", "formatAddressWithNetwork", "address", "network", "accountAddressesWithNetwork", "addresses", "readAccountAddress", "addressWithNetwork", "connectedWallets", "providersState", "wallet_state", "availableWallets", "checkWalletProviders", "list", "provider", "config", "actions", "isAsync", "fn", "needsCheckInstallation", "options", "checkInstallation", "isWalletDerivedFromWalletConnect", "wallet_type", "WalletTypes", "getComptaibleProvider", "supportedChains", "evmBlockchains", "isEvmBlockchain", "rpcUrls", "evmChainsToRpcMap", "convertEvmBlockchainMetaToEvmChainInfo", "WalletConnectProvider", "tryPersistWallet", "walletActions", "getState", "persistor", "Persistor", "LAST_CONNECTED_WALLETS", "walletType", "clearPersistance", "walletAlreadyPersisted", "tryRemoveWalletFromPersistance", "autoConnect", "getWalletInstance", "lastConnectedWallets", "connect_promises", "walletInstance", "result", "eagerConnect", "status", "walletsToRemoveFromPersistance", "index", "makeEventHandler", "dispatcher", "onUpdateState", "name", "value", "coreState", "React", "useEffect", "useReducer", "useRef", "useContext", "useRef", "createContext", "defaultErrorMesssage", "defaultContext", "WalletContext", "getBlockChainNameFromId", "Networks", "Events", "Wallet", "options", "actions", "needsCheckInstallation", "network", "connectionFromState", "currentNetwork", "requestedNetwork", "networkChanged", "instance", "connectResult", "e", "nextAccounts", "nextNetwork", "blockchain", "chainId", "Networks", "getBlockChainNameFromId", "accountAddressesWithNetwork", "canEagerConnect", "error_message", "provider", "allBlockChains", "switchTo", "value", "accounts", "handler", "states", "updates", "state", "name", "force", "instanceOptions", "__name", "wallet_default", "useInitializers", "onChangeState", "availableWallets", "useRef", "updater", "wallet", "type", "wallet_default", "__name", "useWallets", "context", "useContext", "WalletContext", "Provider", "props", "providersState", "dispatch", "useReducer", "state_reducer", "autoConnectInitiated", "useRef", "getWalletInstance", "useInitializers", "makeEventHandler", "listOfProviders", "wallets", "checkWalletProviders", "api", "type", "network", "wallet", "result", "tryPersistWallet", "tryRemoveWalletFromPersistance", "disconnect_promises", "connectedWallets", "walletInstance", "clearPersistance", "defaultWalletState", "providers", "availableWallets", "supportedChains", "provider", "getComptaibleProvider", "useEffect", "runOnInit", "__name", "initWhenPageIsReady", "event", "autoConnect", "React", "WalletContext", "provider_default"]
|
|
7
7
|
}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAKzD,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAKzD,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,eA6LrC;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -79,6 +79,9 @@ export type CanSwitchNetwork = (options: {
|
|
|
79
79
|
meta: BlockchainMeta[];
|
|
80
80
|
provider: any;
|
|
81
81
|
}) => boolean;
|
|
82
|
+
export type CanEagerConnect = (options: {
|
|
83
|
+
instance: any;
|
|
84
|
+
}) => Promise<boolean>;
|
|
82
85
|
export interface WalletActions {
|
|
83
86
|
connect: Connect;
|
|
84
87
|
getInstance: any;
|
|
@@ -87,6 +90,7 @@ export interface WalletActions {
|
|
|
87
90
|
switchNetwork?: SwitchNetwork;
|
|
88
91
|
getSigners: (provider: any) => SignerFactory;
|
|
89
92
|
canSwitchNetworkTo?: CanSwitchNetwork;
|
|
93
|
+
canEagerConnect?: CanEagerConnect;
|
|
90
94
|
getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;
|
|
91
95
|
}
|
|
92
96
|
export interface WalletConfig {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet.d.ts
CHANGED
|
@@ -21,17 +21,18 @@ declare class Wallet<InstanceType = any> {
|
|
|
21
21
|
private meta;
|
|
22
22
|
provider: InstanceType | null;
|
|
23
23
|
constructor(options: Options, actions: WalletActions);
|
|
24
|
-
|
|
25
|
-
accounts: string[] | null;
|
|
26
|
-
network: string | null;
|
|
27
|
-
provider: NonNullable<InstanceType>;
|
|
28
|
-
} | null>;
|
|
24
|
+
private getConnectionFromState;
|
|
29
25
|
connect(network?: Network): Promise<{
|
|
30
26
|
accounts: string[] | null;
|
|
31
27
|
network: string | null;
|
|
32
28
|
provider: InstanceType | null;
|
|
33
29
|
}>;
|
|
34
30
|
disconnect(): Promise<void>;
|
|
31
|
+
eagerConnect(): Promise<{
|
|
32
|
+
accounts: string[] | null;
|
|
33
|
+
network: string | null;
|
|
34
|
+
provider: InstanceType | null;
|
|
35
|
+
}>;
|
|
35
36
|
getSigners(provider: any): import("rango-types").SignerFactory;
|
|
36
37
|
getWalletInfo(allBlockChains: BlockchainMeta[]): import("@rango-dev/wallets-shared").WalletInfo;
|
|
37
38
|
canSwitchNetworkTo(network: Network, provider: any): boolean;
|
package/dist/wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAEP,UAAU,EACX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,MAAM,EAEN,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,eAAe,EAAE,cAAc,EAAE,KAC9B,IAAI,CAAC;AAEV,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,cAAM,MAAM,CAAC,YAAY,GAAG,GAAG;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAAmB;IACxB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;gBAEzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAEP,UAAU,EACX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,MAAM,EAEN,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,eAAe,EAAE,cAAc,EAAE,KAC9B,IAAI,CAAC;AAEV,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,cAAM,MAAM,CAAC,YAAY,GAAG,GAAG;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAAmB;IACxB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;gBAEzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;YAoBtC,sBAAsB;IAgB9B,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO;;;;;IAoHzB,UAAU;IAeV,YAAY;;;;;IAsBlB,UAAU,CAAC,QAAQ,EAAE,GAAG;IAGxB,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE;IAG9C,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;IAWlD,MAAM;IASN,WAAW,CAAC,KAAK,EAAE,GAAG;IAmCtB,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE;IAI/B,UAAU,CAAC,OAAO,EAAE,YAAY;IAIhC,QAAQ,IAAI,KAAK;IAGjB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IA0ClC,UAAU;IAUV,OAAO,CAAC,cAAc;YAOR,cAAc;CA+C7B;AAED,eAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rango-dev/wallets-core",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.11",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@rango-dev/wallets-shared": "^0.5.1-next.
|
|
28
|
+
"@rango-dev/wallets-shared": "^0.5.1-next.16",
|
|
29
29
|
"@walletconnect/ethereum-provider": "1.8.0",
|
|
30
30
|
"rango-types": "^0.1.45"
|
|
31
31
|
},
|
package/src/constants.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const LAST_CONNECTED_WALLETS = 'last-connected-wallets';
|
package/src/helpers.ts
CHANGED
|
@@ -17,7 +17,7 @@ import Wallet, { Options, State as WalletState } from './wallet';
|
|
|
17
17
|
import type { BlockchainMeta } from 'rango-types';
|
|
18
18
|
import { isEvmBlockchain } from 'rango-types';
|
|
19
19
|
import { Persistor } from './persistor';
|
|
20
|
-
import {
|
|
20
|
+
import { LAST_CONNECTED_WALLETS } from './constants';
|
|
21
21
|
import type { EventHandler as WalletEventHandler } from './wallet';
|
|
22
22
|
|
|
23
23
|
export function choose(wallets: any[], type: WalletType): any | null {
|
|
@@ -162,60 +162,120 @@ export function getComptaibleProvider(
|
|
|
162
162
|
return provider;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
export async function
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
export async function tryPersistWallet({
|
|
166
|
+
type,
|
|
167
|
+
walletActions,
|
|
168
|
+
getState,
|
|
169
|
+
}: {
|
|
170
|
+
type: WalletType;
|
|
171
|
+
walletActions: WalletActions;
|
|
172
|
+
getState: (walletType: WalletType) => WalletState;
|
|
173
|
+
}) {
|
|
174
|
+
if (walletActions.canEagerConnect) {
|
|
175
|
+
const persistor = new Persistor<string[]>();
|
|
176
|
+
const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);
|
|
173
177
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
wallets.filter((wallet) => wallet !== type)
|
|
178
|
+
/*
|
|
179
|
+
If on the last attempt we are unable to eagerly connect to any wallet and the user connects any wallet manualy,
|
|
180
|
+
persistance will be outdated and will need to be removed.
|
|
181
|
+
*/
|
|
182
|
+
const shouldClearPersistance = wallets?.find(
|
|
183
|
+
(walletType) => !getState(walletType).connected
|
|
181
184
|
);
|
|
185
|
+
|
|
186
|
+
if (shouldClearPersistance) clearPersistance();
|
|
187
|
+
|
|
188
|
+
const walletAlreadyPersisted = !!wallets?.find((wallet) => wallet === type);
|
|
189
|
+
if (wallets && !walletAlreadyPersisted)
|
|
190
|
+
persistor.setItem(LAST_CONNECTED_WALLETS, wallets.concat(type));
|
|
191
|
+
else persistor.setItem(LAST_CONNECTED_WALLETS, [type]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function tryRemoveWalletFromPersistance({
|
|
196
|
+
type,
|
|
197
|
+
walletActions,
|
|
198
|
+
}: {
|
|
199
|
+
type: WalletType;
|
|
200
|
+
walletActions: WalletActions;
|
|
201
|
+
}) {
|
|
202
|
+
if (walletActions.canEagerConnect) {
|
|
203
|
+
const persistor = new Persistor<string[]>();
|
|
204
|
+
const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);
|
|
205
|
+
if (wallets)
|
|
206
|
+
persistor.setItem(
|
|
207
|
+
LAST_CONNECTED_WALLETS,
|
|
208
|
+
wallets.filter((wallet) => wallet !== type)
|
|
209
|
+
);
|
|
210
|
+
}
|
|
182
211
|
}
|
|
183
212
|
|
|
184
|
-
export function
|
|
213
|
+
export function clearPersistance() {
|
|
185
214
|
const persistor = new Persistor<string[]>();
|
|
186
|
-
const wallets = persistor.getItem(
|
|
187
|
-
if (wallets) persistor.removeItem(
|
|
215
|
+
const wallets = persistor.getItem(LAST_CONNECTED_WALLETS);
|
|
216
|
+
if (wallets) persistor.removeItem(LAST_CONNECTED_WALLETS);
|
|
188
217
|
}
|
|
189
218
|
|
|
219
|
+
/*
|
|
220
|
+
If a wallet has multiple providers and one of them can be eagerly connected,
|
|
221
|
+
then the whole wallet will support it at that point and we try to connect to that wallet as usual in eagerConnect method.
|
|
222
|
+
*/
|
|
190
223
|
export async function autoConnect(
|
|
191
224
|
wallets: WalletProviders,
|
|
192
|
-
|
|
225
|
+
getWalletInstance: (wallet: {
|
|
193
226
|
actions: WalletActions;
|
|
194
227
|
config: WalletConfig;
|
|
195
228
|
}) => Wallet<any>
|
|
196
229
|
) {
|
|
197
230
|
const persistor = new Persistor<string[]>();
|
|
198
|
-
const lastConnectedWallets = persistor.getItem(
|
|
231
|
+
const lastConnectedWallets = persistor.getItem(LAST_CONNECTED_WALLETS);
|
|
199
232
|
if (lastConnectedWallets && lastConnectedWallets.length) {
|
|
200
233
|
const connect_promises: {
|
|
201
234
|
walletType: WalletType;
|
|
202
|
-
|
|
235
|
+
eagerConnect: () => Promise<any>;
|
|
203
236
|
}[] = [];
|
|
204
237
|
lastConnectedWallets.forEach((walletType) => {
|
|
205
238
|
const wallet = wallets.get(walletType);
|
|
206
239
|
|
|
207
240
|
if (!!wallet) {
|
|
208
|
-
const
|
|
209
|
-
connect_promises.push({
|
|
241
|
+
const walletInstance = getWalletInstance(wallet);
|
|
242
|
+
connect_promises.push({
|
|
243
|
+
walletType,
|
|
244
|
+
eagerConnect: walletInstance.connect.bind(walletInstance),
|
|
245
|
+
});
|
|
210
246
|
}
|
|
211
247
|
});
|
|
212
248
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
249
|
+
const result = await Promise.allSettled(
|
|
250
|
+
connect_promises.map(({ eagerConnect }) => eagerConnect())
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
const canRestoreAnyConnection = !!result.find(
|
|
254
|
+
({ status }) => status === 'fulfilled'
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
/*
|
|
258
|
+
After successfully connecting to at least one wallet,
|
|
259
|
+
we will removing the other wallets from persistence.
|
|
260
|
+
If we are unable to connect to any wallet,
|
|
261
|
+
the persistence will not be removed and the eager connection will be retried with another page load.
|
|
262
|
+
*/
|
|
263
|
+
if (canRestoreAnyConnection) {
|
|
264
|
+
const walletsToRemoveFromPersistance: WalletType[] = [];
|
|
265
|
+
result.forEach(({ status }, index) => {
|
|
266
|
+
if (status === 'rejected')
|
|
267
|
+
walletsToRemoveFromPersistance.push(
|
|
268
|
+
connect_promises[index].walletType
|
|
269
|
+
);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
if (walletsToRemoveFromPersistance.length)
|
|
273
|
+
persistor.setItem(
|
|
274
|
+
LAST_CONNECTED_WALLETS,
|
|
275
|
+
lastConnectedWallets.filter(
|
|
276
|
+
(walletType) => !walletsToRemoveFromPersistance.includes(walletType)
|
|
277
|
+
)
|
|
278
|
+
);
|
|
219
279
|
}
|
|
220
280
|
}
|
|
221
281
|
}
|
package/src/provider.tsx
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import React, { useEffect, useReducer } from 'react';
|
|
1
|
+
import React, { useEffect, useReducer, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
autoConnect,
|
|
5
5
|
availableWallets,
|
|
6
6
|
checkWalletProviders,
|
|
7
|
-
|
|
7
|
+
clearPersistance,
|
|
8
8
|
connectedWallets,
|
|
9
9
|
defaultWalletState,
|
|
10
10
|
getComptaibleProvider,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
tryPersistWallet,
|
|
12
|
+
tryRemoveWalletFromPersistance,
|
|
13
13
|
makeEventHandler,
|
|
14
14
|
state_reducer,
|
|
15
15
|
} from './helpers';
|
|
@@ -20,6 +20,7 @@ import { WalletContext } from './context';
|
|
|
20
20
|
|
|
21
21
|
function Provider(props: ProviderProps) {
|
|
22
22
|
const [providersState, dispatch] = useReducer(state_reducer, {});
|
|
23
|
+
const autoConnectInitiated = useRef(false);
|
|
23
24
|
|
|
24
25
|
// Get (or add) wallet instance (`provider`s will be wraped in a `Wallet`)
|
|
25
26
|
const getWalletInstance = useInitializers(
|
|
@@ -37,10 +38,14 @@ function Provider(props: ProviderProps) {
|
|
|
37
38
|
if (!wallet) {
|
|
38
39
|
throw new Error(`You should add ${type} to provider first.`);
|
|
39
40
|
}
|
|
40
|
-
|
|
41
41
|
const walletInstance = getWalletInstance(wallet);
|
|
42
42
|
const result = await walletInstance.connect(network);
|
|
43
|
-
if (props.autoConnect)
|
|
43
|
+
if (props.autoConnect)
|
|
44
|
+
tryPersistWallet({
|
|
45
|
+
type,
|
|
46
|
+
walletActions: wallet.actions,
|
|
47
|
+
getState: api.state,
|
|
48
|
+
});
|
|
44
49
|
|
|
45
50
|
return result;
|
|
46
51
|
},
|
|
@@ -52,7 +57,8 @@ function Provider(props: ProviderProps) {
|
|
|
52
57
|
|
|
53
58
|
const walletInstance = getWalletInstance(wallet);
|
|
54
59
|
await walletInstance.disconnect();
|
|
55
|
-
if (props.autoConnect)
|
|
60
|
+
if (props.autoConnect)
|
|
61
|
+
tryRemoveWalletFromPersistance({ type, walletActions: wallet.actions });
|
|
56
62
|
},
|
|
57
63
|
async disconnectAll() {
|
|
58
64
|
const disconnect_promises: Promise<any>[] = [];
|
|
@@ -69,7 +75,7 @@ function Provider(props: ProviderProps) {
|
|
|
69
75
|
}
|
|
70
76
|
});
|
|
71
77
|
|
|
72
|
-
if (props.autoConnect)
|
|
78
|
+
if (props.autoConnect) clearPersistance();
|
|
73
79
|
return await Promise.allSettled(disconnect_promises);
|
|
74
80
|
},
|
|
75
81
|
state(type) {
|
|
@@ -183,8 +189,13 @@ function Provider(props: ProviderProps) {
|
|
|
183
189
|
|
|
184
190
|
useEffect(() => {
|
|
185
191
|
const shouldTryAutoConnect =
|
|
186
|
-
props.allBlockChains &&
|
|
192
|
+
props.allBlockChains &&
|
|
193
|
+
props.allBlockChains.length &&
|
|
194
|
+
props.autoConnect &&
|
|
195
|
+
!autoConnectInitiated.current;
|
|
196
|
+
|
|
187
197
|
if (shouldTryAutoConnect) {
|
|
198
|
+
autoConnectInitiated.current = true;
|
|
188
199
|
(async () => {
|
|
189
200
|
await autoConnect(wallets, getWalletInstance);
|
|
190
201
|
})();
|
package/src/types.ts
CHANGED
|
@@ -97,18 +97,20 @@ export type CanSwitchNetwork = (options: {
|
|
|
97
97
|
provider: any;
|
|
98
98
|
}) => boolean;
|
|
99
99
|
|
|
100
|
+
export type CanEagerConnect = (options: { instance: any }) => Promise<boolean>;
|
|
101
|
+
|
|
100
102
|
export interface WalletActions {
|
|
101
103
|
connect: Connect;
|
|
102
104
|
getInstance: any;
|
|
103
105
|
disconnect?: Disconnect;
|
|
104
106
|
subscribe?: Subscribe;
|
|
105
|
-
// eagerConnect, // optional?
|
|
106
107
|
// unsubscribe, // coupled to subscribe.
|
|
107
108
|
|
|
108
109
|
// Optional, but should be provided at the same time.
|
|
109
110
|
switchNetwork?: SwitchNetwork;
|
|
110
111
|
getSigners: (provider: any) => SignerFactory;
|
|
111
112
|
canSwitchNetworkTo?: CanSwitchNetwork;
|
|
113
|
+
canEagerConnect?: CanEagerConnect;
|
|
112
114
|
getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;
|
|
113
115
|
}
|
|
114
116
|
|
package/src/wallet.ts
CHANGED
|
@@ -62,7 +62,7 @@ class Wallet<InstanceType = any> {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
async
|
|
65
|
+
private async getConnectionFromState() {
|
|
66
66
|
// Already connected, so we return provider that we have in memory.
|
|
67
67
|
|
|
68
68
|
// For switching network on Trust Wallet (WalletConnect),
|
|
@@ -76,7 +76,6 @@ class Wallet<InstanceType = any> {
|
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
// TODO: call actions.eagerConnection
|
|
80
79
|
return null;
|
|
81
80
|
}
|
|
82
81
|
async connect(network?: Network) {
|
|
@@ -85,7 +84,7 @@ class Wallet<InstanceType = any> {
|
|
|
85
84
|
throw new Error('Connecting...');
|
|
86
85
|
}
|
|
87
86
|
|
|
88
|
-
const
|
|
87
|
+
const connectionFromState = await this.getConnectionFromState();
|
|
89
88
|
const currentNetwork = this.state.network;
|
|
90
89
|
// If a network hasn't been provided and also we have `lastNetwork`
|
|
91
90
|
// We will use lastNetwork to make sure we will not
|
|
@@ -93,13 +92,13 @@ class Wallet<InstanceType = any> {
|
|
|
93
92
|
const requestedNetwork =
|
|
94
93
|
network || currentNetwork || this.options.config.defaultNetwork;
|
|
95
94
|
|
|
96
|
-
if (
|
|
95
|
+
if (connectionFromState) {
|
|
97
96
|
const networkChanged =
|
|
98
97
|
currentNetwork !== requestedNetwork && !!requestedNetwork;
|
|
99
98
|
|
|
100
99
|
// Reuse current connection if nothing has changed and we already have the connection in memory.
|
|
101
100
|
if (currentNetwork === requestedNetwork) {
|
|
102
|
-
return
|
|
101
|
+
return connectionFromState;
|
|
103
102
|
}
|
|
104
103
|
if (networkChanged && !!this.actions.switchNetwork) {
|
|
105
104
|
await this.actions.switchNetwork({
|
|
@@ -114,7 +113,7 @@ class Wallet<InstanceType = any> {
|
|
|
114
113
|
|
|
115
114
|
return {
|
|
116
115
|
// Only network has been changed, so we reuse accounts from what we have already.
|
|
117
|
-
accounts:
|
|
116
|
+
accounts: connectionFromState.accounts,
|
|
118
117
|
network: requestedNetwork,
|
|
119
118
|
provider: this.provider,
|
|
120
119
|
};
|
|
@@ -209,6 +208,29 @@ class Wallet<InstanceType = any> {
|
|
|
209
208
|
}
|
|
210
209
|
}
|
|
211
210
|
|
|
211
|
+
// This method is only used for auto connection
|
|
212
|
+
async eagerConnect() {
|
|
213
|
+
const instance = await this.tryGetInstance({ network: undefined });
|
|
214
|
+
const { canEagerConnect } = this.actions;
|
|
215
|
+
const error_message = `can't restore connection for ${this.options.config.type} .`;
|
|
216
|
+
|
|
217
|
+
if (canEagerConnect) {
|
|
218
|
+
// Check if we can eagerly connect to the wallet
|
|
219
|
+
const eagerConnection = await canEagerConnect({
|
|
220
|
+
instance: instance,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
if (eagerConnection) {
|
|
224
|
+
// Connect to wallet as usual
|
|
225
|
+
return this.connect();
|
|
226
|
+
} else {
|
|
227
|
+
throw new Error(error_message);
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
throw new Error(error_message);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
212
234
|
getSigners(provider: any) {
|
|
213
235
|
return this.actions.getSigners(provider);
|
|
214
236
|
}
|