@rango-dev/provider-noir-wallet 0.1.1-next.0 → 0.2.0

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":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKrD,eAAO,MAAM,SAAS,gBAAgB,CAAC;AAEvC,eAAO,MAAM,IAAI,EAAE,gBA+BlB,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,SAAS,gBAAgB,CAAC;AAEvC,eAAO,MAAM,IAAI,EAAE,gBA8BlB,CAAC"}
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- var E=Object.defineProperty;var e=(t,o)=>E(t,"name",{value:o,configurable:!0});import{defineVersions as F}from"@hub3js/core/utils";import{ProviderBuilder as k}from"@hub3js/core";import{isNoirWalletInstalled as M}from"@noir-wallet/sdk";import{DefaultSignerFactory as v,TransactionType as z}from"rango-types";import{LegacyNetworks as I}from"@rango-dev/wallets-core/legacy";import{BigNumber as W}from"bignumber.js";import{SignerError as m,SignerErrorCode as l}from"rango-types";import{getNoirWallet as x}from"@noir-wallet/sdk";var n=e(()=>{let t=x();if(!t)throw new Error("Noir Wallet not installed");return t},"getInstanceOrThrow");var c=class{static{e(this,"CustomUtxoSigner")}async signMessage(o){return(await n().zcash.signMessage(o)).signature}async signAndSendTx(o){let{memo:r,recipientAddress:a,amount:p,decimals:S,blockChain:T}=o;if(T!==I.ZCASH)throw new Error(`You can not sign ${o.blockChain} using ZCash signer.`);if(r)throw new m(l.UNEXPECTED_BEHAVIOUR,"Noir Wallet can not attach a protocol memo (OP_RETURN) to a Zcash transaction.",void 0);let C=new W(p).shiftedBy(-S).toFixed();try{return{hash:await n().zcash.sendTransaction({to:a,amount:C,fundingSource:"transparent"})}}catch(i){throw typeof i=="string"?new m(l.UNEXPECTED_BEHAVIOUR,i,void 0):new m(l.SEND_TX_ERROR,void 0,i)}}};async function u(){let t=new v;return t.registerSigner(z.TRANSFER,new c),t}e(u,"getSigners");var s="noir-wallet",d={name:"Noir Wallet",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/noir-wallet/icon.svg",extensions:{chrome:"https://chromewebstore.google.com/detail/noir-wallet/mfoghjbpfanobmnoemoepenjjcmfpmdn",homepage:"https://www.zknoir.com/"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"Zcash",value:"UTXO",id:"ZCASH",getSupportedChains:t=>t.filter(o=>o.name==="ZCASH")}]}},{name:"signers",value:{getSigners:async()=>u()}}]};import{ActionBuilder as B,NamespaceBuilder as U}from"@hub3js/core";import*as A from"@hub3js/std/builders";import{standardizeAndThrowError as Z}from"@hub3js/std/operators";import{builders as D,CAIP_ZCASH_CHAIN_ID as g,utils as h}from"@rango-dev/wallets-core/namespaces/utxo";import{ChangeAccountSubscriberBuilder as P}from"@hub3js/std/hooks";import"@noir-wallet/sdk";import{CAIP_ZCASH_CHAIN_ID as N,utils as _}from"@rango-dev/wallets-core/namespaces/utxo";var f=e(()=>new P().getInstance(n).onSwitchAccount((t,o)=>{if(!t.payload?.transparent){o.action("disconnect"),t.preventDefault();return}}).format(async(t,o)=>_.formatAccountsToCAIP(o?.transparent?[o.transparent]:[],N)).addEventListener((t,o)=>{t.zcash.on("accountsChanged",o)}).removeEventListener((t,o)=>{t.zcash.removeListener("accountsChanged",o)}),"changeAccountSubscriberBuilder");var[L,w]=f().build(),O=D.connect().action(async function(){let o=n().zcash,r=await o.getAccounts();if(!r){let a=await o.connect();return h.formatAccountsToCAIP([a.transparent],g)}return h.formatAccountsToCAIP([r.transparent],g)}).before(L).or(w).or(Z).build(),H=new B("canEagerConnect").action(async()=>{try{return!!await n().zcash.getAccounts()}catch{return!1}}).build(),R=A.disconnect().before(()=>{try{n().zcash.disconnect()}catch{}}).after(w).build(),b=new U("UTXO",s).action(O).action(R).action(H).build();var y=e(()=>new k(s).init(function(t){let[,o]=t.state();M()&&(o("installed",!0),console.debug("[noir-wallet] instance detected.",t))}).config("metadata",d).add("utxo",b).build(),"buildProvider");var zt=e(()=>F().version("1.0.0",y()).build(),"versions");export{zt as versions};
1
+ var E=Object.defineProperty;var n=(t,o)=>E(t,"name",{value:o,configurable:!0});import{defineVersions as V}from"@hub3js/core/utils";import{ProviderBuilder as k}from"@hub3js/core";import{isNoirWalletInstalled as M}from"@noir-wallet/sdk";import{getChainIdFromCaip2ChainId as z}from"@hub3js/std/utils";import{CAIP_ZCASH_CHAIN_ID as N,isUtxoNamespace as _}from"@rango-dev/wallets-core/namespaces/utxo";import{DefaultSignerFactory as v,TransactionType as P}from"rango-types";import{isZcashBlockchain as x}from"@rango-dev/wallets-shared";import{BigNumber as W}from"bignumber.js";import{SignerError as m,SignerErrorCode as l}from"rango-types";import{getNoirWallet as I}from"@noir-wallet/sdk";var e=n(()=>{let t=I();if(!t)throw new Error("Noir Wallet not installed");return t},"getInstanceOrThrow");var s=class{static{n(this,"CustomUtxoSigner")}async signMessage(o){return(await e().zcash.signMessage(o)).signature}async signAndSendTx(o){let{memo:r,recipientAddress:a,amount:p,decimals:y,blockChain:T}=o;if(!x(T))throw new Error(`You can not sign ${o.blockChain} using ZCash signer.`);if(r)throw new m(l.UNEXPECTED_BEHAVIOUR,"Noir Wallet can not attach a protocol memo (OP_RETURN) to a Zcash transaction.",void 0);let S=new W(p).shiftedBy(-y).toFixed();try{return{hash:await e().zcash.sendTransaction({to:a,amount:S,fundingSource:"transparent"})}}catch(i){throw typeof i=="string"?new m(l.UNEXPECTED_BEHAVIOUR,i,void 0):new m(l.SEND_TX_ERROR,void 0,i)}}};async function u(){let t=new v;return t.registerSigner(P.TRANSFER,new s),t}n(u,"getSigners");var c="noir-wallet",d={name:"Noir Wallet",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/noir-wallet/icon.svg",extensions:{chrome:"https://chromewebstore.google.com/detail/noir-wallet/mfoghjbpfanobmnoemoepenjjcmfpmdn",homepage:"https://www.zknoir.com/"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"Zcash",value:"UTXO",id:"ZCASH",isChainSupported:t=>_(t)&&z(t)===N}]}},{name:"signers",value:{getSigners:async()=>u()}}]};import{ActionBuilder as Z,NamespaceBuilder as O}from"@hub3js/core";import*as A from"@hub3js/std/builders";import{standardizeAndThrowError as H}from"@hub3js/std/operators";import{builders as L,CAIP_ZCASH_CHAIN_ID as g,utils as h}from"@rango-dev/wallets-core/namespaces/utxo";import{ChangeAccountSubscriberBuilder as U}from"@hub3js/std/hooks";import"@noir-wallet/sdk";import{CAIP_ZCASH_CHAIN_ID as B,utils as D}from"@rango-dev/wallets-core/namespaces/utxo";var f=n(()=>new U().getInstance(e).onSwitchAccount((t,o)=>{if(!t.payload?.transparent){o.action("disconnect"),t.preventDefault();return}}).format(async(t,o)=>D.formatAccountsToCAIP(o?.transparent?[o.transparent]:[],B)).addEventListener((t,o)=>{t.zcash.on("accountsChanged",o)}).removeEventListener((t,o)=>{t.zcash.removeListener("accountsChanged",o)}),"changeAccountSubscriberBuilder");var[R,w]=f().build(),F=L.connect().action(async function(){let o=e().zcash,r=await o.getAccounts();if(!r){let a=await o.connect();return h.formatAccountsToCAIP([a.transparent],g)}return h.formatAccountsToCAIP([r.transparent],g)}).before(R).or(w).or(H).build(),X=new Z("canEagerConnect").action(async()=>{try{return!!await e().zcash.getAccounts()}catch{return!1}}).build(),j=A.disconnect().before(()=>{try{e().zcash.disconnect()}catch{}}).after(w).build(),b=new O("UTXO",c).action(F).action(j).action(X).build();var C=n(()=>new k(c).init(function(t){let[,o]=t.state();M()&&(o("installed",!0),console.debug("[noir-wallet] instance detected.",t))}).config("metadata",d).add("utxo",b).build(),"buildProvider");var Bt=n(()=>V().version("1.0.0",C()).build(),"versions");export{Bt as versions};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/mod.ts", "../src/provider.ts", "../src/signer.ts", "../src/signers/signer.ts", "../src/utils.ts", "../src/constants.ts", "../src/namespaces/utxo.ts", "../src/builders/utxo.ts"],
4
- "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import { ProviderBuilder } from '@hub3js/core';\nimport { isNoirWalletInstalled } from '@noir-wallet/sdk';\n\nimport { info, WALLET_ID } from './constants.js';\nimport { namespace as utxo } from './namespaces/utxo.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n if (isNoirWalletInstalled()) {\n setState('installed', true);\n console.debug('[noir-wallet] instance detected.', context);\n }\n })\n .config('metadata', info)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { SignerFactory } from 'rango-types';\n\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { CustomUtxoSigner } from './signers/signer.js';\n\nexport default async function getSigners(): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n\n signers.registerSigner(TxType.TRANSFER, new CustomUtxoSigner());\n return signers;\n}\n", "import type { Transfer } from 'rango-types/mainApi';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { BigNumber } from 'bignumber.js';\nimport { type GenericSigner, SignerError, SignerErrorCode } from 'rango-types';\n\nimport { getInstanceOrThrow } from '../utils.js';\n\nexport class CustomUtxoSigner implements GenericSigner<Transfer> {\n async signMessage(msg: string): Promise<string> {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n const result = await zcash.signMessage(msg);\n return result.signature;\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { memo, recipientAddress, amount, decimals, blockChain } = tx;\n\n if (blockChain !== LegacyNetworks.ZCASH) {\n throw new Error(`You can not sign ${tx.blockChain} using ZCash signer.`);\n }\n\n if (memo) {\n throw new SignerError(\n SignerErrorCode.UNEXPECTED_BEHAVIOUR,\n 'Noir Wallet can not attach a protocol memo (OP_RETURN) to a Zcash transaction.',\n undefined\n );\n }\n\n /*\n * Rango provides `amount` in the asset's smallest unit (zatoshis), but the\n * Noir Wallet expects a decimal ZEC string. Shift by `-decimals` to convert\n * (e.g. \"1000000\" zatoshis -> \"0.01\" ZEC).\n */\n const amountInZec = new BigNumber(amount).shiftedBy(-decimals).toFixed();\n\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n const txid = await zcash.sendTransaction({\n to: recipientAddress,\n amount: amountInZec,\n fundingSource: 'transparent',\n });\n return { hash: txid };\n } catch (error) {\n if (typeof error === 'string') {\n throw new SignerError(\n SignerErrorCode.UNEXPECTED_BEHAVIOUR,\n error,\n undefined\n );\n }\n throw new SignerError(SignerErrorCode.SEND_TX_ERROR, undefined, error);\n }\n }\n}\n", "import { getNoirWallet } from '@noir-wallet/sdk';\n\nexport const getInstanceOrThrow = () => {\n const noirWallet = getNoirWallet();\n if (!noirWallet) {\n throw new Error('Noir Wallet not installed');\n }\n return noirWallet;\n};\n", "import type { ProviderMetadata } from '@hub3js/core';\nimport type { BlockchainMeta } from 'rango-types';\n\nimport getSigners from './signer.js';\n\nexport const WALLET_ID = 'noir-wallet';\n\nexport const info: ProviderMetadata = {\n name: 'Noir Wallet',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/noir-wallet/icon.svg',\n extensions: {\n chrome:\n 'https://chromewebstore.google.com/detail/noir-wallet/mfoghjbpfanobmnoemoepenjjcmfpmdn',\n homepage: 'https://www.zknoir.com/',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'Zcash',\n value: 'UTXO',\n id: 'ZCASH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (blockchain) => blockchain.name === 'ZCASH'\n ),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners() },\n },\n ],\n};\n", "import type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { ActionBuilder, NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport {\n builders,\n CAIP_ZCASH_CHAIN_ID,\n utils,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { changeAccountSubscriberBuilder } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { getInstanceOrThrow } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] =\n changeAccountSubscriberBuilder().build();\n\nconst connect = builders\n .connect()\n .action(async function () {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n // Check existing connection (silent, no popup)\n const accounts = await zcash.getAccounts();\n\n // Connect wallet if not connected (shows popup)\n if (!accounts) {\n const newAccounts = await zcash.connect();\n return utils.formatAccountsToCAIP(\n [newAccounts.transparent],\n CAIP_ZCASH_CHAIN_ID\n );\n }\n return utils.formatAccountsToCAIP(\n [accounts.transparent],\n CAIP_ZCASH_CHAIN_ID\n );\n })\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst canEagerConnect = new ActionBuilder<UtxoActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(async () => {\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n // Check existing connection (silent, no popup)\n const accounts = await zcash.getAccounts();\n\n return !!accounts;\n } catch {\n return false;\n }\n })\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .before(() => {\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n void zcash.disconnect();\n } catch {\n // Ignore errors during disconnect\n }\n })\n .after(changeAccountCleanup)\n .build();\n\nexport const namespace = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n", "import { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport { type NoirWalletProvider, type ZcashAccount } from '@noir-wallet/sdk';\nimport {\n CAIP_ZCASH_CHAIN_ID,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { getInstanceOrThrow } from '../utils.js';\n\nexport const changeAccountSubscriberBuilder = () => {\n return new ChangeAccountSubscriberBuilder<\n ZcashAccount['addresses'] | null,\n NoirWalletProvider,\n UtxoActions\n >()\n .getInstance(getInstanceOrThrow)\n .onSwitchAccount((event, context) => {\n if (!event.payload?.transparent) {\n void context.action('disconnect');\n event.preventDefault();\n return;\n }\n })\n .format(async (_, payload) =>\n utils.formatAccountsToCAIP(\n payload?.transparent ? [payload.transparent] : [],\n CAIP_ZCASH_CHAIN_ID\n )\n )\n .addEventListener((instance, callback) => {\n instance.zcash.on('accountsChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.zcash.removeListener('accountsChanged', callback);\n });\n};\n"],
5
- "mappings": "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",
6
- "names": ["defineVersions", "ProviderBuilder", "isNoirWalletInstalled", "DefaultSignerFactory", "TxType", "LegacyNetworks", "BigNumber", "SignerError", "SignerErrorCode", "getNoirWallet", "getInstanceOrThrow", "__name", "noirWallet", "getNoirWallet", "CustomUtxoSigner", "__name", "msg", "getInstanceOrThrow", "tx", "memo", "recipientAddress", "amount", "decimals", "blockChain", "LegacyNetworks", "SignerError", "SignerErrorCode", "amountInZec", "BigNumber", "error", "getSigners", "signers", "DefaultSignerFactory", "TxType", "CustomUtxoSigner", "__name", "WALLET_ID", "info", "allBlockchains", "blockchain", "getSigners", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "CAIP_ZCASH_CHAIN_ID", "utils", "ChangeAccountSubscriberBuilder", "CAIP_ZCASH_CHAIN_ID", "utils", "changeAccountSubscriberBuilder", "__name", "ChangeAccountSubscriberBuilder", "getInstanceOrThrow", "event", "context", "_", "payload", "utils", "CAIP_ZCASH_CHAIN_ID", "instance", "callback", "changeAccountSubscriber", "changeAccountCleanup", "changeAccountSubscriberBuilder", "connect", "builders", "zcash", "getInstanceOrThrow", "accounts", "newAccounts", "utils", "CAIP_ZCASH_CHAIN_ID", "standardizeAndThrowError", "canEagerConnect", "ActionBuilder", "disconnect", "namespace", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "isNoirWalletInstalled", "info", "namespace", "versions", "__name", "defineVersions", "buildProvider"]
3
+ "sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/signers/signer.ts", "../src/utils.ts", "../src/namespaces/utxo.ts", "../src/builders/utxo.ts"],
4
+ "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import { ProviderBuilder } from '@hub3js/core';\nimport { isNoirWalletInstalled } from '@noir-wallet/sdk';\n\nimport { info, WALLET_ID } from './constants.js';\nimport { namespace as utxo } from './namespaces/utxo.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n if (isNoirWalletInstalled()) {\n setState('installed', true);\n console.debug('[noir-wallet] instance detected.', context);\n }\n })\n .config('metadata', info)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { getChainIdFromCaip2ChainId } from '@hub3js/std/utils';\nimport {\n CAIP_ZCASH_CHAIN_ID,\n isUtxoNamespace,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport getSigners from './signer.js';\n\nexport const WALLET_ID = 'noir-wallet';\n\nexport const info: ProviderMetadata = {\n name: 'Noir Wallet',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/noir-wallet/icon.svg',\n extensions: {\n chrome:\n 'https://chromewebstore.google.com/detail/noir-wallet/mfoghjbpfanobmnoemoepenjjcmfpmdn',\n homepage: 'https://www.zknoir.com/',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'Zcash',\n value: 'UTXO',\n id: 'ZCASH',\n isChainSupported: (chainId: string) =>\n isUtxoNamespace(chainId) &&\n getChainIdFromCaip2ChainId(chainId) === CAIP_ZCASH_CHAIN_ID,\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners() },\n },\n ],\n};\n", "import type { SignerFactory } from 'rango-types';\n\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { CustomUtxoSigner } from './signers/signer.js';\n\nexport default async function getSigners(): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n\n signers.registerSigner(TxType.TRANSFER, new CustomUtxoSigner());\n return signers;\n}\n", "import type { Transfer } from 'rango-types/mainApi';\n\nimport { isZcashBlockchain } from '@rango-dev/wallets-shared';\nimport { BigNumber } from 'bignumber.js';\nimport { type GenericSigner, SignerError, SignerErrorCode } from 'rango-types';\n\nimport { getInstanceOrThrow } from '../utils.js';\n\nexport class CustomUtxoSigner implements GenericSigner<Transfer> {\n async signMessage(msg: string): Promise<string> {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n const result = await zcash.signMessage(msg);\n return result.signature;\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { memo, recipientAddress, amount, decimals, blockChain } = tx;\n\n if (!isZcashBlockchain(blockChain)) {\n throw new Error(`You can not sign ${tx.blockChain} using ZCash signer.`);\n }\n\n if (memo) {\n throw new SignerError(\n SignerErrorCode.UNEXPECTED_BEHAVIOUR,\n 'Noir Wallet can not attach a protocol memo (OP_RETURN) to a Zcash transaction.',\n undefined\n );\n }\n\n /*\n * Rango provides `amount` in the asset's smallest unit (zatoshis), but the\n * Noir Wallet expects a decimal ZEC string. Shift by `-decimals` to convert\n * (e.g. \"1000000\" zatoshis -> \"0.01\" ZEC).\n */\n const amountInZec = new BigNumber(amount).shiftedBy(-decimals).toFixed();\n\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n const txid = await zcash.sendTransaction({\n to: recipientAddress,\n amount: amountInZec,\n fundingSource: 'transparent',\n });\n return { hash: txid };\n } catch (error) {\n if (typeof error === 'string') {\n throw new SignerError(\n SignerErrorCode.UNEXPECTED_BEHAVIOUR,\n error,\n undefined\n );\n }\n throw new SignerError(SignerErrorCode.SEND_TX_ERROR, undefined, error);\n }\n }\n}\n", "import { getNoirWallet } from '@noir-wallet/sdk';\n\nexport const getInstanceOrThrow = () => {\n const noirWallet = getNoirWallet();\n if (!noirWallet) {\n throw new Error('Noir Wallet not installed');\n }\n return noirWallet;\n};\n", "import type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { ActionBuilder, NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport {\n builders,\n CAIP_ZCASH_CHAIN_ID,\n utils,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { changeAccountSubscriberBuilder } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { getInstanceOrThrow } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] =\n changeAccountSubscriberBuilder().build();\n\nconst connect = builders\n .connect()\n .action(async function () {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n // Check existing connection (silent, no popup)\n const accounts = await zcash.getAccounts();\n\n // Connect wallet if not connected (shows popup)\n if (!accounts) {\n const newAccounts = await zcash.connect();\n return utils.formatAccountsToCAIP(\n [newAccounts.transparent],\n CAIP_ZCASH_CHAIN_ID\n );\n }\n return utils.formatAccountsToCAIP(\n [accounts.transparent],\n CAIP_ZCASH_CHAIN_ID\n );\n })\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst canEagerConnect = new ActionBuilder<UtxoActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(async () => {\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n\n // Check existing connection (silent, no popup)\n const accounts = await zcash.getAccounts();\n\n return !!accounts;\n } catch {\n return false;\n }\n })\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .before(() => {\n try {\n const noirWallet = getInstanceOrThrow();\n const zcash = noirWallet.zcash;\n void zcash.disconnect();\n } catch {\n // Ignore errors during disconnect\n }\n })\n .after(changeAccountCleanup)\n .build();\n\nexport const namespace = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n", "import { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport { type NoirWalletProvider, type ZcashAccount } from '@noir-wallet/sdk';\nimport {\n CAIP_ZCASH_CHAIN_ID,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { getInstanceOrThrow } from '../utils.js';\n\nexport const changeAccountSubscriberBuilder = () => {\n return new ChangeAccountSubscriberBuilder<\n ZcashAccount['addresses'] | null,\n NoirWalletProvider,\n UtxoActions\n >()\n .getInstance(getInstanceOrThrow)\n .onSwitchAccount((event, context) => {\n if (!event.payload?.transparent) {\n void context.action('disconnect');\n event.preventDefault();\n return;\n }\n })\n .format(async (_, payload) =>\n utils.formatAccountsToCAIP(\n payload?.transparent ? [payload.transparent] : [],\n CAIP_ZCASH_CHAIN_ID\n )\n )\n .addEventListener((instance, callback) => {\n instance.zcash.on('accountsChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.zcash.removeListener('accountsChanged', callback);\n });\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "ProviderBuilder", "isNoirWalletInstalled", "getChainIdFromCaip2ChainId", "CAIP_ZCASH_CHAIN_ID", "isUtxoNamespace", "DefaultSignerFactory", "TxType", "isZcashBlockchain", "BigNumber", "SignerError", "SignerErrorCode", "getNoirWallet", "getInstanceOrThrow", "__name", "noirWallet", "getNoirWallet", "CustomUtxoSigner", "__name", "msg", "getInstanceOrThrow", "tx", "memo", "recipientAddress", "amount", "decimals", "blockChain", "isZcashBlockchain", "SignerError", "SignerErrorCode", "amountInZec", "BigNumber", "error", "getSigners", "signers", "DefaultSignerFactory", "TxType", "CustomUtxoSigner", "__name", "WALLET_ID", "info", "chainId", "isUtxoNamespace", "getChainIdFromCaip2ChainId", "CAIP_ZCASH_CHAIN_ID", "getSigners", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "CAIP_ZCASH_CHAIN_ID", "utils", "ChangeAccountSubscriberBuilder", "CAIP_ZCASH_CHAIN_ID", "utils", "changeAccountSubscriberBuilder", "__name", "ChangeAccountSubscriberBuilder", "getInstanceOrThrow", "event", "context", "_", "payload", "utils", "CAIP_ZCASH_CHAIN_ID", "instance", "callback", "changeAccountSubscriber", "changeAccountCleanup", "changeAccountSubscriberBuilder", "connect", "builders", "zcash", "getInstanceOrThrow", "accounts", "newAccounts", "utils", "CAIP_ZCASH_CHAIN_ID", "standardizeAndThrowError", "canEagerConnect", "ActionBuilder", "disconnect", "namespace", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "isNoirWalletInstalled", "info", "namespace", "versions", "__name", "defineVersions", "buildProvider"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-noir-wallet",
3
- "version": "0.1.1-next.0",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -21,14 +21,14 @@
21
21
  "lint": "eslint \"**/*.{ts,tsx}\""
