@oracle-agent/oracle 0.35.54 → 0.35.55

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.
@@ -1,2 +1,2 @@
1
- var le=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(i){throw r=[i],i}};var ue=le(()=>{});var ho,go,C=le(()=>{ho=300*1e3,go=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});import qt from"node:fs";import{JsonRpcProvider as Ht}from"ethers";import{Interface as ne,keccak256 as Ft}from"ethers";import{Transaction as bu}from"@scure/btc-signer";import{ed25519 as xu}from"@noble/curves/ed25519.js";import{Interface as Ve,MaxUint256 as Sr,isAddress as Ar,keccak256 as vr,toUtf8Bytes as Ir}from"ethers";import{Interface as We,isAddress as nr}from"ethers";import{isAddress as Xt}from"ethers";var ar=new We(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Ue,isAddress as ur}from"ethers";var mr=new Ue(["function approve(address spender,uint256 amount) returns (bool)"]),wr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var _r=new Ve(["function approve(address spender,uint256 amount) returns (bool)"]);ue();import{readFileSync as Pr,readdirSync as Br,existsSync as Je}from"node:fs";import{dirname as Ke,join as E}from"node:path";import{fileURLToPath as Ge}from"node:url";var x=Ke(Ge(import.meta.url));function Ye(){let e=[E(x,"descriptors"),E(x,"clear-sign","descriptors"),E(x,"..","clear-sign","descriptors"),E(x,"..","..","clear-sign","descriptors"),E(x,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Je(t))return t;return e[0]}var Mr=Ye();var qr=(1n<<256n)-1n;import{Address as Yr,NETWORK as Xr,OutScript as Zr,RawTx as Qr,SigHash as en,TEST_NETWORK as tn,Transaction as rn}from"@scure/btc-signer";import{createHash as Xe}from"node:crypto";import{base58 as an}from"@scure/base";import{getCompiledTransactionMessageDecoder as ln}from"@solana/transaction-messages";var de=e=>Xe("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),un=new Map([[de("route"),{name:"route",prefixBytes:0}],[de("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);import{AsyncLocalStorage as Ze}from"node:async_hooks";var pn=new Ze;var An=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,vn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,In=AbortSignal.prototype.throwIfAborted,kn=EventTarget.prototype.addEventListener,On=EventTarget.prototype.removeEventListener,Tn=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null;var Nn=64*1024,Cn=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});var Mn=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"});var Un=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Vn=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"});var Gn="0x"+"00".repeat(32);var et=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),eo=Object.freeze(et.map(e=>e[0]));import{base58 as es}from"@scure/base";import{Interface as be}from"ethers";C();import{TypedDataEncoder as Ko,getAddress as Go}from"ethers";C();import{TypedDataEncoder as So,getAddress as Ao,isAddress as vo}from"ethers";var rt=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),nt=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});import{TypedDataEncoder as Po,getAddress as Bo,isAddress as Do}from"ethers";var Oo=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});C();var ot=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Wo=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var it=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),Uo=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Zo=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var ct=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var wi=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var lt=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),hi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),gi=new be(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),yi=new be(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),bi=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}});var ut=Object.freeze([...ct]),Ei=Object.freeze({...lt});import{ed25519 as Bi}from"@noble/curves/ed25519.js";import{base58 as Fi}from"@scure/base";import{RawTx as Mi,SigHash as qi,Transaction as Hi}from"@scure/btc-signer";import{Transaction as Wi,keccak256 as Ui,verifyTypedData as Vi}from"ethers";import{encode as Ai}from"@msgpack/msgpack";import{keccak256 as Ii,verifyTypedData as ki}from"ethers";var Oi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ti=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});import{closeSync as hs,constants as mt,fchmodSync as gs,fsyncSync as ys,lstatSync as bs,mkdirSync as Es,openSync as xs,readFileSync as Ss,renameSync as As,rmSync as vs,writeFileSync as Is}from"node:fs";import{wordlists as ps}from"ethers";var Ts=mt.O_NOFOLLOW??0;import{wordlists as _s}from"ethers";var xe=64*1024;var Ls=32*1024;var gt=["schemaVersion","buildVersion","recordType","execution","custody"],Bs=[...gt,"recordHash"];var Ds=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var yt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Ce=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Hs=new Set(Ce);var vt=64*1024*1024;var Gs=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Ys=Object.freeze(["read","simulate"]);var Xs=1440*60;var sa=Object.freeze(["privkey","wif","xprv","seed"]);var aa=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),ca=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);var Z=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),fa=Object.freeze(Object.fromEntries(Z.map((e,t)=>[e,Object.freeze(t+1<Z.length?[Z[t+1]]:[])])));var It=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var Ot=Object.freeze(["owner","operator","agent","viewer"]),Tt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Nt=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Ya=Object.freeze(["owner"]),Xa=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Za=new Set(Ot),Qa=new Set(Tt),ec=new Set(Object.values(Nt));var Ct=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),tc=Object.freeze(Object.fromEntries(Object.entries(Ct).map(([e,t])=>[e,Object.freeze([...t])])));var _t=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Rt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Lt=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var ic=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),sc=new Set(_t),ac=new Set(Rt),cc=new Set(Lt);var lc=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var uc=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var hc=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var Sc=32*1024*1024;var vc=Object.freeze({N:1<<17,r:8,p:1}),Ic=256*1024*1024,kc=16*1024;var Tc=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as Q}from"node:os";import{join as ee}from"node:path";var _e=process.env.ORACLE_PUBLIC_DESKTOP==="1",$t=_e?process.env.ORACLE_CONFIG_DIR||ee(Q(),".config","oracle"):ee(Q(),".config","oracle"),Rc=_e?$t:ee(Q(),".config","mad-desk");var Dc="0".repeat(64),Fc=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"});var jc=Promise.resolve();import{Wallet as Gc}from"ethers";import{base58 as Xc}from"@scure/base";import{ed25519 as Qc}from"@noble/curves/ed25519.js";import{NETWORK as tl,TEST_NETWORK as rl,WIF as nl,p2wpkh as ol}from"@scure/btc-signer";import{pubECDSA as sl}from"@scure/btc-signer/utils.js";var ll=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),ul=Object.freeze(["binance","bybit","okx","coinbase"]),dl=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),fl=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),pl=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),ml=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),wl=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),hl=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),gl=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),yl=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),bl=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var Dt=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),Le=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Nl=256*1024;var l=new ne(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),$e=new ne(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),re=new ne(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function c(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function Pe(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function jt(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function Mt(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let i=e.artifact,p=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,i?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,i?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,i?.minPayoutRaw,e.exactQuoteNetPayoutRaw,i?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],n;try{n=BigInt(p[0]);for(let g of p.slice(1))if(BigInt(g)!==n)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let d=i?.transactions;if(!Array.isArray(d)||d.length!==1)throw new Error("signer: exact Anvil action transaction required");let h=t==="buy"?"buySpecificNFT":"sellNFT",f;try{if(f=l.decodeFunctionData(h,d[0].data),l.encodeFunctionData(h,[f[0],f[1]]).toLowerCase()!==String(d[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(f[0])!==BigInt(e.tokenId)||BigInt(f[1])!==n)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return n}async function u(e,t,r,i,p,n=[]){let d=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(i,n)},p]);return r.decodeFunctionResult(i,d)[0]}async function Be(e,t,r,{nowMs:i=Date.now(),signerAddress:p}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let n=c(t.destination,"Anvil market"),d=c(t.contract,"Anvil collection"),h=c(t.paymentToken,"Anvil payment token"),f=BigInt(t.nativeSwapFeeWei),g=Number(t.paymentTokenDecimals),y=c(p,"Anvil signer identity"),De=c(t.owner,"Anvil envelope owner");if(y!==De)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let w=String(t.nftAction||"").toLowerCase();if(w!=="buy"&&w!=="sell")throw new Error("signer: unsupported Anvil NFT action");let R=jt(t,w),L=Mt(t,w,R),A=t.anvilAttestation;if(!A||typeof A!="object"||Number(A.snapshotExpiresAtMs)<=Number(i))throw new Error("signer: fresh provider Anvil attestation required");let $=String(Pe(r.anvilRuntimeCodeHashes,n)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test($)||$!==String(A.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let oe=Pe(r.nftPaymentTokenCaps,h);if(!oe||Number(oe.decimals)!==g)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let ie=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(ie)||BigInt(ie)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let v=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let Fe=BigInt(v),se=await e.send("eth_getBlockByNumber",[v,!1]),P=String(se?.hash||"").toLowerCase();if(String(se?.number||"").toLowerCase()!==v||!/^0x[0-9a-f]{64}$/.test(P))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let s=Object.freeze({blockHash:P,requireCanonical:!0}),B=String(await e.send("eth_getCode",[n,s])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(B)||B==="0x")throw new Error("signer: Anvil market runtime is empty");let ae=Ft(B).toLowerCase();if(ae!==$)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[je,Me,qe]=await Promise.all([u(e,n,l,"collection",s),u(e,n,l,"token",s),u(e,n,l,"robinhoodSwapFeeWei",s)]),b=c(je,"live Anvil collection"),I=c(Me,"live Anvil payment token"),ce=BigInt(qe).toString();if(b!==d)throw new Error("signer: live Anvil collection mismatch");if(I!==h)throw new Error("signer: live Anvil payment token mismatch");if(ce!==f.toString())throw new Error("signer: live Anvil native swap fee mismatch");let D=Number(await u(e,I,$e,"decimals",s));if(!Number.isSafeInteger(D)||D!==g)throw new Error("signer: live Anvil payment token decimals mismatch");let F=c(await u(e,b,re,"ownerOf",s,[m]),"live Anvil token owner"),j=null,k=null,O=null,T=null,o;if(w==="buy"){let[M,q,H]=await Promise.all([u(e,n,l,"inventory",s,[m]),u(e,I,$e,"allowance",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSpecificBuy",[m])},s])]);j=!!M,k=BigInt(q).toString();let a=l.decodeFunctionResult("quoteSpecificBuy",H);if(o=Object.freeze({totalCostRaw:BigInt(a[0]).toString(),baseCostRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString(),available:!!a[4]}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil buy quote changed after preparation");if(F!==n)throw new Error("signer: exact Anvil token owner is not the market");if(!j)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(k)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(k)<L)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!o.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(o.totalCostRaw)!==L)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(o.totalCostRaw)!==BigInt(o.baseCostRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[M,q,H]=await Promise.all([u(e,b,re,"getApproved",s,[m]),u(e,b,re,"isApprovedForAll",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSellNFT")},s])]);O=c(M,"live Anvil token approval"),T=!!q;let a=l.decodeFunctionResult("quoteSellNFT",H);if(o=Object.freeze({netPayoutRaw:BigInt(a[0]).toString(),grossPayoutRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString()}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil sell quote changed after preparation");if(F!==y)throw new Error("signer: exact Anvil token owner does not match signer");if(O!==n&&!T)throw new Error("signer: live Anvil NFT approval is insufficient");if(O!==c(t.preconditions?.approvedAddress,"prepared Anvil token approval")||T!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(o.netPayoutRaw)!==L)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(o.netPayoutRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw)!==BigInt(o.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:n,collection:b,paymentToken:I,paymentTokenDecimals:D,nativeSwapFeeWei:ce,signerAddress:y,nftAction:w,tokenId:m.toString(),tokenOwner:F,inventoryMember:j,allowanceRaw:k,approvedAddress:O,approvedForAll:T,quote:o,blockNumber:Fe.toString(),blockHash:P,runtimeCodeHash:ae,verifiedAtMs:Number(i)})}try{let e=JSON.parse(qt.readFileSync(0,"utf8")),t=new Ht(e.rpcUrl,Number(e.chainId)),r=await Be(t,e.envelope,e.policy,{nowMs:Number(e.nowMs),signerAddress:e.signerAddress});process.stdout.write(JSON.stringify(r))}catch(e){process.stderr.write(`Anvil attestation failed: ${String(e?.message||e)}
1
+ var le=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(i){throw r=[i],i}};var ue=le(()=>{});var ho,go,C=le(()=>{ho=300*1e3,go=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});import Mt from"node:fs";import{JsonRpcProvider as Ht}from"ethers";import{Interface as ne,keccak256 as Ft}from"ethers";import{Transaction as bu}from"@scure/btc-signer";import{ed25519 as xu}from"@noble/curves/ed25519.js";import{Interface as Ve,MaxUint256 as Sr,isAddress as Ar,keccak256 as vr,toUtf8Bytes as Ir}from"ethers";import{Interface as We,isAddress as nr}from"ethers";import{isAddress as Xt}from"ethers";var ar=new We(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Ue,isAddress as ur}from"ethers";var mr=new Ue(["function approve(address spender,uint256 amount) returns (bool)"]),wr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var _r=new Ve(["function approve(address spender,uint256 amount) returns (bool)"]);ue();import{readFileSync as Pr,readdirSync as Br,existsSync as Je}from"node:fs";import{dirname as Ke,join as E}from"node:path";import{fileURLToPath as Ge}from"node:url";var x=Ke(Ge(import.meta.url));function Ye(){let e=[E(x,"descriptors"),E(x,"clear-sign","descriptors"),E(x,"..","clear-sign","descriptors"),E(x,"..","..","clear-sign","descriptors"),E(x,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Je(t))return t;return e[0]}var qr=Ye();var Mr=(1n<<256n)-1n;import{Address as Yr,NETWORK as Xr,OutScript as Zr,RawTx as Qr,SigHash as en,TEST_NETWORK as tn,Transaction as rn}from"@scure/btc-signer";import{createHash as Xe}from"node:crypto";import{base58 as an}from"@scure/base";import{getCompiledTransactionMessageDecoder as ln}from"@solana/transaction-messages";var de=e=>Xe("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),un=new Map([[de("route"),{name:"route",prefixBytes:0}],[de("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);import{AsyncLocalStorage as Ze}from"node:async_hooks";var pn=new Ze;var An=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,vn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,In=AbortSignal.prototype.throwIfAborted,kn=EventTarget.prototype.addEventListener,On=EventTarget.prototype.removeEventListener,Tn=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null;var Nn=64*1024,Cn=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});var qn=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"});var Un=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Vn=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"});var Gn="0x"+"00".repeat(32);var et=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),eo=Object.freeze(et.map(e=>e[0]));import{base58 as es}from"@scure/base";import{Interface as be}from"ethers";C();import{TypedDataEncoder as Ko,getAddress as Go}from"ethers";C();import{TypedDataEncoder as So,getAddress as Ao,isAddress as vo}from"ethers";var rt=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),nt=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});import{TypedDataEncoder as Po,getAddress as Bo,isAddress as Do}from"ethers";var Oo=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});C();var ot=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Wo=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var it=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),Uo=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Zo=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var ct=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var wi=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var lt=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),hi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),gi=new be(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),yi=new be(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),bi=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}});var ut=Object.freeze([...ct]),Ei=Object.freeze({...lt});import{ed25519 as Bi}from"@noble/curves/ed25519.js";import{base58 as Fi}from"@scure/base";import{RawTx as qi,SigHash as Mi,Transaction as Hi}from"@scure/btc-signer";import{Transaction as Wi,keccak256 as Ui,verifyTypedData as Vi}from"ethers";import{encode as Ai}from"@msgpack/msgpack";import{keccak256 as Ii,verifyTypedData as ki}from"ethers";var Oi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ti=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});import{closeSync as hs,constants as mt,fchmodSync as gs,fsyncSync as ys,lstatSync as bs,mkdirSync as Es,openSync as xs,readFileSync as Ss,renameSync as As,rmSync as vs,writeFileSync as Is}from"node:fs";import{wordlists as ps}from"ethers";var Ts=mt.O_NOFOLLOW??0;import{wordlists as _s}from"ethers";var xe=64*1024;var Ls=32*1024;var gt=["schemaVersion","buildVersion","recordType","execution","custody"],Bs=[...gt,"recordHash"];var Ds=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var yt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Ce=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Hs=new Set(Ce);var vt=64*1024*1024;var Gs=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Ys=Object.freeze(["read","simulate"]);var Xs=1440*60;var sa=Object.freeze(["privkey","wif","xprv","seed"]);var aa=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),ca=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);var Z=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),fa=Object.freeze(Object.fromEntries(Z.map((e,t)=>[e,Object.freeze(t+1<Z.length?[Z[t+1]]:[])])));var It=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var Ot=Object.freeze(["owner","operator","agent","viewer"]),Tt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Nt=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Ya=Object.freeze(["owner"]),Xa=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Za=new Set(Ot),Qa=new Set(Tt),ec=new Set(Object.values(Nt));var Ct=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),tc=Object.freeze(Object.fromEntries(Object.entries(Ct).map(([e,t])=>[e,Object.freeze([...t])])));var _t=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Rt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Lt=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var ic=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),sc=new Set(_t),ac=new Set(Rt),cc=new Set(Lt);var lc=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var uc=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var hc=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var Sc=32*1024*1024;var vc=Object.freeze({N:1<<17,r:8,p:1}),Ic=256*1024*1024,kc=16*1024;var Tc=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as Q}from"node:os";import{join as ee}from"node:path";var _e=process.env.ORACLE_PUBLIC_DESKTOP==="1",$t=_e?process.env.ORACLE_CONFIG_DIR||ee(Q(),".config","oracle"):ee(Q(),".config","oracle"),Rc=_e?$t:ee(Q(),".config","mad-desk");var Dc="0".repeat(64),Fc=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"});var jc=Promise.resolve();import{Wallet as Gc}from"ethers";import{base58 as Xc}from"@scure/base";import{ed25519 as Qc}from"@noble/curves/ed25519.js";import{NETWORK as tl,TEST_NETWORK as rl,WIF as nl,p2wpkh as ol}from"@scure/btc-signer";import{pubECDSA as sl}from"@scure/btc-signer/utils.js";var ll=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),ul=Object.freeze(["binance","bybit","okx","coinbase"]),dl=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),fl=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),pl=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),ml=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),wl=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),hl=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),gl=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),yl=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),bl=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var Dt=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),Le=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Nl=256*1024;var l=new ne(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),$e=new ne(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),re=new ne(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function c(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function Pe(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function jt(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function qt(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let i=e.artifact,p=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,i?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,i?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,i?.minPayoutRaw,e.exactQuoteNetPayoutRaw,i?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],n;try{n=BigInt(p[0]);for(let g of p.slice(1))if(BigInt(g)!==n)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let d=i?.transactions;if(!Array.isArray(d)||d.length!==1)throw new Error("signer: exact Anvil action transaction required");let h=t==="buy"?"buySpecificNFT":"sellNFT",f;try{if(f=l.decodeFunctionData(h,d[0].data),l.encodeFunctionData(h,[f[0],f[1]]).toLowerCase()!==String(d[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(f[0])!==BigInt(e.tokenId)||BigInt(f[1])!==n)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return n}async function u(e,t,r,i,p,n=[]){let d=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(i,n)},p]);return r.decodeFunctionResult(i,d)[0]}async function Be(e,t,r,{nowMs:i=Date.now(),signerAddress:p}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let n=c(t.destination,"Anvil market"),d=c(t.contract,"Anvil collection"),h=c(t.paymentToken,"Anvil payment token"),f=BigInt(t.nativeSwapFeeWei),g=Number(t.paymentTokenDecimals),y=c(p,"Anvil signer identity"),De=c(t.owner,"Anvil envelope owner");if(y!==De)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let w=String(t.nftAction||"").toLowerCase();if(w!=="buy"&&w!=="sell")throw new Error("signer: unsupported Anvil NFT action");let R=jt(t,w),L=qt(t,w,R),A=t.anvilAttestation;if(!A||typeof A!="object"||Number(A.snapshotExpiresAtMs)<=Number(i))throw new Error("signer: fresh provider Anvil attestation required");let $=String(Pe(r.anvilRuntimeCodeHashes,n)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test($)||$!==String(A.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let oe=Pe(r.nftPaymentTokenCaps,h);if(!oe||Number(oe.decimals)!==g)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let ie=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(ie)||BigInt(ie)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let v=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let Fe=BigInt(v),se=await e.send("eth_getBlockByNumber",[v,!1]),P=String(se?.hash||"").toLowerCase();if(String(se?.number||"").toLowerCase()!==v||!/^0x[0-9a-f]{64}$/.test(P))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let s=Object.freeze({blockHash:P,requireCanonical:!0}),B=String(await e.send("eth_getCode",[n,s])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(B)||B==="0x")throw new Error("signer: Anvil market runtime is empty");let ae=Ft(B).toLowerCase();if(ae!==$)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[je,qe,Me]=await Promise.all([u(e,n,l,"collection",s),u(e,n,l,"token",s),u(e,n,l,"robinhoodSwapFeeWei",s)]),b=c(je,"live Anvil collection"),I=c(qe,"live Anvil payment token"),ce=BigInt(Me).toString();if(b!==d)throw new Error("signer: live Anvil collection mismatch");if(I!==h)throw new Error("signer: live Anvil payment token mismatch");if(ce!==f.toString())throw new Error("signer: live Anvil native swap fee mismatch");let D=Number(await u(e,I,$e,"decimals",s));if(!Number.isSafeInteger(D)||D!==g)throw new Error("signer: live Anvil payment token decimals mismatch");let F=c(await u(e,b,re,"ownerOf",s,[m]),"live Anvil token owner"),j=null,k=null,O=null,T=null,o;if(w==="buy"){let[q,M,H]=await Promise.all([u(e,n,l,"inventory",s,[m]),u(e,I,$e,"allowance",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSpecificBuy",[m])},s])]);j=!!q,k=BigInt(M).toString();let a=l.decodeFunctionResult("quoteSpecificBuy",H);if(o=Object.freeze({totalCostRaw:BigInt(a[0]).toString(),baseCostRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString(),available:!!a[4]}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil buy quote changed after preparation");if(F!==n)throw new Error("signer: exact Anvil token owner is not the market");if(!j)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(k)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(k)<L)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!o.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(o.totalCostRaw)!==L)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(o.totalCostRaw)!==BigInt(o.baseCostRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[q,M,H]=await Promise.all([u(e,b,re,"getApproved",s,[m]),u(e,b,re,"isApprovedForAll",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSellNFT")},s])]);O=c(q,"live Anvil token approval"),T=!!M;let a=l.decodeFunctionResult("quoteSellNFT",H);if(o=Object.freeze({netPayoutRaw:BigInt(a[0]).toString(),grossPayoutRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString()}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil sell quote changed after preparation");if(F!==y)throw new Error("signer: exact Anvil token owner does not match signer");if(O!==n&&!T)throw new Error("signer: live Anvil NFT approval is insufficient");if(O!==c(t.preconditions?.approvedAddress,"prepared Anvil token approval")||T!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(o.netPayoutRaw)!==L)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(o.netPayoutRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw)!==BigInt(o.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:n,collection:b,paymentToken:I,paymentTokenDecimals:D,nativeSwapFeeWei:ce,signerAddress:y,nftAction:w,tokenId:m.toString(),tokenOwner:F,inventoryMember:j,allowanceRaw:k,approvedAddress:O,approvedForAll:T,quote:o,blockNumber:Fe.toString(),blockHash:P,runtimeCodeHash:ae,verifiedAtMs:Number(i)})}try{let e=JSON.parse(Mt.readFileSync(0,"utf8")),t=new Ht(e.rpcUrl,Number(e.chainId)),r=await Be(t,e.envelope,e.policy,{nowMs:Number(e.nowMs),signerAddress:e.signerAddress});process.stdout.write(JSON.stringify(r))}catch(e){process.stderr.write(`Anvil attestation failed: ${String(e?.message||e)}
2
2
  `),process.exitCode=1}
@@ -20,5 +20,5 @@ Type digest ${t}: `}import{createHash as Du,randomBytes as Fu,timingSafeEqual as
20
20
  `;for(;;)try{let w=J.openSync(f,"wx",384);try{J.writeFileSync(w,p),J.fsyncSync(w)}finally{J.closeSync(w)}try{J.linkSync(f,n)}finally{J.unlinkSync(f)}break}catch(w){try{J.existsSync(f)&&J.unlinkSync(f)}catch{}if(w?.code!=="EEXIST")throw new Error("cex-state: lock refused");let g;try{g=J.readFileSync(n,"utf8")}catch(b){if(b?.code==="ENOENT")continue;throw new Error("cex-state: corrupt lock refused")}let h;try{h=JSON.parse(g)}catch{throw new Error("cex-state: corrupt lock refused")}if(h?.version!==1||!/^[0-9a-f]{32}$/.test(h.token||"")||!Number.isSafeInteger(h.createdAtMs))throw new Error("cex-state: corrupt lock refused");if(s(h)===!1&&Date.now()-h.createdAtMs>3e4){try{J.unlinkSync(n)}catch{throw new Error("cex-state: stale lock recovery refused")}continue}if(Date.now()>=m)throw new Error("cex-state: lock busy");i(10)}try{return d()}finally{let w;try{w=JSON.parse(J.readFileSync(n,"utf8"))}catch{throw new Error("cex-state: lock ownership lost")}if(w.token!==u||w.pid!==process.pid||w.processStart!==o)throw new Error("cex-state: lock ownership lost");J.unlinkSync(n)}},a=()=>{let d=Oa(t);try{if(!J.existsSync(e)){if(J.existsSync(r))throw new Error("cex-state: rollback detected");return{version:1,sequence:0,orders:[]}}let u=JSON.parse(L(e));if(!ka(u.mac,Yr(d,u.state)))throw new Error("cex-state: integrity failed");let m=JSON.parse(L(r));if(!ka(m.mac,Yr(d,m.marker))||m.marker.sequence!==u.state.sequence||m.marker.stateMac!==u.mac)throw new Error("cex-state: rollback detected");return u.state}finally{d.fill(0)}},c=d=>{let u=Oa(t);try{let m={...d,sequence:d.sequence+1},f=Yr(u,m),p={version:1,sequence:m.sequence,stateMac:f};return J.mkdirSync(dt.dirname(e),{recursive:!0,mode:448}),J.mkdirSync(dt.dirname(r),{recursive:!0,mode:448}),Ae(r,JSON.stringify({marker:p,mac:Yr(u,p)})+`
21
21
  `),Ae(e,JSON.stringify({state:m,mac:f})+`
22
22
  `),m}finally{u.fill(0)}};return Object.freeze({getByTradeId(d){return l(()=>a().orders.find(u=>u.tradeId===d)||null)},prepare(d){return l(()=>{let u=a(),m=u.orders.find(p=>p.tradeId===d.tradeId||p.requestDigest===d.requestDigest);if(m)throw new Error(`cex-state: ${m.state} order requires status reconciliation; create not resent`);let f={...d,state:"prepared",preparedAtMs:d.nowMs};return c({...u,orders:[...u.orders,f]}),Object.freeze(f)})},transition(d,u,m,f={}){return l(()=>{let p=a(),w=p.orders.findIndex(h=>h.tradeId===d);if(w<0)throw new Error("cex-state: durable prior order required");if(![].concat(u).includes(p.orders[w].state))throw new Error(`cex-state: ${p.orders[w].state} status requires reconciliation`);let g={...p.orders[w],...f,state:m};return p.orders[w]=g,c(p),Object.freeze(g)})},requirePrior({venue:d,accountId:u,credentialRef:m,symbol:f,venueOrderId:p}){return l(()=>{let w=a().orders.find(g=>g.venue===d&&g.accountId===u&&g.credentialRef===m&&g.symbol===f&&g.venueOrderId===p);if(!w)throw new Error("cex-state: exact durable prior order required");return Object.freeze(w)})}})}import{createHash as sm}from"node:crypto";import{createHash as Yp}from"node:crypto";var wo=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),sr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Xp=/^(?:0|[1-9]\d*)(?:\.\d+)?$/,Zp=/^(?=[A-Za-z0-9._-]{1,128}$)(?=.*[A-Za-z0-9])[A-Za-z0-9._-]+$/,Na=(e,t)=>{let r=String(e??"");if(!Xp.test(r))throw new Error(`cex: ${t} must be a decimal string`);let[n,o=""]=r.split(".");return{text:r,integer:BigInt(n+o),scale:o.length}};var po=(e,t)=>{let r=String(e??"");if(!Zp.test(r))throw new Error(`cex: bounded ${t} required`);return r},mo=e=>{if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(mo).join(",")}]`;if(e&&typeof e=="object")return`{${Object.keys(e).filter(t=>e[t]!==void 0).sort().map(t=>`${JSON.stringify(t)}:${mo(e[t])}`).join(",")}}`;throw new Error("cex: non-canonical request fact refused")};function Qp(e){if(!e||!["create","cancel","status"].includes(e.operation))throw new Error("cex: operation refused");if(!/^[A-Z0-9._/-]{1,32}$/.test(String(e.symbol||"")))throw new Error("cex: symbol required");if(e.operation==="create"){if(!/^(?:buy|sell)$/.test(e.side)||e.timeInForce!==void 0&&e.timeInForce!=="GTC")throw new Error("cex: LIMIT GTC spot order required");Na(e.baseSize,"baseSize"),Na(e.limitPrice,"limitPrice"),po(e.clientOrderId,"clientOrderId")}else po(e.venueOrderId,"venueOrderId");return e}function em(e,t){let r=t.side==="buy"?"BUY":"SELL";if(e==="binance")return t.operation==="create"?{params:{symbol:t.symbol,side:r,type:"LIMIT",timeInForce:"GTC",quantity:t.baseSize,price:t.limitPrice,newClientOrderId:t.clientOrderId}}:{params:{symbol:t.symbol,orderId:t.venueOrderId}};if(e==="bybit"){let n=t.operation==="create"?{category:"spot",symbol:t.symbol,side:r==="BUY"?"Buy":"Sell",orderType:"Limit",qty:t.baseSize,price:t.limitPrice,timeInForce:"GTC",orderLinkId:t.clientOrderId,isLeverage:0}:{category:"spot",symbol:t.symbol,orderId:t.venueOrderId};return t.operation==="status"?{params:n}:{body:n}}if(e==="okx"){let n=t.operation==="create"?{instId:t.symbol,tdMode:"cash",clOrdId:t.clientOrderId,side:t.side,ordType:"limit",sz:t.baseSize,px:t.limitPrice}:{instId:t.symbol,ordId:t.venueOrderId};return t.operation==="status"?{params:n}:{body:n}}if(e==="coinbase")return{body:t.operation==="create"?{type:"limit",side:t.side,product_id:t.symbol,size:t.baseSize,price:t.limitPrice,time_in_force:"GTC",client_oid:t.clientOrderId}:void 0};throw new Error("cex: venue refused")}function Ca({venue:e,order:t,timestamp:r,recvWindow:n=5e3}){Qp(t);let o=wo[e]?.[t.operation];if(!o)throw new Error("cex: venue or operation refused");if(!Number.isSafeInteger(n)||n<1||n>5e3)throw new Error("cex: recvWindow refused");let i=String(r??"");if(!(e==="okx"?/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(i):e==="coinbase"?/^\d{10}(?:\.\d{1,3})?$/.test(i):/^\d{13}$/.test(i)))throw new Error("cex: timestamp refused");let[s,l]=o;l.includes("{order_id}")&&(l=l.replace("{order_id}",encodeURIComponent(po(t.venueOrderId,"venueOrderId"))));let a={venue:e,operation:t.operation,method:s,path:l,timestamp:i,recvWindow:n,...em(e,t)};return Object.freeze({...a,params:a.params&&Object.freeze(a.params),body:a.body&&Object.freeze(a.body),requestDigest:Yp("sha256").update(mo(a)).digest("hex")})}import{createHmac as tm}from"node:crypto";var Xr=(e,t,r="hex")=>tm("sha256",e).update(t).digest(r),_a=e=>new URLSearchParams(Object.entries(e||{})).toString(),rm=e=>e===void 0?"":JSON.stringify(e),ho=(e,t)=>{if(!(Array.isArray(e)||e instanceof Uint8Array)||e.length<4||[...e].some(r=>!Number.isInteger(r)||r<0||r>255))throw new Error(`cex: invalid ${t}`);return Buffer.from(e)};function nm(e,t){let r=ho(e.apiSecretBytes,"credential"),n=t==="coinbase"?"base64":"raw";if(e.apiSecretEncoding!==n)throw r.fill(0),new Error("cex: explicit secret encoding refused");if(n==="raw")return r;try{let o=r.toString("ascii");if(!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(o))throw new Error("base64");let i=Buffer.from(o,"base64");if(i.length<4||i.toString("base64")!==o)throw i.fill(0),new Error("base64");return i}finally{r.fill(0)}}var ft=e=>Buffer.from(e).toString("utf8");function Ra(e,t){if(t?.venue!==e.venue)throw new Error("cex: credential venue mismatch");let r=ho(t.apiKeyBytes,"credential"),n=nm(t,e.venue),o=t.passphraseBytes?ho(t.passphraseBytes,"credential"):null;try{let i={accept:"application/json"},s=rm(e.body);s&&(i["content-type"]="application/json");let l=_a(e.params),a=e.path;if(e.venue==="binance"){let c=_a({...e.params,timestamp:e.timestamp,recvWindow:String(e.recvWindow)});l=`${c}&signature=${Xr(n,c)}`,i["X-MBX-APIKEY"]=ft(r)}else if(e.venue==="bybit"){let c=e.method==="GET"?l:s;Object.assign(i,{"X-BAPI-API-KEY":ft(r),"X-BAPI-TIMESTAMP":e.timestamp,"X-BAPI-RECV-WINDOW":String(e.recvWindow),"X-BAPI-SIGN":Xr(n,e.timestamp+ft(r)+e.recvWindow+c)})}else if(e.venue==="okx"){let c=a+(l?`?${l}`:"");Object.assign(i,{"OK-ACCESS-KEY":ft(r),"OK-ACCESS-SIGN":Xr(n,e.timestamp+e.method+c+s,"base64"),"OK-ACCESS-TIMESTAMP":e.timestamp,"OK-ACCESS-PASSPHRASE":ft(o||Buffer.alloc(0))})}else Object.assign(i,{"CB-ACCESS-KEY":ft(r),"CB-ACCESS-SIGN":Xr(n,e.timestamp+e.method+a+s,"base64"),"CB-ACCESS-TIMESTAMP":e.timestamp,"CB-ACCESS-PASSPHRASE":ft(o||Buffer.alloc(0))});return{url:sr[e.venue]+a+(l?`?${l}`:""),method:e.method,headers:i,body:s||void 0}}finally{r.fill(0),n.fill(0),o?.fill(0)}}var La=256*1024,om=/^(?=[A-Za-z0-9._-]{1,128}$)(?=.*[A-Za-z0-9])[A-Za-z0-9._-]+$/;function im(e,t,r){if(!t.includes("{order_id}"))return r===t;let[n,o]=t.split("{order_id}");if(!r.startsWith(n)||!r.endsWith(o))return!1;let i=r.slice(n.length,r.length-o.length||void 0),s;try{s=decodeURIComponent(i)}catch{return!1}if(!om.test(s)||encodeURIComponent(s)!==i)return!1;try{return new URL(r,e).pathname===r&&r===`${n}${i}${o}`}catch{return!1}}async function go(e,t){let r=wo[e.venue]?.[e.operation],n=sr[e.venue];if(!r||!n||r[0]!==e.method||!im(n,r[1],e.path))throw new Error("cex transport refused");let o=Ra(e,t),i=new AbortController,s=setTimeout(()=>i.abort(),5e3);try{let l=await fetch(o.url,{method:o.method,headers:o.headers,body:o.body,redirect:"manual",signal:i.signal});if(l.status<200||l.status>=300)throw new Error("http status");if(l.status>=300&&l.status<400)throw new Error("redirect");let a=new URL(l.url||o.url),c=new URL(sr[e.venue]);if(a.origin!==c.origin)throw new Error("origin");if(!String(l.headers.get("content-type")||"").toLowerCase().startsWith("application/json"))throw new Error("content type");let d=Number(l.headers.get("content-length"));if(Number.isFinite(d)&&d>La)throw new Error("size");let u=new Uint8Array(await l.arrayBuffer());if(u.length>La)throw new Error("size");let m;try{m=JSON.parse(new TextDecoder().decode(u))}catch{throw new Error("json")}return{statusCode:l.status,value:m,responseBodyBytes:u}}catch{throw new Error("cex transport refused")}finally{clearTimeout(s);for(let l of Object.values(o.headers));o.headers=null,o.body=void 0}}var am=e=>sm("sha256").update(e).digest("hex"),cm=(e,t)=>e==="okx"?new Date(t).toISOString():String(e==="coinbase"?t/1e3:t),yo=e=>/^(?=[A-Za-z0-9._-]{1,128}$)(?=.*[A-Za-z0-9])[A-Za-z0-9._-]+$/.test(String(e||""))?String(e):null,ar=e=>typeof e=="string"&&/^(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e)?e:null;var $a=e=>/^0(?:\.0+)?$/.test(String(e));function lm(e,t){if(!ar(e)||!ar(t))throw new Error("cex authoritative decimal refused");let[r,n=""]=e.split("."),[o,i=""]=t.split("."),s=n.length+i.length,l=BigInt(r+n)*BigInt(o+i);if(!s)return l.toString();let a=l.toString().padStart(s+1,"0");return`${a.slice(0,-s)}.${a.slice(-s)}`}function um(e,t,r){let n,o,i;return e==="binance"&&t?.code===void 0?(n=t?.orderId,o=t?.symbol,i=t?.clientOrderId):e==="bybit"&&t?.retCode===0?(n=t?.result?.orderId,o=t?.result?.symbol,i=t?.result?.orderLinkId):e==="okx"&&t?.code==="0"&&t?.data?.length===1&&t.data[0]?.sCode==="0"?(n=t.data[0].ordId,o=t.data[0].instId,i=t.data[0].clOrdId):e==="coinbase"&&!t?.message&&(n=t?.id,o=t?.product_id,i=t?.client_oid),o!==void 0&&o!==r.symbol||i!==void 0&&i!==r.clientOrderId?null:yo(n)}function dm(e,t,r){let n=null;return e==="binance"&&t&&typeof t=="object"&&t.code===void 0?n=t.orderId:e==="bybit"&&t?.retCode===0?n=t?.result?.orderId:e==="okx"&&t?.code==="0"&&t?.data?.length===1&&t.data[0]?.sCode==="0"?n=t.data[0].ordId:e==="coinbase"&&typeof t=="string"&&(n=t),yo(n)===r.venueOrderId}function fm(e,t,r){let n=t,o,i,s,l,a;if(e==="binance"?(o=t?.orderId,i=t?.clientOrderId,s=t?.symbol,l={CANCELED:"cancelled",REJECTED:"rejected",FILLED:"filled",PARTIALLY_FILLED:"partial",NEW:"open",PENDING_CANCEL:"open"}[t?.status],a=t?.cummulativeQuoteQty):e==="bybit"&&t?.retCode===0&&t?.result?.list?.length===1?(n=t.result.list[0],o=n.orderId,i=n.orderLinkId,s=n.symbol,l={Cancelled:"cancelled",Rejected:"rejected",Filled:"filled",PartiallyFilled:"partial",New:"open"}[n.orderStatus],a=n.cumExecValue):e==="okx"&&t?.code==="0"&&t?.data?.length===1?(n=t.data[0],o=n.ordId,i=n.clOrdId,s=n.instId,l={canceled:"cancelled",filled:"filled",partially_filled:"partial",live:"open"}[n.state],ar(n.accFillSz)&&ar(n.avgPx)&&($a(n.accFillSz)||!$a(n.avgPx))&&(a=lm(n.accFillSz,n.avgPx))):e==="coinbase"&&(o=t?.id,i=t?.client_oid,s=t?.product_id,l=t?.status==="done"?t?.done_reason==="canceled"?"cancelled":"filled":{rejected:"rejected",open:"open",pending:"open",active:"open"}[t?.status],a=t?.executed_value),yo(o)!==r.venueOrderId||String(s||"")!==r.symbol||r.clientOrderId&&String(i||"")!==r.clientOrderId||!l||!ar(a))throw new Error("cex authoritative status identity refused");return{status:l,filledQuote:a}}async function pm(e,t){let r=t?.nowMs?.()??Date.now(),n=t?.transport||go,o=t.credential(e.credentialRef);if(!o||o.accountId!==e.accountId||o.venue!==e.venue)throw new Error("cex: credential binding refused");let i=e.order.operation!=="create"?e.store.requirePrior({...e,...e.order}):null,s=i?.tradeId||e.tradeId,l=Ca({venue:e.venue,order:e.order,timestamp:cm(e.venue,r),recvWindow:5e3}),a;e.order.operation==="create"?a=e.store.prepare({tradeId:e.tradeId,venue:e.venue,accountId:e.accountId,credentialRef:e.credentialRef,symbol:e.order.symbol,clientOrderId:e.order.clientOrderId,reservedNotional:e.reservedNotional,requestDigest:l.requestDigest,nowMs:r}):a=e.store.transition(s,["open","uncertain","sent","cancel-pending","settlement-pending"],"prepared",{operation:e.order.operation,requestDigest:l.requestDigest,nowMs:r}),e.store.transition(s,"prepared","sent",{sentAtMs:r});let c;try{c=await n(l,o)}catch{throw e.store.transition(s,"sent","uncertain",{uncertainAtMs:r}),new Error("cex transport refused; order is uncertain and requires status reconciliation")}let d=am(c.responseBodyBytes);if(e.order.operation==="create"){let f=um(e.venue,c.value,e.order);if(!f)throw e.store.transition(s,"sent","uncertain",{responseDigest:d}),new Error("cex response refused; order is uncertain and requires status reconciliation");return e.store.transition(s,"sent","open",{venueOrderId:f,responseDigest:d,openedAtMs:r})}if(e.order.operation==="cancel")return e.store.transition(s,"sent",dm(e.venue,c.value,i)?"cancel-pending":"uncertain",{responseDigest:d,observedAtMs:r});let u;try{u=fm(e.venue,c.value,i)}catch{return e.store.transition(s,"sent","uncertain",{responseDigest:d,observedAtMs:r})}let m=["cancelled","rejected","filled"].includes(u.status);if(m||u.status==="partial"){e.store.transition(s,"sent","settlement-pending",{responseDigest:d,observedAtMs:r,status:u.status,filledQuote:u.filledQuote});let f=m&&(u.status==="cancelled"||u.status==="rejected")&&/^0(?:\.0+)?$/.test(u.filledQuote)?"release":"commit";return await t.settleLedger({tradeId:i.tradeId,filledQuote:u.filledQuote,disposition:f}),e.store.transition(s,"settlement-pending","terminal",{settledAtMs:r})}return e.store.transition(s,"sent","open",{responseDigest:d,observedAtMs:r,status:u.status,filledQuote:u.filledQuote})}function Pa(e){if(!e||typeof e.credential!="function"||typeof e.settleLedger!="function")throw new Error("cex: sealed runtime dependencies required");let t=Object.freeze({credential:e.credential,transport:e.transport||go,nowMs:e.nowMs||Date.now,settleLedger:e.settleLedger});return Object.freeze({execute:r=>pm(r,t)})}import{createHash as mm,createHmac as Ba,randomBytes as wm,timingSafeEqual as hm}from"node:crypto";var Da="oracle-local-signer-cex-owner-allow-v1",Dt=e=>/^(?:0|[1-9]\d{0,19})$/.test(String(e||""))?String(e):null,Fa=e=>JSON.stringify(e),gm=(e,t)=>{let r=Buffer.from(String(e)),n=Buffer.from(String(t));return r.length===n.length&&hm(r,n)};function ja({keyFile:e,approvedTelegramOwners:t,nowMs:r=Date.now}={}){if(!e)throw new Error("cex owner proof: signer policy key required");let n=new Set((t||[]).map(Dt).filter(Boolean));if(!n.size)throw new Error("cex owner proof: approved owner context required");let o=new Set,i=l=>{let a=Buffer.from(L(e));try{return l(a)}finally{a.fill(0)}},s=i(l=>mm("sha256").update("cex-owner-instance\0").update(l).digest("hex"));return Object.freeze({mint({digest:l,senderId:a,chatId:c,platform:d,ttlMs:u=15e3}={}){let m=Dt(a),f=Dt(c),p=r();if(d!=="telegram"||!m||f!==m||!n.has(m))throw new Error("cex owner proof: exact Telegram owner DM required");if(!/^[0-9a-f]{64}$/.test(String(l||""))||!Number.isSafeInteger(u)||u<1||u>3e4)throw new Error("cex owner proof: binding refused");let w={version:1,decision:"Allow",digest:l,ownerSenderId:m,telegramChatId:f,audience:Da,instance:s,nonce:wm(16).toString("hex"),issuedAtMs:p,expiresAtMs:p+u},g=i(h=>Ba("sha256",h).update(Fa(w)).digest("hex"));return{claims:w,mac:g}},verify(l,{digest:a}={}){let c=l?.claims,d=r();if(!c||c.version!==1||c.decision!=="Allow"||c.digest!==a||c.audience!==Da||c.instance!==s||!/^[0-9a-f]{32}$/.test(c.nonce||"")||Dt(c.ownerSenderId)!==Dt(c.telegramChatId)||!n.has(Dt(c.ownerSenderId))||!Number.isSafeInteger(c.issuedAtMs)||!Number.isSafeInteger(c.expiresAtMs)||c.expiresAtMs<=d||c.issuedAtMs>d||c.expiresAtMs-c.issuedAtMs>3e4||o.has(c.nonce))return!1;let u=i(m=>Ba("sha256",m).update(Fa(c)).digest("hex"));return gm(l.mac,u)?(o.add(c.nonce),!0):!1}})}var Re=new vo(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ma=new vo(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Eo=new vo(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function Im({isArmed:e,disarmNow:t}){if(typeof e!="function"||typeof t!="function")throw new TypeError("signer: serialized arm fence callbacks required");let r=1,n=Promise.resolve(),o=i=>{let s=n.then(i,i);return n=s.then(()=>{},()=>{}),s};return Object.freeze({armGeneration:()=>r,disarm:()=>o(()=>(r+=1,t(),!0)),broadcastWithArmFence:(i,s)=>o(async()=>{if(i!==r||!e())throw new Error("signer: disarmed generation changed before broadcast handoff");return s()})})}function km(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||re.join(process.env.XDG_STATE_HOME||re.join(ym.homedir(),".local","state"),"oracle"),r=bm("sha256").update(re.resolve(e)).digest("hex").slice(0,16);return{vault:re.join(e,"vault.json"),policy:re.join(e,"signer-policy.json"),policyKey:re.join(e,"policy-integrity-key"),policyAnchor:re.join(t,`signer-policy-${r}.high-water`),ledger:re.join(e,"signer-ledger.json"),ledgerAnchor:re.join(t,`signer-ledger-${r}.high-water`),executionOutbox:re.join(e,"signer-execution-outbox.json"),cexOrders:re.join(e,"cex-orders.json"),cexOrdersAnchor:re.join(t,`cex-orders-${r}.high-water`),token:re.join(e,"signer-token"),lock:re.join(t,`signer-${r}.lock`),workflowLedger:re.join(e,"workflow-events.jsonl")}}function Om(e){try{return L(e)}catch(r){if(r.code!=="ENOENT")throw r}let t=Em(32).toString("hex");return Ae(e,t+`
23
- `),t}function UE(e,t,r){let n=String(e||"").toLowerCase();if(n!==String(t||"").toLowerCase())throw new Error("signer: wallet does not match vault metadata");if(!Array.isArray(r)||!r.some(o=>String(o).toLowerCase()===n))throw new Error("signer: wallet is not an allowed policy owner");return!0}function xo(e,t,r){if(!t)throw new Error(`signer: ${e} key is required by policy`);let n=new Set((r||[]).map(o=>String(o).toLowerCase()));if(!t.addresses.some(o=>n.has(String(o).toLowerCase())))throw new Error(`signer: ${e} vault address is not an allowed policy owner`);return!0}function Ha(e){return e.surfaces.some(t=>String(t).startsWith("evm"))}function K(e,t){return e.surfaces.includes(t)}function _e(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function za(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function Tm(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function Nm(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let n=e.artifact,o=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,n?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,n?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,n?.minPayoutRaw,e.exactQuoteNetPayoutRaw,n?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],i;try{i=BigInt(o[0]);for(let c of o.slice(1))if(BigInt(c)!==i)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let s=n?.transactions;if(!Array.isArray(s)||s.length!==1)throw new Error("signer: exact Anvil action transaction required");let l=t==="buy"?"buySpecificNFT":"sellNFT",a;try{if(a=Re.decodeFunctionData(l,s[0].data),Re.encodeFunctionData(l,[a[0],a[1]]).toLowerCase()!==String(s[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(a[0])!==BigInt(e.tokenId)||BigInt(a[1])!==i)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return i}async function ze(e,t,r,n,o,i=[]){let s=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(n,i)},o]);return r.decodeFunctionResult(n,s)[0]}async function Cm(e,t,r,{nowMs:n=Date.now(),signerAddress:o}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let i=_e(t.destination,"Anvil market"),s=_e(t.contract,"Anvil collection"),l=_e(t.paymentToken,"Anvil payment token"),a=BigInt(t.nativeSwapFeeWei),c=Number(t.paymentTokenDecimals),d=_e(o,"Anvil signer identity"),u=_e(t.owner,"Anvil envelope owner");if(d!==u)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let f=String(t.nftAction||"").toLowerCase();if(f!=="buy"&&f!=="sell")throw new Error("signer: unsupported Anvil NFT action");let p=Tm(t,f),w=Nm(t,f,p),g=t.anvilAttestation;if(!g||typeof g!="object"||Number(g.snapshotExpiresAtMs)<=Number(n))throw new Error("signer: fresh provider Anvil attestation required");let h=String(za(r.anvilRuntimeCodeHashes,i)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(h)||h!==String(g.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let y=za(r.nftPaymentTokenCaps,l);if(!y||Number(y.decimals)!==c)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let b=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(b)||BigInt(b)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let x=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(x))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let A=BigInt(x),k=await e.send("eth_getBlockByNumber",[x,!1]),v=String(k?.hash||"").toLowerCase();if(String(k?.number||"").toLowerCase()!==x||!/^0x[0-9a-f]{64}$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let _=Object.freeze({blockHash:v,requireCanonical:!0}),C=String(await e.send("eth_getCode",[i,_])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(C)||C==="0x")throw new Error("signer: Anvil market runtime is empty");let z=Am(C).toLowerCase();if(z!==h)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[W,R,$]=await Promise.all([ze(e,i,Re,"collection",_),ze(e,i,Re,"token",_),ze(e,i,Re,"robinhoodSwapFeeWei",_)]),Ke=_e(W,"live Anvil collection"),pt=_e(R,"live Anvil payment token"),Ft=BigInt($).toString();if(Ke!==s)throw new Error("signer: live Anvil collection mismatch");if(pt!==l)throw new Error("signer: live Anvil payment token mismatch");if(Ft!==a.toString())throw new Error("signer: live Anvil native swap fee mismatch");let jt=Number(await ze(e,pt,Ma,"decimals",_));if(!Number.isSafeInteger(jt)||jt!==c)throw new Error("signer: live Anvil payment token decimals mismatch");let mt=_e(await ze(e,Ke,Eo,"ownerOf",_,[m]),"live Anvil token owner"),Ge=null,Ye=null,Xe=null,Ze=null,q;if(f==="buy"){let[We,wt,E]=await Promise.all([ze(e,i,Re,"inventory",_,[m]),ze(e,pt,Ma,"allowance",_,[d,i]),e.send("eth_call",[{to:i,data:Re.encodeFunctionData("quoteSpecificBuy",[m])},_])]);Ge=!!We,Ye=BigInt(wt).toString();let I=Re.decodeFunctionResult("quoteSpecificBuy",E);if(q=Object.freeze({totalCostRaw:BigInt(I[0]).toString(),baseCostRaw:BigInt(I[1]).toString(),feeRaw:BigInt(I[2]).toString(),protocolFeeRaw:BigInt(I[3]).toString(),available:!!I[4]}),JSON.stringify(q)!==JSON.stringify(p))throw new Error("signer: exact Anvil buy quote changed after preparation");if(mt!==i)throw new Error("signer: exact Anvil token owner is not the market");if(!Ge)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(Ye)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(Ye)<w)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!q.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(q.totalCostRaw)!==w)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(q.totalCostRaw)!==BigInt(q.baseCostRaw)+BigInt(q.feeRaw)+BigInt(q.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[We,wt,E]=await Promise.all([ze(e,Ke,Eo,"getApproved",_,[m]),ze(e,Ke,Eo,"isApprovedForAll",_,[d,i]),e.send("eth_call",[{to:i,data:Re.encodeFunctionData("quoteSellNFT")},_])]);Xe=_e(We,"live Anvil token approval"),Ze=!!wt;let I=Re.decodeFunctionResult("quoteSellNFT",E);if(q=Object.freeze({netPayoutRaw:BigInt(I[0]).toString(),grossPayoutRaw:BigInt(I[1]).toString(),feeRaw:BigInt(I[2]).toString(),protocolFeeRaw:BigInt(I[3]).toString()}),JSON.stringify(q)!==JSON.stringify(p))throw new Error("signer: exact Anvil sell quote changed after preparation");if(mt!==d)throw new Error("signer: exact Anvil token owner does not match signer");if(Xe!==i&&!Ze)throw new Error("signer: live Anvil NFT approval is insufficient");if(Xe!==_e(t.preconditions?.approvedAddress,"prepared Anvil token approval")||Ze!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(q.netPayoutRaw)!==w)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(q.netPayoutRaw)+BigInt(q.feeRaw)+BigInt(q.protocolFeeRaw)!==BigInt(q.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:i,collection:Ke,paymentToken:pt,paymentTokenDecimals:jt,nativeSwapFeeWei:Ft,signerAddress:d,nftAction:f,tokenId:m.toString(),tokenOwner:mt,inventoryMember:Ge,allowanceRaw:Ye,approvedAddress:Xe,approvedForAll:Ze,quote:q,blockNumber:A.toString(),blockHash:v,runtimeCodeHash:z,verifiedAtMs:Number(n)})}function Wa(e,t,r="execution"){if(!e||!t)throw new Error("signer: complete Anvil revalidation evidence required");for(let n of["runtimeCodeHash","market","collection","paymentToken","paymentTokenDecimals","nativeSwapFeeWei","signerAddress","nftAction","tokenId","tokenOwner","inventoryMember","allowanceRaw","approvedAddress","approvedForAll"])if(String(t[n]).toLowerCase()!==String(e[n]).toLowerCase())throw new Error(`signer: Anvil ${n} changed after simulation at ${r}`);if(JSON.stringify(t.quote)!==JSON.stringify(e.quote))throw new Error(`signer: Anvil quote changed after simulation at ${r}`);return!0}function _m(e,t,r,n,{nowMs:o=Date.now(),timeoutMs:i=15e3,signerAddress:s}={}){let l=Sm(new URL("./anvil-attestation-worker.mjs",import.meta.url)),a={anvilRuntimeCodeHashes:n?.anvilRuntimeCodeHashes,nftPaymentTokenCaps:n?.nftPaymentTokenCaps},c;try{c=xm(process.execPath,[l],{input:JSON.stringify({rpcUrl:e,chainId:t,envelope:r,policy:a,nowMs:Number(o),signerAddress:s}),encoding:"utf8",timeout:i,maxBuffer:64e3,env:{PATH:process.env.PATH||"",HOME:process.env.HOME||"",NODE_OPTIONS:""},stdio:["pipe","pipe","pipe"]})}catch{throw new Error("signer: fresh independent Anvil attestation failed before reservation")}let d;try{d=JSON.parse(c)}catch{throw new Error("signer: invalid Anvil reservation attestation result")}if(!d||d.source!=="local-signer-trusted-rpc"||!/^0x[0-9a-f]{64}$/.test(String(d.blockHash||"")))throw new Error("signer: invalid Anvil reservation attestation result");return Object.freeze(d)}async function cr(e,t){let r=await fetch(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)}),n=await r.text();if(!r.ok)throw new Error(`rpc: HTTP ${r.status}`);let o=JSON.parse(n||"{}");if(o.error)throw new Error(`rpc: ${o.error.message||"request failed"}`);return o.result}function Ao(e){let t=Buffer.from(e),r=t[0]===128?t[1]:t[0];if(!Number.isInteger(r)||r<1||r>8)throw new Error(`signer: Solana message declares an implausible signature count (${r})`);return r}function So(e,t){let r=Array.isArray(t)?t:[t],n=Ao(e);if(r.length!==n)throw new Error(`signer: Solana message needs ${n} signature(s), got ${r.length}`);for(let o of r)if(Buffer.from(o).length!==64)throw new Error("signer: Solana signature must be 64 bytes");return Buffer.concat([Buffer.from([n]),...r.map(o=>Buffer.from(o)),Buffer.from(e)]).toString("base64")}function Rm({provider:e=null,readPolicy:t,rpc:r=cr,fetchImpl:n=fetch}={}){if(typeof t!="function")throw new TypeError("signer: execution observer requires readPolicy");return async o=>{let i=String(o?.surface||""),s=String(o?.signedTransactionId||"");if(!s)throw new Error("signer: execution observer requires signed transaction identity");if(i==="evm"||i==="evm-swap"||i==="evm-bridge"||i==="evm-nft"){if(!e||typeof e.getTransactionReceipt!="function")return null;let a=await e.getTransactionReceipt(s);return a?{transactionHash:s,status:a.status}:null}let l=t();if(i==="hl"){let{owner:a,cloid:c}=o;if(!/^0x[0-9a-f]{40}$/i.test(String(a))||!/^0x[0-9a-f]{32}$/i.test(String(c)))return null;let d=o.hlTestnet===!0?"https://api.hyperliquid-testnet.xyz/info":"https://api.hyperliquid.xyz/info",u=await n(d,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({type:"orderStatus",user:a,oid:c})});if(!u.ok)return null;let m=await u.json();if(m?.status!=="order"||m.order?.order?.cloid!==c)return null;let{status:f,order:p}=m.order;if(f==="filled")return{transactionHash:s,status:1,order:{orderId:String(p.oid),status:"filled",cloid:c}};let w=y=>/^\d+(?:\.\d+)?$/.test(String(y))?String(y).replace(/^0+(?=\d)/,"").replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):null,g=w(p.origSz),h=w(p.sz);return(/^(?:canceled|rejected|scheduledCancel)$/.test(f)||/(?:Canceled|Rejected)$/.test(f))&&g!==null&&Number(g)>0&&g===h?{transactionHash:s,status:0}:null}if(i==="sol"){let a=String(l.solRpcUrl||l.solanaRpcUrl||"");if(!a)return null;let d=(await r(a,{jsonrpc:"2.0",id:1,method:"getSignatureStatuses",params:[[s],{searchTransactionHistory:!0}]}))?.value?.[0];return d?d.err?{transactionHash:s,status:0}:d.confirmationStatus==="confirmed"||d.confirmationStatus==="finalized"||d.confirmations===null?{transactionHash:s,status:1}:null:null}if(i==="btc"){let a=String(l.btcRpcUrl||l.bitcoinRpcUrl||"").replace(/\/$/,"");if(!a)return null;try{let c=a.endsWith("/tx")?a.slice(0,-3):a,d=await n(`${c}/tx/${s}/status`);if(d.ok)return(await d.json())?.confirmed===!0?{transactionHash:s,status:1}:null}catch{}try{let c=await r(a,{jsonrpc:"1.0",id:"oracle",method:"getrawtransaction",params:[s,!0]});return Number(c?.confirmations||0)>0?{transactionHash:s,status:1}:null}catch{return null}}return null}}async function Va(e,t,r){let n=String(e.btcRpcUrl||e.bitcoinRpcUrl||"").replace(/\/$/,"");if(!n)throw new Error("signer: btcRpcUrl required for Bitcoin simulation and broadcast");return cr(n,{jsonrpc:"1.0",id:"oracle",method:t,params:r})}async function Lm(e,t,r){let n=String(e.btcRpcUrl||e.bitcoinRpcUrl||"").replace(/\/$/,"");if(!n)throw new Error("signer: btcRpcUrl required for Bitcoin simulation");let o=n.endsWith("/tx")?n.slice(0,-3):n;try{let s=await fetch(`${o}/tx/${t}/outspend/${r}`);if(s.ok){let l=await s.json();if(l?.spent===!0)throw new Error("signer: Bitcoin input already spent");if(l?.spent===!1)return!0}}catch(s){if(/already spent/.test(String(s?.message||s)))throw s}if(!await Va(e,"gettxout",[t,Number(r),!0]))throw new Error("signer: Bitcoin input unavailable for simulation");return!0}function $m(e){if(!e||typeof e!="object"||!e.value||typeof e.value!="object"||!Object.prototype.hasOwnProperty.call(e.value,"err"))throw new Error("signer: Solana simulation result missing");if(e.value.err!==null)throw new Error("signer: Solana simulation failed");return!0}function Pm(e,t,{fetchImpl:r=fetch}={}){return{simulate:async(n,o)=>(Pe(o,e()),!0),sign:async(n,o)=>{Pe(o,e());let i=e();if(!(Array.isArray(i.owners)?i.owners:[]).some(l=>String(l).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: HL wallet is not an allowed policy owner");if(String(o.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: HL wallet must match envelope owner");return n?.typedData?($i(n),t.signTypedData(n.typedData.domain,n.typedData.types,n.typedData.message)):Pi({wallet:t,action:n.action,nonce:n.nonce,isMainnet:!String(n.submitTo||"").includes("testnet")})},broadcast:async(n,o,i)=>{Pe(i,e());let{Signature:s,keccak256:l}=await import("ethers"),a=s.from(n),c=await r(o.submitTo,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:o.action,nonce:o.nonce,signature:{r:a.r,s:a.s,v:a.v}})}),d=await c.json();if(!c.ok||d?.status!=="ok")throw new Error("signer: Hyperliquid exchange rejected the action");let u=o.action.type==="order"?d.response?.data?.statuses?.[0]:null;if(u&&Object.hasOwn(u,"error"))throw new Error("signer: Hyperliquid rejected the order");let m=u?.filled?"filled":u?.resting?"resting":null,f=m?u[m]:null;return{hash:l(n),status:1,...f?.oid!=null?{order:{orderId:String(f.oid),status:m,cloid:o.action.orders[0].c??null}}:{}}}}}function Bm(e){return{simulate:async(t,r)=>(De(r,e()),!0),sign:async(t,r)=>{De(r,e());let n=e();if(typeof n.lighterSignImpl!="function")throw new Error("lighter: official Lighter signer required");let o=await n.lighterSignImpl(t,r);return Zt(t,o),typeof o=="string"?o:JSON.stringify(o)},broadcast:async(t,r,n)=>{let o=De(n,e()),i=Zt(r,t),s=Fi(i),l=await fetch(o.submitTo,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:s}),a=await l.json().catch(()=>({}));if(!l.ok||Number(a?.code)!==200)throw new Error("signer: Lighter sendTx rejected the order");return{hash:String(a?.tx_hash||a?.txHash||"lighter"),status:1}}}}function Dm(e,t){return{simulate:async(r,n)=>(rt(n,e()),!0),sign:async(r,n)=>{rt(n,e());let o=e();if(!(Array.isArray(o.owners)?o.owners:[]).some(c=>String(c).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: order wallet is not an allowed policy owner");if(String(n.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: order wallet must match envelope owner");let s=r.domain||r.typedData.domain,l=r.types||r.typedData.types,a=r.message||r.typedData.message;return t.signTypedData(s,l,a)},broadcast:async(r,n,o)=>{let i=rt(o,e()),{keccak256:s}=await import("ethers"),l=n.message||n.typedData.message,a=i.kind==="cow"?{sellToken:l.sellToken,buyToken:l.buyToken,receiver:l.receiver,sellAmount:l.sellAmount,buyAmount:l.buyAmount,validTo:l.validTo,appData:l.appData,feeAmount:l.feeAmount,kind:l.kind,partiallyFillable:l.partiallyFillable,sellTokenBalance:l.sellTokenBalance,buyTokenBalance:l.buyTokenBalance,from:o.owner,signature:r,signingScheme:"eip712",quoteId:n.quoteId??void 0}:{orderHash:i.digest,signature:r,data:l},c=await fetch(i.submitTo,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>({}));if(!c.ok||d?.error||d?.success===!1)throw new Error(i.kind==="cow"?"signer: CoW orderbook rejected the order":"signer: 1inch orderbook rejected the order");return{hash:s(r),status:1,orderHash:i.digest,uid:typeof d=="string"?d:d?.uid||null}}}}function Fm(e,t){return{simulate:async(r,n)=>(Be(n,e()),!0),sign:async(r,n)=>{Be(n,e());let o=e();if(!(Array.isArray(o.owners)?o.owners:[]).some(s=>String(s).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: Poly wallet is not an allowed policy owner");if(String(n.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: Poly wallet must match envelope owner");return t.signTypedData(r.domain,r.types,r.message)},broadcast:async(r,n,o)=>{let i=e(),s=Be(o,i),l=mn(i),{keccak256:a}=await import("ethers"),c=oi({message:n.message,side:n.side,signature:r,orderType:n.orderType||"GTC",apiKey:l.key}),d=JSON.stringify(c),u=ri({creds:l,address:o.owner,method:"POST",path:"/order",body:d}),m=await fetch(s.submitTo,{method:"POST",headers:u,body:d}),f=await m.json().catch(()=>({}));if(!m.ok||f?.success===!1||f?.error||f?.errorMsg)throw new Error("signer: Polymarket CLOB rejected the order");return{hash:a(r),status:1}}}}function jm(e,t){let r=uo(t);return{simulate:async n=>{let o=e(),i=bo.fromPSBT(Buffer.from(n.psbt,"base64"));return await Promise.all(Array.from({length:i.inputsLength},(s,l)=>{let a=i.getInput(l),c=Buffer.from(a.txid||[]).toString("hex");return Lm(o,c,a.index)})),!0},sign:n=>{let o=bo.fromPSBT(Buffer.from(n.psbt,"base64"));return o.sign(r),Buffer.from(o.toPSBT()).toString("base64")},broadcast:async n=>{let o=e(),i=String(o.btcRpcUrl||o.bitcoinRpcUrl||"").replace(/\/$/,"");if(!i)throw new Error("signer: btcRpcUrl required for Bitcoin broadcast");let s=bo.fromPSBT(Buffer.from(n,"base64"));s.finalize(),s.extract();let l;try{let c=await fetch(i.endsWith("/tx")?i:`${i}/tx`,{method:"POST",headers:{"content-type":"text/plain"},body:s.hex});if(l=(await c.text()).trim(),!c.ok)throw new Error(`signer: Bitcoin broadcast failed ${c.status}`)}catch(c){if(!/Bitcoin broadcast failed 404/.test(String(c?.message||c)))throw c;l=await Va(o,"sendrawtransaction",[s.hex])}if(l&&String(l).toLowerCase()!==s.id.toLowerCase())throw new Error("signer: Bitcoin broadcast txid mismatch");let a=null;try{let c=i.endsWith("/tx")?i.slice(0,-3):i,d=await fetch(`${c}/tx/${s.id}/status`);d.ok&&(a=(await d.json())?.confirmed===!0?1:null)}catch{}return{hash:s.id,status:a}}}}function qm(e,t){let r=uo(t);return{simulate:async n=>{let o=e(),i=String(o.solRpcUrl||o.solanaRpcUrl||"");if(!i)throw new Error("signer: solRpcUrl required for Solana simulation");let s=Buffer.from(n.messageBase64,"base64"),l=Ao(s),a=So(s,Array.from({length:l},()=>new Uint8Array(64))),c=await cr(i,{jsonrpc:"2.0",id:1,method:"simulateTransaction",params:[a,{encoding:"base64",sigVerify:!1,replaceRecentBlockhash:!1}]});return $m(c)},sign:n=>{let o=Buffer.from(n.messageBase64,"base64"),i=Ao(o),s=vm.sign(o,r);if(i===1)return So(o,[s]);let l=Array.isArray(n.cosignatures)?n.cosignatures:[];if(l.length!==i-1)throw new Error(`signer: Solana message needs ${i-1} cosignature(s), got ${l.length}`);return So(o,[s,...l.map(a=>Buffer.from(String(a),"base64"))])},broadcast:async n=>{let o=e(),i=String(o.solRpcUrl||o.solanaRpcUrl||"");if(!i)throw new Error("signer: solRpcUrl required for Solana broadcast");let s=await cr(i,{jsonrpc:"2.0",id:1,method:"sendTransaction",params:[n,{encoding:"base64",skipPreflight:!1,maxRetries:3}]}),a=(await cr(i,{jsonrpc:"2.0",id:1,method:"getSignatureStatuses",params:[[s],{searchTransactionHistory:!0}]}))?.value?.[0];if(a?.err)return{hash:s,status:0};let c=a?.confirmationStatus==="confirmed"||a?.confirmationStatus==="finalized"||a?.confirmations===null;return{hash:s,status:c?1:null}}}}function Mm(e,t={}){for(let r of Object.keys(t||{}))if(Object.prototype.hasOwnProperty.call(e,r))throw new Error(`signer: cannot replace built-in ${r} transport`)}async function Hm(e,t,r,n,{submitPrivate:o}={}){if((await e.getNetwork()).chainId!==BigInt(r.chainId))throw new Error("signer: RPC chain mismatch");let s={native:(await e.getBalance(r.from)).toString()},l=n&&n.privateRelay;if(l&&typeof o=="function"){let u=l==="require"||l?.mode==="require";try{let m=await o(t,{chainId:Number(r.chainId),requirePrivate:u,allowPublicFallback:!u});if(!m.fellBack&&m.hash){let f=await e.waitForTransaction(m.hash),p={native:(await e.getBalance(r.from)).toString()};return{hash:m.hash,status:f?.status??null,verifiedBefore:s,verifiedAfter:p,submission:{path:"private",mode:m.mode,endpoint:m.endpoint}}}}catch(m){if(u)throw m}}let a=await e.broadcastTransaction(t),c=await a.wait(),d={native:(await e.getBalance(r.from)).toString()};return{hash:c?.hash??a.hash,status:c?.status??null,verifiedBefore:s,verifiedAfter:d,submission:{path:"public"}}}async function VE({configDir:e,passphraseFile:t,credentialService:r,surfaceTransports:n={},host:o="127.0.0.1",port:i=9462,sessionMs:s=12e4}={}){let{JsonRpcProvider:l,Wallet:a}=await import("ethers");if(!t&&!r)throw new Error("signer: --credential-service or --passphrase-file is required for non-interactive service start");if(s<1e3||s>12e4)throw new Error("signer: session must be at most 120 seconds");let c=km(e),d=()=>Object.freeze(Jr(c.policy,c.policyKey,{sequenceAnchorFile:c.policyAnchor})),u=d(),m=String(process.env.ORACLE_OWNER_TELEGRAM||"").split(",").map(E=>E.trim()).filter(Boolean),f=m.length?ja({keyFile:c.policyKey,approvedTelegramOwners:m}):null;if(K(u,"cex")&&!f)throw new Error("signer: cex requires an approved Telegram owner context");if(!["exact-human","auto-within-rails"].includes(u.confirmationMode))throw new Error("signer: confirmationMode must be exact-human or auto-within-rails");if(u.confirmationMode==="auto-within-rails"&&process.env.ORACLE_AUTONOMOUS_TRADING!=="1")throw new Error("signer: auto-within-rails requires ORACLE_AUTONOMOUS_TRADING=1");let p=["surfaces","actions","destinations","owners"];u.surfaces.some(E=>String(E).startsWith("evm"))&&p.push("chains","spenders");for(let E of p)if(!Array.isArray(u[E])||u[E].length===0)throw new Error(`signer: ${E} allowlist is empty`);if(u.surfaces.some(E=>E==="evm-swap"||E==="evm-bridge"||E==="evm-nft"||E==="evm-order")){for(let E of["providers"])if(!Array.isArray(u[E])||u[E].length===0)throw new Error(`signer: ${E} allowlist is empty`)}if(u.surfaces.some(E=>E==="evm-swap"||E==="evm-bridge"||E==="evm-order")&&(!Array.isArray(u.tokens)||u.tokens.length===0))throw new Error("signer: tokens allowlist is empty");if(u.surfaces.some(E=>String(E).startsWith("evm")&&E!=="evm-order")&&(!Array.isArray(u.selectors)||u.selectors.length===0))throw new Error("signer: selectors allowlist is empty");if(u.surfaces.includes("sol")&&(!Array.isArray(u.programs)||u.programs.length===0))throw new Error("signer: programs allowlist is empty");if(K(u,"poly")&&(mn(u),!Array.isArray(u.polyTokens)||u.polyTokens.length===0))throw new Error("signer: polyTokens allowlist is empty");if(K(u,"lighter")&&(!Array.isArray(u.lighterMarkets)||u.lighterMarkets.length===0))throw new Error("signer: lighterMarkets allowlist is empty");if(K(u,"cex")&&(!u.cexAccounts||Object.keys(u.cexAccounts).length===0))throw new Error("signer: cexAccounts allowlist is empty");if(K(u,"hl")){let E=Array.isArray(u.coins)?u.coins.map(String):[],I=Array.isArray(u.hlMarkets)?u.hlMarkets:[];if(E.filter(j=>j!=="*"&&j!=="#*").length&&!E.includes("*")&&I.length===0)throw new Error("signer: restricted hl coins require hlMarkets pairs")}let w=r?wa(r):L(t),g=oa(c.vault),h=na(g,w),y;try{y=Aa(h,g.meta)}finally{h.fill(0)}if((Ha(u)||K(u,"hl")||K(u,"poly"))&&xo("evm",y.evm,u.owners),K(u,"btc")&&xo("btc",y.btc,u.owners),K(u,"sol")&&xo("sol",y.sol,u.owners),K(u,"cex")){if(!y.cex||Object.keys(y.cex).length===0)throw new Error("signer: local CEX credential records required");for(let[E,I]of Object.entries(u.cexAccounts)){let T=y.cex[E];if(!T||T.accountId!==I.accountId||!I.venues.includes(T.venue)||I.credentialRecordRef!==E)throw new Error("signer: CEX credential venue/account binding refused")}}let b=Array.isArray(u.chains)?u.chains.filter(E=>Number.isInteger(Number(E))&&String(E).trim()!==""):[],x=Ha(u);if(x&&(b.length!==1||!u.rpcUrl))throw new Error("signer: EVM surfaces require one chain and one RPC URL");if(K(u,"btc")&&!(u.btcRpcUrl||u.bitcoinRpcUrl))throw new Error("signer: btcRpcUrl required for Bitcoin broadcast");if(K(u,"sol")&&!(u.solRpcUrl||u.solanaRpcUrl))throw new Error("signer: solRpcUrl required for Solana simulation and broadcast");let A=x?new l(u.rpcUrl,Number(b[0])):null,k=y.evm&&(x||K(u,"hl")||K(u,"poly"))?A?new a(y.evm.secret).connect(A):new a(y.evm.secret):null,v=A?{simulate:async E=>{if((await A.getNetwork()).chainId!==BigInt(E.chainId))throw new Error("signer: RPC chain mismatch");return await A.call(E),!0},sign:E=>k.signTransaction(E),broadcast:(E,I,T)=>Hm(A,E,I,T,{submitPrivate:sa})}:null,_=A?async E=>zm(A,E):void 0,C=new Map,z=E=>E?.surface==="evm-nft"&&String(E?.provider).toLowerCase()==="anvil-nft",W=async(E,I=d(),T="execution")=>{if(!z(E))return null;let j=await Cm(A,E,I,{nowMs:Date.now(),signerAddress:k.address}),Y=C.get(G(E));return Y&&Wa(Y,j,T),j},R={...v?{evm:v,"evm-swap":v,"evm-bridge":v,"evm-nft":v}:{},...k&&K(u,"evm-order")?{"evm-order":Dm(d,k)}:{},...y.btc?{btc:jm(d,y.btc)}:{},...y.sol?{sol:qm(d,y.sol)}:{},...k&&K(u,"hl")?{hl:Pm(d,k)}:{},...k&&K(u,"poly")?{poly:Fm(d,k)}:{},...K(u,"lighter")?{lighter:Bm(d)}:{}};Mm(R,n);let $=Ri({...R,...n}),Ke=new Set(Object.keys(R)),pt=new Set(Object.keys(n||{})),Ft=u.surfaces.filter(E=>E!=="cex"&&!Ke.has(E)&&!pt.has(E));if(Ft.length)throw new Error(`signer: ${Ft.join(",")} require local keys or injected surface transports`);let jt=Date.now(),mt=jt+s,Ge=!1,Ye=!1,Xe=()=>{if(!Ye){Ye=!0;for(let E of Object.values(y.cex||{}))for(let I of["apiKeyBytes","apiSecretBytes","passphraseBytes"])E[I]?.fill?.(0)}},Ze=()=>Ge?!1:qa.existsSync(c.lock)?(Ge=!0,!1):qa.existsSync(c.vault)&&Date.now()<mt,q=Im({isArmed:Ze,disarmNow:()=>{Ge=!0,Xe(),Ae(c.lock,`disarmed ${new Date().toISOString()}
23
+ `),t}function UE(e,t,r){let n=String(e||"").toLowerCase();if(n!==String(t||"").toLowerCase())throw new Error("signer: wallet does not match vault metadata");if(!Array.isArray(r)||!r.some(o=>String(o).toLowerCase()===n))throw new Error("signer: wallet is not an allowed policy owner");return!0}function xo(e,t,r){if(!t)throw new Error(`signer: ${e} key is required by policy`);let n=new Set((r||[]).map(o=>String(o).toLowerCase()));if(!t.addresses.some(o=>n.has(String(o).toLowerCase())))throw new Error(`signer: ${e} vault address is not an allowed policy owner`);return!0}function Ha(e){return e.surfaces.some(t=>String(t).startsWith("evm"))}function K(e,t){return e.surfaces.includes(t)}function _e(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function za(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function Tm(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function Nm(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let n=e.artifact,o=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,n?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,n?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,n?.minPayoutRaw,e.exactQuoteNetPayoutRaw,n?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],i;try{i=BigInt(o[0]);for(let c of o.slice(1))if(BigInt(c)!==i)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let s=n?.transactions;if(!Array.isArray(s)||s.length!==1)throw new Error("signer: exact Anvil action transaction required");let l=t==="buy"?"buySpecificNFT":"sellNFT",a;try{if(a=Re.decodeFunctionData(l,s[0].data),Re.encodeFunctionData(l,[a[0],a[1]]).toLowerCase()!==String(s[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(a[0])!==BigInt(e.tokenId)||BigInt(a[1])!==i)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return i}async function ze(e,t,r,n,o,i=[]){let s=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(n,i)},o]);return r.decodeFunctionResult(n,s)[0]}async function Cm(e,t,r,{nowMs:n=Date.now(),signerAddress:o}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let i=_e(t.destination,"Anvil market"),s=_e(t.contract,"Anvil collection"),l=_e(t.paymentToken,"Anvil payment token"),a=BigInt(t.nativeSwapFeeWei),c=Number(t.paymentTokenDecimals),d=_e(o,"Anvil signer identity"),u=_e(t.owner,"Anvil envelope owner");if(d!==u)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let f=String(t.nftAction||"").toLowerCase();if(f!=="buy"&&f!=="sell")throw new Error("signer: unsupported Anvil NFT action");let p=Tm(t,f),w=Nm(t,f,p),g=t.anvilAttestation;if(!g||typeof g!="object"||Number(g.snapshotExpiresAtMs)<=Number(n))throw new Error("signer: fresh provider Anvil attestation required");let h=String(za(r.anvilRuntimeCodeHashes,i)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(h)||h!==String(g.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let y=za(r.nftPaymentTokenCaps,l);if(!y||Number(y.decimals)!==c)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let b=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(b)||BigInt(b)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let x=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(x))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let A=BigInt(x),k=await e.send("eth_getBlockByNumber",[x,!1]),v=String(k?.hash||"").toLowerCase();if(String(k?.number||"").toLowerCase()!==x||!/^0x[0-9a-f]{64}$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let _=Object.freeze({blockHash:v,requireCanonical:!0}),C=String(await e.send("eth_getCode",[i,_])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(C)||C==="0x")throw new Error("signer: Anvil market runtime is empty");let z=Am(C).toLowerCase();if(z!==h)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[W,R,$]=await Promise.all([ze(e,i,Re,"collection",_),ze(e,i,Re,"token",_),ze(e,i,Re,"robinhoodSwapFeeWei",_)]),Ke=_e(W,"live Anvil collection"),pt=_e(R,"live Anvil payment token"),Ft=BigInt($).toString();if(Ke!==s)throw new Error("signer: live Anvil collection mismatch");if(pt!==l)throw new Error("signer: live Anvil payment token mismatch");if(Ft!==a.toString())throw new Error("signer: live Anvil native swap fee mismatch");let jt=Number(await ze(e,pt,Ma,"decimals",_));if(!Number.isSafeInteger(jt)||jt!==c)throw new Error("signer: live Anvil payment token decimals mismatch");let mt=_e(await ze(e,Ke,Eo,"ownerOf",_,[m]),"live Anvil token owner"),Ge=null,Ye=null,Xe=null,Ze=null,q;if(f==="buy"){let[We,wt,E]=await Promise.all([ze(e,i,Re,"inventory",_,[m]),ze(e,pt,Ma,"allowance",_,[d,i]),e.send("eth_call",[{to:i,data:Re.encodeFunctionData("quoteSpecificBuy",[m])},_])]);Ge=!!We,Ye=BigInt(wt).toString();let I=Re.decodeFunctionResult("quoteSpecificBuy",E);if(q=Object.freeze({totalCostRaw:BigInt(I[0]).toString(),baseCostRaw:BigInt(I[1]).toString(),feeRaw:BigInt(I[2]).toString(),protocolFeeRaw:BigInt(I[3]).toString(),available:!!I[4]}),JSON.stringify(q)!==JSON.stringify(p))throw new Error("signer: exact Anvil buy quote changed after preparation");if(mt!==i)throw new Error("signer: exact Anvil token owner is not the market");if(!Ge)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(Ye)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(Ye)<w)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!q.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(q.totalCostRaw)!==w)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(q.totalCostRaw)!==BigInt(q.baseCostRaw)+BigInt(q.feeRaw)+BigInt(q.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[We,wt,E]=await Promise.all([ze(e,Ke,Eo,"getApproved",_,[m]),ze(e,Ke,Eo,"isApprovedForAll",_,[d,i]),e.send("eth_call",[{to:i,data:Re.encodeFunctionData("quoteSellNFT")},_])]);Xe=_e(We,"live Anvil token approval"),Ze=!!wt;let I=Re.decodeFunctionResult("quoteSellNFT",E);if(q=Object.freeze({netPayoutRaw:BigInt(I[0]).toString(),grossPayoutRaw:BigInt(I[1]).toString(),feeRaw:BigInt(I[2]).toString(),protocolFeeRaw:BigInt(I[3]).toString()}),JSON.stringify(q)!==JSON.stringify(p))throw new Error("signer: exact Anvil sell quote changed after preparation");if(mt!==d)throw new Error("signer: exact Anvil token owner does not match signer");if(Xe!==i&&!Ze)throw new Error("signer: live Anvil NFT approval is insufficient");if(Xe!==_e(t.preconditions?.approvedAddress,"prepared Anvil token approval")||Ze!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(q.netPayoutRaw)!==w)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(q.netPayoutRaw)+BigInt(q.feeRaw)+BigInt(q.protocolFeeRaw)!==BigInt(q.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:i,collection:Ke,paymentToken:pt,paymentTokenDecimals:jt,nativeSwapFeeWei:Ft,signerAddress:d,nftAction:f,tokenId:m.toString(),tokenOwner:mt,inventoryMember:Ge,allowanceRaw:Ye,approvedAddress:Xe,approvedForAll:Ze,quote:q,blockNumber:A.toString(),blockHash:v,runtimeCodeHash:z,verifiedAtMs:Number(n)})}function Wa(e,t,r="execution"){if(!e||!t)throw new Error("signer: complete Anvil revalidation evidence required");for(let n of["runtimeCodeHash","market","collection","paymentToken","paymentTokenDecimals","nativeSwapFeeWei","signerAddress","nftAction","tokenId","tokenOwner","inventoryMember","allowanceRaw","approvedAddress","approvedForAll"])if(String(t[n]).toLowerCase()!==String(e[n]).toLowerCase())throw new Error(`signer: Anvil ${n} changed after simulation at ${r}`);if(JSON.stringify(t.quote)!==JSON.stringify(e.quote))throw new Error(`signer: Anvil quote changed after simulation at ${r}`);return!0}function _m(e,t,r,n,{nowMs:o=Date.now(),timeoutMs:i=15e3,signerAddress:s}={}){let l=Sm(new URL("./anvil-attestation-worker.mjs",import.meta.url)),a={anvilRuntimeCodeHashes:n?.anvilRuntimeCodeHashes,nftPaymentTokenCaps:n?.nftPaymentTokenCaps},c;try{c=xm(process.execPath,[l],{input:JSON.stringify({rpcUrl:e,chainId:t,envelope:r,policy:a,nowMs:Number(o),signerAddress:s}),encoding:"utf8",timeout:i,maxBuffer:64e3,env:{PATH:process.env.PATH||"",HOME:process.env.HOME||"",NODE_OPTIONS:""},stdio:["pipe","pipe","pipe"]})}catch{throw new Error("signer: fresh independent Anvil attestation failed before reservation")}let d;try{d=JSON.parse(c)}catch{throw new Error("signer: invalid Anvil reservation attestation result")}if(!d||d.source!=="local-signer-trusted-rpc"||!/^0x[0-9a-f]{64}$/.test(String(d.blockHash||"")))throw new Error("signer: invalid Anvil reservation attestation result");return Object.freeze(d)}async function cr(e,t){let r=await fetch(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)}),n=await r.text();if(!r.ok)throw new Error(`rpc: HTTP ${r.status}`);let o=JSON.parse(n||"{}");if(o.error)throw new Error(`rpc: ${o.error.message||"request failed"}`);return o.result}function Ao(e){let t=Buffer.from(e),r=t[0]===128?t[1]:t[0];if(!Number.isInteger(r)||r<1||r>8)throw new Error(`signer: Solana message declares an implausible signature count (${r})`);return r}function So(e,t){let r=Array.isArray(t)?t:[t],n=Ao(e);if(r.length!==n)throw new Error(`signer: Solana message needs ${n} signature(s), got ${r.length}`);for(let o of r)if(Buffer.from(o).length!==64)throw new Error("signer: Solana signature must be 64 bytes");return Buffer.concat([Buffer.from([n]),...r.map(o=>Buffer.from(o)),Buffer.from(e)]).toString("base64")}function Rm({provider:e=null,readPolicy:t,rpc:r=cr,fetchImpl:n=fetch}={}){if(typeof t!="function")throw new TypeError("signer: execution observer requires readPolicy");return async o=>{let i=String(o?.surface||""),s=String(o?.signedTransactionId||"");if(!s)throw new Error("signer: execution observer requires signed transaction identity");if(i==="evm"||i==="evm-swap"||i==="evm-bridge"||i==="evm-nft"){if(!e||typeof e.getTransactionReceipt!="function")return null;let a=await e.getTransactionReceipt(s);return a?{transactionHash:s,status:a.status}:null}let l=t();if(i==="hl"){let{owner:a,cloid:c}=o;if(!/^0x[0-9a-f]{40}$/i.test(String(a))||!/^0x[0-9a-f]{32}$/i.test(String(c)))return null;let d=o.hlTestnet===!0?"https://api.hyperliquid-testnet.xyz/info":"https://api.hyperliquid.xyz/info",u=await n(d,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({type:"orderStatus",user:a,oid:c})});if(!u.ok)return null;let m=await u.json();if(m?.status!=="order"||m.order?.order?.cloid!==c)return null;let{status:f,order:p}=m.order;if(f==="filled")return{transactionHash:s,status:1,order:{orderId:String(p.oid),status:"filled",cloid:c}};let w=y=>/^\d+(?:\.\d+)?$/.test(String(y))?String(y).replace(/^0+(?=\d)/,"").replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):null,g=w(p.origSz),h=w(p.sz);return(/^(?:canceled|rejected|scheduledCancel)$/.test(f)||/(?:Canceled|Rejected)$/.test(f))&&g!==null&&Number(g)>0&&g===h?{transactionHash:s,status:0}:null}if(i==="sol"){let a=String(l.solRpcUrl||l.solanaRpcUrl||"");if(!a)return null;let d=(await r(a,{jsonrpc:"2.0",id:1,method:"getSignatureStatuses",params:[[s],{searchTransactionHistory:!0}]}))?.value?.[0];return d?d.err?{transactionHash:s,status:0}:d.confirmationStatus==="confirmed"||d.confirmationStatus==="finalized"||d.confirmations===null?{transactionHash:s,status:1}:null:null}if(i==="btc"){let a=String(l.btcRpcUrl||l.bitcoinRpcUrl||"").replace(/\/$/,"");if(!a)return null;try{let c=a.endsWith("/tx")?a.slice(0,-3):a,d=await n(`${c}/tx/${s}/status`);if(d.ok)return(await d.json())?.confirmed===!0?{transactionHash:s,status:1}:null}catch{}try{let c=await r(a,{jsonrpc:"1.0",id:"oracle",method:"getrawtransaction",params:[s,!0]});return Number(c?.confirmations||0)>0?{transactionHash:s,status:1}:null}catch{return null}}return null}}async function Va(e,t,r){let n=String(e.btcRpcUrl||e.bitcoinRpcUrl||"").replace(/\/$/,"");if(!n)throw new Error("signer: btcRpcUrl required for Bitcoin simulation and broadcast");return cr(n,{jsonrpc:"1.0",id:"oracle",method:t,params:r})}async function Lm(e,t,r){let n=String(e.btcRpcUrl||e.bitcoinRpcUrl||"").replace(/\/$/,"");if(!n)throw new Error("signer: btcRpcUrl required for Bitcoin simulation");let o=n.endsWith("/tx")?n.slice(0,-3):n;try{let s=await fetch(`${o}/tx/${t}/outspend/${r}`);if(s.ok){let l=await s.json();if(l?.spent===!0)throw new Error("signer: Bitcoin input already spent");if(l?.spent===!1)return!0}}catch(s){if(/already spent/.test(String(s?.message||s)))throw s}if(!await Va(e,"gettxout",[t,Number(r),!0]))throw new Error("signer: Bitcoin input unavailable for simulation");return!0}function $m(e){if(!e||typeof e!="object"||!e.value||typeof e.value!="object"||!Object.prototype.hasOwnProperty.call(e.value,"err"))throw new Error("signer: Solana simulation result missing");if(e.value.err!==null)throw new Error("signer: Solana simulation failed");return!0}function Pm(e,t,{fetchImpl:r=fetch}={}){return{simulate:async(n,o)=>(Pe(o,e()),!0),sign:async(n,o)=>{Pe(o,e());let i=e();if(!(Array.isArray(i.owners)?i.owners:[]).some(l=>String(l).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: HL wallet is not an allowed policy owner");if(String(o.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: HL wallet must match envelope owner");return n?.typedData?($i(n),t.signTypedData(n.typedData.domain,n.typedData.types,n.typedData.message)):Pi({wallet:t,action:n.action,nonce:n.nonce,isMainnet:!String(n.submitTo||"").includes("testnet")})},broadcast:async(n,o,i)=>{Pe(i,e());let{Signature:s,keccak256:l}=await import("ethers"),a=s.from(n),c=await r(o.submitTo,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:o.action,nonce:o.nonce,signature:{r:a.r,s:a.s,v:a.v}})});if(!c.ok)throw new Error("signer: Hyperliquid exchange rejected the action");let d=await c.json().catch(()=>{throw new Error("signer: Hyperliquid exchange rejected the action")});if(d?.status!=="ok")throw new Error("signer: Hyperliquid exchange rejected the action");let u=o.action.type==="order"?d.response?.data?.statuses?.[0]:null;if(u&&Object.hasOwn(u,"error"))throw new Error("signer: Hyperliquid rejected the order");let m=u?.filled?"filled":u?.resting?"resting":null,f=m?u[m]:null;return{hash:l(n),status:1,...f?.oid!=null?{order:{orderId:String(f.oid),status:m,cloid:o.action.orders[0].c??null}}:{}}}}}function Bm(e){return{simulate:async(t,r)=>(De(r,e()),!0),sign:async(t,r)=>{De(r,e());let n=e();if(typeof n.lighterSignImpl!="function")throw new Error("lighter: official Lighter signer required");let o=await n.lighterSignImpl(t,r);return Zt(t,o),typeof o=="string"?o:JSON.stringify(o)},broadcast:async(t,r,n)=>{let o=De(n,e()),i=Zt(r,t),s=Fi(i),l=await fetch(o.submitTo,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:s}),a=await l.json().catch(()=>({}));if(!l.ok||Number(a?.code)!==200)throw new Error("signer: Lighter sendTx rejected the order");return{hash:String(a?.tx_hash||a?.txHash||"lighter"),status:1}}}}function Dm(e,t){return{simulate:async(r,n)=>(rt(n,e()),!0),sign:async(r,n)=>{rt(n,e());let o=e();if(!(Array.isArray(o.owners)?o.owners:[]).some(c=>String(c).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: order wallet is not an allowed policy owner");if(String(n.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: order wallet must match envelope owner");let s=r.domain||r.typedData.domain,l=r.types||r.typedData.types,a=r.message||r.typedData.message;return t.signTypedData(s,l,a)},broadcast:async(r,n,o)=>{let i=rt(o,e()),{keccak256:s}=await import("ethers"),l=n.message||n.typedData.message,a=i.kind==="cow"?{sellToken:l.sellToken,buyToken:l.buyToken,receiver:l.receiver,sellAmount:l.sellAmount,buyAmount:l.buyAmount,validTo:l.validTo,appData:l.appData,feeAmount:l.feeAmount,kind:l.kind,partiallyFillable:l.partiallyFillable,sellTokenBalance:l.sellTokenBalance,buyTokenBalance:l.buyTokenBalance,from:o.owner,signature:r,signingScheme:"eip712",quoteId:n.quoteId??void 0}:{orderHash:i.digest,signature:r,data:l},c=await fetch(i.submitTo,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>({}));if(!c.ok||d?.error||d?.success===!1)throw new Error(i.kind==="cow"?"signer: CoW orderbook rejected the order":"signer: 1inch orderbook rejected the order");return{hash:s(r),status:1,orderHash:i.digest,uid:typeof d=="string"?d:d?.uid||null}}}}function Fm(e,t){return{simulate:async(r,n)=>(Be(n,e()),!0),sign:async(r,n)=>{Be(n,e());let o=e();if(!(Array.isArray(o.owners)?o.owners:[]).some(s=>String(s).toLowerCase()===String(t.address).toLowerCase()))throw new Error("signer: Poly wallet is not an allowed policy owner");if(String(n.owner||"").toLowerCase()!==String(t.address).toLowerCase())throw new Error("signer: Poly wallet must match envelope owner");return t.signTypedData(r.domain,r.types,r.message)},broadcast:async(r,n,o)=>{let i=e(),s=Be(o,i),l=mn(i),{keccak256:a}=await import("ethers"),c=oi({message:n.message,side:n.side,signature:r,orderType:n.orderType||"GTC",apiKey:l.key}),d=JSON.stringify(c),u=ri({creds:l,address:o.owner,method:"POST",path:"/order",body:d}),m=await fetch(s.submitTo,{method:"POST",headers:u,body:d}),f=await m.json().catch(()=>({}));if(!m.ok||f?.success===!1||f?.error||f?.errorMsg)throw new Error("signer: Polymarket CLOB rejected the order");return{hash:a(r),status:1}}}}function jm(e,t){let r=uo(t);return{simulate:async n=>{let o=e(),i=bo.fromPSBT(Buffer.from(n.psbt,"base64"));return await Promise.all(Array.from({length:i.inputsLength},(s,l)=>{let a=i.getInput(l),c=Buffer.from(a.txid||[]).toString("hex");return Lm(o,c,a.index)})),!0},sign:n=>{let o=bo.fromPSBT(Buffer.from(n.psbt,"base64"));return o.sign(r),Buffer.from(o.toPSBT()).toString("base64")},broadcast:async n=>{let o=e(),i=String(o.btcRpcUrl||o.bitcoinRpcUrl||"").replace(/\/$/,"");if(!i)throw new Error("signer: btcRpcUrl required for Bitcoin broadcast");let s=bo.fromPSBT(Buffer.from(n,"base64"));s.finalize(),s.extract();let l;try{let c=await fetch(i.endsWith("/tx")?i:`${i}/tx`,{method:"POST",headers:{"content-type":"text/plain"},body:s.hex});if(l=(await c.text()).trim(),!c.ok)throw new Error(`signer: Bitcoin broadcast failed ${c.status}`)}catch(c){if(!/Bitcoin broadcast failed 404/.test(String(c?.message||c)))throw c;l=await Va(o,"sendrawtransaction",[s.hex])}if(l&&String(l).toLowerCase()!==s.id.toLowerCase())throw new Error("signer: Bitcoin broadcast txid mismatch");let a=null;try{let c=i.endsWith("/tx")?i.slice(0,-3):i,d=await fetch(`${c}/tx/${s.id}/status`);d.ok&&(a=(await d.json())?.confirmed===!0?1:null)}catch{}return{hash:s.id,status:a}}}}function qm(e,t){let r=uo(t);return{simulate:async n=>{let o=e(),i=String(o.solRpcUrl||o.solanaRpcUrl||"");if(!i)throw new Error("signer: solRpcUrl required for Solana simulation");let s=Buffer.from(n.messageBase64,"base64"),l=Ao(s),a=So(s,Array.from({length:l},()=>new Uint8Array(64))),c=await cr(i,{jsonrpc:"2.0",id:1,method:"simulateTransaction",params:[a,{encoding:"base64",sigVerify:!1,replaceRecentBlockhash:!1}]});return $m(c)},sign:n=>{let o=Buffer.from(n.messageBase64,"base64"),i=Ao(o),s=vm.sign(o,r);if(i===1)return So(o,[s]);let l=Array.isArray(n.cosignatures)?n.cosignatures:[];if(l.length!==i-1)throw new Error(`signer: Solana message needs ${i-1} cosignature(s), got ${l.length}`);return So(o,[s,...l.map(a=>Buffer.from(String(a),"base64"))])},broadcast:async n=>{let o=e(),i=String(o.solRpcUrl||o.solanaRpcUrl||"");if(!i)throw new Error("signer: solRpcUrl required for Solana broadcast");let s=await cr(i,{jsonrpc:"2.0",id:1,method:"sendTransaction",params:[n,{encoding:"base64",skipPreflight:!1,maxRetries:3}]}),a=(await cr(i,{jsonrpc:"2.0",id:1,method:"getSignatureStatuses",params:[[s],{searchTransactionHistory:!0}]}))?.value?.[0];if(a?.err)return{hash:s,status:0};let c=a?.confirmationStatus==="confirmed"||a?.confirmationStatus==="finalized"||a?.confirmations===null;return{hash:s,status:c?1:null}}}}function Mm(e,t={}){for(let r of Object.keys(t||{}))if(Object.prototype.hasOwnProperty.call(e,r))throw new Error(`signer: cannot replace built-in ${r} transport`)}async function Hm(e,t,r,n,{submitPrivate:o}={}){if((await e.getNetwork()).chainId!==BigInt(r.chainId))throw new Error("signer: RPC chain mismatch");let s={native:(await e.getBalance(r.from)).toString()},l=n&&n.privateRelay;if(l&&typeof o=="function"){let u=l==="require"||l?.mode==="require";try{let m=await o(t,{chainId:Number(r.chainId),requirePrivate:u,allowPublicFallback:!u});if(!m.fellBack&&m.hash){let f=await e.waitForTransaction(m.hash),p={native:(await e.getBalance(r.from)).toString()};return{hash:m.hash,status:f?.status??null,verifiedBefore:s,verifiedAfter:p,submission:{path:"private",mode:m.mode,endpoint:m.endpoint}}}}catch(m){if(u)throw m}}let a=await e.broadcastTransaction(t),c=await a.wait(),d={native:(await e.getBalance(r.from)).toString()};return{hash:c?.hash??a.hash,status:c?.status??null,verifiedBefore:s,verifiedAfter:d,submission:{path:"public"}}}async function VE({configDir:e,passphraseFile:t,credentialService:r,surfaceTransports:n={},host:o="127.0.0.1",port:i=9462,sessionMs:s=12e4}={}){let{JsonRpcProvider:l,Wallet:a}=await import("ethers");if(!t&&!r)throw new Error("signer: --credential-service or --passphrase-file is required for non-interactive service start");if(s<1e3||s>12e4)throw new Error("signer: session must be at most 120 seconds");let c=km(e),d=()=>Object.freeze(Jr(c.policy,c.policyKey,{sequenceAnchorFile:c.policyAnchor})),u=d(),m=String(process.env.ORACLE_OWNER_TELEGRAM||"").split(",").map(E=>E.trim()).filter(Boolean),f=m.length?ja({keyFile:c.policyKey,approvedTelegramOwners:m}):null;if(K(u,"cex")&&!f)throw new Error("signer: cex requires an approved Telegram owner context");if(!["exact-human","auto-within-rails"].includes(u.confirmationMode))throw new Error("signer: confirmationMode must be exact-human or auto-within-rails");if(u.confirmationMode==="auto-within-rails"&&process.env.ORACLE_AUTONOMOUS_TRADING!=="1")throw new Error("signer: auto-within-rails requires ORACLE_AUTONOMOUS_TRADING=1");let p=["surfaces","actions","destinations","owners"];u.surfaces.some(E=>String(E).startsWith("evm"))&&p.push("chains","spenders");for(let E of p)if(!Array.isArray(u[E])||u[E].length===0)throw new Error(`signer: ${E} allowlist is empty`);if(u.surfaces.some(E=>E==="evm-swap"||E==="evm-bridge"||E==="evm-nft"||E==="evm-order")){for(let E of["providers"])if(!Array.isArray(u[E])||u[E].length===0)throw new Error(`signer: ${E} allowlist is empty`)}if(u.surfaces.some(E=>E==="evm-swap"||E==="evm-bridge"||E==="evm-order")&&(!Array.isArray(u.tokens)||u.tokens.length===0))throw new Error("signer: tokens allowlist is empty");if(u.surfaces.some(E=>String(E).startsWith("evm")&&E!=="evm-order")&&(!Array.isArray(u.selectors)||u.selectors.length===0))throw new Error("signer: selectors allowlist is empty");if(u.surfaces.includes("sol")&&(!Array.isArray(u.programs)||u.programs.length===0))throw new Error("signer: programs allowlist is empty");if(K(u,"poly")&&(mn(u),!Array.isArray(u.polyTokens)||u.polyTokens.length===0))throw new Error("signer: polyTokens allowlist is empty");if(K(u,"lighter")&&(!Array.isArray(u.lighterMarkets)||u.lighterMarkets.length===0))throw new Error("signer: lighterMarkets allowlist is empty");if(K(u,"cex")&&(!u.cexAccounts||Object.keys(u.cexAccounts).length===0))throw new Error("signer: cexAccounts allowlist is empty");if(K(u,"hl")){let E=Array.isArray(u.coins)?u.coins.map(String):[],I=Array.isArray(u.hlMarkets)?u.hlMarkets:[];if(E.filter(j=>j!=="*"&&j!=="#*").length&&!E.includes("*")&&I.length===0)throw new Error("signer: restricted hl coins require hlMarkets pairs")}let w=r?wa(r):L(t),g=oa(c.vault),h=na(g,w),y;try{y=Aa(h,g.meta)}finally{h.fill(0)}if((Ha(u)||K(u,"hl")||K(u,"poly"))&&xo("evm",y.evm,u.owners),K(u,"btc")&&xo("btc",y.btc,u.owners),K(u,"sol")&&xo("sol",y.sol,u.owners),K(u,"cex")){if(!y.cex||Object.keys(y.cex).length===0)throw new Error("signer: local CEX credential records required");for(let[E,I]of Object.entries(u.cexAccounts)){let T=y.cex[E];if(!T||T.accountId!==I.accountId||!I.venues.includes(T.venue)||I.credentialRecordRef!==E)throw new Error("signer: CEX credential venue/account binding refused")}}let b=Array.isArray(u.chains)?u.chains.filter(E=>Number.isInteger(Number(E))&&String(E).trim()!==""):[],x=Ha(u);if(x&&(b.length!==1||!u.rpcUrl))throw new Error("signer: EVM surfaces require one chain and one RPC URL");if(K(u,"btc")&&!(u.btcRpcUrl||u.bitcoinRpcUrl))throw new Error("signer: btcRpcUrl required for Bitcoin broadcast");if(K(u,"sol")&&!(u.solRpcUrl||u.solanaRpcUrl))throw new Error("signer: solRpcUrl required for Solana simulation and broadcast");let A=x?new l(u.rpcUrl,Number(b[0])):null,k=y.evm&&(x||K(u,"hl")||K(u,"poly"))?A?new a(y.evm.secret).connect(A):new a(y.evm.secret):null,v=A?{simulate:async E=>{if((await A.getNetwork()).chainId!==BigInt(E.chainId))throw new Error("signer: RPC chain mismatch");return await A.call(E),!0},sign:E=>k.signTransaction(E),broadcast:(E,I,T)=>Hm(A,E,I,T,{submitPrivate:sa})}:null,_=A?async E=>zm(A,E):void 0,C=new Map,z=E=>E?.surface==="evm-nft"&&String(E?.provider).toLowerCase()==="anvil-nft",W=async(E,I=d(),T="execution")=>{if(!z(E))return null;let j=await Cm(A,E,I,{nowMs:Date.now(),signerAddress:k.address}),Y=C.get(G(E));return Y&&Wa(Y,j,T),j},R={...v?{evm:v,"evm-swap":v,"evm-bridge":v,"evm-nft":v}:{},...k&&K(u,"evm-order")?{"evm-order":Dm(d,k)}:{},...y.btc?{btc:jm(d,y.btc)}:{},...y.sol?{sol:qm(d,y.sol)}:{},...k&&K(u,"hl")?{hl:Pm(d,k)}:{},...k&&K(u,"poly")?{poly:Fm(d,k)}:{},...K(u,"lighter")?{lighter:Bm(d)}:{}};Mm(R,n);let $=Ri({...R,...n}),Ke=new Set(Object.keys(R)),pt=new Set(Object.keys(n||{})),Ft=u.surfaces.filter(E=>E!=="cex"&&!Ke.has(E)&&!pt.has(E));if(Ft.length)throw new Error(`signer: ${Ft.join(",")} require local keys or injected surface transports`);let jt=Date.now(),mt=jt+s,Ge=!1,Ye=!1,Xe=()=>{if(!Ye){Ye=!0;for(let E of Object.values(y.cex||{}))for(let I of["apiKeyBytes","apiSecretBytes","passphraseBytes"])E[I]?.fill?.(0)}},Ze=()=>Ge?!1:qa.existsSync(c.lock)?(Ge=!0,!1):qa.existsSync(c.vault)&&Date.now()<mt,q=Im({isArmed:Ze,disarmNow:()=>{Ge=!0,Xe(),Ae(c.lock,`disarmed ${new Date().toISOString()}
24
24
  `)}}),We=Xi({host:o,port:i,token:Om(c.token),policy:u,readPolicy:d,isArmed:Ze,disarm:q.disarm,armGeneration:q.armGeneration,broadcastWithArmFence:q.broadcastWithArmFence,sessionExpiresAtMs:mt,executionOutbox:fs({path:c.executionOutbox,now:Date.now}),observeExecutionTransaction:Rm({provider:A,readPolicy:d}),nowMs:Date.now,simulate:async(E,I)=>(await W(I,d(),"before simulation"),Er(I,$).simulate(E,I)),estimateNetworkFees:_,sign:async(E,I)=>(await W(I,d(),"before signing"),Er(I,$).sign(E,I)),verifySigned:(E,I,T)=>zi(T?.surface||"evm",E,I,T),broadcast:async(E,I,T)=>(await W(T,d(),"before broadcast"),Er(T,$).broadcast(E,I,T)),confirmArtifact:async(E,I,T)=>{let j=await W(E,T),Y=await Um(E,I,T,j);return Y===!0&&j&&C.set(I,j),Y},decodeEconomics:(E,I)=>vn(E,I),reserveLedger:(E,I,T={})=>{let j=E?.version===1&&E?.surface?E:null,Y=j?.artifact||E;if(z(j)){let Qe=G(j),Ue=C.get(Qe);if(!Ue||Date.now()-Number(Ue.verifiedAtMs)>15e3)throw new Error("signer: fresh independent Anvil attestation required before reservation");let qt=_m(I.rpcUrl,Y.chainId,j,I,{nowMs:Date.now(),signerAddress:k.address});Wa(Ue,qt,"before reservation"),C.set(Qe,qt)}let lr=j?.tradeId||Y?.tradeId;if(!lr)throw new Error("ledger: executable artifact requires a tradeId");let ye;if(j)ye=vn(j,I);else{if(Y?.value===void 0)throw new Error("ledger: executable artifact value required");let Qe=BigInt(Y.value),Ue=BigInt(Y.gasLimit??0),qt=BigInt(Y.maxFeePerGas??Y.gasPrice??0);if(Ue<=0n||qt<=0n)throw new Error("ledger: legacy EVM artifact requires gasLimit and fee per gas");let Io=Ue*qt+BigInt(Y.l1FeeWei??0)+BigInt(Y.operatorFeeWei??0);ye={unit:"wei",value:Qe.toString(),notional:(Qe+Io).toString(),fee:Io.toString()}}if(Array.isArray(ye.units))return ir({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:lr,units:ye.units,policy:I,retryReleasedTradeId:T.retryReleasedTradeId});if(ye.value===void 0||ye.notional===void 0)throw new Error("ledger: decoded value and notional required");return ir({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:lr,...ye,policy:I,retryReleasedTradeId:T.retryReleasedTradeId})},commitLedger:E=>la({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:E.tradeId}),releaseLedger:E=>ua({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:E.tradeId}),settleFailedLedger:E=>fa({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:E.tradeId}),validateReservation:(E,I,T)=>ca({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,reservation:E,policy:I,economics:T}),verifyFeeWaiver:(E,I)=>ma(E,I,c.policyKey),verifyTriggerAttestation:(E,I,T)=>pa(E,I,c.policyKey,T),inspectCex:Gr,verifyOwnerProof:f?(E,I)=>f.verify(E,I):void 0,verifyCexOwnerProof:f?(E,I)=>f.verify(E,I):void 0,cexExecute:K(u,"cex")?async E=>{let I=d(),T=Gr(E,I,Date.now()),j=T.kind==="spot-limit-create"?"create":T.kind==="spot-limit-cancel"?"cancel":"status";j==="create"&&Ia({envelope:E,paths:c,nowMs:Date.now()});let Y=j==="create"?{operation:j,symbol:T.symbol,side:T.side,baseSize:T.baseSize,limitPrice:T.limitPrice,clientOrderId:T.clientOrderId}:{operation:j,symbol:T.symbol,venueOrderId:T.venueOrderId};return Pa({credential:ye=>y.cex[ye],settleLedger:({tradeId:ye,disposition:Qe,filledQuote:Ue})=>da({file:c.ledger,keyFile:c.policyKey,anchorFile:c.ledgerAnchor,policyAnchorFile:c.policyAnchor,tradeId:ye,expectedUnit:T.unit,filledQuote:Ue,disposition:Qe})}).execute({venue:T.venue,accountId:T.accountId,credentialRef:T.credentialRef,tradeId:T.tradeId,reservedNotional:T.notional,order:Y,store:Ta({file:c.cexOrders,keyFile:c.policyKey,anchorFile:c.cexOrdersAnchor})})}:void 0,ledgerObserver:Qs(process.env)?ea({path:c.workflowLedger,telemetry:ra(process.env),onError:E=>{try{console.error(`signer: ${E}`)}catch{}}}):null,autonomous:process.env.ORACLE_AUTONOMOUS_TRADING==="1",env:process.env}),wt=setTimeout(()=>We.close(),s);return wt.unref(),We.on("close",()=>{clearTimeout(wt),Xe()}),We.listen(i,o),We}var Zr="0x420000000000000000000000000000000000000F";function Ua(e){let t=e?.code;if(t==="CALL_EXCEPTION"||t==="BAD_DATA")return!0;let r=String(e?.shortMessage||e?.message||e);return/network|timeout|ECONN|ENOTFOUND|EAI_AGAIN|server error|fetch failed|socket/i.test(r)?!1:/execution reverted|revert|invalid opcode|function selector|could not decode/i.test(r)}async function zm(e,t){if(!ke(t?.chainId))return{l1FeeWei:"0",operatorFeeWei:"0"};if(!e||typeof e.call!="function")throw new Error("policy: rollup fee estimate required");let{Interface:r,Transaction:n}=await import("ethers"),o=new r(["function getL1Fee(bytes) view returns (uint256)","function getOperatorFee(uint256) view returns (uint256)","function operatorFeeScalar() view returns (uint32)","function operatorFeeConstant() view returns (uint64)"]),i;try{i=n.from({chainId:t.chainId,to:t.to,data:t.data,value:t.value,gasLimit:t.gasLimit,gasPrice:t.gasPrice,maxFeePerGas:t.maxFeePerGas,maxPriorityFeePerGas:t.maxPriorityFeePerGas,nonce:t.nonce??0,type:t.type,accessList:t.accessList}).unsignedSerialized}catch{throw new Error("policy: rollup fee estimate required")}let s;try{let l=await e.call({to:Zr,data:o.encodeFunctionData("getL1Fee",[i])});s=o.decodeFunctionResult("getL1Fee",l)[0].toString()}catch{throw new Error("policy: rollup fee estimate required")}return{l1FeeWei:s,operatorFeeWei:await Wm(e,o,t.gasLimit)}}async function Wm(e,t,r){let n;try{n=BigInt(r)}catch{throw new Error("policy: rollup fee estimate required")}if(n<0n)throw new Error("policy: rollup fee estimate required");try{let o=await e.call({to:Zr,data:t.encodeFunctionData("getOperatorFee",[n])});return t.decodeFunctionResult("getOperatorFee",o)[0].toString()}catch(o){if(!Ua(o))throw new Error("policy: rollup fee estimate required")}try{let o=await e.call({to:Zr,data:t.encodeFunctionData("operatorFeeScalar")}),i=await e.call({to:Zr,data:t.encodeFunctionData("operatorFeeConstant")}),s=BigInt(t.decodeFunctionResult("operatorFeeScalar",o)[0]),l=BigInt(t.decodeFunctionResult("operatorFeeConstant",i)[0]);return(n*s/1000000n+l).toString()}catch(o){if(!Ua(o))throw new Error("policy: rollup fee estimate required");return"0"}}async function Um(e,t,r,n=null){return process.stdin.isTTY?(process.stderr.write(wr(e,t,r,n)),process.stdin.resume(),new Promise(o=>{let i=s=>{process.stdin.off("data",i),process.stdin.pause(),o(String(s).trim()===t)};process.stdin.once("data",i)})):!1}export{Wa as assertAnvilAttestationUnchanged,Mm as assertNoBuiltinTransportOverride,UE as assertSignerIdentity,Cm as attestAnvilMarket,_m as attestAnvilMarketSync,Hm as broadcastEvmSigned,Rm as createExecutionTransactionObserver,Pm as createHlTransport,Im as createSerializedArmFence,Om as ensureSignerToken,zm as estimateProviderNetworkFees,wr as renderConfirmationArtifact,km as signerPaths,VE as startLocalSigner};