@gardenfi/wallet-connectors 2.5.0 → 3.0.0-beta.10

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 (47) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +10 -5
  3. package/dist/index10.cjs +1 -1
  4. package/dist/index10.js +72 -70
  5. package/dist/index11.cjs +1 -1
  6. package/dist/index11.js +82 -40
  7. package/dist/index12.cjs +1 -1
  8. package/dist/index12.js +71 -159
  9. package/dist/index13.cjs +1 -1
  10. package/dist/index13.js +40 -180
  11. package/dist/index14.cjs +1 -1
  12. package/dist/index14.js +169 -3
  13. package/dist/index15.cjs +1 -1
  14. package/dist/index15.js +206 -2
  15. package/dist/index16.cjs +1 -1
  16. package/dist/index16.js +8 -2
  17. package/dist/index17.cjs +1 -3
  18. package/dist/index17.js +2 -114
  19. package/dist/index18.cjs +1 -1
  20. package/dist/index18.js +3 -2
  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 +5 -5
  25. package/dist/index20.cjs +1 -0
  26. package/dist/index20.js +4 -0
  27. package/dist/index21.cjs +3 -0
  28. package/dist/index21.js +116 -0
  29. package/dist/index22.cjs +1 -0
  30. package/dist/index22.js +4 -0
  31. package/dist/index5.cjs +1 -1
  32. package/dist/index5.js +2 -2
  33. package/dist/index7.cjs +1 -1
  34. package/dist/index7.js +110 -60
  35. package/dist/index8.cjs +1 -1
  36. package/dist/index8.js +90 -72
  37. package/dist/index9.cjs +1 -1
  38. package/dist/index9.js +38 -84
  39. package/dist/src/index.d.ts +1 -0
  40. package/dist/src/spark/constants.d.ts +14 -0
  41. package/dist/src/spark/index.d.ts +5 -0
  42. package/dist/src/spark/providers/sparkWalletsProvider.d.ts +13 -0
  43. package/dist/src/spark/providers/sparkWalletsProvider.types.d.ts +22 -0
  44. package/dist/src/spark/providers/xverse/provider.d.ts +28 -0
  45. package/dist/src/spark/providers/xverse/xverse.types.d.ts +11 -0
  46. package/dist/src/spark/spark.types.d.ts +51 -0
  47. package/package.json +4 -3
