@spicenet-io/spiceflow-ui 3.3.62 → 3.3.64

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spicenet-io/spiceflow-ui",
3
- "version": "3.3.62",
3
+ "version": "3.3.64",
4
4
  "description": "Spiceflow UI SDK",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.13",
@@ -1,2 +0,0 @@
1
- "use client";
2
- import{jsx as N,jsxs as Le}from"react/jsx-runtime";import{useContext as F,useState as j,useEffect as U,useMemo as L,useRef as ie,createContext as de,useCallback as _e}from"react";import{getChainMeta as le,getTokensForChain as je,getDelegateContract as De,ZERO_ADDRESS as ze,isNativeToken as Y,getTokenByAddress as Ge,getChainIdsByNetwork as Je}from"@spicenet-io/spiceflow-core";import{isAddress as R,getAddress as q,defineChain as He,createPublicClient as Ye,http as qe,formatUnits as ce,createWalletClient as Ke,custom as Qe}from"viem";import{readContract as Xe}from"viem/actions";import{useQuery as Ve,useMutation as Ze}from"@tanstack/react-query";import{useWallets as K,usePrivy as Q,getEmbeddedConnectedWallet as X,useSign7702Authorization as et,useSignMessage as tt}from"@privy-io/react-auth";import{useDynamicContext as V}from"@dynamic-labs/sdk-react-core";import{useAccount as ue}from"wagmi";function D(t,e){return!t||!e?!1:R(t)&&R(e)?q(t)===q(e):t.toLowerCase()===e.toLowerCase()}const pe=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],rt="0xcA11bde05977b3631167028862bE2a173976CA11",at={4114:"0x860aFc632a6D625B95d8B96f39ECC48E988c6962"},nt=new Set([5115]);function st(t){const e=at[t.id]??(nt.has(t.id)?void 0:rt);return He({id:t.id,name:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:{default:{http:[t.rpcUrl]}},blockExplorers:{default:{name:t.displayName,url:t.blockExplorer}},testnet:t.network==="testnet",...e?{contracts:{multicall3:{address:e}}}:{}})}const ot=[1,8453,42161,4114,11155111,421614,84532,5115,123420001114,688688,688689],z=Object.fromEntries(ot.map(t=>le(t)).filter(t=>t!=null).map(t=>[t.id,{...t,viemChain:st(t),supportedTokens:je(t.id)}])),it=z;let fe={};const Z=new Map,me=t=>{fe={...t||{}},Z.clear()},ee=t=>{const e=fe[t];return e&&typeof e=="string"&&e.length>0?e:z[t]?.rpcUrl},T=t=>z[t],te=t=>{const e=le(t);return e?.displayName||e?.name||`Chain ${t}`},dt=t=>{const e=De(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);return e},lt=(t,e,r)=>{const a=T(t);return a?.blockExplorer?`${a.blockExplorer}/tx/${e}`:"#"};async function ct(t,e){const r=`0x${e.toString(16)}`;try{await t.request({method:"wallet_switchEthereumChain",params:[{chainId:r}]});return}catch(n){if(!(n?.code===4902||typeof n?.message=="string"&&n.message.includes("Unrecognized chain ID")))throw n}const a=T(e);if(!a)throw new Error(`Cannot add unknown chain ${e} to wallet`);await t.request({method:"wallet_addEthereumChain",params:[{chainId:r,chainName:a.name||`Chain ${e}`,nativeCurrency:a.nativeCurrency||{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:[ee(e)||a.rpcUrl],blockExplorerUrls:a.blockExplorer?[a.blockExplorer]:void 0}]})}const he=t=>{const e=T(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);const r=ee(t);if(!r)throw new Error(`No RPC URL configured for chain ID: ${t}`);const a=`${t}:${r}`,n=Z.get(a);if(n)return n;const s=Ye({chain:e.viemChain,transport:qe(r,{timeout:15e3,retryCount:2,retryDelay:300}),batch:{multicall:{wait:16}}});return Z.set(a,s),s},ut=()=>{const t={};return Object.values(z).forEach(e=>{t[e.id]={name:e.name,moralisName:e.moralisId||"",chain:e.viemChain,rpcUrl:ee(e.id)||e.rpcUrl}}),t},pt=(t,e=[])=>{const r=T(t);if(!r)return[];const a=[];if(![11155111,421614,84532,688689].includes(t)){const s=e.find(l=>l.chainId===t&&l.isNative);s?a.push(s):a.push({address:ze,name:r.nativeCurrency.name,symbol:r.nativeCurrency.symbol,decimals:r.nativeCurrency.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:void 0,isNative:!0,chainId:t})}if(!r.supportedTokens)return a;const n=a.some(s=>s.isNative);return r.supportedTokens.forEach(s=>{if(n&&Y(s.address))return;const l=e.find(o=>o.chainId===t&&D(o.address,s.address));l?a.push(l):a.push({address:s.address,name:s.name,symbol:s.symbol,decimals:s.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:s.logo,isNative:!1,chainId:t})}),a},ft=async(t,e)=>{const r=T(t);if(!r)throw new Error(`Unsupported chain ID: ${t}`);const a=e.toLowerCase();if(Y(a)){if(!r.nativeCurrency?.decimals)throw new Error(`Native currency decimals not configured for chain ${t}`);return r.nativeCurrency.decimals}if(r.supportedTokens){const n=r.supportedTokens.find(s=>D(s.address,a));if(n)return n.decimals}try{if(!R(e,{strict:!1}))throw new Error(`Invalid token address: ${e}`);const n=q(e),s=he(t),l=await Xe(s,{address:n,abi:pe,functionName:"decimals"});return Number(l)}catch{throw new Error(`Could not determine decimals for token ${e} on chain ${t}`)}};class x extends Error{constructor(e,r,a={}){super(r),this.code=e,this.context=a,this.name="SpiceflowError",Error.captureStackTrace&&Error.captureStackTrace(this,x)}}function re(t){return t instanceof x}const mt=["user rejected","user denied","user cancelled","rejected the request","action_rejected","4001"];function ye(t){if(!t)return"";if(typeof t=="string")return t;const e=t,r=e.message||e.reason||"",a=e.details||"";return`${r} ${a}`.trim()}const ge=t=>{if(re(t))return t.code==="WALLET_REJECTED";const e=ye(t).toLowerCase();return mt.some(r=>e.includes(r))},ht=(t,e="Something went wrong. Please try again.")=>ge(t)?"Transaction was rejected.":re(t)?t.message||e:ye(t)||e;function yt(t,e){const r=e.match(/Output amount (\d+) is insufficient after fees (\d+) on chain (\d+)/);if(!r)return e;const[,a,n,s]=r,l=Number(s),o=BigInt(a),f=BigInt(n);let u;for(const p of t.intents){const y=p.chainBatches.find(b=>b.chainId===l);if(y){u=y;break}}const m=u?.tokenTransfers.find(p=>p.from==="escrow"&&D(p.to,t.user)&&!Y(p.token)),c=te(l);if(!m)return`Amount is too small to cover the estimated fee on ${c}.`;const h=Ge(m.token,l),i=h?.decimals??18,g=h?.symbol??"tokens",d=ce(o,i),w=ce(f,i);return`Amount is too small to cover the estimated fee on ${c}. Amount: ${d} ${g}. Estimated fee: ${w} ${g}.`}const gt="https://tx-submission-api.spicenet.io",we=gt;function G(t,e){return typeof e=="bigint"?e.toString():e}function k(t,e){if(!t)return e;const r=t.error;return(typeof t.message=="string"?t.message:"")||(r&&typeof r=="object"&&"message"in r&&typeof r.message=="string"?r.message:"")||(typeof r=="string"?r:"")||e}async function wt(t){try{return await t.json()}catch{return null}}function bt(t){return(Array.isArray(t?.balances)?t.balances:[]).flatMap(e=>{if(!e||typeof e!="object")return[];const r=e;return[{receiptToken:typeof r.receiptToken=="string"?r.receiptToken:void 0,tokenName:String(r.tokenName??""),balanceAvailable:String(r.balanceAvailable??"0"),chainTokens:Array.isArray(r.chainTokens)?r.chainTokens.filter(a=>typeof a=="string"):r.chainTokens&&typeof r.chainTokens=="object"?r.chainTokens:r.chainTokenConfig&&typeof r.chainTokenConfig=="object"?r.chainTokenConfig:void 0,decimals:typeof r.decimals=="number"?r.decimals:void 0,balanceUsd:typeof r.balanceUsd=="number"||typeof r.balanceUsd=="string"?r.balanceUsd:null}]})}class vt{constructor(){this.baseUrl=we}setBaseUrl(e){this.baseUrl=e}getBaseUrl(){return this.baseUrl}async createAction(e){const r=`${this.baseUrl}/actions`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||n.success===!1)throw new x("RELAYER_ERROR",k(n,`Relayer API error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions"});return n}async estimateActionFees(e){const r=`${this.baseUrl}/actions/fees/estimate`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||!n.success||!n.data?.feeEstimate){const s=k(n,`Relayer fee estimate error: ${a.status}`);throw new x("RELAYER_ERROR",yt(e,s),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions/fees/estimate"})}return n.data.feeEstimate}async estimateBatchGas(e){const r=`${this.baseUrl}/actions/gas/estimate`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||!n.success||!n.data?.gasFee)throw new x("RELAYER_ERROR",k(n,`Relayer gas estimate error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions/gas/estimate"});return{gasFee:BigInt(n.data.gasFee),gasQuoteSource:n.data.gasQuoteSource}}async executeStep(e,r,a,n){const s=`${this.baseUrl}/actions/${e}/intents/${r}/steps/${a}`,l=`/actions/${e}/intents/${r}/steps/${a}`,o=3e4,f=new Promise((c,h)=>setTimeout(()=>h(new x("RELAYER_EXECUTE_ERROR",`Execute step request timed out after ${o/1e3}s`,{actionId:e,intentIndex:r,stepIndex:a,endpoint:l})),o)),u=await Promise.race([fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),f]),m=await u.json();if(!u.ok||m.success===!1)throw new x("RELAYER_EXECUTE_ERROR",k(m,`Execute step error: ${u.status}`),{httpStatus:u.status,responseBody:JSON.stringify(m),endpoint:l,actionId:e});if(m?.status==="error"||m?.status==="reverted"){const c=k(m,""),h=c?`: ${c}`:"";throw new x("RELAYER_EXECUTE_ERROR",`Step ${a} previously ${m.status}${h}`,{httpStatus:u.status,responseBody:JSON.stringify(m),endpoint:l,actionId:e,intentIndex:r,stepIndex:a,stepStatus:m.status})}return{success:!0,transactionHash:m.transactionHash}}async checkStepStatus(e,r){const a=e.split("/"),n=a[0],s=a.length>=2?a[1]:"0",l=`${this.baseUrl}/actions/${n}/intents/${s}/steps/${r}`,o=await fetch(l),f=await o.json();if(!o.ok||f.success===!1)throw new x("RELAYER_STATUS_ERROR",k(f,`Intent step status check failed: ${o.status}`),{httpStatus:o.status,responseBody:JSON.stringify(f),endpoint:l,intentId:e});return{success:!0,data:{status:f.status==="error"?"reverted":f.status,transactionHash:f.txid,error:k(f,"")}}}async createWallet(e,r){const a=`${this.baseUrl}/wallets/${e}`,n=await fetch(a,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}),s=await n.json();if(!n.ok||s.success===!1)throw new x("RELAYER_ERROR",k(s,`Create wallet error: ${n.status}`),{httpStatus:n.status,responseBody:JSON.stringify(s),endpoint:`/wallets/${e}`});return s}async getWallet(e){const r=`${this.baseUrl}/wallets/${e}`,a=await fetch(r),n=await a.json();if(!a.ok||n.success===!1)throw new x("RELAYER_ERROR",k(n,`Get wallet error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:`/wallets/${e}`});return n}async createWithdrawal(e){const r=`${this.baseUrl}/withdrawals`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||n.success===!1)throw new x("RELAYER_ERROR",k(n,`Create withdrawal error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/withdrawals"});return n}async getWithdrawal(e){const r=`${this.baseUrl}/withdrawals/${e}`,a=await fetch(r),n=await a.json();if(!a.ok||n.success===!1)throw new x("RELAYER_ERROR",k(n,`Get withdrawal error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:`/withdrawals/${e}`});return n}async getRollupTimestamp(){const e=`${this.baseUrl}/time`,r=await fetch(e),a=await r.json();if(!r.ok||a.success===!1)throw new x("RELAYER_ERROR",k(a,`Get rollup timestamp error: ${r.status}`),{httpStatus:r.status,responseBody:JSON.stringify(a),endpoint:"/time"});return a}}const I=new vt;async function Et(t){const e=`${I.getBaseUrl()}/wallets/${t}/balance`,r=await fetch(e,{cache:"no-store"}),a=await wt(r);if(!r.ok||a?.success===!1)throw new x("RELAYER_ERROR",k(a,`Unable to verify Spice balance: ${r.status}`),{httpStatus:r.status,responseBody:JSON.stringify(a),endpoint:`/wallets/${t}/balance`});return bt(a)}const ae=new Map;async function ne(t,e){const r=t.toLowerCase(),a=ae.get(r);if(a)return a;const n=(async()=>{try{await I.getWallet(t);return}catch{}const{unix_timestamp:s}=await I.getRollupTimestamp(),l=`I am creating a new smart wallet and adding an admin wallet ethereum:0x${t.slice(2).toLowerCase()}. Nonce: ${s}`,o=await e(l),f=typeof o=="string"?o:o.signature;if(!f)throw new Error("Wallet returned no smart wallet signature");await I.createWallet(t,{timestamp:s,signature:f})})();ae.set(r,n);try{await n}finally{ae.delete(r)}}const xt=(t,e)=>{const r=n=>e?e(n):te(n),a=[];return t.forEach((n,s)=>{const l=n.calls&&n.calls.length>0,o=n.tokenTransfers&&n.tokenTransfers.length>0;!l&&!o||a.push({stepId:s,status:s===0?"processing":"pending",chainId:n.chainId,chainName:r(n.chainId),description:"Processing transaction"})}),a},se=t=>{if(!t)return!1;const e=t.connector;if(!e)return!1;if(e.isEmbeddedWallet===!0)return!0;const r=(e.key||e.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const a=(e.name||t.walletName||"").toLowerCase();return!!(a.includes("embedded")||a.includes("turnkey"))},J=t=>(t?.connectedWallets||[]).find(e=>se(e))||(se(t?.primaryWallet)?t.primaryWallet:null),Ct=t=>(t?.connectedWallets||[]).find(e=>e?.address&&e?.connector&&!se(e))||null,be=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getWalletClient=="function"){const r=e===void 0?[void 0]:[String(e),e,void 0];let a=null;for(const n of r)try{const s=await t.getWalletClient(n);if(s)return s}catch(s){a=s}if(a)throw a}if(typeof t.getEthereumProvider=="function"){const r=await t.getEthereumProvider(),a=e?T(e)?.viemChain:void 0;return Ke({account:t.address,chain:a,transport:Qe(r)})}throw new Error("Wallet client not available")},ve=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getEthereumProvider=="function")return t.getEthereumProvider();const r=await be(t,e);return{request:a=>r.request(a)}},Bt=(t,e)=>({address:t?.address||e.address,chainId:Number(t?.chainId??e.chainId),contractAddress:t?.contractAddress||t?.delegate||e.contractAddress,nonce:BigInt(t?.nonce??e.nonce),r:t?.r,s:t?.s,yParity:(()=>{if(typeof t?.yParity=="number")return t.yParity;const r=Number(t?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()}),Ee=t=>{const e=t?.wallet;if(e?.address&&e.walletClientType==="privy"&&e.connectorType==="embedded"&&!e.imported)return e.address},S=t=>t?.address?{address:t.address,wallet:t,getWalletClient:e=>be(t,e),getEthereumProvider:e=>ve(t,e)}:null,xe=()=>{const t=F(W),{address:e,connector:r}=ue();let a=null,n=null;try{a=K(),{user:n}=Q()}catch{a=null,n=null}let s=null;try{s=V()}catch{s=null}const l=a?.wallets||[],o=X(l),f=o?.address?.toLowerCase(),u=l.find($=>$.connectorType!=="embedded"&&$.address?.toLowerCase()!==f),m=J(s),c=Ct(s),h=m?.address?.toLowerCase(),i=e?.toLowerCase(),g=e&&r&&!(i&&(f&&i===f||h&&i===h))?{address:e,connector:r,getEthereumProvider:()=>r.getProvider()}:null,d=e&&r?{address:e,connector:r,getEthereumProvider:()=>r.getProvider()}:null,w=t?.provider,p=S(o)||S(m),y=S(g)||S(u)||S(c)||null,b=w==="dynamic"?S(m):w==="privy"?S(o):p,v=w==="dynamic"?S(g)||S(c):w==="privy"?S(g)||S(u):y,B=w==="dynamic"?b?.address:w==="privy"?b?.address||Ee(n):p?.address||Ee(n),E=S(d)||v;return{embeddedWallet:b,externalWallet:v,embeddedAddress:B,externalAddress:v?.address,activeWallet:E,activeAddress:E?.address}},$t=()=>{const[t,e]=j(!1);let r=null,a=null;try{r=V()}catch(i){a=i instanceof Error?i.message:String(i)}if(U(()=>{e(!0)},[]),a)return{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:"dynamic",actions:{signAuthorization:async()=>{throw new Error("Dynamic context not available")},signMessage:async()=>{throw new Error("Dynamic context not available")},getEthereumProvider:async()=>{throw new Error("Dynamic context not available")}}};const{user:n,primaryWallet:s,connectedWallets:l}=r||{},o=J({connectedWallets:l,primaryWallet:s})||s,f=!!n,u=o?.address,m={isReady:t&&!!r,isAuthenticated:f,isConnected:f&&!!u,address:u,provider:"dynamic"},c=async i=>{if(!o)throw new Error("Dynamic embedded wallet not available");const{isEthereumWallet:g}=await import("@dynamic-labs/ethereum");if(!g(o))throw new Error("Embedded wallet is not an Ethereum wallet");const d=await o.getWalletClient();if(!d)throw new Error("Dynamic wallet client not available");return{signature:await d.signMessage({message:i,account:o.address})}},h=async()=>{if(!u)throw new Error("Dynamic embedded wallet not available");await ne(u,c)};return{...m,actions:{signAuthorization:async i=>{if(!o)throw new Error("Dynamic embedded wallet not available");await h();const{isEthereumWallet:g}=await import("@dynamic-labs/ethereum");if(!g(o))throw new Error("Embedded wallet is not an Ethereum wallet");const d=o.connector,w={address:o.address,chainId:i.chainId,contractAddress:i.contractAddress,nonce:i.nonce},p={address:i.contractAddress,chainId:i.chainId,nonce:i.nonce},y=typeof d?.getWaasWalletClient=="function"?await d.getWaasWalletClient():null;if(y&&typeof y.signRawMessage=="function"){const{hashAuthorization:b}=await import("viem/experimental"),{parseSignature:v}=await import("viem"),B={address:i.contractAddress,chainId:i.chainId,nonce:i.nonce},E=d.getSignedSessionId,$=typeof E=="function"?await E.call(d):void 0,A=d.getAuthToken,_=typeof A=="function"?A.call(d):void 0,C=await y.signRawMessage({accountAddress:o.address,authToken:_,context:{eip7702Auth:B},message:b(B).slice(2),signedSessionId:$}),P=v(C);return{address:w.contractAddress,chainId:w.chainId,contractAddress:w.contractAddress,nonce:BigInt(w.nonce),r:P.r,s:P.s,yParity:Number(P.yParity)}}if(typeof d?.signAuthorization=="function"){typeof d.switchNetwork=="function"&&await d.switchNetwork({networkChainId:i.chainId});const b=await d.signAuthorization(p);return Bt(b,w)}throw new Error("Dynamic embedded wallet does not support EIP-7702 authorization. Ensure @dynamic-labs packages are v4.15+.")},signMessage:async i=>{if(!(typeof i=="object"&&"raw"in i))return c(i);if(await h(),!o)throw new Error("Dynamic embedded wallet not available");const g=await o.getWalletClient();if(!g)throw new Error("Dynamic wallet client not available");return{signature:await g.signMessage({message:{raw:i.raw},account:o.address})}},getEthereumProvider:async()=>{if(!o)throw new Error("Dynamic embedded wallet not available");const{isEthereumWallet:i}=await import("@dynamic-labs/ethereum");if(!i(o))throw new Error("Embedded wallet is not an Ethereum wallet");return ve(o)}}}},kt=t=>{const e=t?.wallet;if(e?.address&&e.walletClientType==="privy"&&e.connectorType==="embedded"&&!e.imported)return e.address},Ce=()=>{const t=F(W),e=t?.mode||"7702";let r=null,a=null;try{r=K(),{user:a}=Q()}catch{r=null}const n=X(r?.wallets||[])?.address,s=kt(a);let l=null;try{l=V()}catch{l=null}const o=(J(l)||l?.primaryWallet)?.address;if(!(!t||e!=="7702"))return t.provider==="privy"?n??s:t.provider==="dynamic"?o:n??s??o},St=()=>{const t=F(W)?.mode,{isConnected:e,address:r}=ue();let a=null,n=null,s=null,l=null,o=null;try{a=Q(),n=et(),s=tt(),l=K()}catch(p){o=p instanceof Error?p.message:String(p)}if(o)return t==="ondemand"&&e&&r?{isReady:!0,isAuthenticated:!0,isConnected:!0,address:r,provider:"privy",actions:{signAuthorization:async()=>{throw new Error("Not available in ondemand mode")},signMessage:async()=>{throw new Error("Not available in ondemand mode")},getEthereumProvider:async()=>{throw new Error("Not available in ondemand mode")}}}:{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:null,actions:{signAuthorization:async()=>{throw new Error("Privy not available")},signMessage:async()=>{throw new Error("Privy not available")},getEthereumProvider:async()=>{throw new Error("Privy not available")}}};const{ready:f=!1,authenticated:u=!1}=a||{},m=Ce(),c=X(l?.wallets||[]),h=m||c?.address,i=!!h&&!!c,g={isReady:t==="ondemand"?!0:f,isAuthenticated:t==="ondemand"?!0:u||i,isConnected:t==="ondemand"?e&&!!r||f&&(u||i)&&i:f&&i,address:t==="ondemand"&&!m&&e?r:h,provider:"privy"},d=async p=>{if(s)try{return{signature:(await s.signMessage({message:p})).signature}}catch(B){if(!c)throw B}if(!c)throw new Error("Privy sign message not available");const y=await c.getEthereumProvider(),{createWalletClient:b,custom:v}=await import("viem");return{signature:await b({account:c.address,transport:v(y)}).signMessage({account:c.address,message:p})}},w=async()=>{if(!h)throw new Error("Embedded wallet not available for smart wallet setup");await ne(h,d)};return{...g,actions:{signAuthorization:async p=>{if(!n)throw new Error("Privy sign authorization not available");try{await w();const y=await n.signAuthorization({contractAddress:p.contractAddress,chainId:p.chainId,nonce:p.nonce},{address:h});return delete y.v,y}catch(y){const b=typeof y?.message=="string"?y.message:String(y?.message??y??"");throw b.includes("not configured")||b.includes("chain")?new Error(`Chain ${p.chainId} is not configured in PrivyProvider. Add this chain to your Privy dashboard or supportedChainIds.`):y}},signMessage:async p=>{if(typeof p=="object"&&"raw"in p){if(await w(),!c)throw new Error("Embedded wallet not available for raw signing");const y=await c.getEthereumProvider(),{createWalletClient:b,custom:v}=await import("viem");return{signature:await b({account:c.address,transport:v(y)}).signMessage({account:c.address,message:p})}}return d(p)},getEthereumProvider:async()=>{if(!c)throw new Error("Embedded wallet not available");return c.getEthereumProvider()}}}},Be=()=>{const t=F(W)?.provider,e=St(),r=$t();return t==="privy"?e:t==="dynamic"?r:{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:null,actions:{signAuthorization:async()=>{throw new Error("No wallet provider available")},signMessage:async()=>{throw new Error("No wallet provider available")},getEthereumProvider:async()=>{throw new Error("No wallet provider available")}}}},It="https://portal-api.spicenet.io/api/v1",oe=t=>t.replace(/\/+$/,""),At="spiceflow:linked-wallet",$e=t=>`${At}:${t.campaignId}:${t.campaignGroup}:${t.partnerId}`,ke=(t,e)=>`${t}:${e}`;function Rt(t){try{return window.localStorage.getItem(t)}catch{return null}}function Tt(t,e){try{window.localStorage.setItem(t,e)}catch{}}async function Wt(t,e){const r=new URLSearchParams({walletAddress:e,campaignId:"spicenet-portal",campaignGroup:"1"}),a=await fetch(`${t}/portal/mainnet/linked-portal-wallet?${r.toString()}`,{cache:"no-store"});return a.ok?(await a.json()).portalWalletAddress?.toLowerCase()??null:null}async function Pt(t,e,r){const a=new URLSearchParams({walletAddress:e,campaignId:r.campaignId,campaignGroup:r.campaignGroup,partnerId:r.partnerId}),n=await fetch(`${t}/portal/mainnet/whitelist/check?${a.toString()}`,{cache:"no-store"});if(!n.ok)throw new Error(`Failed to check whitelist: ${n.status}`);return await n.json()}async function Nt(t,e,r,a){const n=await fetch(`${t}/portal/mainnet/link-wallet`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({campaignId:e.campaignId,campaignGroup:e.campaignGroup,partnerId:e.partnerId,externalWalletAddress:r,embeddedWalletAddress:a})});if(!n.ok)throw new Error(`Failed to link wallet: ${n.status}`)}function Se({walletAddress:t,campaignId:e,campaignGroup:r,partnerId:a,apiBaseUrl:n=It,enabled:s=!0,staleTime:l=5*60*1e3,refetchInterval:o=!1}={}){const{isAuthenticated:f,isConnected:u}=Be(),{externalAddress:m,embeddedAddress:c}=xe(),h=t??m,i=typeof h=="string"?h.toLowerCase():void 0,g=typeof c=="string"?c.toLowerCase():void 0,d=s&&f&&u&&!!m&&!!i&&R(i)&&!!e&&!!r&&!!a,w=L(()=>["partner-whitelist","check",i,e,r,a,oe(n)],[i,e,r,a,n]),p=Ve({queryKey:w,enabled:d,staleTime:l,refetchInterval:o,queryFn:async()=>{if(!i||!R(i))throw new Error("A valid wallet address is required");if(!e||!r||!a)throw new Error("campaignId, campaignGroup, and partnerId are required");const E=oe(n),$={campaignId:e,campaignGroup:r,partnerId:a},A=await Wt(E,i);return A?Pt(E,A,$):{walletAddress:i,campaignId:e,campaignGroup:r,partnerId:a,isWhitelisted:!1,isLinkedWallet:!1,whitelistedWalletAddress:null,externalWalletAddress:i}}}),y=s&&f&&u&&!!i&&R(i)&&!!g&&R(g)&&!!e&&!!r&&!!a,b=Ze({mutationFn:E=>Nt(oe(n),{campaignId:e,campaignGroup:r,partnerId:a},E.external,E.embedded),onSuccess:(E,$)=>{!e||!r||!a||Tt($e({campaignId:e,campaignGroup:r,partnerId:a}),ke($.external,$.embedded))}}),v=ie(null),B=b.mutate;return U(()=>{if(!y||!i||!g||!e||!r||!a)return;const E=ke(i,g);if(v.current===E)return;const $=$e({campaignId:e,campaignGroup:r,partnerId:a});if(Rt($)===E){v.current=E;return}v.current=E,B({external:i,embedded:g})},[y,i,g,e,r,a,B]),{isWhitelisted:p.data?.isWhitelisted??!1,whitelistCheck:p.data,checkedWalletAddress:i,externalWalletAddress:m,embeddedWalletAddress:c,isExternalWalletConnected:!!m,isWhitelistCheckEnabled:d,linkWallet:b,isWalletLinked:b.isSuccess,...p}}const Ie="spiceflow-mode",Ae=()=>{if(typeof window>"u")return null;try{const t=window.localStorage.getItem(Ie);return t==="7702"?"7702":t==="non7702"?"ondemand":t==="embedded"?"7702":t==="external"?"ondemand":null}catch{return null}},Ut=t=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Ie,t==="7702"?"7702":"non7702")}catch{}},Mt=()=>Ae()!==null,Re=de(null),Ot=["__spicenet_whitelist_blocked__"],W=de(null),Ft=({children:t,value:e,whitelist:r})=>{const a=r!==!1&&!!r&&r.enabled!==!1,n=Se(a?r:{enabled:!1}),s=a&&n.isWhitelistCheckEnabled&&n.isSuccess,l=a&&(!s||!n.isWhitelisted),o=L(()=>({...e,allowedTokens:l?Ot:e.allowedTokens,mode:l?"ondemand":e.mode,isUserWhitelisted:s?n.isWhitelisted:null,isWhitelistChecking:a&&n.isWhitelistCheckEnabled&&(n.isLoading||n.isFetching),isWhitelistConfigured:a,isWhitelistGateActive:l,whitelistCheck:n.whitelistCheck}),[e,a,l,s,n.isWhitelisted,n.isWhitelistCheckEnabled,n.isLoading,n.isFetching,n.whitelistCheck]);return N(W.Provider,{value:o,children:t})},Lt=({children:t,provider:e,supportedChainIds:r,allowedTokens:a,network:n="testnet",mode:s,skipFlow:l=[],nativeChainId:o,appName:f="Spicenet",apiUrl:u,theme:m,rpcOverrides:c,whitelist:h})=>{U(()=>{if(!u)return;const v=I.getBaseUrl();return I.setBaseUrl(u),()=>I.setBaseUrl(v)},[u]),U(()=>(me(c),()=>me(void 0)),[c]);const i=L(()=>Je(n),[n]),g=r??i,d=m??null,[w,p]=j(()=>s??Ae()??"7702");U(()=>{s&&p(s)},[s]);const y=_e(v=>{if(s){p(s);return}p(v),Ut(v)},[s]),b=L(()=>({provider:e,supportedChainIds:g,allowedTokens:a,skipFlow:l,mode:w,setMode:y,network:n,nativeChainId:o,appName:f,apiUrl:u,rpcOverrides:c,isUserWhitelisted:null,isWhitelistChecking:!1,isWhitelistConfigured:!1,isWhitelistGateActive:!1}),[e,g,a,l,w,y,n,o,f,u,c]);return N(Re.Provider,{value:d,children:N(W.Provider,{value:b,children:N(Ft,{value:b,whitelist:h,children:t})})})},_t={spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},typography:{fontFamily:'"Helvetica Neue", sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.75rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700}},shadows:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1)"},animation:{fast:"150ms ease-in-out",normal:"200ms ease-in-out",slow:"300ms ease-in-out"}},jt={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#f3f4f6",background:"#ffffff",surface:"#f9fafb",surfaceHover:"#f3f4f6",border:"#e5e7eb",borderHover:"#d1d5db",text:"#111827",textSecondary:"#374151",textMuted:"#6b7280",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Dt={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#171717",background:"#141414",surface:"#1e1e1e",surfaceHover:"#2a2a2a",border:"#2d2d2d",borderHover:"#3a3a3a",text:"#ffffff",textSecondary:"#888888",textMuted:"#666666",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Te=(t="light")=>({mode:t,..._t,colors:t==="light"?jt:Dt});function H(t,e){const r=t.replace("#",""),a=Math.max(0,Math.round(parseInt(r.substring(0,2),16)*(1-e))),n=Math.max(0,Math.round(parseInt(r.substring(2,4),16)*(1-e))),s=Math.max(0,Math.round(parseInt(r.substring(4,6),16)*(1-e)));return`#${a.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`}function zt(t,e){return{shell:e?.shell??"#141414",shellBorder:e?.shellBorder??H(e?.shell??"#141414",.35),shellInnerBorder:e?.shellInnerBorder??H(e?.shell??"#141414",.55),cardBg:e?.cardBg??"#1e1e1e",inputBg:e?.inputBg??"#171717",hoverBg:e?.hoverBg??"#2a2a2a",textPrimary:e?.textPrimary??"#ffffff",textSecondary:e?.textSecondary??"#888888",inputText:e?.inputText??"#e0e0e0",inputPlaceholder:e?.inputPlaceholder??"#555555",cardBorder:e?.cardBorder??"rgba(255,255,255,0.08)",inputBorder:e?.inputBorder??"rgba(255,255,255,0.10)",buttonBorder:e?.buttonBorder??"rgba(255,255,255,0.12)",successBg:e?.successBg??"#0a1f18",successBorder:e?.successBorder??"#1a4a3a",successText:e?.successText??"#6ee7b7",warningBg:e?.warningBg??"#1f1a0d",warningBorder:e?.warningBorder??"#4a3820",warningText:e?.warningText??"#fbbf24",errorBg:e?.errorBg??"#1f0d0d",errorBorder:e?.errorBorder??"#4a2020",errorText:e?.errorText??"#f87171",infoBg:e?.infoBg??"#0d1325",infoBorder:e?.infoBorder??"#2a3a5a",infoText:e?.infoText??"#60a5fa"}}function Gt(t){return{shell:"#ffffff",shellBorder:"#E9E9E9",shellInnerBorder:"#D5D5D5",cardBg:"#f9fafb",inputBg:"#ffffff",hoverBg:"#f3f4f6",textPrimary:"#111827",textSecondary:"#6b7280",inputText:"#111827",inputPlaceholder:"#9ca3af",cardBorder:"#e5e7eb",inputBorder:"#d1d5db",buttonBorder:"#0e0d0b",successBg:"#d1fae5",successBorder:"#6ee7b7",successText:"#065f46",warningBg:"#fef3c7",warningBorder:"#fde68a",warningText:"#92400e",errorBg:"#fef2f2",errorBorder:"#fecaca",errorText:"#dc2626",infoBg:"#dbeafe",infoBorder:"#93c5fd",infoText:"#1e40af"}}function We(t,e){const r=e?{...t,...e}:t,a=r.dark??!1,n=r.primaryColor,s=r.shell??(a?"#141414":"#ffffff");return{primaryColor:n,dark:a,fontFamily:r.fontFamily??'"Helvetica Neue", sans-serif',appName:r.appName??"Spicenet",logo:r.logo,borderRadius:r.borderRadius??"8px",shell:s,shellBorder:H(s,a?.35:.085),shellInnerBorder:H(s,a?.55:.165),card:r.card??(a?"#1e1e1e":"#f9fafb"),input:a?"#171717":"#ffffff",hover:a?"#2a2a2a":"#f3f4f6",text:r.text??(a?"#ffffff":"#111827"),textMuted:r.textMuted??(a?"#888888":"#6b7280"),inputText:a?"#e0e0e0":"#111827",inputPlaceholder:a?"#555555":"#9ca3af",border:r.border??(a?"rgba(255,255,255,0.08)":"#e5e7eb"),inputBorder:a?"rgba(255,255,255,0.10)":"#d1d5db",buttonBorder:a?"rgba(255,255,255,0.12)":"#0e0d0b",successBg:a?"#0a1f18":"#d1fae5",successBorder:a?"#1a4a3a":"#6ee7b7",successText:a?"#6ee7b7":"#065f46",warningBg:a?"#1f1a0d":"#fef3c7",warningBorder:a?"#4a3820":"#fde68a",warningText:a?"#fbbf24":"#92400e",errorBg:a?"#1f0d0d":"#fef2f2",errorBorder:a?"#4a2020":"#fecaca",errorText:a?"#f87171":"#dc2626",infoBg:a?"#0d1325":"#dbeafe",infoBorder:a?"#2a3a5a":"#93c5fd",infoText:a?"#60a5fa":"#1e40af"}}const Jt='"IBM Plex Mono", monospace';function Pe(t,e){const r=F(Re)??void 0;return L(()=>{const a=r??{primaryColor:"#EA4B4B"},n={...t?.primaryColor?{primaryColor:t.primaryColor}:{},...t?.fontFamily?{fontFamily:t.fontFamily}:{},...e!==void 0?{dark:e}:{}},s=We(a,n),{dark:l,primaryColor:o,appName:f}=s,u=Te(l?"dark":"light"),m={...u,colors:{...u.colors,primary:o,primaryHover:`${o}dd`},typography:{...u.typography,fontFamily:s.fontFamily}},c={shell:s.shell,shellBorder:s.shellBorder,shellInnerBorder:s.shellInnerBorder,cardBg:s.card,inputBg:s.input,hoverBg:s.hover,textPrimary:s.text,textSecondary:s.textMuted,inputText:s.inputText,inputPlaceholder:s.inputPlaceholder,cardBorder:s.border,inputBorder:s.inputBorder,buttonBorder:s.buttonBorder,successBg:s.successBg,successBorder:s.successBorder,successText:s.successText,warningBg:s.warningBg,warningBorder:s.warningBorder,warningText:s.warningText,errorBg:s.errorBg,errorBorder:s.errorBorder,errorText:s.errorText,infoBg:s.infoBg,infoBorder:s.infoBorder,infoText:s.infoText},h=t?.inputVariant?t.inputVariant==="dark":l;return{brand:r,theme:m,dark:l,appName:f,primaryColor:o,dk:c,palette:c,fontFamily:s.fontFamily,monoFont:Jt,inputDark:h,cardBg:h?c.cardBg:"#E9E9E9",cardBorder:h?c.cardBorder:"#C6C6C6",textPrimary:c.textPrimary,textSecondary:c.textSecondary,subtitleText:h?c.textSecondary:"#979AA0"}},[r,t,e])}const Ne="spiceflow-spinner-keyframes";function Ht(){if(typeof document>"u"||document.getElementById(Ne))return;const t=document.createElement("style");t.id=Ne,t.textContent="@keyframes spiceflow-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",document.head.appendChild(t)}const Ue=({size:t=16,borderWidth:e=2,color:r="currentColor",style:a})=>{const n=ie(!1);return U(()=>{n.current||(Ht(),n.current=!0)},[]),N("div",{role:"status","aria-label":"Loading",style:{width:`${t}px`,height:`${t}px`,border:`${e}px solid ${r}`,borderTop:`${e}px solid transparent`,borderRadius:"50%",animation:"spiceflow-spin 1s linear infinite",flexShrink:0,...a}})},Yt=({variant:t="primary",size:e="md",loading:r=!1,fullWidth:a=!1,disabled:n,children:s,className:l="",style:o,theme:f,styles:u,dark:m,...c})=>{const{theme:h,dark:i,palette:g}=Pe(u,m),d=f||h,w=m??i,[p,y]=j(!1),[b,v]=j(!1),B=w?g.shell:"white",E=()=>{switch(t){case"primary":return{backgroundColor:u?.button?.backgroundColor||d.colors.primary,color:u?.button?.color||"#ffffff",border:`1px solid ${u?.button?.backgroundColor||d.colors.primary}`};case"secondary":return{backgroundColor:d.colors.secondary,color:d.colors.text,border:`1px solid ${d.colors.border}`};case"success":return{backgroundColor:d.colors.success,color:d.colors.text,border:`1px solid ${d.colors.success}`};case"error":return{backgroundColor:d.colors.error,color:d.colors.text,border:`1px solid ${d.colors.error}`};case"ghost":return{backgroundColor:"transparent",color:d.colors.textSecondary,border:`1px solid ${d.colors.border}`};case"outline":{const C=u?.button?.backgroundColor||d.colors.primary,P=u?.button?.color||(w?"#ffffff":"#0e0d0b"),M=u?.button?.borderColor||(w?`${d.colors.primary}88`:"#0e0d0b"),O=n||r,Me=w?"1px":"1.5px",Oe=u?.button?.disabledBackgroundColor||`${C}88`,Fe=u?.button?.disabledColor||P;return{height:"56px",backgroundColor:O?Oe:b?`${C}cc`:p?`${C}ee`:C,color:O?Fe:P,border:`${Me} solid ${M}`,borderRadius:u?.button?.borderRadius||"12px",fontSize:"22px",fontWeight:500,fontFamily:'"IBM Plex Mono", monospace',opacity:O?.78:1,transform:O?"none":b?"scale(0.98)":p?"translateY(-2px)":"none",boxShadow:O?`3px 3px 0px ${B}, 4px 4px 0px ${M}`:b?`2px 2px 0px ${M}`:p?`5px 5px 0px ${B}, 6px 6px 0px ${M}`:`3px 3px 0px ${B}, 4px 4px 0px ${M}`,transition:"transform 150ms ease, box-shadow 150ms ease, background-color 150ms ease, border-color 150ms ease, color 150ms ease"}}default:return{}}},$=()=>{if(t==="outline")return{};switch(e){case"sm":return{padding:`${d.spacing.sm} ${d.spacing.md}`,fontSize:d.typography.fontSize.sm};case"md":return{padding:`${d.spacing.md} ${d.spacing.lg}`,fontSize:d.typography.fontSize.base};case"lg":return{padding:`${d.spacing.lg} ${d.spacing.xl}`,fontSize:d.typography.fontSize.lg};default:return{}}},A={borderRadius:u?.button?.borderRadius||d.borderRadius.md,fontWeight:u?.button?.fontWeight||d.typography.fontWeight.medium,fontFamily:u?.button?.fontFamily||d.typography.fontFamily,fontSize:u?.button?.fontSize||void 0,transition:"background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease",cursor:n||r?"not-allowed":"pointer",opacity:(n||r)&&t!=="outline"?.6:1,width:a?"100%":"auto",display:"flex",alignItems:"center",justifyContent:"center",gap:d.spacing.sm,...E(),...$(),...u?.button?.fontSize&&{fontSize:u.button.fontSize}},_=n||r;return Le("button",{type:c.type??"button","data-spiceflow-focus":!0,"aria-busy":r||void 0,"aria-disabled":_||void 0,style:{...A,...o},className:l,disabled:_,onMouseEnter:C=>{y(!0),c.onMouseEnter?.(C)},onMouseLeave:C=>{y(!1),v(!1),c.onMouseLeave?.(C)},onMouseDown:C=>{v(!0),c.onMouseDown?.(C)},onMouseUp:C=>{v(!1),c.onMouseUp?.(C)},...c,children:[r&&N(Ue,{size:16}),s]})};export{re as A,Yt as B,it as C,Lt as D,Se as E,We as F,zt as G,Gt as H,we as R,Ue as S,ut as a,T as b,Te as c,he as d,te as e,W as f,J as g,lt as h,ge as i,pe as j,D as k,ct as l,dt as m,ft as n,xt as o,Be as p,xe as q,I as r,ht as s,Ce as t,Pe as u,pt as v,x as w,Et as x,Mt as y,ne as z};
@@ -1,2 +0,0 @@
1
- "use client";
2
- "use strict";var We=Object.create;var re=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Oe=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ne(e))!Me.call(t,n)&&n!==r&&re(t,n,{get:()=>e[n],enumerable:!(a=Pe(e,n))||a.enumerable});return t};var N=(t,e,r)=>(r=t!=null?We(Ue(t)):{},Oe(e||!t||!t.__esModule?re(r,"default",{value:t,enumerable:!0}):r,t));const U=require("react/jsx-runtime"),E=require("react"),T=require("@spicenet-io/spiceflow-core"),C=require("viem"),Fe=require("viem/actions"),ae=require("@tanstack/react-query"),R=require("@privy-io/react-auth"),H=require("@dynamic-labs/sdk-react-core"),ne=require("wagmi");function D(t,e){return!t||!e?!1:C.isAddress(t)&&C.isAddress(e)?C.getAddress(t)===C.getAddress(e):t.toLowerCase()===e.toLowerCase()}const se=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],je="0xcA11bde05977b3631167028862bE2a173976CA11",Le={4114:"0x860aFc632a6D625B95d8B96f39ECC48E988c6962"},_e=new Set([5115]);function De(t){const e=Le[t.id]??(_e.has(t.id)?void 0:je);return C.defineChain({id:t.id,name:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:{default:{http:[t.rpcUrl]}},blockExplorers:{default:{name:t.displayName,url:t.blockExplorer}},testnet:t.network==="testnet",...e?{contracts:{multicall3:{address:e}}}:{}})}const ze=[1,8453,42161,4114,11155111,421614,84532,5115,123420001114,688688,688689],z=Object.fromEntries(ze.map(t=>T.getChainMeta(t)).filter(t=>t!=null).map(t=>[t.id,{...t,viemChain:De(t),supportedTokens:T.getTokensForChain(t.id)}])),Ge=z;let oe={};const Y=new Map,ie=t=>{oe={...t||{}},Y.clear()},Q=t=>{const e=oe[t];return e&&typeof e=="string"&&e.length>0?e:z[t]?.rpcUrl},M=t=>z[t],K=t=>{const e=T.getChainMeta(t);return e?.displayName||e?.name||`Chain ${t}`},qe=t=>{const e=T.getDelegateContract(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);return e},Je=(t,e,r)=>{const a=M(t);return a?.blockExplorer?`${a.blockExplorer}/tx/${e}`:"#"};async function He(t,e){const r=`0x${e.toString(16)}`;try{await t.request({method:"wallet_switchEthereumChain",params:[{chainId:r}]});return}catch(n){if(!(n?.code===4902||typeof n?.message=="string"&&n.message.includes("Unrecognized chain ID")))throw n}const a=M(e);if(!a)throw new Error(`Cannot add unknown chain ${e} to wallet`);await t.request({method:"wallet_addEthereumChain",params:[{chainId:r,chainName:a.name||`Chain ${e}`,nativeCurrency:a.nativeCurrency||{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:[Q(e)||a.rpcUrl],blockExplorerUrls:a.blockExplorer?[a.blockExplorer]:void 0}]})}const de=t=>{const e=M(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);const r=Q(t);if(!r)throw new Error(`No RPC URL configured for chain ID: ${t}`);const a=`${t}:${r}`,n=Y.get(a);if(n)return n;const s=C.createPublicClient({chain:e.viemChain,transport:C.http(r,{timeout:15e3,retryCount:2,retryDelay:300}),batch:{multicall:{wait:16}}});return Y.set(a,s),s},Ye=()=>{const t={};return Object.values(z).forEach(e=>{t[e.id]={name:e.name,moralisName:e.moralisId||"",chain:e.viemChain,rpcUrl:Q(e.id)||e.rpcUrl}}),t},Qe=(t,e=[])=>{const r=M(t);if(!r)return[];const a=[];if(![11155111,421614,84532,688689].includes(t)){const s=e.find(l=>l.chainId===t&&l.isNative);s?a.push(s):a.push({address:T.ZERO_ADDRESS,name:r.nativeCurrency.name,symbol:r.nativeCurrency.symbol,decimals:r.nativeCurrency.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:void 0,isNative:!0,chainId:t})}if(!r.supportedTokens)return a;const n=a.some(s=>s.isNative);return r.supportedTokens.forEach(s=>{if(n&&T.isNativeToken(s.address))return;const l=e.find(o=>o.chainId===t&&D(o.address,s.address));l?a.push(l):a.push({address:s.address,name:s.name,symbol:s.symbol,decimals:s.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:s.logo,isNative:!1,chainId:t})}),a},Ke=async(t,e)=>{const r=M(t);if(!r)throw new Error(`Unsupported chain ID: ${t}`);const a=e.toLowerCase();if(T.isNativeToken(a)){if(!r.nativeCurrency?.decimals)throw new Error(`Native currency decimals not configured for chain ${t}`);return r.nativeCurrency.decimals}if(r.supportedTokens){const n=r.supportedTokens.find(s=>D(s.address,a));if(n)return n.decimals}try{if(!C.isAddress(e,{strict:!1}))throw new Error(`Invalid token address: ${e}`);const n=C.getAddress(e),s=de(t),l=await Fe.readContract(s,{address:n,abi:se,functionName:"decimals"});return Number(l)}catch{throw new Error(`Could not determine decimals for token ${e} on chain ${t}`)}};class S extends Error{constructor(e,r,a={}){super(r),this.code=e,this.context=a,this.name="SpiceflowError",Error.captureStackTrace&&Error.captureStackTrace(this,S)}}function X(t){return t instanceof S}const Xe=["user rejected","user denied","user cancelled","rejected the request","action_rejected","4001"];function le(t){if(!t)return"";if(typeof t=="string")return t;const e=t,r=e.message||e.reason||"",a=e.details||"";return`${r} ${a}`.trim()}const ce=t=>{if(X(t))return t.code==="WALLET_REJECTED";const e=le(t).toLowerCase();return Xe.some(r=>e.includes(r))},Ve=(t,e="Something went wrong. Please try again.")=>ce(t)?"Transaction was rejected.":X(t)?t.message||e:le(t)||e;function Ze(t,e){const r=e.match(/Output amount (\d+) is insufficient after fees (\d+) on chain (\d+)/);if(!r)return e;const[,a,n,s]=r,l=Number(s),o=BigInt(a),f=BigInt(n);let u;for(const p of t.intents){const g=p.chainBatches.find(b=>b.chainId===l);if(g){u=g;break}}const m=u?.tokenTransfers.find(p=>p.from==="escrow"&&D(p.to,t.user)&&!T.isNativeToken(p.token)),c=K(l);if(!m)return`Amount is too small to cover the estimated fee on ${c}.`;const h=T.getTokenByAddress(m.token,l),i=h?.decimals??18,y=h?.symbol??"tokens",d=C.formatUnits(o,i),w=C.formatUnits(f,i);return`Amount is too small to cover the estimated fee on ${c}. Amount: ${d} ${y}. Estimated fee: ${w} ${y}.`}const et="https://tx-submission-api.spicenet.io",ue=et;function G(t,e){return typeof e=="bigint"?e.toString():e}function A(t,e){if(!t)return e;const r=t.error;return(typeof t.message=="string"?t.message:"")||(r&&typeof r=="object"&&"message"in r&&typeof r.message=="string"?r.message:"")||(typeof r=="string"?r:"")||e}async function tt(t){try{return await t.json()}catch{return null}}function rt(t){return(Array.isArray(t?.balances)?t.balances:[]).flatMap(e=>{if(!e||typeof e!="object")return[];const r=e;return[{receiptToken:typeof r.receiptToken=="string"?r.receiptToken:void 0,tokenName:String(r.tokenName??""),balanceAvailable:String(r.balanceAvailable??"0"),chainTokens:Array.isArray(r.chainTokens)?r.chainTokens.filter(a=>typeof a=="string"):r.chainTokens&&typeof r.chainTokens=="object"?r.chainTokens:r.chainTokenConfig&&typeof r.chainTokenConfig=="object"?r.chainTokenConfig:void 0,decimals:typeof r.decimals=="number"?r.decimals:void 0,balanceUsd:typeof r.balanceUsd=="number"||typeof r.balanceUsd=="string"?r.balanceUsd:null}]})}class at{constructor(){this.baseUrl=ue}setBaseUrl(e){this.baseUrl=e}getBaseUrl(){return this.baseUrl}async createAction(e){const r=`${this.baseUrl}/actions`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||n.success===!1)throw new S("RELAYER_ERROR",A(n,`Relayer API error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions"});return n}async estimateActionFees(e){const r=`${this.baseUrl}/actions/fees/estimate`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||!n.success||!n.data?.feeEstimate){const s=A(n,`Relayer fee estimate error: ${a.status}`);throw new S("RELAYER_ERROR",Ze(e,s),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions/fees/estimate"})}return n.data.feeEstimate}async estimateBatchGas(e){const r=`${this.baseUrl}/actions/gas/estimate`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||!n.success||!n.data?.gasFee)throw new S("RELAYER_ERROR",A(n,`Relayer gas estimate error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/actions/gas/estimate"});return{gasFee:BigInt(n.data.gasFee),gasQuoteSource:n.data.gasQuoteSource}}async executeStep(e,r,a,n){const s=`${this.baseUrl}/actions/${e}/intents/${r}/steps/${a}`,l=`/actions/${e}/intents/${r}/steps/${a}`,o=3e4,f=new Promise((c,h)=>setTimeout(()=>h(new S("RELAYER_EXECUTE_ERROR",`Execute step request timed out after ${o/1e3}s`,{actionId:e,intentIndex:r,stepIndex:a,endpoint:l})),o)),u=await Promise.race([fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),f]),m=await u.json();if(!u.ok||m.success===!1)throw new S("RELAYER_EXECUTE_ERROR",A(m,`Execute step error: ${u.status}`),{httpStatus:u.status,responseBody:JSON.stringify(m),endpoint:l,actionId:e});if(m?.status==="error"||m?.status==="reverted"){const c=A(m,""),h=c?`: ${c}`:"";throw new S("RELAYER_EXECUTE_ERROR",`Step ${a} previously ${m.status}${h}`,{httpStatus:u.status,responseBody:JSON.stringify(m),endpoint:l,actionId:e,intentIndex:r,stepIndex:a,stepStatus:m.status})}return{success:!0,transactionHash:m.transactionHash}}async checkStepStatus(e,r){const a=e.split("/"),n=a[0],s=a.length>=2?a[1]:"0",l=`${this.baseUrl}/actions/${n}/intents/${s}/steps/${r}`,o=await fetch(l),f=await o.json();if(!o.ok||f.success===!1)throw new S("RELAYER_STATUS_ERROR",A(f,`Intent step status check failed: ${o.status}`),{httpStatus:o.status,responseBody:JSON.stringify(f),endpoint:l,intentId:e});return{success:!0,data:{status:f.status==="error"?"reverted":f.status,transactionHash:f.txid,error:A(f,"")}}}async createWallet(e,r){const a=`${this.baseUrl}/wallets/${e}`,n=await fetch(a,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}),s=await n.json();if(!n.ok||s.success===!1)throw new S("RELAYER_ERROR",A(s,`Create wallet error: ${n.status}`),{httpStatus:n.status,responseBody:JSON.stringify(s),endpoint:`/wallets/${e}`});return s}async getWallet(e){const r=`${this.baseUrl}/wallets/${e}`,a=await fetch(r),n=await a.json();if(!a.ok||n.success===!1)throw new S("RELAYER_ERROR",A(n,`Get wallet error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:`/wallets/${e}`});return n}async createWithdrawal(e){const r=`${this.baseUrl}/withdrawals`,a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,G)}),n=await a.json();if(!a.ok||n.success===!1)throw new S("RELAYER_ERROR",A(n,`Create withdrawal error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:"/withdrawals"});return n}async getWithdrawal(e){const r=`${this.baseUrl}/withdrawals/${e}`,a=await fetch(r),n=await a.json();if(!a.ok||n.success===!1)throw new S("RELAYER_ERROR",A(n,`Get withdrawal error: ${a.status}`),{httpStatus:a.status,responseBody:JSON.stringify(n),endpoint:`/withdrawals/${e}`});return n}async getRollupTimestamp(){const e=`${this.baseUrl}/time`,r=await fetch(e),a=await r.json();if(!r.ok||a.success===!1)throw new S("RELAYER_ERROR",A(a,`Get rollup timestamp error: ${r.status}`),{httpStatus:r.status,responseBody:JSON.stringify(a),endpoint:"/time"});return a}}const W=new at;async function nt(t){const e=`${W.getBaseUrl()}/wallets/${t}/balance`,r=await fetch(e,{cache:"no-store"}),a=await tt(r);if(!r.ok||a?.success===!1)throw new S("RELAYER_ERROR",A(a,`Unable to verify Spice balance: ${r.status}`),{httpStatus:r.status,responseBody:JSON.stringify(a),endpoint:`/wallets/${t}/balance`});return rt(a)}const V=new Map;async function Z(t,e){const r=t.toLowerCase(),a=V.get(r);if(a)return a;const n=(async()=>{try{await W.getWallet(t);return}catch{}const{unix_timestamp:s}=await W.getRollupTimestamp(),l=`I am creating a new smart wallet and adding an admin wallet ethereum:0x${t.slice(2).toLowerCase()}. Nonce: ${s}`,o=await e(l),f=typeof o=="string"?o:o.signature;if(!f)throw new Error("Wallet returned no smart wallet signature");await W.createWallet(t,{timestamp:s,signature:f})})();V.set(r,n);try{await n}finally{V.delete(r)}}const st=(t,e)=>{const r=n=>e?e(n):K(n),a=[];return t.forEach((n,s)=>{const l=n.calls&&n.calls.length>0,o=n.tokenTransfers&&n.tokenTransfers.length>0;!l&&!o||a.push({stepId:s,status:s===0?"processing":"pending",chainId:n.chainId,chainName:r(n.chainId),description:"Processing transaction"})}),a},ee=t=>{if(!t)return!1;const e=t.connector;if(!e)return!1;if(e.isEmbeddedWallet===!0)return!0;const r=(e.key||e.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const a=(e.name||t.walletName||"").toLowerCase();return!!(a.includes("embedded")||a.includes("turnkey"))},q=t=>(t?.connectedWallets||[]).find(e=>ee(e))||(ee(t?.primaryWallet)?t.primaryWallet:null),ot=t=>(t?.connectedWallets||[]).find(e=>e?.address&&e?.connector&&!ee(e))||null,pe=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getWalletClient=="function"){const r=e===void 0?[void 0]:[String(e),e,void 0];let a=null;for(const n of r)try{const s=await t.getWalletClient(n);if(s)return s}catch(s){a=s}if(a)throw a}if(typeof t.getEthereumProvider=="function"){const r=await t.getEthereumProvider(),a=e?M(e)?.viemChain:void 0;return C.createWalletClient({account:t.address,chain:a,transport:C.custom(r)})}throw new Error("Wallet client not available")},fe=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getEthereumProvider=="function")return t.getEthereumProvider();const r=await pe(t,e);return{request:a=>r.request(a)}},it=(t,e)=>({address:t?.address||e.address,chainId:Number(t?.chainId??e.chainId),contractAddress:t?.contractAddress||t?.delegate||e.contractAddress,nonce:BigInt(t?.nonce??e.nonce),r:t?.r,s:t?.s,yParity:(()=>{if(typeof t?.yParity=="number")return t.yParity;const r=Number(t?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()}),me=t=>{const e=t?.wallet;if(e?.address&&e.walletClientType==="privy"&&e.connectorType==="embedded"&&!e.imported)return e.address},I=t=>t?.address?{address:t.address,wallet:t,getWalletClient:e=>pe(t,e),getEthereumProvider:e=>fe(t,e)}:null,he=()=>{const t=E.useContext(O),{address:e,connector:r}=ne.useAccount();let a=null,n=null;try{a=R.useWallets(),{user:n}=R.usePrivy()}catch{a=null,n=null}let s=null;try{s=H.useDynamicContext()}catch{s=null}const l=a?.wallets||[],o=R.getEmbeddedConnectedWallet(l),f=o?.address?.toLowerCase(),u=l.find($=>$.connectorType!=="embedded"&&$.address?.toLowerCase()!==f),m=q(s),c=ot(s),h=m?.address?.toLowerCase(),i=e?.toLowerCase(),y=e&&r&&!(i&&(f&&i===f||h&&i===h))?{address:e,connector:r,getEthereumProvider:()=>r.getProvider()}:null,d=e&&r?{address:e,connector:r,getEthereumProvider:()=>r.getProvider()}:null,w=t?.provider,p=I(o)||I(m),g=I(y)||I(u)||I(c)||null,b=w==="dynamic"?I(m):w==="privy"?I(o):p,v=w==="dynamic"?I(y)||I(c):w==="privy"?I(y)||I(u):g,k=w==="dynamic"?b?.address:w==="privy"?b?.address||me(n):p?.address||me(n),x=I(d)||v;return{embeddedWallet:b,externalWallet:v,embeddedAddress:k,externalAddress:v?.address,activeWallet:x,activeAddress:x?.address}},dt=()=>{const[t,e]=E.useState(!1);let r=null,a=null;try{r=H.useDynamicContext()}catch(i){a=i instanceof Error?i.message:String(i)}if(E.useEffect(()=>{e(!0)},[]),a)return{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:"dynamic",actions:{signAuthorization:async()=>{throw new Error("Dynamic context not available")},signMessage:async()=>{throw new Error("Dynamic context not available")},getEthereumProvider:async()=>{throw new Error("Dynamic context not available")}}};const{user:n,primaryWallet:s,connectedWallets:l}=r||{},o=q({connectedWallets:l,primaryWallet:s})||s,f=!!n,u=o?.address,m={isReady:t&&!!r,isAuthenticated:f,isConnected:f&&!!u,address:u,provider:"dynamic"},c=async i=>{if(!o)throw new Error("Dynamic embedded wallet not available");const{isEthereumWallet:y}=await import("@dynamic-labs/ethereum");if(!y(o))throw new Error("Embedded wallet is not an Ethereum wallet");const d=await o.getWalletClient();if(!d)throw new Error("Dynamic wallet client not available");return{signature:await d.signMessage({message:i,account:o.address})}},h=async()=>{if(!u)throw new Error("Dynamic embedded wallet not available");await Z(u,c)};return{...m,actions:{signAuthorization:async i=>{if(!o)throw new Error("Dynamic embedded wallet not available");await h();const{isEthereumWallet:y}=await import("@dynamic-labs/ethereum");if(!y(o))throw new Error("Embedded wallet is not an Ethereum wallet");const d=o.connector,w={address:o.address,chainId:i.chainId,contractAddress:i.contractAddress,nonce:i.nonce},p={address:i.contractAddress,chainId:i.chainId,nonce:i.nonce},g=typeof d?.getWaasWalletClient=="function"?await d.getWaasWalletClient():null;if(g&&typeof g.signRawMessage=="function"){const{hashAuthorization:b}=await import("viem/experimental"),{parseSignature:v}=await import("viem"),k={address:i.contractAddress,chainId:i.chainId,nonce:i.nonce},x=d.getSignedSessionId,$=typeof x=="function"?await x.call(d):void 0,P=d.getAuthToken,_=typeof P=="function"?P.call(d):void 0,B=await g.signRawMessage({accountAddress:o.address,authToken:_,context:{eip7702Auth:k},message:b(k).slice(2),signedSessionId:$}),F=v(B);return{address:w.contractAddress,chainId:w.chainId,contractAddress:w.contractAddress,nonce:BigInt(w.nonce),r:F.r,s:F.s,yParity:Number(F.yParity)}}if(typeof d?.signAuthorization=="function"){typeof d.switchNetwork=="function"&&await d.switchNetwork({networkChainId:i.chainId});const b=await d.signAuthorization(p);return it(b,w)}throw new Error("Dynamic embedded wallet does not support EIP-7702 authorization. Ensure @dynamic-labs packages are v4.15+.")},signMessage:async i=>{if(!(typeof i=="object"&&"raw"in i))return c(i);if(await h(),!o)throw new Error("Dynamic embedded wallet not available");const y=await o.getWalletClient();if(!y)throw new Error("Dynamic wallet client not available");return{signature:await y.signMessage({message:{raw:i.raw},account:o.address})}},getEthereumProvider:async()=>{if(!o)throw new Error("Dynamic embedded wallet not available");const{isEthereumWallet:i}=await import("@dynamic-labs/ethereum");if(!i(o))throw new Error("Embedded wallet is not an Ethereum wallet");return fe(o)}}}},lt=t=>{const e=t?.wallet;if(e?.address&&e.walletClientType==="privy"&&e.connectorType==="embedded"&&!e.imported)return e.address},ge=()=>{const t=E.useContext(O),e=t?.mode||"7702";let r=null,a=null;try{r=R.useWallets(),{user:a}=R.usePrivy()}catch{r=null}const n=R.getEmbeddedConnectedWallet(r?.wallets||[])?.address,s=lt(a);let l=null;try{l=H.useDynamicContext()}catch{l=null}const o=(q(l)||l?.primaryWallet)?.address;if(!(!t||e!=="7702"))return t.provider==="privy"?n??s:t.provider==="dynamic"?o:n??s??o},ct=()=>{const t=E.useContext(O)?.mode,{isConnected:e,address:r}=ne.useAccount();let a=null,n=null,s=null,l=null,o=null;try{a=R.usePrivy(),n=R.useSign7702Authorization(),s=R.useSignMessage(),l=R.useWallets()}catch(p){o=p instanceof Error?p.message:String(p)}if(o)return t==="ondemand"&&e&&r?{isReady:!0,isAuthenticated:!0,isConnected:!0,address:r,provider:"privy",actions:{signAuthorization:async()=>{throw new Error("Not available in ondemand mode")},signMessage:async()=>{throw new Error("Not available in ondemand mode")},getEthereumProvider:async()=>{throw new Error("Not available in ondemand mode")}}}:{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:null,actions:{signAuthorization:async()=>{throw new Error("Privy not available")},signMessage:async()=>{throw new Error("Privy not available")},getEthereumProvider:async()=>{throw new Error("Privy not available")}}};const{ready:f=!1,authenticated:u=!1}=a||{},m=ge(),c=R.getEmbeddedConnectedWallet(l?.wallets||[]),h=m||c?.address,i=!!h&&!!c,y={isReady:t==="ondemand"?!0:f,isAuthenticated:t==="ondemand"?!0:u||i,isConnected:t==="ondemand"?e&&!!r||f&&(u||i)&&i:f&&i,address:t==="ondemand"&&!m&&e?r:h,provider:"privy"},d=async p=>{if(s)try{return{signature:(await s.signMessage({message:p})).signature}}catch(k){if(!c)throw k}if(!c)throw new Error("Privy sign message not available");const g=await c.getEthereumProvider(),{createWalletClient:b,custom:v}=await import("viem");return{signature:await b({account:c.address,transport:v(g)}).signMessage({account:c.address,message:p})}},w=async()=>{if(!h)throw new Error("Embedded wallet not available for smart wallet setup");await Z(h,d)};return{...y,actions:{signAuthorization:async p=>{if(!n)throw new Error("Privy sign authorization not available");try{await w();const g=await n.signAuthorization({contractAddress:p.contractAddress,chainId:p.chainId,nonce:p.nonce},{address:h});return delete g.v,g}catch(g){const b=typeof g?.message=="string"?g.message:String(g?.message??g??"");throw b.includes("not configured")||b.includes("chain")?new Error(`Chain ${p.chainId} is not configured in PrivyProvider. Add this chain to your Privy dashboard or supportedChainIds.`):g}},signMessage:async p=>{if(typeof p=="object"&&"raw"in p){if(await w(),!c)throw new Error("Embedded wallet not available for raw signing");const g=await c.getEthereumProvider(),{createWalletClient:b,custom:v}=await import("viem");return{signature:await b({account:c.address,transport:v(g)}).signMessage({account:c.address,message:p})}}return d(p)},getEthereumProvider:async()=>{if(!c)throw new Error("Embedded wallet not available");return c.getEthereumProvider()}}}},ye=()=>{const t=E.useContext(O)?.provider,e=ct(),r=dt();return t==="privy"?e:t==="dynamic"?r:{isReady:!1,isAuthenticated:!1,isConnected:!1,provider:null,actions:{signAuthorization:async()=>{throw new Error("No wallet provider available")},signMessage:async()=>{throw new Error("No wallet provider available")},getEthereumProvider:async()=>{throw new Error("No wallet provider available")}}}},ut="https://portal-api.spicenet.io/api/v1",te=t=>t.replace(/\/+$/,""),pt="spiceflow:linked-wallet",we=t=>`${pt}:${t.campaignId}:${t.campaignGroup}:${t.partnerId}`,be=(t,e)=>`${t}:${e}`;function ft(t){try{return window.localStorage.getItem(t)}catch{return null}}function mt(t,e){try{window.localStorage.setItem(t,e)}catch{}}async function ht(t,e){const r=new URLSearchParams({walletAddress:e,campaignId:"spicenet-portal",campaignGroup:"1"}),a=await fetch(`${t}/portal/mainnet/linked-portal-wallet?${r.toString()}`,{cache:"no-store"});return a.ok?(await a.json()).portalWalletAddress?.toLowerCase()??null:null}async function gt(t,e,r){const a=new URLSearchParams({walletAddress:e,campaignId:r.campaignId,campaignGroup:r.campaignGroup,partnerId:r.partnerId}),n=await fetch(`${t}/portal/mainnet/whitelist/check?${a.toString()}`,{cache:"no-store"});if(!n.ok)throw new Error(`Failed to check whitelist: ${n.status}`);return await n.json()}async function yt(t,e,r,a){const n=await fetch(`${t}/portal/mainnet/link-wallet`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({campaignId:e.campaignId,campaignGroup:e.campaignGroup,partnerId:e.partnerId,externalWalletAddress:r,embeddedWalletAddress:a})});if(!n.ok)throw new Error(`Failed to link wallet: ${n.status}`)}function Ee({walletAddress:t,campaignId:e,campaignGroup:r,partnerId:a,apiBaseUrl:n=ut,enabled:s=!0,staleTime:l=5*60*1e3,refetchInterval:o=!1}={}){const{isAuthenticated:f,isConnected:u}=ye(),{externalAddress:m,embeddedAddress:c}=he(),h=t??m,i=typeof h=="string"?h.toLowerCase():void 0,y=typeof c=="string"?c.toLowerCase():void 0,d=s&&f&&u&&!!m&&!!i&&C.isAddress(i)&&!!e&&!!r&&!!a,w=E.useMemo(()=>["partner-whitelist","check",i,e,r,a,te(n)],[i,e,r,a,n]),p=ae.useQuery({queryKey:w,enabled:d,staleTime:l,refetchInterval:o,queryFn:async()=>{if(!i||!C.isAddress(i))throw new Error("A valid wallet address is required");if(!e||!r||!a)throw new Error("campaignId, campaignGroup, and partnerId are required");const x=te(n),$={campaignId:e,campaignGroup:r,partnerId:a},P=await ht(x,i);return P?gt(x,P,$):{walletAddress:i,campaignId:e,campaignGroup:r,partnerId:a,isWhitelisted:!1,isLinkedWallet:!1,whitelistedWalletAddress:null,externalWalletAddress:i}}}),g=s&&f&&u&&!!i&&C.isAddress(i)&&!!y&&C.isAddress(y)&&!!e&&!!r&&!!a,b=ae.useMutation({mutationFn:x=>yt(te(n),{campaignId:e,campaignGroup:r,partnerId:a},x.external,x.embedded),onSuccess:(x,$)=>{!e||!r||!a||mt(we({campaignId:e,campaignGroup:r,partnerId:a}),be($.external,$.embedded))}}),v=E.useRef(null),k=b.mutate;return E.useEffect(()=>{if(!g||!i||!y||!e||!r||!a)return;const x=be(i,y);if(v.current===x)return;const $=we({campaignId:e,campaignGroup:r,partnerId:a});if(ft($)===x){v.current=x;return}v.current=x,k({external:i,embedded:y})},[g,i,y,e,r,a,k]),{isWhitelisted:p.data?.isWhitelisted??!1,whitelistCheck:p.data,checkedWalletAddress:i,externalWalletAddress:m,embeddedWalletAddress:c,isExternalWalletConnected:!!m,isWhitelistCheckEnabled:d,linkWallet:b,isWalletLinked:b.isSuccess,...p}}const ve="spiceflow-mode",xe=()=>{if(typeof window>"u")return null;try{const t=window.localStorage.getItem(ve);return t==="7702"?"7702":t==="non7702"?"ondemand":t==="embedded"?"7702":t==="external"?"ondemand":null}catch{return null}},wt=t=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ve,t==="7702"?"7702":"non7702")}catch{}},bt=()=>xe()!==null,Ce=E.createContext(null),Et=["__spicenet_whitelist_blocked__"],O=E.createContext(null),vt=({children:t,value:e,whitelist:r})=>{const a=r!==!1&&!!r&&r.enabled!==!1,n=Ee(a?r:{enabled:!1}),s=a&&n.isWhitelistCheckEnabled&&n.isSuccess,l=a&&(!s||!n.isWhitelisted),o=E.useMemo(()=>({...e,allowedTokens:l?Et:e.allowedTokens,mode:l?"ondemand":e.mode,isUserWhitelisted:s?n.isWhitelisted:null,isWhitelistChecking:a&&n.isWhitelistCheckEnabled&&(n.isLoading||n.isFetching),isWhitelistConfigured:a,isWhitelistGateActive:l,whitelistCheck:n.whitelistCheck}),[e,a,l,s,n.isWhitelisted,n.isWhitelistCheckEnabled,n.isLoading,n.isFetching,n.whitelistCheck]);return U.jsx(O.Provider,{value:o,children:t})},xt=({children:t,provider:e,supportedChainIds:r,allowedTokens:a,network:n="testnet",mode:s,skipFlow:l=[],nativeChainId:o,appName:f="Spicenet",apiUrl:u,theme:m,rpcOverrides:c,whitelist:h})=>{E.useEffect(()=>{if(!u)return;const v=W.getBaseUrl();return W.setBaseUrl(u),()=>W.setBaseUrl(v)},[u]),E.useEffect(()=>(ie(c),()=>ie(void 0)),[c]);const i=E.useMemo(()=>T.getChainIdsByNetwork(n),[n]),y=r??i,d=m??null,[w,p]=E.useState(()=>s??xe()??"7702");E.useEffect(()=>{s&&p(s)},[s]);const g=E.useCallback(v=>{if(s){p(s);return}p(v),wt(v)},[s]),b=E.useMemo(()=>({provider:e,supportedChainIds:y,allowedTokens:a,skipFlow:l,mode:w,setMode:g,network:n,nativeChainId:o,appName:f,apiUrl:u,rpcOverrides:c,isUserWhitelisted:null,isWhitelistChecking:!1,isWhitelistConfigured:!1,isWhitelistGateActive:!1}),[e,y,a,l,w,g,n,o,f,u,c]);return U.jsx(Ce.Provider,{value:d,children:U.jsx(O.Provider,{value:b,children:U.jsx(vt,{value:b,whitelist:h,children:t})})})},Ct={spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},typography:{fontFamily:'"Helvetica Neue", sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.75rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700}},shadows:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1)"},animation:{fast:"150ms ease-in-out",normal:"200ms ease-in-out",slow:"300ms ease-in-out"}},St={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#f3f4f6",background:"#ffffff",surface:"#f9fafb",surfaceHover:"#f3f4f6",border:"#e5e7eb",borderHover:"#d1d5db",text:"#111827",textSecondary:"#374151",textMuted:"#6b7280",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Bt={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#171717",background:"#141414",surface:"#1e1e1e",surfaceHover:"#2a2a2a",border:"#2d2d2d",borderHover:"#3a3a3a",text:"#ffffff",textSecondary:"#888888",textMuted:"#666666",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Se=(t="light")=>({mode:t,...Ct,colors:t==="light"?St:Bt});function J(t,e){const r=t.replace("#",""),a=Math.max(0,Math.round(parseInt(r.substring(0,2),16)*(1-e))),n=Math.max(0,Math.round(parseInt(r.substring(2,4),16)*(1-e))),s=Math.max(0,Math.round(parseInt(r.substring(4,6),16)*(1-e)));return`#${a.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`}function kt(t,e){return{shell:e?.shell??"#141414",shellBorder:e?.shellBorder??J(e?.shell??"#141414",.35),shellInnerBorder:e?.shellInnerBorder??J(e?.shell??"#141414",.55),cardBg:e?.cardBg??"#1e1e1e",inputBg:e?.inputBg??"#171717",hoverBg:e?.hoverBg??"#2a2a2a",textPrimary:e?.textPrimary??"#ffffff",textSecondary:e?.textSecondary??"#888888",inputText:e?.inputText??"#e0e0e0",inputPlaceholder:e?.inputPlaceholder??"#555555",cardBorder:e?.cardBorder??"rgba(255,255,255,0.08)",inputBorder:e?.inputBorder??"rgba(255,255,255,0.10)",buttonBorder:e?.buttonBorder??"rgba(255,255,255,0.12)",successBg:e?.successBg??"#0a1f18",successBorder:e?.successBorder??"#1a4a3a",successText:e?.successText??"#6ee7b7",warningBg:e?.warningBg??"#1f1a0d",warningBorder:e?.warningBorder??"#4a3820",warningText:e?.warningText??"#fbbf24",errorBg:e?.errorBg??"#1f0d0d",errorBorder:e?.errorBorder??"#4a2020",errorText:e?.errorText??"#f87171",infoBg:e?.infoBg??"#0d1325",infoBorder:e?.infoBorder??"#2a3a5a",infoText:e?.infoText??"#60a5fa"}}function $t(t){return{shell:"#ffffff",shellBorder:"#E9E9E9",shellInnerBorder:"#D5D5D5",cardBg:"#f9fafb",inputBg:"#ffffff",hoverBg:"#f3f4f6",textPrimary:"#111827",textSecondary:"#6b7280",inputText:"#111827",inputPlaceholder:"#9ca3af",cardBorder:"#e5e7eb",inputBorder:"#d1d5db",buttonBorder:"#0e0d0b",successBg:"#d1fae5",successBorder:"#6ee7b7",successText:"#065f46",warningBg:"#fef3c7",warningBorder:"#fde68a",warningText:"#92400e",errorBg:"#fef2f2",errorBorder:"#fecaca",errorText:"#dc2626",infoBg:"#dbeafe",infoBorder:"#93c5fd",infoText:"#1e40af"}}function Be(t,e){const r=e?{...t,...e}:t,a=r.dark??!1,n=r.primaryColor,s=r.shell??(a?"#141414":"#ffffff");return{primaryColor:n,dark:a,fontFamily:r.fontFamily??'"Helvetica Neue", sans-serif',appName:r.appName??"Spicenet",logo:r.logo,borderRadius:r.borderRadius??"8px",shell:s,shellBorder:J(s,a?.35:.085),shellInnerBorder:J(s,a?.55:.165),card:r.card??(a?"#1e1e1e":"#f9fafb"),input:a?"#171717":"#ffffff",hover:a?"#2a2a2a":"#f3f4f6",text:r.text??(a?"#ffffff":"#111827"),textMuted:r.textMuted??(a?"#888888":"#6b7280"),inputText:a?"#e0e0e0":"#111827",inputPlaceholder:a?"#555555":"#9ca3af",border:r.border??(a?"rgba(255,255,255,0.08)":"#e5e7eb"),inputBorder:a?"rgba(255,255,255,0.10)":"#d1d5db",buttonBorder:a?"rgba(255,255,255,0.12)":"#0e0d0b",successBg:a?"#0a1f18":"#d1fae5",successBorder:a?"#1a4a3a":"#6ee7b7",successText:a?"#6ee7b7":"#065f46",warningBg:a?"#1f1a0d":"#fef3c7",warningBorder:a?"#4a3820":"#fde68a",warningText:a?"#fbbf24":"#92400e",errorBg:a?"#1f0d0d":"#fef2f2",errorBorder:a?"#4a2020":"#fecaca",errorText:a?"#f87171":"#dc2626",infoBg:a?"#0d1325":"#dbeafe",infoBorder:a?"#2a3a5a":"#93c5fd",infoText:a?"#60a5fa":"#1e40af"}}const At='"IBM Plex Mono", monospace';function ke(t,e){const r=E.useContext(Ce)??void 0;return E.useMemo(()=>{const a=r??{primaryColor:"#EA4B4B"},n={...t?.primaryColor?{primaryColor:t.primaryColor}:{},...t?.fontFamily?{fontFamily:t.fontFamily}:{},...e!==void 0?{dark:e}:{}},s=Be(a,n),{dark:l,primaryColor:o,appName:f}=s,u=Se(l?"dark":"light"),m={...u,colors:{...u.colors,primary:o,primaryHover:`${o}dd`},typography:{...u.typography,fontFamily:s.fontFamily}},c={shell:s.shell,shellBorder:s.shellBorder,shellInnerBorder:s.shellInnerBorder,cardBg:s.card,inputBg:s.input,hoverBg:s.hover,textPrimary:s.text,textSecondary:s.textMuted,inputText:s.inputText,inputPlaceholder:s.inputPlaceholder,cardBorder:s.border,inputBorder:s.inputBorder,buttonBorder:s.buttonBorder,successBg:s.successBg,successBorder:s.successBorder,successText:s.successText,warningBg:s.warningBg,warningBorder:s.warningBorder,warningText:s.warningText,errorBg:s.errorBg,errorBorder:s.errorBorder,errorText:s.errorText,infoBg:s.infoBg,infoBorder:s.infoBorder,infoText:s.infoText},h=t?.inputVariant?t.inputVariant==="dark":l;return{brand:r,theme:m,dark:l,appName:f,primaryColor:o,dk:c,palette:c,fontFamily:s.fontFamily,monoFont:At,inputDark:h,cardBg:h?c.cardBg:"#E9E9E9",cardBorder:h?c.cardBorder:"#C6C6C6",textPrimary:c.textPrimary,textSecondary:c.textSecondary,subtitleText:h?c.textSecondary:"#979AA0"}},[r,t,e])}const $e="spiceflow-spinner-keyframes";function It(){if(typeof document>"u"||document.getElementById($e))return;const t=document.createElement("style");t.id=$e,t.textContent="@keyframes spiceflow-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",document.head.appendChild(t)}const Ae=({size:t=16,borderWidth:e=2,color:r="currentColor",style:a})=>{const n=E.useRef(!1);return E.useEffect(()=>{n.current||(It(),n.current=!0)},[]),U.jsx("div",{role:"status","aria-label":"Loading",style:{width:`${t}px`,height:`${t}px`,border:`${e}px solid ${r}`,borderTop:`${e}px solid transparent`,borderRadius:"50%",animation:"spiceflow-spin 1s linear infinite",flexShrink:0,...a}})},Rt=({variant:t="primary",size:e="md",loading:r=!1,fullWidth:a=!1,disabled:n,children:s,className:l="",style:o,theme:f,styles:u,dark:m,...c})=>{const{theme:h,dark:i,palette:y}=ke(u,m),d=f||h,w=m??i,[p,g]=E.useState(!1),[b,v]=E.useState(!1),k=w?y.shell:"white",x=()=>{switch(t){case"primary":return{backgroundColor:u?.button?.backgroundColor||d.colors.primary,color:u?.button?.color||"#ffffff",border:`1px solid ${u?.button?.backgroundColor||d.colors.primary}`};case"secondary":return{backgroundColor:d.colors.secondary,color:d.colors.text,border:`1px solid ${d.colors.border}`};case"success":return{backgroundColor:d.colors.success,color:d.colors.text,border:`1px solid ${d.colors.success}`};case"error":return{backgroundColor:d.colors.error,color:d.colors.text,border:`1px solid ${d.colors.error}`};case"ghost":return{backgroundColor:"transparent",color:d.colors.textSecondary,border:`1px solid ${d.colors.border}`};case"outline":{const B=u?.button?.backgroundColor||d.colors.primary,F=u?.button?.color||(w?"#ffffff":"#0e0d0b"),j=u?.button?.borderColor||(w?`${d.colors.primary}88`:"#0e0d0b"),L=n||r,Ie=w?"1px":"1.5px",Re=u?.button?.disabledBackgroundColor||`${B}88`,Te=u?.button?.disabledColor||F;return{height:"56px",backgroundColor:L?Re:b?`${B}cc`:p?`${B}ee`:B,color:L?Te:F,border:`${Ie} solid ${j}`,borderRadius:u?.button?.borderRadius||"12px",fontSize:"22px",fontWeight:500,fontFamily:'"IBM Plex Mono", monospace',opacity:L?.78:1,transform:L?"none":b?"scale(0.98)":p?"translateY(-2px)":"none",boxShadow:L?`3px 3px 0px ${k}, 4px 4px 0px ${j}`:b?`2px 2px 0px ${j}`:p?`5px 5px 0px ${k}, 6px 6px 0px ${j}`:`3px 3px 0px ${k}, 4px 4px 0px ${j}`,transition:"transform 150ms ease, box-shadow 150ms ease, background-color 150ms ease, border-color 150ms ease, color 150ms ease"}}default:return{}}},$=()=>{if(t==="outline")return{};switch(e){case"sm":return{padding:`${d.spacing.sm} ${d.spacing.md}`,fontSize:d.typography.fontSize.sm};case"md":return{padding:`${d.spacing.md} ${d.spacing.lg}`,fontSize:d.typography.fontSize.base};case"lg":return{padding:`${d.spacing.lg} ${d.spacing.xl}`,fontSize:d.typography.fontSize.lg};default:return{}}},P={borderRadius:u?.button?.borderRadius||d.borderRadius.md,fontWeight:u?.button?.fontWeight||d.typography.fontWeight.medium,fontFamily:u?.button?.fontFamily||d.typography.fontFamily,fontSize:u?.button?.fontSize||void 0,transition:"background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease",cursor:n||r?"not-allowed":"pointer",opacity:(n||r)&&t!=="outline"?.6:1,width:a?"100%":"auto",display:"flex",alignItems:"center",justifyContent:"center",gap:d.spacing.sm,...x(),...$(),...u?.button?.fontSize&&{fontSize:u.button.fontSize}},_=n||r;return U.jsxs("button",{type:c.type??"button","data-spiceflow-focus":!0,"aria-busy":r||void 0,"aria-disabled":_||void 0,style:{...P,...o},className:l,disabled:_,onMouseEnter:B=>{g(!0),c.onMouseEnter?.(B)},onMouseLeave:B=>{g(!1),v(!1),c.onMouseLeave?.(B)},onMouseDown:B=>{v(!0),c.onMouseDown?.(B)},onMouseUp:B=>{v(!1),c.onMouseUp?.(B)},...c,children:[r&&U.jsx(Ae,{size:16}),s]})};exports.Button=Rt,exports.CHAIN_CONFIGS=Ge,exports.RELAYER_API_URL=ue,exports.SpiceFlowProvider=xt,exports.SpiceFlowProviderContext=O,exports.SpiceflowError=S,exports.Spinner=Ae,exports.addressesEqual=D,exports.buildDarkPalette=kt,exports.buildLightPalette=$t,exports.createInitialSteps=st,exports.createTheme=Se,exports.ensureSmartWallet=Z,exports.ensureWalletOnChain=He,exports.getAllAssetsForChain=Qe,exports.getChainConfig=M,exports.getChainName=K,exports.getChainsForAssets=Ye,exports.getClientForChain=de,exports.getDelegateContractAddress=qe,exports.getDynamicEmbeddedWallet=q,exports.getExplorerUrl=Je,exports.getTokenDecimals=Ke,exports.getWalletBalanceEntries=nt,exports.hasStoredSpiceFlowMode=bt,exports.isSpiceflowError=X,exports.isUserRejection=ce,exports.j=se,exports.relayerService=W,exports.resolveTheme=Be,exports.sanitizeError=Ve,exports.useEmbeddedWalletAddress=ge,exports.useIsUserWhitelisted=Ee,exports.useProviderWallets=he,exports.useSpiceBrand=ke,exports.useWallet=ye;