@gardenfi/wallet-connectors 3.0.0-beta.2 → 3.0.0-beta.21

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.
Files changed (56) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +17 -7
  3. package/dist/index10.cjs +1 -1
  4. package/dist/index10.js +62 -3
  5. package/dist/index11.cjs +1 -1
  6. package/dist/index11.js +83 -2
  7. package/dist/index12.cjs +1 -1
  8. package/dist/index12.js +108 -2
  9. package/dist/index13.cjs +1 -0
  10. package/dist/index13.js +83 -0
  11. package/dist/index14.cjs +1 -0
  12. package/dist/index14.js +68 -0
  13. package/dist/index15.cjs +1 -0
  14. package/dist/index15.js +10 -0
  15. package/dist/index16.cjs +1 -0
  16. package/dist/index16.js +4 -0
  17. package/dist/index17.cjs +1 -0
  18. package/dist/index17.js +37 -0
  19. package/dist/index18.cjs +1 -0
  20. package/dist/index18.js +5 -0
  21. package/dist/index19.cjs +1 -0
  22. package/dist/index19.js +4 -0
  23. package/dist/index2.cjs +1 -1
  24. package/dist/index2.js +67 -85
  25. package/dist/index20.cjs +1 -0
  26. package/dist/index20.js +4 -0
  27. package/dist/index5.cjs +1 -1
  28. package/dist/index5.js +83 -61
  29. package/dist/index6.cjs +1 -1
  30. package/dist/index6.js +14 -82
  31. package/dist/index7.cjs +1 -1
  32. package/dist/index7.js +109 -105
  33. package/dist/index8.cjs +1 -1
  34. package/dist/index8.js +107 -65
  35. package/dist/index9.cjs +1 -1
  36. package/dist/index9.js +83 -45
  37. package/dist/src/bitcoin/btcWalletsProvider.d.ts +2 -0
  38. package/dist/src/bitcoin/btcWalletsProvider.types.d.ts +0 -2
  39. package/dist/src/bitcoin/index.d.ts +2 -2
  40. package/dist/src/index.d.ts +2 -0
  41. package/dist/src/litecoin/constants.d.ts +14 -0
  42. package/dist/src/litecoin/index.d.ts +5 -0
  43. package/dist/src/litecoin/litecoin.types.d.ts +51 -0
  44. package/dist/src/litecoin/ltcWalletsProvider.d.ts +5 -0
  45. package/dist/src/litecoin/ltcWalletsProvider.types.d.ts +22 -0
  46. package/dist/src/litecoin/providers/ctrl/ctrl.types.d.ts +13 -0
  47. package/dist/src/litecoin/providers/ctrl/provider.d.ts +22 -0
  48. package/dist/src/litecoin/utils.d.ts +12 -0
  49. package/dist/src/spark/constants.d.ts +14 -0
  50. package/dist/src/spark/index.d.ts +5 -0
  51. package/dist/src/spark/providers/sparkWalletsProvider.d.ts +13 -0
  52. package/dist/src/spark/providers/sparkWalletsProvider.types.d.ts +22 -0
  53. package/dist/src/spark/providers/xverse/provider.d.ts +28 -0
  54. package/dist/src/spark/providers/xverse/xverse.types.d.ts +11 -0
  55. package/dist/src/spark/spark.types.d.ts +51 -0
  56. package/package.json +7 -5