@@ -0,0 +1,116 @@
1
+ import { Err as s, Fetcher as u, Ok as i, Network as d } from "@gardenfi/utils";
2
+ import * as x from "bitcoinjs-lib";
3
+ import { Psbt as y } from "bitcoinjs-lib";
4
+ import * as b from "tiny-secp256k1";
5
+ x.initEccLib(b);
6
+ const w = {
7
+ messagePrefix: `Litecoin Signed Message:
8
+ `,
9
+ bech32: "ltc",
10
+ bip32: {
11
+ public: 27108450,
12
+ private: 27106558
13
+ },
14
+ pubKeyHash: 48,
15
+ scriptHash: 50,
16
+ wif: 176
17
+ }, T = {
18
+ messagePrefix: `Litecoin Signed Message:
19
+ `,
20
+ bech32: "tltc",
21
+ bip32: {
22
+ public: 70711009,
23
+ private: 70709117
24
+ },
25
+ pubKeyHash: 111,
26
+ scriptHash: 58,
27
+ wif: 239
28
+ }, E = (t) => t === d.MAINNET ? w : T, f = {
29
+ testnet: {
30
+ Mempool: "https://litecoinspace.org/testnet"
31
+ },
32
+ mainnet: {
33
+ Mempool: "https://litecoinspace.org"
34
+ },
35
+ localnet: {
36
+ Mempool: "http://localhost:30000"
37
+ }
38
+ }, I = async (t, o) => {
39
+ console.log("getBalance", t, o);
40
+ let r = f[o];
41
+ if (!r) return s("Invalid network");
42
+ const n = `${r.Mempool}/api/address/${t}`;
43
+ console.log("mempoolUrl", n);
44
+ try {
45
+ const e = [n], a = await u.getWithFallback(e, {
46
+ retryCount: 3,
47
+ retryDelay: 1e3
48
+ }), l = a.chain_stats.funded_txo_sum - a.chain_stats.spent_txo_sum, c = a.mempool_stats.funded_txo_sum - a.mempool_stats.spent_txo_sum, p = l + c;
49
+ return i({
50
+ confirmed: l,
51
+ unconfirmed: c,
52
+ total: p
53
+ });
54
+ } catch (e) {
55
+ return s("Error while fetching balance", e);
56
+ }
57
+ }, M = async (t, o, r) => {
58
+ try {
59
+ if (r && typeof r == "function") {
60
+ const h = await r(t);
61
+ return i(h);
62
+ }
63
+ const n = E(o), e = y.fromBase64(t, {
64
+ network: n
65
+ });
66
+ e.finalizeAllInputs();
67
+ const l = e.extractTransaction().toHex(), c = f[o];
68
+ if (!c) return s("Invalid network");
69
+ const p = `${c.Mempool}/api/tx`, m = await fetch(p, {
70
+ method: "POST",
71
+ headers: { "Content-Type": "text/plain" },
72
+ body: l
73
+ });
74
+ if (!m.ok) {
75
+ const h = await m.text();
76
+ return s(`Broadcast failed: ${h}`);
77
+ }
78
+ const g = await m.text();
79
+ return i(g.trim());
80
+ } catch (n) {
81
+ return s(`Error while broadcasting transaction: ${n}`);
82
+ }
83
+ }, k = async (t, o) => {
84
+ let r = f[o];
85
+ if (!r) return s("Invalid network");
86
+ console.log("getUTXOs", t, o);
87
+ const n = `${r.Mempool}/api/address/${t}/utxo`;
88
+ try {
89
+ const e = [n], a = await u.getWithFallback(e, {
90
+ retryCount: 3,
91
+ retryDelay: 1e3
92
+ });
93
+ return i(a);
94
+ } catch (e) {
95
+ return s("Error while fetching UTXOs", e);
96
+ }
97
+ }, U = async (t) => {
98
+ try {
99
+ const r = `${t === d.MAINNET ? "https://litecoinspace.org" : "https://litecoinspace.org/testnet"}/api/v1/fees/recommended`, n = await u.getWithFallback([r], {
100
+ retryCount: 3,
101
+ retryDelay: 1e3
102
+ }), e = n.halfHourFee === 1 ? 2 : n.halfHourFee;
103
+ return i(e);
104
+ } catch (o) {
105
+ return s("Error while fetching recommended fee rate", o);
106
+ }
107
+ };
108
+ export {
109
+ w as LITECOIN_NETWORK,
110
+ T as LITECOIN_TESTNET,
111
+ M as broadcastTransaction,
112
+ I as getBalance,
113
+ E as getLitecoinNetwork,
114
+ U as getRecommendedFeeRate,
115
+ k as getUTXOs
116
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var t=(e=>(e.LIVENET="livenet",e.TESTNET="testnet",e))(t||{});exports.LitescribeNetworkEnum=t;
@@ -0,0 +1,4 @@
1
+ var T = /* @__PURE__ */ ((t) => (t.LIVENET = "livenet", t.TESTNET = "testnet", t))(T || {});
2
+ export {
3
+ T as LitescribeNetworkEnum
4
+ };
package/dist/index5.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),L=require("./index12.cjs"),o=require("@gardenfi/utils"),A=require("./index13.cjs"),C=n.createContext(void 0),h=({children:s,network:l,store:d})=>{const[r,u]=n.useState(),[v,i]=n.useState(),[y,c]=n.useState(!1),[a,g]=n.useState({}),W=n.useMemo(()=>!!r&&!!v,[r,v]),b=async e=>{c(!0);const t=await e.connect(l);return t.ok?t.val.network!==l?(c(!1),o.Err("Network mismatch")):(u(t.val.provider),i(t.val.address),d.setItem("litecoinWallet",JSON.stringify(t.val)),c(!1),o.Ok(o.Void)):(c(!1),o.Err(t.error))},k=()=>r?(r.disconnect(),u(void 0),i(void 0),d.removeItem("litecoinWallet"),o.Ok(o.Void)):o.Err("No provider to disconnect"),P=n.useCallback(async()=>{if(!r)return;const e=await r.getAccounts();if(!e.ok){console.error("Error getting accounts:",e.error);return}i(e.val[0])},[r]),w=e=>{g(t=>({...t,[e.id]:e}))},m=async()=>{if(window.enkrypt&&window.enkrypt.providers&&window.enkrypt.providers.bitcoin){const e=new L.EnkryptProvider(window.enkrypt.providers.bitcoin);w(e)}if(window.litescribe){const e=new A.LitescribeProvider(window.litescribe);w(e)}},E=async()=>{const e=d.getItem("litecoinWallet");if(e){const t=JSON.parse(e),f=a[t.id];if(f){const p=await f.getAccounts();if(!p.ok||!p.val[0])return;u(f),i(p.val[0])}}};return n.useEffect(()=>{m()},[]),n.useEffect(()=>{a&&E()},[a]),n.useEffect(()=>{if(!r)return;const e=async t=>{t.length!==0&&i(t[0])};return r.on("accountsChanged",e),()=>{r.off("accountsChanged",e)}},[r]),n.createElement(C.Provider,{value:{availableWallets:a,connect:b,provider:r,account:v,network:l,isConnecting:y,updateAccount:P,disconnect:k,isConnected:W}},s)},S=()=>{const s=n.useContext(C);if(!s)throw new Error("useLitecoinWallet must be used within LTCWalletProvider");return s};exports.LTCWalletProvider=h;exports.useLitecoinWallet=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),L=require("./index14.cjs"),o=require("@gardenfi/utils"),A=require("./index15.cjs"),C=n.createContext(void 0),h=({children:s,network:l,store:d})=>{const[r,u]=n.useState(),[v,i]=n.useState(),[y,c]=n.useState(!1),[a,g]=n.useState({}),W=n.useMemo(()=>!!r&&!!v,[r,v]),b=async e=>{c(!0);const t=await e.connect(l);return t.ok?t.val.network!==l?(c(!1),o.Err("Network mismatch")):(u(t.val.provider),i(t.val.address),d.setItem("litecoinWallet",JSON.stringify(t.val)),c(!1),o.Ok(o.Void)):(c(!1),o.Err(t.error))},k=()=>r?(r.disconnect(),u(void 0),i(void 0),d.removeItem("litecoinWallet"),o.Ok(o.Void)):o.Err("No provider to disconnect"),P=n.useCallback(async()=>{if(!r)return;const e=await r.getAccounts();if(!e.ok){console.error("Error getting accounts:",e.error);return}i(e.val[0])},[r]),w=e=>{g(t=>({...t,[e.id]:e}))},m=async()=>{if(window.enkrypt&&window.enkrypt.providers&&window.enkrypt.providers.bitcoin){const e=new L.EnkryptProvider(window.enkrypt.providers.bitcoin);w(e)}if(window.litescribe){const e=new A.LitescribeProvider(window.litescribe);w(e)}},E=async()=>{const e=d.getItem("litecoinWallet");if(e){const t=JSON.parse(e),f=a[t.id];if(f){const p=await f.getAccounts();if(!p.ok||!p.val[0])return;u(f),i(p.val[0])}}};return n.useEffect(()=>{m()},[]),n.useEffect(()=>{a&&E()},[a]),n.useEffect(()=>{if(!r)return;const e=async t=>{t.length!==0&&i(t[0])};return r.on("accountsChanged",e),()=>{r.off("accountsChanged",e)}},[r]),n.createElement(C.Provider,{value:{availableWallets:a,connect:b,provider:r,account:v,network:l,isConnecting:y,updateAccount:P,disconnect:k,isConnected:W}},s)},S=()=>{const s=n.useContext(C);if(!s)throw new Error("useLitecoinWallet must be used within LTCWalletProvider");return s};exports.LTCWalletProvider=h;exports.useLitecoinWallet=S;
package/dist/index5.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import x, { useState as s, useMemo as I, useCallback as N, useEffect as p, createContext as T, useContext as O } from "react";
2
- import { EnkryptProvider as S } from "./index12.js";
2
+ import { EnkryptProvider as S } from "./index14.js";
3
3
  import { Err as w, Ok as C, Void as y } from "@gardenfi/utils";
