@spicenet-io/spiceflow-ui 4.18.6 → 4.18.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{auth-privy.cjs.js → auth-privy.cjs} +1 -2
- package/dist/auth-privy.js +1 -1
- package/dist/{index.cjs.js → index.cjs} +1 -2
- package/dist/index.js +1 -1
- package/dist/{privy-Df1bsdsz.js → privy-Df1bsdsz.cjs} +0 -1
- package/package.json +6 -6
- /package/dist/{privy-Bf6vkrCg.js → privy-CcPFNAxM.js} +0 -0
|
@@ -1,2 +1 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
"use strict";var He=Object.create;var pe=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Qe=Object.getPrototypeOf,Ke=Object.prototype.hasOwnProperty;var Xe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ye(t))!Ke.call(e,o)&&o!==r&&pe(e,o,{get:()=>t[o],enumerable:!(n=Ve(t,o))||n.enumerable});return e};var Ze=(e,t,r)=>(r=e!=null?He(Qe(e)):{},Xe(t||!e||!e.__esModule?pe(r,"default",{value:e,enumerable:!0}):r,e));const $=require("react/jsx-runtime"),b=require("react"),A=require("@spicenet-io/spiceflow-core"),me=require("@tanstack/react-query"),v=require("viem"),F=require("@privy-io/react-auth"),he=require("wagmi"),et=require("viem/actions");function L(e,t){return!e||!t?!1:A.isNativeToken(e)&&A.isNativeToken(t)?!0:v.isAddress(e)&&v.isAddress(t)?v.getAddress(e)===v.getAddress(t):e.toLowerCase()===t.toLowerCase()}const tt="0xcA11bde05977b3631167028862bE2a173976CA11",rt={4114:"0x860aFc632a6D625B95d8B96f39ECC48E988c6962"},nt=new Set([5115]);function at(e){const t=rt[e.id]??(nt.has(e.id)?void 0:tt);return v.defineChain({id:e.id,name:e.name,nativeCurrency:e.nativeCurrency,rpcUrls:{default:{http:[e.rpcUrl]}},blockExplorers:{default:{name:e.displayName,url:e.blockExplorer}},testnet:e.network==="testnet",...t?{contracts:{multicall3:{address:t}}}:{}})}const ot=[1,8453,42161,4114,4663,56,137,143,11155111,421614,84532,5115,123420001114,688688,688689,46630],G=Object.fromEntries(ot.map(e=>A.getChainMeta(e)).filter(e=>e!=null).map(e=>[e.id,{...e,viemChain:at(e),supportedTokens:A.getTokensForChain(e.id)}])),st=G;let ge={};const re=new Map,ye=e=>{ge={...e||{}},re.clear()},H=(e,t=ge)=>{const r=t[e];return r&&typeof r=="string"&&r.length>0?r:G[e]?.rpcUrl||void 0},M=e=>G[e],V=e=>{const t=A.getChainMeta(e);return t?.displayName||t?.name||`Chain ${e}`},it=e=>{const t=A.getDelegateContract(e);if(!t)throw new Error(`Unsupported chain ID: ${e}`);return t},lt=(e,t,r)=>{const n=M(e);return n?.blockExplorer?`${n.blockExplorer}/tx/${t}`:"#"};async function ct(e,t){const r=`0x${t.toString(16)}`;try{await e.request({method:"wallet_switchEthereumChain",params:[{chainId:r}]});return}catch(a){if(!(a?.code===4902||typeof a?.message=="string"&&a.message.includes("Unrecognized chain ID")))throw a}const n=M(t);if(!n)throw new Error(`Cannot add unknown chain ${t} to wallet`);const o=H(t);if(!o)throw new Error(`Configure SpiceFlowProvider rpcOverrides[${t}] before adding this chain.`);await e.request({method:"wallet_addEthereumChain",params:[{chainId:r,chainName:n.name||`Chain ${t}`,nativeCurrency:n.nativeCurrency||{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:[o],blockExplorerUrls:n.blockExplorer?[n.blockExplorer]:void 0}]})}const be=(e,t)=>{const r=M(e);if(!r)throw new Error(`Unsupported chain ID: ${e}`);const n=H(e,t);if(!n)throw new Error(`No RPC URL configured for chain ID: ${e}`);const o=`${e}:${n}`,a=re.get(o);if(a)return a;const s=v.createPublicClient({chain:r.viemChain,transport:v.http(n,{timeout:15e3,retryCount:2,retryDelay:300}),batch:{multicall:{wait:16}}});return re.set(o,s),s},dt=e=>{const t={};return Object.values(G).forEach(r=>{const n=H(r.id,e);n&&(t[r.id]={name:r.name,chain:r.viemChain,rpcUrl:n})}),t},ut=(e,t=[])=>{const r=M(e);if(!r)return[];const n=[];if(![11155111,421614,688689].includes(e)){const a=t.find(s=>s.chainId===e&&s.isNative);a?n.push(a):n.push({address:A.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:e})}if(!r.supportedTokens)return n;const o=n.some(a=>a.isNative);return r.supportedTokens.forEach(a=>{if(o&&A.isNativeToken(a.address))return;const s=t.find(l=>l.chainId===e&&L(l.address,a.address));s?n.push(s):n.push({address:a.address,name:a.name,symbol:a.symbol,decimals:a.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:a.logo,isNative:!1,chainId:e})}),n},ft=async(e,t,r)=>{const n=M(e);if(!n)throw new Error(`Unsupported chain ID: ${e}`);const o=t.toLowerCase(),a=n.supportedTokens?.find(l=>L(l.address,o));let s;if(A.isNativeToken(o)){if(n.nativeCurrency?.decimals==null)throw new Error(`Native currency decimals not configured for chain ${e}`);s=n.nativeCurrency.decimals}else if(a)s=a.decimals;else{if(!v.isAddress(t,{strict:!1}))throw new Error(`Could not determine decimals for invalid token address: ${t}`);const l=be(e,r);try{s=await et.readContract(l,{address:v.getAddress(t),abi:v.erc20Abi,functionName:"decimals"})}catch(c){throw Object.assign(new Error(`Could not determine decimals for token ${t} on chain ${e}. Check the token contract and RPC configuration, then try again.`),{cause:c})}}if(!Number.isInteger(s)||s<0||s>255)throw new Error(`Invalid token decimals for ${t} on chain ${e}. Expected an integer from 0 to 255.`);return s},pt=e=>{const t=e?.wallet;if(t?.address&&t.walletClientType==="privy"&&t.connectorType==="embedded"&&!t.imported)return t.address},we=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getWalletClient=="function"){const r=t===void 0?[void 0]:[String(t),t,void 0];let n=null;for(const o of r)try{const a=await e.getWalletClient(o);if(a)return a}catch(a){n=a}if(n)throw n}if(typeof e.getEthereumProvider=="function"){const r=await e.getEthereumProvider(),n=t?M(t)?.viemChain:void 0;return v.createWalletClient({account:e.address,chain:n,transport:v.custom(r)})}throw new Error("Wallet client not available")},mt=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getEthereumProvider=="function")return e.getEthereumProvider();const r=await we(e,t);return{request:n=>r.request(n)}},ne=e=>!e?.address||!v.isAddress(e.address)?null:{address:e.address,wallet:e,getWalletClient:t=>we(e,t),getEthereumProvider:t=>mt(e,t)},ae=()=>{const e=he.useAccount(),t=e.address,r=e.connector;let n=null,o=null,a=null;try{n=F.useWallets(),o=F.usePrivy(),{wallet:a}=F.useActiveWallet()}catch{n=null,o=null,a=null}const s=n?.wallets||[],l=F.getEmbeddedConnectedWallet(s),c=l?.address||pt(o?.user),d=n?.ready&&o?.ready?s.filter(f=>v.isAddress(f.address||"")&&f.type!=="solana"&&f.connectorType!=="embedded"&&!L(f.address,c)&&(typeof f.getEthereumProvider=="function"||typeof f.getWalletClient=="function")):[],h=a?.connectorType!=="embedded"&&a?.address?d.find(f=>L(f.address,a.address)):void 0,u=L(t,c),p=e.status==="connected"&&t&&v.isAddress(t)&&typeof r?.getProvider=="function"?{address:t,connector:r,chainId:e.chainId,getEthereumProvider:()=>r.getProvider()}:null,m=!!t&&!u&&["connected","connecting","reconnecting"].includes(e.status),w=m?p||d.find(f=>L(f.address,t)):null,i=ne(l),g=ne(m?w:h),x=i?.address||c,y=ne(p)||g;return{embeddedWallet:i,externalWallet:g,embeddedAddress:x,externalAddress:g?.address,activeWallet:y,activeAddress:y?.address}},ht={base:0,raised:1,sticky:10,overlay:20,popover:40,modal:1e3,dropdown:1100,toast:1200,tooltip:1300},gt={none:"0",sm:"4px",md:"6px",card:"8px",input:"10px",shell:"9px",modal:"12px",pill:"9999px",circle:"50%"},P={out:"cubic-bezier(0.22, 1, 0.36, 1)",inOut:"cubic-bezier(0.65, 0, 0.35, 1)",linear:"linear"},R={fast:"120ms",normal:"150ms",slow:"300ms",progress:"400ms"},yt={interactive:`transform ${R.normal} ${P.out}, box-shadow ${R.normal} ${P.out}, background-color ${R.normal} ${P.out}, border-color ${R.normal} ${P.out}, color ${R.normal} ${P.out}`,color:`background-color ${R.normal} ${P.out}, border-color ${R.normal} ${P.out}, color ${R.normal} ${P.out}`,popover:`opacity ${R.normal} ${P.out}, transform ${R.normal} ${P.out}`},Y={ui:'"Helvetica Neue", sans-serif',mono:'"IBM Plex Mono", monospace'};class B extends Error{constructor(t,r,n={}){super(r),this.code=t,this.context=n,this.name="SpiceflowError",Error.captureStackTrace&&Error.captureStackTrace(this,B)}}function oe(e){return e instanceof B}const bt=["user rejected","user denied","user cancelled","rejected the request","action_rejected","4001"];function ve(e){if(!e)return"";if(typeof e=="string")return e;const t=e,r=t.message||t.reason||"",n=t.details||"";return`${r} ${n}`.trim()}const xe=e=>{if(oe(e))return e.code==="WALLET_REJECTED";const t=ve(e).toLowerCase();return bt.some(r=>t.includes(r))};let se=null;function wt(e){return se?.message===e?se.detail:void 0}const vt=(e,t="Something went wrong. Please try again.")=>{if(xe(e))return"Transaction was rejected.";if(oe(e)){const r=e.message||t,{requestId:n,httpStatus:o,responseBody:a,endpoint:s}=e.context;return(n||o||s)&&(se={message:r,detail:{requestId:n,httpStatus:o,responseBody:a,endpoint:s}}),r}return ve(e)||t},xt=[...A.DELEGATE_ABI,...A.ERC20_ABI,...A.spicenetEscrowAbi,...A.uniV3SwapRouterAbi];function ie(e,t=0){return t>4||e==null?[]:typeof e=="string"?e.match(/0x[0-9a-fA-F]{8,}/g)??[]:Array.isArray(e)?e.flatMap(r=>ie(r,t+1)):typeof e=="object"?Object.values(e).flatMap(r=>ie(r,t+1)):[]}function Ee(e){try{const t=v.decodeErrorResult({abi:xt,data:e});if(t.errorName==="Error")return String(t.args?.[0]??"");if(t.errorName==="Panic")return`Panic(${t.args?.[0]})`;if(t.errorName==="CallReverted"){const r=t.args?.[4],n=r&&r!=="0x"?Ee(r):void 0;return n?`Call reverted: ${n}`:"Call reverted (no reason returned)"}return t.errorName}catch{try{const t=v.hexToString(e).replace(/\x00+$/g,"").trim();return/^[\x20-\x7e]+$/.test(t)&&t.length>1?t:void 0}catch{return}}}function Et(e){for(const t of ie(e)){if(!v.isHex(t))continue;const r=Ee(t);if(r)return r}}function $e(e,t){const r=t.match(/Output amount (\d+) is insufficient after fees (\d+) on chain (\d+)/);if(!r)return t;const[,n,o,a]=r,s=Number(a),l=BigInt(n),c=BigInt(o);let d;for(const x of e.intents){const y=x.chainBatches.find(f=>f.chainId===s);if(y){d=y;break}}const h=d?.tokenTransfers.find(x=>x.from==="escrow"&&L(x.to,e.user)&&!A.isNativeToken(x.token)),u=V(s);if(!h)return`Amount is too small to cover the estimated fee on ${u}.`;const p=A.getTokenByAddress(h.token,s),m=p?.decimals??18,w=p?.symbol??"tokens",i=v.formatUnits(l,m),g=v.formatUnits(c,m);return`Amount is too small to cover the estimated fee on ${u}. Amount: ${i} ${w}. Estimated fee: ${g} ${w}.`}function $t(e){return e?.code===4902||e?.name==="ChainNotConfiguredError"?"This network is not configured in your wallet. Please add it manually to continue.":e?.code===4001?"Network switch cancelled. Please switch manually in your wallet to continue.":"Unable to switch network. Please switch manually in your wallet to continue."}const Ct="https://tx-submission-api.spicenet.io",Ce=Ct;function kt(e,t){return typeof t=="bigint"?t.toString():t}function j(e,t=""){if(Array.isArray(e))e.forEach((r,n)=>j(r,`${t}[${n}]`));else if(e&&typeof e=="object")for(const[r,n]of Object.entries(e)){const o=t?`${t}.${r}`:r;if(!n&&(r==="user"||r==="to"||r==="from"||r==="address"))throw new B("INVALID_PARAMS",`Wallet not ready: ${o} is missing from the request. Wait a moment and retry, or log in again.`,{path:o});j(n,o)}}async function Q(e,t){const r={...t?.headers},n=(t?.method??"GET").toUpperCase();(t?.body!=null||n!=="GET"&&n!=="HEAD")&&(r["x-request-id"]??(r["x-request-id"]=crypto.randomUUID()));const o=await fetch(e,{...t,headers:r}),a=o.headers.get("x-request-id")??"";return Object.assign(o,{requestId:a})}function D(e,t){if(!e)return t;const r=e.error,n=(typeof e.message=="string"?e.message:"")||(r&&typeof r=="object"&&"message"in r&&typeof r.message=="string"?r.message:"")||(typeof r=="string"?r:"")||t,o=Et(e);return o&&!n.includes(o)?`${n} \u2014 ${o}`:n}async function At(e){try{return await e.json()}catch{return null}}function St(e){return(Array.isArray(e?.balances)?e.balances:[]).flatMap(t=>{if(!t||typeof t!="object")return[];const r=t;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(n=>typeof n=="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 te{constructor(){this.baseUrl=Ce,this.feeValidationAvailable=!1}setBaseUrl(t){t!==this.baseUrl&&(this.feeValidationAvailable=!1),this.baseUrl=t}getBaseUrl(){return this.baseUrl}async requestJson(t,r){const n=`${this.baseUrl}${t}`,o=await Q(n,r.method&&r.method!=="GET"?{method:r.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(r.body,kt),signal:r.signal}:{signal:r.signal}),a=await o.json();if(!o.ok||a.success===!1||r.ok&&!r.ok(a)){const s=D(a,r.fallbackError(o.status));throw new B(r.code??"RELAYER_ERROR",r.mapError?r.mapError(s):s,{httpStatus:o.status,requestId:o.requestId,responseBody:JSON.stringify(a),endpoint:t,...r.context})}return a}async createLimitOrder(t){return this.requestJson("/orders",{method:"POST",body:t,fallbackError:r=>`Order registration failed: ${r}`})}async getLimitOrder(t){return this.requestJson(`/orders/${encodeURIComponent(t)}`,{fallbackError:r=>`Order lookup failed: ${r}`})}async listLimitOrders(t,r){const n=new URLSearchParams({user:t,...r?{after:r}:{}});return this.requestJson(`/orders?${n}`,{fallbackError:o=>`Order listing failed: ${o}`})}async cancelLimitOrder(t,r){return this.requestJson(`/orders/${encodeURIComponent(t)}/cancel`,{method:"POST",body:{signature:r},fallbackError:n=>`Order cancellation failed: ${n}`})}async supportsAutomaticContinuation(){try{return(await this.requestJson("/actions/capabilities",{fallbackError:t=>`Action capabilities unavailable: ${t}`})).automaticContinuation===!0}catch(t){if(t instanceof B&&t.context.httpStatus===404)return!1;throw t}}async createAction(t){j(t);const r=new te;r.setBaseUrl(this.baseUrl);const n=t.idempotencyKey??`0x${Array.from(crypto.getRandomValues(new Uint8Array(32)),o=>o.toString(16).padStart(2,"0")).join("")}`;try{return await r.requestJson("/actions",{method:"POST",body:{...t,idempotencyKey:n},fallbackError:o=>`Relayer API error: ${o}`})}catch(o){if(o instanceof B&&o.context.httpStatus===400&&JSON.parse(String(o.context.responseBody??"{}"))?.submissionStatus==="rejected")throw o;for(let a=0;a<3;a++){a&&await new Promise(s=>setTimeout(s,1e3));try{const s=await r.getActionBySubmission(t.user,n);if(s)return s}catch{}}throw new B("RELAYER_ERROR","The submission outcome is unknown. Check your activity and balances before submitting again.",{idempotencyKey:n,user:t.user,cause:o})}}async getWalletActions(t,r){return(await this.requestJson(`/wallets/${encodeURIComponent(t)}/actions`,{signal:r,fallbackError:n=>`Action status unavailable: ${n}`})).actions}async getActionBySubmission(t,r,n){try{return await this.requestJson(`/actions/by-submission/${encodeURIComponent(t)}/${encodeURIComponent(r)}`,{signal:n?.signal,fallbackError:o=>`Submission lookup failed: ${o}`})}catch(o){if(o instanceof B&&o.context.httpStatus===404)return null;throw o}}async getActionRecovery(t,r,n){const o=await this.requestJson(`/actions/${encodeURIComponent(t)}/intents/${r}/recovery`,{signal:n?.signal,fallbackError:a=>`Action recovery check failed: ${a}`});if(!["completed","cancelled","unresolved"].includes(o.status))throw new Error("The relayer returned an unknown recovery status.");return o.status}async estimateActionFees(t,r){j(t);const n=this.baseUrl,o=await this.requestJson("/actions/fees/estimate",{method:"POST",body:t,signal:r?.signal,fallbackError:a=>`Relayer fee estimate error: ${a}`,ok:a=>!!a.success&&!!a.data?.feeEstimate,mapError:a=>$e(t,a)});return n===this.baseUrl&&(this.feeValidationAvailable=o.data?.supportsFeeValidation===!0),o.data.feeEstimate}canValidateActionFees(){return this.feeValidationAvailable}async validateActionFees(t,r){return j(t),(await this.requestJson("/actions/fees/validate",{method:"POST",body:t,signal:r?.signal,fallbackError:n=>`Relayer fee validation error: ${n}`,ok:n=>!!n.success&&!!n.data?.feeEstimate,mapError:n=>$e(t,n)})).data.feeEstimate}async estimateBatchGas(t){j(t);const{signal:r,...n}=t,o=await this.requestJson("/actions/gas/estimate",{method:"POST",body:n,signal:r,fallbackError:a=>`Relayer gas estimate error: ${a}`,ok:a=>!!a.success&&!!a.data?.gasFee});return{gasFee:BigInt(o.data.gasFee),gasQuoteSource:o.data.gasQuoteSource,simulationVerified:o.data.simulationVerified===!0,platformFee:o.data.platformFee===void 0?void 0:BigInt(o.data.platformFee)}}async executeStep(t,r,n,o){const a=`${this.baseUrl}/actions/${t}/intents/${r}/steps/${n}`,s=`/actions/${t}/intents/${r}/steps/${n}`,l=crypto.randomUUID(),c=3e4,d=new Promise((p,m)=>setTimeout(()=>m(new B("RELAYER_EXECUTE_ERROR",`Execute step request timed out after ${c/1e3}s`,{actionId:t,intentIndex:r,stepIndex:n,endpoint:s,requestId:l})),c)),h=await Promise.race([Q(a,{method:"POST",headers:{"Content-Type":"application/json","x-request-id":l},body:JSON.stringify(o)}),d]),u=await h.json();if(!h.ok||u.success===!1)throw new B("RELAYER_EXECUTE_ERROR",D(u,`Execute step error: ${h.status}`),{httpStatus:h.status,requestId:h.requestId,responseBody:JSON.stringify(u),endpoint:s,actionId:t});if(u?.status==="error"||u?.status==="reverted"){const p=D(u,""),m=p?`: ${p}`:"";throw new B("RELAYER_EXECUTE_ERROR",`Step ${n} previously ${u.status}${m}`,{httpStatus:h.status,requestId:h.requestId,responseBody:JSON.stringify(u),endpoint:s,actionId:t,intentIndex:r,stepIndex:n,stepStatus:u.status})}return{success:!0,status:u.status,transactionHash:u.transactionHash}}async checkStepStatus(t,r,n=!1){const o=typeof n=="boolean"?n:n.includeExecutionStatus===!0,a=t.split("/"),s=a[0],l=a.length>=2?a[1]:"0",c=await this.requestJson(`/actions/${s}/intents/${l}/steps/${r}${o?"?includeExecutionStatus=true":""}`,{signal:typeof n=="boolean"?void 0:n.signal,fallbackError:d=>`Intent step status check failed: ${d}`,code:"RELAYER_STATUS_ERROR",context:{intentId:t}});return{success:!0,data:{status:c.status==="error"?"reverted":c.status,transactionHash:c.txid,error:D(c,""),...c.executionStatus==="success"||c.executionStatus==="reverted"?{executionStatus:c.executionStatus}:{}}}}async createWallet(t,r){return this.requestJson(`/wallets/${t}`,{method:"PUT",body:r,fallbackError:n=>`Create wallet error: ${n}`})}async getWallet(t){return this.requestJson(`/wallets/${t}`,{fallbackError:r=>`Get wallet error: ${r}`})}async createWithdrawal(t){return this.requestJson("/withdrawals",{method:"POST",body:t,fallbackError:r=>`Create withdrawal error: ${r}`})}async getWithdrawal(t){return this.requestJson(`/withdrawals/${t}`,{fallbackError:r=>`Get withdrawal error: ${r}`})}async getRollupTimestamp(){return this.requestJson("/time",{fallbackError:t=>`Get rollup timestamp error: ${t}`})}}const W=new te;async function Bt(e){const t=`${W.getBaseUrl()}/wallets/${e}/balance`,r=await Q(t,{cache:"no-store"}),n=await At(r);if(!r.ok||n?.success===!1)throw new B("RELAYER_ERROR",D(n,`Unable to verify Spice balance: ${r.status}`),{httpStatus:r.status,requestId:r.requestId,responseBody:JSON.stringify(n),endpoint:`/wallets/${e}/balance`});return St(n)}const le=new Map,K=new Set;function ce(e){return JSON.stringify([W.getBaseUrl(),e.toLowerCase()])}function _(e,t){if(ce(e)!==t)throw new Error("Wallet backend changed during registration. Please retry.")}function It(e){if(!(e instanceof B))return!1;const t=e.context.httpStatus;return t===400||t===404?`${e.message} ${String(e.context.responseBody??"")}`.toLowerCase().includes("not found"):!1}async function ke(e){const t=ce(e);if(K.has(t))return!0;try{return await W.getWallet(e),_(e,t),K.add(t),!0}catch(r){if(!It(r))throw r;return!1}}async function Ae(e,t){const r=ce(e);if(K.has(r))return;const n=le.get(r);if(n)return n;const o=(async()=>{const a=await ke(e);if(_(e,r),a)return;const{unix_timestamp:s}=await W.getRollupTimestamp();_(e,r);const l=`I am creating a new smart wallet and adding an admin wallet ethereum:0x${e.slice(2).toLowerCase()}. Nonce: ${s}`,c=await t(l);_(e,r);const d=typeof c=="string"?c:c.signature;if(!d)throw new Error("Wallet returned no smart wallet signature");await W.createWallet(e,{timestamp:s,signature:d}),_(e,r),K.add(r)})();le.set(r,o);try{await o}finally{le.delete(r)}}const Tt=(e,t)=>{const r=o=>t?t(o):V(o),n=[];return e.forEach((o,a)=>{const s=o.calls&&o.calls.length>0,l=o.tokenTransfers&&o.tokenTransfers.length>0;!s&&!l||n.push({stepId:a,status:a===0?"processing":"pending",chainId:o.chainId,chainName:r(o.chainId),description:"Processing transaction"})}),n},Se=()=>{const e=b.useContext(Z),t=e?.mode,{isConnected:r,address:n}=he.useAccount();let o=null,a=null,s=null,l=null,c=null;try{o=F.usePrivy(),a=F.useSign7702Authorization(),s=F.useSignMessage(),l=F.useWallets()}catch(f){c=f instanceof Error?f.message:String(f)}if(c)return t==="ondemand"&&r&&n?{isReady:!0,isAuthenticated:!0,isConnected:!0,address:n,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:d=!1,authenticated:h=!1}=o||{},u=e?.embeddedWalletAddress,p=F.getEmbeddedConnectedWallet(l?.wallets||[]),m=u||p?.address,w=!!m&&!!p,i={isReady:t==="ondemand"?!0:d,isAuthenticated:t==="ondemand"?!0:h||w,isConnected:t==="ondemand"?r&&!!n||d&&(h||w)&&w:d&&w,address:t==="ondemand"&&r?n:m,provider:"privy"},g=async(f,C)=>{if(!p)throw new Error("Embedded wallet not available");const k=await p.getEthereumProvider(),{createWalletClient:I,custom:E}=await import("viem"),N=I({account:p.address,transport:E(k)});return C?.(),{signature:await N.signMessage({account:p.address,message:f})}},x=async f=>{if(s)try{return{signature:(await s.signMessage({message:f})).signature}}catch(C){if(!p)throw C}if(!p)throw new Error("Privy sign message not available");return g(f)},y=async()=>{if(!m)throw new Error("Embedded wallet not available for smart wallet setup");await Ae(m,x)};return{...i,actions:{prepareSigning:async()=>{if(!m)throw new Error("Embedded wallet not available");await ke(m)},signAuthorization:async(f,C)=>{if(!a)throw new Error("Privy sign authorization not available");try{await y(),C?.();const k=await a.signAuthorization({contractAddress:f.contractAddress,chainId:f.chainId,nonce:f.nonce},{address:m});return delete k.v,k}catch(k){const I=typeof k?.message=="string"?k.message:String(k?.message??k??"");throw I.includes("not configured")||I.includes("chain")?new Error(`Chain ${f.chainId} is not configured in PrivyProvider. Add this chain to your Privy dashboard or supportedChainIds.`):k}},signMessage:async(f,C)=>{if(typeof f=="object"&&"raw"in f){if(await y(),!p)throw new Error("Embedded wallet not available for raw signing");return g(f,C)}return C?.(),x(f)},getEthereumProvider:async()=>{if(!p)throw new Error("Embedded wallet not available");return p.getEthereumProvider()}}}},Ft="https://portal-api.spicenet.io/api/v1",de=e=>e.replace(/\/+$/,""),Pt=(e,t)=>`${e}:${t}`;async function Rt(e,t){const r=new URLSearchParams({walletAddress:t,campaignId:"spicenet-portal",campaignGroup:"1"}),n=await fetch(`${e}/portal/mainnet/linked-portal-wallet?${r.toString()}`,{cache:"no-store"});if(!n.ok){if(n.status>=500){const o=new Error(`Failed to resolve linked portal wallet: ${n.status}`);throw o.status=n.status,o}return null}return(await n.json()).portalWalletAddress?.toLowerCase()??null}async function Nt(e,t,r){const n=new URLSearchParams({walletAddress:t,campaignId:r.campaignId,campaignGroup:r.campaignGroup,partnerId:r.partnerId}),o=await fetch(`${e}/portal/mainnet/whitelist/check?${n.toString()}`,{cache:"no-store"});if(!o.ok){const a=new Error(`Failed to check whitelist: ${o.status}`);throw a.status=o.status,a}return await o.json()}async function Wt(e,t,r,n){const o=await fetch(`${e}/portal/mainnet/link-wallet`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({campaignId:t.campaignId,campaignGroup:t.campaignGroup,partnerId:t.partnerId,externalWalletAddress:r,embeddedWalletAddress:n})});if(!o.ok)throw new Error(`Failed to link wallet: ${o.status}`)}function Be({walletAddress:e,campaignId:t,campaignGroup:r,partnerId:n,apiBaseUrl:o=Ft,enabled:a=!0,staleTime:s=5*60*1e3,refetchInterval:l=!1}={}){const{isAuthenticated:c,isConnected:d}=Se(),{externalAddress:h,embeddedAddress:u}=ae(),p=e??h,m=typeof p=="string"?p.toLowerCase():void 0,w=typeof u=="string"?u.toLowerCase():void 0,i=typeof h=="string"?h.toLowerCase():void 0,g=a&&c&&d&&!!h&&!!m&&v.isAddress(m)&&!!t&&!!r&&!!n,x=b.useMemo(()=>["partner-whitelist","check",m,t,r,n,de(o)],[m,t,r,n,o]),y=me.useQuery({queryKey:x,enabled:g,staleTime:s,refetchInterval:l,retry:(E,N)=>{const T=N?.status;return typeof T=="number"&&T>=400&&T<500?!1:E<3},retryDelay:E=>Math.min(1e3*2**E,15e3),queryFn:async()=>{if(!m||!v.isAddress(m))throw new Error("A valid wallet address is required");if(!t||!r||!n)throw new Error("campaignId, campaignGroup, and partnerId are required");const E=de(o),N={campaignId:t,campaignGroup:r,partnerId:n},T=await Rt(E,m);return T?Nt(E,T,N):{walletAddress:m,campaignId:t,campaignGroup:r,partnerId:n,isWhitelisted:!1,isLinkedWallet:!1,whitelistedWalletAddress:null,externalWalletAddress:m}}}),f=a&&c&&d&&!!i&&v.isAddress(i)&&!!w&&v.isAddress(w)&&!!t&&!!r&&!!n,C=me.useMutation({mutationFn:E=>Wt(de(o),{campaignId:t,campaignGroup:r,partnerId:n},E.external,E.embedded)}),k=b.useRef(new Set),I=C.mutate;return b.useEffect(()=>{if(!f||!i||!w||!t||!r||!n)return;const E=Pt(i,w);k.current.has(E)||(k.current.add(E),I({external:i,embedded:w}))},[f,i,w,t,r,n,I]),{isWhitelisted:y.data?.isWhitelisted??!1,whitelistCheck:y.data,checkedWalletAddress:m,externalWalletAddress:h,embeddedWalletAddress:u,isExternalWalletConnected:!!h,isWhitelistCheckEnabled:g,linkWallet:C,isWalletLinked:C.isSuccess,...y}}const Ie={assets:[],loading:!1,refreshing:!1,error:null,updatedAt:null};function Te(){const e=new Map,t=new Map,r=new WeakMap;let n=0;function o(){let a=Ie;const s=new Map;let l,c=null,d=0,h=!1,u;const p=()=>s.forEach((i,g)=>g()),m=()=>{if(!u||!s.size)return Promise.resolve();if(c)return c;const i=++d;return a={...a,loading:a.updatedAt===null,refreshing:!0},p(),c=Promise.resolve().then(u).then(g=>{if(i!==d)return;const{assets:x,error:y=null}=Array.isArray(g)?{assets:g}:g;a={assets:x,loading:!1,refreshing:!1,error:y,updatedAt:Date.now()}},g=>{i===d&&(a={...a,loading:!1,refreshing:!1,error:g instanceof Error?g.message:"Unable to refresh balances"})}).finally(()=>{i===d&&(c=null,p(),h&&(h=!1,m()))}),c},w=()=>{clearInterval(l);const i=[...s.values()].filter(g=>g>0);i.length&&(l=setInterval(()=>void m(),Math.min(...i)))};return{snapshot:()=>a,refresh:m,invalidate:()=>c?(h=!0,c.then(()=>c??Promise.resolve())):m(),subscribe(i,g,x){return u=g,s.set(i,x),w(),m(),()=>{s.delete(i),w(),s.size||(d++,c=null,h=!1,a={...a,loading:!1,refreshing:!1})}}}}return{entry(a){let s=e.get(a);return s||(s=o(),e.set(a,s)),s},fetcherId(a){return r.has(a)||r.set(a,++n),r.get(a)},registerTokens(a){let s=!1;for(const l of a){const c=`${l.chainId}:${l.address.toLowerCase()}`;t.has(c)||(t.set(c,l),s=!0)}s&&e.forEach(l=>l.invalidate())},tokens:()=>[...t.values()],invalidate:()=>Promise.all([...e.values()].map(a=>a.invalidate())).then(()=>{})}}function Fe(e,t){return e<=0n||t<=0n?0n:(e*t+10000n-1n)/10000n}function Ut(e,t,r){const n=(e>t?e-t:0n)*10000n/(10000n+r),o=Fe(n,r),a=n>0n,s=a?o+t:0n;return{netAmount:n,spicenetFee:a?o:0n,totalFee:s,grossAmount:n+s,coversFees:a}}function qt(e,t,r){if(e===t)return!0;const n=e>t?e:t;return n===0n?!1:(e>t?e-t:t-e)*10000n<=n*r}function ue(e=4e3){if(!Number.isInteger(e)||e<0||e>1e4)throw new Error("feeToleranceBps must be an integer between 0 and 10000");return e}function Pe(e,t,r){const n=BigInt(ue(r));return(e>t?e-t:t-e)*10000n<=e*n}function Lt(e,t,r){return["gasFee","spicenetFee","bridgeFee"].every(n=>Pe(e[n]??0n,t[n]??0n,r))}function Mt(e,t){const r=v.formatUnits(e,t);return r.includes(".")?r.replace(/\.?0+$/,"")||"0":r}function X(e){const t=BigInt(e.feeBreakdown.spicenetFee),r=BigInt(e.feeBreakdown.gasFee),n=BigInt(e.feeBreakdown.bridgeFee??"0"),o=t+r+n;return{spicenetFee:t,gasFee:r,bridgeFee:n,totalFee:o}}function Ot(e){const t=BigInt(e.quotedAmount),r=BigInt(e.totalDebit),{totalFee:n}=X(e);return t>0n||r>0n||n>0n}function jt(e){const t=BigInt(e.quotedAmount),r=BigInt(e.totalDebit),{totalFee:n}=X(e),o=t+n;return r>o?r:o}function Dt(e){const t=[];for(const r of e.intents)for(const n of r.batches)t.push(BigInt(n.quotedAmount));return t.length!==1?null:t[0]}function _t(e,t,r){return e.length===0||!e.every(n=>n.domain!=="spicenet"&&!n.tokenTransfers?.length)?null:{...t,grossAmount:r,netAmount:r,totalFee:0n,gasFee:0n,spicenetFee:0n,bridgeFee:0n,gasQuoteSource:"static_zero"}}function zt(e,t){const r=e.intents.flatMap(h=>h.batches).filter(Ot);if(r.length===0)return null;const n=r.filter(h=>h.chainId===t.chainId),o=n.length>0?n:r;if(o.length>1)return null;const a=o[0],{gasFee:s,spicenetFee:l,bridgeFee:c,totalFee:d}=X(a);return{chainId:a.chainId,tokenAddress:t.tokenAddress,symbol:t.symbol,decimals:t.decimals,grossAmount:jt(a),netAmount:BigInt(a.quotedAmount),totalFee:d,gasFee:s,spicenetFee:l,bridgeFee:c,gasQuoteSource:a.gasQuoteSource}}const Re=(e,t=4)=>!isFinite(e)||e===0?"0":e>0&&e<1e-6?e.toFixed(12).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):e<1e-4?e.toFixed(8).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):e.toFixed(t).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""),Jt=e=>isFinite(e)?e>0&&e<.01?"<$0.01":new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(e):"$0.00",Ne=(e,t=6,r=4)=>e.length<=t+r?e:`${e.slice(0,t)}...${e.slice(-r)}`,Gt=(e,t)=>{const r=e.replace(/[^0-9.]/g,"").split("."),n=r[0]??"",o=r.slice(1).join(""),a=typeof t=="number"?Math.max(0,Math.min(t,18)):null;return r.length===1?n:`${n}.${a===null?o:o.slice(0,a)}`},Ht=(e,t=6)=>!Number.isFinite(e)||e<=0?"0":e.toFixed(Math.min(Math.max(t,0),18)).replace(/\.?0+$/,""),Vt=async e=>{try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.error("Failed to copy to clipboard:",t),!1}};function Yt(e,t){return t?.length?t.some(r=>{const n=r.toLowerCase();return n===e.symbol.toLowerCase()||A.normalizeNativeTokenAddress(n).toLowerCase()===A.normalizeNativeTokenAddress(e.address).toLowerCase()||n===e.displaySymbol?.toLowerCase()||n===e.receiptTokenName?.toLowerCase()||n==="native"&&(e.isNative||A.isNativeToken(e.address))}):!0}function We(e){return e.displaySymbol||e.symbol}function Ue(e){return e.displayName||e.displaySymbol||e.name||e.symbol}function Qt(e,t){const r=e.location==="rollup"||e._source==="spice"||!!e.receiptTokenId&&!e.location&&!e._source,n=a=>a&&t?Object.entries(t).find(([s])=>s.toLowerCase()===a.toLowerCase())?.[1]:void 0,o=r?n(e.receiptTokenId)??n(e.receiptTokenName):void 0;return{symbol:o?.symbol||o?.name||We(e),name:o?.name||o?.symbol||Ue({...e,name:e.name||""}),logoURI:o?.logoURI===void 0?e.logoURI:o.logoURI||null}}function Kt(e){return e.displayChainName||V(e.chainId)}function Xt(e){if(e.balance===0n)return"0";const t=v.formatUnits(e.balance,e.decimals),r=Re(Number(t));return Number(r)===0?t:r}const qe=b.createContext(void 0);function Zt(){const e=b.useContext(qe);return b.useCallback(t=>Qt(t,e),[e])}const er=["__spicenet_whitelist_blocked__"],Le="spiceflow-mode",Me=()=>{if(typeof window>"u")return null;try{const e=window.localStorage.getItem(Le);return e==="7702"?"7702":e==="non7702"?"ondemand":e==="embedded"?"7702":e==="external"?"ondemand":null}catch{return null}},tr=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Le,e==="7702"?"7702":"non7702")}catch{}},rr=()=>Me()!==null,Oe=b.createContext(null),Z=b.createContext(null),nr=({children:e,value:t,whitelist:r})=>{const n=!!r&&r.enabled!==!1,{isWhitelisted:o,isLoading:a,whitelistCheck:s}=Be(n?r:{enabled:!1}),l=n&&!o,c=b.useMemo(()=>({...t,mode:l?"ondemand":t.mode,allowedTokens:l?er:t.allowedTokens,isUserWhitelisted:o,isWhitelistChecking:a,isWhitelistConfigured:n,isWhitelistGateActive:l,whitelistCheck:s}),[t,n,l,o,a,s]);return $.jsx(Z.Provider,{value:c,children:e})},ar=({feeToleranceBps:e,children:t,provider:r="privy",supportedChainIds:n,allowedTokens:o,network:a="testnet",mode:s,skipFlow:l=[],nativeChainId:c,appName:d="Spicenet",apiUrl:h,theme:u,rpcOverrides:p,swapper:m,liquidityVenues:w,additionalSourceTokens:i,whitelist:g,assetDisplay:x})=>{const y=ue(e);b.useEffect(()=>{if(!h)return;const O=W.getBaseUrl();return W.setBaseUrl(h),()=>W.setBaseUrl(O)},[h]),b.useEffect(()=>(ye(p),()=>ye(void 0)),[p]);const f=b.useMemo(()=>A.getChainIdsByNetwork(a),[a]),C=n??f,k=u??null,[I,E]=b.useState(()=>s??Me()??"7702");b.useEffect(()=>{s&&E(s)},[s]);const N=b.useCallback(O=>{if(s){E(s);return}E(O),tr(O)},[s]),{embeddedAddress:T,externalAddress:S}=ae(),J=JSON.stringify(p),U=b.useMemo(Te,[a,h,J,r]),q=b.useMemo(()=>({feeToleranceBps:y,inventory:U,provider:r,supportedChainIds:C,allowedTokens:o,skipFlow:l,mode:I,setMode:N,network:a,nativeChainId:c,appName:d,apiUrl:h,rpcOverrides:p,swapper:m,liquidityVenues:w,additionalSourceTokens:i,embeddedWalletAddress:T,externalWalletAddress:S,isUserWhitelisted:null,isWhitelistChecking:!1,isWhitelistConfigured:!1,isWhitelistGateActive:!1}),[U,y,r,C,o,l,I,N,a,c,d,h,p,m,w,i,T,S]);return $.jsx(Oe.Provider,{value:k,children:$.jsx(Z.Provider,{value:q,children:$.jsx(nr,{value:q,whitelist:g,children:$.jsx(qe.Provider,{value:x,children:t})})})})},or={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:Y.ui,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"}},sr={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"},ir={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"},je=(e="light")=>({mode:e,...or,colors:e==="light"?sr:ir});function ee(e,t){const r=e.replace("#",""),n=Math.max(0,Math.round(parseInt(r.substring(0,2),16)*(1-t))),o=Math.max(0,Math.round(parseInt(r.substring(2,4),16)*(1-t))),a=Math.max(0,Math.round(parseInt(r.substring(4,6),16)*(1-t)));return`#${n.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`}function lr(e,t){return{shell:t?.shell??"#141414",shellBorder:t?.shellBorder??ee(t?.shell??"#141414",.35),shellInnerBorder:t?.shellInnerBorder??ee(t?.shell??"#141414",.55),cardBg:t?.cardBg??"#1e1e1e",inputBg:t?.inputBg??"#171717",hoverBg:t?.hoverBg??"#2a2a2a",textPrimary:t?.textPrimary??"#ffffff",textSecondary:t?.textSecondary??"#888888",inputText:t?.inputText??"#e0e0e0",inputPlaceholder:t?.inputPlaceholder??"#555555",cardBorder:t?.cardBorder??"rgba(255,255,255,0.08)",inputBorder:t?.inputBorder??"rgba(255,255,255,0.10)",buttonBorder:t?.buttonBorder??"rgba(255,255,255,0.12)",successBg:t?.successBg??"#0a1f18",successBorder:t?.successBorder??"#1a4a3a",successText:t?.successText??"#6ee7b7",warningBg:t?.warningBg??"#1f1a0d",warningBorder:t?.warningBorder??"#4a3820",warningText:t?.warningText??"#fbbf24",errorBg:t?.errorBg??"#1f0d0d",errorBorder:t?.errorBorder??"#4a2020",errorText:t?.errorText??"#f87171",infoBg:t?.infoBg??"#0d1325",infoBorder:t?.infoBorder??"#2a3a5a",infoText:t?.infoText??"#60a5fa"}}function cr(e){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 De(e,t){const r=t?{...e,...t}:e,n=r.dark??!1,o=r.primaryColor,a=r.shell??(n?"#141414":"#ffffff");return{primaryColor:o,dark:n,fontFamily:r.fontFamily??'"Helvetica Neue", sans-serif',appName:r.appName??"Spicenet",logo:r.logo,borderRadius:r.borderRadius??"8px",shell:a,shellBorder:ee(a,n?.35:.085),shellInnerBorder:ee(a,n?.55:.165),card:r.card??(n?"#1e1e1e":"#f9fafb"),input:n?"#171717":"#ffffff",hover:n?"#2a2a2a":"#f3f4f6",text:r.text??(n?"#ffffff":"#111827"),textMuted:r.textMuted??(n?"#888888":"#6b7280"),inputText:n?"#e0e0e0":"#111827",inputPlaceholder:n?"#555555":"#9ca3af",border:r.border??(n?"rgba(255,255,255,0.08)":"#e5e7eb"),inputBorder:n?"rgba(255,255,255,0.10)":"#d1d5db",buttonBorder:n?"rgba(255,255,255,0.12)":"#0e0d0b",successBg:n?"#0a1f18":"#d1fae5",successBorder:n?"#1a4a3a":"#6ee7b7",successText:n?"#6ee7b7":"#065f46",warningBg:n?"#1f1a0d":"#fef3c7",warningBorder:n?"#4a3820":"#fde68a",warningText:n?"#fbbf24":"#92400e",errorBg:n?"#1f0d0d":"#fef2f2",errorBorder:n?"#4a2020":"#fecaca",errorText:n?"#f87171":"#dc2626",infoBg:n?"#0d1325":"#dbeafe",infoBorder:n?"#2a3a5a":"#93c5fd",infoText:n?"#60a5fa":"#1e40af"}}const dr=Y.mono;function _e(e,t){const r=b.useContext(Oe)??void 0;return b.useMemo(()=>{const n=r??{primaryColor:"#EA4B4B"},o={...e?.primaryColor?{primaryColor:e.primaryColor}:{},...e?.fontFamily?{fontFamily:e.fontFamily}:{},...t!==void 0?{dark:t}:{}},a=De(n,o),{dark:s,primaryColor:l,appName:c}=a,d=je(s?"dark":"light"),h={...d,colors:{...d.colors,primary:l,primaryHover:`${l}dd`},typography:{...d.typography,fontFamily:a.fontFamily}},u={shell:a.shell,shellBorder:a.shellBorder,shellInnerBorder:a.shellInnerBorder,cardBg:a.card,inputBg:a.input,hoverBg:a.hover,textPrimary:a.text,textSecondary:a.textMuted,inputText:a.inputText,inputPlaceholder:a.inputPlaceholder,cardBorder:a.border,inputBorder:a.inputBorder,buttonBorder:a.buttonBorder,successBg:a.successBg,successBorder:a.successBorder,successText:a.successText,warningBg:a.warningBg,warningBorder:a.warningBorder,warningText:a.warningText,errorBg:a.errorBg,errorBorder:a.errorBorder,errorText:a.errorText,infoBg:a.infoBg,infoBorder:a.infoBorder,infoText:a.infoText},p=e?.inputVariant?e.inputVariant==="dark":s;return{brand:r,theme:h,dark:s,appName:c,primaryColor:l,dk:u,palette:u,fontFamily:a.fontFamily,monoFont:dr,inputDark:p,cardBg:p?u.cardBg:"#E9E9E9",cardBorder:p?u.cardBorder:"#C6C6C6",textPrimary:u.textPrimary,textSecondary:u.textSecondary,subtitleText:p?u.textSecondary:"#979AA0"}},[r,e,t])}const ze="spiceflow-spinner-keyframes";function ur(){if(typeof document>"u"||document.getElementById(ze))return;const e=document.createElement("style");e.id=ze,e.textContent="@keyframes spiceflow-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",document.head.appendChild(e)}const fe=({size:e=16,borderWidth:t=2,color:r="currentColor",style:n})=>{const o=b.useRef(!1);return b.useEffect(()=>{o.current||(ur(),o.current=!0)},[]),$.jsx("div",{role:"status","aria-label":"Loading",style:{width:`${e}px`,height:`${e}px`,border:`${t}px solid ${r}`,borderTop:`${t}px solid transparent`,borderRadius:"50%",animation:"spiceflow-spin 1s linear infinite",flexShrink:0,...n}})},z=({variant:e="primary",size:t="md",loading:r=!1,fullWidth:n=!1,disabled:o,children:a,className:s="",style:l,theme:c,styles:d,dark:h,...u})=>{const{theme:p,dark:m,palette:w}=_e(d,h),i=c||p,g=h??m,[x,y]=b.useState(!1),[f,C]=b.useState(!1),k=g?w.shell:"white",I=()=>{switch(e){case"primary":return{backgroundColor:d?.button?.backgroundColor||i.colors.primary,color:d?.button?.color||"#ffffff",border:`1px solid ${d?.button?.backgroundColor||i.colors.primary}`};case"secondary":return{backgroundColor:i.colors.secondary,color:i.colors.text,border:`1px solid ${i.colors.border}`};case"success":return{backgroundColor:i.colors.success,color:i.colors.text,border:`1px solid ${i.colors.success}`};case"error":return{backgroundColor:i.colors.error,color:i.colors.text,border:`1px solid ${i.colors.error}`};case"ghost":return{backgroundColor:"transparent",color:i.colors.textSecondary,border:`1px solid ${i.colors.border}`};case"outline":{const S=d?.button?.backgroundColor||i.colors.primary,J=d?.button?.color||(g?"#ffffff":"#0e0d0b"),U=d?.button?.borderColor||(g?`${i.colors.primary}88`:"#0e0d0b"),q=o||r,O=g?"1px":"1.5px",Je=d?.button?.disabledBackgroundColor||`${S}88`,Ge=d?.button?.disabledColor||J;return{height:"56px",backgroundColor:q?Je:f?`${S}cc`:x?`${S}ee`:S,color:q?Ge:J,border:`${O} solid ${U}`,borderRadius:d?.button?.borderRadius||"12px",fontSize:"22px",fontWeight:500,fontFamily:Y.mono,opacity:q?.78:1,transform:q?"none":f?"scale(0.98)":x?"translateY(-2px)":"none",boxShadow:q?`3px 3px 0px ${k}, 4px 4px 0px ${U}`:f?`2px 2px 0px ${U}`:x?`5px 5px 0px ${k}, 6px 6px 0px ${U}`:`3px 3px 0px ${k}, 4px 4px 0px ${U}`,transition:"transform 150ms ease, box-shadow 150ms ease, background-color 150ms ease, border-color 150ms ease, color 150ms ease"}}default:return{}}},E=()=>{if(e==="outline")return{};switch(t){case"sm":return{padding:`${i.spacing.sm} ${i.spacing.md}`,fontSize:i.typography.fontSize.sm};case"md":return{padding:`${i.spacing.md} ${i.spacing.lg}`,fontSize:i.typography.fontSize.base};case"lg":return{padding:`${i.spacing.lg} ${i.spacing.xl}`,fontSize:i.typography.fontSize.lg};default:return{}}},N={borderRadius:d?.button?.borderRadius||i.borderRadius.md,fontWeight:d?.button?.fontWeight||i.typography.fontWeight.medium,fontFamily:d?.button?.fontFamily||i.typography.fontFamily,fontSize:d?.button?.fontSize||void 0,transition:"background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease",cursor:o||r?"not-allowed":"pointer",opacity:(o||r)&&e!=="outline"?.6:1,width:n?"100%":"auto",display:"flex",alignItems:"center",justifyContent:"center",gap:i.spacing.sm,...I(),...E(),...d?.button?.fontSize&&{fontSize:d.button.fontSize}},T=o||r;return $.jsxs("button",{type:u.type??"button","data-spiceflow-focus":!0,"aria-busy":r||void 0,"aria-disabled":T||void 0,style:{...N,...l},className:s,disabled:T,onMouseEnter:S=>{y(!0),u.onMouseEnter?.(S)},onMouseLeave:S=>{y(!1),C(!1),u.onMouseLeave?.(S)},onMouseDown:S=>{C(!0),u.onMouseDown?.(S)},onMouseUp:S=>{C(!1),u.onMouseUp?.(S)},...u,children:[r&&$.jsx(fe,{size:16}),a]})},fr=({onAuthSuccess:e,onAuthError:t,theme:r="light",className:n="",buttonText:o="Login with Privy",autoTrigger:a=!1})=>{const s=je(r),[l,c]=b.useState(!1),[d,h]=b.useState(!1),{ready:u,authenticated:p,user:m}=F.usePrivy(),{login:w}=F.useLogin(),{logout:i}=F.useLogout();b.useEffect(()=>{c(!0)},[]),b.useEffect(()=>{a&&u&&!p&&l&&!d&&(h(!0),g())},[a,u,p,l,d]),b.useEffect(()=>{if(u&&p&&m&&e){const y=m.wallet?.address||m.email?.address;y&&e(y)}},[u,p,m,e]),b.useEffect(()=>{},[u,p,t]);const g=()=>{try{w()}catch(y){const f=`Login failed: ${String(y)}`;t?t(f):console.error(f)}},x=()=>{try{i()}catch(y){const f=`Logout failed: ${String(y)}`;t?t(f):console.error(f)}};if(!l)return $.jsx("div",{className:n,children:$.jsx(z,{variant:"primary",disabled:!0,theme:s,children:o})});if(!u)return $.jsx("div",{className:n,children:$.jsx(z,{variant:"primary",disabled:!0,theme:s,children:"Loading..."})});if(p&&m){const y=m.wallet?.address||m.email?.address,f=y?Ne(y):"Connected";return $.jsx("div",{className:n,children:$.jsxs(z,{variant:"primary",onClick:x,theme:s,children:["Logout (",f,")"]})})}return a?$.jsx("div",{className:n,children:$.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"20px",flexDirection:"column",gap:"12px"},children:[$.jsx(fe,{size:40,borderWidth:3,color:"#3b82f6"}),$.jsx("p",{style:{color:"#6b7280",fontSize:"14px"},children:"Opening login..."})]})}):$.jsx("div",{className:n,children:$.jsx(z,{variant:"primary",onClick:g,theme:s,children:o})})};exports.Button=z,exports.CHAIN_CONFIGS=st,exports.EMPTY_INVENTORY=Ie,exports.PrivyLogin=fr,exports.RELAYER_API_URL=Ce,exports.RelayerService=te,exports.SpiceFlowProvider=ar,exports.SpiceFlowProviderContext=Z,exports.SpiceflowError=B,exports.Spinner=fe,exports.addressesEqual=L,exports.amountsWithinBps=qt,exports.buildDarkPalette=lr,exports.buildLightPalette=cr,exports.calculateBpsFee=Fe,exports.copyToClipboard=Vt,exports.createInitialSteps=Tt,exports.createInventoryStore=Te,exports.describeChainSwitchError=$t,exports.duration=R,exports.easing=P,exports.ensureSmartWallet=Ae,exports.ensureWalletOnChain=ct,exports.feeAmountsWithinTolerance=Pe,exports.feeBreakdownsWithinTolerance=Lt,exports.font=Y,exports.formatAssetBalance=Xt,exports.formatBalance=Re,exports.formatDecimalInput=Ht,exports.formatRawTokenInput=Mt,exports.formatUsd=Jt,exports.getAllAssetsForChain=ut,exports.getAssetDisplayChainName=Kt,exports.getAssetDisplayName=Ue,exports.getAssetDisplaySymbol=We,exports.getBatchFees=X,exports.getChainConfig=M,exports.getChainName=V,exports.getChainsForAssets=dt,exports.getClientForChain=be,exports.getDelegateContractAddress=it,exports.getEscrowFreeFeePreview=_t,exports.getExplorerUrl=lt,exports.getRelayerErrorDetail=wt,exports.getRpcUrlForChain=H,exports.getSingleNetOutput=Dt,exports.getSupplyFeePreview=zt,exports.getTokenDecimals=ft,exports.getWalletBalanceEntries=Bt,exports.hasStoredSpiceFlowMode=rr,exports.isAssetAllowed=Yt,exports.isSpiceflowError=oe,exports.isUserRejection=xe,exports.parseNumericInput=Gt,exports.radius=gt,exports.relayerFetch=Q,exports.relayerService=W,exports.resolveFeeToleranceBps=ue,exports.resolveTheme=De,exports.sanitizeError=vt,exports.splitFeeInclusiveAmount=Ut,exports.transition=yt,exports.truncateAddress=Ne,exports.useAssetDisplay=Zt,exports.useIsUserWhitelisted=Be,exports.useProviderWallets=ae,exports.useSpiceBrand=_e,exports.useWallet=Se,exports.z=ht;
|
package/package.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spicenet-io/spiceflow-ui",
|
|
3
|
-
"version": "4.18.
|
|
3
|
+
"version": "4.18.7",
|
|
4
4
|
"description": "Spiceflow UI SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"workspaces": [
|
|
7
7
|
"edge-terminal"
|
|
8
8
|
],
|
|
9
9
|
"packageManager": "bun@1.3.13",
|
|
10
|
-
"main": "dist/index.cjs
|
|
10
|
+
"main": "dist/index.cjs",
|
|
11
11
|
"module": "dist/index.js",
|
|
12
12
|
"types": "dist/index.d.ts",
|
|
13
13
|
"exports": {
|
|
14
14
|
".": {
|
|
15
15
|
"types": "./dist/index.d.ts",
|
|
16
16
|
"import": "./dist/index.js",
|
|
17
|
-
"require": "./dist/index.cjs
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
18
18
|
},
|
|
19
19
|
"./auth/privy": {
|
|
20
20
|
"types": "./dist/providers/privy.d.ts",
|
|
21
21
|
"import": "./dist/auth-privy.js",
|
|
22
|
-
"require": "./dist/auth-privy.cjs
|
|
22
|
+
"require": "./dist/auth-privy.cjs"
|
|
23
23
|
},
|
|
24
24
|
"./styles.css": "./dist/providers/custom.css"
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": [
|
|
27
27
|
"./dist/index.js",
|
|
28
|
-
"./dist/index.cjs
|
|
28
|
+
"./dist/index.cjs",
|
|
29
29
|
"./dist/auth-privy.js",
|
|
30
|
-
"./dist/auth-privy.cjs
|
|
30
|
+
"./dist/auth-privy.cjs",
|
|
31
31
|
"./dist/providers/custom.css"
|
|
32
32
|
],
|
|
33
33
|
"files": [
|
|
File without changes
|