@gardenfi/react-hooks 2.5.2-beta.5 → 2.5.3-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index2.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),H=require("./index3.cjs"),v=require("@gardenfi/core"),o=require("@gardenfi/orderbook"),h=require("./index4.cjs"),L=require("./index5.cjs"),n=require("@gardenfi/utils"),p=u.createContext({pendingOrders:[]}),b=({children:c,config:t,handleSecretManagement:l})=>{const[e,T]=u.useState(),{digestKey:d}=L.useDigestKey(),{pendingOrders:C}=H.useOrderbook(e),w=u.useMemo(()=>{const{api:i}=v.resolveApiConfig(t.environment);return t.quote??new v.Quote(i.quote)},[t.environment,t.quote]),y=u.useMemo(()=>async({fromAsset:i,toAsset:a,amount:s,isExactOut:k=!1,options:r})=>await(e?e.quote:w).getQuoteFromAssets({fromAsset:i,toAsset:a,amount:s,isExactOut:k,options:r}),[e,w]),E=async i=>{if(!e)return n.Err("Garden not initialized");const a=await e.swap(i);if(!a.val)return n.Err(a.error);if(o.isBitcoin(a.val.source_swap.chain))return n.Ok(a.val);let s;switch(o.getBlockchainType(a.val.source_swap.chain)){case o.BlockchainType.EVM:{if(!e.evmHTLC)return n.Err("EVM HTLC not initialized: Please provide evmHTLC");const r=await e.evmHTLC.initiate(a.val);if(!r.ok)return n.Err(r.error);s=r.val;break}case o.BlockchainType.Starknet:{if(!e.starknetHTLC)return n.Err("Starknet HTLC not initialized: Please provide starknetHTLC");const r=await e.starknetHTLC.initiate(a.val);if(!r.ok)return n.Err(r.error);s=r.val;break}case o.BlockchainType.Solana:{if(!e.solanaHTLC)return n.Err("Solana HTLC not initialized: Please provide solanaHTLC");const r=await e.solanaHTLC.initiate(a.val);if(!r.ok)return n.Err(r.error);s=r.val;break}case o.BlockchainType.Sui:{if(!e.suiHTLC)return n.Err("Sui HTLC not initialized: Please provide suiHTLC");const r=await e.suiHTLC.initiate(a.val);if(!r.ok)return n.Err(r.error);s=r.val;break}case o.BlockchainType.Bitcoin:s=a.val.source_swap.initiate_tx_hash;break;default:return n.Err("Unsupported chain")}const k={...a.val,source_swap:{...a.val.source_swap,initiate_tx_hash:s}};return n.Ok(k)};return u.useEffect(()=>{if(!window||!d||!("wallets"in t)&&!("htlc"in t))return;let i;if("wallets"in t&&Object.keys(t.wallets).length>0&&h.hasAnyValidValue(t.wallets))i=v.Garden.fromWallets({...t,digestKey:d}).handleSecretManagement(l||!1);else if("htlc"in t&&Object.keys(t.htlc).length>0&&h.hasAnyValidValue(t.htlc))i=new v.Garden({...t,digestKey:d}).handleSecretManagement(l||!1);else return;T(i)},[t,d,l]),u.createElement(p.Provider,{value:{swapAndInitiate:E,pendingOrders:C,getQuote:y,garden:e,orderBook:e==null?void 0:e.orderbook}},c)},q=()=>{const c=u.useContext(p);if(!c)throw new Error("useGarden must be used within a GardenProvider");return c};exports.GardenContext=p;exports.GardenProvider=b;exports.useGarden=q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),m=require("./index3.cjs"),d=require("@gardenfi/core"),O=require("./index4.cjs"),E=require("./index5.cjs"),y=require("@gardenfi/utils"),q=require("./index6.cjs"),w=o.createContext({pendingOrders:[]}),P=({children:i,config:e,store:l,setRedeemServiceEnabled:s=!0})=>{const[r,h]=o.useState(),{digestKey:c}=E.useDigestKey(s),{pendingOrders:p}=m.useOrderbook(r,l),G=o.useMemo(()=>{const{api:t}=d.resolveApiConfig(e.environment);return e.quote??new d.Quote(t.baseurl)},[e.environment,e.quote]),v=o.useMemo(()=>async({fromAsset:t,toAsset:n,amount:u,isExactOut:a=!1,options:k})=>await(r?r.quote:G).getQuoteFromAssets({fromAsset:t,toAsset:n,amount:u,isExactOut:a,options:k}),[r,G]),g=async t=>{if(!r)return y.Err("Garden not initialized");const n=await r.createSwap(t);if(!n.val)return y.Err(n.error||"Unknown error occurred");if(s)try{const u=l.getItem(q.PENDING_ORDERS_STORE),a=u?JSON.parse(u):[];a.includes(n.val)||a.push(n.val),l.setItem(q.PENDING_ORDERS_STORE,JSON.stringify(a))}catch(u){console.error("Failed to persist pending order id",u)}return y.Ok(n.val)};return o.useEffect(()=>{if(!("wallets"in e)&&!("htlc"in e))return;let t;if("wallets"in e&&Object.keys(e.wallets??{}).length>0&&O.hasAnyValidValue(e.wallets??{}))t=d.Garden.fromWallets({...e,digestKey:s?void 0:c}).setRedeemServiceEnabled(s);else if("htlc"in e&&Object.keys(e.htlc??{}).length>0&&O.hasAnyValidValue(e.htlc??{}))t=new d.Garden({...e,digestKey:s?void 0:c}).setRedeemServiceEnabled(s);else return;h(t)},[e,c,s]),o.createElement(w.Provider,{value:{swap:g,pendingOrders:p,getQuote:v,garden:r,orderBook:r}},i)},D=()=>{const i=o.useContext(w);if(!i)throw new Error("useGarden must be used within a GardenProvider");return i};exports.GardenContext=w;exports.GardenProvider=P;exports.useGarden=D;
package/dist/index2.js CHANGED
@@ -1,132 +1,86 @@
1
- import C, { useState as _, useMemo as p, useEffect as b, createContext as y } from "react";
2
- import { useOrderbook as G } from "./index3.js";
3
- import { resolveApiConfig as q, Quote as x, Garden as w } from "@gardenfi/core";
4
- import { isBitcoin as O, getBlockchainType as P, BlockchainType as l } from "@gardenfi/orderbook";
5
- import { hasAnyValidValue as k } from "./index4.js";
6
- import { useDigestKey as E } from "./index5.js";
7
- import { Err as i, Ok as m } from "@gardenfi/utils";
8
- const h = y({
1
+ import y, { useState as x, useMemo as m, useEffect as g, createContext as C } from "react";
2
+ import { useOrderbook as K } from "./index3.js";
3
+ import { resolveApiConfig as N, Quote as P, Garden as p } from "@gardenfi/core";
4
+ import { hasAnyValidValue as c } from "./index4.js";
5
+ import { useDigestKey as _ } from "./index5.js";
6
+ import { Err as w, Ok as A } from "@gardenfi/utils";
7
+ import { PENDING_ORDERS_STORE as h } from "./index6.js";
8
+ const O = C({
9
9
  pendingOrders: []
10
- }), j = ({
11
- children: u,
12
- config: r,
13
- handleSecretManagement: o
10
+ }), V = ({
11
+ children: i,
12
+ config: e,
13
+ store: u,
14
+ setRedeemServiceEnabled: n = !0
14
15
  }) => {
15
- const [e, T] = _(), { digestKey: d } = E(), { pendingOrders: f } = G(e), v = p(() => {
16
- const { api: n } = q(r.environment);
17
- return r.quote ?? new x(n.quote);
18
- }, [r.environment, r.quote]), H = p(
16
+ const [r, v] = x(), { digestKey: l } = _(n), { pendingOrders: G } = K(r, u), d = m(() => {
17
+ const { api: t } = N(e.environment);
18
+ return e.quote ?? new P(t.baseurl);
19
+ }, [e.environment, e.quote]), f = m(
19
20
  () => async ({
20
- fromAsset: n,
21
- toAsset: a,
21
+ fromAsset: t,
22
+ toAsset: o,
22
23
  amount: s,
23
- isExactOut: c = !1,
24
- options: t
25
- }) => await (e ? e.quote : v).getQuoteFromAssets({
26
- fromAsset: n,
27
- toAsset: a,
24
+ isExactOut: a = !1,
25
+ options: q
26
+ }) => await (r ? r.quote : d).getQuoteFromAssets({
27
+ fromAsset: t,
28
+ toAsset: o,
28
29
  amount: s,
29
- isExactOut: c,
30
- options: t
30
+ isExactOut: a,
31
+ options: q
31
32
  }),
32
- [e, v]
33
- ), L = async (n) => {
34
- if (!e) return i("Garden not initialized");
35
- const a = await e.swap(n);
36
- if (!a.val) return i(a.error);
37
- if (O(a.val.source_swap.chain)) return m(a.val);
38
- let s;
39
- switch (P(a.val.source_swap.chain)) {
40
- case l.EVM: {
41
- if (!e.evmHTLC)
42
- return i("EVM HTLC not initialized: Please provide evmHTLC");
43
- const t = await e.evmHTLC.initiate(a.val);
44
- if (!t.ok) return i(t.error);
45
- s = t.val;
46
- break;
33
+ [r, d]
34
+ ), k = async (t) => {
35
+ if (!r) return w("Garden not initialized");
36
+ const o = await r.createSwap(t);
37
+ if (!o.val) return w(o.error || "Unknown error occurred");
38
+ if (n)
39
+ try {
40
+ const s = u.getItem(h), a = s ? JSON.parse(s) : [];
41
+ a.includes(o.val) || a.push(o.val), u.setItem(h, JSON.stringify(a));
42
+ } catch (s) {
43
+ console.error("Failed to persist pending order id", s);
47
44
  }
48
- case l.Starknet: {
49
- if (!e.starknetHTLC)
50
- return i(
51
- "Starknet HTLC not initialized: Please provide starknetHTLC"
52
- );
53
- const t = await e.starknetHTLC.initiate(a.val);
54
- if (!t.ok) return i(t.error);
55
- s = t.val;
56
- break;
57
- }
58
- case l.Solana: {
59
- if (!e.solanaHTLC)
60
- return i("Solana HTLC not initialized: Please provide solanaHTLC");
61
- const t = await e.solanaHTLC.initiate(a.val);
62
- if (!t.ok) return i(t.error);
63
- s = t.val;
64
- break;
65
- }
66
- case l.Sui: {
67
- if (!e.suiHTLC)
68
- return i("Sui HTLC not initialized: Please provide suiHTLC");
69
- const t = await e.suiHTLC.initiate(a.val);
70
- if (!t.ok) return i(t.error);
71
- s = t.val;
72
- break;
73
- }
74
- case l.Bitcoin:
75
- s = a.val.source_swap.initiate_tx_hash;
76
- break;
77
- default:
78
- return i("Unsupported chain");
79
- }
80
- const c = {
81
- ...a.val,
82
- source_swap: {
83
- ...a.val.source_swap,
84
- initiate_tx_hash: s
85
- }
86
- };
87
- return m(c);
45
+ return A(o.val);
88
46
  };
89
- return b(() => {
90
- if (!window || !d || !("wallets" in r) && !("htlc" in r)) return;
91
- let n;
92
- if ("wallets" in r && Object.keys(r.wallets).length > 0 && k(r.wallets))
93
- n = w.fromWallets({
94
- ...r,
95
- digestKey: d
96
- }).handleSecretManagement(
97
- o || !1
98
- );
99
- else if ("htlc" in r && Object.keys(r.htlc).length > 0 && k(r.htlc))
100
- n = new w({
101
- ...r,
102
- digestKey: d
103
- }).handleSecretManagement(
104
- o || !1
105
- );
47
+ return g(() => {
48
+ if (!("wallets" in e) && !("htlc" in e)) return;
49
+ let t;
50
+ if ("wallets" in e && Object.keys(e.wallets ?? {}).length > 0 && c(e.wallets ?? {}))
51
+ t = p.fromWallets({
52
+ ...e,
53
+ digestKey: n ? void 0 : l
54
+ }).setRedeemServiceEnabled(n);
55
+ else if ("htlc" in e && Object.keys(e.htlc ?? {}).length > 0 && c(e.htlc ?? {}))
56
+ t = new p({
57
+ ...e,
58
+ digestKey: n ? void 0 : l
59
+ }).setRedeemServiceEnabled(n);
106
60
  else
107
61
  return;
108
- T(n);
109
- }, [r, d, o]), /* @__PURE__ */ C.createElement(
110
- h.Provider,
62
+ v(t);
63
+ }, [e, l, n]), /* @__PURE__ */ y.createElement(
64
+ O.Provider,
111
65
  {
112
66
  value: {
113
- swapAndInitiate: L,
114
- pendingOrders: f,
115
- getQuote: H,
116
- garden: e,
117
- orderBook: e == null ? void 0 : e.orderbook
67
+ swap: k,
68
+ pendingOrders: G,
69
+ getQuote: f,
70
+ garden: r,
71
+ orderBook: r
118
72
  }
119
73
  },
120
- u
74
+ i
121
75
  );
122
- }, K = () => {
123
- const u = C.useContext(h);
124
- if (!u)
76
+ }, b = () => {
77
+ const i = y.useContext(O);
78
+ if (!i)
125
79
  throw new Error("useGarden must be used within a GardenProvider");
126
- return u;
80
+ return i;
127
81
  };
128
82
  export {
129
- h as GardenContext,
130
- j as GardenProvider,
131
- K as useGarden
83
+ O as GardenContext,
84
+ V as GardenProvider,
85
+ b as useGarden
132
86
  };
package/dist/index3.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),c=e=>{const[t,o]=s.useState([]);return s.useEffect(()=>{if(!e)return;const u=e.execute(),n=r=>o(r);return e.on("onPendingOrdersChanged",n),()=>{(async()=>(await u)())(),e.off("onPendingOrdersChanged",n)}},[e]),{pendingOrders:t}};exports.useOrderbook=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("@gardenfi/orderbook"),s=require("react"),p=require("./index6.cjs"),R=(t,c)=>{const[m,d]=s.useState([]),o=s.useRef(null),a=s.useRef(!1),E=5e3,O=s.useCallback(async()=>{if(t)try{const e=c.getItem(p.PENDING_ORDERS_STORE),r=e?JSON.parse(e):[];if(r.length===0){d([]);return}const u=await Promise.all(r.map(n=>t.getOrder(n))),g=[],l=[];u.forEach((n,h)=>{if(!n.ok){l.push(r[h]);return}const i=n.val;i.status===f.OrderStatus.Redeemed||i.status===f.OrderStatus.Refunded||i.status===f.OrderStatus.Expired||(g.push(i),l.push(r[h]))});try{c.setItem(p.PENDING_ORDERS_STORE,JSON.stringify(l))}catch(n){console.error("Error persisting remaining pending order ids",n)}d(g)}catch(e){console.error("Error fetching pending orders:",e)}},[t,c]);return s.useEffect(()=>{if(t)if(t.redeemServiceEnabled){let e=!1;const r=()=>{e||(o.current=setTimeout(u,E))},u=async()=>{if(!e){if(a.current){r();return}a.current=!0;try{await O()}finally{a.current=!1}r()}};return u(),()=>{e=!0,o.current&&(clearTimeout(o.current),o.current=null)}}else{const e=r=>d(r);return t.on("onPendingOrdersChanged",e),()=>{t.off("onPendingOrdersChanged",e)}}},[t,O]),{pendingOrders:m}};exports.useOrderbook=R;
package/dist/index3.js CHANGED
@@ -1,14 +1,66 @@
1
- import { useState as u, useEffect as c } from "react";
2
- const d = (e) => {
3
- const [r, t] = u([]);
4
- return c(() => {
5
- if (!e) return;
6
- const o = e.execute(), n = (s) => t(s);
7
- return e.on("onPendingOrdersChanged", n), () => {
8
- (async () => (await o)())(), e.off("onPendingOrdersChanged", n);
9
- };
10
- }, [e]), { pendingOrders: r };
1
+ import { OrderStatus as l } from "@gardenfi/orderbook";
2
+ import { useState as R, useRef as h, useCallback as y, useEffect as C } from "react";
3
+ import { PENDING_ORDERS_STORE as g } from "./index6.js";
4
+ const T = (t, u) => {
5
+ const [O, c] = R([]), s = h(null), d = h(!1), E = 5e3, a = y(async () => {
6
+ if (t)
7
+ try {
8
+ const e = u.getItem(g), r = e ? JSON.parse(e) : [];
9
+ if (r.length === 0) {
10
+ c([]);
11
+ return;
12
+ }
13
+ const o = await Promise.all(r.map((n) => t.getOrder(n))), m = [], f = [];
14
+ o.forEach((n, p) => {
15
+ if (!n.ok) {
16
+ f.push(r[p]);
17
+ return;
18
+ }
19
+ const i = n.val;
20
+ i.status === l.Redeemed || i.status === l.Refunded || i.status === l.Expired || (m.push(i), f.push(r[p]));
21
+ });
22
+ try {
23
+ u.setItem(g, JSON.stringify(f));
24
+ } catch (n) {
25
+ console.error("Error persisting remaining pending order ids", n);
26
+ }
27
+ c(m);
28
+ } catch (e) {
29
+ console.error("Error fetching pending orders:", e);
30
+ }
31
+ }, [t, u]);
32
+ return C(() => {
33
+ if (t)
34
+ if (t.redeemServiceEnabled) {
35
+ let e = !1;
36
+ const r = () => {
37
+ e || (s.current = setTimeout(o, E));
38
+ }, o = async () => {
39
+ if (!e) {
40
+ if (d.current) {
41
+ r();
42
+ return;
43
+ }
44
+ d.current = !0;
45
+ try {
46
+ await a();
47
+ } finally {
48
+ d.current = !1;
49
+ }
50
+ r();
51
+ }
52
+ };
53
+ return o(), () => {
54
+ e = !0, s.current && (clearTimeout(s.current), s.current = null);
55
+ };
56
+ } else {
57
+ const e = (r) => c(r);
58
+ return t.on("onPendingOrdersChanged", e), () => {
59
+ t.off("onPendingOrdersChanged", e);
60
+ };
61
+ }
62
+ }, [t, a]), { pendingOrders: O };
11
63
  };
12
64
  export {
13
- d as useOrderbook
65
+ T as useOrderbook
14
66
  };
package/dist/index5.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@gardenfi/utils"),e=require("./index6.cjs"),E=require("react"),D=()=>{const[y,d]=E.useState();return E.useEffect(()=>{if(!indexedDB){console.error("IndexedDB is not supported in this browser");return}let o;const a=indexedDB.open(e.DB_NAME,e.VERSION);a.onerror=s=>{console.error("IndexedDB error:",s.target.error)},a.onupgradeneeded=s=>{const n=s.target.result;n.objectStoreNames.contains(e.STORE_NAME)||n.createObjectStore(e.STORE_NAME,{keyPath:"id"})},a.onsuccess=s=>{if(o=s.target.result,!o.objectStoreNames.contains(e.STORE_NAME)){o.close();const r=indexedDB.open(e.DB_NAME,o.version+1);r.onupgradeneeded=n=>{n.target.result.createObjectStore(e.STORE_NAME,{keyPath:"id"})},r.onsuccess=()=>{g(r.result)};return}g(o)};function g(s){try{const r=s.transaction(e.STORE_NAME,"readwrite"),n=r.objectStore(e.STORE_NAME),c=n.get(e.DIGEST_KEY);c.onsuccess=()=>{if(c.result){const i=u.DigestKey.from(c.result.value);if(!i.error){d(i.val);return}}const t=u.DigestKey.generateRandom();if(!t.ok){console.error("Error generating new digest key:",t.error);return}const l=n.put({id:e.DIGEST_KEY,value:t.val.digestKey});l.onsuccess=()=>{d(u.DigestKey.from(t.val.digestKey).val)},l.onerror=i=>{console.error("Error storing new digest key:",i)}},c.onerror=t=>{console.error("Error retrieving digest key:",t)},r.oncomplete=()=>{},r.onerror=t=>{console.error("Error in digestKey transaction:",t)}}catch(r){console.error("Transaction error:",r)}}return()=>{o&&o.close()}},[]),{digestKey:y}};exports.useDigestKey=D;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@gardenfi/utils"),e=require("./index6.cjs"),y=require("react"),f=(a=!0)=>{const[E,g]=y.useState();return y.useEffect(()=>{if(a)return;if(!indexedDB){console.error("IndexedDB is not supported in this browser");return}let o;const d=indexedDB.open(e.DB_NAME,e.VERSION);d.onerror=s=>{console.error("IndexedDB error:",s.target.error)},d.onupgradeneeded=s=>{const n=s.target.result;n.objectStoreNames.contains(e.STORE_NAME)||n.createObjectStore(e.STORE_NAME,{keyPath:"id"})},d.onsuccess=s=>{if(o=s.target.result,!o.objectStoreNames.contains(e.STORE_NAME)){o.close();const r=indexedDB.open(e.DB_NAME,o.version+1);r.onupgradeneeded=n=>{n.target.result.createObjectStore(e.STORE_NAME,{keyPath:"id"})},r.onsuccess=()=>{l(r.result)};return}l(o)};function l(s){try{const r=s.transaction(e.STORE_NAME,"readwrite"),n=r.objectStore(e.STORE_NAME),c=n.get(e.DIGEST_KEY);c.onsuccess=()=>{if(c.result){const i=u.DigestKey.from(c.result.value);if(!i.error){g(i.val);return}}const t=u.DigestKey.generateRandom();if(!t.ok){console.error("Error generating new digest key:",t.error);return}if(a)g(u.DigestKey.from(t.val.digestKey).val);else{const i=n.put({id:e.DIGEST_KEY,value:t.val.digestKey});i.onsuccess=()=>{g(u.DigestKey.from(t.val.digestKey).val)},i.onerror=D=>{console.error("Error storing new digest key:",D)}}},c.onerror=t=>{console.error("Error retrieving digest key:",t)},r.oncomplete=()=>{},r.onerror=t=>{console.error("Error in digestKey transaction:",t)}}catch(r){console.error("Transaction error:",r)}}return()=>{o&&o.close()}},[a]),{digestKey:E}};exports.useDigestKey=f;
package/dist/index5.js CHANGED
@@ -1,61 +1,67 @@
1
- import { DigestKey as u } from "@gardenfi/utils";
2
- import { DB_NAME as f, VERSION as D, STORE_NAME as n, DIGEST_KEY as p } from "./index6.js";
3
- import { useState as m, useEffect as E } from "react";
4
- const v = () => {
5
- const [y, d] = m();
1
+ import { DigestKey as a } from "@gardenfi/utils";
2
+ import { DB_NAME as f, VERSION as m, STORE_NAME as n, DIGEST_KEY as y } from "./index6.js";
3
+ import { useState as K, useEffect as E } from "react";
4
+ const S = (u = !0) => {
5
+ const [p, d] = K();
6
6
  return E(() => {
7
+ if (u)
8
+ return;
7
9
  if (!indexedDB) {
8
10
  console.error("IndexedDB is not supported in this browser");
9
11
  return;
10
12
  }
11
13
  let t;
12
- const a = indexedDB.open(f, D);
13
- a.onerror = (o) => {
14
+ const g = indexedDB.open(f, m);
15
+ g.onerror = (o) => {
14
16
  console.error(
15
17
  "IndexedDB error:",
16
18
  o.target.error
17
19
  );
18
- }, a.onupgradeneeded = (o) => {
20
+ }, g.onupgradeneeded = (o) => {
19
21
  const s = o.target.result;
20
22
  s.objectStoreNames.contains(n) || s.createObjectStore(n, { keyPath: "id" });
21
- }, a.onsuccess = (o) => {
23
+ }, g.onsuccess = (o) => {
22
24
  if (t = o.target.result, !t.objectStoreNames.contains(n)) {
23
25
  t.close();
24
26
  const e = indexedDB.open(f, t.version + 1);
25
27
  e.onupgradeneeded = (s) => {
26
28
  s.target.result.createObjectStore(n, { keyPath: "id" });
27
29
  }, e.onsuccess = () => {
28
- g(e.result);
30
+ l(e.result);
29
31
  };
30
32
  return;
31
33
  }
32
- g(t);
34
+ l(t);
33
35
  };
34
- function g(o) {
36
+ function l(o) {
35
37
  try {
36
- const e = o.transaction(n, "readwrite"), s = e.objectStore(n), c = s.get(p);
38
+ const e = o.transaction(n, "readwrite"), s = e.objectStore(n), c = s.get(y);
37
39
  c.onsuccess = () => {
38
40
  if (c.result) {
39
- const i = u.from(c.result.value);
41
+ const i = a.from(c.result.value);
40
42
  if (!i.error) {
41
43
  d(i.val);
42
44
  return;
43
45
  }
44
46
  }
45
- const r = u.generateRandom();
47
+ const r = a.generateRandom();
46
48
  if (!r.ok) {
47
49
  console.error("Error generating new digest key:", r.error);
48
50
  return;
49
51
  }
50
- const l = s.put({
51
- id: p,
52
- value: r.val.digestKey
53
- });
54
- l.onsuccess = () => {
55
- d(u.from(r.val.digestKey).val);
56
- }, l.onerror = (i) => {
57
- console.error("Error storing new digest key:", i);
58
- };
52
+ if (u)
53
+ d(a.from(r.val.digestKey).val);
54
+ else {
55
+ const i = s.put({
56
+ id: y,
57
+ value: r.val.digestKey
58
+ });
59
+ i.onsuccess = () => {
60
+ d(a.from(r.val.digestKey).val);
61
+ }, i.onerror = (D) => {
62
+ console.error("Error storing new digest key:", D);
63
+ };
64
+ }
59
65
  }, c.onerror = (r) => {
60
66
  console.error("Error retrieving digest key:", r);
61
67
  }, e.oncomplete = () => {
@@ -69,8 +75,8 @@ const v = () => {
69
75
  return () => {
70
76
  t && t.close();
71
77
  };
72
- }, []), { digestKey: y };
78
+ }, [u]), { digestKey: p };
73
79
  };
74
80
  export {
75
- v as useDigestKey
81
+ S as useDigestKey
76
82
  };
package/dist/index6.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="garden-finance-db",n="garden-finance-store",t="digest-key",E=1;exports.DB_NAME=e;exports.DIGEST_KEY=t;exports.STORE_NAME=n;exports.VERSION=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E="garden-finance-db",e="garden-finance-store",n="digest-key",t=1,o="orders-in-progress";exports.DB_NAME=E;exports.DIGEST_KEY=n;exports.PENDING_ORDERS_STORE=o;exports.STORE_NAME=e;exports.VERSION=t;
package/dist/index6.js CHANGED
@@ -1,7 +1,8 @@
1
- const n = "garden-finance-db", e = "garden-finance-store", t = "digest-key", c = 1;
1
+ const n = "garden-finance-db", e = "garden-finance-store", s = "digest-key", o = 1, E = "orders-in-progress";
2
2
  export {
3
3
  n as DB_NAME,
4
- t as DIGEST_KEY,
4
+ s as DIGEST_KEY,
5
+ E as PENDING_ORDERS_STORE,
5
6
  e as STORE_NAME,
6
- c as VERSION
7
+ o as VERSION
7
8
  };
@@ -2,3 +2,4 @@ export declare const DB_NAME = "garden-finance-db";
2
2
  export declare const STORE_NAME = "garden-finance-store";
3
3
  export declare const DIGEST_KEY = "digest-key";
4
4
  export declare const VERSION = 1;
5
+ export declare const PENDING_ORDERS_STORE = "orders-in-progress";
@@ -1,6 +1,6 @@
1
1
  import { OrderWithStatus, QuoteParamsForAssets, IGardenJS, QuoteResponse, SwapParams, GardenConfigWithHTLCs, GardenConfigWithWallets } from '@gardenfi/core';
2
- import { IOrderbook, MatchedOrder } from '@gardenfi/orderbook';
3
- import { AsyncResult, Result } from '@gardenfi/utils';
2
+ import { IOrderbook } from '@gardenfi/orderbook';
3
+ import { AsyncResult, IStore } from '@gardenfi/utils';
4
4
 
5
5
  export type GardenContextType = {
6
6
  /**
@@ -13,11 +13,11 @@ export type GardenContextType = {
13
13
  * @params {SwapParams} - The parameters for creating the order.
14
14
  * @returns {AsyncResult<string, string>} - create order ID.
15
15
  */
16
- swapAndInitiate?: (params: SwapParams) => AsyncResult<MatchedOrder, string>;
16
+ swap?: (params: SwapParams) => AsyncResult<string, string>;
17
17
  /**
18
18
  * Get all the pending orders of the user. This will return all the orders that are yet to be initiated, redeemed, or refunded.
19
19
  * It will not return orders that have expired (deadline expiry).
20
- * @returns {MatchedOrder[]} - The pending orders of the user.
20
+ * @returns {Order[]} - The pending orders of the user.
21
21
  */
22
22
  pendingOrders: OrderWithStatus[];
23
23
  /**
@@ -25,7 +25,7 @@ export type GardenContextType = {
25
25
  * @param params
26
26
  * @returns
27
27
  */
28
- getQuote?: (params: QuoteParamsForAssets) => Promise<Result<QuoteResponse, string> | undefined>;
28
+ getQuote?: (params: QuoteParamsForAssets) => AsyncResult<QuoteResponse[], string> | undefined;
29
29
  /**
30
30
  * The garden instance.
31
31
  * @returns {IGardenJS}
@@ -35,5 +35,12 @@ export type GardenContextType = {
35
35
  export type GardenProviderProps = {
36
36
  children: React.ReactNode;
37
37
  config: Omit<GardenConfigWithHTLCs, 'digestKey'> | Omit<GardenConfigWithWallets, 'digestKey'>;
38
- handleSecretManagement?: boolean;
38
+ store: IStore;
39
+ /**
40
+ * Controls whether the redeem service is enabled.
41
+ * - When `true` (default): Manual order fetching with digestKey required
42
+ * - When `false`: Event-based order updates, no digestKey required
43
+ * @default true
44
+ */
45
+ setRedeemServiceEnabled?: boolean;
39
46
  };
@@ -1,5 +1,5 @@
1
1
  import { DigestKey } from '@gardenfi/utils';
2
2
 
3
- export declare const useDigestKey: () => {
3
+ export declare const useDigestKey: (setRedeemServiceEnabled?: boolean) => {
4
4
  digestKey: DigestKey | undefined;
5
5
  };
@@ -1,5 +1,6 @@
1
1
  import { IGardenJS, OrderWithStatus } from '@gardenfi/core';
2
+ import { IStore } from '@gardenfi/utils';
2
3
 
3
- export declare const useOrderbook: (garden: IGardenJS | undefined) => {
4
+ export declare const useOrderbook: (garden: IGardenJS | undefined, store: IStore) => {
4
5
  pendingOrders: OrderWithStatus[];
5
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gardenfi/react-hooks",
3
- "version": "2.5.2-beta.5",
3
+ "version": "2.5.3-beta.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -27,9 +27,9 @@
27
27
  "registry": "https://registry.npmjs.org/"
28
28
  },
29
29
  "dependencies": {
30
- "@gardenfi/core": "2.5.2-beta.5",
31
- "@gardenfi/orderbook": "2.5.2-beta.2",
32
- "@gardenfi/utils": "2.5.2",
30
+ "@gardenfi/core": "workspace:*",
31
+ "@gardenfi/orderbook": "workspace:*",
32
+ "@gardenfi/utils": "workspace:*",
33
33
  "react": "^18.3.1",
34
34
  "starknet": "7.6.4"
35
35
  },
@@ -44,4 +44,4 @@
44
44
  "vitest": "^1.6.0"
45
45
  },
46
46
  "sideEffects": false
47
- }
47
+ }