4
- import { LitescribeProvider as J } from "./index13.js";
4
+ import { LitescribeProvider as J } from "./index15.js";
5
5
  const g = T(void 0), V = ({
6
6
  children: r,
7
7
  network: a,
package/dist/index7.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var l=i=>{throw TypeError(i)};var d=(i,t,e)=>t.has(i)||l("Cannot "+e);var n=(i,t,e)=>(d(i,t,"read from private field"),e?e.call(i):t.get(i)),h=(i,t,e)=>t.has(i)?l("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),a=(i,t,e,u)=>(d(i,t,"write to private field"),u?u.call(i,e):t.set(i,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@gardenfi/utils"),o=require("./index3.cjs");var s,c;class w{constructor(t,e){h(this,s);h(this,c);this.address="",this.id=o.WALLET_CONFIG.OKX.id,this.name=o.WALLET_CONFIG.OKX.name,this.icon=o.WALLET_CONFIG.OKX.icon,this.disconnect=()=>(this.address="",n(this,s).disconnect(),Promise.resolve(r.Ok("Disconnected OKX wallet"))),a(this,s,t),a(this,c,e)}async connect(){try{const t=await n(this,s).connect();return!t||!t.address?r.Err("Failed to connect to OKX wallet"):(this.address=t.address,r.Ok({address:this.address,provider:this,network:n(this,c),id:o.WALLET_CONFIG.OKX.id}))}catch(t){return r.Err("Error while connecting to the OKX wallet",t)}}async getPublicKey(){return await r.executeWithTryCatch(async()=>await n(this,s).getPublicKey(),"Error while getting public key from OKX wallet")}async requestAccounts(){const t=await this.connect();return t.ok?r.Ok([t.val.address]):r.Err(t.error)}async getAccounts(){return n(this,c)===r.Network.TESTNET?await this.requestAccounts():await r.executeWithTryCatch(async()=>await n(this,s).getAccounts(),"Error while getting accounts from OKX wallet")}async getNetwork(){return r.Ok(n(this,c))}async switchNetwork(){a(this,c,n(this,c)===r.Network.MAINNET?r.Network.TESTNET:r.Network.MAINNET);const t=await this.connect();return t.error?r.Err(`Failed to connect to ${n(this,c)}: ${t.error}`):r.Ok(n(this,c))}async getBalance(){return await r.executeWithTryCatch(async()=>await n(this,s).getBalance(),"Error while getting balance from OKX wallet")}async sendBitcoin(t,e){return await r.executeWithTryCatch(async()=>await n(this,s).sendBitcoin(t,e),"Error while sending bitcoin from OKX wallet")}on(t,e){n(this,s).on(t,e)}off(t,e){n(this,s).off(t,e)}}s=new WeakMap,c=new WeakMap;exports.OKXProvider=w;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),g=require("./index8.cjs"),i=require("@gardenfi/utils"),b=require("sats-connect"),S=o.createContext(void 0),x=({children:v,network:l,store:p})=>{const[t,P]=o.useState(),[w,c]=o.useState(),[C,u]=o.useState(!1),[f,W]=o.useState({}),m=o.useMemo(()=>!!t&&!!w,[t,w]),y=async r=>{u(!0);const e=await r.connect(l);return e.ok?e.val.network!==l?(u(!1),i.Err("Network mismatch")):(P(e.val.provider),c(e.val.address),p.setItem("sparkWallet",JSON.stringify(e.val)),u(!1),i.Ok(i.Void)):(u(!1),i.Err(e.error))},E=()=>t?(t.disconnect(),P(void 0),c(void 0),p.removeItem("sparkWallet"),i.Ok(i.Void)):i.Err("No provider to disconnect"),h=o.useCallback(async()=>{if(!t)return;const r=await t.getAccounts();if(!r.ok){console.error("Error getting accounts:",r.error);return}c(r.val[0]);const e=await t.getNetwork();if(e.error){console.error("Error getting network:",e.error);return}},[t]),k=r=>{W(e=>({...e,[r.id]:r}))},A=async()=>{var r,e,n;try{if(b.getProviders().find(s=>s.id==="BitcoinProvider"||s.id.toLowerCase().includes("xverseproviders.bitcoinprovider"))&&((r=window.XverseProviders)!=null&&r.BitcoinProvider)){const s=new g.XverseSparkProvider(window.XverseProviders.BitcoinProvider);k(s)}else if((e=window.XverseProviders)!=null&&e.BitcoinProvider){const s=new g.XverseSparkProvider(window.XverseProviders.BitcoinProvider);k(s)}}catch{if((n=window.XverseProviders)!=null&&n.BitcoinProvider){const d=new g.XverseSparkProvider(window.XverseProviders.BitcoinProvider);k(d)}}},X=async()=>{const r=p.getItem("sparkWallet");if(r){const e=JSON.parse(r),n=f[e.id];if(n){const a=await n.getAccounts();if(!a.ok||!a.val[0])return;const d=await n.getNetwork();if(d.error||d.val!==l)return;P(n),c(a.val[0])}}};return o.useEffect(()=>{A()},[]),o.useEffect(()=>{f&&X()},[f]),o.useEffect(()=>{if(!t)return;const r=async e=>{e.length!==0&&c(e[0])};return t.on("accountsChanged",r),()=>{t.off("accountsChanged",r)}},[t]),o.createElement(S.Provider,{value:{availableWallets:f,connect:y,provider:t,account:w,network:l,isConnecting:C,updateAccount:h,disconnect:E,isConnected:m}},v)},B=()=>{const v=o.useContext(S);if(!v)throw new Error("useSparkWallet must be used within SparkWalletProvider");return v};exports.SparkWalletProvider=x;exports.useSparkWallet=B;
package/dist/index7.js CHANGED
@@ -1,64 +1,114 @@
1
- var y = (e) => {
2
- throw TypeError(e);
3
- };
4
- var g = (e, t, r) => t.has(e) || y("Cannot " + r);
5
- var n = (e, t, r) => (g(e, t, "read from private field"), r ? r.call(e) : t.get(e)), d = (e, t, r) => t.has(e) ? y("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, r), a = (e, t, r, w) => (g(e, t, "write to private field"), w ? w.call(e, r) : t.set(e, r), r);
6
- import { Ok as c, Err as o, executeWithTryCatch as h, Network as l } from "@gardenfi/utils";
7
- import { WALLET_CONFIG as u } from "./index3.js";
8
- var i, s;
9
- class E {
10
- constructor(t, r) {
11
- d(this, i);
12
- d(this, s);
13
- this.address = "", this.id = u.OKX.id, this.name = u.OKX.name, this.icon = u.OKX.icon, this.disconnect = () => (this.address = "", n(this, i).disconnect(), Promise.resolve(c("Disconnected OKX wallet"))), a(this, i, t), a(this, s, r);
14
- }
15
- async connect() {
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;
31
+ }
32
+ }, [t]), P = (e) => {
33
+ S((r) => ({
34
+ ...r,
35
+ [e.id]: e
36
+ }));
37
+ }, X = async () => {
38
+ var e, r, o;
16
39
  try {
17
- const t = await n(this, i).connect();
18
- return !t || !t.address ? o("Failed to connect to OKX wallet") : (this.address = t.address, c({
19
- address: this.address,
20
- provider: this,
21
- network: n(this, s),
22
- id: u.OKX.id
23
- }));
24
- } catch (t) {
25
- return o("Error while connecting to the OKX wallet", t);
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
57
+ );
58
+ P(c);
59
+ }
26
60
  }
