@luno-kit/core 0.0.8 → 0.0.9
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/chains/index.cjs +2 -2
- package/dist/chains/index.cjs.map +1 -1
- package/dist/chains/index.d.cts +6 -1
- package/dist/chains/index.d.ts +6 -1
- package/dist/chains/index.js +2 -2
- package/dist/chains/index.js.map +1 -1
- package/dist/connectors/index.cjs +1 -1
- package/dist/connectors/index.cjs.map +1 -1
- package/dist/connectors/index.d.cts +4 -3
- package/dist/connectors/index.d.ts +4 -3
- package/dist/connectors/index.js +1 -1
- package/dist/connectors/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -7
- package/dist/index.d.ts +3 -7
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.cts +160 -10
- package/dist/types/index.d.ts +160 -10
- package/dist/utils/index.d.cts +5 -2
- package/dist/utils/index.d.ts +5 -2
- package/package.json +1 -1
- package/dist/chain-xQJ0MDiz.d.cts +0 -103
- package/dist/chain-xQJ0MDiz.d.ts +0 -103
- package/dist/connector-LTtOKOSm.d.ts +0 -44
- package/dist/connector-LleKwjLP.d.cts +0 -44
- package/dist/signer-BimV-6cq.d.cts +0 -6
- package/dist/signer-BimV-6cq.d.ts +0 -6
package/dist/connectors/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {h as h$1,i,k,l,u,q,r,s,t}from'../chunk-5WHVXOMN.js';import {e,c,i as i$1}from'../chunk-AND4WL4I.js';import {EventEmitter}from'eventemitter3';import {stringToHex}from'dedot/utils';var d=class extends EventEmitter{constructor(){super();this.links={};this.accounts=[];this.signer=void 0;this.connectionUri=void 0;}async getAccounts(){return [...this.accounts]}async getSigner(){return this.signer||console.warn(`Connector ${this.id}: Signer not available. Connection might be incomplete or failed.`),this.signer}hasConnectionUri(){return false}async getConnectionUri(){return this.connectionUri}};var o=class extends d{constructor(e){super();this.unsubscribe=null;this.specificInjector=void 0;this.id=e.id,this.name=e.name,this.icon=e.icon,this.links=e.links,this.injectorId=e.injectorId||e.id;}isInstalled(){if(typeof window>"u")return false;let e=window.injectedWeb3;return typeof e=="object"&&typeof e[this.injectorId]<"u"}async isAvailable(){return this.isInstalled()}async connect(e$1){if(console.log(`Connector ${this.id}: Attempting to connect...`),this.signer)return console.log(`Connector ${this.id}: Already connected.`),[...this.accounts];if(!await this.isAvailable())throw new Error(`${this.name} extension not found or not enabled.`);try{if(this.specificInjector=await window.injectedWeb3[this.injectorId].enable(e$1),!this.specificInjector)throw new Error(`Failed to enable the '${this.id}' extension.`);if(this.signer=this.specificInjector.signer,!this.signer)throw new Error(`Could not get signer from ${this.name}.`);let n=await this.specificInjector.accounts.get();if(n.length===0)throw new Error(`No accounts found in ${this.name}. Make sure accounts are visible and access is granted.`);return this.accounts=e(n,this.id),console.log(`Connector ${this.id}: Initial accounts loaded`,this.accounts),await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}catch(n){throw console.error(`Connector ${this.id}: Connection failed:`,n),await this.cleanup(),n}}async disconnect(){console.log(`Connector ${this.id}: Disconnecting...`),await this.cleanup(),this.emit("disconnect");}async signMessage(e,n){if(!n||!e)return;let t=await this.getSigner();if(!t||!t?.signRaw)throw new Error("Signer is not available or does not support signRaw.");if(!(await this.getAccounts()).some(i=>i.address.toLowerCase()===n.toLowerCase()))throw new Error(`Address ${n} is not managed by ${this.name}.`);try{let i=stringToHex(e);return (await t.signRaw({address:n,data:i,type:"bytes"})).signature}catch(i){throw console.log("error",i),new Error(`Connector ${this.id}: Failed to sign message: ${i.message}`)}}async startSubscription(){if(await this.cleanupSubscription(),!this.specificInjector)throw new Error(`Connector ${this.id}: Cannot subscribe, specificInjector not available.`);try{this.unsubscribe=this.specificInjector.accounts.subscribe(e$1=>{let n=e(e$1,this.id);JSON.stringify(this.accounts)!==JSON.stringify(n)&&(this.accounts=n,this.emit("accountsChanged",[...this.accounts]));}),console.log(`Connector ${this.id}: Subscribed to account changes.`);}catch(e){console.error(`Connector ${this.id}: Failed to subscribe to accounts:`,e),this.unsubscribe=null;}}async cleanupSubscription(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,console.log(`Connector ${this.id}: Unsubscribed from account changes.`));}async cleanup(){await this.cleanupSubscription(),this.accounts=[],this.signer=void 0,this.specificInjector=void 0;}};var W=()=>new o({id:"enkrypt",name:"Enkrypt",icon:h$1,links:{browserExtension:"https://www.enkrypt.com"}});var U=()=>new o({id:"fearless-wallet",name:"Fearless",icon:i,links:{browserExtension:"https://fearlesswallet.io"}});var C=class extends o{constructor(e){super({...e});this.mimirReady=false;this.mimirInject();}isInstalled(){return this.mimirReady}async mimirInject(){try{if(!(typeof window<"u"&&window!==window.parent))return;let{isMimirReady:n,MIMIR_REGEXP:t,inject:s}=await import('@mimirdev/apps-inject'),i=await n();i&&t.test(i)&&(s(),this.mimirReady=!0);}catch(e){console.error("Failed to inject Mimir:",e);}}async connect(e){if(!this.mimirReady){let{MIMIR_REGEXP:n}=await import('@mimirdev/apps-inject');if(!window.origin||!n.test(window.origin)){window.open(`https://app.mimir.global/explorer/${encodeURIComponent(window.origin)}`);return}}return super.connect(e)}};function R(){return new C({id:"mimir",name:"Mimir",icon:k,links:{browserExtension:"https://mimir.global"}})}var y=class extends o{constructor(){super({id:"nova-mobile",name:"Nova",icon:l,injectorId:"polkadot-js",links:{deepLink:"https://app.novawallet.io/open/dapp"}});}isInstalled(){if(typeof window>"u")return false;let p=window.injectedWeb3;return typeof p=="object"&&typeof p["polkadot-js"]<"u"&&window.walletExtension?.isNovaWallet===true}async isAvailable(){return this.isInstalled()}},g=()=>new y;var h=class extends d{constructor(e){super();this.supportedChains=[];this.unsubscribe=null;this.id=e.id||"walletconnect",this.name=e.name||"WalletConnect",this.links=e.links||{},this.icon=e.icon||u,this.projectId=e.projectId,this.relayUrl=e.relayUrl||"wss://relay.walletconnect.com",this.metadata=e.metadata,this.supportedChains=e.supportedChains||[];}isInstalled(){return false}async isAvailable(){return true}convertChainIdToCaipId(e){return e.map(n=>`polkadot:${(n.genesisHash||n).replace("0x","").slice(0,32)}`)}async connect(e,n){if(!this.projectId)throw new Error(`${this.name} requires a projectId. Please visit https://cloud.walletconnect.com to get one.`);let t=n?.length?n:this.supportedChains.length?this.supportedChains:void 0;if(!t||t.length===0)throw new Error(`${this.name} requires chains configuration.`);this.connectedChains=t;let{UniversalProvider:s}=await import('@walletconnect/universal-provider');try{if(this.provider=await s.init({projectId:this.projectId,relayUrl:this.relayUrl,metadata:this.metadata||{name:e,description:"LunoKit DApp",url:typeof window<"u"?window.location.origin:"",icons:[this.icon]}}),this.provider.session){this.session=this.provider.session;let u=this.getAccountsFromSession(t);return this.accounts=u,await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}if(!this.provider?.client)throw new Error("Provider not initialized or not connected");let{uri:i,approval:r}=await this.provider.client.connect({requiredNamespaces:{polkadot:{methods:["polkadot_signMessage","polkadot_sendTransaction","polkadot_signTransaction","polkadot_requestAccounts"],chains:this.convertChainIdToCaipId(t),events:["accountsChanged","chainChanged","connect"]}},optionalNamespaces:{polkadot:{methods:["polkadot_signMessage","polkadot_sendTransaction","polkadot_signTransaction","polkadot_requestAccounts"],chains:this.convertChainIdToCaipId(t),events:["accountsChanged","chainChanged","connect"]}}});this.emit("get_uri",i);let a=await r();this.session=a,this.provider.session=a,this.connectionUri=void 0;let l=this.getAccountsFromSession(t);return this.accounts=l,await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}catch(i){throw this.connectionUri=void 0,i}}getAccountsFromSession(e){let n=[e[0].genesisHash||e[0]],t=this.convertChainIdToCaipId(n)[0],s=this.session?.namespaces.polkadot.accounts.flat().filter(r=>r.includes(t)).map(r=>r.replace(`${t}:`,""));if(s&&s.length===0){console.error("No accounts found for the specified chain, please connect to the correct chain");let r=this.convertChainIdToCaipId(e)[0];s=this.session?.namespaces.polkadot.accounts.flat().filter(a=>a.includes(r)).map(a=>a.replace(`${r}:`,""));}let i=s.map(r=>({address:r,name:`${this.name} Account`,meta:{source:this.id},publicKey:void 0}));return this.emit("accountsChanged",[...i]),i}async disconnect(){try{this.provider&&await Promise.race([await this.provider.disconnect(),new Promise((e,n)=>setTimeout(()=>n(new Error("Disconnect timeout")),5e3))]);}catch{}await this.cleanup(),this.emit("disconnect");}async signMessage(e,n){if(!this.provider?.client||!this.session?.topic)throw new Error("Provider not initialized or not connected");try{let t=await this.getSigner();if(!t)throw new Error("No signer provided");let{signature:s}=await t.signRaw({address:n,data:e,type:"bytes"});return s}catch(t){throw console.error("Sign message error:",t),t}}hasConnectionUri(){return true}async getConnectionUri(){return this.connectionUri?this.connectionUri:new Promise(e=>{this.once("get_uri",n=>{this.connectionUri=n,e(n);});})}async getSigner(){if(!(!this.provider?.client||!this.session))return {signPayload:async e=>{let n=`polkadot:${e.genesisHash.replace("0x","").slice(0,32)}`,s=this.session.namespaces.polkadot.accounts.find(l=>{let u=l.replace(`${n}:`,"");return l.includes(n)&&c(e.address,u)});if(!s)throw new Error(`Chain ${e.genesisHash} is not supported by the wallet.}`);let i=s.replace(`${n}:`,""),r={...e,address:i};return await this.provider?.client?.request({topic:this.session.topic,chainId:`polkadot:${r.genesisHash.replace("0x","").slice(0,32)}`,request:{method:"polkadot_signTransaction",params:{address:i,transactionPayload:r}}})},signRaw:async e=>{let n=this.convertChainIdToCaipId(this.connectedChains)[0],s=this.session.namespaces.polkadot.accounts.find(l=>{let u=l.replace(`${n}:`,"");return l.includes(n)&&c(e.address,u)});if(!s)throw new Error(`No accounts available for chain ${n}`);let i=s.replace(`${n}:`,""),r={...e};return await this.provider.client.request({topic:this.session.topic,chainId:n,request:{method:"polkadot_signMessage",params:{address:i,message:r.data,type:r.type}}})}}}async startSubscription(){if(await this.cleanupSubscription(),!this.provider?.client||!this.session)throw new Error(`Connector ${this.id}: Cannot subscribe, provider or session not available.`);try{let e=async()=>{console.log(`Connector ${this.id}: Session deleted, disconnecting...`),await this.cleanup(),this.emit("disconnect");};this.provider.client.on("session_delete",e),this.unsubscribe=()=>{this.provider?.client?.off("session_delete",e);};}catch{this.unsubscribe=null;}}async cleanupSubscription(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,console.log(`Connector ${this.id}: Unsubscribed from events.`));}async cleanup(){await this.cleanupSubscription(),this.accounts=[],this.signer=void 0,this.provider=void 0,this.session=void 0;}},M=c=>new h(c);var O=c=>i$1()?g():!i$1()&&"mobileOnly"in c&&c.mobileOnly?(console.error("Nova Wallet mobile connector is being used on a desktop device. This may not work as expected."),g()):new h({id:"nova",name:"Nova",icon:l,links:{browserExtension:"https://novawallet.io"},...c});var T=()=>new o({id:"polkadot-js",name:"Polkadot{.js}",icon:q,links:{browserExtension:"https://polkadot.js.org/extension"}});var _=()=>new o({id:"polkagate",name:"Polkagate",icon:r,links:{browserExtension:"https://chromewebstore.google.com/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"}});var N=()=>new o({id:"subwallet-js",name:"SubWallet",icon:s,links:{browserExtension:"https://chromewebstore.google.com/detail/subwallet-polkadot-wallet/onhogfjeacnfoofkfgppdlbmlmnplgbn",deepLink:"https://mobile.subwallet.app/browser"}});var H=()=>new o({id:"talisman",name:"Talisman",icon:t,links:{browserExtension:"https://chromewebstore.google.com/detail/talisman-wallet/fijngjgcjhjmmpcmkeiomlglpeiijkld"}});
|
|
1
|
+
import {h as h$1,i,k,l,u,q,r,s,t}from'../chunk-5WHVXOMN.js';import {e,c,i as i$1}from'../chunk-AND4WL4I.js';import {EventEmitter}from'eventemitter3';import {stringToHex}from'dedot/utils';var d=class extends EventEmitter{constructor(){super();this.links={};this.accounts=[];this.signer=void 0;this.connectionUri=void 0;}async getAccounts(){return [...this.accounts]}async getSigner(){return this.signer||console.warn(`Connector ${this.id}: Signer not available. Connection might be incomplete or failed.`),this.signer}hasConnectionUri(){return false}async getConnectionUri(){return this.connectionUri}};var o=class extends d{constructor(e){super();this.unsubscribe=null;this.specificInjector=void 0;this.id=e.id,this.name=e.name,this.icon=e.icon,this.links=e.links,this.injectorId=e.injectorId||e.id;}isInstalled(){if(typeof window>"u")return false;let e=window.injectedWeb3;return typeof e=="object"&&typeof e[this.injectorId]<"u"}async isAvailable(){return this.isInstalled()}async connect(e$1){if(console.log(`Connector ${this.id}: Attempting to connect...`),this.signer)return console.log(`Connector ${this.id}: Already connected.`),[...this.accounts];if(!await this.isAvailable())throw new Error(`${this.name} extension not found or not enabled.`);try{if(this.specificInjector=await window.injectedWeb3[this.injectorId].enable(e$1),!this.specificInjector)throw new Error(`Failed to enable the '${this.id}' extension.`);if(this.signer=this.specificInjector.signer,!this.signer)throw new Error(`Could not get signer from ${this.name}.`);let t=await this.specificInjector.accounts.get();if(t.length===0)throw new Error(`No accounts found in ${this.name}. Make sure accounts are visible and access is granted.`);return this.accounts=e(t,this.id),console.log(`Connector ${this.id}: Initial accounts loaded`,this.accounts),await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}catch(t){throw console.error(`Connector ${this.id}: Connection failed:`,t),await this.cleanup(),t}}async disconnect(){console.log(`Connector ${this.id}: Disconnecting...`),await this.cleanup(),this.emit("disconnect");}async signMessage(e,t){if(!t||!e)return;let n=await this.getSigner();if(!n||!n?.signRaw)throw new Error("Signer is not available or does not support signRaw.");if(!(await this.getAccounts()).some(i=>i.address.toLowerCase()===t.toLowerCase()))throw new Error(`Address ${t} is not managed by ${this.name}.`);try{let i=stringToHex(e);return (await n.signRaw({address:t,data:i,type:"bytes"})).signature}catch(i){throw console.log("error",i),new Error(`Connector ${this.id}: Failed to sign message: ${i.message}`)}}async startSubscription(){if(await this.cleanupSubscription(),!this.specificInjector)throw new Error(`Connector ${this.id}: Cannot subscribe, specificInjector not available.`);try{this.unsubscribe=this.specificInjector.accounts.subscribe(e$1=>{let t=e(e$1,this.id);JSON.stringify(this.accounts)!==JSON.stringify(t)&&(this.accounts=t,this.emit("accountsChanged",[...this.accounts]));}),console.log(`Connector ${this.id}: Subscribed to account changes.`);}catch(e){console.error(`Connector ${this.id}: Failed to subscribe to accounts:`,e),this.unsubscribe=null;}}async cleanupSubscription(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,console.log(`Connector ${this.id}: Unsubscribed from account changes.`));}async cleanup(){await this.cleanupSubscription(),this.accounts=[],this.signer=void 0,this.specificInjector=void 0;}};var W=()=>new o({id:"enkrypt",name:"Enkrypt",icon:h$1,links:{browserExtension:"https://www.enkrypt.com"}});var U=()=>new o({id:"fearless-wallet",name:"Fearless",icon:i,links:{browserExtension:"https://fearlesswallet.io"}});var C=class extends o{constructor(e){super({...e});this.mimirReady=false;this.mimirInject();}isInstalled(){return this.mimirReady}async mimirInject(){try{if(!(typeof window<"u"&&window!==window.parent))return;let{isMimirReady:t,MIMIR_REGEXP:n,inject:s}=await import('@mimirdev/apps-inject'),i=await t();i&&n.test(i)&&(s(),this.mimirReady=!0);}catch(e){console.error("Failed to inject Mimir:",e);}}async connect(e){if(!this.mimirReady){let{MIMIR_REGEXP:t}=await import('@mimirdev/apps-inject');if(!window.origin||!t.test(window.origin)){window.open(`https://app.mimir.global/explorer/${encodeURIComponent(window.origin)}`);return}}return super.connect(e)}};function R(){return new C({id:"mimir",name:"Mimir",icon:k,links:{browserExtension:"https://mimir.global"}})}var y=class extends o{constructor(){super({id:"nova-mobile",name:"Nova",icon:l,injectorId:"polkadot-js",links:{deepLink:"https://app.novawallet.io/open/dapp"}});}isInstalled(){if(typeof window>"u")return false;let p=window.injectedWeb3;return typeof p=="object"&&typeof p["polkadot-js"]<"u"&&window.walletExtension?.isNovaWallet===true}async isAvailable(){return this.isInstalled()}},g=()=>new y;var h=class extends d{constructor(e){super();this.supportedChains=[];this.unsubscribe=null;this.id=e.id||"walletconnect",this.name=e.name||"WalletConnect",this.links=e.links||{},this.icon=e.icon||u,this.projectId=e.projectId,this.relayUrl=e.relayUrl||"wss://relay.walletconnect.com",this.metadata=e.metadata,this.supportedChains=e.supportedChains||[];}isInstalled(){return false}async isAvailable(){return true}convertChainIdToCaipId(e){return e.map(t=>`polkadot:${(t.genesisHash||t).replace("0x","").slice(0,32)}`)}async connect(e,t){if(!this.projectId)throw new Error(`${this.name} requires a projectId. Please visit https://cloud.walletconnect.com to get one.`);let n=t?.length?t:this.supportedChains.length?this.supportedChains:void 0;if(!n||n.length===0)throw new Error(`${this.name} requires chains configuration.`);this.connectedChains=n;let{UniversalProvider:s}=await import('@walletconnect/universal-provider');try{if(this.provider=await s.init({projectId:this.projectId,relayUrl:this.relayUrl,metadata:this.metadata||{name:e,description:"LunoKit DApp",url:typeof window<"u"?window.location.origin:"",icons:[this.icon]}}),this.provider.session){this.session=this.provider.session;let u=this.getAccountsFromSession(n);return this.accounts=u,await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}if(!this.provider?.client)throw new Error("Provider not initialized or not connected");let{uri:i,approval:r}=await this.provider.client.connect({requiredNamespaces:{polkadot:{methods:["polkadot_signMessage","polkadot_sendTransaction","polkadot_signTransaction","polkadot_requestAccounts"],chains:this.convertChainIdToCaipId(n),events:["accountsChanged","chainChanged","connect"]}},optionalNamespaces:{polkadot:{methods:["polkadot_signMessage","polkadot_sendTransaction","polkadot_signTransaction","polkadot_requestAccounts"],chains:this.convertChainIdToCaipId(n),events:["accountsChanged","chainChanged","connect"]}}});this.emit("get_uri",i);let a=await r();this.session=a,this.provider.session=a,this.connectionUri=void 0;let l=this.getAccountsFromSession(n);return this.accounts=l,await this.startSubscription(),this.emit("connect",[...this.accounts]),[...this.accounts]}catch(i){throw this.connectionUri=void 0,i}}getAccountsFromSession(e){let t=[e[0].genesisHash||e[0]],n=this.convertChainIdToCaipId(t)[0],s=this.session?.namespaces.polkadot.accounts.flat().filter(r=>r.includes(n)).map(r=>r.replace(`${n}:`,""));if(s&&s.length===0){console.error("No accounts found for the specified chain, please connect to the correct chain");let r=this.convertChainIdToCaipId(e)[0];s=this.session?.namespaces.polkadot.accounts.flat().filter(a=>a.includes(r)).map(a=>a.replace(`${r}:`,""));}let i=s.map(r=>({address:r,name:`${this.name} Account`,meta:{source:this.id},publicKey:void 0}));return this.emit("accountsChanged",[...i]),i}async disconnect(){try{this.provider&&await Promise.race([await this.provider.disconnect(),new Promise((e,t)=>setTimeout(()=>t(new Error("Disconnect timeout")),5e3))]);}catch{}await this.cleanup(),this.emit("disconnect");}async signMessage(e,t){if(!this.provider?.client||!this.session?.topic)throw new Error("Provider not initialized or not connected");try{let n=await this.getSigner();if(!n)throw new Error("No signer provided");let{signature:s}=await n.signRaw({address:t,data:e,type:"bytes"});return s}catch(n){throw console.error("Sign message error:",n),n}}hasConnectionUri(){return true}async getConnectionUri(){return this.connectionUri?this.connectionUri:new Promise(e=>{this.once("get_uri",t=>{this.connectionUri=t,e(t);});})}async getSigner(){if(!(!this.provider?.client||!this.session))return {signPayload:async e=>{let t=`polkadot:${e.genesisHash.replace("0x","").slice(0,32)}`,s=this.session.namespaces.polkadot.accounts.find(l=>{let u=l.replace(`${t}:`,"");return l.includes(t)&&c(e.address,u)});if(!s)throw new Error(`Chain ${e.genesisHash} is not supported by the wallet.}`);let i=s.replace(`${t}:`,""),r={...e,address:i};return await this.provider?.client?.request({topic:this.session.topic,chainId:`polkadot:${r.genesisHash.replace("0x","").slice(0,32)}`,request:{method:"polkadot_signTransaction",params:{address:i,transactionPayload:r}}})},signRaw:async e=>{let t=this.convertChainIdToCaipId(this.connectedChains)[0],s=this.session.namespaces.polkadot.accounts.find(l=>{let u=l.replace(`${t}:`,"");return l.includes(t)&&c(e.address,u)});if(!s)throw new Error(`No accounts available for chain ${t}`);let i=s.replace(`${t}:`,""),r={...e};return await this.provider.client.request({topic:this.session.topic,chainId:t,request:{method:"polkadot_signMessage",params:{address:i,message:r.data,type:r.type}}})}}}async startSubscription(){if(await this.cleanupSubscription(),!this.provider?.client||!this.session)throw new Error(`Connector ${this.id}: Cannot subscribe, provider or session not available.`);try{let e=async()=>{console.log(`Connector ${this.id}: Session deleted, disconnecting...`),await this.cleanup(),this.emit("disconnect");};this.provider.client.on("session_delete",e),this.unsubscribe=()=>{this.provider?.client?.off("session_delete",e);};}catch{this.unsubscribe=null;}}async cleanupSubscription(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,console.log(`Connector ${this.id}: Unsubscribed from events.`));}async cleanup(){await this.cleanupSubscription(),this.accounts=[],this.signer=void 0,this.provider=void 0,this.session=void 0;}},M=c=>new h(c);var O=c=>i$1()?g():!i$1()&&"mobileOnly"in c&&c.mobileOnly?(console.error("Nova Wallet mobile connector is being used on a desktop device. This may not work as expected."),g()):new h({id:"nova",name:"Nova",icon:l,links:{browserExtension:"https://novawallet.io"},...c});var T=()=>new o({id:"polkadot-js",name:"Polkadot{.js}",icon:q,links:{browserExtension:"https://polkadot.js.org/extension"}});var _=()=>new o({id:"polkagate",name:"Polkagate",icon:r,links:{browserExtension:"https://chromewebstore.google.com/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"}});var N=()=>new o({id:"subwallet-js",name:"SubWallet",icon:s,links:{browserExtension:"https://chromewebstore.google.com/detail/subwallet-polkadot-wallet/onhogfjeacnfoofkfgppdlbmlmnplgbn",deepLink:"https://mobile.subwallet.app/browser"}});var H=()=>new o({id:"talisman",name:"Talisman",icon:t,links:{browserExtension:"https://chromewebstore.google.com/detail/talisman-wallet/fijngjgcjhjmmpcmkeiomlglpeiijkld"}});
|
|
2
2
|
export{d as BaseConnector,o as InjectConnector,W as enkryptConnector,U as fearlessConnector,R as mimirConnector,O as novaConnector,g as novaMobileConnector,T as polkadotjsConnector,_ as polkagateConnector,N as subwalletConnector,H as talismanConnector,M as walletConnectConnector};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connectors/base.ts","../../src/connectors/inject.ts","../../src/connectors/enkrypt.ts","../../src/connectors/fearless.ts","../../src/connectors/mimir.ts","../../src/connectors/novaMobile.ts","../../src/connectors/walletconnect.ts","../../src/connectors/nova.ts","../../src/connectors/polkadot-js.ts","../../src/connectors/polkagate.ts","../../src/connectors/subwallet.ts","../../src/connectors/talisman.ts"],"names":["BaseConnector","EventEmitter","InjectConnector","options","injectedWeb3","appName","rawAccounts","mapInjectedAccounts","error","message","address","signer","acc","dataHex","stringToHex","updatedRawAccounts","newAccounts","enkryptConnector","enkryptWallet","fearlessConnector","fearlessWallet","MimirConnector","isMimirReady","MIMIR_REGEXP","inject","origin","mimirConnector","mimirWallet","NovaMobileConnector","novaWallet","novaMobileConnector","WalletConnectConnector","walletconnectWallet","chains","chain","effectiveChains","UniversalProvider","accounts","uri","approval","session","targetChain","caipId","result","_","reject","signature","resolve","payload","chainCaipId","chainAccount","isSameAddress","chainAddress","updatedPayload","sessionDeleteHandler","walletConnectConnector","novaConnector","config","isMobileDevice","polkadotjsConnector","polkadotjsWallet","polkagateConnector","polkagateWallet","subwalletConnector","subwalletWallet","talismanConnector","talismanWallet"],"mappings":"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","file":"index.js","sourcesContent":["import { EventEmitter } from 'eventemitter3';\nimport type { Account, Chain, ConnectorLinks, Signer } from '../types';\n\n/**\n * base connector abstract class\n * defines the basic properties and methods that all wallet connectors should have.\n */\nexport abstract class BaseConnector extends EventEmitter {\n /**\n * the unique identifier of the connector (e.g., 'polkadot-js', 'subwallet-js')\n * subclasses must implement.\n */\n abstract readonly id: string;\n\n /**\n * user-friendly connector name (e.g., 'Polkadot{.js}', 'SubWallet')\n * subclasses must implement.\n */\n abstract readonly name: string;\n\n /**\n * connector icon URL (optional)\n * subclasses can implement.\n */\n abstract readonly icon?: string;\n\n readonly links: ConnectorLinks = {};\n /**\n * store the current connected accounts.\n * subclasses are responsible for maintaining this list when connecting and updating accounts.\n */\n protected accounts: Account[] = [];\n /**\n * store the signer.\n * subclasses are responsible for getting and storing it when connecting.\n */\n protected signer: Signer | undefined = undefined;\n\n protected connectionUri: string | undefined = undefined;\n\n constructor() {\n super();\n }\n\n public abstract isAvailable(): Promise<boolean>;\n\n public abstract isInstalled(): boolean;\n\n /**\n * connect to the wallet, get the initial accounts and signer, and set the necessary event listeners.\n * subclasses must implement:\n * 1. get the signer and assign it to this.signer.\n * 2. get the initial accounts list and assign it to this.accounts.\n * 3. set the account update mechanism of itself (e.g., use web3AccountsSubscribe or WalletConnect events).\n * 4. update this.accounts when the account list changes and trigger the 'accountsChanged' event.\n * 5. (optional) trigger the 'connect' event.\n * @returns the initial available accounts list\n */\n abstract connect(\n appName: string,\n chains?: Chain[],\n targetChainId?: string\n ): Promise<Account[] | undefined>;\n /**\n * disconnect from the wallet.\n * subclasses must implement this method to perform specific cleanup logic\n * (e.g., unsubscribe, close session).\n * implementers should clear this.accounts and this.signer after cleanup and trigger the 'disconnect' event.\n */\n abstract disconnect(): Promise<void>;\n\n /**\n * get the current connected accounts list.\n * @returns the current available accounts list\n */\n public async getAccounts(): Promise<Array<Account>> {\n return [...this.accounts];\n }\n\n /**\n * get the cached signer object.\n * @returns the signer object, or undefined if the connection is not successful or cannot be obtained.\n */\n public async getSigner(): Promise<Signer | undefined> {\n if (!this.signer) {\n console.warn(\n `Connector ${this.id}: Signer not available. Connection might be incomplete or failed.`\n );\n }\n return this.signer;\n }\n\n /**\n * sign a message with the specified account.\n */\n abstract signMessage(message: string, address: string): Promise<string | undefined>;\n\n public hasConnectionUri(): boolean {\n return false;\n }\n\n public async getConnectionUri(): Promise<string | undefined> {\n return this.connectionUri;\n }\n}\n","import type { Injected, InjectedAccount } from 'dedot/types';\nimport { stringToHex } from 'dedot/utils';\nimport type { Account, ConnectorLinks, Signer } from '../types';\nimport { mapInjectedAccounts } from '../utils';\nimport { BaseConnector } from './base';\n\nexport interface InjectConnectorOptions {\n id: string;\n name: string;\n icon: string;\n links: ConnectorLinks;\n injectorId?: string;\n}\n\nexport class InjectConnector extends BaseConnector {\n readonly id: string;\n readonly name: string;\n readonly icon: string;\n readonly links: ConnectorLinks;\n protected readonly injectorId: string;\n\n private unsubscribe: (() => void) | null = null;\n\n private specificInjector?: Injected = undefined;\n\n constructor(options: InjectConnectorOptions) {\n super();\n this.id = options.id;\n this.name = options.name;\n this.icon = options.icon;\n this.links = options.links;\n this.injectorId = options.injectorId || options.id;\n }\n\n public isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const injectedWeb3 = window.injectedWeb3;\n return typeof injectedWeb3 === 'object' && typeof injectedWeb3[this.injectorId] !== 'undefined';\n }\n\n public async isAvailable(): Promise<boolean> {\n return this.isInstalled();\n }\n\n public async connect(appName: string): Promise<Account[] | undefined> {\n console.log(`Connector ${this.id}: Attempting to connect...`);\n if (this.signer) {\n console.log(`Connector ${this.id}: Already connected.`);\n return [...this.accounts];\n }\n if (!(await this.isAvailable())) {\n throw new Error(`${this.name} extension not found or not enabled.`);\n }\n\n try {\n this.specificInjector = (await window.injectedWeb3![this.injectorId]!.enable(\n appName\n )) as Injected;\n\n if (!this.specificInjector) {\n throw new Error(`Failed to enable the '${this.id}' extension.`);\n }\n\n this.signer = this.specificInjector.signer as Signer;\n\n if (!this.signer) {\n throw new Error(`Could not get signer from ${this.name}.`);\n }\n\n const rawAccounts = await this.specificInjector.accounts.get();\n if (rawAccounts.length === 0) {\n throw new Error(\n `No accounts found in ${this.name}. Make sure accounts are visible and access is granted.`\n );\n }\n this.accounts = mapInjectedAccounts(rawAccounts, this.id);\n console.log(`Connector ${this.id}: Initial accounts loaded`, this.accounts);\n\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n\n return [...this.accounts];\n } catch (error) {\n console.error(`Connector ${this.id}: Connection failed:`, error);\n await this.cleanup();\n throw error;\n }\n }\n\n public async disconnect(): Promise<void> {\n console.log(`Connector ${this.id}: Disconnecting...`);\n await this.cleanup();\n this.emit('disconnect');\n }\n\n public async signMessage(message: string, address: string): Promise<string | undefined> {\n if (!address || !message) return undefined;\n const signer = await this.getSigner();\n if (!signer || !signer?.signRaw) {\n throw new Error('Signer is not available or does not support signRaw.');\n }\n const accounts = await this.getAccounts();\n if (!accounts.some((acc) => acc.address.toLowerCase() === address.toLowerCase())) {\n throw new Error(`Address ${address} is not managed by ${this.name}.`);\n }\n\n try {\n const dataHex = stringToHex(message);\n const result = await signer.signRaw({ address, data: dataHex, type: 'bytes' });\n return result.signature;\n } catch (error: any) {\n console.log('error', error);\n throw new Error(`Connector ${this.id}: Failed to sign message: ${error.message}`);\n }\n }\n\n private async startSubscription(): Promise<void> {\n await this.cleanupSubscription();\n if (!this.specificInjector) {\n throw new Error(`Connector ${this.id}: Cannot subscribe, specificInjector not available.`);\n }\n\n try {\n this.unsubscribe = this.specificInjector.accounts.subscribe(\n (updatedRawAccounts: InjectedAccount[]) => {\n const newAccounts = mapInjectedAccounts(updatedRawAccounts, this.id);\n if (JSON.stringify(this.accounts) !== JSON.stringify(newAccounts)) {\n this.accounts = newAccounts;\n this.emit('accountsChanged', [...this.accounts]);\n }\n }\n );\n console.log(`Connector ${this.id}: Subscribed to account changes.`);\n } catch (error) {\n console.error(`Connector ${this.id}: Failed to subscribe to accounts:`, error);\n this.unsubscribe = null;\n }\n }\n\n private async cleanupSubscription(): Promise<void> {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n console.log(`Connector ${this.id}: Unsubscribed from account changes.`);\n }\n }\n\n private async cleanup(): Promise<void> {\n await this.cleanupSubscription();\n this.accounts = [];\n this.signer = undefined;\n this.specificInjector = undefined;\n }\n}\n","import { enkryptWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const enkryptConnector = () => {\n return new InjectConnector({\n id: 'enkrypt',\n name: 'Enkrypt',\n icon: enkryptWallet,\n links: {\n browserExtension: 'https://www.enkrypt.com',\n },\n });\n};\n","import { fearlessWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const fearlessConnector = () => {\n return new InjectConnector({\n id: 'fearless-wallet',\n name: 'Fearless',\n icon: fearlessWallet,\n links: {\n browserExtension: 'https://fearlesswallet.io',\n },\n });\n};\n","import { mimirWallet } from '../config/logos/generated';\nimport { InjectConnector, type InjectConnectorOptions } from './inject';\n\nexport class MimirConnector extends InjectConnector {\n private mimirReady: boolean = false;\n\n constructor(options: InjectConnectorOptions) {\n super({ ...options });\n\n this.mimirInject();\n }\n\n public isInstalled(): boolean {\n return this.mimirReady;\n }\n\n private async mimirInject() {\n try {\n const inIframe = typeof window !== 'undefined' && window !== window.parent;\n if (!inIframe) return;\n\n const { isMimirReady, MIMIR_REGEXP, inject } = await import('@mimirdev/apps-inject');\n\n const origin = await isMimirReady();\n\n if (origin && MIMIR_REGEXP.test(origin)) {\n inject();\n this.mimirReady = true;\n }\n } catch (e: any) {\n console.error('Failed to inject Mimir:', e);\n }\n }\n\n public async connect(appName: string) {\n if (!this.mimirReady) {\n const { MIMIR_REGEXP } = await import('@mimirdev/apps-inject');\n\n if (!window.origin || !MIMIR_REGEXP.test(window.origin)) {\n window.open(`https://app.mimir.global/explorer/${encodeURIComponent(window.origin)}`);\n return;\n }\n }\n\n return super.connect(appName);\n }\n}\n\nexport function mimirConnector(): MimirConnector {\n return new MimirConnector({\n id: 'mimir',\n name: 'Mimir',\n icon: mimirWallet,\n links: {\n browserExtension: 'https://mimir.global',\n },\n });\n}\n","import { novaWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport class NovaMobileConnector extends InjectConnector {\n constructor() {\n super({\n id: 'nova-mobile',\n name: 'Nova',\n icon: novaWallet,\n injectorId: 'polkadot-js',\n links: {\n deepLink: 'https://app.novawallet.io/open/dapp',\n },\n });\n }\n\n public isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const injectedWeb3 = window.injectedWeb3;\n return (\n typeof injectedWeb3 === 'object' &&\n typeof injectedWeb3['polkadot-js'] !== 'undefined' &&\n window.walletExtension?.isNovaWallet === true\n );\n }\n\n public async isAvailable(): Promise<boolean> {\n return this.isInstalled();\n }\n}\n\nexport const novaMobileConnector = () => new NovaMobileConnector();\n","import { type SessionTypes, SignClientTypes } from '@walletconnect/types';\nimport type { IUniversalProvider, Metadata } from '@walletconnect/universal-provider';\nimport type { SignerPayloadJSON, SignerPayloadRaw, SignerResult } from 'dedot/types';\nimport { walletconnectWallet } from '../config/logos/generated';\nimport type {\n Account,\n Chain,\n ConnectorLinks,\n HexString,\n Signer,\n WalletConnectConnectorOptions,\n} from '../types';\nimport { isSameAddress } from '../utils';\nimport { BaseConnector } from './base';\n\nexport class WalletConnectConnector extends BaseConnector {\n readonly id: string;\n readonly name: string;\n readonly icon: string;\n readonly links: ConnectorLinks;\n\n private provider?: IUniversalProvider;\n private projectId: string;\n private relayUrl: string;\n private metadata?: Metadata;\n private supportedChains: HexString[] = [];\n\n private session?: SessionTypes.Struct;\n private connectedChains?: Chain[] | HexString[];\n\n private unsubscribe: (() => void) | null = null;\n\n constructor(options: WalletConnectConnectorOptions) {\n super();\n this.id = options.id || 'walletconnect';\n this.name = options.name || 'WalletConnect';\n this.links = options.links || {};\n\n this.icon = options.icon || walletconnectWallet;\n\n this.projectId = options.projectId;\n this.relayUrl = options.relayUrl || 'wss://relay.walletconnect.com';\n this.metadata = options.metadata;\n this.supportedChains = options.supportedChains || [];\n }\n\n public isInstalled(): boolean {\n return false;\n }\n\n public async isAvailable(): Promise<boolean> {\n return true;\n }\n\n private convertChainIdToCaipId(chains: Chain[] | HexString[]): `polkadot:${string}`[] {\n return chains.map((chain) => {\n const capid: HexString = (chain as Chain).genesisHash || chain;\n return `polkadot:${capid.replace('0x', '').slice(0, 32)}` as `polkadot:${string}`;\n });\n }\n\n public async connect(appName: string, chains?: Chain[]): Promise<Array<Account>> {\n if (!this.projectId) {\n throw new Error(\n `${this.name} requires a projectId. Please visit https://cloud.walletconnect.com to get one.`\n );\n }\n\n const effectiveChains = chains?.length\n ? chains\n : this.supportedChains.length\n ? this.supportedChains\n : undefined;\n\n if (!effectiveChains || effectiveChains.length === 0) {\n throw new Error(`${this.name} requires chains configuration.`);\n }\n\n this.connectedChains = effectiveChains;\n\n const { UniversalProvider } = await import('@walletconnect/universal-provider');\n\n try {\n this.provider = await UniversalProvider.init({\n projectId: this.projectId,\n relayUrl: this.relayUrl,\n metadata: this.metadata || {\n name: appName,\n description: 'LunoKit DApp',\n url: typeof window !== 'undefined' ? window.location.origin : '',\n icons: [this.icon],\n },\n });\n\n if (this.provider.session) {\n this.session = this.provider.session;\n const accounts = this.getAccountsFromSession(effectiveChains);\n this.accounts = accounts;\n\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n return [...this.accounts];\n }\n\n if (!this.provider?.client) {\n throw new Error('Provider not initialized or not connected');\n }\n\n const { uri, approval } = await this.provider.client.connect({\n requiredNamespaces: {\n polkadot: {\n methods: [\n 'polkadot_signMessage',\n 'polkadot_sendTransaction',\n 'polkadot_signTransaction',\n 'polkadot_requestAccounts',\n ],\n chains: this.convertChainIdToCaipId(effectiveChains),\n events: ['accountsChanged', 'chainChanged', 'connect'],\n },\n },\n optionalNamespaces: {\n polkadot: {\n methods: [\n 'polkadot_signMessage',\n 'polkadot_sendTransaction',\n 'polkadot_signTransaction',\n 'polkadot_requestAccounts',\n ],\n chains: this.convertChainIdToCaipId(effectiveChains),\n events: ['accountsChanged', 'chainChanged', 'connect'],\n },\n },\n });\n\n this.emit('get_uri', uri);\n\n const session = await approval();\n this.session = session;\n this.provider.session = session;\n\n this.connectionUri = undefined;\n\n const accounts = this.getAccountsFromSession(effectiveChains);\n this.accounts = accounts;\n\n // 启动订阅\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n return [...this.accounts];\n } catch (error) {\n this.connectionUri = undefined;\n throw error;\n }\n }\n\n private getAccountsFromSession(chains: Chain[] | HexString[]): Account[] {\n const targetChain = [(chains[0] as Chain).genesisHash || chains[0]] as HexString[] | Chain[];\n // ? (chains as Chain[]).filter(chain => chain.genesisHash.toLowerCase() === chainId.toLowerCase())\n // : (chains as string[]).filter(chain => chain.toLowerCase() === chainId.toLowerCase())\n const caipId = this.convertChainIdToCaipId(targetChain)[0];\n\n let rawAccounts = this.session?.namespaces.polkadot.accounts\n .flat()\n .filter((address: string) => address.includes(caipId))\n .map((address: string) => address.replace(`${caipId}:`, ''));\n\n if (rawAccounts && rawAccounts.length === 0) {\n console.error(\n `No accounts found for the specified chain, please connect to the correct chain`\n );\n\n const caipId = this.convertChainIdToCaipId(chains)[0];\n\n rawAccounts = this.session?.namespaces.polkadot.accounts\n .flat()\n .filter((address: string) => address.includes(caipId))\n .map((address: string) => address.replace(`${caipId}:`, ''));\n }\n\n const result = rawAccounts!.map((address: string) => ({\n address,\n name: `${this.name} Account`,\n meta: {\n source: this.id,\n },\n publicKey: undefined,\n }));\n\n this.emit('accountsChanged', [...result]);\n\n return result!;\n }\n\n public async disconnect(): Promise<void> {\n try {\n if (this.provider) {\n await Promise.race([\n await this.provider.disconnect(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Disconnect timeout')), 5000)\n ),\n ]);\n }\n } catch (e) {}\n\n await this.cleanup();\n this.emit('disconnect');\n }\n\n public async signMessage(message: string, address: string): Promise<string | undefined> {\n if (!this.provider?.client || !this.session?.topic) {\n throw new Error('Provider not initialized or not connected');\n }\n\n try {\n const signer = await this.getSigner();\n if (!signer) {\n throw new Error('No signer provided');\n }\n\n const { signature } = await signer.signRaw!({ address, data: message, type: 'bytes' });\n return signature;\n } catch (error) {\n console.error('Sign message error:', error);\n throw error;\n }\n }\n\n public hasConnectionUri(): boolean {\n return true;\n }\n\n public async getConnectionUri(): Promise<string> {\n if (this.connectionUri) {\n return this.connectionUri;\n }\n\n return new Promise<string>((resolve) => {\n this.once('get_uri', (uri: string) => {\n this.connectionUri = uri;\n resolve(uri);\n });\n });\n }\n\n public async getSigner(): Promise<Signer | undefined> {\n if (!this.provider?.client || !this.session) return undefined;\n\n return {\n signPayload: async (payload: SignerPayloadJSON): Promise<SignerResult> => {\n const chainCaipId = `polkadot:${payload.genesisHash.replace('0x', '').slice(0, 32)}`;\n const sessionAccounts = this.session!.namespaces.polkadot.accounts;\n\n const chainAccount = sessionAccounts.find((acc) => {\n const address = acc.replace(`${chainCaipId}:`, '');\n\n return acc.includes(chainCaipId) && isSameAddress(payload.address, address);\n });\n\n if (!chainAccount) {\n throw new Error(`Chain ${payload.genesisHash} is not supported by the wallet.}`);\n }\n\n const chainAddress = chainAccount.replace(`${chainCaipId}:`, '');\n\n const updatedPayload = { ...payload, address: chainAddress };\n\n const result = await this.provider?.client?.request<{ signature: string }>({\n topic: this.session!.topic,\n chainId: `polkadot:${updatedPayload.genesisHash.replace('0x', '').slice(0, 32)}`,\n request: {\n method: 'polkadot_signTransaction',\n params: {\n address: chainAddress,\n transactionPayload: updatedPayload,\n },\n },\n });\n return result as SignerResult;\n },\n signRaw: async (payload: SignerPayloadRaw): Promise<SignerResult> => {\n const chainCaipId = this.convertChainIdToCaipId(this.connectedChains!)[0];\n\n const sessionAccounts = this.session!.namespaces.polkadot.accounts;\n\n const chainAccount = sessionAccounts.find((acc) => {\n const address = acc.replace(`${chainCaipId}:`, '');\n\n return acc.includes(chainCaipId) && isSameAddress(payload.address, address);\n });\n\n if (!chainAccount) {\n throw new Error(`No accounts available for chain ${chainCaipId}`);\n }\n const chainAddress = chainAccount.replace(`${chainCaipId}:`, '');\n\n const updatedPayload = { ...payload, address: chainAddress };\n\n const result: SignerResult = await this.provider!.client!.request({\n topic: this.session!.topic,\n chainId: chainCaipId,\n request: {\n method: 'polkadot_signMessage',\n params: {\n address: chainAddress,\n message: updatedPayload.data,\n type: updatedPayload.type,\n },\n },\n });\n\n return result;\n },\n };\n }\n\n private async startSubscription(): Promise<void> {\n await this.cleanupSubscription();\n\n if (!this.provider?.client || !this.session) {\n throw new Error(`Connector ${this.id}: Cannot subscribe, provider or session not available.`);\n }\n\n try {\n const sessionDeleteHandler = async () => {\n console.log(`Connector ${this.id}: Session deleted, disconnecting...`);\n await this.cleanup();\n this.emit('disconnect');\n };\n this.provider.client.on('session_delete', sessionDeleteHandler);\n\n this.unsubscribe = () => {\n this.provider?.client?.off('session_delete', sessionDeleteHandler);\n };\n } catch (error) {\n this.unsubscribe = null;\n }\n }\n\n private async cleanupSubscription(): Promise<void> {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n console.log(`Connector ${this.id}: Unsubscribed from events.`);\n }\n }\n\n private async cleanup(): Promise<void> {\n await this.cleanupSubscription();\n this.accounts = [];\n this.signer = undefined;\n this.provider = undefined;\n this.session = undefined;\n }\n}\n\nexport const walletConnectConnector = (options: WalletConnectConnectorOptions) =>\n new WalletConnectConnector(options);\n","import { novaWallet } from '../config/logos/generated';\nimport type { WalletConnectConnectorOptions } from '../types';\nimport { isMobileDevice } from '../utils';\nimport { novaMobileConnector } from './novaMobile';\nimport { WalletConnectConnector } from './walletconnect';\n\ntype WalletConnectConfig = Pick<\n WalletConnectConnectorOptions,\n 'projectId' | 'relayUrl' | 'metadata' | 'supportedChains'\n>;\n\ntype MobileOnlyConfig = {\n mobileOnly: true;\n};\n\ntype NovaConnectorConfig = WalletConnectConfig | MobileOnlyConfig;\n\nexport const novaConnector = (config: NovaConnectorConfig) => {\n if (isMobileDevice()) {\n return novaMobileConnector();\n }\n\n if (!isMobileDevice() && 'mobileOnly' in config && config.mobileOnly) {\n console.error(\n 'Nova Wallet mobile connector is being used on a desktop device. This may not work as expected.'\n );\n return novaMobileConnector();\n }\n\n return new WalletConnectConnector({\n id: 'nova',\n name: 'Nova',\n icon: novaWallet,\n links: {\n browserExtension: 'https://novawallet.io',\n },\n ...(config as WalletConnectConfig),\n });\n};\n","import { polkadotjsWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const polkadotjsConnector = () => {\n return new InjectConnector({\n id: 'polkadot-js',\n name: 'Polkadot{.js}',\n icon: polkadotjsWallet,\n links: {\n browserExtension: 'https://polkadot.js.org/extension',\n },\n });\n};\n","import { polkagateWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const polkagateConnector = () => {\n return new InjectConnector({\n id: 'polkagate',\n name: 'Polkagate',\n icon: polkagateWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp',\n },\n });\n};\n","import { subwalletWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const subwalletConnector = () => {\n return new InjectConnector({\n id: 'subwallet-js',\n name: 'SubWallet',\n icon: subwalletWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/subwallet-polkadot-wallet/onhogfjeacnfoofkfgppdlbmlmnplgbn',\n deepLink: 'https://mobile.subwallet.app/browser',\n },\n });\n};\n","import { talismanWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const talismanConnector = () => {\n return new InjectConnector({\n id: 'talisman',\n name: 'Talisman',\n icon: talismanWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/talisman-wallet/fijngjgcjhjmmpcmkeiomlglpeiijkld',\n },\n });\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/connectors/base.ts","../../src/connectors/inject.ts","../../src/connectors/enkrypt.ts","../../src/connectors/fearless.ts","../../src/connectors/mimir.ts","../../src/connectors/novaMobile.ts","../../src/connectors/walletconnect.ts","../../src/connectors/nova.ts","../../src/connectors/polkadot-js.ts","../../src/connectors/polkagate.ts","../../src/connectors/subwallet.ts","../../src/connectors/talisman.ts"],"names":["BaseConnector","EventEmitter","InjectConnector","options","injectedWeb3","appName","rawAccounts","mapInjectedAccounts","error","message","address","signer","acc","dataHex","stringToHex","updatedRawAccounts","newAccounts","enkryptConnector","enkryptWallet","fearlessConnector","fearlessWallet","MimirConnector","isMimirReady","MIMIR_REGEXP","inject","origin","mimirConnector","mimirWallet","NovaMobileConnector","novaWallet","novaMobileConnector","WalletConnectConnector","walletconnectWallet","chains","chain","effectiveChains","UniversalProvider","accounts","uri","approval","session","targetChain","caipId","result","_","reject","signature","resolve","payload","chainCaipId","chainAccount","isSameAddress","chainAddress","updatedPayload","sessionDeleteHandler","walletConnectConnector","novaConnector","config","isMobileDevice","polkadotjsConnector","polkadotjsWallet","polkagateConnector","polkagateWallet","subwalletConnector","subwalletWallet","talismanConnector","talismanWallet"],"mappings":"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","file":"index.js","sourcesContent":["import { EventEmitter } from 'eventemitter3';\nimport type { Account, Chain, ConnectorLinks, Signer } from '../types';\n\n/**\n * base connector abstract class\n * defines the basic properties and methods that all wallet connectors should have.\n */\nexport abstract class BaseConnector extends EventEmitter {\n /**\n * the unique identifier of the connector (e.g., 'polkadot-js', 'subwallet-js')\n * subclasses must implement.\n */\n abstract readonly id: string;\n\n /**\n * user-friendly connector name (e.g., 'Polkadot{.js}', 'SubWallet')\n * subclasses must implement.\n */\n abstract readonly name: string;\n\n /**\n * connector icon URL (optional)\n * subclasses can implement.\n */\n abstract readonly icon?: string;\n\n readonly links: ConnectorLinks = {};\n /**\n * store the current connected accounts.\n * subclasses are responsible for maintaining this list when connecting and updating accounts.\n */\n protected accounts: Account[] = [];\n /**\n * store the signer.\n * subclasses are responsible for getting and storing it when connecting.\n */\n protected signer: Signer | undefined = undefined;\n\n protected connectionUri: string | undefined = undefined;\n\n constructor() {\n super();\n }\n\n public abstract isAvailable(): Promise<boolean>;\n\n public abstract isInstalled(): boolean;\n\n /**\n * connect to the wallet, get the initial accounts and signer, and set the necessary event listeners.\n * subclasses must implement:\n * 1. get the signer and assign it to this.signer.\n * 2. get the initial accounts list and assign it to this.accounts.\n * 3. set the account update mechanism of itself (e.g., use web3AccountsSubscribe or WalletConnect events).\n * 4. update this.accounts when the account list changes and trigger the 'accountsChanged' event.\n * 5. (optional) trigger the 'connect' event.\n * @returns the initial available accounts list\n */\n abstract connect(\n appName: string,\n chains?: Chain[],\n targetChainId?: string\n ): Promise<Account[] | undefined>;\n /**\n * disconnect from the wallet.\n * subclasses must implement this method to perform specific cleanup logic\n * (e.g., unsubscribe, close session).\n * implementers should clear this.accounts and this.signer after cleanup and trigger the 'disconnect' event.\n */\n abstract disconnect(): Promise<void>;\n\n /**\n * get the current connected accounts list.\n * @returns the current available accounts list\n */\n public async getAccounts(): Promise<Array<Account>> {\n return [...this.accounts];\n }\n\n /**\n * get the cached signer object.\n * @returns the signer object, or undefined if the connection is not successful or cannot be obtained.\n */\n public async getSigner(): Promise<Signer | undefined> {\n if (!this.signer) {\n console.warn(\n `Connector ${this.id}: Signer not available. Connection might be incomplete or failed.`\n );\n }\n return this.signer;\n }\n\n /**\n * sign a message with the specified account.\n */\n abstract signMessage(message: string, address: string): Promise<string | undefined>;\n\n public hasConnectionUri(): boolean {\n return false;\n }\n\n public async getConnectionUri(): Promise<string | undefined> {\n return this.connectionUri;\n }\n}\n","import type { Injected, InjectedAccount } from 'dedot/types';\nimport { stringToHex } from 'dedot/utils';\nimport type { Account, ConnectorLinks, Signer } from '../types';\nimport { mapInjectedAccounts } from '../utils';\nimport { BaseConnector } from './base';\n\nexport interface InjectConnectorOptions {\n id: string;\n name: string;\n icon: string;\n links: ConnectorLinks;\n injectorId?: string;\n}\n\nexport class InjectConnector extends BaseConnector {\n readonly id: string;\n readonly name: string;\n readonly icon: string;\n readonly links: ConnectorLinks;\n protected readonly injectorId: string;\n\n private unsubscribe: (() => void) | null = null;\n\n private specificInjector?: Injected = undefined;\n\n constructor(options: InjectConnectorOptions) {\n super();\n this.id = options.id;\n this.name = options.name;\n this.icon = options.icon;\n this.links = options.links;\n this.injectorId = options.injectorId || options.id;\n }\n\n public isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const injectedWeb3 = window.injectedWeb3;\n return typeof injectedWeb3 === 'object' && typeof injectedWeb3[this.injectorId] !== 'undefined';\n }\n\n public async isAvailable(): Promise<boolean> {\n return this.isInstalled();\n }\n\n public async connect(appName: string): Promise<Account[] | undefined> {\n console.log(`Connector ${this.id}: Attempting to connect...`);\n if (this.signer) {\n console.log(`Connector ${this.id}: Already connected.`);\n return [...this.accounts];\n }\n if (!(await this.isAvailable())) {\n throw new Error(`${this.name} extension not found or not enabled.`);\n }\n\n try {\n this.specificInjector = (await window.injectedWeb3![this.injectorId]!.enable(\n appName\n )) as Injected;\n\n if (!this.specificInjector) {\n throw new Error(`Failed to enable the '${this.id}' extension.`);\n }\n\n this.signer = this.specificInjector.signer as Signer;\n\n if (!this.signer) {\n throw new Error(`Could not get signer from ${this.name}.`);\n }\n\n const rawAccounts = await this.specificInjector.accounts.get();\n if (rawAccounts.length === 0) {\n throw new Error(\n `No accounts found in ${this.name}. Make sure accounts are visible and access is granted.`\n );\n }\n this.accounts = mapInjectedAccounts(rawAccounts, this.id);\n console.log(`Connector ${this.id}: Initial accounts loaded`, this.accounts);\n\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n\n return [...this.accounts];\n } catch (error) {\n console.error(`Connector ${this.id}: Connection failed:`, error);\n await this.cleanup();\n throw error;\n }\n }\n\n public async disconnect(): Promise<void> {\n console.log(`Connector ${this.id}: Disconnecting...`);\n await this.cleanup();\n this.emit('disconnect');\n }\n\n public async signMessage(message: string, address: string): Promise<string | undefined> {\n if (!address || !message) return undefined;\n const signer = await this.getSigner();\n if (!signer || !signer?.signRaw) {\n throw new Error('Signer is not available or does not support signRaw.');\n }\n const accounts = await this.getAccounts();\n if (!accounts.some((acc) => acc.address.toLowerCase() === address.toLowerCase())) {\n throw new Error(`Address ${address} is not managed by ${this.name}.`);\n }\n\n try {\n const dataHex = stringToHex(message);\n const result = await signer.signRaw({ address, data: dataHex, type: 'bytes' });\n return result.signature;\n } catch (error: any) {\n console.log('error', error);\n throw new Error(`Connector ${this.id}: Failed to sign message: ${error.message}`);\n }\n }\n\n private async startSubscription(): Promise<void> {\n await this.cleanupSubscription();\n if (!this.specificInjector) {\n throw new Error(`Connector ${this.id}: Cannot subscribe, specificInjector not available.`);\n }\n\n try {\n this.unsubscribe = this.specificInjector.accounts.subscribe(\n (updatedRawAccounts: InjectedAccount[]) => {\n const newAccounts = mapInjectedAccounts(updatedRawAccounts, this.id);\n if (JSON.stringify(this.accounts) !== JSON.stringify(newAccounts)) {\n this.accounts = newAccounts;\n this.emit('accountsChanged', [...this.accounts]);\n }\n }\n );\n console.log(`Connector ${this.id}: Subscribed to account changes.`);\n } catch (error) {\n console.error(`Connector ${this.id}: Failed to subscribe to accounts:`, error);\n this.unsubscribe = null;\n }\n }\n\n private async cleanupSubscription(): Promise<void> {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n console.log(`Connector ${this.id}: Unsubscribed from account changes.`);\n }\n }\n\n private async cleanup(): Promise<void> {\n await this.cleanupSubscription();\n this.accounts = [];\n this.signer = undefined;\n this.specificInjector = undefined;\n }\n}\n","import { enkryptWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const enkryptConnector = () => {\n return new InjectConnector({\n id: 'enkrypt',\n name: 'Enkrypt',\n icon: enkryptWallet,\n links: {\n browserExtension: 'https://www.enkrypt.com',\n },\n });\n};\n","import { fearlessWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const fearlessConnector = () => {\n return new InjectConnector({\n id: 'fearless-wallet',\n name: 'Fearless',\n icon: fearlessWallet,\n links: {\n browserExtension: 'https://fearlesswallet.io',\n },\n });\n};\n","import { mimirWallet } from '../config/logos/generated';\nimport { InjectConnector, type InjectConnectorOptions } from './inject';\n\nexport class MimirConnector extends InjectConnector {\n private mimirReady: boolean = false;\n\n constructor(options: InjectConnectorOptions) {\n super({ ...options });\n\n this.mimirInject();\n }\n\n public isInstalled(): boolean {\n return this.mimirReady;\n }\n\n private async mimirInject() {\n try {\n const inIframe = typeof window !== 'undefined' && window !== window.parent;\n if (!inIframe) return;\n\n const { isMimirReady, MIMIR_REGEXP, inject } = await import('@mimirdev/apps-inject');\n\n const origin = await isMimirReady();\n\n if (origin && MIMIR_REGEXP.test(origin)) {\n inject();\n this.mimirReady = true;\n }\n } catch (e: any) {\n console.error('Failed to inject Mimir:', e);\n }\n }\n\n public async connect(appName: string) {\n if (!this.mimirReady) {\n const { MIMIR_REGEXP } = await import('@mimirdev/apps-inject');\n\n if (!window.origin || !MIMIR_REGEXP.test(window.origin)) {\n window.open(`https://app.mimir.global/explorer/${encodeURIComponent(window.origin)}`);\n return;\n }\n }\n\n return super.connect(appName);\n }\n}\n\nexport function mimirConnector(): MimirConnector {\n return new MimirConnector({\n id: 'mimir',\n name: 'Mimir',\n icon: mimirWallet,\n links: {\n browserExtension: 'https://mimir.global',\n },\n });\n}\n","import { novaWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport class NovaMobileConnector extends InjectConnector {\n constructor() {\n super({\n id: 'nova-mobile',\n name: 'Nova',\n icon: novaWallet,\n injectorId: 'polkadot-js',\n links: {\n deepLink: 'https://app.novawallet.io/open/dapp',\n },\n });\n }\n\n public isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const injectedWeb3 = window.injectedWeb3;\n return (\n typeof injectedWeb3 === 'object' &&\n typeof injectedWeb3['polkadot-js'] !== 'undefined' &&\n window.walletExtension?.isNovaWallet === true\n );\n }\n\n public async isAvailable(): Promise<boolean> {\n return this.isInstalled();\n }\n}\n\nexport const novaMobileConnector = () => new NovaMobileConnector();\n","import type { SessionTypes } from '@walletconnect/types';\nimport type { IUniversalProvider, Metadata } from '@walletconnect/universal-provider';\nimport type { SignerPayloadJSON, SignerPayloadRaw, SignerResult } from 'dedot/types';\nimport { walletconnectWallet } from '../config/logos/generated';\nimport type {\n Account,\n Chain,\n ConnectorLinks,\n HexString,\n Signer,\n WalletConnectConnectorOptions,\n} from '../types';\nimport { isSameAddress } from '../utils';\nimport { BaseConnector } from './base';\n\nexport class WalletConnectConnector extends BaseConnector {\n readonly id: string;\n readonly name: string;\n readonly icon: string;\n readonly links: ConnectorLinks;\n\n private provider?: IUniversalProvider;\n private projectId: string;\n private relayUrl: string;\n private metadata?: Metadata;\n private supportedChains: HexString[] = [];\n\n private session?: SessionTypes.Struct;\n private connectedChains?: Chain[] | HexString[];\n\n private unsubscribe: (() => void) | null = null;\n\n constructor(options: WalletConnectConnectorOptions) {\n super();\n this.id = options.id || 'walletconnect';\n this.name = options.name || 'WalletConnect';\n this.links = options.links || {};\n\n this.icon = options.icon || walletconnectWallet;\n\n this.projectId = options.projectId;\n this.relayUrl = options.relayUrl || 'wss://relay.walletconnect.com';\n this.metadata = options.metadata;\n this.supportedChains = options.supportedChains || [];\n }\n\n public isInstalled(): boolean {\n return false;\n }\n\n public async isAvailable(): Promise<boolean> {\n return true;\n }\n\n private convertChainIdToCaipId(chains: Chain[] | HexString[]): `polkadot:${string}`[] {\n return chains.map((chain) => {\n const capid: HexString = (chain as Chain).genesisHash || chain;\n return `polkadot:${capid.replace('0x', '').slice(0, 32)}` as `polkadot:${string}`;\n });\n }\n\n public async connect(appName: string, chains?: Chain[]): Promise<Array<Account>> {\n if (!this.projectId) {\n throw new Error(\n `${this.name} requires a projectId. Please visit https://cloud.walletconnect.com to get one.`\n );\n }\n\n const effectiveChains = chains?.length\n ? chains\n : this.supportedChains.length\n ? this.supportedChains\n : undefined;\n\n if (!effectiveChains || effectiveChains.length === 0) {\n throw new Error(`${this.name} requires chains configuration.`);\n }\n\n this.connectedChains = effectiveChains;\n\n const { UniversalProvider } = await import('@walletconnect/universal-provider');\n\n try {\n this.provider = await UniversalProvider.init({\n projectId: this.projectId,\n relayUrl: this.relayUrl,\n metadata: this.metadata || {\n name: appName,\n description: 'LunoKit DApp',\n url: typeof window !== 'undefined' ? window.location.origin : '',\n icons: [this.icon],\n },\n });\n\n if (this.provider.session) {\n this.session = this.provider.session;\n const accounts = this.getAccountsFromSession(effectiveChains);\n this.accounts = accounts;\n\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n return [...this.accounts];\n }\n\n if (!this.provider?.client) {\n throw new Error('Provider not initialized or not connected');\n }\n\n const { uri, approval } = await this.provider.client.connect({\n requiredNamespaces: {\n polkadot: {\n methods: [\n 'polkadot_signMessage',\n 'polkadot_sendTransaction',\n 'polkadot_signTransaction',\n 'polkadot_requestAccounts',\n ],\n chains: this.convertChainIdToCaipId(effectiveChains),\n events: ['accountsChanged', 'chainChanged', 'connect'],\n },\n },\n optionalNamespaces: {\n polkadot: {\n methods: [\n 'polkadot_signMessage',\n 'polkadot_sendTransaction',\n 'polkadot_signTransaction',\n 'polkadot_requestAccounts',\n ],\n chains: this.convertChainIdToCaipId(effectiveChains),\n events: ['accountsChanged', 'chainChanged', 'connect'],\n },\n },\n });\n\n this.emit('get_uri', uri);\n\n const session = await approval();\n this.session = session;\n this.provider.session = session;\n\n this.connectionUri = undefined;\n\n const accounts = this.getAccountsFromSession(effectiveChains);\n this.accounts = accounts;\n\n // 启动订阅\n await this.startSubscription();\n\n this.emit('connect', [...this.accounts]);\n return [...this.accounts];\n } catch (error) {\n this.connectionUri = undefined;\n throw error;\n }\n }\n\n private getAccountsFromSession(chains: Chain[] | HexString[]): Account[] {\n const targetChain = [(chains[0] as Chain).genesisHash || chains[0]] as HexString[] | Chain[];\n // ? (chains as Chain[]).filter(chain => chain.genesisHash.toLowerCase() === chainId.toLowerCase())\n // : (chains as string[]).filter(chain => chain.toLowerCase() === chainId.toLowerCase())\n const caipId = this.convertChainIdToCaipId(targetChain)[0];\n\n let rawAccounts = this.session?.namespaces.polkadot.accounts\n .flat()\n .filter((address: string) => address.includes(caipId))\n .map((address: string) => address.replace(`${caipId}:`, ''));\n\n if (rawAccounts && rawAccounts.length === 0) {\n console.error(\n `No accounts found for the specified chain, please connect to the correct chain`\n );\n\n const caipId = this.convertChainIdToCaipId(chains)[0];\n\n rawAccounts = this.session?.namespaces.polkadot.accounts\n .flat()\n .filter((address: string) => address.includes(caipId))\n .map((address: string) => address.replace(`${caipId}:`, ''));\n }\n\n const result = rawAccounts!.map((address: string) => ({\n address,\n name: `${this.name} Account`,\n meta: {\n source: this.id,\n },\n publicKey: undefined,\n }));\n\n this.emit('accountsChanged', [...result]);\n\n return result!;\n }\n\n public async disconnect(): Promise<void> {\n try {\n if (this.provider) {\n await Promise.race([\n await this.provider.disconnect(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Disconnect timeout')), 5000)\n ),\n ]);\n }\n } catch (e) {}\n\n await this.cleanup();\n this.emit('disconnect');\n }\n\n public async signMessage(message: string, address: string): Promise<string | undefined> {\n if (!this.provider?.client || !this.session?.topic) {\n throw new Error('Provider not initialized or not connected');\n }\n\n try {\n const signer = await this.getSigner();\n if (!signer) {\n throw new Error('No signer provided');\n }\n\n const { signature } = await signer.signRaw!({ address, data: message, type: 'bytes' });\n return signature;\n } catch (error) {\n console.error('Sign message error:', error);\n throw error;\n }\n }\n\n public hasConnectionUri(): boolean {\n return true;\n }\n\n public async getConnectionUri(): Promise<string> {\n if (this.connectionUri) {\n return this.connectionUri;\n }\n\n return new Promise<string>((resolve) => {\n this.once('get_uri', (uri: string) => {\n this.connectionUri = uri;\n resolve(uri);\n });\n });\n }\n\n public async getSigner(): Promise<Signer | undefined> {\n if (!this.provider?.client || !this.session) return undefined;\n\n return {\n signPayload: async (payload: SignerPayloadJSON): Promise<SignerResult> => {\n const chainCaipId = `polkadot:${payload.genesisHash.replace('0x', '').slice(0, 32)}`;\n const sessionAccounts = this.session!.namespaces.polkadot.accounts;\n\n const chainAccount = sessionAccounts.find((acc) => {\n const address = acc.replace(`${chainCaipId}:`, '');\n\n return acc.includes(chainCaipId) && isSameAddress(payload.address, address);\n });\n\n if (!chainAccount) {\n throw new Error(`Chain ${payload.genesisHash} is not supported by the wallet.}`);\n }\n\n const chainAddress = chainAccount.replace(`${chainCaipId}:`, '');\n\n const updatedPayload = { ...payload, address: chainAddress };\n\n const result = await this.provider?.client?.request<{ signature: string }>({\n topic: this.session!.topic,\n chainId: `polkadot:${updatedPayload.genesisHash.replace('0x', '').slice(0, 32)}`,\n request: {\n method: 'polkadot_signTransaction',\n params: {\n address: chainAddress,\n transactionPayload: updatedPayload,\n },\n },\n });\n return result as SignerResult;\n },\n signRaw: async (payload: SignerPayloadRaw): Promise<SignerResult> => {\n const chainCaipId = this.convertChainIdToCaipId(this.connectedChains!)[0];\n\n const sessionAccounts = this.session!.namespaces.polkadot.accounts;\n\n const chainAccount = sessionAccounts.find((acc) => {\n const address = acc.replace(`${chainCaipId}:`, '');\n\n return acc.includes(chainCaipId) && isSameAddress(payload.address, address);\n });\n\n if (!chainAccount) {\n throw new Error(`No accounts available for chain ${chainCaipId}`);\n }\n const chainAddress = chainAccount.replace(`${chainCaipId}:`, '');\n\n const updatedPayload = { ...payload, address: chainAddress };\n\n const result: SignerResult = await this.provider!.client!.request({\n topic: this.session!.topic,\n chainId: chainCaipId,\n request: {\n method: 'polkadot_signMessage',\n params: {\n address: chainAddress,\n message: updatedPayload.data,\n type: updatedPayload.type,\n },\n },\n });\n\n return result;\n },\n };\n }\n\n private async startSubscription(): Promise<void> {\n await this.cleanupSubscription();\n\n if (!this.provider?.client || !this.session) {\n throw new Error(`Connector ${this.id}: Cannot subscribe, provider or session not available.`);\n }\n\n try {\n const sessionDeleteHandler = async () => {\n console.log(`Connector ${this.id}: Session deleted, disconnecting...`);\n await this.cleanup();\n this.emit('disconnect');\n };\n this.provider.client.on('session_delete', sessionDeleteHandler);\n\n this.unsubscribe = () => {\n this.provider?.client?.off('session_delete', sessionDeleteHandler);\n };\n } catch (error) {\n this.unsubscribe = null;\n }\n }\n\n private async cleanupSubscription(): Promise<void> {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n console.log(`Connector ${this.id}: Unsubscribed from events.`);\n }\n }\n\n private async cleanup(): Promise<void> {\n await this.cleanupSubscription();\n this.accounts = [];\n this.signer = undefined;\n this.provider = undefined;\n this.session = undefined;\n }\n}\n\nexport const walletConnectConnector = (options: WalletConnectConnectorOptions) =>\n new WalletConnectConnector(options);\n","import { novaWallet } from '../config/logos/generated';\nimport type { WalletConnectConnectorOptions } from '../types';\nimport { isMobileDevice } from '../utils';\nimport { novaMobileConnector } from './novaMobile';\nimport { WalletConnectConnector } from './walletconnect';\n\ntype WalletConnectConfig = Pick<\n WalletConnectConnectorOptions,\n 'projectId' | 'relayUrl' | 'metadata' | 'supportedChains'\n>;\n\ntype MobileOnlyConfig = {\n mobileOnly: true;\n};\n\ntype NovaConnectorConfig = WalletConnectConfig | MobileOnlyConfig;\n\nexport const novaConnector = (config: NovaConnectorConfig) => {\n if (isMobileDevice()) {\n return novaMobileConnector();\n }\n\n if (!isMobileDevice() && 'mobileOnly' in config && config.mobileOnly) {\n console.error(\n 'Nova Wallet mobile connector is being used on a desktop device. This may not work as expected.'\n );\n return novaMobileConnector();\n }\n\n return new WalletConnectConnector({\n id: 'nova',\n name: 'Nova',\n icon: novaWallet,\n links: {\n browserExtension: 'https://novawallet.io',\n },\n ...(config as WalletConnectConfig),\n });\n};\n","import { polkadotjsWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const polkadotjsConnector = () => {\n return new InjectConnector({\n id: 'polkadot-js',\n name: 'Polkadot{.js}',\n icon: polkadotjsWallet,\n links: {\n browserExtension: 'https://polkadot.js.org/extension',\n },\n });\n};\n","import { polkagateWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const polkagateConnector = () => {\n return new InjectConnector({\n id: 'polkagate',\n name: 'Polkagate',\n icon: polkagateWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp',\n },\n });\n};\n","import { subwalletWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const subwalletConnector = () => {\n return new InjectConnector({\n id: 'subwallet-js',\n name: 'SubWallet',\n icon: subwalletWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/subwallet-polkadot-wallet/onhogfjeacnfoofkfgppdlbmlmnplgbn',\n deepLink: 'https://mobile.subwallet.app/browser',\n },\n });\n};\n","import { talismanWallet } from '../config/logos/generated';\nimport { InjectConnector } from './inject';\n\nexport const talismanConnector = () => {\n return new InjectConnector({\n id: 'talisman',\n name: 'Talisman',\n icon: talismanWallet,\n links: {\n browserExtension:\n 'https://chromewebstore.google.com/detail/talisman-wallet/fijngjgcjhjmmpcmkeiomlglpeiijkld',\n },\n });\n};\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var dedot=require('dedot');function l({storage:t,keyPrefix:a="luno."}){let r=e=>`${a}${e}`;return {async getItem(e){try{let o=r(e),n=await t.getItem(o);return n==null?null:String(n)}catch(o){return console.error(`[LunoStorage] Error getting item "${e}" (full key: "${r(e)}"):`,o),null}},async setItem(e,o){try{let n=r(e);await t.setItem(n,o);}catch(n){console.error(`[LunoStorage] Error setting item "${e}" (full key: "${r(e)}"):`,n);}},async removeItem(e){try{let o=r(e);await t.removeItem(o);}catch(o){console.error(`[LunoStorage] Error removing item "${e}" (full key: "${r(e)}"):`,o);}}}}var
|
|
1
|
+
'use strict';var dedot=require('dedot');function l({storage:t,keyPrefix:a="luno."}){let r=e=>`${a}${e}`;return {async getItem(e){try{let o=r(e),n=await t.getItem(o);return n==null?null:String(n)}catch(o){return console.error(`[LunoStorage] Error getting item "${e}" (full key: "${r(e)}"):`,o),null}},async setItem(e,o){try{let n=r(e);await t.setItem(n,o);}catch(n){console.error(`[LunoStorage] Error setting item "${e}" (full key: "${r(e)}"):`,n);}},async removeItem(e){try{let o=r(e);await t.removeItem(o);}catch(o){console.error(`[LunoStorage] Error removing item "${e}" (full key: "${r(e)}"):`,o);}}}}var w={getItem:async t=>null,setItem:async(t,a)=>{},removeItem:async t=>{}},C=l({storage:typeof window<"u"&&window.localStorage?window.localStorage:w,keyPrefix:"luno."});function S(t){let a={};for(let r of t){let e=r.rpcUrls.webSocket;e?a[r.genesisHash]=e:console.warn(`No WebSocket URL found for chain "${r.name}" (${r.genesisHash}). Skipping transport generation.`);}return a}function R(t){let{appName:a="My Luno App",chains:r=[],connectors:e,transports:o={},storage:n=C,autoConnect:p=true,cacheMetadata:m,metadata:f,scaledResponses:u,customTypes:y,customRpc:d,subscan:h}=t;if(!e||e.length===0)throw new Error("No connectors provided. Wallet connection features will be unavailable.");let i=r.length>0?S(r):{},c=o?{...i,...o}:i;if(r.length>0)for(let s of r)c[s.genesisHash]||console.warn(`Missing transport for chain "${s.name}" (genesisHash: ${s.genesisHash}). Chain functionality may be limited.`);let g={customRpc:d,customTypes:y,cacheMetadata:m,metadata:f,scaledResponses:u,appName:a,chains:Object.freeze([...r]),connectors:Object.freeze([...e]),transports:Object.freeze({...c}),storage:n,autoConnect:p,subscan:h};return console.log("[createConfig]: Luno Core Config created:",g),g}function I(t){return new dedot.WsProvider(t)}exports.createConfig=R;exports.createStorage=l;exports.wsProvider=I;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/createStorage.ts","../src/config/createConfig.ts","../src/config/providers.ts"],"names":["createStorage","storage","keyPrefix","getKey","suffix","keySuffix","fullKey","value","error","noopStorage","_key","_value","defaultLunoStorage","generateTransportsFromChains","chains","transports","chain","wsUrl","createConfig","parameters","appName","connectors","autoConnect","cacheMetadata","metadata","scaledResponses","customTypes","customRpc","transportsFromChains","finalTransports","config","wsProvider","url","WsProvider"],"mappings":"wCAgBO,SAASA,EAAc,CAC5B,OAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,OACd,CAAA,CAAyC,CACvC,IAAMC,CAAAA,CAAUC,GAA2B,CAAA,EAAGF,CAAS,GAAGE,CAAM,CAAA,CAAA,CAEhE,OAAO,CACL,MAAM,OAAA,CAAQC,CAAAA,CAA2C,CACvD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAE1BE,CAAAA,CAAQ,MAAMN,CAAAA,CAAQ,QAAQK,CAAO,CAAA,CAE3C,OAAOC,CAAAA,EAAS,IAAA,CAAO,KAAO,MAAA,CAAOA,CAAK,CAC5C,CAAA,MAASC,EAAO,CACd,OAAA,OAAA,CAAQ,MACN,CAAA,kCAAA,EAAqCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CAChFG,CACF,CAAA,CACO,IACT,CACF,CAAA,CAEA,MAAM,QAAQH,CAAAA,CAAmBE,CAAAA,CAA8B,CAC7D,GAAI,CACF,IAAMD,CAAAA,CAAUH,EAAOE,CAAS,CAAA,CAEhC,MAAMJ,CAAAA,CAAQ,OAAA,CAAQK,EAASC,CAAK,EACtC,OAASC,CAAAA,CAAO,CACd,QAAQ,KAAA,CACN,CAAA,kCAAA,EAAqCH,CAAS,CAAA,cAAA,EAAiBF,CAAAA,CAAOE,CAAS,CAAC,MAChFG,CACF,EAEF,CACF,CAAA,CAEA,MAAM,WAAWH,CAAAA,CAAkC,CACjD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAEhC,MAAMJ,EAAQ,UAAA,CAAWK,CAAO,EAClC,CAAA,MAASE,EAAO,CACd,OAAA,CAAQ,MACN,CAAA,mCAAA,EAAsCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CACjFG,CACF,EACF,CACF,CACF,CACF,CCxDA,IAAMC,
|
|
1
|
+
{"version":3,"sources":["../src/config/createStorage.ts","../src/config/createConfig.ts","../src/config/providers.ts"],"names":["createStorage","storage","keyPrefix","getKey","suffix","keySuffix","fullKey","value","error","noopStorage","_key","_value","defaultLunoStorage","generateTransportsFromChains","chains","transports","chain","wsUrl","createConfig","parameters","appName","connectors","autoConnect","cacheMetadata","metadata","scaledResponses","customTypes","customRpc","subscan","transportsFromChains","finalTransports","config","wsProvider","url","WsProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { LunoStorage, RawStorage } from '../types';\n\n// Defines the parameters for the createStorage function.\nexport interface CreateStorageParameters {\n storage: RawStorage;\n keyPrefix?: string; // Optional key prefix, e.g., \"luno.\"\n}\n\n/**\n * Creates a LunoStorage object that wraps a raw storage mechanism (like localStorage)\n * to provide a consistent async API with key prefixing and error handling.\n *\n * @param storage The raw storage mechanism (e.g., window.localStorage).\n * @param keyPrefix An optional prefix for all storage keys to avoid collisions.\n * @returns A LunoStorage object.\n */\nexport function createStorage({\n storage,\n keyPrefix = 'luno.', // Default key prefix\n}: CreateStorageParameters): LunoStorage {\n const getKey = (suffix: string): string => `${keyPrefix}${suffix}`;\n\n return {\n async getItem(keySuffix: string): Promise<string | null> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage getItem methods consistently\n const value = await storage.getItem(fullKey);\n // Normalize undefined or null to null\n return value == null ? null : String(value);\n } catch (error) {\n console.error(\n `[LunoStorage] Error getting item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n return null; // Return null on error to indicate failure\n }\n },\n\n async setItem(keySuffix: string, value: string): Promise<void> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage setItem methods consistently\n await storage.setItem(fullKey, value);\n } catch (error) {\n console.error(\n `[LunoStorage] Error setting item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n // Errors during setItem are logged but don't typically need to be propagated further in the same way getItem might.\n }\n },\n\n async removeItem(keySuffix: string): Promise<void> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage removeItem methods consistently\n await storage.removeItem(fullKey);\n } catch (error) {\n console.error(\n `[LunoStorage] Error removing item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n }\n },\n };\n}\n","import type {\n Chain,\n Config,\n Connector,\n CreateConfigParameters,\n RawStorage,\n Transport,\n} from '../types';\nimport { createStorage } from './createStorage';\n\nconst noopStorage: RawStorage = {\n getItem: async (_key: string) => null,\n setItem: async (_key: string, _value: string) => {},\n removeItem: async (_key: string) => {},\n};\n\nconst defaultLunoStorage = createStorage({\n storage: typeof window !== 'undefined' && window.localStorage ? window.localStorage : noopStorage,\n keyPrefix: 'luno.',\n});\n\nfunction generateTransportsFromChains(chains: readonly Chain[]): Record<string, Transport> {\n const transports: Record<string, Transport> = {};\n\n for (const chain of chains) {\n const wsUrl = chain.rpcUrls.webSocket;\n if (wsUrl) {\n transports[chain.genesisHash] = wsUrl;\n } else {\n console.warn(\n `No WebSocket URL found for chain \"${chain.name}\" (${chain.genesisHash}). Skipping transport generation.`\n );\n }\n }\n\n return transports;\n}\n\nexport function createConfig(parameters: CreateConfigParameters): Config {\n const {\n appName = 'My Luno App',\n chains = [],\n connectors,\n transports = {},\n storage = defaultLunoStorage,\n autoConnect = true,\n cacheMetadata,\n metadata,\n scaledResponses,\n customTypes,\n customRpc,\n subscan,\n } = parameters;\n\n if (!connectors || connectors.length === 0) {\n throw new Error('No connectors provided. Wallet connection features will be unavailable.');\n }\n\n const transportsFromChains = chains.length > 0 ? generateTransportsFromChains(chains) : {};\n\n const finalTransports = transports\n ? { ...transportsFromChains, ...transports }\n : transportsFromChains;\n\n if (chains.length > 0) {\n for (const chain of chains) {\n if (!finalTransports[chain.genesisHash]) {\n console.warn(\n `Missing transport for chain \"${chain.name}\" (genesisHash: ${chain.genesisHash}). Chain functionality may be limited.`\n );\n }\n }\n }\n\n const config = {\n customRpc,\n customTypes,\n cacheMetadata,\n metadata,\n scaledResponses,\n\n appName,\n chains: Object.freeze([...chains]) as readonly Chain[],\n connectors: Object.freeze([...connectors]) as readonly Connector[],\n transports: Object.freeze({ ...finalTransports }) as Readonly<Record<string, Transport>>,\n storage,\n autoConnect,\n\n subscan,\n };\n\n console.log('[createConfig]: Luno Core Config created:', config);\n\n return config;\n}\n","import { WsProvider } from 'dedot';\nimport type { Transport } from '../types';\n\n/**\n * create a WebSocket Transport (WsProvider) instance.\n * @param url - WebSocket RPC URL or URL array (for fallback).\n * @returns WsProvider instance.\n */\nexport function wsProvider(url: Transport): WsProvider {\n return new WsProvider(url as string[]);\n}\n\nexport type { Transport };\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import { CreateConfigParameters, Config, RawStorage, LunoStorage } from './types/index.cjs';
|
|
2
|
-
export { Transport } from './types/index.cjs';
|
|
1
|
+
import { CreateConfigParameters, Config, RawStorage, LunoStorage, Transport } from './types/index.cjs';
|
|
3
2
|
import { WsProvider } from 'dedot';
|
|
4
|
-
import './chain-xQJ0MDiz.cjs';
|
|
5
3
|
import 'dedot/types';
|
|
6
4
|
import 'dedot/shape';
|
|
7
|
-
import './connector-LleKwjLP.cjs';
|
|
8
5
|
import '@walletconnect/universal-provider';
|
|
9
6
|
import 'eventemitter3';
|
|
10
|
-
import './signer-BimV-6cq.cjs';
|
|
11
7
|
import '@polkadot-api/pjs-signer';
|
|
12
8
|
|
|
13
9
|
declare function createConfig(parameters: CreateConfigParameters): Config;
|
|
@@ -31,6 +27,6 @@ declare function createStorage({ storage, keyPrefix, }: CreateStorageParameters)
|
|
|
31
27
|
* @param url - WebSocket RPC URL or URL array (for fallback).
|
|
32
28
|
* @returns WsProvider instance.
|
|
33
29
|
*/
|
|
34
|
-
declare function wsProvider(url:
|
|
30
|
+
declare function wsProvider(url: Transport): WsProvider;
|
|
35
31
|
|
|
36
|
-
export { type CreateStorageParameters, createConfig, createStorage, wsProvider };
|
|
32
|
+
export { type CreateStorageParameters, Transport, createConfig, createStorage, wsProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import { CreateConfigParameters, Config, RawStorage, LunoStorage } from './types/index.js';
|
|
2
|
-
export { Transport } from './types/index.js';
|
|
1
|
+
import { CreateConfigParameters, Config, RawStorage, LunoStorage, Transport } from './types/index.js';
|
|
3
2
|
import { WsProvider } from 'dedot';
|
|
4
|
-
import './chain-xQJ0MDiz.js';
|
|
5
3
|
import 'dedot/types';
|
|
6
4
|
import 'dedot/shape';
|
|
7
|
-
import './connector-LTtOKOSm.js';
|
|
8
5
|
import '@walletconnect/universal-provider';
|
|
9
6
|
import 'eventemitter3';
|
|
10
|
-
import './signer-BimV-6cq.js';
|
|
11
7
|
import '@polkadot-api/pjs-signer';
|
|
12
8
|
|
|
13
9
|
declare function createConfig(parameters: CreateConfigParameters): Config;
|
|
@@ -31,6 +27,6 @@ declare function createStorage({ storage, keyPrefix, }: CreateStorageParameters)
|
|
|
31
27
|
* @param url - WebSocket RPC URL or URL array (for fallback).
|
|
32
28
|
* @returns WsProvider instance.
|
|
33
29
|
*/
|
|
34
|
-
declare function wsProvider(url:
|
|
30
|
+
declare function wsProvider(url: Transport): WsProvider;
|
|
35
31
|
|
|
36
|
-
export { type CreateStorageParameters, createConfig, createStorage, wsProvider };
|
|
32
|
+
export { type CreateStorageParameters, Transport, createConfig, createStorage, wsProvider };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {WsProvider}from'dedot';function l({storage:t,keyPrefix:a="luno."}){let r=e=>`${a}${e}`;return {async getItem(e){try{let o=r(e),n=await t.getItem(o);return n==null?null:String(n)}catch(o){return console.error(`[LunoStorage] Error getting item "${e}" (full key: "${r(e)}"):`,o),null}},async setItem(e,o){try{let n=r(e);await t.setItem(n,o);}catch(n){console.error(`[LunoStorage] Error setting item "${e}" (full key: "${r(e)}"):`,n);}},async removeItem(e){try{let o=r(e);await t.removeItem(o);}catch(o){console.error(`[LunoStorage] Error removing item "${e}" (full key: "${r(e)}"):`,o);}}}}var
|
|
1
|
+
import {WsProvider}from'dedot';function l({storage:t,keyPrefix:a="luno."}){let r=e=>`${a}${e}`;return {async getItem(e){try{let o=r(e),n=await t.getItem(o);return n==null?null:String(n)}catch(o){return console.error(`[LunoStorage] Error getting item "${e}" (full key: "${r(e)}"):`,o),null}},async setItem(e,o){try{let n=r(e);await t.setItem(n,o);}catch(n){console.error(`[LunoStorage] Error setting item "${e}" (full key: "${r(e)}"):`,n);}},async removeItem(e){try{let o=r(e);await t.removeItem(o);}catch(o){console.error(`[LunoStorage] Error removing item "${e}" (full key: "${r(e)}"):`,o);}}}}var w={getItem:async t=>null,setItem:async(t,a)=>{},removeItem:async t=>{}},C=l({storage:typeof window<"u"&&window.localStorage?window.localStorage:w,keyPrefix:"luno."});function S(t){let a={};for(let r of t){let e=r.rpcUrls.webSocket;e?a[r.genesisHash]=e:console.warn(`No WebSocket URL found for chain "${r.name}" (${r.genesisHash}). Skipping transport generation.`);}return a}function R(t){let{appName:a="My Luno App",chains:r=[],connectors:e,transports:o={},storage:n=C,autoConnect:p=true,cacheMetadata:m,metadata:f,scaledResponses:u,customTypes:y,customRpc:d,subscan:h}=t;if(!e||e.length===0)throw new Error("No connectors provided. Wallet connection features will be unavailable.");let i=r.length>0?S(r):{},c=o?{...i,...o}:i;if(r.length>0)for(let s of r)c[s.genesisHash]||console.warn(`Missing transport for chain "${s.name}" (genesisHash: ${s.genesisHash}). Chain functionality may be limited.`);let g={customRpc:d,customTypes:y,cacheMetadata:m,metadata:f,scaledResponses:u,appName:a,chains:Object.freeze([...r]),connectors:Object.freeze([...e]),transports:Object.freeze({...c}),storage:n,autoConnect:p,subscan:h};return console.log("[createConfig]: Luno Core Config created:",g),g}function I(t){return new WsProvider(t)}export{R as createConfig,l as createStorage,I as wsProvider};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/createStorage.ts","../src/config/createConfig.ts","../src/config/providers.ts"],"names":["createStorage","storage","keyPrefix","getKey","suffix","keySuffix","fullKey","value","error","noopStorage","_key","_value","defaultLunoStorage","generateTransportsFromChains","chains","transports","chain","wsUrl","createConfig","parameters","appName","connectors","autoConnect","cacheMetadata","metadata","scaledResponses","customTypes","customRpc","transportsFromChains","finalTransports","config","wsProvider","url","WsProvider"],"mappings":"+BAgBO,SAASA,EAAc,CAC5B,OAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,OACd,CAAA,CAAyC,CACvC,IAAMC,CAAAA,CAAUC,GAA2B,CAAA,EAAGF,CAAS,GAAGE,CAAM,CAAA,CAAA,CAEhE,OAAO,CACL,MAAM,OAAA,CAAQC,CAAAA,CAA2C,CACvD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAE1BE,CAAAA,CAAQ,MAAMN,CAAAA,CAAQ,QAAQK,CAAO,CAAA,CAE3C,OAAOC,CAAAA,EAAS,IAAA,CAAO,KAAO,MAAA,CAAOA,CAAK,CAC5C,CAAA,MAASC,EAAO,CACd,OAAA,OAAA,CAAQ,MACN,CAAA,kCAAA,EAAqCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CAChFG,CACF,CAAA,CACO,IACT,CACF,CAAA,CAEA,MAAM,QAAQH,CAAAA,CAAmBE,CAAAA,CAA8B,CAC7D,GAAI,CACF,IAAMD,CAAAA,CAAUH,EAAOE,CAAS,CAAA,CAEhC,MAAMJ,CAAAA,CAAQ,OAAA,CAAQK,EAASC,CAAK,EACtC,OAASC,CAAAA,CAAO,CACd,QAAQ,KAAA,CACN,CAAA,kCAAA,EAAqCH,CAAS,CAAA,cAAA,EAAiBF,CAAAA,CAAOE,CAAS,CAAC,MAChFG,CACF,EAEF,CACF,CAAA,CAEA,MAAM,WAAWH,CAAAA,CAAkC,CACjD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAEhC,MAAMJ,EAAQ,UAAA,CAAWK,CAAO,EAClC,CAAA,MAASE,EAAO,CACd,OAAA,CAAQ,MACN,CAAA,mCAAA,EAAsCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CACjFG,CACF,EACF,CACF,CACF,CACF,CCxDA,IAAMC,
|
|
1
|
+
{"version":3,"sources":["../src/config/createStorage.ts","../src/config/createConfig.ts","../src/config/providers.ts"],"names":["createStorage","storage","keyPrefix","getKey","suffix","keySuffix","fullKey","value","error","noopStorage","_key","_value","defaultLunoStorage","generateTransportsFromChains","chains","transports","chain","wsUrl","createConfig","parameters","appName","connectors","autoConnect","cacheMetadata","metadata","scaledResponses","customTypes","customRpc","subscan","transportsFromChains","finalTransports","config","wsProvider","url","WsProvider"],"mappings":"+BAgBO,SAASA,EAAc,CAC5B,OAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,OACd,CAAA,CAAyC,CACvC,IAAMC,CAAAA,CAAUC,GAA2B,CAAA,EAAGF,CAAS,GAAGE,CAAM,CAAA,CAAA,CAEhE,OAAO,CACL,MAAM,OAAA,CAAQC,CAAAA,CAA2C,CACvD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAE1BE,CAAAA,CAAQ,MAAMN,CAAAA,CAAQ,QAAQK,CAAO,CAAA,CAE3C,OAAOC,CAAAA,EAAS,IAAA,CAAO,KAAO,MAAA,CAAOA,CAAK,CAC5C,CAAA,MAASC,EAAO,CACd,OAAA,OAAA,CAAQ,MACN,CAAA,kCAAA,EAAqCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CAChFG,CACF,CAAA,CACO,IACT,CACF,CAAA,CAEA,MAAM,QAAQH,CAAAA,CAAmBE,CAAAA,CAA8B,CAC7D,GAAI,CACF,IAAMD,CAAAA,CAAUH,EAAOE,CAAS,CAAA,CAEhC,MAAMJ,CAAAA,CAAQ,OAAA,CAAQK,EAASC,CAAK,EACtC,OAASC,CAAAA,CAAO,CACd,QAAQ,KAAA,CACN,CAAA,kCAAA,EAAqCH,CAAS,CAAA,cAAA,EAAiBF,CAAAA,CAAOE,CAAS,CAAC,MAChFG,CACF,EAEF,CACF,CAAA,CAEA,MAAM,WAAWH,CAAAA,CAAkC,CACjD,GAAI,CACF,IAAMC,CAAAA,CAAUH,CAAAA,CAAOE,CAAS,CAAA,CAEhC,MAAMJ,EAAQ,UAAA,CAAWK,CAAO,EAClC,CAAA,MAASE,EAAO,CACd,OAAA,CAAQ,MACN,CAAA,mCAAA,EAAsCH,CAAS,iBAAiBF,CAAAA,CAAOE,CAAS,CAAC,CAAA,GAAA,CAAA,CACjFG,CACF,EACF,CACF,CACF,CACF,CCxDA,IAAMC,EAA0B,CAC9B,OAAA,CAAS,MAAOC,CAAAA,EAAiB,KACjC,OAAA,CAAS,MAAOA,EAAcC,CAAAA,GAAmB,GACjD,UAAA,CAAY,MAAOD,CAAAA,EAAiB,EACtC,CAAA,CAEME,CAAAA,CAAqBZ,EAAc,CACvC,OAAA,CAAS,OAAO,MAAA,CAAW,GAAA,EAAe,MAAA,CAAO,YAAA,CAAe,OAAO,YAAA,CAAeS,CAAAA,CACtF,UAAW,OACb,CAAC,EAED,SAASI,CAAAA,CAA6BC,EAAqD,CACzF,IAAMC,EAAwC,EAAC,CAE/C,QAAWC,CAAAA,IAASF,CAAAA,CAAQ,CAC1B,IAAMG,CAAAA,CAAQD,CAAAA,CAAM,OAAA,CAAQ,UACxBC,CAAAA,CACFF,CAAAA,CAAWC,EAAM,WAAW,CAAA,CAAIC,EAEhC,OAAA,CAAQ,IAAA,CACN,CAAA,kCAAA,EAAqCD,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,WAAW,CAAA,iCAAA,CACxE,EAEJ,CAEA,OAAOD,CACT,CAEO,SAASG,EAAaC,CAAAA,CAA4C,CACvE,GAAM,CACJ,OAAA,CAAAC,EAAU,aAAA,CACV,MAAA,CAAAN,EAAS,EAAC,CACV,WAAAO,CAAAA,CACA,UAAA,CAAAN,EAAa,EAAC,CACd,QAAAd,CAAAA,CAAUW,CAAAA,CACV,WAAA,CAAAU,CAAAA,CAAc,KACd,aAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,eAAA,CAAAC,EACA,WAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,QAAAC,CACF,CAAA,CAAIT,EAEJ,GAAI,CAACE,GAAcA,CAAAA,CAAW,MAAA,GAAW,CAAA,CACvC,MAAM,IAAI,KAAA,CAAM,yEAAyE,EAG3F,IAAMQ,CAAAA,CAAuBf,EAAO,MAAA,CAAS,CAAA,CAAID,EAA6BC,CAAM,CAAA,CAAI,EAAC,CAEnFgB,CAAAA,CAAkBf,EACpB,CAAE,GAAGc,EAAsB,GAAGd,CAAW,CAAA,CACzCc,CAAAA,CAEJ,GAAIf,CAAAA,CAAO,MAAA,CAAS,EAClB,IAAA,IAAWE,CAAAA,IAASF,EACbgB,CAAAA,CAAgBd,CAAAA,CAAM,WAAW,CAAA,EACpC,QAAQ,IAAA,CACN,CAAA,6BAAA,EAAgCA,EAAM,IAAI,CAAA,gBAAA,EAAmBA,EAAM,WAAW,CAAA,sCAAA,CAChF,CAAA,CAKN,IAAMe,EAAS,CACb,SAAA,CAAAJ,EACA,WAAA,CAAAD,CAAAA,CACA,cAAAH,CAAAA,CACA,QAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CAEA,QAAAL,CAAAA,CACA,MAAA,CAAQ,OAAO,MAAA,CAAO,CAAC,GAAGN,CAAM,CAAC,CAAA,CACjC,UAAA,CAAY,OAAO,MAAA,CAAO,CAAC,GAAGO,CAAU,CAAC,EACzC,UAAA,CAAY,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGS,CAAgB,CAAC,EAChD,OAAA,CAAA7B,CAAAA,CACA,YAAAqB,CAAAA,CAEA,OAAA,CAAAM,CACF,CAAA,CAEA,eAAQ,GAAA,CAAI,2CAAA,CAA6CG,CAAM,CAAA,CAExDA,CACT,CCtFO,SAASC,EAAWC,CAAAA,CAA4B,CACrD,OAAO,IAAIC,UAAAA,CAAWD,CAAe,CACvC","file":"index.js","sourcesContent":["import type { LunoStorage, RawStorage } from '../types';\n\n// Defines the parameters for the createStorage function.\nexport interface CreateStorageParameters {\n storage: RawStorage;\n keyPrefix?: string; // Optional key prefix, e.g., \"luno.\"\n}\n\n/**\n * Creates a LunoStorage object that wraps a raw storage mechanism (like localStorage)\n * to provide a consistent async API with key prefixing and error handling.\n *\n * @param storage The raw storage mechanism (e.g., window.localStorage).\n * @param keyPrefix An optional prefix for all storage keys to avoid collisions.\n * @returns A LunoStorage object.\n */\nexport function createStorage({\n storage,\n keyPrefix = 'luno.', // Default key prefix\n}: CreateStorageParameters): LunoStorage {\n const getKey = (suffix: string): string => `${keyPrefix}${suffix}`;\n\n return {\n async getItem(keySuffix: string): Promise<string | null> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage getItem methods consistently\n const value = await storage.getItem(fullKey);\n // Normalize undefined or null to null\n return value == null ? null : String(value);\n } catch (error) {\n console.error(\n `[LunoStorage] Error getting item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n return null; // Return null on error to indicate failure\n }\n },\n\n async setItem(keySuffix: string, value: string): Promise<void> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage setItem methods consistently\n await storage.setItem(fullKey, value);\n } catch (error) {\n console.error(\n `[LunoStorage] Error setting item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n // Errors during setItem are logged but don't typically need to be propagated further in the same way getItem might.\n }\n },\n\n async removeItem(keySuffix: string): Promise<void> {\n try {\n const fullKey = getKey(keySuffix);\n // Await to handle both sync and async RawStorage removeItem methods consistently\n await storage.removeItem(fullKey);\n } catch (error) {\n console.error(\n `[LunoStorage] Error removing item \"${keySuffix}\" (full key: \"${getKey(keySuffix)}\"):`,\n error\n );\n }\n },\n };\n}\n","import type {\n Chain,\n Config,\n Connector,\n CreateConfigParameters,\n RawStorage,\n Transport,\n} from '../types';\nimport { createStorage } from './createStorage';\n\nconst noopStorage: RawStorage = {\n getItem: async (_key: string) => null,\n setItem: async (_key: string, _value: string) => {},\n removeItem: async (_key: string) => {},\n};\n\nconst defaultLunoStorage = createStorage({\n storage: typeof window !== 'undefined' && window.localStorage ? window.localStorage : noopStorage,\n keyPrefix: 'luno.',\n});\n\nfunction generateTransportsFromChains(chains: readonly Chain[]): Record<string, Transport> {\n const transports: Record<string, Transport> = {};\n\n for (const chain of chains) {\n const wsUrl = chain.rpcUrls.webSocket;\n if (wsUrl) {\n transports[chain.genesisHash] = wsUrl;\n } else {\n console.warn(\n `No WebSocket URL found for chain \"${chain.name}\" (${chain.genesisHash}). Skipping transport generation.`\n );\n }\n }\n\n return transports;\n}\n\nexport function createConfig(parameters: CreateConfigParameters): Config {\n const {\n appName = 'My Luno App',\n chains = [],\n connectors,\n transports = {},\n storage = defaultLunoStorage,\n autoConnect = true,\n cacheMetadata,\n metadata,\n scaledResponses,\n customTypes,\n customRpc,\n subscan,\n } = parameters;\n\n if (!connectors || connectors.length === 0) {\n throw new Error('No connectors provided. Wallet connection features will be unavailable.');\n }\n\n const transportsFromChains = chains.length > 0 ? generateTransportsFromChains(chains) : {};\n\n const finalTransports = transports\n ? { ...transportsFromChains, ...transports }\n : transportsFromChains;\n\n if (chains.length > 0) {\n for (const chain of chains) {\n if (!finalTransports[chain.genesisHash]) {\n console.warn(\n `Missing transport for chain \"${chain.name}\" (genesisHash: ${chain.genesisHash}). Chain functionality may be limited.`\n );\n }\n }\n }\n\n const config = {\n customRpc,\n customTypes,\n cacheMetadata,\n metadata,\n scaledResponses,\n\n appName,\n chains: Object.freeze([...chains]) as readonly Chain[],\n connectors: Object.freeze([...connectors]) as readonly Connector[],\n transports: Object.freeze({ ...finalTransports }) as Readonly<Record<string, Transport>>,\n storage,\n autoConnect,\n\n subscan,\n };\n\n console.log('[createConfig]: Luno Core Config created:', config);\n\n return config;\n}\n","import { WsProvider } from 'dedot';\nimport type { Transport } from '../types';\n\n/**\n * create a WebSocket Transport (WsProvider) instance.\n * @param url - WebSocket RPC URL or URL array (for fallback).\n * @returns WsProvider instance.\n */\nexport function wsProvider(url: Transport): WsProvider {\n return new WsProvider(url as string[]);\n}\n\nexport type { Transport };\n"]}
|