@rango-dev/provider-xverse 0.10.0 → 0.10.1-next.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"utxo.d.ts","sourceRoot":"","sources":["../../src/actions/utxo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAOtB,wBAAgB,OAAO,IAAI,mBAAmB,CAC5C,WAAW,CAAC,SAAS,CAAC,EACtB,OAAO,CACR,CAaA;AAGD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,WAAW,GAC1B,eAAe,CAAC,WAAW,CAAC,CAgB9B;AAED,eAAO,MAAM,WAAW;;;CAA+B,CAAC"}
1
+ {"version":3,"file":"utxo.d.ts","sourceRoot":"","sources":["../../src/actions/utxo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAWtB,wBAAgB,OAAO,IAAI,mBAAmB,CAC5C,WAAW,CAAC,SAAS,CAAC,EACtB,OAAO,CACR,CA2CA;AAGD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,WAAW,GAC1B,eAAe,CAAC,WAAW,CAAC,CAgB9B;AAED,eAAO,MAAM,WAAW;;;CAA+B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { ProviderMetadata } from '@hub3js/core';
2
2
  export declare const XVERSE_INJECTION_DELAY_MS = 1000;
3
3
  export declare const XVERSE_ACCESS_DENIED_ERROR_CODE = -32002;
4
+ export declare const XVERSE_REJECTION_MESSAGE = "User closed the wallet popup.";
4
5
  export declare const WALLET_ID = "xverse";
5
6
  export declare const metadata: ProviderMetadata;
6
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUrD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,+BAA+B,SAAS,CAAC;AACtD,eAAO,MAAM,SAAS,WAAW,CAAC;AAElC,eAAO,MAAM,QAAQ,EAAE,gBA4BtB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUrD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,+BAA+B,SAAS,CAAC;AACtD,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,SAAS,WAAW,CAAC;AAElC,eAAO,MAAM,QAAQ,EAAE,gBA4BtB,CAAC"}
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- var S=Object.defineProperty;var t=(r,e)=>S(r,"name",{value:e,configurable:!0});import{ProviderBuilder as Y}from"@hub3js/core";import{CAIP_BITCOIN_CHAIN_ID as N,isChainSupported as X}from"@hub3js/bip122";import{UTXO_NAMESPACE as B}from"@hub3js/namespaces";import{DefaultSignerFactory as R,TransactionType as D}from"rango-types";import{isBitcoinBlockchain as T}from"@rango-dev/internal-blockchains";import{SignerError as _}from"rango-types";var c=class{static{t(this,"BTCSigner")}provider;constructor(e){this.provider=e}async signMessage(){throw _.UnimplementedError("signMessage")}async signAndSendTx(e){let{asset:o,psbt:n}=e;if(!n)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");if(!T(o.blockchain))throw new Error(`Signing ${o.blockchain} transaction is not implemented by the signer.`);let d={};n.inputsToSign.forEach(({address:C,signingIndexes:y})=>{d[C]=y});let i=await this.provider.request("signPsbt",{psbt:n.unsignedPsbtBase64,signInputs:d,broadcast:!0});if(i?.error)throw new Error(i.error.message||"Error during transaction sign");if(!i?.result?.txid)throw new Error("Transaction not found!");return{hash:i.result.txid}}};async function m(r){let e=r.get(B),o=new R;return e&&o.registerSigner(D.TRANSFER,new c(e)),o}t(m,"getSigners");import{UTXO_NAMESPACE as f}from"@hub3js/namespaces";function a(){let{XverseProviders:r}=window;if(!r)return null;let e=new Map;return r.BitcoinProvider&&e.set(f,r.BitcoinProvider),e}t(a,"xverse");function l(){let r=a();if(!r)throw new Error("Xverse is not injected. Please check your wallet.");return r}t(l,"getInstanceOrThrow");function p(){let e=a()?.get(f);if(!e)throw new Error("Xverse not injected. Please check your wallet.");return e}t(p,"bitcoinXverse");async function g(){let e=await p().request("wallet_connect",{addresses:["payment"],network:"Mainnet"});if(e.error?.message)throw new Error(e.error.message);return e}t(g,"getBitcoinAccounts");var h=1e3,E=-32002,s="xverse",b={name:"xverse",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/xverse/icon.svg",extensions:{chrome:"https://chromewebstore.google.com/detail/idnnbdplmphpflfnlkomgpfbpcgelopg",homepage:"https://www.xverse.app/"},properties:[{name:"namespaces",value:{selection:"single",data:[{label:"BTC",value:"UTXO",id:"BTC",isChainSupported:X([N])}]}},{name:"signers",value:{getSigners:async()=>m(l())}}]};import{builders as P}from"@hub3js/bip122";import{NamespaceBuilder as F}from"@hub3js/core";import*as x from"@hub3js/std/builders";import{standardizeAndThrowError as W}from"@hub3js/std/operators";import{CAIP_BITCOIN_CHAIN_ID as O,utils as L}from"@hub3js/bip122";function j(){return async()=>{let r=await g();if(r.result?.addresses?.length===0)throw new Error("Couldn't find any address!");return L.formatAccountsToCAIP(r.result.addresses.map(e=>e.address),O)}}t(j,"connect");function U(r){return async()=>{try{let e=await r().request("getAddresses",{purposes:["payment"]});return e.error?.code===E?!1:!!e.result?.addresses?.length}catch{return!1}}}t(U,"canEagerConnect");var u={connect:j,canEagerConnect:U};import{builders as M,CAIP_BITCOIN_CHAIN_ID as A,utils as k}from"@hub3js/bip122";var V=t(r=>M.changeAccountSubscriber(r,{network:A}).onSwitchAccount(e=>{e.payload?.addresses?.length||e.preventDefault()}).format(async(e,o)=>k.formatAccountsToCAIP(o.addresses.filter(n=>n.purpose==="payment").map(n=>n.address),A)).addEventListener((e,o)=>e.addListener("accountChange",o)).removeEventListener((e,o)=>{}),"changeAccountSubscriber"),v={changeAccountSubscriber:V};var[q,w]=v.changeAccountSubscriber(p).build(),H=P.canEagerConnect().action(u.canEagerConnect(p)).build(),G=P.connect().action(u.connect()).before(q).or(w).or(W).build(),J=x.disconnect().after(w).build(),I=new F("UTXO",s).action(G).action(J).action(H).build();var z=t(()=>new Y(s).init(function(r){let[,e]=r.state();setTimeout(()=>{a()&&(e("installed",!0),console.debug("[xverse] instance detected.",r))},h)}).config("metadata",b).add("utxo",I).build(),"buildProvider");export{s as WALLET_ID,z as buildProvider};
1
+ var y=Object.defineProperty;var t=(e,r)=>y(e,"name",{value:r,configurable:!0});import{ProviderBuilder as $}from"@hub3js/core";import{CAIP_BITCOIN_CHAIN_ID as X,isChainSupported as U}from"@hub3js/bip122";import{UTXO_NAMESPACE as B}from"@hub3js/namespaces";import{DefaultSignerFactory as N,TransactionType as O}from"rango-types";import{isBitcoinBlockchain as R}from"@rango-dev/internal-blockchains";import{SignerError as D}from"rango-types";var c=class{static{t(this,"BTCSigner")}provider;constructor(r){this.provider=r}async signMessage(){throw D.UnimplementedError("signMessage")}async signAndSendTx(r){let{asset:o,psbt:n}=r;if(!n)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");if(!R(o.blockchain))throw new Error(`Signing ${o.blockchain} transaction is not implemented by the signer.`);let f={};n.inputsToSign.forEach(({address:_,signingIndexes:T})=>{f[_]=T});let i=await this.provider.request("signPsbt",{psbt:n.unsignedPsbtBase64,signInputs:f,broadcast:!0});if(i?.error)throw new Error(i.error.message||"Error during transaction sign");if(!i?.result?.txid)throw new Error("Transaction not found!");return{hash:i.result.txid}}};async function u(e){let r=e.get(B),o=new N;return r&&o.registerSigner(O.TRANSFER,new c(r)),o}t(u,"getSigners");import{UTXO_NAMESPACE as l}from"@hub3js/namespaces";function a(){let{XverseProviders:e}=window;if(!e)return null;let r=new Map;return e.BitcoinProvider&&r.set(l,e.BitcoinProvider),r}t(a,"xverse");function g(){let e=a();if(!e)throw new Error("Xverse is not injected. Please check your wallet.");return e}t(g,"getInstanceOrThrow");function p(){let r=a()?.get(l);if(!r)throw new Error("Xverse not injected. Please check your wallet.");return r}t(p,"bitcoinXverse");async function h(){return await p().request("wallet_connect",{addresses:["payment"],network:"Mainnet"})}t(h,"getBitcoinAccounts");var P=1e3,A=-32002,d="User closed the wallet popup.",s="xverse",b={name:"xverse",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/xverse/icon.svg",extensions:{chrome:"https://chromewebstore.google.com/detail/idnnbdplmphpflfnlkomgpfbpcgelopg",homepage:"https://www.xverse.app/"},properties:[{name:"namespaces",value:{selection:"single",data:[{label:"BTC",value:"UTXO",id:"BTC",isChainSupported:U([X])}]}},{name:"signers",value:{getSigners:async()=>u(g())}}]};import{builders as w}from"@hub3js/bip122";import{NamespaceBuilder as q}from"@hub3js/core";import*as I from"@hub3js/std/builders";import{standardizeAndThrowError as G}from"@hub3js/std/operators";import{CAIP_BITCOIN_CHAIN_ID as V,utils as L}from"@hub3js/bip122";import{getErrorMessage as M,Hub3Error as m}from"@hub3js/core";function j(){return async()=>{try{let e=await h();if(e.error?.message){let r=e.error.message===d?"PROVIDER_USER_REJECTED_REQUEST":"PROVIDER_UNEXPECTED";throw new m(r,e.error.message,{cause:e.error})}if(e.result?.addresses?.length===0)throw new m("PROVIDER_UNEXPECTED","Couldn't find any address!");return L.formatAccountsToCAIP(e.result.addresses.map(r=>r.address),V)}catch(e){throw e instanceof m?e:e instanceof Error&&e.message===d?new m("PROVIDER_USER_REJECTED_REQUEST",M(e),{cause:e}):e}}}t(j,"connect");function k(e){return async()=>{try{let r=await e().request("getAddresses",{purposes:["payment"]});return r.error?.code===A?!1:!!r.result?.addresses?.length}catch{return!1}}}t(k,"canEagerConnect");var E={connect:j,canEagerConnect:k};import{builders as F,CAIP_BITCOIN_CHAIN_ID as v,utils as J}from"@hub3js/bip122";var W=t(e=>F.changeAccountSubscriber(e,{network:v}).onSwitchAccount(r=>{r.payload?.addresses?.length||r.preventDefault()}).format(async(r,o)=>J.formatAccountsToCAIP(o.addresses.filter(n=>n.purpose==="payment").map(n=>n.address),v)).addEventListener((r,o)=>r.addListener("accountChange",o)).removeEventListener((r,o)=>{}),"changeAccountSubscriber"),x={changeAccountSubscriber:W};var[H,C]=x.changeAccountSubscriber(p).build(),Q=w.canEagerConnect().action(E.canEagerConnect(p)).build(),Y=w.connect().action(E.connect()).before(H).or(C).or(G).build(),z=I.disconnect().after(C).build(),S=new q("UTXO",s).action(Y).action(z).action(Q).build();var K=t(()=>new $(s).init(function(e){let[,r]=e.state();setTimeout(()=>{a()&&(r("installed",!0),console.debug("[xverse] instance detected.",e))},P)}).config("metadata",b).add("utxo",S).build(),"buildProvider");export{s as WALLET_ID,K as buildProvider};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/signers/utxoSigner.ts", "../src/utils.ts", "../src/namespaces/utxo.ts", "../src/actions/utxo.ts", "../src/builders/utxo.ts"],
4
- "sourcesContent": ["import { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID, XVERSE_INJECTION_DELAY_MS } from './constants.js';\nimport { utxo } from './namespaces/utxo.js';\nimport { xverse as unisatInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n // TODO: We should remove this after we solved not initiating issue.\n setTimeout(() => {\n if (unisatInstance()) {\n setState('installed', true);\n console.debug('[xverse] instance detected.', context);\n }\n }, XVERSE_INJECTION_DELAY_MS);\n })\n .config('metadata', metadata)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n isChainSupported as isBip122ChainSupported,\n} from '@hub3js/bip122';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const XVERSE_INJECTION_DELAY_MS = 1000;\nexport const XVERSE_ACCESS_DENIED_ERROR_CODE = -32002;\nexport const WALLET_ID = 'xverse';\n\nexport const metadata: ProviderMetadata = {\n name: 'xverse',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/xverse/icon.svg',\n extensions: {\n chrome:\n 'https://chromewebstore.google.com/detail/idnnbdplmphpflfnlkomgpfbpcgelopg',\n homepage: 'https://www.xverse.app/',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'single',\n data: [\n {\n label: 'BTC',\n value: 'UTXO',\n id: 'BTC',\n isChainSupported: isBip122ChainSupported([CAIP_BITCOIN_CHAIN_ID]),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport { UTXO_NAMESPACE } from '@hub3js/namespaces';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { BTCSigner } from './signers/utxoSigner.js';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const bitcoinInstance = provider.get(UTXO_NAMESPACE);\n\n const signers = new DefaultSignerFactory();\n if (!!bitcoinInstance) {\n signers.registerSigner(TxType.TRANSFER, new BTCSigner(bitcoinInstance));\n }\n return signers;\n}\n", "import type { ProviderAPI } from '@hub3js/bip122';\nimport type { GenericSigner, Transfer } from 'rango-types';\n\nimport { isBitcoinBlockchain } from '@rango-dev/internal-blockchains';\nimport { SignerError } from 'rango-types';\n\nexport class BTCSigner implements GenericSigner<Transfer> {\n private provider: ProviderAPI;\n constructor(provider: ProviderAPI) {\n this.provider = provider;\n }\n\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { asset, psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n if (!isBitcoinBlockchain(asset.blockchain)) {\n throw new Error(\n `Signing ${asset.blockchain} transaction is not implemented by the signer.`\n );\n }\n\n // 2. Build sign inputs\n const signInputs: Record<string, number[]> = {};\n\n psbt.inputsToSign.forEach(({ address, signingIndexes }) => {\n signInputs[address] = signingIndexes;\n });\n\n // 3. Sign (& broadcast)\n const signPsbtResult = await this.provider.request('signPsbt', {\n psbt: psbt.unsignedPsbtBase64,\n signInputs,\n broadcast: true,\n });\n\n if (signPsbtResult?.error) {\n throw new Error(\n signPsbtResult.error.message || 'Error during transaction sign'\n );\n }\n if (!signPsbtResult?.result?.txid) {\n throw new Error('Transaction not found!');\n }\n\n return { hash: signPsbtResult.result.txid };\n }\n}\n", "import type { Provider, XVerseResponse } from './types.js';\nimport type { ProviderAPI } from '@hub3js/bip122';\n\nimport { UTXO_NAMESPACE } from '@hub3js/namespaces';\n\nexport function xverse(): Provider | null {\n const { XverseProviders } = window;\n\n if (!XverseProviders) {\n return null;\n }\n\n const instances: Provider = new Map();\n\n if (XverseProviders.BitcoinProvider) {\n instances.set(UTXO_NAMESPACE, XverseProviders.BitcoinProvider);\n }\n\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = xverse();\n\n if (!instances) {\n throw new Error('Xverse is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n\nexport function bitcoinXverse(): ProviderAPI {\n const instances = xverse();\n const bitcoinInstance = instances?.get(UTXO_NAMESPACE);\n\n if (!bitcoinInstance) {\n throw new Error('Xverse not injected. Please check your wallet.');\n }\n\n return bitcoinInstance;\n}\nexport async function getBitcoinAccounts(): Promise<XVerseResponse> {\n const instance = bitcoinXverse();\n const requestResult = await instance.request('wallet_connect', {\n addresses: ['payment'],\n network: 'Mainnet',\n });\n\n if (requestResult.error?.message) {\n throw new Error(requestResult.error.message);\n }\n\n return requestResult;\n}\n", "import type { UtxoActions } from '@hub3js/bip122';\n\nimport { builders } from '@hub3js/bip122';\nimport { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { utxoActions } from '../actions/utxo.js';\nimport { utxoBuilders } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { bitcoinXverse } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = utxoBuilders\n .changeAccountSubscriber(bitcoinXverse)\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(utxoActions.canEagerConnect(bitcoinXverse))\n .build();\n\nconst connect = builders\n .connect()\n .action(utxoActions.connect())\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .after(changeAccountCleanup)\n .build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { utxo };\n", "import type { ProviderAPI, UtxoActions } from '@hub3js/bip122';\nimport type {\n CanEagerConnect,\n Context,\n FunctionWithContext,\n} from '@hub3js/core';\n\nimport { CAIP_BITCOIN_CHAIN_ID, utils } from '@hub3js/bip122';\n\nimport { XVERSE_ACCESS_DENIED_ERROR_CODE } from '../constants.js';\nimport { getBitcoinAccounts } from '../utils.js';\n\nexport function connect(): FunctionWithContext<\n UtxoActions['connect'],\n Context\n> {\n return async () => {\n const accountsResult = await getBitcoinAccounts();\n\n if (accountsResult.result?.addresses?.length === 0) {\n throw new Error(\"Couldn't find any address!\");\n }\n\n return utils.formatAccountsToCAIP(\n accountsResult.result.addresses.map((address) => address.address),\n CAIP_BITCOIN_CHAIN_ID\n );\n };\n}\n\n// No silent connect: ask for addresses and read the access-denied code instead.\nexport function canEagerConnect(\n instance: () => ProviderAPI\n): CanEagerConnect<UtxoActions> {\n return async () => {\n try {\n const addressesResponse = await instance().request('getAddresses', {\n purposes: ['payment'],\n });\n\n if (addressesResponse.error?.code === XVERSE_ACCESS_DENIED_ERROR_CODE) {\n return false;\n }\n\n return !!addressesResponse.result?.addresses?.length;\n } catch {\n return false;\n }\n };\n}\n\nexport const utxoActions = { connect, canEagerConnect };\n", "import type { XVerseEvent } from '../types.js';\nimport type { ProviderAPI } from '@hub3js/bip122';\n\nimport { builders, CAIP_BITCOIN_CHAIN_ID, utils } from '@hub3js/bip122';\n\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n builders\n .changeAccountSubscriber<XVerseEvent>(getInstance, {\n network: CAIP_BITCOIN_CHAIN_ID,\n })\n /*\n * Xverse wallet may call the `changeAccount` event with `empty` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload?.addresses?.length) {\n event.preventDefault();\n }\n })\n .format(async (_, event) => {\n return utils.formatAccountsToCAIP(\n event.addresses\n .filter((address) => address.purpose === 'payment')\n .map((address) => address.address),\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .addEventListener((instance, callback) => {\n return instance.addListener('accountChange', callback);\n })\n .removeEventListener((_, __) => {\n // it will be removed by the main class\n });\n\nexport const utxoBuilders = { changeAccountSubscriber };\n"],
5
- "mappings": "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",
6
- "names": ["ProviderBuilder", "CAIP_BITCOIN_CHAIN_ID", "isBip122ChainSupported", "UTXO_NAMESPACE", "DefaultSignerFactory", "TxType", "isBitcoinBlockchain", "SignerError", "BTCSigner", "__name", "provider", "SignerError", "tx", "asset", "psbt", "isBitcoinBlockchain", "signInputs", "address", "signingIndexes", "signPsbtResult", "getSigners", "provider", "bitcoinInstance", "UTXO_NAMESPACE", "signers", "DefaultSignerFactory", "TxType", "BTCSigner", "__name", "UTXO_NAMESPACE", "xverse", "XverseProviders", "instances", "UTXO_NAMESPACE", "__name", "getInstanceOrThrow", "bitcoinXverse", "bitcoinInstance", "getBitcoinAccounts", "requestResult", "XVERSE_INJECTION_DELAY_MS", "XVERSE_ACCESS_DENIED_ERROR_CODE", "WALLET_ID", "metadata", "isBip122ChainSupported", "CAIP_BITCOIN_CHAIN_ID", "getSigners", "getInstanceOrThrow", "builders", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "CAIP_BITCOIN_CHAIN_ID", "utils", "connect", "accountsResult", "getBitcoinAccounts", "utils", "address", "CAIP_BITCOIN_CHAIN_ID", "__name", "canEagerConnect", "instance", "addressesResponse", "XVERSE_ACCESS_DENIED_ERROR_CODE", "utxoActions", "builders", "CAIP_BITCOIN_CHAIN_ID", "utils", "changeAccountSubscriber", "__name", "getInstance", "builders", "CAIP_BITCOIN_CHAIN_ID", "event", "_", "utils", "address", "instance", "callback", "__", "utxoBuilders", "changeAccountSubscriber", "changeAccountCleanup", "utxoBuilders", "bitcoinXverse", "canEagerConnect", "builders", "utxoActions", "connect", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "xverse", "XVERSE_INJECTION_DELAY_MS", "metadata", "utxo"]
4
+ "sourcesContent": ["import { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID, XVERSE_INJECTION_DELAY_MS } from './constants.js';\nimport { utxo } from './namespaces/utxo.js';\nimport { xverse as unisatInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n // TODO: We should remove this after we solved not initiating issue.\n setTimeout(() => {\n if (unisatInstance()) {\n setState('installed', true);\n console.debug('[xverse] instance detected.', context);\n }\n }, XVERSE_INJECTION_DELAY_MS);\n })\n .config('metadata', metadata)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n isChainSupported as isBip122ChainSupported,\n} from '@hub3js/bip122';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const XVERSE_INJECTION_DELAY_MS = 1000;\nexport const XVERSE_ACCESS_DENIED_ERROR_CODE = -32002;\nexport const XVERSE_REJECTION_MESSAGE = 'User closed the wallet popup.';\nexport const WALLET_ID = 'xverse';\n\nexport const metadata: ProviderMetadata = {\n name: 'xverse',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/xverse/icon.svg',\n extensions: {\n chrome:\n 'https://chromewebstore.google.com/detail/idnnbdplmphpflfnlkomgpfbpcgelopg',\n homepage: 'https://www.xverse.app/',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'single',\n data: [\n {\n label: 'BTC',\n value: 'UTXO',\n id: 'BTC',\n isChainSupported: isBip122ChainSupported([CAIP_BITCOIN_CHAIN_ID]),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport { UTXO_NAMESPACE } from '@hub3js/namespaces';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { BTCSigner } from './signers/utxoSigner.js';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const bitcoinInstance = provider.get(UTXO_NAMESPACE);\n\n const signers = new DefaultSignerFactory();\n if (!!bitcoinInstance) {\n signers.registerSigner(TxType.TRANSFER, new BTCSigner(bitcoinInstance));\n }\n return signers;\n}\n", "import type { ProviderAPI } from '@hub3js/bip122';\nimport type { GenericSigner, Transfer } from 'rango-types';\n\nimport { isBitcoinBlockchain } from '@rango-dev/internal-blockchains';\nimport { SignerError } from 'rango-types';\n\nexport class BTCSigner implements GenericSigner<Transfer> {\n private provider: ProviderAPI;\n constructor(provider: ProviderAPI) {\n this.provider = provider;\n }\n\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { asset, psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n if (!isBitcoinBlockchain(asset.blockchain)) {\n throw new Error(\n `Signing ${asset.blockchain} transaction is not implemented by the signer.`\n );\n }\n\n // 2. Build sign inputs\n const signInputs: Record<string, number[]> = {};\n\n psbt.inputsToSign.forEach(({ address, signingIndexes }) => {\n signInputs[address] = signingIndexes;\n });\n\n // 3. Sign (& broadcast)\n const signPsbtResult = await this.provider.request('signPsbt', {\n psbt: psbt.unsignedPsbtBase64,\n signInputs,\n broadcast: true,\n });\n\n if (signPsbtResult?.error) {\n throw new Error(\n signPsbtResult.error.message || 'Error during transaction sign'\n );\n }\n if (!signPsbtResult?.result?.txid) {\n throw new Error('Transaction not found!');\n }\n\n return { hash: signPsbtResult.result.txid };\n }\n}\n", "import type { Provider, XVerseResponse } from './types.js';\nimport type { ProviderAPI } from '@hub3js/bip122';\n\nimport { UTXO_NAMESPACE } from '@hub3js/namespaces';\n\nexport function xverse(): Provider | null {\n const { XverseProviders } = window;\n\n if (!XverseProviders) {\n return null;\n }\n\n const instances: Provider = new Map();\n\n if (XverseProviders.BitcoinProvider) {\n instances.set(UTXO_NAMESPACE, XverseProviders.BitcoinProvider);\n }\n\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = xverse();\n\n if (!instances) {\n throw new Error('Xverse is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n\nexport function bitcoinXverse(): ProviderAPI {\n const instances = xverse();\n const bitcoinInstance = instances?.get(UTXO_NAMESPACE);\n\n if (!bitcoinInstance) {\n throw new Error('Xverse not injected. Please check your wallet.');\n }\n\n return bitcoinInstance;\n}\nexport async function getBitcoinAccounts(): Promise<XVerseResponse> {\n const instance = bitcoinXverse();\n const requestResult = await instance.request('wallet_connect', {\n addresses: ['payment'],\n network: 'Mainnet',\n });\n\n return requestResult;\n}\n", "import type { UtxoActions } from '@hub3js/bip122';\n\nimport { builders } from '@hub3js/bip122';\nimport { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { utxoActions } from '../actions/utxo.js';\nimport { utxoBuilders } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { bitcoinXverse } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = utxoBuilders\n .changeAccountSubscriber(bitcoinXverse)\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(utxoActions.canEagerConnect(bitcoinXverse))\n .build();\n\nconst connect = builders\n .connect()\n .action(utxoActions.connect())\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .after(changeAccountCleanup)\n .build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { utxo };\n", "import type { ProviderAPI, UtxoActions } from '@hub3js/bip122';\nimport type {\n CanEagerConnect,\n Context,\n FunctionWithContext,\n} from '@hub3js/core';\n\nimport { CAIP_BITCOIN_CHAIN_ID, utils } from '@hub3js/bip122';\nimport { getErrorMessage, Hub3Error } from '@hub3js/core';\n\nimport {\n XVERSE_ACCESS_DENIED_ERROR_CODE,\n XVERSE_REJECTION_MESSAGE,\n} from '../constants.js';\nimport { getBitcoinAccounts } from '../utils.js';\n\nexport function connect(): FunctionWithContext<\n UtxoActions['connect'],\n Context\n> {\n return async () => {\n try {\n const accountsResult = await getBitcoinAccounts();\n\n if (accountsResult.error?.message) {\n const type =\n accountsResult.error.message === XVERSE_REJECTION_MESSAGE\n ? 'PROVIDER_USER_REJECTED_REQUEST'\n : 'PROVIDER_UNEXPECTED';\n throw new Hub3Error(type, accountsResult.error.message, {\n cause: accountsResult.error,\n });\n }\n\n if (accountsResult.result?.addresses?.length === 0) {\n throw new Hub3Error(\n 'PROVIDER_UNEXPECTED',\n \"Couldn't find any address!\"\n );\n }\n\n return utils.formatAccountsToCAIP(\n accountsResult.result.addresses.map((address) => address.address),\n CAIP_BITCOIN_CHAIN_ID\n );\n } catch (error) {\n if (error instanceof Hub3Error) {\n throw error;\n }\n if (\n error instanceof Error &&\n error.message === XVERSE_REJECTION_MESSAGE\n ) {\n throw new Hub3Error(\n 'PROVIDER_USER_REJECTED_REQUEST',\n getErrorMessage(error),\n { cause: error }\n );\n }\n throw error;\n }\n };\n}\n\n// No silent connect: ask for addresses and read the access-denied code instead.\nexport function canEagerConnect(\n instance: () => ProviderAPI\n): CanEagerConnect<UtxoActions> {\n return async () => {\n try {\n const addressesResponse = await instance().request('getAddresses', {\n purposes: ['payment'],\n });\n\n if (addressesResponse.error?.code === XVERSE_ACCESS_DENIED_ERROR_CODE) {\n return false;\n }\n\n return !!addressesResponse.result?.addresses?.length;\n } catch {\n return false;\n }\n };\n}\n\nexport const utxoActions = { connect, canEagerConnect };\n", "import type { XVerseEvent } from '../types.js';\nimport type { ProviderAPI } from '@hub3js/bip122';\n\nimport { builders, CAIP_BITCOIN_CHAIN_ID, utils } from '@hub3js/bip122';\n\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n builders\n .changeAccountSubscriber<XVerseEvent>(getInstance, {\n network: CAIP_BITCOIN_CHAIN_ID,\n })\n /*\n * Xverse wallet may call the `changeAccount` event with `empty` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload?.addresses?.length) {\n event.preventDefault();\n }\n })\n .format(async (_, event) => {\n return utils.formatAccountsToCAIP(\n event.addresses\n .filter((address) => address.purpose === 'payment')\n .map((address) => address.address),\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .addEventListener((instance, callback) => {\n return instance.addListener('accountChange', callback);\n })\n .removeEventListener((_, __) => {\n // it will be removed by the main class\n });\n\nexport const utxoBuilders = { changeAccountSubscriber };\n"],
5
+ "mappings": "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",
6
+ "names": ["ProviderBuilder", "CAIP_BITCOIN_CHAIN_ID", "isBip122ChainSupported", "UTXO_NAMESPACE", "DefaultSignerFactory", "TxType", "isBitcoinBlockchain", "SignerError", "BTCSigner", "__name", "provider", "SignerError", "tx", "asset", "psbt", "isBitcoinBlockchain", "signInputs", "address", "signingIndexes", "signPsbtResult", "getSigners", "provider", "bitcoinInstance", "UTXO_NAMESPACE", "signers", "DefaultSignerFactory", "TxType", "BTCSigner", "__name", "UTXO_NAMESPACE", "xverse", "XverseProviders", "instances", "UTXO_NAMESPACE", "__name", "getInstanceOrThrow", "bitcoinXverse", "bitcoinInstance", "getBitcoinAccounts", "XVERSE_INJECTION_DELAY_MS", "XVERSE_ACCESS_DENIED_ERROR_CODE", "XVERSE_REJECTION_MESSAGE", "WALLET_ID", "metadata", "isBip122ChainSupported", "CAIP_BITCOIN_CHAIN_ID", "getSigners", "getInstanceOrThrow", "builders", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "CAIP_BITCOIN_CHAIN_ID", "utils", "getErrorMessage", "Hub3Error", "connect", "accountsResult", "getBitcoinAccounts", "type", "XVERSE_REJECTION_MESSAGE", "Hub3Error", "utils", "address", "CAIP_BITCOIN_CHAIN_ID", "error", "getErrorMessage", "__name", "canEagerConnect", "instance", "addressesResponse", "XVERSE_ACCESS_DENIED_ERROR_CODE", "utxoActions", "builders", "CAIP_BITCOIN_CHAIN_ID", "utils", "changeAccountSubscriber", "__name", "getInstance", "builders", "CAIP_BITCOIN_CHAIN_ID", "event", "_", "utils", "address", "instance", "callback", "__", "utxoBuilders", "changeAccountSubscriber", "changeAccountCleanup", "utxoBuilders", "bitcoinXverse", "canEagerConnect", "builders", "utxoActions", "connect", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "xverse", "XVERSE_INJECTION_DELAY_MS", "metadata", "utxo"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,wBAAgB,MAAM,IAAI,QAAQ,GAAG,IAAI,CAcxC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AAED,wBAAgB,aAAa,IAAI,WAAW,CAS3C;AACD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAYlE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,wBAAgB,MAAM,IAAI,QAAQ,GAAG,IAAI,CAcxC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AAED,wBAAgB,aAAa,IAAI,WAAW,CAS3C;AACD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAQlE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-xverse",
3
- "version": "0.10.0",
3
+ "version": "0.10.1-next.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -22,20 +22,20 @@
22
22
  "lint": "eslint \"**/*.{ts,tsx}\""
23
23
  },
24
24
  "dependencies": {
25
- "@rango-dev/internal-blockchains": "^0.3.0",
25
+ "@rango-dev/internal-blockchains": "^0.3.1-next.1",
26
26
  "rango-types": "^0.6.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@hub3js/bip122": "^0.3.0",
30
- "@hub3js/core": "^0.63.0",
31
- "@hub3js/namespaces": "^0.7.0",
32
- "@hub3js/std": "^0.5.0"
29
+ "@hub3js/bip122": "^0.4.0",
30
+ "@hub3js/core": "^0.64.0",
31
+ "@hub3js/namespaces": "^0.8.0",
32
+ "@hub3js/std": "^0.6.0"
33
33
  },
34
34
  "peerDependencies": {
35
- "@hub3js/bip122": "^0.3.0",
36
- "@hub3js/core": "^0.63.0",
37
- "@hub3js/namespaces": "^0.7.0",
38
- "@hub3js/std": "^0.5.0"
35
+ "@hub3js/bip122": "^0.4.0",
36
+ "@hub3js/core": "^0.64.0",
37
+ "@hub3js/namespaces": "^0.8.0",
38
+ "@hub3js/std": "^0.6.0"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public"
@@ -6,8 +6,12 @@ import type {
6
6
  } from '@hub3js/core';
7
7
 
8
8
  import { CAIP_BITCOIN_CHAIN_ID, utils } from '@hub3js/bip122';
9
+ import { getErrorMessage, Hub3Error } from '@hub3js/core';
9
10
 
10
- import { XVERSE_ACCESS_DENIED_ERROR_CODE } from '../constants.js';
11
+ import {
12
+ XVERSE_ACCESS_DENIED_ERROR_CODE,
13
+ XVERSE_REJECTION_MESSAGE,
14
+ } from '../constants.js';
11
15
  import { getBitcoinAccounts } from '../utils.js';
12
16
 
13
17
  export function connect(): FunctionWithContext<
@@ -15,16 +19,46 @@ export function connect(): FunctionWithContext<
15
19
  Context
16
20
  > {
17
21
  return async () => {
18
- const accountsResult = await getBitcoinAccounts();
22
+ try {
23
+ const accountsResult = await getBitcoinAccounts();
19
24
 
20
- if (accountsResult.result?.addresses?.length === 0) {
21
- throw new Error("Couldn't find any address!");
22
- }
25
+ if (accountsResult.error?.message) {
26
+ const type =
27
+ accountsResult.error.message === XVERSE_REJECTION_MESSAGE
28
+ ? 'PROVIDER_USER_REJECTED_REQUEST'
29
+ : 'PROVIDER_UNEXPECTED';
30
+ throw new Hub3Error(type, accountsResult.error.message, {
31
+ cause: accountsResult.error,
32
+ });
33
+ }
34
+
35
+ if (accountsResult.result?.addresses?.length === 0) {
36
+ throw new Hub3Error(
37
+ 'PROVIDER_UNEXPECTED',
38
+ "Couldn't find any address!"
39
+ );
40
+ }
23
41
 
24
- return utils.formatAccountsToCAIP(
25
- accountsResult.result.addresses.map((address) => address.address),
26
- CAIP_BITCOIN_CHAIN_ID
27
- );
42
+ return utils.formatAccountsToCAIP(
43
+ accountsResult.result.addresses.map((address) => address.address),
44
+ CAIP_BITCOIN_CHAIN_ID
45
+ );
46
+ } catch (error) {
47
+ if (error instanceof Hub3Error) {
48
+ throw error;
49
+ }
50
+ if (
51
+ error instanceof Error &&
52
+ error.message === XVERSE_REJECTION_MESSAGE
53
+ ) {
54
+ throw new Hub3Error(
55
+ 'PROVIDER_USER_REJECTED_REQUEST',
56
+ getErrorMessage(error),
57
+ { cause: error }
58
+ );
59
+ }
60
+ throw error;
61
+ }
28
62
  };
29
63
  }
30
64
 
package/src/constants.ts CHANGED
@@ -10,6 +10,7 @@ import { getInstanceOrThrow } from './utils.js';
10
10
 
11
11
  export const XVERSE_INJECTION_DELAY_MS = 1000;
12
12
  export const XVERSE_ACCESS_DENIED_ERROR_CODE = -32002;
13
+ export const XVERSE_REJECTION_MESSAGE = 'User closed the wallet popup.';
13
14
  export const WALLET_ID = 'xverse';
14
15
 
15
16
  export const metadata: ProviderMetadata = {
package/src/utils.ts CHANGED
@@ -46,9 +46,5 @@ export async function getBitcoinAccounts(): Promise<XVerseResponse> {
46
46
  network: 'Mainnet',
47
47
  });
48
48
 
49
- if (requestResult.error?.message) {
50
- throw new Error(requestResult.error.message);
51
- }
52
-
53
49
  return requestResult;
54
50
  }