27
- }
28
- async getPublicKey() {
29
- return await h(async () => await n(this, i).getPublicKey(), "Error while getting public key from OKX wallet");
30
- }
31
- async requestAccounts() {
32
- const t = await this.connect();
33
- return t.ok ? c([t.val.address]) : o(t.error);
34
- }
35
- async getAccounts() {
36
- return n(this, s) === l.TESTNET ? await this.requestAccounts() : await h(async () => await n(this, i).getAccounts(), "Error while getting accounts from OKX wallet");
37
- }
38
- async getNetwork() {
39
- return c(n(this, s));
40
- }
41
- async switchNetwork() {
42
- a(this, s, n(this, s) === l.MAINNET ? l.TESTNET : l.MAINNET);
43
- const t = await this.connect();
44
- return t.error ? o(
45
- `Failed to connect to ${n(this, s)}: ${t.error}`
46
- ) : c(n(this, s));
47
- }
48
- async getBalance() {
49
- return await h(async () => await n(this, i).getBalance(), "Error while getting balance from OKX wallet");
50
- }
51
- async sendBitcoin(t, r) {
52
- return await h(async () => await n(this, i).sendBitcoin(t, r), "Error while sending bitcoin from OKX wallet");
53
- }
54
- on(t, r) {
55
- n(this, i).on(t, r);
56
- }
57
- off(t, r) {
58
- n(this, i).off(t, r);
59
- }
60
- }
61
- i = new WeakMap(), s = new WeakMap();
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]);
73
+ }
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
+ };
62
111
  export {
63
- E as OKXProvider
112
+ V as SparkWalletProvider,
113
+ _ as useSparkWallet
64
114
  };
