@orbs-network/spot-react 2.1.22 → 2.1.24
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/README.md +14 -3
- package/dist/spot-react/src/context/order-form-context.d.ts.map +1 -1
- package/dist/spot-react/src/context/spot-trading-context.d.ts +3 -0
- package/dist/spot-react/src/context/spot-trading-context.d.ts.map +1 -1
- package/dist/spot-react/src/context/use-spot-provider-state.d.ts.map +1 -1
- package/dist/spot-react/src/types.d.ts +6 -0
- package/dist/spot-react/src/types.d.ts.map +1 -1
- package/dist/spot-react.js +586 -571
- package/dist/spot-react.umd.cjs +1 -1
- package/package.json +2 -2
package/dist/spot-react.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(l,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@orbs-network/spot-ui"),require("react/jsx-runtime"),require("react"),require("zustand"),require("zustand/vanilla")):typeof define=="function"&&define.amd?define(["exports","@orbs-network/spot-ui","react/jsx-runtime","react","zustand","zustand/vanilla"],a):(l=typeof globalThis<"u"?globalThis:l||self,a(l.SpotReact={},l.SpotUI,l.jsxRuntime,l.React,l.Zustand,l.ZustandVanilla))})(this,(function(l,a,L,m,Te,Re){"use strict";"use client";var Gt=Object.defineProperty;var Bt=(l,a,L)=>a in l?Gt(l,a,{enumerable:!0,configurable:!0,writable:!0,value:L}):l[a]=L;var ie=(l,a,L)=>Bt(l,typeof a!="symbol"?a+"":a,L);const be={version:"2.1.22"},oe=m.createContext(null),Le=({children:e,value:t})=>L.jsx(oe.Provider,{value:t,children:e}),p=()=>{const e=m.useContext(oe);if(e===null)throw new Error("useSpotTrading must be used within SpotProvider");return e};var G=(e=>(e[e.LOADING=1]="LOADING",e[e.SUCCESS=2]="SUCCESS",e[e.FAILED=3]="FAILED",e))(G||{}),d=(e=>(e.IDLE="idle",e.PREPARING="preparing",e.WRAPPING="wrapping",e.APPROVING="approving",e.SIGNING="signing",e.SUBMITTING="submitting",e.SETTLING="settling",e.UNCONFIRMED="unconfirmed",e.SUCCESS="success",e.FAILED="failed",e.REJECTED="rejected",e))(d||{}),J=(e=>(e.TRIGGER_MARKET_PRICE="triggerMarketPriceDisclaimer",e.MARKET_PRICE="marketOrderDisclaimer",e.LIMIT_PRICE="limitOrderDisclaimer",e))(J||{}),U=(e=>(e.WRAP="wrap",e.APPROVE="approve",e.CREATE="create",e))(U||{});const ee=e=>{if(e instanceof Error)return e.message;if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){const t=Reflect.get(e,"message");if(typeof t=="string")return t}return"Unknown error"},se=e=>{if(typeof e!="object"||e===null)return 0;const t=Reflect.get(e,"code");if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()){if(/^-?\d+$/.test(t)){const n=Number(t);return Number.isFinite(n)?n:0}return t}return 0},ae=e=>{if(typeof e!="object"||e===null)return{};const t={code:se(e)},n=Reflect.get(e,"reason");(n==="cancelled"||n==="expired"||n==="unconfirmed"||n==="aborted")&&(t.reason=n);const r=Reflect.get(e,"orderId");typeof r=="string"&&(t.orderId=r);const i=Reflect.get(e,"status");typeof i=="number"&&Number.isFinite(i)&&(t.status=i);const o=Reflect.get(e,"serviceCode");return(typeof o=="string"||typeof o=="number"&&Number.isFinite(o))&&(t.serviceCode=o),t},k=e=>e instanceof Error?e:Object.assign(new Error(ee(e)),ae(e),{cause:e}),Y=e=>{const t=ee(e),n=t.match(/,\s*code\s*:\s*(-?\d+)/i),r=n?Number(n[1]):0,i=t.replace(/^error\s*:/i,"").replace(/,\s*code\s*:\s*-?\d+/i,"").trim();return{...ae(e),message:i||"Unknown error",code:se(e)||(Number.isFinite(r)?r:0)}},Ne=new Set([d.PREPARING,d.WRAPPING,d.APPROVING,d.SIGNING,d.SUBMITTING,d.SETTLING]),pe={[d.IDLE]:new Set,[d.PREPARING]:new Set([d.PREPARING,d.WRAPPING,d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.WRAPPING]:new Set([d.WRAPPING,d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.APPROVING]:new Set([d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.SIGNING]:new Set([d.SIGNING,d.SUBMITTING,d.FAILED,d.REJECTED]),[d.SUBMITTING]:new Set([d.SETTLING,d.SUCCESS,d.FAILED,d.REJECTED,d.UNCONFIRMED]),[d.SETTLING]:new Set([d.SETTLING,d.SUCCESS,d.FAILED,d.UNCONFIRMED]),[d.UNCONFIRMED]:new Set([d.SETTLING,d.SUCCESS,d.FAILED]),[d.SUCCESS]:new Set,[d.FAILED]:new Set,[d.REJECTED]:new Set},Z=e=>({phase:d.IDLE,completedWrap:e}),X=e=>Ne.has(e),$=e=>X(e)||e===d.UNCONFIRMED,ue=e=>e===d.IDLE||e===d.FAILED||e===d.REJECTED,ce=(e,t)=>t===d.SETTLING?!(e instanceof a.OrderSettlementError&&(e.reason==="cancelled"||e.reason==="expired")):!(t!==d.SUBMITTING||e instanceof a.SpotError&&e.code==="SUBMISSION_FAILED"&&e.status!==void 0&&e.status<500&&e.status!==408&&!e.cause),Fe=(e,t)=>pe[e].has(t),Me=e=>{if(X(e))return G.LOADING;if(e===d.SUCCESS)return G.SUCCESS;if(e===d.FAILED||e===d.REJECTED||e===d.UNCONFIRMED)return G.FAILED},De=e=>{if(e===d.WRAPPING)return U.WRAP;if(e===d.APPROVING)return U.APPROVE;if(e===d.SIGNING||e===d.SUBMITTING)return U.CREATE},A=e=>{if(e)try{const t=e();Promise.resolve(t).catch(()=>{})}catch{}},xe=({execution:e,account:t,chainId:n,inputTokenAddress:r,inputAmountRaw:i})=>{const o=e.completedWrap;if((o==null?void 0:o.account.toLowerCase())===t.toLowerCase()&&o.chainId===n&&o.inputTokenAddress.toLowerCase()===r.toLowerCase()&&je(o.inputAmountRaw,i))return o},je=(e,t)=>{try{return BigInt(e)>=BigInt(t)}catch{return!1}},Ge=2e4,de=new WeakMap,le=e=>{const t=de.get(e);if(t)return t;const n={all:[...e].sort((r,i)=>i.createdAt-r.createdAt),open:[],completed:[],cancelled:[],expired:[]};for(const r of n.all)switch(r.status){case a.OrderStatus.Open:n.open.push(r);break;case a.OrderStatus.Completed:n.completed.push(r);break;case a.OrderStatus.Cancelled:n.cancelled.push(r);break;case a.OrderStatus.Expired:n.expired.push(r);break}return de.set(e,n),n},Be=(e,t)=>{const n=new Set(e.map(i=>i.historyKey)),r=(t==null?void 0:t.filter(i=>i.version===1&&!n.has(i.historyKey)))??[];return[...e,...r]},_e=(e,t)=>{if(!e)return t;const n=new Map(e.map(o=>[o.historyKey,o])),r=new Set(t.map(o=>o.historyKey));return[...t.map(o=>{const s=n.get(o.historyKey);return s&&(s.status===a.OrderStatus.Completed&&o.status!==a.OrderStatus.Completed||s.status!==a.OrderStatus.Open&&o.status===a.OrderStatus.Open)?s:o}),...e.filter(o=>!r.has(o.historyKey))]},Ke=(e,t,n,r,i)=>{const o=r??new Set,s=O=>o.has(O.historyKey)?!1:(o.add(O.historyKey),A(()=>{var E;return(E=n==null?void 0:n.onOrderFilled)==null?void 0:E.call(n,O)}),!0),c=new Map(t.map(O=>[O.historyKey,O])),u=[];for(const O of e??[]){if(O.version!==2)continue;const E=c.get(O.historyKey);!E||E.progress===O.progress&&E.status===O.status||(u.push(E),E.status===a.OrderStatus.Completed&&O.status!==a.OrderStatus.Completed&&s(E))}(i==null?void 0:i.status)===a.OrderStatus.Completed&&s(i)&&!u.some(O=>O.historyKey===i.historyKey)&&u.push(i);for(const O of t)O.status===a.OrderStatus.Completed&&o.add(O.historyKey);u.length>0&&A(()=>{var O;return(O=n==null?void 0:n.onOrdersProgressUpdate)==null?void 0:O.call(n,u)})},me=e=>{if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},te=(e,t)=>{if(Object.is(e,t))return e;if(Array.isArray(e)&&Array.isArray(t)){const n=t.map((i,o)=>te(e[o],i));return e.length===n.length&&n.every((i,o)=>i===e[o])?e:n}if(me(e)&&me(t)){const n=Object.keys(e),r=Object.keys(t),i={};let o=n.length===r.length;for(const s of r){Object.prototype.hasOwnProperty.call(e,s)||(o=!1);const c=te(e[s],t[s]);i[s]=c,c!==e[s]&&(o=!1)}return o?e:i}return t},qe=(e,t)=>e?te(e,t):t,He=async({client:e,account:t,signal:n,supportLegacyOrders:r,previousOrders:i,legacyLoaded:o})=>{const s=await e.getAccountOrdersResult({signal:n,account:t,legacyOrders:r&&!o});if(n.aborted)throw n.reason;return{orders:r&&!s.legacyLoaded?Be(s.orders,i):s.orders,legacyLoaded:o||s.legacyLoaded}},re=e=>({tradeCount:e.tradeCount,tradeInterval:e.tradeInterval,orderDuration:e.orderDuration,limitPriceUi:e.limitPriceUi,triggerPriceUi:e.triggerPriceUi,triggerPricePercent:e.triggerPricePercent,limitPricePercent:e.limitPricePercent,isMarketOrder:e.isMarketOrder,isPriceInverted:void 0}),We=e=>({...re(e),cancelOrders:{},currentExecution:Z()}),fe={isFetching:!1},ge={isFetching:!1},Ve=e=>new Promise(t=>setTimeout(t,e)),Qe=e=>{let t=0,n,r,i=0,o,s,c,u;const O=new Set;let E=!1,f=0,I=0,h,w,v;return Re.createStore((C,N)=>{const V=(P,g=u,y=N().orders.isFetching,F)=>{const T=s,R=N().orders.data,S=qe(R,_e(R,P));return C(M=>({orders:{...M.orders,data:S,isFetching:y}})),s===T&&Ke(R,S,g,O,F),S},Q=async()=>{if(!n||!r)return;if(o)return o;const P=++i,g=r;C(F=>({client:{key:n,data:F.client.data,error:void 0,isFetching:!0}}));const y=(async()=>{let F;for(let T=0;T<3;T++){if(P!==i)return;try{const R=await g();return P!==i?void 0:(C({client:{key:n,data:R,isFetching:!1}}),R)}catch(R){if(F=R instanceof Error?R:new Error(String(R)),P!==i)return;T<2&&await Ve(2**T*1e3)}}P===i&&C({client:{key:n,error:F,isFetching:!1}})})();return o=y,y.finally(()=>{o===y&&(o=void 0)}),y},D=async(P=!1,g=!1)=>{if(!P&&f===0||!s||!c)return N().orders.data;if(h){if(!g)return h;const M=s;return await h,s!==M?void 0:D(P,g)}const y=++I,F=c,T=N().orders.data,R=new AbortController;w=R,C(M=>({orders:{key:s,data:M.orders.data,error:void 0,isFetching:!0}}));const S=F(T,g?!1:E,R.signal).then(({orders:M,legacyLoaded:W})=>{if(y===I)return E=W,V(M,u,!1)}).catch(M=>{if(y!==I||R.signal.aborted)return;const W=M instanceof Error?M:new Error(String(M));C(x=>({orders:{key:s,data:x.orders.data,error:W,isFetching:!1}}))});return h=S,S.finally(()=>{h===S&&(h=void 0),w===R&&(w=void 0)}),S},_=()=>{D()},j=()=>{v&&(clearInterval(v),v=void 0),typeof window<"u"&&window.removeEventListener("focus",_),w==null||w.abort(),w=void 0,h=void 0,I++,C(P=>({orders:{...P.orders,isFetching:!1}}))},H=()=>{!s||!c||v||(D(!0),v=setInterval(()=>{D()},Ge),typeof window<"u"&&window.addEventListener("focus",_))};return{client:fe,orders:ge,state:We(e),configureClient:(P,g)=>{if(n===P){r=g;return}n=P,r=g,i++,o=void 0,C({client:P?{key:P,isFetching:!1}:fe}),P&&g&&Q()},refetchClient:Q,configureOrders:(P,g,y)=>{if(u=y,s===P){c=g;return}j(),s=P,c=g,E=!1,O.clear(),C({orders:P?{key:P,isFetching:!1}:ge}),f>0&&H()},registerOrdersConsumer:()=>(f++,f===1&&H(),()=>{f=Math.max(0,f-1),f===0&&j()}),refetchOrders:D,addOrder:P=>{C(g=>{const y=g.orders.data;return y!=null&&y.some(F=>F.historyKey===P.historyKey)?g:{orders:{...g.orders,data:[P,...y??[]]}}})},updateOrder:(P,g)=>{const y=N().orders.data??[],F=y.some(T=>T.historyKey===P.historyKey);V(F?y.map(T=>T.historyKey===P.historyKey?P:T):[P,...y],u??g,N().orders.isFetching,P)},setCancelOrder:(P,g)=>{C(y=>({state:{...y.state,cancelOrders:{...y.state.cancelOrders,[P]:g}}}))},clearCancelOrder:P=>{C(g=>{if(!(P in g.state.cancelOrders))return g;const y={...g.state.cancelOrders};return delete y[P],{state:{...g.state,cancelOrders:y}}})},updateState:P=>C(g=>({state:{...g.state,...P}})),beginExecution:P=>{let g;return C(y=>ue(y.state.currentExecution.phase)?(g={...P,executionId:++t,phase:d.PREPARING},{state:{...y.state,currentExecution:g}}):y),g},replaceExecution:(P,g)=>{let y=!1;return C(F=>{const T=F.state.currentExecution;return T.executionId!==P||g.executionId!==P||!Fe(T.phase,g.phase)?F:(y=!0,{state:{...F.state,currentExecution:g}})}),y},returnToOrderForm:P=>{const g=N().state.currentExecution;return g.executionId!==P||$(g.phase)||g.phase===d.SUCCESS?!1:(C(y=>({state:{...y.state,currentExecution:Z(g.completedWrap)}})),!0)},syncFormDefaults:P=>$(N().state.currentExecution.phase)?!1:(C(g=>({state:{...g.state,...re(P),currentExecution:Z()}})),!0),startNewOrder:(P,g)=>{const{state:y}=N();return y.currentExecution.executionId!==g||$(y.currentExecution.phase)?!1:(C(F=>({state:{...F.state,...re(P),isMarketOrder:y.isMarketOrder,currentExecution:Z()}})),!0)}}})},Oe=e=>{var n;const t=(n=e.overrides)==null?void 0:n.state;return{isMarketOrder:e.module===a.Module.LIMIT||e.module===a.Module.SWAP?!1:t==null?void 0:t.isMarketOrder,tradeCount:t==null?void 0:t.tradeCount,tradeInterval:t==null?void 0:t.tradeInterval,orderDuration:t==null?void 0:t.orderDuration,limitPriceUi:t==null?void 0:t.limitPriceUi,triggerPriceUi:t==null?void 0:t.triggerPriceUi,triggerPricePercent:t==null?void 0:t.triggerPricePercent,limitPricePercent:t==null?void 0:t.limitPricePercent}},Se=m.createContext(null),ze=({children:e,initialState:t})=>{const[n]=m.useState(()=>Qe(t));return L.jsx(Se.Provider,{value:n,children:e})},K=()=>{const e=m.useContext(Se);if(e===null)throw new Error("useSpotStore must be used within SpotProvider");return e},b=e=>{const t=K();return Te.useStore(t,e)},Ue={isFetching:!1},Je=()=>{const{partner:e,chainId:t,hasChainId:n}=p(),r=K(),i=!!(t&&n),o=i?`${e}:${t}`:void 0,s=m.useCallback(()=>t?a.createClient(e,t):Promise.reject(new Error("Spot is unavailable on the connected chain")),[t,e]);m.useEffect(()=>{r.getState().configureClient(o,i?s:void 0)},[i,o,s,r])},z=()=>{const{partner:e,chainId:t,hasChainId:n}=p(),r=K(),i=b(O=>O.client),o=!!(t&&n),s=o?`${e}:${t}`:void 0,c=i.key===s?i:Ue,u=m.useCallback(()=>{if(!o||!s)return Promise.resolve(void 0);const O=r.getState();return O.client.key!==s?Promise.resolve(void 0):O.refetchClient()},[o,s,r]);return m.useMemo(()=>({data:c.data,error:c.error,isLoading:o&&!c.data&&c.error===void 0,isFetching:c.isFetching,refetch:u}),[c,o,u])},ke={isFetching:!1},ne=(e,t,n)=>e&&t?JSON.stringify([e,t.exchangeAddress,t.partner,t.chainId,n]):void 0,$e=()=>{const{account:e,supportLegacyOrders:t,callbacks:n}=p(),{data:r}=z(),i=K(),o=ne(e,r,t),s=!!o,c=m.useCallback(async(u,O,E)=>!e||!r?{orders:[],legacyLoaded:!1}:He({client:r,account:e,signal:E,supportLegacyOrders:t,previousOrders:u,legacyLoaded:O}),[e,r,t]);m.useEffect(()=>{i.getState().configureOrders(o,s?c:void 0,n)},[n,s,o,c,i])},he=()=>{const{account:e,supportLegacyOrders:t}=p(),{data:n}=z(),r=K(),i=ne(e,n,t),o=!!i,s=m.useCallback((c=!1)=>!o||!i||r.getState().orders.key!==i?Promise.resolve(void 0):r.getState().refetchOrders(!0,c),[o,i,r]);return{enabled:o,key:i,refetch:s}},Ye=()=>{const e=K(),{account:t,supportLegacyOrders:n}=p(),{data:r}=z(),i=ne(t,r,n);return m.useCallback(o=>{!i||e.getState().orders.key!==i||e.getState().addOrder(o)},[i,e])},Ze=()=>{const e=K();return m.useCallback(()=>e.getState().refetchOrders(),[e])},Xe=()=>{const e=b(u=>u.orders),t=b(u=>u.registerOrdersConsumer),{enabled:n,key:r,refetch:i}=he(),o=e.key===r?e:ke;m.useEffect(()=>t(),[t]);const s=m.useMemo(()=>o.data===void 0?void 0:le(o.data),[o.data]),c=m.useCallback(async()=>{const u=await i();return u===void 0?void 0:le(u)},[i]);return m.useMemo(()=>({data:s,error:o.error,isLoading:n&&s===void 0&&o.error===void 0,isFetching:o.isFetching,isRefetching:o.isFetching&&s!==void 0,refetch:c}),[o,s,n,c])},et=({children:e})=>(Je(),$e(),e),tt=({error:e,retry:t,isRetrying:n})=>L.jsxs("div",{className:"spot-client-error-fallback",role:"alert",children:[L.jsx("p",{children:e.message||"Unable to load Spot configuration."}),L.jsx("button",{type:"button",className:"spot-client-error-retry",disabled:n,onClick:t,children:n?"Retrying…":"Retry"})]}),rt=({children:e,fallback:t=tt})=>{const{hasChainId:n}=p(),{data:r,error:i,isFetching:o,refetch:s}=z(),c=m.useCallback(async()=>{await s()},[s]);return L.jsxs(L.Fragment,{children:[e,!r&&i&&n?L.jsx(t,{error:i,retry:c,isRetrying:o}):null]})},nt=({resetErrorBoundary:e})=>L.jsxs("div",{className:"twap-error-fallback",role:"alert",children:[L.jsx("p",{children:"Something went wrong"}),L.jsx("button",{type:"button",onClick:e,children:"Retry"})]}),it=({children:e,fallback:t=nt})=>{const n=K(),r=m.useCallback(i=>{var s;(((s=n.getState().client.data)==null?void 0:s.analytics)??a.analytics).onCrash(i)},[n]);return L.jsx(ot,{fallback:t,reportCrash:r,children:e})};class ot extends m.Component{constructor(){super(...arguments);ie(this,"state",{});ie(this,"resetErrorBoundary",()=>{this.setState({error:void 0})})}static getDerivedStateFromError(n){return{error:n}}componentDidCatch(n){this.props.reportCrash(n)}render(){const{error:n}=this.state;if(n){const r=this.props.fallback;return L.jsx(r,{error:n,resetErrorBoundary:this.resetErrorBoundary})}return this.props.children}}const st=({children:e,defaults:t,scopeKey:n})=>{const r=K(),i=b(s=>s.state.currentExecution.phase),o=m.useRef(n);return m.useEffect(()=>{o.current===n||$(i)||r.getState().syncFormDefaults(t)&&(o.current=n)},[t,i,n,r]),e},Pe=m.createContext(null),at=({children:e})=>{const{inputToken:t,outputToken:n,inputAmountUi:r,quotedOutputAmountRaw:i,minimumOutputAmountRaw:o,inputTokenUsdPrice:s,outputTokenUsdPrice:c,minTradeSizeUsd:u,inputBalanceRaw:O,displayFeePercent:E,priceProtectionPercent:f,module:I}=p(),h=b(g=>g.state.tradeCount),w=b(g=>g.state.tradeInterval),v=b(g=>g.state.orderDuration),C=b(g=>g.state.limitPriceUi),N=b(g=>g.state.triggerPriceUi),V=b(g=>g.state.limitPricePercent),Q=b(g=>g.state.triggerPricePercent),D=b(g=>g.state.isPriceInverted),_=b(g=>g.state.isMarketOrder),j=b(g=>{const y=g.state.currentExecution;return y.phase!==d.IDLE?y.form:void 0}),H=m.useMemo(()=>({module:I,inputTokenDecimals:(t==null?void 0:t.decimals)??0,outputTokenDecimals:(n==null?void 0:n.decimals)??0,quotedOutputAmountRaw:i,minimumOutputAmountRaw:o,inputTokenUsdPrice:s,outputTokenUsdPrice:c,minTradeSizeUsd:u,priceProtectionPercent:f,displayFeePercent:E,inputBalanceRaw:O,userInput:{inputAmountUi:r,isMarketOrder:!!_,tradeCount:h,tradeInterval:w,orderDuration:v,limitPriceUi:C,limitPricePercent:V,triggerPriceUi:N,triggerPricePercent:Q,isPriceInverted:D}}),[o,n==null?void 0:n.decimals,c,E,i,u,I,f,O,t==null?void 0:t.decimals,s,D,_,V,Q,h,v,w,C,r,N]),P=m.useMemo(()=>{if(j)return j;const g=a.calculateOrder(H);return t&&n?g:{...g,isReady:!1,canSubmit:!1}},[j,t,n,H]);return L.jsx(Pe.Provider,{value:P,children:e})},B=()=>{const e=m.useContext(Pe);if(!e)throw new Error("useOrderForm must be used within OrderFormProvider");return e},ut=e=>{var E,f,I,h,w,v,C,N,V,Q,D,_;const t=Number.isSafeInteger(e.chainId)&&Number(e.chainId)>0,n=(E=e.wrappedNativeToken)==null?void 0:E.address,r=!!(n&&(a.isNativeAddress((f=e.inputToken)==null?void 0:f.address)&&a.eqIgnoreCase(((I=e.outputToken)==null?void 0:I.address)||"",n)||a.eqIgnoreCase(((h=e.inputToken)==null?void 0:h.address)||"",n)&&a.isNativeAddress((w=e.outputToken)==null?void 0:w.address))),i=r?a.toAmountRaw(e.inputAmountUi,(v=e.outputToken)==null?void 0:v.decimals):e.marketQuote.isLoading?void 0:e.marketQuote.quotedOutputAmountRaw,o=r?!1:e.marketQuote.isLoading,s=r?!1:e.marketQuote.noLiquidity,c=m.useMemo(()=>Oe({module:e.module,overrides:e.overrides}),[e.module,e.overrides]),u=JSON.stringify([e.partner,e.chainId,e.module,(C=e.inputToken)==null?void 0:C.address,(N=e.inputToken)==null?void 0:N.decimals,(V=e.outputToken)==null?void 0:V.address,(Q=e.outputToken)==null?void 0:Q.decimals,(D=e.wrappedNativeToken)==null?void 0:D.address,(_=e.wrappedNativeToken)==null?void 0:_.decimals,c]),O=m.useMemo(()=>({inputAmountUi:e.inputAmountUi,minTradeSizeUsd:e.minTradeSizeUsd,account:e.account,walletInteractions:e.walletInteractions,quotedOutputAmountRaw:i,minimumOutputAmountRaw:e.marketQuote.isLoading?void 0:e.marketQuote.minimumOutputAmountRaw,marketPriceLoading:o,noLiquidity:s,priceProtectionPercent:e.priceProtectionPercent,chainId:e.chainId,hasChainId:t,partner:e.partner,module:e.module,displayFeePercent:e.displayFeePercent??0,callbacks:e.callbacks,inputTokenUsdPrice:e.inputTokenUsdPrice,outputTokenUsdPrice:e.outputTokenUsdPrice,inputBalanceRaw:e.inputBalanceRaw,inputToken:e.inputToken,outputToken:e.outputToken,wrappedNativeToken:e.wrappedNativeToken,supportLegacyOrders:e.supportLegacyOrders??!1,overrides:e.overrides}),[e.marketQuote.isLoading,e.marketQuote.minimumOutputAmountRaw,e.account,e.callbacks,e.chainId,e.displayFeePercent,e.inputBalanceRaw,e.inputToken,e.inputTokenUsdPrice,e.minTradeSizeUsd,e.module,e.outputToken,e.outputTokenUsdPrice,e.wrappedNativeToken,e.overrides,e.partner,e.priceProtectionPercent,e.supportLegacyOrders,e.inputAmountUi,e.walletInteractions,t,o,s,i]);return{initialState:c,formScopeKey:u,trading:O}},ct=e=>{const{initialState:t,formScopeKey:n,trading:r}=ut(e);return L.jsx(Le,{value:r,children:L.jsx(ze,{initialState:t,children:L.jsx(it,{fallback:e.errorFallback,children:L.jsx(et,{children:L.jsx(st,{defaults:t,scopeKey:n,children:L.jsx(rt,{fallback:e.clientErrorFallback,children:L.jsx(at,{children:e.children})})})})})})})},dt=(e,t)=>m.useMemo(()=>a.toAmountUI(t,e),[e,t]),lt=60,mt=()=>{const{refetch:e}=he();return m.useCallback(async(t,n=!1)=>{for(let r=0;r<lt;r++){const i=await e(n);if(!i)throw new Error("orders not found");const o=i.find(s=>s.historyKey===t);if((o==null?void 0:o.status)===a.OrderStatus.Cancelled)return;await new Promise(s=>setTimeout(s,1e3))}throw new Error("Timed out waiting for order cancellation to be confirmed")},[e])},ft=e=>({...e,status:a.OrderStatus.Cancelled}),gt=e=>{const{account:t,walletInteractions:n,callbacks:r}=p(),{data:i}=z(),o=mt(),s=b(f=>f.state.cancelOrders[(e==null?void 0:e.historyKey)??""]),c=b(f=>f.setCancelOrder),u=b(f=>f.clearCancelOrder),O=m.useCallback(async()=>{const f=e==null?void 0:e.historyKey;try{if(!t)throw new Error("missing account");if(!e)throw new Error("order is required");if(!i)throw new Error("Spot client is unavailable");const I=e.historyKey;c(I,{status:G.LOADING}),A(()=>{var C;return(C=r==null?void 0:r.onCancelOrderRequest)==null?void 0:C.call(r,e)}),A(()=>i.analytics.onCancelOrderRequest([e.version===1?e.id.toString():e.hash],e.version));const h=i.getCancelOrderRequest(e),w=await n.cancelOrder(h);if(!w)throw new Error("failed to cancel order");A(()=>i.analytics.onCancelOrderSuccess(w)),c(I,{status:G.LOADING,txHash:w}),await o(I,e.version===1);const v=ft(e);return c(I,{status:G.SUCCESS,txHash:w}),A(()=>{var C;return(C=r==null?void 0:r.onCancelOrderSuccess)==null?void 0:C.call(r,{order:v,txHash:w})}),w}catch(I){a.isTxRejected(I)?f&&u(f):(f&&c(f,{status:G.FAILED,error:ee(I)}),A(()=>i==null?void 0:i.analytics.onCancelOrderError(I))),A(()=>{var h;return(h=r==null?void 0:r.onCancelOrderFailed)==null?void 0:h.call(r,k(I))})}},[t,r,u,i,e,o,c,n]),E=m.useMemo(()=>{const f=s;return{isLoading:(f==null?void 0:f.status)===G.LOADING,disabled:!!(e&&!i),isSuccess:(f==null?void 0:f.status)===G.SUCCESS,isError:(f==null?void 0:f.status)===G.FAILED,error:f==null?void 0:f.error,txHash:f==null?void 0:f.txHash}},[s,e,i]);return m.useMemo(()=>({cancelOrder:O,...E}),[O,E])},Ot=()=>{const{module:e,values:t}=B();if(t.isMarketOrder&&e===a.Module.STOP_LOSS)return J.TRIGGER_MARKET_PRICE;if(e===a.Module.LIMIT||e===a.Module.TWAP)return t.isMarketOrder?J.MARKET_PRICE:J.LIMIT_PRICE},St=()=>{const{callbacks:e}=p(),t=b(c=>c.updateState),{schedule:n}=B(),{duration:r}=n,i=m.useCallback(c=>{t({orderDuration:c}),A(()=>{var u;return(u=e==null?void 0:e.onOrderDurationChange)==null?void 0:u.call(e,c)})},[e,t]),o=m.useCallback(c=>{const u=Number(c);Number.isFinite(u)&&i({unit:r.unit,value:u})},[r.unit,i]),s=m.useCallback(c=>{i({unit:c,value:r.value})},[r.value,i]);return m.useMemo(()=>({duration:r,onChange:i,milliseconds:n.durationMillis,onInputChange:o,onUnitSelect:s,error:n.durationError}),[r,i,o,s,n])},ht=()=>{const{callbacks:e}=p(),t=b(c=>c.updateState),{schedule:n}=B(),{fillDelay:r}=n,i=m.useCallback(c=>{t({tradeInterval:c}),A(()=>{var u;return(u=e==null?void 0:e.onTradeIntervalChange)==null?void 0:u.call(e,c)})},[e,t]),o=m.useCallback(c=>{const u=Number(c);Number.isFinite(u)&&i({unit:r.unit,value:u})},[r.unit,i]),s=m.useCallback(c=>i({unit:c,value:r.value}),[r.value,i]);return m.useMemo(()=>({onInputChange:o,onUnitSelect:s,onChange:i,milliseconds:n.fillDelayMillis,fillDelay:r,error:n.fillDelayError}),[r,i,o,s,n])},q=(e,t)=>({raw:e||"",ui:a.toAmountUI(e,t)}),Pt=(e,t,n)=>m.useMemo(()=>!e||!t||!n?[]:e.map(r=>({rawFill:r,inputToken:t,outputToken:n,inputAmount:q(r.inAmount,t.decimals),outputAmount:q(r.outAmount,n.decimals),timestamp:r.timestamp,txHash:r.txHash,executionRate:a.getOrderExecutionRate(r.inAmount,r.outAmount,t.decimals,n.decimals)})),[e,t,n]),Et=(e,t,n)=>{const{chainId:r,partner:i}=p(),o=m.useMemo(()=>{if(!(!t||!n||!e||e.isMarketPrice))return a.getOrderLimitPriceRate(e,t.decimals,n.decimals)},[t,e,n]),s=m.useMemo(()=>{if(!(!t||!n||!e))return a.getTriggerPriceRate(e,t.decimals,n.decimals)},[t,e,n]),c=m.useMemo(()=>{if(!(!t||!n||!e))return a.getOrderExecutionRate(e.srcAmountFilled,e.dstAmountFilled,t.decimals,n.decimals)},[t,e,n]),u=m.useMemo(()=>e?a.getOrderFillDelayMillis(e,r?a.getTwapConfig(i,r):void 0):0,[e,i,r]),O=Pt(e==null?void 0:e.fills,t,n);return m.useMemo(()=>{if(e!=null&&e.id)return{original:e,fills:O,inputToken:t,outputToken:n,orderType:e.type,createdAt:e.createdAt,deadline:e.deadline||0,totalTrades:e.totalTradesAmount||0,tradeInterval:u,recipient:e.maker||"",inputAmount:q(e.srcAmount,t==null?void 0:t.decimals),limitPrice:q(a.toAmountRaw(o,n==null?void 0:n.decimals),n==null?void 0:n.decimals),inputAmountPerTrade:q(e.srcAmountPerTrade,t==null?void 0:t.decimals),minOutputAmountPerTrade:q(e.dstMinAmountPerTrade,n==null?void 0:n.decimals),minOutputAmount:q(e.dstMinAmountTotal,n==null?void 0:n.decimals),triggerPrice:q(a.toAmountRaw(s,n==null?void 0:n.decimals),n==null?void 0:n.decimals),id:e.id,inputAmountFilled:q(e.srcAmountFilled,t==null?void 0:t.decimals),outputAmountFilled:q(e.dstAmountFilled,n==null?void 0:n.decimals),progress:e.progress,executionPrice:q(a.toAmountRaw(c,n==null?void 0:n.decimals),n==null?void 0:n.decimals),version:e.version}},[e,O,t,n,u,o,s,c])},It=()=>{const{marketPriceLoading:e}=p(),t=B().errors.primary;return e?void 0:t},yt=()=>{const{marketPriceLoading:e,inputToken:t,outputToken:n,callbacks:r}=p(),{limitPrice:i,values:o,module:s,isInverted:c}=B(),u=b(w=>w.updateState),O=m.useCallback(w=>{u({limitPriceUi:w,limitPricePercent:null}),A(()=>{var v;return(v=r==null?void 0:r.onLimitPriceChange)==null?void 0:v.call(r,w||"")}),A(()=>{var v;return(v=r==null?void 0:r.onLimitPricePercentChange)==null?void 0:v.call(r,"")})},[r,u]),E=m.useCallback(w=>{u({limitPriceUi:void 0,limitPricePercent:w}),A(()=>{var v;return(v=r==null?void 0:r.onLimitPriceChange)==null?void 0:v.call(r,"")}),A(()=>{var v;return(v=r==null?void 0:r.onLimitPricePercentChange)==null?void 0:v.call(r,w||"")})},[r,u]),f=m.useCallback(()=>{u({limitPriceUi:void 0,limitPricePercent:void 0})},[u]),I=!o.isMarketOrder,h=m.useCallback(()=>{u({isMarketOrder:!o.isMarketOrder,...o.isMarketOrder?{}:{isPriceInverted:!1},...!o.isMarketOrder&&s===a.Module.STOP_LOSS?{limitPricePercent:void 0}:{}})},[s,u,o.isMarketOrder]);return m.useMemo(()=>({price:i.display,canonicalPriceRaw:i.raw,error:i.error,onInputChange:O,onPercentageChange:E,onReset:f,inputToken:t,outputToken:n,displayInputToken:c?n:t,displayOutputToken:c?t:n,percentage:i.percentage,isLoading:!!e,isEnabled:I,toggle:h,isTypedValue:i.isTypedValue}),[t,c,I,i,e,O,E,f,n,h])},Ct=()=>{const{marketPriceLoading:e}=p(),{outputAmount:t}=B();return m.useMemo(()=>({amount:t,isLoading:!!e}),[e,t])},wt=()=>{const{inputToken:e,outputToken:t}=p(),n=b(u=>u.updateState),{isInverted:r,values:i}=B(),o=b(u=>u.state.triggerPriceUi),s=b(u=>u.state.limitPriceUi),c=m.useCallback(()=>{n({isPriceInverted:!r,...o!==void 0?{triggerPriceUi:a.invertPriceInput(o)}:{},...s!==void 0?{limitPriceUi:a.invertPriceInput(s)}:{}})},[n,r,o,s]);return m.useMemo(()=>({onInvert:c,isInverted:r,inputToken:e,outputToken:t,displayInputToken:r?t:e,displayOutputToken:r?e:t,isMarketOrder:i.isMarketOrder}),[e,r,c,t,i.isMarketOrder])},Ee=(e,t,n)=>{if(!e||typeof t.maker!="string"||!n||!t.rawOrder||!("order"in t.rawOrder))return!1;const r=t.rawOrder.order.witness.exchange.adapter;let i;try{i=JSON.parse(e)}catch{return!1}return Array.isArray(i)&&typeof i[0]=="string"&&typeof i[1]=="string"&&i[0].toLowerCase()===t.maker.toLowerCase()&&i[1].toLowerCase()===r.toLowerCase()&&i[2]===n&&i[3]===t.chainId},Ie=(e,t)=>{const n=e.getState(),r=n.orders.key;return Ee(r,t,n.state.currentExecution.partner)?(n.addOrder(t),e.getState().orders.key===r):!1},ye=async({store:e,callbacks:t,order:n,executionId:r,signal:i})=>{const o=new AbortController,s=()=>{(i.aborted||e.getState().state.currentExecution.executionId!==r)&&o.abort()};i.addEventListener("abort",s,{once:!0});const c=e.subscribe(s);s();try{let u=n;o.signal.aborted||A(()=>Ie(e,n));for await(const O of a.watchOrder({order:n,signal:o.signal}))o.signal.aborted||(A(()=>{const E=e.getState();Ee(E.orders.key,n,E.state.currentExecution.partner)&&E.updateOrder(O,t)}),u=O);return u}finally{c(),i.removeEventListener("abort",s),o.abort()}},vt=e=>new Promise(t=>setTimeout(t,e)),Ce=(e,t)=>{if(!/^\d+$/.test(e))throw new Error(`${t} must be a non-negative integer base-unit amount`);return BigInt(e)},At=e=>{if(!e.client)throw new Error("Spot client is unavailable");if(!e.chainId||!Number.isSafeInteger(e.chainId)||e.chainId<=0)throw new Error("Spot is unavailable on the connected chain");if(!e.account)throw new Error("missing account");if(!e.inputToken)throw new Error("missing inputToken");if(!e.outputToken)throw new Error("missing outputToken");const t=a.isNativeAddress(e.inputToken.address)?e.wrappedNativeToken:e.inputToken;if(!t||a.isNativeAddress(t.address))throw new Error("missing wrappedNativeToken for native input");if(!e.form.canSubmit)throw new Error("Order form is not submittable");if(e.form.module===a.Module.SWAP&&!e.waitForOrderFill)throw new Error("Swap settlement tracking is unavailable");const n=e.form.inputAmount.raw;return Ce(n,"Input amount"),{account:e.account,chainId:e.chainId,inputToken:e.inputToken,orderInputToken:t,outputToken:e.outputToken,client:e.client,inputAmountRaw:n}},Tt=({analytics:e,account:t,chainId:n,inputToken:r,outputToken:i,preparedOrder:o})=>{const{form:s,values:c}=o;A(()=>e.onRequestOrder({account:t,chainId:n,module:s.module,srcToken:r,dstToken:i,fromTokenAmount:c.inputAmount,srcChunkAmount:c.inputAmountPerTrade,triggerPricePerTrade:c.triggerOutputAmountPerTrade,deadline:c.deadlineMillis,fillDelay:c.fillDelayMillis,minDstAmountOutPerTrade:c.minOutputAmountPerTrade,slippage:s.values.slippageBps/100,isMarketOrder:c.isMarketOrder,chunksAmount:c.totalTrades}))},Rt=async e=>{var y,F;const{form:t,walletInteractions:n,callbacks:r,addNewOrder:i,refetchActiveOrders:o,getCurrentExecution:s,beginExecution:c,replaceExecution:u,wait:O=vt}=e;let E;try{E=At(e)}catch(T){const R=k(T),S=Y(T),M=c({account:e.account,partner:(y=e.client)==null?void 0:y.partner,form:t,inputToken:e.inputToken,outputToken:e.outputToken,chainId:e.chainId});throw M&&u(M.executionId,{...M,phase:d.FAILED,error:R,parsedError:S}),A(()=>{var W;return(W=r==null?void 0:r.onSubmitOrderFailed)==null?void 0:W.call(r,S)}),R}const{account:f,chainId:I,inputToken:h,orderInputToken:w,outputToken:v,client:C,inputAmountRaw:N}=E,{analytics:V}=C,Q=s(),D=xe({execution:Q,account:f,chainId:I,inputTokenAddress:h.address,inputAmountRaw:N}),_=c({account:f,partner:C.partner,form:t,inputToken:h,outputToken:v,chainId:I,completedWrap:D,wrapTxHash:D==null?void 0:D.txHash});if(!_)return;const j=_.executionId;let H=_;const P=(T,R={})=>{const S={...H,...R,executionId:j,phase:T};if(!u(j,S))throw new Error("Execution is no longer current");H=S},g=(T,R={})=>{const S={...H,...R,executionId:j,phase:T};return u(j,S)?(H=S,!0):!1};try{const{order:T}=await a.executeOrder({client:C,account:f,inputTokenAddress:w.address,inputAmountRaw:N,nativeInput:a.isNativeAddress(h.address),completedWrapTxHash:D==null?void 0:D.txHash,walletInteractions:n,wait:O,signal:e.signal,prepareOrder:async()=>{var S;if(t.module===a.Module.SWAP){const M=await C.getQuote({inToken:w.address,outToken:v.address,inAmount:N,user:f,slippage:0,dexMinAmountOut:"-1",signal:e.signal});if((S=e.signal)==null||S.throwIfAborted(),BigInt(M.netAmountOut)<Ce(t.values.minOutputAmountPerTrade,"Minimum output"))throw new a.SpotError("INVALID_QUOTE","Swap price changed. Review a fresh quote before signing.")}return C.prepareOrder({form:t,inputTokenAddress:w.address,outputTokenAddress:v.address,swapperAddress:f})},validateContext:()=>{if(s().executionId!==j)throw new Error("Execution is no longer current")},onUpdate:S=>{const M=S.steps.map(x=>({wrap:U.WRAP,approve:U.APPROVE,create:U.CREATE})[x]),W=S.phase;P(W,{pendingSteps:M,totalSteps:M.length,stepIndex:S.stepIndex,hasApproval:S.hasApproval,wrapTxHash:S.wrapTxHash,approveTxHash:S.approvalTxHash,...S.preparedOrder?{preparedOrder:S.preparedOrder}:{},...S.phase==="wrapping"&&S.event==="success"&&S.wrapTxHash?{completedWrap:{account:f,chainId:I,inputTokenAddress:h.address,inputAmountRaw:N,txHash:S.wrapTxHash}}:{}}),S.phase==="wrapping"&&(S.event==="request"&&A(r==null?void 0:r.onWrapRequest),S.event==="success"&&S.wrapTxHash&&A(()=>{var x;return(x=r==null?void 0:r.onWrapSuccess)==null?void 0:x.call(r,{txHash:S.wrapTxHash,amount:a.toAmountUI(S.wrapAmountRaw??N,w.decimals)})})),S.phase==="approving"&&(S.event==="request"&&A(r==null?void 0:r.onApproveRequest),S.event==="success"&&S.approvalTxHash&&A(()=>{var x;return(x=r==null?void 0:r.onApproveSuccess)==null?void 0:x.call(r,{txHash:S.approvalTxHash,token:w,amount:a.toAmountUI(N,w.decimals)})})),S.phase==="signing"&&(S.event==="prepared"&&S.preparedOrder&&(Tt({analytics:V,account:f,chainId:I,inputToken:h,outputToken:v,preparedOrder:S.preparedOrder}),A(r==null?void 0:r.onSignOrderRequest)),S.event==="success"&&S.signature&&A(()=>{var x;return(x=r==null?void 0:r.onSignOrderSuccess)==null?void 0:x.call(r,S.signature)}),S.event==="error"&&A(()=>{var x;return(x=r==null?void 0:r.onSignOrderError)==null?void 0:x.call(r,k(S.error))}))}}),R=t.module===a.Module.SWAP;if(P(R?d.SETTLING:d.SUCCESS,{orderId:T.id.toString(),order:T}),A(()=>i(T)),R||A(()=>o()),A(()=>{var S;return(S=r==null?void 0:r.onOrderCreated)==null?void 0:S.call(r,T)}),R){const S=await e.waitForOrderFill(T,j);return P(d.SUCCESS,{order:S}),S}return T}catch(T){const R=H.phase,S=k(T),W=!(R===d.SUBMITTING&&((F=e.signal)==null?void 0:F.aborted)&&T===e.signal.reason)&&ce(T,R),x=!W&&a.isTxRejected(T);throw g(W?d.UNCONFIRMED:x?d.REJECTED:d.FAILED,{error:S,parsedError:Y(T)}),x?A(r==null?void 0:r.onSubmitOrderRejected):R!==d.SETTLING&&A(()=>{var Ae;return(Ae=r==null?void 0:r.onSubmitOrderFailed)==null?void 0:Ae.call(r,Y(T))}),S}},bt=()=>{const{data:e}=z(),{inputToken:t,outputToken:n,wrappedNativeToken:r,chainId:i,callbacks:o,account:s,walletInteractions:c}=p(),u=Ye(),O=Ze(),E=B(),f=K(),I=m.useRef(void 0);return m.useEffect(()=>()=>{var h;return(h=I.current)==null?void 0:h.abort()},[s,i,e]),m.useCallback(()=>{if(!ue(f.getState().state.currentExecution.phase))return;const h=new AbortController;I.current=h,Rt({signal:h.signal,account:s,chainId:i,inputToken:t,outputToken:n,wrappedNativeToken:r,form:E,client:e,walletInteractions:c,callbacks:o,addNewOrder:u,refetchActiveOrders:O,waitForOrderFill:(w,v)=>ye({store:f,callbacks:o,order:w,executionId:v,signal:h.signal}),getCurrentExecution:()=>f.getState().state.currentExecution,beginExecution:f.getState().beginExecution,replaceExecution:f.getState().replaceExecution}).catch(()=>{}).finally(()=>{I.current===h&&(I.current=void 0)})},[s,u,o,i,e,E,t,n,r,O,f,c])},Lt=()=>{const e=b(r=>r.state.currentExecution),t=b(r=>r.returnToOrderForm),n=m.useCallback(()=>t(e.executionId),[e.executionId,t]);return m.useMemo(()=>({...e,returnToOrderForm:n}),[e,n])},we=e=>{if(typeof e=="number"&&Number.isSafeInteger(e)&&e>=0||typeof e=="string"&&/^\d+$/.test(e))return BigInt(e)},ve=(e,t)=>{if(e!==null&&typeof e=="object")return t===null||typeof t!="object"?!1:Object.entries(e).every(([i,o])=>ve(o,Reflect.get(t,i)));const n=we(e),r=we(t);return n!==void 0||r!==void 0?n!==void 0&&n===r:typeof e=="number"||typeof t=="number"?!1:typeof e=="string"&&typeof t=="string"&&/^0x/i.test(e)?e.toLowerCase()===t.toLowerCase():e===t},Nt=(e,t)=>e.find(n=>n.version===2&&"order"in n.rawOrder&&ve(t,n.rawOrder.order));async function pt({store:e,callbacks:t,signal:n}){var c;const r=e.getState().state.currentExecution;if(r.phase!==d.UNCONFIRMED||r.executionId===void 0)return;const i=r.executionId;let o={...r,phase:d.SETTLING,error:void 0,parsedError:void 0};if(!e.getState().replaceExecution(i,o))return;const s=(u,O={})=>{const E={...o,...O,phase:u};return e.getState().replaceExecution(i,E)?(o=E,!0):!1};try{n.throwIfAborted();let u=o.order;const O=!u;if(!u||u.status===a.OrderStatus.Open&&u.deadline+6e4<=Date.now()){if(!o.account||!o.chainId||!u&&!o.preparedOrder)throw new Error("The original swap status is still unknown. Check its account history before starting another swap.");const f=await a.getOrders({swapper:o.account,chainId:o.chainId,getv1orders:!1,signal:n}),I=u;if(u=I?f.find(h=>h.id.toLowerCase()===I.id.toLowerCase()&&h.chainId===I.chainId&&h.historyKey===I.historyKey):o.preparedOrder&&Nt(f,o.preparedOrder.order),!u)throw new a.OrderSettlementError("The original order has not appeared in history yet. Check its status again before starting another swap.","unconfirmed",o.orderId??"")}if(n.throwIfAborted(),!s(d.SETTLING,{order:u,orderId:u.id}))return;A(()=>Ie(e,u)),O&&A(()=>{var f;return(f=t==null?void 0:t.onOrderCreated)==null?void 0:f.call(t,u)});const E=((c=o.form)==null?void 0:c.module)===a.Module.SWAP?await ye({store:e,callbacks:t,order:u,executionId:i,signal:n}):u;return s(d.SUCCESS,{order:E,orderId:E.id}),E}catch(u){throw s(ce(u,d.SETTLING)?d.UNCONFIRMED:d.FAILED,{error:k(u),parsedError:Y(u)}),u}}const Ft=()=>{const e=K(),{callbacks:t}=p(),n=m.useRef(void 0);return m.useEffect(()=>()=>{var r;return(r=n.current)==null?void 0:r.abort()},[]),m.useCallback(()=>{if(n.current)return;const r=new AbortController;n.current=r,pt({store:e,callbacks:t,signal:r.signal}).catch(()=>{}).finally(()=>{n.current===r&&(n.current=void 0)})},[t,e])},Mt=()=>{const e=Lt(),{inputToken:t,outputToken:n,chainId:r,hasChainId:i,module:o,overrides:s}=p(),{data:c,isLoading:u}=z(),O=bt(),E=Ft(),f=b(N=>N.startNewOrder),I=m.useCallback(()=>O(),[O]),h=m.useCallback(()=>f(Oe({module:o,overrides:s}),e.executionId),[o,s,f,e.executionId]),w=Me(e.phase),v=De(e.phase),C=X(e.phase);return m.useMemo(()=>({phase:e.phase,status:w,error:e.parsedError,currentStep:v,currentStepIndex:e.stepIndex,approvalTxHash:e.approveTxHash,wrapTxHash:e.wrapTxHash,totalSteps:e.totalSteps,executionSteps:e.pendingSteps,inputToken:e.inputToken??t,outputToken:e.outputToken??n,chainId:e.chainId??r,account:e.account,orderId:e.orderId,order:e.order,submitOrder:I,resumeTracking:E,startNewOrder:h,returnToOrderForm:e.returnToOrderForm,isExecuting:C,isSuccess:e.phase===d.SUCCESS,isFailed:e.phase===d.FAILED,isRejected:e.phase===d.REJECTED,isUnconfirmed:e.phase===d.UNCONFIRMED,isPreparingOrder:e.phase===d.PREPARING||i&&u&&!c,canDismiss:!C}),[c,v,t,n,r,u,C,i,h,I,E,w,e])},Dt=()=>{const{inputToken:e,outputToken:t,wrappedNativeToken:n,inputBalanceRaw:r,noLiquidity:i,inputAmountUi:o,marketPriceLoading:s,hasChainId:c}=p(),u=B(),{data:O,isLoading:E}=z(),f=b(N=>N.state.currentExecution.phase),I=X(f),h=!!(e&&a.isNativeAddress(e.address)&&(!n||a.isNativeAddress(n.address))),w=s||!u.isReady&&!u.errors.primary||r===void 0,v=I||c&&E&&!O||!!(e&&t&&o&&w),C=!!(!u.canSubmit||$(f)||!c||!O||i||v||!e||!t||h);return m.useMemo(()=>({disabled:C,loading:v}),[C,v])},xt=()=>{const{inputToken:e,outputToken:t,callbacks:n}=p(),r=b(s=>s.updateState),{trades:i}=B(),o=m.useCallback(s=>{r({tradeCount:s}),A(()=>{var c;return(c=n==null?void 0:n.onTradeCountChange)==null?void 0:c.call(n,s)})},[n,r]);return m.useMemo(()=>({totalTrades:i.totalTrades,maxTrades:i.maxTrades,inputAmountPerTrade:i.inputAmountPerTrade,minOutputAmountPerTrade:i.minOutputAmountPerTrade,triggerOutputAmountPerTrade:i.triggerOutputAmountPerTrade,onChange:o,error:i.error,inputToken:e,outputToken:t}),[e,o,t,i])},jt=()=>{const{marketPriceLoading:e,inputToken:t,outputToken:n,callbacks:r}=p(),{marketPrice:i,trades:o,triggerPrice:s,isInverted:c}=B(),u=b(I=>I.updateState),O=m.useCallback(I=>{u({triggerPriceUi:I,triggerPricePercent:null}),A(()=>{var h;return(h=r==null?void 0:r.onTriggerPriceChange)==null?void 0:h.call(r,I||"")}),A(()=>{var h;return(h=r==null?void 0:r.onTriggerPricePercentChange)==null?void 0:h.call(r,"")})},[r,u]),E=m.useCallback(I=>{u({triggerPriceUi:void 0,triggerPricePercent:I}),A(()=>{var h;return(h=r==null?void 0:r.onTriggerPriceChange)==null?void 0:h.call(r,"")}),A(()=>{var h;return(h=r==null?void 0:r.onTriggerPricePercentChange)==null?void 0:h.call(r,I||"")})},[r,u]),f=m.useCallback(()=>{u({triggerPricePercent:void 0,triggerPriceUi:void 0})},[u]);return m.useMemo(()=>({price:s.display,canonicalPriceRaw:s.raw,outputAmountPerTrade:o.triggerOutputAmountPerTrade,error:s.error,onInputChange:O,onPercentageChange:E,percentage:s.percentage,onReset:f,inputToken:t,outputToken:n,displayInputToken:c?n:t,displayOutputToken:c?t:n,isLoading:!!(e||!i.raw),isTypedValue:s.isTypedValue}),[t,c,i.raw,e,O,E,f,n,o.triggerOutputAmountPerTrade,s])};a.setUIVersion(be.version),Object.defineProperty(l,"DISCLAIMER_URL",{enumerable:!0,get:()=>a.DISCLAIMER_URL}),Object.defineProperty(l,"InputErrors",{enumerable:!0,get:()=>a.InputErrors}),Object.defineProperty(l,"Module",{enumerable:!0,get:()=>a.Module}),Object.defineProperty(l,"ORBS_LOGO",{enumerable:!0,get:()=>a.ORBS_LOGO}),Object.defineProperty(l,"ORBS_SLTP_FAQ_URL",{enumerable:!0,get:()=>a.ORBS_SLTP_FAQ_URL}),Object.defineProperty(l,"ORBS_TWAP_FAQ_URL",{enumerable:!0,get:()=>a.ORBS_TWAP_FAQ_URL}),Object.defineProperty(l,"ORBS_WEBSITE_URL",{enumerable:!0,get:()=>a.ORBS_WEBSITE_URL}),Object.defineProperty(l,"OrderFilter",{enumerable:!0,get:()=>a.OrderFilter}),Object.defineProperty(l,"OrderSettlementError",{enumerable:!0,get:()=>a.OrderSettlementError}),Object.defineProperty(l,"OrderStatus",{enumerable:!0,get:()=>a.OrderStatus}),Object.defineProperty(l,"OrderType",{enumerable:!0,get:()=>a.OrderType}),Object.defineProperty(l,"Partners",{enumerable:!0,get:()=>a.Partners}),Object.defineProperty(l,"QuoteError",{enumerable:!0,get:()=>a.QuoteError}),Object.defineProperty(l,"SWAP_CAPABILITIES",{enumerable:!0,get:()=>a.SWAP_CAPABILITIES}),Object.defineProperty(l,"SpotError",{enumerable:!0,get:()=>a.SpotError}),Object.defineProperty(l,"TimeUnit",{enumerable:!0,get:()=>a.TimeUnit}),Object.defineProperty(l,"analytics",{enumerable:!0,get:()=>a.analytics}),Object.defineProperty(l,"calculateOrder",{enumerable:!0,get:()=>a.calculateOrder}),Object.defineProperty(l,"calculateOrderForm",{enumerable:!0,get:()=>a.calculateOrderForm}),Object.defineProperty(l,"createClient",{enumerable:!0,get:()=>a.createClient}),Object.defineProperty(l,"eqIgnoreCase",{enumerable:!0,get:()=>a.eqIgnoreCase}),Object.defineProperty(l,"executeOrder",{enumerable:!0,get:()=>a.executeOrder}),Object.defineProperty(l,"getOrderExecutionRate",{enumerable:!0,get:()=>a.getOrderExecutionRate}),Object.defineProperty(l,"getOrderFillDelayMillis",{enumerable:!0,get:()=>a.getOrderFillDelayMillis}),Object.defineProperty(l,"getOrderLimitPriceRate",{enumerable:!0,get:()=>a.getOrderLimitPriceRate}),Object.defineProperty(l,"getOrders",{enumerable:!0,get:()=>a.getOrders}),Object.defineProperty(l,"getQuote",{enumerable:!0,get:()=>a.getQuote}),Object.defineProperty(l,"getTriggerPriceRate",{enumerable:!0,get:()=>a.getTriggerPriceRate}),Object.defineProperty(l,"getTwapConfig",{enumerable:!0,get:()=>a.getTwapConfig}),Object.defineProperty(l,"invertPriceInput",{enumerable:!0,get:()=>a.invertPriceInput}),Object.defineProperty(l,"isNativeAddress",{enumerable:!0,get:()=>a.isNativeAddress}),Object.defineProperty(l,"isQuoteFresh",{enumerable:!0,get:()=>a.isQuoteFresh}),Object.defineProperty(l,"isSwapSupported",{enumerable:!0,get:()=>a.isSwapSupported}),Object.defineProperty(l,"isTxRejected",{enumerable:!0,get:()=>a.isTxRejected}),Object.defineProperty(l,"setUIVersion",{enumerable:!0,get:()=>a.setUIVersion}),Object.defineProperty(l,"submitSwap",{enumerable:!0,get:()=>a.submitSwap}),Object.defineProperty(l,"toAmountRaw",{enumerable:!0,get:()=>a.toAmountRaw}),Object.defineProperty(l,"toAmountUI",{enumerable:!0,get:()=>a.toAmountUI}),Object.defineProperty(l,"waitForOrder",{enumerable:!0,get:()=>a.waitForOrder}),Object.defineProperty(l,"watchOrder",{enumerable:!0,get:()=>a.watchOrder}),l.Disclaimer=J,l.ExecutionPhase=d,l.ExecutionStatus=G,l.SpotProvider=ct,l.Steps=U,l.useAmountUi=dt,l.useCancelOrder=gt,l.useClient=z,l.useDisclaimer=Ot,l.useDuration=St,l.useExecution=Mt,l.useFillDelay=ht,l.useHistoryOrder=Et,l.useInputErrors=It,l.useLimitPrice=yt,l.useOrderForm=B,l.useOrders=Xe,l.useOutputAmount=Ct,l.usePriceDisplay=wt,l.useSubmitButton=Dt,l.useTrades=xt,l.useTriggerPrice=jt,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(l,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@orbs-network/spot-ui"),require("react/jsx-runtime"),require("react"),require("zustand"),require("zustand/vanilla")):typeof define=="function"&&define.amd?define(["exports","@orbs-network/spot-ui","react/jsx-runtime","react","zustand","zustand/vanilla"],a):(l=typeof globalThis<"u"?globalThis:l||self,a(l.SpotReact={},l.SpotUI,l.jsxRuntime,l.React,l.Zustand,l.ZustandVanilla))})(this,(function(l,a,b,m,Te,Re){"use strict";"use client";var Gt=Object.defineProperty;var Bt=(l,a,b)=>a in l?Gt(l,a,{enumerable:!0,configurable:!0,writable:!0,value:b}):l[a]=b;var ie=(l,a,b)=>Bt(l,typeof a!="symbol"?a+"":a,b);const Le={version:"2.1.24"},oe=m.createContext(null),be=({children:e,value:t})=>b.jsx(oe.Provider,{value:t,children:e}),F=()=>{const e=m.useContext(oe);if(e===null)throw new Error("useSpotTrading must be used within SpotProvider");return e};var j=(e=>(e[e.LOADING=1]="LOADING",e[e.SUCCESS=2]="SUCCESS",e[e.FAILED=3]="FAILED",e))(j||{}),d=(e=>(e.IDLE="idle",e.PREPARING="preparing",e.WRAPPING="wrapping",e.APPROVING="approving",e.SIGNING="signing",e.SUBMITTING="submitting",e.SETTLING="settling",e.UNCONFIRMED="unconfirmed",e.SUCCESS="success",e.FAILED="failed",e.REJECTED="rejected",e))(d||{}),z=(e=>(e.TRIGGER_MARKET_PRICE="triggerMarketPriceDisclaimer",e.MARKET_PRICE="marketOrderDisclaimer",e.LIMIT_PRICE="limitOrderDisclaimer",e))(z||{}),k=(e=>(e.WRAP="wrap",e.APPROVE="approve",e.CREATE="create",e))(k||{});const ee=e=>{if(e instanceof Error)return e.message;if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){const t=Reflect.get(e,"message");if(typeof t=="string")return t}return"Unknown error"},se=e=>{if(typeof e!="object"||e===null)return 0;const t=Reflect.get(e,"code");if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()){if(/^-?\d+$/.test(t)){const n=Number(t);return Number.isFinite(n)?n:0}return t}return 0},ae=e=>{if(typeof e!="object"||e===null)return{};const t={code:se(e)},n=Reflect.get(e,"reason");(n==="cancelled"||n==="expired"||n==="unconfirmed"||n==="aborted")&&(t.reason=n);const r=Reflect.get(e,"orderId");typeof r=="string"&&(t.orderId=r);const i=Reflect.get(e,"status");typeof i=="number"&&Number.isFinite(i)&&(t.status=i);const o=Reflect.get(e,"serviceCode");return(typeof o=="string"||typeof o=="number"&&Number.isFinite(o))&&(t.serviceCode=o),t},J=e=>e instanceof Error?e:Object.assign(new Error(ee(e)),ae(e),{cause:e}),Y=e=>{const t=ee(e),n=t.match(/,\s*code\s*:\s*(-?\d+)/i),r=n?Number(n[1]):0,i=t.replace(/^error\s*:/i,"").replace(/,\s*code\s*:\s*-?\d+/i,"").trim();return{...ae(e),message:i||"Unknown error",code:se(e)||(Number.isFinite(r)?r:0)}},Ne=new Set([d.PREPARING,d.WRAPPING,d.APPROVING,d.SIGNING,d.SUBMITTING,d.SETTLING]),pe={[d.IDLE]:new Set,[d.PREPARING]:new Set([d.PREPARING,d.WRAPPING,d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.WRAPPING]:new Set([d.WRAPPING,d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.APPROVING]:new Set([d.APPROVING,d.SIGNING,d.FAILED,d.REJECTED]),[d.SIGNING]:new Set([d.SIGNING,d.SUBMITTING,d.FAILED,d.REJECTED]),[d.SUBMITTING]:new Set([d.SETTLING,d.SUCCESS,d.FAILED,d.REJECTED,d.UNCONFIRMED]),[d.SETTLING]:new Set([d.SETTLING,d.SUCCESS,d.FAILED,d.UNCONFIRMED]),[d.UNCONFIRMED]:new Set([d.SETTLING,d.SUCCESS,d.FAILED]),[d.SUCCESS]:new Set,[d.FAILED]:new Set,[d.REJECTED]:new Set},Z=e=>({phase:d.IDLE,completedWrap:e}),X=e=>Ne.has(e),$=e=>X(e)||e===d.UNCONFIRMED,ue=e=>e===d.IDLE||e===d.FAILED||e===d.REJECTED,ce=(e,t)=>t===d.SETTLING?!(e instanceof a.OrderSettlementError&&(e.reason==="cancelled"||e.reason==="expired")):!(t!==d.SUBMITTING||e instanceof a.SpotError&&e.code==="SUBMISSION_FAILED"&&e.status!==void 0&&e.status<500&&e.status!==408&&!e.cause),Fe=(e,t)=>pe[e].has(t),Me=e=>{if(X(e))return j.LOADING;if(e===d.SUCCESS)return j.SUCCESS;if(e===d.FAILED||e===d.REJECTED||e===d.UNCONFIRMED)return j.FAILED},De=e=>{if(e===d.WRAPPING)return k.WRAP;if(e===d.APPROVING)return k.APPROVE;if(e===d.SIGNING||e===d.SUBMITTING)return k.CREATE},T=e=>{if(e)try{const t=e();Promise.resolve(t).catch(()=>{})}catch{}},xe=({execution:e,account:t,chainId:n,inputTokenAddress:r,inputAmountRaw:i})=>{const o=e.completedWrap;if((o==null?void 0:o.account.toLowerCase())===t.toLowerCase()&&o.chainId===n&&o.inputTokenAddress.toLowerCase()===r.toLowerCase()&&je(o.inputAmountRaw,i))return o},je=(e,t)=>{try{return BigInt(e)>=BigInt(t)}catch{return!1}},Ge=2e4,de=new WeakMap,le=e=>{const t=de.get(e);if(t)return t;const n={all:[...e].sort((r,i)=>i.createdAt-r.createdAt),open:[],completed:[],cancelled:[],expired:[]};for(const r of n.all)switch(r.status){case a.OrderStatus.Open:n.open.push(r);break;case a.OrderStatus.Completed:n.completed.push(r);break;case a.OrderStatus.Cancelled:n.cancelled.push(r);break;case a.OrderStatus.Expired:n.expired.push(r);break}return de.set(e,n),n},Be=(e,t)=>{const n=new Set(e.map(i=>i.historyKey)),r=(t==null?void 0:t.filter(i=>i.version===1&&!n.has(i.historyKey)))??[];return[...e,...r]},_e=(e,t)=>{if(!e)return t;const n=new Map(e.map(o=>[o.historyKey,o])),r=new Set(t.map(o=>o.historyKey));return[...t.map(o=>{const s=n.get(o.historyKey);return s&&(s.status===a.OrderStatus.Completed&&o.status!==a.OrderStatus.Completed||s.status!==a.OrderStatus.Open&&o.status===a.OrderStatus.Open)?s:o}),...e.filter(o=>!r.has(o.historyKey))]},Ke=(e,t,n,r,i)=>{const o=r??new Set,s=g=>o.has(g.historyKey)?!1:(o.add(g.historyKey),T(()=>{var E;return(E=n==null?void 0:n.onOrderFilled)==null?void 0:E.call(n,g)}),!0),c=new Map(t.map(g=>[g.historyKey,g])),u=[];for(const g of e??[]){if(g.version!==2)continue;const E=c.get(g.historyKey);!E||E.progress===g.progress&&E.status===g.status||(u.push(E),E.status===a.OrderStatus.Completed&&g.status!==a.OrderStatus.Completed&&s(E))}(i==null?void 0:i.status)===a.OrderStatus.Completed&&s(i)&&!u.some(g=>g.historyKey===i.historyKey)&&u.push(i);for(const g of t)g.status===a.OrderStatus.Completed&&o.add(g.historyKey);u.length>0&&T(()=>{var g;return(g=n==null?void 0:n.onOrdersProgressUpdate)==null?void 0:g.call(n,u)})},me=e=>{if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},te=(e,t)=>{if(Object.is(e,t))return e;if(Array.isArray(e)&&Array.isArray(t)){const n=t.map((i,o)=>te(e[o],i));return e.length===n.length&&n.every((i,o)=>i===e[o])?e:n}if(me(e)&&me(t)){const n=Object.keys(e),r=Object.keys(t),i={};let o=n.length===r.length;for(const s of r){Object.prototype.hasOwnProperty.call(e,s)||(o=!1);const c=te(e[s],t[s]);i[s]=c,c!==e[s]&&(o=!1)}return o?e:i}return t},qe=(e,t)=>e?te(e,t):t,He=async({client:e,account:t,signal:n,supportLegacyOrders:r,previousOrders:i,legacyLoaded:o})=>{const s=await e.getAccountOrdersResult({signal:n,account:t,legacyOrders:r&&!o});if(n.aborted)throw n.reason;return{orders:r&&!s.legacyLoaded?Be(s.orders,i):s.orders,legacyLoaded:o||s.legacyLoaded}},re=e=>({tradeCount:e.tradeCount,tradeInterval:e.tradeInterval,orderDuration:e.orderDuration,limitPriceUi:e.limitPriceUi,triggerPriceUi:e.triggerPriceUi,triggerPricePercent:e.triggerPricePercent,limitPricePercent:e.limitPricePercent,isMarketOrder:e.isMarketOrder,isPriceInverted:void 0}),Qe=e=>({...re(e),cancelOrders:{},currentExecution:Z()}),fe={isFetching:!1},ge={isFetching:!1},We=e=>new Promise(t=>setTimeout(t,e)),Ue=e=>{let t=0,n,r,i=0,o,s,c,u;const g=new Set;let E=!1,f=0,y=0,h,A,v;return Re.createStore((w,N)=>{const W=(P,I=u,C=N().orders.isFetching,p)=>{const S=s,R=N().orders.data,O=qe(R,_e(R,P));return w(M=>({orders:{...M.orders,data:O,isFetching:C}})),s===S&&Ke(R,O,I,g,p),O},U=async()=>{if(!n||!r)return;if(o)return o;const P=++i,I=r;w(p=>({client:{key:n,data:p.client.data,error:void 0,isFetching:!0}}));const C=(async()=>{let p;for(let S=0;S<3;S++){if(P!==i)return;try{const R=await I();return P!==i?void 0:(w({client:{key:n,data:R,isFetching:!1}}),R)}catch(R){if(p=R instanceof Error?R:new Error(String(R)),P!==i)return;S<2&&await We(2**S*1e3)}}P===i&&w({client:{key:n,error:p,isFetching:!1}})})();return o=C,C.finally(()=>{o===C&&(o=void 0)}),C},D=async(P=!1,I=!1)=>{if(!P&&f===0||!s||!c)return N().orders.data;if(h){if(!I)return h;const M=s;return await h,s!==M?void 0:D(P,I)}const C=++y,p=c,S=N().orders.data,R=new AbortController;A=R,w(M=>({orders:{key:s,data:M.orders.data,error:void 0,isFetching:!0}}));const O=p(S,I?!1:E,R.signal).then(({orders:M,legacyLoaded:Q})=>{if(C===y)return E=Q,W(M,u,!1)}).catch(M=>{if(C!==y||R.signal.aborted)return;const Q=M instanceof Error?M:new Error(String(M));w(x=>({orders:{key:s,data:x.orders.data,error:Q,isFetching:!1}}))});return h=O,O.finally(()=>{h===O&&(h=void 0),A===R&&(A=void 0)}),O},B=()=>{D()},_=()=>{v&&(clearInterval(v),v=void 0),typeof window<"u"&&window.removeEventListener("focus",B),A==null||A.abort(),A=void 0,h=void 0,y++,w(P=>({orders:{...P.orders,isFetching:!1}}))},H=()=>{!s||!c||v||(D(!0),v=setInterval(()=>{D()},Ge),typeof window<"u"&&window.addEventListener("focus",B))};return{client:fe,orders:ge,state:Qe(e),configureClient:(P,I)=>{if(n===P){r=I;return}n=P,r=I,i++,o=void 0,w({client:P?{key:P,isFetching:!1}:fe}),P&&I&&U()},refetchClient:U,configureOrders:(P,I,C)=>{if(u=C,s===P){c=I;return}_(),s=P,c=I,E=!1,g.clear(),w({orders:P?{key:P,isFetching:!1}:ge}),f>0&&H()},registerOrdersConsumer:()=>(f++,f===1&&H(),()=>{f=Math.max(0,f-1),f===0&&_()}),refetchOrders:D,addOrder:P=>{w(I=>{const C=I.orders.data;return C!=null&&C.some(p=>p.historyKey===P.historyKey)?I:{orders:{...I.orders,data:[P,...C??[]]}}})},updateOrder:(P,I)=>{const C=N().orders.data??[],p=C.some(S=>S.historyKey===P.historyKey);W(p?C.map(S=>S.historyKey===P.historyKey?P:S):[P,...C],u??I,N().orders.isFetching,P)},setCancelOrder:(P,I)=>{w(C=>({state:{...C.state,cancelOrders:{...C.state.cancelOrders,[P]:I}}}))},clearCancelOrder:P=>{w(I=>{if(!(P in I.state.cancelOrders))return I;const C={...I.state.cancelOrders};return delete C[P],{state:{...I.state,cancelOrders:C}}})},updateState:P=>w(I=>({state:{...I.state,...P}})),beginExecution:P=>{let I;return w(C=>ue(C.state.currentExecution.phase)?(I={...P,executionId:++t,phase:d.PREPARING},{state:{...C.state,currentExecution:I}}):C),I},replaceExecution:(P,I)=>{let C=!1;return w(p=>{const S=p.state.currentExecution;return S.executionId!==P||I.executionId!==P||!Fe(S.phase,I.phase)?p:(C=!0,{state:{...p.state,currentExecution:I}})}),C},returnToOrderForm:P=>{const I=N().state.currentExecution;return I.executionId!==P||$(I.phase)||I.phase===d.SUCCESS?!1:(w(C=>({state:{...C.state,currentExecution:Z(I.completedWrap)}})),!0)},syncFormDefaults:P=>$(N().state.currentExecution.phase)?!1:(w(I=>({state:{...I.state,...re(P),currentExecution:Z()}})),!0),startNewOrder:(P,I)=>{const{state:C}=N();return C.currentExecution.executionId!==I||$(C.currentExecution.phase)?!1:(w(p=>({state:{...p.state,...re(P),isMarketOrder:C.isMarketOrder,currentExecution:Z()}})),!0)}}})},Oe=e=>{var n;const t=(n=e.overrides)==null?void 0:n.state;return{isMarketOrder:e.module===a.Module.LIMIT||e.module===a.Module.SWAP?!1:t==null?void 0:t.isMarketOrder,tradeCount:t==null?void 0:t.tradeCount,tradeInterval:t==null?void 0:t.tradeInterval,orderDuration:t==null?void 0:t.orderDuration,limitPriceUi:t==null?void 0:t.limitPriceUi,triggerPriceUi:t==null?void 0:t.triggerPriceUi,triggerPricePercent:t==null?void 0:t.triggerPricePercent,limitPricePercent:t==null?void 0:t.limitPricePercent}},Se=m.createContext(null),Ve=({children:e,initialState:t})=>{const[n]=m.useState(()=>Ue(t));return b.jsx(Se.Provider,{value:n,children:e})},K=()=>{const e=m.useContext(Se);if(e===null)throw new Error("useSpotStore must be used within SpotProvider");return e},L=e=>{const t=K();return Te.useStore(t,e)},ke={isFetching:!1},ze=()=>{const{partner:e,chainId:t,hasChainId:n}=F(),r=K(),i=!!(t&&n),o=i?`${e}:${t}`:void 0,s=m.useCallback(()=>t?a.createClient(e,t):Promise.reject(new Error("Spot is unavailable on the connected chain")),[t,e]);m.useEffect(()=>{r.getState().configureClient(o,i?s:void 0)},[i,o,s,r])},V=()=>{const{partner:e,chainId:t,hasChainId:n}=F(),r=K(),i=L(g=>g.client),o=!!(t&&n),s=o?`${e}:${t}`:void 0,c=i.key===s?i:ke,u=m.useCallback(()=>{if(!o||!s)return Promise.resolve(void 0);const g=r.getState();return g.client.key!==s?Promise.resolve(void 0):g.refetchClient()},[o,s,r]);return m.useMemo(()=>({data:c.data,error:c.error,isLoading:o&&!c.data&&c.error===void 0,isFetching:c.isFetching,refetch:u}),[c,o,u])},Je={isFetching:!1},ne=(e,t,n)=>e&&t?JSON.stringify([e,t.exchangeAddress,t.partner,t.chainId,n]):void 0,$e=()=>{const{account:e,supportLegacyOrders:t,callbacks:n}=F(),{data:r}=V(),i=K(),o=ne(e,r,t),s=!!o,c=m.useCallback(async(u,g,E)=>!e||!r?{orders:[],legacyLoaded:!1}:He({client:r,account:e,signal:E,supportLegacyOrders:t,previousOrders:u,legacyLoaded:g}),[e,r,t]);m.useEffect(()=>{i.getState().configureOrders(o,s?c:void 0,n)},[n,s,o,c,i])},he=()=>{const{account:e,supportLegacyOrders:t}=F(),{data:n}=V(),r=K(),i=ne(e,n,t),o=!!i,s=m.useCallback((c=!1)=>!o||!i||r.getState().orders.key!==i?Promise.resolve(void 0):r.getState().refetchOrders(!0,c),[o,i,r]);return{enabled:o,key:i,refetch:s}},Ye=()=>{const e=K(),{account:t,supportLegacyOrders:n}=F(),{data:r}=V(),i=ne(t,r,n);return m.useCallback(o=>{!i||e.getState().orders.key!==i||e.getState().addOrder(o)},[i,e])},Ze=()=>{const e=K();return m.useCallback(()=>e.getState().refetchOrders(),[e])},Xe=()=>{const e=L(u=>u.orders),t=L(u=>u.registerOrdersConsumer),{enabled:n,key:r,refetch:i}=he(),o=e.key===r?e:Je;m.useEffect(()=>t(),[t]);const s=m.useMemo(()=>o.data===void 0?void 0:le(o.data),[o.data]),c=m.useCallback(async()=>{const u=await i();return u===void 0?void 0:le(u)},[i]);return m.useMemo(()=>({data:s,error:o.error,isLoading:n&&s===void 0&&o.error===void 0,isFetching:o.isFetching,isRefetching:o.isFetching&&s!==void 0,refetch:c}),[o,s,n,c])},et=({children:e})=>(ze(),$e(),e),tt=({error:e,retry:t,isRetrying:n})=>b.jsxs("div",{className:"spot-client-error-fallback",role:"alert",children:[b.jsx("p",{children:e.message||"Unable to load Spot configuration."}),b.jsx("button",{type:"button",className:"spot-client-error-retry",disabled:n,onClick:t,children:n?"Retrying…":"Retry"})]}),rt=({children:e,fallback:t=tt})=>{const{hasChainId:n}=F(),{data:r,error:i,isFetching:o,refetch:s}=V(),c=m.useCallback(async()=>{await s()},[s]);return b.jsxs(b.Fragment,{children:[e,!r&&i&&n?b.jsx(t,{error:i,retry:c,isRetrying:o}):null]})},nt=({resetErrorBoundary:e})=>b.jsxs("div",{className:"twap-error-fallback",role:"alert",children:[b.jsx("p",{children:"Something went wrong"}),b.jsx("button",{type:"button",onClick:e,children:"Retry"})]}),it=({children:e,fallback:t=nt})=>{const n=K(),r=m.useCallback(i=>{var s;(((s=n.getState().client.data)==null?void 0:s.analytics)??a.analytics).onCrash(i)},[n]);return b.jsx(ot,{fallback:t,reportCrash:r,children:e})};class ot extends m.Component{constructor(){super(...arguments);ie(this,"state",{});ie(this,"resetErrorBoundary",()=>{this.setState({error:void 0})})}static getDerivedStateFromError(n){return{error:n}}componentDidCatch(n){this.props.reportCrash(n)}render(){const{error:n}=this.state;if(n){const r=this.props.fallback;return b.jsx(r,{error:n,resetErrorBoundary:this.resetErrorBoundary})}return this.props.children}}const st=({children:e,defaults:t,scopeKey:n})=>{const r=K(),i=L(s=>s.state.currentExecution.phase),o=m.useRef(n);return m.useEffect(()=>{o.current===n||$(i)||r.getState().syncFormDefaults(t)&&(o.current=n)},[t,i,n,r]),e},Pe=m.createContext(null),at=({children:e})=>{const{inputToken:t,outputToken:n,inputAmountUi:r,quotedOutputAmountRaw:i,minimumOutputAmountRaw:o,inputAmountUsd:s,quotedOutputAmountUsd:c,minimumOutputAmountUsd:u,inputTokenUsdPrice:g,outputTokenUsdPrice:E,minTradeSizeUsd:f,inputBalanceRaw:y,displayFeePercent:h,priceProtectionPercent:A,module:v}=F(),w=L(S=>S.state.tradeCount),N=L(S=>S.state.tradeInterval),W=L(S=>S.state.orderDuration),U=L(S=>S.state.limitPriceUi),D=L(S=>S.state.triggerPriceUi),B=L(S=>S.state.limitPricePercent),_=L(S=>S.state.triggerPricePercent),H=L(S=>S.state.isPriceInverted),P=L(S=>S.state.isMarketOrder),I=L(S=>{const R=S.state.currentExecution;return R.phase!==d.IDLE?R.form:void 0}),C=m.useMemo(()=>({module:v,inputTokenDecimals:(t==null?void 0:t.decimals)??0,outputTokenDecimals:(n==null?void 0:n.decimals)??0,quotedOutputAmountRaw:i,minimumOutputAmountRaw:o,inputAmountUsd:s,quotedOutputAmountUsd:c,minimumOutputAmountUsd:u,inputTokenUsdPrice:g,outputTokenUsdPrice:E,minTradeSizeUsd:f,priceProtectionPercent:A,displayFeePercent:h,inputBalanceRaw:y,userInput:{inputAmountUi:r,isMarketOrder:!!P,tradeCount:w,tradeInterval:N,orderDuration:W,limitPriceUi:U,limitPricePercent:B,triggerPriceUi:D,triggerPricePercent:_,isPriceInverted:H}}),[o,s,c,u,n==null?void 0:n.decimals,E,h,i,f,v,A,y,t==null?void 0:t.decimals,g,H,P,B,_,w,W,N,U,r,D]),p=m.useMemo(()=>{if(I)return I;const S=a.calculateOrder(C);return t&&n?S:{...S,isReady:!1,canSubmit:!1}},[I,t,n,C]);return b.jsx(Pe.Provider,{value:p,children:e})},G=()=>{const e=m.useContext(Pe);if(!e)throw new Error("useOrderForm must be used within OrderFormProvider");return e},ut=e=>{var E,f,y,h,A,v,w,N,W,U,D,B;const t=Number.isSafeInteger(e.chainId)&&Number(e.chainId)>0,n=(E=e.wrappedNativeToken)==null?void 0:E.address,r=!!(n&&(a.isNativeAddress((f=e.inputToken)==null?void 0:f.address)&&a.eqIgnoreCase(((y=e.outputToken)==null?void 0:y.address)||"",n)||a.eqIgnoreCase(((h=e.inputToken)==null?void 0:h.address)||"",n)&&a.isNativeAddress((A=e.outputToken)==null?void 0:A.address))),i=r?a.toAmountRaw(e.inputAmountUi,(v=e.outputToken)==null?void 0:v.decimals):e.marketQuote.isLoading?void 0:e.marketQuote.quotedOutputAmountRaw,o=r?!1:e.marketQuote.isLoading,s=r?!1:e.marketQuote.noLiquidity,c=m.useMemo(()=>Oe({module:e.module,overrides:e.overrides}),[e.module,e.overrides]),u=JSON.stringify([e.partner,e.chainId,e.module,(w=e.inputToken)==null?void 0:w.address,(N=e.inputToken)==null?void 0:N.decimals,(W=e.outputToken)==null?void 0:W.address,(U=e.outputToken)==null?void 0:U.decimals,(D=e.wrappedNativeToken)==null?void 0:D.address,(B=e.wrappedNativeToken)==null?void 0:B.decimals,c]),g=m.useMemo(()=>({inputAmountUi:e.inputAmountUi,minTradeSizeUsd:e.minTradeSizeUsd,account:e.account,walletInteractions:e.walletInteractions,quotedOutputAmountRaw:i,minimumOutputAmountRaw:e.marketQuote.isLoading?void 0:e.marketQuote.minimumOutputAmountRaw,inputAmountUsd:e.marketQuote.isLoading?void 0:e.marketQuote.inputAmountUsd,quotedOutputAmountUsd:e.marketQuote.isLoading?void 0:e.marketQuote.quotedOutputAmountUsd,minimumOutputAmountUsd:e.marketQuote.isLoading?void 0:e.marketQuote.minimumOutputAmountUsd,marketPriceLoading:o,noLiquidity:s,priceProtectionPercent:e.priceProtectionPercent,chainId:e.chainId,hasChainId:t,partner:e.partner,module:e.module,displayFeePercent:e.displayFeePercent??0,callbacks:e.callbacks,inputTokenUsdPrice:e.inputTokenUsdPrice,outputTokenUsdPrice:e.outputTokenUsdPrice,inputBalanceRaw:e.inputBalanceRaw,inputToken:e.inputToken,outputToken:e.outputToken,wrappedNativeToken:e.wrappedNativeToken,supportLegacyOrders:e.supportLegacyOrders??!1,overrides:e.overrides}),[e.marketQuote.isLoading,e.marketQuote.minimumOutputAmountRaw,e.marketQuote.inputAmountUsd,e.marketQuote.quotedOutputAmountUsd,e.marketQuote.minimumOutputAmountUsd,e.account,e.callbacks,e.chainId,e.displayFeePercent,e.inputBalanceRaw,e.inputToken,e.inputTokenUsdPrice,e.minTradeSizeUsd,e.module,e.outputToken,e.outputTokenUsdPrice,e.wrappedNativeToken,e.overrides,e.partner,e.priceProtectionPercent,e.supportLegacyOrders,e.inputAmountUi,e.walletInteractions,t,o,s,i]);return{initialState:c,formScopeKey:u,trading:g}},ct=e=>{const{initialState:t,formScopeKey:n,trading:r}=ut(e);return b.jsx(be,{value:r,children:b.jsx(Ve,{initialState:t,children:b.jsx(it,{fallback:e.errorFallback,children:b.jsx(et,{children:b.jsx(st,{defaults:t,scopeKey:n,children:b.jsx(rt,{fallback:e.clientErrorFallback,children:b.jsx(at,{children:e.children})})})})})})})},dt=(e,t)=>m.useMemo(()=>a.toAmountUI(t,e),[e,t]),lt=60,mt=()=>{const{refetch:e}=he();return m.useCallback(async(t,n=!1)=>{for(let r=0;r<lt;r++){const i=await e(n);if(!i)throw new Error("orders not found");const o=i.find(s=>s.historyKey===t);if((o==null?void 0:o.status)===a.OrderStatus.Cancelled)return;await new Promise(s=>setTimeout(s,1e3))}throw new Error("Timed out waiting for order cancellation to be confirmed")},[e])},ft=e=>({...e,status:a.OrderStatus.Cancelled}),gt=e=>{const{account:t,walletInteractions:n,callbacks:r}=F(),{data:i}=V(),o=mt(),s=L(f=>f.state.cancelOrders[(e==null?void 0:e.historyKey)??""]),c=L(f=>f.setCancelOrder),u=L(f=>f.clearCancelOrder),g=m.useCallback(async()=>{const f=e==null?void 0:e.historyKey;try{if(!t)throw new Error("missing account");if(!e)throw new Error("order is required");if(!i)throw new Error("Spot client is unavailable");const y=e.historyKey;c(y,{status:j.LOADING}),T(()=>{var w;return(w=r==null?void 0:r.onCancelOrderRequest)==null?void 0:w.call(r,e)}),T(()=>i.analytics.onCancelOrderRequest([e.version===1?e.id.toString():e.hash],e.version));const h=i.getCancelOrderRequest(e),A=await n.cancelOrder(h);if(!A)throw new Error("failed to cancel order");T(()=>i.analytics.onCancelOrderSuccess(A)),c(y,{status:j.LOADING,txHash:A}),await o(y,e.version===1);const v=ft(e);return c(y,{status:j.SUCCESS,txHash:A}),T(()=>{var w;return(w=r==null?void 0:r.onCancelOrderSuccess)==null?void 0:w.call(r,{order:v,txHash:A})}),A}catch(y){a.isTxRejected(y)?f&&u(f):(f&&c(f,{status:j.FAILED,error:ee(y)}),T(()=>i==null?void 0:i.analytics.onCancelOrderError(y))),T(()=>{var h;return(h=r==null?void 0:r.onCancelOrderFailed)==null?void 0:h.call(r,J(y))})}},[t,r,u,i,e,o,c,n]),E=m.useMemo(()=>{const f=s;return{isLoading:(f==null?void 0:f.status)===j.LOADING,disabled:!!(e&&!i),isSuccess:(f==null?void 0:f.status)===j.SUCCESS,isError:(f==null?void 0:f.status)===j.FAILED,error:f==null?void 0:f.error,txHash:f==null?void 0:f.txHash}},[s,e,i]);return m.useMemo(()=>({cancelOrder:g,...E}),[g,E])},Ot=()=>{const{module:e,values:t}=G();if(t.isMarketOrder&&e===a.Module.STOP_LOSS)return z.TRIGGER_MARKET_PRICE;if(e===a.Module.LIMIT||e===a.Module.TWAP)return t.isMarketOrder?z.MARKET_PRICE:z.LIMIT_PRICE},St=()=>{const{callbacks:e}=F(),t=L(c=>c.updateState),{schedule:n}=G(),{duration:r}=n,i=m.useCallback(c=>{t({orderDuration:c}),T(()=>{var u;return(u=e==null?void 0:e.onOrderDurationChange)==null?void 0:u.call(e,c)})},[e,t]),o=m.useCallback(c=>{const u=Number(c);Number.isFinite(u)&&i({unit:r.unit,value:u})},[r.unit,i]),s=m.useCallback(c=>{i({unit:c,value:r.value})},[r.value,i]);return m.useMemo(()=>({duration:r,onChange:i,milliseconds:n.durationMillis,onInputChange:o,onUnitSelect:s,error:n.durationError}),[r,i,o,s,n])},ht=()=>{const{callbacks:e}=F(),t=L(c=>c.updateState),{schedule:n}=G(),{fillDelay:r}=n,i=m.useCallback(c=>{t({tradeInterval:c}),T(()=>{var u;return(u=e==null?void 0:e.onTradeIntervalChange)==null?void 0:u.call(e,c)})},[e,t]),o=m.useCallback(c=>{const u=Number(c);Number.isFinite(u)&&i({unit:r.unit,value:u})},[r.unit,i]),s=m.useCallback(c=>i({unit:c,value:r.value}),[r.value,i]);return m.useMemo(()=>({onInputChange:o,onUnitSelect:s,onChange:i,milliseconds:n.fillDelayMillis,fillDelay:r,error:n.fillDelayError}),[r,i,o,s,n])},q=(e,t)=>({raw:e||"",ui:a.toAmountUI(e,t)}),Pt=(e,t,n)=>m.useMemo(()=>!e||!t||!n?[]:e.map(r=>({rawFill:r,inputToken:t,outputToken:n,inputAmount:q(r.inAmount,t.decimals),outputAmount:q(r.outAmount,n.decimals),timestamp:r.timestamp,txHash:r.txHash,executionRate:a.getOrderExecutionRate(r.inAmount,r.outAmount,t.decimals,n.decimals)})),[e,t,n]),Et=(e,t,n)=>{const{chainId:r,partner:i}=F(),o=m.useMemo(()=>{if(!(!t||!n||!e||e.isMarketPrice))return a.getOrderLimitPriceRate(e,t.decimals,n.decimals)},[t,e,n]),s=m.useMemo(()=>{if(!(!t||!n||!e))return a.getTriggerPriceRate(e,t.decimals,n.decimals)},[t,e,n]),c=m.useMemo(()=>{if(!(!t||!n||!e))return a.getOrderExecutionRate(e.srcAmountFilled,e.dstAmountFilled,t.decimals,n.decimals)},[t,e,n]),u=m.useMemo(()=>e?a.getOrderFillDelayMillis(e,r?a.getTwapConfig(i,r):void 0):0,[e,i,r]),g=Pt(e==null?void 0:e.fills,t,n);return m.useMemo(()=>{if(e!=null&&e.id)return{original:e,fills:g,inputToken:t,outputToken:n,orderType:e.type,createdAt:e.createdAt,deadline:e.deadline||0,totalTrades:e.totalTradesAmount||0,tradeInterval:u,recipient:e.maker||"",inputAmount:q(e.srcAmount,t==null?void 0:t.decimals),limitPrice:q(a.toAmountRaw(o,n==null?void 0:n.decimals),n==null?void 0:n.decimals),inputAmountPerTrade:q(e.srcAmountPerTrade,t==null?void 0:t.decimals),minOutputAmountPerTrade:q(e.dstMinAmountPerTrade,n==null?void 0:n.decimals),minOutputAmount:q(e.dstMinAmountTotal,n==null?void 0:n.decimals),triggerPrice:q(a.toAmountRaw(s,n==null?void 0:n.decimals),n==null?void 0:n.decimals),id:e.id,inputAmountFilled:q(e.srcAmountFilled,t==null?void 0:t.decimals),outputAmountFilled:q(e.dstAmountFilled,n==null?void 0:n.decimals),progress:e.progress,executionPrice:q(a.toAmountRaw(c,n==null?void 0:n.decimals),n==null?void 0:n.decimals),version:e.version}},[e,g,t,n,u,o,s,c])},It=()=>{const{marketPriceLoading:e}=F(),t=G().errors.primary;return e?void 0:t},yt=()=>{const{marketPriceLoading:e,inputToken:t,outputToken:n,callbacks:r}=F(),{limitPrice:i,values:o,module:s,isInverted:c}=G(),u=L(A=>A.updateState),g=m.useCallback(A=>{u({limitPriceUi:A,limitPricePercent:null}),T(()=>{var v;return(v=r==null?void 0:r.onLimitPriceChange)==null?void 0:v.call(r,A||"")}),T(()=>{var v;return(v=r==null?void 0:r.onLimitPricePercentChange)==null?void 0:v.call(r,"")})},[r,u]),E=m.useCallback(A=>{u({limitPriceUi:void 0,limitPricePercent:A}),T(()=>{var v;return(v=r==null?void 0:r.onLimitPriceChange)==null?void 0:v.call(r,"")}),T(()=>{var v;return(v=r==null?void 0:r.onLimitPricePercentChange)==null?void 0:v.call(r,A||"")})},[r,u]),f=m.useCallback(()=>{u({limitPriceUi:void 0,limitPricePercent:void 0})},[u]),y=!o.isMarketOrder,h=m.useCallback(()=>{u({isMarketOrder:!o.isMarketOrder,...o.isMarketOrder?{}:{isPriceInverted:!1},...!o.isMarketOrder&&s===a.Module.STOP_LOSS?{limitPricePercent:void 0}:{}})},[s,u,o.isMarketOrder]);return m.useMemo(()=>({price:i.display,canonicalPriceRaw:i.raw,error:i.error,onInputChange:g,onPercentageChange:E,onReset:f,inputToken:t,outputToken:n,displayInputToken:c?n:t,displayOutputToken:c?t:n,percentage:i.percentage,isLoading:!!e,isEnabled:y,toggle:h,isTypedValue:i.isTypedValue}),[t,c,y,i,e,g,E,f,n,h])},Ct=()=>{const{marketPriceLoading:e}=F(),{outputAmount:t}=G();return m.useMemo(()=>({amount:t,isLoading:!!e}),[e,t])},wt=()=>{const{inputToken:e,outputToken:t}=F(),n=L(u=>u.updateState),{isInverted:r,values:i}=G(),o=L(u=>u.state.triggerPriceUi),s=L(u=>u.state.limitPriceUi),c=m.useCallback(()=>{n({isPriceInverted:!r,...o!==void 0?{triggerPriceUi:a.invertPriceInput(o)}:{},...s!==void 0?{limitPriceUi:a.invertPriceInput(s)}:{}})},[n,r,o,s]);return m.useMemo(()=>({onInvert:c,isInverted:r,inputToken:e,outputToken:t,displayInputToken:r?t:e,displayOutputToken:r?e:t,isMarketOrder:i.isMarketOrder}),[e,r,c,t,i.isMarketOrder])},Ee=(e,t,n)=>{if(!e||typeof t.maker!="string"||!n||!t.rawOrder||!("order"in t.rawOrder))return!1;const r=t.rawOrder.order.witness.exchange.adapter;let i;try{i=JSON.parse(e)}catch{return!1}return Array.isArray(i)&&typeof i[0]=="string"&&typeof i[1]=="string"&&i[0].toLowerCase()===t.maker.toLowerCase()&&i[1].toLowerCase()===r.toLowerCase()&&i[2]===n&&i[3]===t.chainId},Ie=(e,t)=>{const n=e.getState(),r=n.orders.key;return Ee(r,t,n.state.currentExecution.partner)?(n.addOrder(t),e.getState().orders.key===r):!1},ye=async({store:e,callbacks:t,order:n,executionId:r,signal:i})=>{const o=new AbortController,s=()=>{(i.aborted||e.getState().state.currentExecution.executionId!==r)&&o.abort()};i.addEventListener("abort",s,{once:!0});const c=e.subscribe(s);s();try{let u=n;o.signal.aborted||T(()=>Ie(e,n));for await(const g of a.watchOrder({order:n,signal:o.signal}))o.signal.aborted||(T(()=>{const E=e.getState();Ee(E.orders.key,n,E.state.currentExecution.partner)&&E.updateOrder(g,t)}),u=g);return u}finally{c(),i.removeEventListener("abort",s),o.abort()}},At=e=>new Promise(t=>setTimeout(t,e)),Ce=(e,t)=>{if(!/^\d+$/.test(e))throw new Error(`${t} must be a non-negative integer base-unit amount`);return BigInt(e)},vt=e=>{if(!e.client)throw new Error("Spot client is unavailable");if(!e.chainId||!Number.isSafeInteger(e.chainId)||e.chainId<=0)throw new Error("Spot is unavailable on the connected chain");if(!e.account)throw new Error("missing account");if(!e.inputToken)throw new Error("missing inputToken");if(!e.outputToken)throw new Error("missing outputToken");const t=a.isNativeAddress(e.inputToken.address)?e.wrappedNativeToken:e.inputToken;if(!t||a.isNativeAddress(t.address))throw new Error("missing wrappedNativeToken for native input");if(!e.form.canSubmit)throw new Error("Order form is not submittable");if(e.form.module===a.Module.SWAP&&!e.waitForOrderFill)throw new Error("Swap settlement tracking is unavailable");const n=e.form.inputAmount.raw;return Ce(n,"Input amount"),{account:e.account,chainId:e.chainId,inputToken:e.inputToken,orderInputToken:t,outputToken:e.outputToken,client:e.client,inputAmountRaw:n}},Tt=({analytics:e,account:t,chainId:n,inputToken:r,outputToken:i,preparedOrder:o})=>{const{form:s,values:c}=o;T(()=>e.onRequestOrder({account:t,chainId:n,module:s.module,srcToken:r,dstToken:i,fromTokenAmount:c.inputAmount,srcChunkAmount:c.inputAmountPerTrade,triggerPricePerTrade:c.triggerOutputAmountPerTrade,deadline:c.deadlineMillis,fillDelay:c.fillDelayMillis,minDstAmountOutPerTrade:c.minOutputAmountPerTrade,slippage:s.values.slippageBps/100,isMarketOrder:c.isMarketOrder,chunksAmount:c.totalTrades}))},Rt=async e=>{var C,p;const{form:t,walletInteractions:n,callbacks:r,addNewOrder:i,refetchActiveOrders:o,getCurrentExecution:s,beginExecution:c,replaceExecution:u,wait:g=At}=e;let E;try{E=vt(e)}catch(S){const R=J(S),O=Y(S),M=c({account:e.account,partner:(C=e.client)==null?void 0:C.partner,form:t,inputToken:e.inputToken,outputToken:e.outputToken,chainId:e.chainId});throw M&&u(M.executionId,{...M,phase:d.FAILED,error:R,parsedError:O}),T(()=>{var Q;return(Q=r==null?void 0:r.onSubmitOrderFailed)==null?void 0:Q.call(r,O)}),R}const{account:f,chainId:y,inputToken:h,orderInputToken:A,outputToken:v,client:w,inputAmountRaw:N}=E,{analytics:W}=w,U=s(),D=xe({execution:U,account:f,chainId:y,inputTokenAddress:h.address,inputAmountRaw:N}),B=c({account:f,partner:w.partner,form:t,inputToken:h,outputToken:v,chainId:y,completedWrap:D,wrapTxHash:D==null?void 0:D.txHash});if(!B)return;const _=B.executionId;let H=B;const P=(S,R={})=>{const O={...H,...R,executionId:_,phase:S};if(!u(_,O))throw new Error("Execution is no longer current");H=O},I=(S,R={})=>{const O={...H,...R,executionId:_,phase:S};return u(_,O)?(H=O,!0):!1};try{const{order:S}=await a.executeOrder({client:w,account:f,inputTokenAddress:A.address,inputAmountRaw:N,nativeInput:a.isNativeAddress(h.address),completedWrapTxHash:D==null?void 0:D.txHash,walletInteractions:n,wait:g,signal:e.signal,prepareOrder:async()=>{var O;if(t.module===a.Module.SWAP){const M=await w.getQuote({inToken:A.address,outToken:v.address,inAmount:N,user:f,slippage:0,dexMinAmountOut:"-1",signal:e.signal});if((O=e.signal)==null||O.throwIfAborted(),BigInt(M.netAmountOut)<Ce(t.values.minOutputAmountPerTrade,"Minimum output"))throw new a.SpotError("INVALID_QUOTE","Swap price changed. Review a fresh quote before signing.")}return w.prepareOrder({form:t,inputTokenAddress:A.address,outputTokenAddress:v.address,swapperAddress:f})},validateContext:()=>{if(s().executionId!==_)throw new Error("Execution is no longer current")},onUpdate:O=>{const M=O.steps.map(x=>({wrap:k.WRAP,approve:k.APPROVE,create:k.CREATE})[x]),Q=O.phase;P(Q,{pendingSteps:M,totalSteps:M.length,stepIndex:O.stepIndex,hasApproval:O.hasApproval,wrapTxHash:O.wrapTxHash,approveTxHash:O.approvalTxHash,...O.preparedOrder?{preparedOrder:O.preparedOrder}:{},...O.phase==="wrapping"&&O.event==="success"&&O.wrapTxHash?{completedWrap:{account:f,chainId:y,inputTokenAddress:h.address,inputAmountRaw:N,txHash:O.wrapTxHash}}:{}}),O.phase==="wrapping"&&(O.event==="request"&&T(r==null?void 0:r.onWrapRequest),O.event==="success"&&O.wrapTxHash&&T(()=>{var x;return(x=r==null?void 0:r.onWrapSuccess)==null?void 0:x.call(r,{txHash:O.wrapTxHash,amount:a.toAmountUI(O.wrapAmountRaw??N,A.decimals)})})),O.phase==="approving"&&(O.event==="request"&&T(r==null?void 0:r.onApproveRequest),O.event==="success"&&O.approvalTxHash&&T(()=>{var x;return(x=r==null?void 0:r.onApproveSuccess)==null?void 0:x.call(r,{txHash:O.approvalTxHash,token:A,amount:a.toAmountUI(N,A.decimals)})})),O.phase==="signing"&&(O.event==="prepared"&&O.preparedOrder&&(Tt({analytics:W,account:f,chainId:y,inputToken:h,outputToken:v,preparedOrder:O.preparedOrder}),T(r==null?void 0:r.onSignOrderRequest)),O.event==="success"&&O.signature&&T(()=>{var x;return(x=r==null?void 0:r.onSignOrderSuccess)==null?void 0:x.call(r,O.signature)}),O.event==="error"&&T(()=>{var x;return(x=r==null?void 0:r.onSignOrderError)==null?void 0:x.call(r,J(O.error))}))}}),R=t.module===a.Module.SWAP;if(P(R?d.SETTLING:d.SUCCESS,{orderId:S.id.toString(),order:S}),T(()=>i(S)),R||T(()=>o()),T(()=>{var O;return(O=r==null?void 0:r.onOrderCreated)==null?void 0:O.call(r,S)}),R){const O=await e.waitForOrderFill(S,_);return P(d.SUCCESS,{order:O}),O}return S}catch(S){const R=H.phase,O=J(S),Q=!(R===d.SUBMITTING&&((p=e.signal)==null?void 0:p.aborted)&&S===e.signal.reason)&&ce(S,R),x=!Q&&a.isTxRejected(S);throw I(Q?d.UNCONFIRMED:x?d.REJECTED:d.FAILED,{error:O,parsedError:Y(S)}),x?T(r==null?void 0:r.onSubmitOrderRejected):R!==d.SETTLING&&T(()=>{var ve;return(ve=r==null?void 0:r.onSubmitOrderFailed)==null?void 0:ve.call(r,Y(S))}),O}},Lt=()=>{const{data:e}=V(),{inputToken:t,outputToken:n,wrappedNativeToken:r,chainId:i,callbacks:o,account:s,walletInteractions:c}=F(),u=Ye(),g=Ze(),E=G(),f=K(),y=m.useRef(void 0);return m.useEffect(()=>()=>{var h;return(h=y.current)==null?void 0:h.abort()},[s,i,e]),m.useCallback(()=>{if(!ue(f.getState().state.currentExecution.phase))return;const h=new AbortController;y.current=h,Rt({signal:h.signal,account:s,chainId:i,inputToken:t,outputToken:n,wrappedNativeToken:r,form:E,client:e,walletInteractions:c,callbacks:o,addNewOrder:u,refetchActiveOrders:g,waitForOrderFill:(A,v)=>ye({store:f,callbacks:o,order:A,executionId:v,signal:h.signal}),getCurrentExecution:()=>f.getState().state.currentExecution,beginExecution:f.getState().beginExecution,replaceExecution:f.getState().replaceExecution}).catch(()=>{}).finally(()=>{y.current===h&&(y.current=void 0)})},[s,u,o,i,e,E,t,n,r,g,f,c])},bt=()=>{const e=L(r=>r.state.currentExecution),t=L(r=>r.returnToOrderForm),n=m.useCallback(()=>t(e.executionId),[e.executionId,t]);return m.useMemo(()=>({...e,returnToOrderForm:n}),[e,n])},we=e=>{if(typeof e=="number"&&Number.isSafeInteger(e)&&e>=0||typeof e=="string"&&/^\d+$/.test(e))return BigInt(e)},Ae=(e,t)=>{if(e!==null&&typeof e=="object")return t===null||typeof t!="object"?!1:Object.entries(e).every(([i,o])=>Ae(o,Reflect.get(t,i)));const n=we(e),r=we(t);return n!==void 0||r!==void 0?n!==void 0&&n===r:typeof e=="number"||typeof t=="number"?!1:typeof e=="string"&&typeof t=="string"&&/^0x/i.test(e)?e.toLowerCase()===t.toLowerCase():e===t},Nt=(e,t)=>e.find(n=>n.version===2&&"order"in n.rawOrder&&Ae(t,n.rawOrder.order));async function pt({store:e,callbacks:t,signal:n}){var c;const r=e.getState().state.currentExecution;if(r.phase!==d.UNCONFIRMED||r.executionId===void 0)return;const i=r.executionId;let o={...r,phase:d.SETTLING,error:void 0,parsedError:void 0};if(!e.getState().replaceExecution(i,o))return;const s=(u,g={})=>{const E={...o,...g,phase:u};return e.getState().replaceExecution(i,E)?(o=E,!0):!1};try{n.throwIfAborted();let u=o.order;const g=!u;if(!u||u.status===a.OrderStatus.Open&&u.deadline+6e4<=Date.now()){if(!o.account||!o.chainId||!u&&!o.preparedOrder)throw new Error("The original swap status is still unknown. Check its account history before starting another swap.");const f=await a.getOrders({swapper:o.account,chainId:o.chainId,getv1orders:!1,signal:n}),y=u;if(u=y?f.find(h=>h.id.toLowerCase()===y.id.toLowerCase()&&h.chainId===y.chainId&&h.historyKey===y.historyKey):o.preparedOrder&&Nt(f,o.preparedOrder.order),!u)throw new a.OrderSettlementError("The original order has not appeared in history yet. Check its status again before starting another swap.","unconfirmed",o.orderId??"")}if(n.throwIfAborted(),!s(d.SETTLING,{order:u,orderId:u.id}))return;T(()=>Ie(e,u)),g&&T(()=>{var f;return(f=t==null?void 0:t.onOrderCreated)==null?void 0:f.call(t,u)});const E=((c=o.form)==null?void 0:c.module)===a.Module.SWAP?await ye({store:e,callbacks:t,order:u,executionId:i,signal:n}):u;return s(d.SUCCESS,{order:E,orderId:E.id}),E}catch(u){throw s(ce(u,d.SETTLING)?d.UNCONFIRMED:d.FAILED,{error:J(u),parsedError:Y(u)}),u}}const Ft=()=>{const e=K(),{callbacks:t}=F(),n=m.useRef(void 0);return m.useEffect(()=>()=>{var r;return(r=n.current)==null?void 0:r.abort()},[]),m.useCallback(()=>{if(n.current)return;const r=new AbortController;n.current=r,pt({store:e,callbacks:t,signal:r.signal}).catch(()=>{}).finally(()=>{n.current===r&&(n.current=void 0)})},[t,e])},Mt=()=>{const e=bt(),{inputToken:t,outputToken:n,chainId:r,hasChainId:i,module:o,overrides:s}=F(),{data:c,isLoading:u}=V(),g=Lt(),E=Ft(),f=L(N=>N.startNewOrder),y=m.useCallback(()=>g(),[g]),h=m.useCallback(()=>f(Oe({module:o,overrides:s}),e.executionId),[o,s,f,e.executionId]),A=Me(e.phase),v=De(e.phase),w=X(e.phase);return m.useMemo(()=>({phase:e.phase,status:A,error:e.parsedError,currentStep:v,currentStepIndex:e.stepIndex,approvalTxHash:e.approveTxHash,wrapTxHash:e.wrapTxHash,totalSteps:e.totalSteps,executionSteps:e.pendingSteps,inputToken:e.inputToken??t,outputToken:e.outputToken??n,chainId:e.chainId??r,account:e.account,orderId:e.orderId,order:e.order,submitOrder:y,resumeTracking:E,startNewOrder:h,returnToOrderForm:e.returnToOrderForm,isExecuting:w,isSuccess:e.phase===d.SUCCESS,isFailed:e.phase===d.FAILED,isRejected:e.phase===d.REJECTED,isUnconfirmed:e.phase===d.UNCONFIRMED,isPreparingOrder:e.phase===d.PREPARING||i&&u&&!c,canDismiss:!w}),[c,v,t,n,r,u,w,i,h,y,E,A,e])},Dt=()=>{const{inputToken:e,outputToken:t,wrappedNativeToken:n,inputBalanceRaw:r,noLiquidity:i,inputAmountUi:o,marketPriceLoading:s,hasChainId:c}=F(),u=G(),{data:g,isLoading:E}=V(),f=L(N=>N.state.currentExecution.phase),y=X(f),h=!!(e&&a.isNativeAddress(e.address)&&(!n||a.isNativeAddress(n.address))),A=s||!u.isReady&&!u.errors.primary||r===void 0,v=y||c&&E&&!g||!!(e&&t&&o&&A),w=!!(!u.canSubmit||$(f)||!c||!g||i||v||!e||!t||h);return m.useMemo(()=>({disabled:w,loading:v}),[w,v])},xt=()=>{const{inputToken:e,outputToken:t,callbacks:n}=F(),r=L(s=>s.updateState),{trades:i}=G(),o=m.useCallback(s=>{r({tradeCount:s}),T(()=>{var c;return(c=n==null?void 0:n.onTradeCountChange)==null?void 0:c.call(n,s)})},[n,r]);return m.useMemo(()=>({totalTrades:i.totalTrades,maxTrades:i.maxTrades,inputAmountPerTrade:i.inputAmountPerTrade,minOutputAmountPerTrade:i.minOutputAmountPerTrade,triggerOutputAmountPerTrade:i.triggerOutputAmountPerTrade,onChange:o,error:i.error,inputToken:e,outputToken:t}),[e,o,t,i])},jt=()=>{const{marketPriceLoading:e,inputToken:t,outputToken:n,callbacks:r}=F(),{marketPrice:i,trades:o,triggerPrice:s,isInverted:c}=G(),u=L(y=>y.updateState),g=m.useCallback(y=>{u({triggerPriceUi:y,triggerPricePercent:null}),T(()=>{var h;return(h=r==null?void 0:r.onTriggerPriceChange)==null?void 0:h.call(r,y||"")}),T(()=>{var h;return(h=r==null?void 0:r.onTriggerPricePercentChange)==null?void 0:h.call(r,"")})},[r,u]),E=m.useCallback(y=>{u({triggerPriceUi:void 0,triggerPricePercent:y}),T(()=>{var h;return(h=r==null?void 0:r.onTriggerPriceChange)==null?void 0:h.call(r,"")}),T(()=>{var h;return(h=r==null?void 0:r.onTriggerPricePercentChange)==null?void 0:h.call(r,y||"")})},[r,u]),f=m.useCallback(()=>{u({triggerPricePercent:void 0,triggerPriceUi:void 0})},[u]);return m.useMemo(()=>({price:s.display,canonicalPriceRaw:s.raw,outputAmountPerTrade:o.triggerOutputAmountPerTrade,error:s.error,onInputChange:g,onPercentageChange:E,percentage:s.percentage,onReset:f,inputToken:t,outputToken:n,displayInputToken:c?n:t,displayOutputToken:c?t:n,isLoading:!!(e||!i.raw),isTypedValue:s.isTypedValue}),[t,c,i.raw,e,g,E,f,n,o.triggerOutputAmountPerTrade,s])};a.setUIVersion(Le.version),Object.defineProperty(l,"DISCLAIMER_URL",{enumerable:!0,get:()=>a.DISCLAIMER_URL}),Object.defineProperty(l,"InputErrors",{enumerable:!0,get:()=>a.InputErrors}),Object.defineProperty(l,"Module",{enumerable:!0,get:()=>a.Module}),Object.defineProperty(l,"ORBS_LOGO",{enumerable:!0,get:()=>a.ORBS_LOGO}),Object.defineProperty(l,"ORBS_SLTP_FAQ_URL",{enumerable:!0,get:()=>a.ORBS_SLTP_FAQ_URL}),Object.defineProperty(l,"ORBS_TWAP_FAQ_URL",{enumerable:!0,get:()=>a.ORBS_TWAP_FAQ_URL}),Object.defineProperty(l,"ORBS_WEBSITE_URL",{enumerable:!0,get:()=>a.ORBS_WEBSITE_URL}),Object.defineProperty(l,"OrderFilter",{enumerable:!0,get:()=>a.OrderFilter}),Object.defineProperty(l,"OrderSettlementError",{enumerable:!0,get:()=>a.OrderSettlementError}),Object.defineProperty(l,"OrderStatus",{enumerable:!0,get:()=>a.OrderStatus}),Object.defineProperty(l,"OrderType",{enumerable:!0,get:()=>a.OrderType}),Object.defineProperty(l,"Partners",{enumerable:!0,get:()=>a.Partners}),Object.defineProperty(l,"QuoteError",{enumerable:!0,get:()=>a.QuoteError}),Object.defineProperty(l,"SWAP_CAPABILITIES",{enumerable:!0,get:()=>a.SWAP_CAPABILITIES}),Object.defineProperty(l,"SpotError",{enumerable:!0,get:()=>a.SpotError}),Object.defineProperty(l,"TimeUnit",{enumerable:!0,get:()=>a.TimeUnit}),Object.defineProperty(l,"analytics",{enumerable:!0,get:()=>a.analytics}),Object.defineProperty(l,"calculateOrder",{enumerable:!0,get:()=>a.calculateOrder}),Object.defineProperty(l,"calculateOrderForm",{enumerable:!0,get:()=>a.calculateOrderForm}),Object.defineProperty(l,"createClient",{enumerable:!0,get:()=>a.createClient}),Object.defineProperty(l,"eqIgnoreCase",{enumerable:!0,get:()=>a.eqIgnoreCase}),Object.defineProperty(l,"executeOrder",{enumerable:!0,get:()=>a.executeOrder}),Object.defineProperty(l,"getOrderExecutionRate",{enumerable:!0,get:()=>a.getOrderExecutionRate}),Object.defineProperty(l,"getOrderFillDelayMillis",{enumerable:!0,get:()=>a.getOrderFillDelayMillis}),Object.defineProperty(l,"getOrderLimitPriceRate",{enumerable:!0,get:()=>a.getOrderLimitPriceRate}),Object.defineProperty(l,"getOrders",{enumerable:!0,get:()=>a.getOrders}),Object.defineProperty(l,"getQuote",{enumerable:!0,get:()=>a.getQuote}),Object.defineProperty(l,"getTriggerPriceRate",{enumerable:!0,get:()=>a.getTriggerPriceRate}),Object.defineProperty(l,"getTwapConfig",{enumerable:!0,get:()=>a.getTwapConfig}),Object.defineProperty(l,"invertPriceInput",{enumerable:!0,get:()=>a.invertPriceInput}),Object.defineProperty(l,"isNativeAddress",{enumerable:!0,get:()=>a.isNativeAddress}),Object.defineProperty(l,"isQuoteFresh",{enumerable:!0,get:()=>a.isQuoteFresh}),Object.defineProperty(l,"isSwapSupported",{enumerable:!0,get:()=>a.isSwapSupported}),Object.defineProperty(l,"isTxRejected",{enumerable:!0,get:()=>a.isTxRejected}),Object.defineProperty(l,"setUIVersion",{enumerable:!0,get:()=>a.setUIVersion}),Object.defineProperty(l,"submitSwap",{enumerable:!0,get:()=>a.submitSwap}),Object.defineProperty(l,"toAmountRaw",{enumerable:!0,get:()=>a.toAmountRaw}),Object.defineProperty(l,"toAmountUI",{enumerable:!0,get:()=>a.toAmountUI}),Object.defineProperty(l,"waitForOrder",{enumerable:!0,get:()=>a.waitForOrder}),Object.defineProperty(l,"watchOrder",{enumerable:!0,get:()=>a.watchOrder}),l.Disclaimer=z,l.ExecutionPhase=d,l.ExecutionStatus=j,l.SpotProvider=ct,l.Steps=k,l.useAmountUi=dt,l.useCancelOrder=gt,l.useClient=V,l.useDisclaimer=Ot,l.useDuration=St,l.useExecution=Mt,l.useFillDelay=ht,l.useHistoryOrder=Et,l.useInputErrors=It,l.useLimitPrice=yt,l.useOrderForm=G,l.useOrders=Xe,l.useOutputAmount=Ct,l.usePriceDisplay=wt,l.useSubmitButton=Dt,l.useTrades=xt,l.useTriggerPrice=jt,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orbs-network/spot-react",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.24",
|
|
4
4
|
"description": "Spot React Components - React components for Spot SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/spot-react.umd.cjs",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"zustand": "^5.0.9",
|
|
32
|
-
"@orbs-network/spot-ui": "2.1.
|
|
32
|
+
"@orbs-network/spot-ui": "2.1.28"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/react": "^19.0.2",
|