22
22
  },
23
23
  "dependencies": {
24
- "@hub3js/core": "^0.61.0",
25
- "@hub3js/std": "^0.2.0",
24
+ "@hub3js/core": "^0.61.1",
25
+ "@hub3js/std": "^0.2.3",
26
26
  "@noir-wallet/sdk": "^0.1.9",
27
- "@rango-dev/wallets-core": "^0.60.1-next.3",
27
+ "@rango-dev/wallets-core": "^0.61.0",
28
28
  "bignumber.js": "^9.1.1",
29
29
  "rango-types": "^0.5.0"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  }
34
- }
34
+ }
package/src/constants.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import type { ProviderMetadata } from '@hub3js/core';
2
- import type { BlockchainMeta } from 'rango-types';
2
+
3
+ import { getChainIdFromCaip2ChainId } from '@hub3js/std/utils';
4
+ import {
5
+ CAIP_ZCASH_CHAIN_ID,
6
+ isUtxoNamespace,
7
+ } from '@rango-dev/wallets-core/namespaces/utxo';
3
8
 
4
9
  import getSigners from './signer.js';
5
10
 
@@ -23,10 +28,9 @@ export const info: ProviderMetadata = {
23
28
  label: 'Zcash',
24
29
  value: 'UTXO',
25
30
  id: 'ZCASH',
26
- getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
27
- allBlockchains.filter(
28
- (blockchain) => blockchain.name === 'ZCASH'
29
- ),
31
+ isChainSupported: (chainId: string) =>
32
+ isUtxoNamespace(chainId) &&
33
+ getChainIdFromCaip2ChainId(chainId) === CAIP_ZCASH_CHAIN_ID,
30
34
  },
31
35
  ],
32
36
  },
@@ -1,6 +1,6 @@
1
1
  import type { Transfer } from 'rango-types/mainApi';
2
2
 
3
- import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
3
+ import { isZcashBlockchain } from '@rango-dev/wallets-shared';
4
4
  import { BigNumber } from 'bignumber.js';
5
5
  import { type GenericSigner, SignerError, SignerErrorCode } from 'rango-types';
6
6
 
@@ -18,7 +18,7 @@ export class CustomUtxoSigner implements GenericSigner<Transfer> {
18
18
  async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {
19
19
  const { memo, recipientAddress, amount, decimals, blockChain } = tx;
20
20
 
21
- if (blockChain !== LegacyNetworks.ZCASH) {
21
+ if (!isZcashBlockchain(blockChain)) {
22
22
  throw new Error(`You can not sign ${tx.blockChain} using ZCash signer.`);
23
23
  }
24
24