package/dist/index7.js CHANGED
@@ -1,110 +1,114 @@
1
- var g = (n) => {
2
- throw TypeError(n);
3
- };
4
- var p = (n, t, r) => t.has(n) || g("Cannot " + r);
5
- var s = (n, t, r) => (p(n, t, "read from private field"), r ? r.call(n) : t.get(n)), P = (n, t, r) => t.has(n) ? g("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(n) : t.set(n, r), y = (n, t, r, e) => (p(n, t, "write to private field"), e ? e.call(n, r) : t.set(n, r), r);
6
- import * as m from "bitcoinjs-lib";
7
- import { initEccLib as N } from "bitcoinjs-lib";
8
- import * as b from "tiny-secp256k1";
9
- import { Ok as u, Network as a, Err as i, executeWithTryCatch as l } from "@gardenfi/utils";
10
- import { WALLET_CONFIG as c } from "./index3.js";
11
- import { BitcoinProvider as I, BitcoinWallet as B } from "@gardenfi/core";
12
- import { getBalance as v } from "./index4.js";
13
- N(b);
14
- var o;
15
- class W {
16
- constructor(t) {
17
- P(this, o);
18
- this.address = "", this.id = c.Phantom.id, this.name = c.Phantom.name, this.icon = c.Phantom.icon, this.disconnect = () => (this.address = "", Promise.resolve(u("Disconnected Phantom wallet"))), y(this, o, t);
19
- }
20
- async connect(t) {
21
- if (t || (t = a.MAINNET), t === a.TESTNET)
22
- return i("Phantom wallet does not support testnet");
23
- try {
24
- const r = await s(this, o).requestAccounts();
25
- for (const e of r)
26
- e.purpose === "payment" && (this.address = e.address);
27
- return this.address === "" ? i("Could not connect to Phantom bitcoin payment account") : u({
28
- address: this.address,
29
- provider: this,
30
- network: t,
31
- id: c.Phantom.id
32
- });
33
- } catch (r) {
34
- return i("Error while connecting to Phantom wallet: " + r);
1
+ import b, { useState as u, useMemo as I, useCallback as L, useEffect as k, createContext as O, useContext as J } from "react";
2
+ import { XverseSparkProvider as g } from "./index8.js";
3
+ import { Err as m, Ok as C, Void as W } from "@gardenfi/utils";
4
+ import { getProviders as z } from "sats-connect";
5
+ const h = O(void 0), V = ({
6
+ children: a,
7
+ network: d,
8
+ store: f
9
+ }) => {
10
+ const [t, p] = u(), [w, i] = u(), [A, v] = u(!1), [l, S] = u(
11
+ {}
12
+ ), x = I(
13
+ () => !!t && !!w,
14
+ [t, w]
15
+ ), y = async (e) => {
16
+ v(!0);
17
+ const r = await e.connect(d);
18
+ return r.ok ? r.val.network !== d ? (v(!1), m("Network mismatch")) : (p(r.val.provider), i(r.val.address), f.setItem("sparkWallet", JSON.stringify(r.val)), v(!1), C(W)) : (v(!1), m(r.error));
19
+ }, B = () => t ? (t.disconnect(), p(void 0), i(void 0), f.removeItem("sparkWallet"), C(W)) : m("No provider to disconnect"), N = L(async () => {
20
+ if (!t) return;
21
+ const e = await t.getAccounts();
22
+ if (!e.ok) {
23
+ console.error("Error getting accounts:", e.error);
24
+ return;
25
+ }
26
+ i(e.val[0]);
27
+ const r = await t.getNetwork();
28
+ if (r.error) {
29
+ console.error("Error getting network:", r.error);
30
+ return;
35
31
  }
36
- }
37
- async requestAccounts() {
38
- return await l(async () => {
39
- const t = await s(this, o).requestAccounts();
40
- return t.length > 0 && (this.address = t[0].address), t.map((r) => r.address);
41
- }, "Error while requesting accounts from Phantom wallet");
42
- }
43
- async getAccounts() {
44
- return this.requestAccounts();
45
- }
46
- // bitcoin testnet is not supported in Phantom wallet
47
- async getNetwork() {
48
- return u(a.MAINNET);
49
- }
50
- async switchNetwork() {
51
- return i("Phantom wallet does not support testnet");
52
- }
53
- async getBalance() {
54
- return await l(async () => {
55
- const t = await v(this.address, a.MAINNET);
56
- if (t.ok && t.val)
57
- return t.val;
58
- throw new Error(t.error);
59
- }, "Error while getting balance from Phantom wallet");
60
- }
61
- async sendBitcoin(t, r) {
62
- return await l(async () => {
63
- const e = m.networks.bitcoin, f = new I(a.MAINNET);
64
- try {
65
- const { txHex: d, utxoCount: A } = await B.generateUnsignedPSBT(
66
- f,
67
- e,
68
- this.address,
69
- t,
70
- r
71
- ), E = await s(this, o).signPSBT(
72
- this.fromHexString(d),
73
- {
74
- inputsToSign: [
75
- {
76
- address: this.address,
77
- signingIndexes: Array.from({ length: A }, (S, x) => x),
78
- sigHash: m.Transaction.SIGHASH_ALL
79
- }
80
- ]
81
- }
82
- ), w = m.Psbt.fromBuffer(
83
- Buffer.from(E)
32
+ }, [t]), P = (e) => {
33
+ S((r) => ({
34
+ ...r,
35
+ [e.id]: e
36
+ }));
37
+ }, X = async () => {
38
+ var e, r, o;
39
+ try {
40
+ if (z().find(
41
+ (n) => n.id === "BitcoinProvider" || n.id.toLowerCase().includes("xverseproviders.bitcoinprovider")
42
+ ) && ((e = window.XverseProviders) != null && e.BitcoinProvider)) {
43
+ const n = new g(
44
+ window.XverseProviders.BitcoinProvider
45
+ );
46
+ P(n);
47
+ } else if ((r = window.XverseProviders) != null && r.BitcoinProvider) {
48
+ const n = new g(
49
+ window.XverseProviders.BitcoinProvider
50
+ );
51
+ P(n);
52
+ }
53
+ } catch {
54
+ if ((o = window.XverseProviders) != null && o.BitcoinProvider) {
55
+ const c = new g(
56
+ window.XverseProviders.BitcoinProvider
84
57
  );
85
- w.finalizeAllInputs();
86
- const h = w.extractTransaction();
87
- console.log("tx", h);
88
- const T = h.getId();
89
- return await f.broadcast(h.toHex()), T;
90
- } catch (d) {
91
- throw new Error(`Failed to send bitcoin: ${d}`);
58
+ P(c);
59
+ }
60
+ }
61
+ }, E = async () => {
62
+ const e = f.getItem("sparkWallet");
63
+ if (e) {
64
+ const r = JSON.parse(
65
+ e
66
+ ), o = l[r.id];
67
+ if (o) {
68
+ const s = await o.getAccounts();
69
+ if (!s.ok || !s.val[0]) return;
70
+ const c = await o.getNetwork();
71
+ if (c.error || c.val !== d) return;
72
+ p(o), i(s.val[0]);
92
73
  }
93
- }, "Error while sending bitcoin from Phantom wallet");
94
- }
95
- fromHexString(t) {
96
- return Uint8Array.from(
97
- t.match(/.{1,2}/g).map((r) => parseInt(r, 16))
98
- );
99
- }
100
- on(t, r) {
101
- s(this, o).on(t, r);
102
- }
103
- off(t, r) {
104
- s(this, o).off(t, r);
105
- }
106
- }
107
- o = new WeakMap();
74
+ }
75
+ };
76
+ return k(() => {
77
+ X();
78
+ }, []), k(() => {
79
+ l && E();
80
+ }, [l]), k(() => {
81
+ if (!t) return;
82
+ const e = async (r) => {
83
+ r.length !== 0 && i(r[0]);
84
+ };
85
+ return t.on("accountsChanged", e), () => {
86
+ t.off("accountsChanged", e);
87
+ };
88
+ }, [t]), /* @__PURE__ */ b.createElement(
89
+ h.Provider,
90
+ {
91
+ value: {
92
+ availableWallets: l,
93
+ connect: y,
94
+ provider: t,
95
+ account: w,
96
+ network: d,
97
+ isConnecting: A,
98
+ updateAccount: N,
99
+ disconnect: B,
100
+ isConnected: x
101
+ }
102
+ },
103
+ a
104
+ );
105
+ }, _ = () => {
106
+ const a = J(h);
107
+ if (!a)
108
+ throw new Error("useSparkWallet must be used within SparkWalletProvider");
109
+ return a;
110
+ };
108
111
  export {
109
- W as PhantomProvider
112
+ V as SparkWalletProvider,
113
+ _ as useSparkWallet
110
114
  };
package/dist/index8.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var l=n=>{throw TypeError(n)};var d=(n,e,t)=>e.has(n)||l("Cannot "+t);var o=(n,e,t)=>(d(n,e,"read from private field"),t?t.call(n):e.get(n)),N=(n,e,t)=>e.has(n)?l("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),k=(n,e,t,s)=>(d(n,e,"write to private field"),s?s.call(n,t):e.set(n,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./index3.cjs"),u=require("./index11.cjs"),r=require("@gardenfi/utils");var i;class y{constructor(e){N(this,i);this.address="",this.id=w.WALLET_CONFIG.Xverse.id,this.name=w.WALLET_CONFIG.Xverse.name,this.icon=w.WALLET_CONFIG.Xverse.icon,this.connect=async t=>{try{t||(t=r.Network.MAINNET),await o(this,i).request("wallet_connect",null);const s=await this.getNetwork();if(s.error)return r.Err("Could not get network",s.error);if(s.val!==t){const c=await this.switchNetwork();if(c.error)return r.Err("Failed to switch network",c.error)}const a=await this.getAccounts();return a.ok&&a.val.length>0&&(this.address=a.val[0]),r.Ok({address:this.address,provider:this,network:t,id:w.WALLET_CONFIG.Xverse.id})}catch(s){return r.Err("Error while connecting to the XVerse wallet",s)}},this.getBalance=async()=>await r.executeWithTryCatch(async()=>(await o(this,i).request("getBalance",{})).result,"Error while getting balance from XVerse wallet"),this.requestAccounts=async()=>await r.executeWithTryCatch(async()=>(await o(this,i).request("getAccounts",{purposes:["payment"],message:"I want to connect"})).result.map(s=>s.address)),this.getAccounts=async()=>await r.executeWithTryCatch(async()=>(await o(this,i).request("getAddresses",{purposes:["payment"]})).result.addresses.map(s=>s.address)),this.sendBitcoin=async(t,s)=>await r.executeWithTryCatch(async()=>{var h;const a=await o(this,i).request("sendTransfer",{recipients:[{address:t,amount:s}]}),c=(h=a.result)==null?void 0:h.txid;if(c)return r.Ok(c);throw new Error(a.error)},"Error while sending bitcoin from Xverse wallet"),this.on=()=>{},this.off=()=>{},this.disconnect=()=>(this.address="",Promise.resolve(r.Ok("Disconnected"))),k(this,i,e)}async getNetwork(){return await r.executeWithTryCatch(async()=>{const e=await o(this,i).request("wallet_getNetwork",null);if(e.result.bitcoin.name===u.XverseBitcoinNetworkType.Mainnet)return r.Network.MAINNET;if(e.result.bitcoin.name===u.XverseBitcoinNetworkType.Testnet4)return r.Network.TESTNET;throw new Error(e.result)},"Error while getting network from Xverse wallet")}async switchNetwork(){try{const e=await this.getNetwork();if(e.error)return r.Err("Failed to get current network");const t=e.val===r.Network.MAINNET?u.XverseBitcoinNetworkType.Testnet4:u.XverseBitcoinNetworkType.Mainnet;await o(this,i).request("wallet_changeNetwork",{name:t});const s=await this.getNetwork();return s.ok?r.Ok(s.val):r.Err("Failed to verify network switch")}catch(e){return r.Err("Error while switching network in Xverse:",e)}}}i=new WeakMap;exports.XverseProvider=y;
1
+ "use strict";var k=n=>{throw TypeError(n)};var h=(n,t,e)=>t.has(n)||k("Cannot "+e);var d=(n,t,e)=>(h(n,t,"read from private field"),e?e.call(n):t.get(n)),p=(n,t,e)=>t.has(n)?k("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),g=(n,t,e,a)=>(h(n,t,"write to private field"),a?a.call(n,e):t.set(n,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./index15.cjs"),i=require("./index16.cjs"),s=require("@gardenfi/utils"),u=require("sats-connect");var c;class N{constructor(t){p(this,c);this.address="",this.id=w.WALLET_CONFIG.Xverse.id,this.name=w.WALLET_CONFIG.Xverse.name,this.icon=w.WALLET_CONFIG.Xverse.icon,this.connect=async e=>{try{e||(e=s.Network.TESTNET);const a=e===s.Network.MAINNET?i.XverseSparkNetworkType.Mainnet:i.XverseSparkNetworkType.Regtest;await d(this,c).request("wallet_connect",{network:a});const r=await this.getAccounts();return r.ok?r.val.length===0?s.Err("No Spark addresses found. Please unlock your XVerse wallet and ensure a Spark account is available."):(this.address=r.val[0],s.Ok({address:this.address,provider:this,network:e,id:w.WALLET_CONFIG.Xverse.id})):s.Err(r.error??"Failed to get accounts from XVerse Spark wallet")}catch(a){return s.Err("Error while connecting to the XVerse Spark wallet",a)}},this.getBalance=async()=>await s.executeWithTryCatch(async()=>{const e=await u.request("spark_getBalance",null);if(e.status==="success"&&e.result){const a=e.result,r=parseInt(a.balance||"0",10);return{confirmed:r,unconfirmed:0,total:r}}throw new Error("Failed to get Spark balance")},"Error while getting balance from XVerse Spark wallet"),this.requestAccounts=async()=>await s.executeWithTryCatch(async()=>{const e=await u.request("spark_getAddresses",null);if(e.status==="success"&&e.result){const r=e.result.addresses.map(o=>{var l;return((l=o.address)==null?void 0:l.trim())??""}).filter(o=>o.length>0);if(r.length===0)throw new Error("No valid Spark addresses returned. Please ensure your XVerse wallet has a Spark account.");return r}throw new Error("Failed to get Spark addresses")},"Error while requesting accounts from XVerse Spark wallet"),this.getAccounts=async()=>await s.executeWithTryCatch(async()=>{const e=await u.request("spark_getAddresses",null);if(e.status==="success"&&e.result){const r=e.result.addresses.map(o=>{var l;return((l=o.address)==null?void 0:l.trim())??""}).filter(o=>o.length>0);if(r.length===0)throw new Error("No valid Spark addresses returned. Please ensure your XVerse wallet has a Spark account.");return r}throw new Error("Failed to get Spark addresses")},"Error while getting accounts from XVerse Spark wallet"),this.sendSpark=async(e,a)=>await s.executeWithTryCatch(async()=>{const r=await u.request("spark_transfer",{receiverSparkAddress:e,amountSats:a});if(r.status==="success"&&r.result)return r.result.id;throw new Error("Failed to send Spark transaction")},"Error while sending Spark from Xverse Spark wallet"),this.on=()=>{},this.off=()=>{},this.disconnect=()=>(this.address="",Promise.resolve(s.Ok("Disconnected"))),g(this,c,t)}async getNetwork(){return await s.executeWithTryCatch(async()=>{var e,a;const t=await u.request("wallet_getNetwork",null);if(t.status==="success"&&t.result){const r=t.result;if(((e=r==null?void 0:r.spark)==null?void 0:e.name)===i.XverseSparkNetworkType.Mainnet)return s.Network.MAINNET;if(((a=r==null?void 0:r.spark)==null?void 0:a.name)===i.XverseSparkNetworkType.Regtest)return s.Network.TESTNET}throw new Error("Could not determine Spark network")},"Error while getting network from Xverse Spark wallet")}async switchNetwork(){try{const t=await this.getNetwork();if(t.error)return s.Err("Failed to get current network");const e=t.val===s.Network.MAINNET?i.XverseSparkNetworkType.Regtest:i.XverseSparkNetworkType.Mainnet;try{await d(this,c).request("wallet_changeNetwork",{name:e})}catch{return s.Err("Network switching not supported. Please switch network manually in Xverse wallet.")}const a=await this.getNetwork();return a.ok?s.Ok(a.val):s.Err("Failed to verify network switch")}catch(t){return s.Err("Error while switching network in Xverse Spark:",t)}}}c=new WeakMap;exports.XverseSparkProvider=N;
package/dist/index8.js CHANGED
@@ -1,83 +1,125 @@
1
- var N = (s) => {
2
- throw TypeError(s);
1
+ var g = (a) => {
2
+ throw TypeError(a);
3
3
  };
4
- var k = (s, e, t) => e.has(s) || N("Cannot " + t);
5
- var i = (s, e, t) => (k(s, e, "read from private field"), t ? t.call(s) : e.get(s)), m = (s, e, t) => e.has(s) ? N("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), f = (s, e, t, r) => (k(s, e, "write to private field"), r ? r.call(s, t) : e.set(s, t), t);
6
- import { WALLET_CONFIG as u } from "./index3.js";
7
- import { XverseBitcoinNetworkType as h } from "./index11.js";
8
- import { Network as l, Err as a, Ok as d, executeWithTryCatch as w } from "@gardenfi/utils";
9
- var n;
4
+ var f = (a, t, e) => t.has(a) || g("Cannot " + e);
5
+ var k = (a, t, e) => (f(a, t, "read from private field"), e ? e.call(a) : t.get(a)), m = (a, t, e) => t.has(a) ? g("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(a) : t.set(a, e), S = (a, t, e, s) => (f(a, t, "write to private field"), s ? s.call(a, e) : t.set(a, e), e);
6
+ import { WALLET_CONFIG as h } from "./index15.js";
7
+ import { XverseSparkNetworkType as i } from "./index16.js";
8
+ import { Network as u, Err as o, Ok as p, executeWithTryCatch as w } from "@gardenfi/utils";
9
+ import { request as d } from "sats-connect";
10
+ var c;
10
11
  class T {
11
- constructor(e) {
12
- m(this, n);
13
- this.address = "", this.id = u.Xverse.id, this.name = u.Xverse.name, this.icon = u.Xverse.icon, this.connect = async (t) => {
12
+ constructor(t) {
13
+ m(this, c);
14
+ this.address = "", this.id = h.Xverse.id, this.name = h.Xverse.name, this.icon = h.Xverse.icon, this.connect = async (e) => {
14
15
  try {
15
- t || (t = l.MAINNET), await i(this, n).request("wallet_connect", null);
16
- const r = await this.getNetwork();
17
- if (r.error)
18
- return a("Could not get network", r.error);
19
- if (r.val !== t) {
20
- const c = await this.switchNetwork();
21
- if (c.error)
22
- return a("Failed to switch network", c.error);
23
- }
24
- const o = await this.getAccounts();
25
- return o.ok && o.val.length > 0 && (this.address = o.val[0]), d({
16
+ e || (e = u.TESTNET);
17
+ const s = e === u.MAINNET ? i.Mainnet : i.Regtest;
18
+ await k(this, c).request("wallet_connect", {
19
+ network: s
20
+ });
21
+ const r = await this.getAccounts();
22
+ return r.ok ? r.val.length === 0 ? o(
23
+ "No Spark addresses found. Please unlock your XVerse wallet and ensure a Spark account is available."
24
+ ) : (this.address = r.val[0], p({
26
25
  address: this.address,
27
26
  provider: this,
28
- network: t,
29
- id: u.Xverse.id
30
- });
31
- } catch (r) {
32
- return a("Error while connecting to the XVerse wallet", r);
27
+ network: e,
28
+ id: h.Xverse.id
29
+ })) : o(
30
+ r.error ?? "Failed to get accounts from XVerse Spark wallet"
31
+ );
32
+ } catch (s) {
33
+ return o("Error while connecting to the XVerse Spark wallet", s);
34
+ }
35
+ }, this.getBalance = async () => await w(async () => {
36
+ const e = await d("spark_getBalance", null);
37
+ if (e.status === "success" && e.result) {
38
+ const s = e.result, r = parseInt(s.balance || "0", 10);
39
+ return {
40
+ confirmed: r,
41
+ unconfirmed: 0,
42
+ total: r
43
+ };
33
44
  }
34
- }, this.getBalance = async () => await w(async () => (await i(this, n).request("getBalance", {})).result, "Error while getting balance from XVerse wallet"), this.requestAccounts = async () => await w(async () => (await i(this, n).request("getAccounts", {
35
- purposes: ["payment"],
36
- message: "I want to connect"
37
- })).result.map((r) => r.address)), this.getAccounts = async () => await w(async () => (await i(this, n).request("getAddresses", {
38
- purposes: ["payment"]
39
- })).result.addresses.map((r) => r.address)), this.sendBitcoin = async (t, r) => await w(async () => {
40
- var g;
41
- const o = await i(this, n).request("sendTransfer", {
42
- recipients: [{ address: t, amount: r }]
43
- }), c = (g = o.result) == null ? void 0 : g.txid;
44
- if (c)
45
- return d(c);
46
- throw new Error(o.error);
47
- }, "Error while sending bitcoin from Xverse wallet"), this.on = () => {
45
+ throw new Error("Failed to get Spark balance");
46
+ }, "Error while getting balance from XVerse Spark wallet"), this.requestAccounts = async () => await w(async () => {
47
+ const e = await d("spark_getAddresses", null);
48
+ if (e.status === "success" && e.result) {
49
+ const r = e.result.addresses.map((n) => {
50
+ var l;
51
+ return ((l = n.address) == null ? void 0 : l.trim()) ?? "";
52
+ }).filter((n) => n.length > 0);
53
+ if (r.length === 0)
54
+ throw new Error(
55
+ "No valid Spark addresses returned. Please ensure your XVerse wallet has a Spark account."
56
+ );
57
+ return r;
58
+ }
59
+ throw new Error("Failed to get Spark addresses");
60
+ }, "Error while requesting accounts from XVerse Spark wallet"), this.getAccounts = async () => await w(async () => {
61
+ const e = await d("spark_getAddresses", null);
62
+ if (e.status === "success" && e.result) {
63
+ const r = e.result.addresses.map((n) => {
64
+ var l;
65
+ return ((l = n.address) == null ? void 0 : l.trim()) ?? "";
66
+ }).filter((n) => n.length > 0);
67
+ if (r.length === 0)
68
+ throw new Error(
69
+ "No valid Spark addresses returned. Please ensure your XVerse wallet has a Spark account."
70
+ );
71
+ return r;
72
+ }
73
+ throw new Error("Failed to get Spark addresses");
74
+ }, "Error while getting accounts from XVerse Spark wallet"), this.sendSpark = async (e, s) => await w(async () => {
75
+ const r = await d("spark_transfer", {
76
+ receiverSparkAddress: e,
77
+ amountSats: s
78
+ });
79
+ if (r.status === "success" && r.result)
80
+ return r.result.id;
81
+ throw new Error("Failed to send Spark transaction");
82
+ }, "Error while sending Spark from Xverse Spark wallet"), this.on = () => {
48
83
  }, this.off = () => {
49
- }, this.disconnect = () => (this.address = "", Promise.resolve(d("Disconnected"))), f(this, n, e);
84
+ }, this.disconnect = () => (this.address = "", Promise.resolve(p("Disconnected"))), S(this, c, t);
50
85
  }
51
86
  async getNetwork() {
52
87
  return await w(async () => {
53
- const e = await i(this, n).request(
54
- "wallet_getNetwork",
55
- null
56
- );
57
- if (e.result.bitcoin.name === h.Mainnet)
58
- return l.MAINNET;
59
- if (e.result.bitcoin.name === h.Testnet4)
60
- return l.TESTNET;
61
- throw new Error(e.result);
62
- }, "Error while getting network from Xverse wallet");
88
+ var e, s;
89
+ const t = await d("wallet_getNetwork", null);
90
+ if (t.status === "success" && t.result) {
91
+ const r = t.result;
92
+ if (((e = r == null ? void 0 : r.spark) == null ? void 0 : e.name) === i.Mainnet)
93
+ return u.MAINNET;
94
+ if (((s = r == null ? void 0 : r.spark) == null ? void 0 : s.name) === i.Regtest)
95
+ return u.TESTNET;
96
+ }
97
+ throw new Error("Could not determine Spark network");
98
+ }, "Error while getting network from Xverse Spark wallet");
63
99
  }
64
100
  async switchNetwork() {
65
101
  try {
66
- const e = await this.getNetwork();
67
- if (e.error)
68
- return a("Failed to get current network");
69
- const t = e.val === l.MAINNET ? h.Testnet4 : h.Mainnet;
70
- await i(this, n).request("wallet_changeNetwork", {
71
- name: t
72
- });
73
- const r = await this.getNetwork();
74
- return r.ok ? d(r.val) : a("Failed to verify network switch");
75
- } catch (e) {
76
- return a("Error while switching network in Xverse:", e);
102
+ const t = await this.getNetwork();
103
+ if (t.error)
104
+ return o("Failed to get current network");
105
+ const e = t.val === u.MAINNET ? i.Regtest : i.Mainnet;
106
+ try {
107
+ await k(this, c).request("wallet_changeNetwork", {
108
+ name: e
109
+ });
110
+ } catch {
111
+ return o(
112
+ "Network switching not supported. Please switch network manually in Xverse wallet."
113
+ );
114
+ }
115
+ const s = await this.getNetwork();
116
+ return s.ok ? p(s.val) : o("Failed to verify network switch");
117
+ } catch (t) {
118
+ return o("Error while switching network in Xverse Spark:", t);
77
119
  }
78
120
  }
79
121
  }
80
- n = new WeakMap();
122
+ c = new WeakMap();
81
123
  export {
82
- T as XverseProvider
124
+ T as XverseSparkProvider
83
125
  };
package/dist/index9.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var o=r=>{throw TypeError(r)};var l=(r,e,t)=>e.has(r)||o("Cannot "+t);var s=(r,e,t)=>(l(r,e,"read from private field"),t?t.call(r):e.get(r)),u=(r,e,t)=>e.has(r)?o("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,t),h=(r,e,t,c)=>(l(r,e,"write to private field"),c?c.call(r,t):e.set(r,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./index12.cjs"),a=require("./index3.cjs"),n=require("@gardenfi/utils");var i;class p{constructor(e){u(this,i);this.address="",this.id=a.WALLET_CONFIG.Keplr.id,this.name=a.WALLET_CONFIG.Keplr.name,this.icon=a.WALLET_CONFIG.Keplr.icon,h(this,i,e)}async connect(e){if(e||(e=n.Network.MAINNET),e===n.Network.TESTNET)return n.Err("Keplr wallet does not support testnet4");try{const t=await s(this,i).requestAccounts();return t.length>0&&(this.address=t[0]),n.Ok({address:this.address,provider:this,network:e,id:a.WALLET_CONFIG.Keplr.id})}catch(t){return n.Err("Error while connecting to the Keplr wallet",t)}}async requestAccounts(){return await n.executeWithTryCatch(async()=>await s(this,i).requestAccounts(),"Error while requesting accounts from the Keplr wallet")}async getAccounts(){return await n.executeWithTryCatch(async()=>await s(this,i).getAccounts(),"Error while getting accounts from the Keplr wallet")}async getNetwork(){return await n.executeWithTryCatch(async()=>{const e=await s(this,i).getChain();if(e.enum===w.KeplrBitcoinChainType.MAINNET)return n.Network.MAINNET;if(e.enum===w.KeplrBitcoinChainType.TESTNET)return n.Network.TESTNET;throw new Error("Invalid or unsupported network"+e.enum)},"Error while getting network from the Keplr wallet")}async switchNetwork(){return n.Err("Keplr wallet does not support testnet4")}async getBalance(){return await n.executeWithTryCatch(async()=>await s(this,i).getBalance(),"Error while getting balance from Keplr wallet")}async sendBitcoin(e,t){return await n.executeWithTryCatch(async()=>await s(this,i).sendBitcoin(e,t),"Error while sending bitcoin from Keplr wallet")}on(e,t){s(this,i).on(e,t)}off(e,t){s(this,i).off(e,t)}async disconnect(){return await s(this,i).disconnect(),this.address="",n.Ok("Disconnected Keplr wallet")}}i=new WeakMap;exports.KeplrProvider=p;
1
+ "use strict";var f=e=>{throw TypeError(e)};var w=(e,t,r)=>t.has(e)||f("Cannot "+r);var o=(e,t,r)=>(w(e,t,"read from private field"),r?r.call(e):t.get(e)),l=(e,t,r)=>t.has(e)?f("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),u=(e,t,r,n)=>(w(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./index17.cjs"),s=require("@gardenfi/utils"),h=require("./index6.cjs");function L(){if(typeof window>"u")return;const e=window.ctrl??window.xfi;return e==null?void 0:e.litecoin}function E(e,t,r=[]){return new Promise((n,a)=>{e.request({method:t,params:r},(d,N)=>{d?a(d):n(N)})})}var c,i;class T{constructor(t){l(this,c);l(this,i);this.address="",this.id=h.WALLET_CONFIG.Ctrl.id,this.name=h.WALLET_CONFIG.Ctrl.name,this.icon=h.WALLET_CONFIG.Ctrl.icon,this.sendLitecoin=async(r,n)=>{try{if(!this.address){const d=await this.requestAccounts();if(!d.ok||d.val.length===0)return s.Err("No connected account to send from")}const a=await E(o(this,c),"transfer",[{feeRate:10,from:this.address,recipient:r,amount:{amount:n,decimals:8},memo:""}]);return s.Ok(a)}catch(a){return s.Err(`Error while sending Litecoin: ${a instanceof Error?a.message:String(a)}`)}},this.on=(r,n)=>o(this,c).on(r,n),this.off=(r,n)=>o(this,c).off(r,n),this.disconnect=()=>(this.address="",Promise.resolve(s.Ok("Disconnected CTRL wallet"))),u(this,c,t),u(this,i,s.Network.MAINNET)}async connect(t){try{const r=L();if(!r)return s.Err("CTRL wallet Litecoin provider not found");u(this,c,r),t||(t=s.Network.MAINNET),u(this,i,t);const n=await this.requestAccounts();return n.ok?n.val.length===0?s.Err("No accounts found in CTRL wallet"):(this.address=n.val[0],s.Ok({address:this.address,provider:this,network:o(this,i),id:h.WALLET_CONFIG.Ctrl.id})):s.Err("Failed to get accounts from CTRL wallet")}catch(r){return s.Err("Error while connecting to the CTRL wallet",r)}}async requestAccounts(){try{const t=await E(o(this,c),"request_accounts");return t&&t.length>0&&(this.address=t[0]),s.Ok(t)}catch{return s.Err("Error while requesting accounts from the CTRL wallet")}}async getAccounts(){return this.requestAccounts()}async getNetwork(){return s.Ok(o(this,i))}async switchNetwork(){u(this,i,o(this,i)===s.Network.MAINNET?s.Network.TESTNET:s.Network.MAINNET);const t=await this.requestAccounts();return t.ok?s.Ok(o(this,i)):s.Err(`Failed to get CTRL accounts: ${t.error}`)}async getBalance(){if(!this.address&&!(await this.requestAccounts()).ok)return s.Err("Failed to get address for balance");const t=await k.getBalance(this.address,o(this,i));return t.ok?s.Ok(t.val):s.Err(t.error)}}c=new WeakMap,i=new WeakMap;exports.CtrlProvider=T;
package/dist/index9.js CHANGED
@@ -1,68 +1,106 @@
1
- var u = (r) => {
2
- throw TypeError(r);
1
+ var m = (e) => {
2
+ throw TypeError(e);
3
3
  };
4
- var h = (r, t, e) => t.has(r) || u("Cannot " + e);
5
- var s = (r, t, e) => (h(r, t, "read from private field"), e ? e.call(r) : t.get(r)), w = (r, t, e) => t.has(r) ? u("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(r) : t.set(r, e), p = (r, t, e, l) => (h(r, t, "write to private field"), l ? l.call(r, e) : t.set(r, e), e);
6
- import { KeplrBitcoinChainType as d } from "./index12.js";
7
- import { WALLET_CONFIG as a } from "./index3.js";
8
- import { Network as o, Err as c, Ok as E, executeWithTryCatch as i } from "@gardenfi/utils";
9
- var n;
10
- class K {
4
+ var g = (e, t, r) => t.has(e) || m("Cannot " + r);
5
+ var i = (e, t, r) => (g(e, t, "read from private field"), r ? r.call(e) : t.get(e)), w = (e, t, r) => t.has(e) ? m("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, r), d = (e, t, r, s) => (g(e, t, "write to private field"), s ? s.call(e, r) : t.set(e, r), r);
6
+ import { getBalance as C } from "./index17.js";
7
+ import { Err as o, Ok as u, Network as l } from "@gardenfi/utils";
8
+ import { WALLET_CONFIG as f } from "./index6.js";
9
+ function L() {
10
+ if (typeof window > "u") return;
11
+ const e = window.ctrl ?? window.xfi;
12
+ return e == null ? void 0 : e.litecoin;
13
+ }
14
+ function N(e, t, r = []) {
15
+ return new Promise((s, a) => {
16
+ e.request({ method: t, params: r }, (h, T) => {
17
+ h ? a(h) : s(T);
18
+ });
19
+ });
20
+ }
21
+ var c, n;
22
+ class q {
11
23
  constructor(t) {
24
+ w(this, c);
12
25
  w(this, n);
13
- this.address = "", this.id = a.Keplr.id, this.name = a.Keplr.name, this.icon = a.Keplr.icon, p(this, n, t);
26
+ this.address = "", this.id = f.Ctrl.id, this.name = f.Ctrl.name, this.icon = f.Ctrl.icon, this.sendLitecoin = async (r, s) => {
27
+ try {
28
+ if (!this.address) {
29
+ const h = await this.requestAccounts();
30
+ if (!h.ok || h.val.length === 0)
31
+ return o("No connected account to send from");
32
+ }
33
+ const a = await N(
34
+ i(this, c),
35
+ "transfer",
36
+ [
37
+ {
38
+ feeRate: 10,
39
+ from: this.address,
40
+ recipient: r,
41
+ amount: {
42
+ amount: s,
43
+ decimals: 8
44
+ },
45
+ memo: ""
46
+ }
47
+ ]
48
+ );
49
+ return u(a);
50
+ } catch (a) {
51
+ return o(
52
+ `Error while sending Litecoin: ${a instanceof Error ? a.message : String(a)}`
53
+ );
54
+ }
55
+ }, this.on = (r, s) => i(this, c).on(r, s), this.off = (r, s) => i(this, c).off(r, s), this.disconnect = () => (this.address = "", Promise.resolve(u("Disconnected CTRL wallet"))), d(this, c, t), d(this, n, l.MAINNET);
14
56
  }
15
57
  async connect(t) {
16
- if (t || (t = o.MAINNET), t === o.TESTNET)
17
- return c("Keplr wallet does not support testnet4");
18
58
  try {
19
- const e = await s(this, n).requestAccounts();
20
- return e.length > 0 && (this.address = e[0]), E({
59
+ const r = L();
60
+ if (!r)
61
+ return o("CTRL wallet Litecoin provider not found");
62
+ d(this, c, r), t || (t = l.MAINNET), d(this, n, t);
63
+ const s = await this.requestAccounts();
64
+ return s.ok ? s.val.length === 0 ? o("No accounts found in CTRL wallet") : (this.address = s.val[0], u({
21
65
  address: this.address,
22
66
  provider: this,
23
- network: t,
24
- id: a.Keplr.id
25
- });
26
- } catch (e) {
27
- return c("Error while connecting to the Keplr wallet", e);
67
+ network: i(this, n),
68
+ id: f.Ctrl.id
69
+ })) : o("Failed to get accounts from CTRL wallet");
70
+ } catch (r) {
71
+ return o("Error while connecting to the CTRL wallet", r);
28
72
  }
29
73
  }
30
74
  async requestAccounts() {
31
- return await i(async () => await s(this, n).requestAccounts(), "Error while requesting accounts from the Keplr wallet");
75
+ try {
76
+ const t = await N(
77
+ i(this, c),
78
+ "request_accounts"
79
+ );
80
+ return t && t.length > 0 && (this.address = t[0]), u(t);
81
+ } catch {
82
+ return o("Error while requesting accounts from the CTRL wallet");
83
+ }
32
84
  }
33
85
  async getAccounts() {
34
- return await i(async () => await s(this, n).getAccounts(), "Error while getting accounts from the Keplr wallet");
86
+ return this.requestAccounts();
35
87
  }
36
88
  async getNetwork() {
37
- return await i(async () => {
38
- const t = await s(this, n).getChain();
39
- if (t.enum === d.MAINNET)
40
- return o.MAINNET;
41
- if (t.enum === d.TESTNET)
42
- return o.TESTNET;
43
- throw new Error("Invalid or unsupported network" + t.enum);
44
- }, "Error while getting network from the Keplr wallet");
89
+ return u(i(this, n));
45
90
  }
46
91
  async switchNetwork() {
47
- return c("Keplr wallet does not support testnet4");
92
+ d(this, n, i(this, n) === l.MAINNET ? l.TESTNET : l.MAINNET);
93
+ const t = await this.requestAccounts();
94
+ return t.ok ? u(i(this, n)) : o(`Failed to get CTRL accounts: ${t.error}`);
48
95
  }
49
96
  async getBalance() {
50
- return await i(async () => await s(this, n).getBalance(), "Error while getting balance from Keplr wallet");
51
- }
52
- async sendBitcoin(t, e) {
53
- return await i(async () => await s(this, n).sendBitcoin(t, e), "Error while sending bitcoin from Keplr wallet");
54
- }
55
- on(t, e) {
56
- s(this, n).on(t, e);
57
- }
58
- off(t, e) {
59
- s(this, n).off(t, e);
60
- }
61
- async disconnect() {
62
- return await s(this, n).disconnect(), this.address = "", E("Disconnected Keplr wallet");
97
+ if (!this.address && !(await this.requestAccounts()).ok)
98
+ return o("Failed to get address for balance");
99
+ const t = await C(this.address, i(this, n));
100
+ return t.ok ? u(t.val) : o(t.error);
63
101
  }
64
102
  }
65
- n = new WeakMap();
103
+ c = new WeakMap(), n = new WeakMap();
66
104
  export {
67
- K as KeplrProvider
105
+ q as CtrlProvider
68
106
  };