package/dist/index8.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var N=n=>{throw TypeError(n)};var T=(n,t,r)=>t.has(n)||N("Cannot "+r);var s=(n,t,r)=>(T(n,t,"read from private field"),r?r.call(n):t.get(n)),w=(n,t,r)=>t.has(n)?N("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,r),E=(n,t,r,o)=>(T(n,t,"write to private field"),o?o.call(n,r):t.set(n,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./index14.cjs"),e=require("@gardenfi/utils"),u=require("./index3.cjs");var i,c;class d{constructor(t,r){w(this,i);w(this,c);this.address="",this.id=u.WALLET_CONFIG.Unisat.id,this.name=u.WALLET_CONFIG.Unisat.name,this.icon=u.WALLET_CONFIG.Unisat.icon,this.disconnect=()=>(this.address="",Promise.resolve(e.Ok("Disconnected unisat wallet"))),E(this,i,t),E(this,c,r)}async connect(t){try{t||(t=s(this,c));const r=await this.getNetwork(),o=await s(this,i).getChain();if(r.error)return e.Err("Could not get network",r.error);if(r.val!==t||o.enum===a.UnisatChainEnum.BITCOIN_TESTNET){const l=await this.switchNetwork();if(l.error)return e.Err("Failed to switch network",l.error)}const h=await s(this,i).requestAccounts();return h.length>0&&(this.address=h[0]),e.Ok({address:this.address,provider:this,network:t,id:u.WALLET_CONFIG.Unisat.id})}catch(r){return e.Err("Error while connecting to the Unisat wallet",r)}}async requestAccounts(){return await e.executeWithTryCatch(async()=>await s(this,i).requestAccounts(),"Error while requesting accounts from the Unisat wallet")}async getAccounts(){return await e.executeWithTryCatch(async()=>await s(this,i).getAccounts(),"Error while getting accounts from the Unisat wallet")}async getNetwork(){return await e.executeWithTryCatch(async()=>{const t=await s(this,i).getNetwork();if(t===a.UnisatNetworkEnum.LIVENET)return e.Network.MAINNET;if(t===a.UnisatNetworkEnum.TESTNET)return e.Network.TESTNET;throw new Error("Invalid or unsupported network"+t)},"Error while getting network from Unisat wallet")}async switchNetwork(){try{const t=await this.getNetwork(),r=await s(this,i).getChain();if(t.error)return e.Err("Failed to get current network");const o=t.val===e.Network.MAINNET||s(this,c)===e.Network.TESTNET&&r.enum===a.UnisatChainEnum.BITCOIN_TESTNET?a.UnisatChainEnum.BITCOIN_TESTNET4:a.UnisatChainEnum.BITCOIN_MAINNET;await s(this,i).switchChain(o);const h=await this.getNetwork();return h.ok?e.Ok(h.val):e.Err("Failed to verify network switch")}catch(t){return e.Err("Error while switching network in Unisat:",t)}}async getBalance(){return await e.executeWithTryCatch(async()=>await s(this,i).getBalance(),"Error while getting balance from Unisat wallet")}async sendBitcoin(t,r){return await e.executeWithTryCatch(async()=>await s(this,i).sendBitcoin(t,r),"Error while sending bitcoin from Unisat wallet")}on(t,r){s(this,i).on(t,r)}off(t,r){s(this,i).removeListener(t,r)}}i=new WeakMap,c=new WeakMap;exports.UnisatProvider=d;
1
+ "use strict";var w=n=>{throw TypeError(n)};var k=(n,r,e)=>r.has(n)||w("Cannot "+e);var l=(n,r,e)=>(k(n,r,"read from private field"),e?e.call(n):r.get(n)),d=(n,r,e)=>r.has(n)?w("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(n):r.set(n,e),h=(n,r,e,s)=>(k(n,r,"write to private field"),s?s.call(n,e):r.set(n,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./index16.cjs"),o=require("./index17.cjs"),a=require("@gardenfi/utils"),c=require("sats-connect");var i;class p{constructor(r){d(this,i);this.address="",this.id=u.WALLET_CONFIG.Xverse.id,this.name=u.WALLET_CONFIG.Xverse.name,this.icon=u.WALLET_CONFIG.Xverse.icon,this.connect=async e=>{try{e||(e=a.Network.TESTNET);const s=e===a.Network.MAINNET?o.XverseSparkNetworkType.Mainnet:o.XverseSparkNetworkType.Regtest;await l(this,i).request("wallet_connect",{network:s});const t=await this.getAccounts();return t.ok&&t.val.length>0&&(this.address=t.val[0]),a.Ok({address:this.address,provider:this,network:e,id:u.WALLET_CONFIG.Xverse.id})}catch(s){return a.Err("Error while connecting to the XVerse Spark wallet",s)}},this.getBalance=async()=>await a.executeWithTryCatch(async()=>{const e=await c.request("spark_getBalance",null);if(e.status==="success"&&e.result){const s=e.result,t=parseInt(s.balance||"0",10);return{confirmed:t,unconfirmed:0,total:t}}throw new Error("Failed to get Spark balance")},"Error while getting balance from XVerse Spark wallet"),this.requestAccounts=async()=>await a.executeWithTryCatch(async()=>{const e=await c.request("spark_getAddresses",null);if(e.status==="success"&&e.result)return e.result.addresses.map(t=>t.address);throw new Error("Failed to get Spark addresses")},"Error while requesting accounts from XVerse Spark wallet"),this.getAccounts=async()=>await a.executeWithTryCatch(async()=>{const e=await c.request("spark_getAddresses",null);if(e.status==="success"&&e.result)return e.result.addresses.map(t=>t.address);throw new Error("Failed to get Spark addresses")},"Error while getting accounts from XVerse Spark wallet"),this.sendSpark=async(e,s)=>await a.executeWithTryCatch(async()=>{const t=await c.request("spark_transfer",{receiverSparkAddress:e,amountSats:s});if(t.status==="success"&&t.result)return t.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(a.Ok("Disconnected"))),h(this,i,r)}async getNetwork(){return await a.executeWithTryCatch(async()=>{var e,s;const r=await c.request("wallet_getNetwork",null);if(r.status==="success"&&r.result){const t=r.result;if(((e=t==null?void 0:t.spark)==null?void 0:e.name)===o.XverseSparkNetworkType.Mainnet)return a.Network.MAINNET;if(((s=t==null?void 0:t.spark)==null?void 0:s.name)===o.XverseSparkNetworkType.Regtest)return a.Network.TESTNET}throw new Error("Could not determine Spark network")},"Error while getting network from Xverse Spark wallet")}async switchNetwork(){try{const r=await this.getNetwork();if(r.error)return a.Err("Failed to get current network");const e=r.val===a.Network.MAINNET?o.XverseSparkNetworkType.Regtest:o.XverseSparkNetworkType.Mainnet;try{await l(this,i).request("wallet_changeNetwork",{name:e})}catch{return a.Err("Network switching not supported. Please switch network manually in Xverse wallet.")}const s=await this.getNetwork();return s.ok?a.Ok(s.val):a.Err("Failed to verify network switch")}catch(r){return a.Err("Error while switching network in Xverse Spark:",r)}}}i=new WeakMap;exports.XverseSparkProvider=p;
package/dist/index8.js CHANGED
@@ -1,85 +1,103 @@
1
- var g = (e) => {
2
- throw TypeError(e);
1
+ var k = (a) => {
2
+ throw TypeError(a);
3
3
  };
4
- var k = (e, t, r) => t.has(e) || g("Cannot " + r);
5
- var i = (e, t, r) => (k(e, t, "read from private field"), r ? r.call(e) : t.get(e)), N = (e, t, r) => t.has(e) ? g("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, r), T = (e, t, r, s) => (k(e, t, "write to private field"), s ? s.call(e, r) : t.set(e, r), r);
6
- import { UnisatChainEnum as w, UnisatNetworkEnum as f } from "./index14.js";
7
- import { Ok as E, Err as a, executeWithTryCatch as h, Network as u } from "@gardenfi/utils";
8
- import { WALLET_CONFIG as l } from "./index3.js";
9
- var n, o;
10
- class U {
11
- constructor(t, r) {
12
- N(this, n);
13
- N(this, o);
14
- this.address = "", this.id = l.Unisat.id, this.name = l.Unisat.name, this.icon = l.Unisat.icon, this.disconnect = () => (this.address = "", Promise.resolve(E("Disconnected unisat wallet"))), T(this, n, t), T(this, o, r);
15
- }
16
- async connect(t) {
17
- try {
18
- t || (t = i(this, o));
19
- const r = await this.getNetwork(), s = await i(this, n).getChain();
20
- if (r.error)
21
- return a("Could not get network", r.error);
22
- if (r.val !== t || s.enum === w.BITCOIN_TESTNET) {
23
- const d = await this.switchNetwork();
24
- if (d.error)
25
- return a("Failed to switch network", d.error);
4
+ var p = (a, r, e) => r.has(a) || k("Cannot " + e);
5
+ var d = (a, r, e) => (p(a, r, "read from private field"), e ? e.call(a) : r.get(a)), g = (a, r, e) => r.has(a) ? k("Cannot add the same private member more than once") : r instanceof WeakSet ? r.add(a) : r.set(a, e), f = (a, r, e, s) => (p(a, r, "write to private field"), s ? s.call(a, e) : r.set(a, e), e);
6
+ import { WALLET_CONFIG as w } from "./index16.js";
7
+ import { XverseSparkNetworkType as n } from "./index17.js";
8
+ import { Network as i, Ok as h, Err as c, executeWithTryCatch as l } from "@gardenfi/utils";
9
+ import { request as u } from "sats-connect";
10
+ var o;
11
+ class y {
12
+ constructor(r) {
13
+ g(this, o);
14
+ this.address = "", this.id = w.Xverse.id, this.name = w.Xverse.name, this.icon = w.Xverse.icon, this.connect = async (e) => {
15
+ try {
16
+ e || (e = i.TESTNET);
17
+ const s = e === i.MAINNET ? n.Mainnet : n.Regtest;
18
+ await d(this, o).request("wallet_connect", {
19
+ network: s
20
+ });
21
+ const t = await this.getAccounts();
22
+ return t.ok && t.val.length > 0 && (this.address = t.val[0]), h({
23
+ address: this.address,
24
+ provider: this,
25
+ network: e,
26
+ id: w.Xverse.id
27
+ });
28
+ } catch (s) {
29
+ return c("Error while connecting to the XVerse Spark wallet", s);
30
+ }
31
+ }, this.getBalance = async () => await l(async () => {
32
+ const e = await u("spark_getBalance", null);
33
+ if (e.status === "success" && e.result) {
34
+ const s = e.result, t = parseInt(s.balance || "0", 10);
35
+ return {
36
+ confirmed: t,
37
+ unconfirmed: 0,
38
+ total: t
39
+ };
26
40
  }
27
- const c = await i(this, n).requestAccounts();
28
- return c.length > 0 && (this.address = c[0]), E({
29
- address: this.address,
30
- provider: this,
31
- network: t,
32
- id: l.Unisat.id
41
+ throw new Error("Failed to get Spark balance");
42
+ }, "Error while getting balance from XVerse Spark wallet"), this.requestAccounts = async () => await l(async () => {
43
+ const e = await u("spark_getAddresses", null);
44
+ if (e.status === "success" && e.result)
45
+ return e.result.addresses.map((t) => t.address);
46
+ throw new Error("Failed to get Spark addresses");
47
+ }, "Error while requesting accounts from XVerse Spark wallet"), this.getAccounts = async () => await l(async () => {
48
+ const e = await u("spark_getAddresses", null);
49
+ if (e.status === "success" && e.result)
50
+ return e.result.addresses.map((t) => t.address);
51
+ throw new Error("Failed to get Spark addresses");
52
+ }, "Error while getting accounts from XVerse Spark wallet"), this.sendSpark = async (e, s) => await l(async () => {
53
+ const t = await u("spark_transfer", {
54
+ receiverSparkAddress: e,
55
+ amountSats: s
33
56
  });
34
- } catch (r) {
35
- return a("Error while connecting to the Unisat wallet", r);
36
- }
37
- }
38
- // requests accounts from the wallet, if not connected, it will connect first
39
- async requestAccounts() {
40
- return await h(async () => await i(this, n).requestAccounts(), "Error while requesting accounts from the Unisat wallet");
41
- }
42
- //silently gets accounts if already connected
43
- async getAccounts() {
44
- return await h(async () => await i(this, n).getAccounts(), "Error while getting accounts from the Unisat wallet");
57
+ if (t.status === "success" && t.result)
58
+ return t.result.id;
59
+ throw new Error("Failed to send Spark transaction");
60
+ }, "Error while sending Spark from Xverse Spark wallet"), this.on = () => {
61
+ }, this.off = () => {
62
+ }, this.disconnect = () => (this.address = "", Promise.resolve(h("Disconnected"))), f(this, o, r);
45
63
  }
46
64
  async getNetwork() {
47
- return await h(async () => {
48
- const t = await i(this, n).getNetwork();
49
- if (t === f.LIVENET)
50
- return u.MAINNET;
51
- if (t === f.TESTNET)
52
- return u.TESTNET;
53
- throw new Error("Invalid or unsupported network" + t);
54
- }, "Error while getting network from Unisat wallet");
65
+ return await l(async () => {
66
+ var e, s;
67
+ const r = await u("wallet_getNetwork", null);
68
+ if (r.status === "success" && r.result) {
69
+ const t = r.result;
70
+ if (((e = t == null ? void 0 : t.spark) == null ? void 0 : e.name) === n.Mainnet)
71
+ return i.MAINNET;
72
+ if (((s = t == null ? void 0 : t.spark) == null ? void 0 : s.name) === n.Regtest)
73
+ return i.TESTNET;
74
+ }
75
+ throw new Error("Could not determine Spark network");
76
+ }, "Error while getting network from Xverse Spark wallet");
55
77
  }
56
78
  async switchNetwork() {
57
79
  try {
58
- const t = await this.getNetwork(), r = await i(this, n).getChain();
59
- if (t.error)
60
- return a("Failed to get current network");
61
- const s = t.val === u.MAINNET ? w.BITCOIN_TESTNET4 : i(this, o) === u.TESTNET && r.enum === w.BITCOIN_TESTNET ? w.BITCOIN_TESTNET4 : w.BITCOIN_MAINNET;
62
- await i(this, n).switchChain(s);
63
- const c = await this.getNetwork();
64
- return c.ok ? E(c.val) : a("Failed to verify network switch");
65
- } catch (t) {
66
- return a("Error while switching network in Unisat:", t);
80
+ const r = await this.getNetwork();
81
+ if (r.error)
82
+ return c("Failed to get current network");
83
+ const e = r.val === i.MAINNET ? n.Regtest : n.Mainnet;
84
+ try {
85
+ await d(this, o).request("wallet_changeNetwork", {
86
+ name: e
87
+ });
88
+ } catch {
89
+ return c(
90
+ "Network switching not supported. Please switch network manually in Xverse wallet."
91
+ );
92
+ }
93
+ const s = await this.getNetwork();
94
+ return s.ok ? h(s.val) : c("Failed to verify network switch");
95
+ } catch (r) {
96
+ return c("Error while switching network in Xverse Spark:", r);
67
97
  }
68
98
  }
69
- async getBalance() {
70
- return await h(async () => await i(this, n).getBalance(), "Error while getting balance from Unisat wallet");
71
- }
72
- async sendBitcoin(t, r) {
73
- return await h(async () => await i(this, n).sendBitcoin(t, r), "Error while sending bitcoin from Unisat wallet");
74
- }
75
- on(t, r) {
76
- i(this, n).on(t, r);
77
- }
78
- off(t, r) {
79
- i(this, n).removeListener(t, r);
80
- }
81
99
  }
82
- n = new WeakMap(), o = new WeakMap();
100
+ o = new WeakMap();
83
101
  export {
84
- U as UnisatProvider
102
+ y as XverseSparkProvider
85
103
  };
package/dist/index9.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var m=r=>{throw TypeError(r)};var f=(r,t,e)=>t.has(r)||m("Cannot "+e);var a=(r,t,e)=>(f(r,t,"read from private field"),e?e.call(r):t.get(r)),w=(r,t,e)=>t.has(r)?m("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),g=(r,t,e,o)=>(f(r,t,"write to private field"),o?o.call(r,e):t.set(r,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("bitcoinjs-lib"),A=require("tiny-secp256k1"),n=require("@gardenfi/utils"),i=require("./index3.cjs"),P=require("@gardenfi/core"),x=require("./index4.cjs");function p(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const e in r)if(e!=="default"){const o=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(t,e,o.get?o:{enumerable:!0,get:()=>r[e]})}}return t.default=r,Object.freeze(t)}const d=p(y),I=p(A);y.initEccLib(I);var s;class O{constructor(t){w(this,s);this.address="",this.id=i.WALLET_CONFIG.Phantom.id,this.name=i.WALLET_CONFIG.Phantom.name,this.icon=i.WALLET_CONFIG.Phantom.icon,this.disconnect=()=>(this.address="",Promise.resolve(n.Ok("Disconnected Phantom wallet"))),g(this,s,t)}async connect(t){if(t||(t=n.Network.MAINNET),t===n.Network.TESTNET)return n.Err("Phantom wallet does not support testnet");try{const e=await a(this,s).requestAccounts();for(const o of e)o.purpose==="payment"&&(this.address=o.address);return this.address===""?n.Err("Could not connect to Phantom bitcoin payment account"):n.Ok({address:this.address,provider:this,network:t,id:i.WALLET_CONFIG.Phantom.id})}catch(e){return n.Err("Error while connecting to Phantom wallet: "+e)}}async requestAccounts(){return await n.executeWithTryCatch(async()=>{const t=await a(this,s).requestAccounts();return t.length>0&&(this.address=t[0].address),t.map(e=>e.address)},"Error while requesting accounts from Phantom wallet")}async getAccounts(){return this.requestAccounts()}async getNetwork(){return n.Ok(n.Network.MAINNET)}async switchNetwork(){return n.Err("Phantom wallet does not support testnet")}async getBalance(){return await n.executeWithTryCatch(async()=>{const t=await x.getBalance(this.address,n.Network.MAINNET);if(t.ok&&t.val)return t.val;throw new Error(t.error)},"Error while getting balance from Phantom wallet")}async sendBitcoin(t,e){return await n.executeWithTryCatch(async()=>{const o=d.networks.bitcoin,h=new P.BitcoinProvider(n.Network.MAINNET);try{const{txHex:c,utxoCount:b}=await P.BitcoinWallet.generateUnsignedPSBT(h,o,this.address,t,e),E=await a(this,s).signPSBT(this.fromHexString(c),{inputsToSign:[{address:this.address,signingIndexes:Array.from({length:b},(S,T)=>T),sigHash:d.Transaction.SIGHASH_ALL}]}),l=d.Psbt.fromBuffer(Buffer.from(E));l.finalizeAllInputs();const u=l.extractTransaction();console.log("tx",u);const N=u.getId();return await h.broadcast(u.toHex()),N}catch(c){throw new Error(`Failed to send bitcoin: ${c}`)}},"Error while sending bitcoin from Phantom wallet")}fromHexString(t){return Uint8Array.from(t.match(/.{1,2}/g).map(e=>parseInt(e,16)))}on(t,e){a(this,s).on(t,e)}off(t,e){a(this,s).off(t,e)}}s=new WeakMap;exports.PhantomProvider=O;
1
+ "use strict";var l=i=>{throw TypeError(i)};var d=(i,t,e)=>t.has(i)||l("Cannot "+e);var n=(i,t,e)=>(d(i,t,"read from private field"),e?e.call(i):t.get(i)),h=(i,t,e)=>t.has(i)?l("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),a=(i,t,e,u)=>(d(i,t,"write to private field"),u?u.call(i,e):t.set(i,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@gardenfi/utils"),o=require("./index3.cjs");var s,c;class w{constructor(t,e){h(this,s);h(this,c);this.address="",this.id=o.WALLET_CONFIG.OKX.id,this.name=o.WALLET_CONFIG.OKX.name,this.icon=o.WALLET_CONFIG.OKX.icon,this.disconnect=()=>(this.address="",n(this,s).disconnect(),Promise.resolve(r.Ok("Disconnected OKX wallet"))),a(this,s,t),a(this,c,e)}async connect(){try{const t=await n(this,s).connect();return!t||!t.address?r.Err("Failed to connect to OKX wallet"):(this.address=t.address,r.Ok({address:this.address,provider:this,network:n(this,c),id:o.WALLET_CONFIG.OKX.id}))}catch(t){return r.Err("Error while connecting to the OKX wallet",t)}}async getPublicKey(){return await r.executeWithTryCatch(async()=>await n(this,s).getPublicKey(),"Error while getting public key from OKX wallet")}async requestAccounts(){const t=await this.connect();return t.ok?r.Ok([t.val.address]):r.Err(t.error)}async getAccounts(){return n(this,c)===r.Network.TESTNET?await this.requestAccounts():await r.executeWithTryCatch(async()=>await n(this,s).getAccounts(),"Error while getting accounts from OKX wallet")}async getNetwork(){return r.Ok(n(this,c))}async switchNetwork(){a(this,c,n(this,c)===r.Network.MAINNET?r.Network.TESTNET:r.Network.MAINNET);const t=await this.connect();return t.error?r.Err(`Failed to connect to ${n(this,c)}: ${t.error}`):r.Ok(n(this,c))}async getBalance(){return await r.executeWithTryCatch(async()=>await n(this,s).getBalance(),"Error while getting balance from OKX wallet")}async sendBitcoin(t,e){return await r.executeWithTryCatch(async()=>await n(this,s).sendBitcoin(t,e),"Error while sending bitcoin from OKX wallet")}on(t,e){n(this,s).on(t,e)}off(t,e){n(this,s).off(t,e)}}s=new WeakMap,c=new WeakMap;exports.OKXProvider=w;